// Code generated by @openmeter/typespec-go. DO NOT EDIT. package openmeter import ( "context" "iter" "net/http" "net/url" ) type EventsService struct { client *Client } type IngestedEventFilter struct { // Filter events by ID. ID *StringFilter // Filter events by source. Source *StringFilter // Filter events by subject. Subject *StringFilter // Filter events by type. Type *StringFilter // Filter events by the associated customer ID. CustomerID *StringExactFilter // Filter events by event time. Time *DateTimeFilter // Filter events by the time the event was ingested. IngestedAt *DateTimeFilter // Filter events by the time the event was stored. StoredAt *DateTimeFilter } type IngestedEventListParams struct { Page *CursorPageParams Filter *IngestedEventFilter Sort *Sort } func (p IngestedEventListParams) values() url.Values { q := url.Values{} addCursorPageParams(q, p.Page) if p.Filter != nil { addStringFilter(q, "filter[id]", p.Filter.ID) addStringFilter(q, "filter[source]", p.Filter.Source) addStringFilter(q, "filter[subject]", p.Filter.Subject) addStringFilter(q, "filter[type]", p.Filter.Type) addStringExactFilter(q, "filter[customer_id]", p.Filter.CustomerID) addDateTimeFilter(q, "filter[time]", p.Filter.Time) addDateTimeFilter(q, "filter[ingested_at]", p.Filter.IngestedAt) addDateTimeFilter(q, "filter[stored_at]", p.Filter.StoredAt) } addSort(q, "sort", p.Sort) return q } // List ingested events. func (s *EventsService) List(ctx context.Context, params IngestedEventListParams) (*IngestedEventPaginatedResponse, error) { path := "/openmeter/events" req, err := s.client.newRequestWithContentType(ctx, http.MethodGet, path, params.values(), nil, "", "application/json") if err != nil { return nil, err } var out IngestedEventPaginatedResponse if err := s.client.doJSON(req, &out); err != nil { return nil, err } return &out, nil } // ListAll returns an iterator over all IngestedEvent results, fetching pages of List transparently. Iteration stops at the first error, which is yielded as the second value. func (s *EventsService) ListAll(ctx context.Context, params IngestedEventListParams) iter.Seq2[IngestedEvent, error] { return paginateCursor(params.Page, func(after, before *string, size int) ([]IngestedEvent, *string, *string, error) { pageParams := params pageParams.Page = &CursorPageParams{Size: Int(size), After: after, Before: before} resp, err := s.List(ctx, pageParams) if err != nil { return nil, nil, nil, err } return resp.Data, String(resp.Meta.Page.Next.GetOrEmpty()), String(resp.Meta.Page.Previous.GetOrEmpty()), nil }) } // Ingests an event or batch of events following the CloudEvents specification. func (s *EventsService) IngestEvent(ctx context.Context, request EventInput) error { path := "/openmeter/events" req, err := s.client.newRequestWithContentType(ctx, http.MethodPost, path, nil, request, "application/cloudevents+json", "") if err != nil { return err } _, err = s.client.doRaw(req) return err } func (s *EventsService) IngestEvents(ctx context.Context, request []EventInput) error { path := "/openmeter/events" req, err := s.client.newRequestWithContentType(ctx, http.MethodPost, path, nil, request, "application/cloudevents-batch+json", "") if err != nil { return err } _, err = s.client.doRaw(req) return err } func (s *EventsService) IngestEventsJSON(ctx context.Context, request OneOrMany[EventInput]) error { path := "/openmeter/events" req, err := s.client.newRequestWithContentType(ctx, http.MethodPost, path, nil, request, "application/json", "") if err != nil { return err } _, err = s.client.doRaw(req) return err }