package client import ( "context" "net/http" "strconv" ) // CreateGarden creates a garden owned by the authenticated user. func (c *Client) CreateGarden(ctx context.Context, input CreateGardenInput) (Garden, *Response, error) { var envelope struct { Garden Garden `json:"garden"` } response, err := c.do(ctx, http.MethodPost, "v1/gardens", input, &envelope) return envelope.Garden, response, err } // Gardens lists gardens visible to the authenticated user. func (c *Client) Gardens(ctx context.Context) ([]Garden, *Response, error) { var envelope struct { Gardens []Garden `json:"gardens"` } response, err := c.do(ctx, http.MethodGet, "v1/gardens", nil, &envelope) return envelope.Gardens, response, err } // Garden returns one garden visible to the authenticated user. func (c *Client) Garden(ctx context.Context, gardenID int) (Garden, *Response, error) { var envelope struct { Garden Garden `json:"garden"` } response, err := c.do(ctx, http.MethodGet, gardenPath(gardenID), nil, &envelope) return envelope.Garden, response, err } // UpdateGarden partially updates a garden. func (c *Client) UpdateGarden(ctx context.Context, gardenID int, input UpdateGardenInput) (Garden, *Response, error) { var envelope struct { Garden Garden `json:"garden"` } response, err := c.do(ctx, http.MethodPatch, gardenPath(gardenID), input, &envelope) return envelope.Garden, response, err } // DeleteGarden permanently deletes a garden and its dependent records. func (c *Client) DeleteGarden(ctx context.Context, gardenID int) (*Response, error) { return c.do(ctx, http.MethodDelete, gardenPath(gardenID), nil, nil) } func gardenPath(gardenID int) string { return "v1/gardens/" + strconv.Itoa(gardenID) }