// Code generated by @openmeter/typespec-go. DO NOT EDIT. package openmeter import ( "context" "fmt" "iter" "net/http" "net/url" ) type AddonsService struct { client *Client } type AddonFilter struct { ID *StringExactFilter Key *StringFilter Name *StringFilter Status *StringExactFilter Currency *StringExactFilter } type AddonListParams struct { Page *PageParams Sort *Sort Filter *AddonFilter } func (p AddonListParams) values() url.Values { q := url.Values{} addPageParams(q, p.Page) addSort(q, "sort", p.Sort) if p.Filter != nil { addStringExactFilter(q, "filter[id]", p.Filter.ID) addStringFilter(q, "filter[key]", p.Filter.Key) addStringFilter(q, "filter[name]", p.Filter.Name) addStringExactFilter(q, "filter[status]", p.Filter.Status) addStringExactFilter(q, "filter[currency]", p.Filter.Currency) } return q } // List all add-ons. func (s *AddonsService) List(ctx context.Context, params AddonListParams) (*AddonPagePaginatedResponse, error) { path := "/openmeter/addons" req, err := s.client.newRequestWithContentType(ctx, http.MethodGet, path, params.values(), nil, "", "application/json") if err != nil { return nil, err } var out AddonPagePaginatedResponse if err := s.client.doJSON(req, &out); err != nil { return nil, err } return &out, nil } // ListAll returns an iterator over all Addon results, fetching pages of List transparently. Iteration stops at the first error, which is yielded as the second value. func (s *AddonsService) ListAll(ctx context.Context, params AddonListParams) iter.Seq2[Addon, error] { return paginate(params.Page, func(page, size int) ([]Addon, int, error) { pageParams := params pageParams.Page = &PageParams{Size: Int(size), Number: Int(page)} resp, err := s.List(ctx, pageParams) if err != nil { return nil, 0, err } return resp.Data, resp.Meta.Page.Total, nil }) } // Create a new add-on. func (s *AddonsService) Create(ctx context.Context, request CreateAddonRequest) (*Addon, error) { path := "/openmeter/addons" req, err := s.client.newRequestWithContentType(ctx, http.MethodPost, path, nil, request, "application/json", "application/json") if err != nil { return nil, err } var out Addon if err := s.client.doJSON(req, &out); err != nil { return nil, err } return &out, nil } // Update an add-on by id. func (s *AddonsService) Update(ctx context.Context, addonID string, request UpsertAddonRequest) (*Addon, error) { if addonID == "" { return nil, fmt.Errorf("openmeter: %s must not be empty: %w", "addonID", ErrEmptyID) } path := "/openmeter/addons/{addonId}" path = replacePathParam(path, "addonId", addonID) req, err := s.client.newRequestWithContentType(ctx, http.MethodPut, path, nil, request, "application/json", "application/json") if err != nil { return nil, err } var out Addon if err := s.client.doJSON(req, &out); err != nil { return nil, err } return &out, nil } // Get add-on by id. func (s *AddonsService) Get(ctx context.Context, addonID string) (*Addon, error) { if addonID == "" { return nil, fmt.Errorf("openmeter: %s must not be empty: %w", "addonID", ErrEmptyID) } path := "/openmeter/addons/{addonId}" path = replacePathParam(path, "addonId", addonID) req, err := s.client.newRequestWithContentType(ctx, http.MethodGet, path, nil, nil, "", "application/json") if err != nil { return nil, err } var out Addon if err := s.client.doJSON(req, &out); err != nil { return nil, err } return &out, nil } // Soft delete add-on by id. func (s *AddonsService) Delete(ctx context.Context, addonID string) error { if addonID == "" { return fmt.Errorf("openmeter: %s must not be empty: %w", "addonID", ErrEmptyID) } path := "/openmeter/addons/{addonId}" path = replacePathParam(path, "addonId", addonID) req, err := s.client.newRequestWithContentType(ctx, http.MethodDelete, path, nil, nil, "", "") if err != nil { return err } _, err = s.client.doRaw(req) return err } // Archive an add-on version. func (s *AddonsService) Archive(ctx context.Context, addonID string) (*Addon, error) { if addonID == "" { return nil, fmt.Errorf("openmeter: %s must not be empty: %w", "addonID", ErrEmptyID) } path := "/openmeter/addons/{addonId}/archive" path = replacePathParam(path, "addonId", addonID) req, err := s.client.newRequestWithContentType(ctx, http.MethodPost, path, nil, nil, "", "application/json") if err != nil { return nil, err } var out Addon if err := s.client.doJSON(req, &out); err != nil { return nil, err } return &out, nil } // Publish an add-on version. func (s *AddonsService) Publish(ctx context.Context, addonID string) (*Addon, error) { if addonID == "" { return nil, fmt.Errorf("openmeter: %s must not be empty: %w", "addonID", ErrEmptyID) } path := "/openmeter/addons/{addonId}/publish" path = replacePathParam(path, "addonId", addonID) req, err := s.client.newRequestWithContentType(ctx, http.MethodPost, path, nil, nil, "", "application/json") if err != nil { return nil, err } var out Addon if err := s.client.doJSON(req, &out); err != nil { return nil, err } return &out, nil }