package builder import ( "context" "git.dragse.it/anthrove/e621-sdk-go/pkg/e621/endpoints" "git.dragse.it/anthrove/e621-sdk-go/pkg/e621/model" ) // UserBuilder represents a builder for constructing queries to retrieve user information. type UserBuilder interface { // SetUsername sets the username for the query to retrieve user information. SetUsername(username string) UserBuilder // Execute sends the constructed query and returns the requested user information and an error, if any. Execute() (model.User, error) } // NewGetUserBuilder creates a new instance of UserBuilder with the provided RequestContext. // // Parameters: // - requestContext: The context for the API request, including the host, user agent, username, and API key. // // Returns: // - UserBuilder: An instance of the UserBuilder interface. func NewGetUserBuilder(requestContext model.RequestContext) UserBuilder { return &getUser{requestContext: requestContext} } // getUser is an implementation of the UserBuilder interface. type getUser struct { requestContext model.RequestContext username string } // SetUsername sets the username for the query to retrieve user information. // // Parameters: // - username: The username to retrieve information for. // // Returns: // - UserBuilder: The instance of the UserBuilder for method chaining. func (g *getUser) SetUsername(username string) UserBuilder { g.username = username return g } // Execute sends the constructed query and returns the requested user information and an error, if any. // // Returns: // - model.User: The user information. // - error: An error, if any, encountered during the API request or response handling. func (g *getUser) Execute() (model.User, error) { if g.requestContext.RateLimiter != nil { err := g.requestContext.RateLimiter.Wait(context.Background()) if err != nil { return model.User{}, err } } user, err := endpoints.GetUser(g.requestContext, g.username) if err != nil { return model.User{}, err } return user, nil }