// Code generated by ogen, DO NOT EDIT. package ogent import ( "bytes" "context" "fmt" "io" "math" "math/big" "math/bits" "net" "net/http" "net/url" "regexp" "sort" "strconv" "strings" "sync" "time" "github.com/go-faster/errors" "github.com/go-faster/jx" "github.com/google/uuid" "github.com/ogen-go/ogen/conv" ht "github.com/ogen-go/ogen/http" "github.com/ogen-go/ogen/json" "github.com/ogen-go/ogen/otelogen" "github.com/ogen-go/ogen/uri" "github.com/ogen-go/ogen/validate" "go.opentelemetry.io/otel" "go.opentelemetry.io/otel/attribute" "go.opentelemetry.io/otel/codes" "go.opentelemetry.io/otel/metric" "go.opentelemetry.io/otel/trace" ) // No-op definition for keeping imports. var ( _ = context.Background() _ = fmt.Stringer(nil) _ = strings.Builder{} _ = errors.Is _ = sort.Ints _ = http.MethodGet _ = io.Copy _ = json.Marshal _ = bytes.NewReader _ = strconv.ParseInt _ = time.Time{} _ = conv.ToInt32 _ = uuid.UUID{} _ = uri.PathEncoder{} _ = url.URL{} _ = math.Mod _ = bits.LeadingZeros64 _ = big.Rat{} _ = validate.Int{} _ = ht.NewRequest _ = net.IP{} _ = otelogen.Version _ = attribute.KeyValue{} _ = trace.TraceIDFromHex _ = otel.GetTracerProvider _ = metric.NewNoopMeterProvider _ = regexp.MustCompile _ = jx.Null _ = sync.Pool{} _ = codes.Unset ) // Client implements OAS client. type Client struct { serverURL *url.URL cfg config requests metric.Int64Counter errors metric.Int64Counter duration metric.Int64Histogram } // NewClient initializes new Client defined by OAS. func NewClient(serverURL string, opts ...Option) (*Client, error) { u, err := url.Parse(serverURL) if err != nil { return nil, err } c := &Client{ cfg: newConfig(opts...), serverURL: u, } if c.requests, err = c.cfg.Meter.NewInt64Counter(otelogen.ClientRequestCount); err != nil { return nil, err } if c.errors, err = c.cfg.Meter.NewInt64Counter(otelogen.ClientErrorsCount); err != nil { return nil, err } if c.duration, err = c.cfg.Meter.NewInt64Histogram(otelogen.ClientDuration); err != nil { return nil, err } return c, nil } // CreateUsers invokes createUsers operation. // // Creates a new Users and persists it to storage. // // POST /users func (c *Client) CreateUsers(ctx context.Context, request CreateUsersReq) (res CreateUsersRes, err error) { if err := func() error { if err := request.Validate(); err != nil { return err } return nil }(); err != nil { return res, errors.Wrap(err, "validate") } startTime := time.Now() otelAttrs := []attribute.KeyValue{ otelogen.OperationID("createUsers"), } ctx, span := c.cfg.Tracer.Start(ctx, "CreateUsers", trace.WithAttributes(otelAttrs...), trace.WithSpanKind(trace.SpanKindClient), ) defer func() { if err != nil { span.RecordError(err) c.errors.Add(ctx, 1, otelAttrs...) } else { elapsedDuration := time.Since(startTime) c.duration.Record(ctx, elapsedDuration.Microseconds(), otelAttrs...) } span.End() }() c.requests.Add(ctx, 1, otelAttrs...) var ( contentType string reqBody io.Reader ) contentType = "application/json" buf, err := encodeCreateUsersRequestJSON(request, span) if err != nil { return res, err } defer jx.PutEncoder(buf) reqBody = bytes.NewReader(buf.Bytes()) u := uri.Clone(c.serverURL) u.Path += "/users" r := ht.NewRequest(ctx, "POST", u, reqBody) defer ht.PutRequest(r) r.Header.Set("Content-Type", contentType) resp, err := c.cfg.Client.Do(r) if err != nil { return res, errors.Wrap(err, "do request") } defer resp.Body.Close() result, err := decodeCreateUsersResponse(resp, span) if err != nil { return res, errors.Wrap(err, "decode response") } return result, nil } // DeleteUsers invokes deleteUsers operation. // // Deletes the Users with the requested ID. // // DELETE /users/{id} func (c *Client) DeleteUsers(ctx context.Context, params DeleteUsersParams) (res DeleteUsersRes, err error) { startTime := time.Now() otelAttrs := []attribute.KeyValue{ otelogen.OperationID("deleteUsers"), } ctx, span := c.cfg.Tracer.Start(ctx, "DeleteUsers", trace.WithAttributes(otelAttrs...), trace.WithSpanKind(trace.SpanKindClient), ) defer func() { if err != nil { span.RecordError(err) c.errors.Add(ctx, 1, otelAttrs...) } else { elapsedDuration := time.Since(startTime) c.duration.Record(ctx, elapsedDuration.Microseconds(), otelAttrs...) } span.End() }() c.requests.Add(ctx, 1, otelAttrs...) u := uri.Clone(c.serverURL) u.Path += "/users/" { // Encode "id" parameter. e := uri.NewPathEncoder(uri.PathEncoderConfig{ Param: "id", Style: uri.PathStyleSimple, Explode: false, }) if err := func() error { return e.EncodeValue(conv.IntToString(params.ID)) }(); err != nil { return res, errors.Wrap(err, "encode path") } u.Path += e.Result() } r := ht.NewRequest(ctx, "DELETE", u, nil) defer ht.PutRequest(r) resp, err := c.cfg.Client.Do(r) if err != nil { return res, errors.Wrap(err, "do request") } defer resp.Body.Close() result, err := decodeDeleteUsersResponse(resp, span) if err != nil { return res, errors.Wrap(err, "decode response") } return result, nil } // DrawDone invokes drawDone operation. // // PUT /users/{id}/d func (c *Client) DrawDone(ctx context.Context, params DrawDoneParams) (res DrawDoneNoContent, err error) { startTime := time.Now() otelAttrs := []attribute.KeyValue{ otelogen.OperationID("drawDone"), } ctx, span := c.cfg.Tracer.Start(ctx, "DrawDone", trace.WithAttributes(otelAttrs...), trace.WithSpanKind(trace.SpanKindClient), ) defer func() { if err != nil { span.RecordError(err) c.errors.Add(ctx, 1, otelAttrs...) } else { elapsedDuration := time.Since(startTime) c.duration.Record(ctx, elapsedDuration.Microseconds(), otelAttrs...) } span.End() }() c.requests.Add(ctx, 1, otelAttrs...) u := uri.Clone(c.serverURL) u.Path += "/users/" { // Encode "id" parameter. e := uri.NewPathEncoder(uri.PathEncoderConfig{ Param: "id", Style: uri.PathStyleSimple, Explode: false, }) if err := func() error { return e.EncodeValue(conv.IntToString(params.ID)) }(); err != nil { return res, errors.Wrap(err, "encode path") } u.Path += e.Result() } u.Path += "/d" r := ht.NewRequest(ctx, "PUT", u, nil) defer ht.PutRequest(r) resp, err := c.cfg.Client.Do(r) if err != nil { return res, errors.Wrap(err, "do request") } defer resp.Body.Close() result, err := decodeDrawDoneResponse(resp, span) if err != nil { return res, errors.Wrap(err, "decode response") } return result, nil } // DrawStart invokes drawStart operation. // // PATCH /users/{id}/start func (c *Client) DrawStart(ctx context.Context, params DrawStartParams) (res DrawStartNoContent, err error) { startTime := time.Now() otelAttrs := []attribute.KeyValue{ otelogen.OperationID("drawStart"), } ctx, span := c.cfg.Tracer.Start(ctx, "DrawStart", trace.WithAttributes(otelAttrs...), trace.WithSpanKind(trace.SpanKindClient), ) defer func() { if err != nil { span.RecordError(err) c.errors.Add(ctx, 1, otelAttrs...) } else { elapsedDuration := time.Since(startTime) c.duration.Record(ctx, elapsedDuration.Microseconds(), otelAttrs...) } span.End() }() c.requests.Add(ctx, 1, otelAttrs...) u := uri.Clone(c.serverURL) u.Path += "/users/" { // Encode "id" parameter. e := uri.NewPathEncoder(uri.PathEncoderConfig{ Param: "id", Style: uri.PathStyleSimple, Explode: false, }) if err := func() error { return e.EncodeValue(conv.IntToString(params.ID)) }(); err != nil { return res, errors.Wrap(err, "encode path") } u.Path += e.Result() } u.Path += "/start" r := ht.NewRequest(ctx, "PATCH", u, nil) defer ht.PutRequest(r) resp, err := c.cfg.Client.Do(r) if err != nil { return res, errors.Wrap(err, "do request") } defer resp.Body.Close() result, err := decodeDrawStartResponse(resp, span) if err != nil { return res, errors.Wrap(err, "decode response") } return result, nil } // ListUsers invokes listUsers operation. // // List Users. // // GET /users func (c *Client) ListUsers(ctx context.Context, params ListUsersParams) (res ListUsersRes, err error) { startTime := time.Now() otelAttrs := []attribute.KeyValue{ otelogen.OperationID("listUsers"), } ctx, span := c.cfg.Tracer.Start(ctx, "ListUsers", trace.WithAttributes(otelAttrs...), trace.WithSpanKind(trace.SpanKindClient), ) defer func() { if err != nil { span.RecordError(err) c.errors.Add(ctx, 1, otelAttrs...) } else { elapsedDuration := time.Since(startTime) c.duration.Record(ctx, elapsedDuration.Microseconds(), otelAttrs...) } span.End() }() c.requests.Add(ctx, 1, otelAttrs...) u := uri.Clone(c.serverURL) u.Path += "/users" q := u.Query() { // Encode "page" parameter. e := uri.NewQueryEncoder(uri.QueryEncoderConfig{ Style: uri.QueryStyleForm, Explode: true, }) if err := func() error { if val, ok := params.Page.Get(); ok { return e.EncodeValue(conv.IntToString(val)) } return nil }(); err != nil { return res, errors.Wrap(err, "encode query") } q["page"] = e.Result() } { // Encode "itemsPerPage" parameter. e := uri.NewQueryEncoder(uri.QueryEncoderConfig{ Style: uri.QueryStyleForm, Explode: true, }) if err := func() error { if val, ok := params.ItemsPerPage.Get(); ok { return e.EncodeValue(conv.IntToString(val)) } return nil }(); err != nil { return res, errors.Wrap(err, "encode query") } q["itemsPerPage"] = e.Result() } u.RawQuery = q.Encode() r := ht.NewRequest(ctx, "GET", u, nil) defer ht.PutRequest(r) resp, err := c.cfg.Client.Do(r) if err != nil { return res, errors.Wrap(err, "do request") } defer resp.Body.Close() result, err := decodeListUsersResponse(resp, span) if err != nil { return res, errors.Wrap(err, "decode response") } return result, nil } // ReadUsers invokes readUsers operation. // // Finds the Users with the requested ID and returns it. // // GET /users/{id} func (c *Client) ReadUsers(ctx context.Context, params ReadUsersParams) (res ReadUsersRes, err error) { startTime := time.Now() otelAttrs := []attribute.KeyValue{ otelogen.OperationID("readUsers"), } ctx, span := c.cfg.Tracer.Start(ctx, "ReadUsers", trace.WithAttributes(otelAttrs...), trace.WithSpanKind(trace.SpanKindClient), ) defer func() { if err != nil { span.RecordError(err) c.errors.Add(ctx, 1, otelAttrs...) } else { elapsedDuration := time.Since(startTime) c.duration.Record(ctx, elapsedDuration.Microseconds(), otelAttrs...) } span.End() }() c.requests.Add(ctx, 1, otelAttrs...) u := uri.Clone(c.serverURL) u.Path += "/users/" { // Encode "id" parameter. e := uri.NewPathEncoder(uri.PathEncoderConfig{ Param: "id", Style: uri.PathStyleSimple, Explode: false, }) if err := func() error { return e.EncodeValue(conv.IntToString(params.ID)) }(); err != nil { return res, errors.Wrap(err, "encode path") } u.Path += e.Result() } r := ht.NewRequest(ctx, "GET", u, nil) defer ht.PutRequest(r) resp, err := c.cfg.Client.Do(r) if err != nil { return res, errors.Wrap(err, "do request") } defer resp.Body.Close() result, err := decodeReadUsersResponse(resp, span) if err != nil { return res, errors.Wrap(err, "decode response") } return result, nil } // UpdateUsers invokes updateUsers operation. // // Updates a Users and persists changes to storage. // // PATCH /users/{id} func (c *Client) UpdateUsers(ctx context.Context, request UpdateUsersReq, params UpdateUsersParams) (res UpdateUsersRes, err error) { if err := func() error { if err := request.Validate(); err != nil { return err } return nil }(); err != nil { return res, errors.Wrap(err, "validate") } startTime := time.Now() otelAttrs := []attribute.KeyValue{ otelogen.OperationID("updateUsers"), } ctx, span := c.cfg.Tracer.Start(ctx, "UpdateUsers", trace.WithAttributes(otelAttrs...), trace.WithSpanKind(trace.SpanKindClient), ) defer func() { if err != nil { span.RecordError(err) c.errors.Add(ctx, 1, otelAttrs...) } else { elapsedDuration := time.Since(startTime) c.duration.Record(ctx, elapsedDuration.Microseconds(), otelAttrs...) } span.End() }() c.requests.Add(ctx, 1, otelAttrs...) var ( contentType string reqBody io.Reader ) contentType = "application/json" buf, err := encodeUpdateUsersRequestJSON(request, span) if err != nil { return res, err } defer jx.PutEncoder(buf) reqBody = bytes.NewReader(buf.Bytes()) u := uri.Clone(c.serverURL) u.Path += "/users/" { // Encode "id" parameter. e := uri.NewPathEncoder(uri.PathEncoderConfig{ Param: "id", Style: uri.PathStyleSimple, Explode: false, }) if err := func() error { return e.EncodeValue(conv.IntToString(params.ID)) }(); err != nil { return res, errors.Wrap(err, "encode path") } u.Path += e.Result() } r := ht.NewRequest(ctx, "PATCH", u, reqBody) defer ht.PutRequest(r) r.Header.Set("Content-Type", contentType) resp, err := c.cfg.Client.Do(r) if err != nil { return res, errors.Wrap(err, "do request") } defer resp.Body.Close() result, err := decodeUpdateUsersResponse(resp, span) if err != nil { return res, errors.Wrap(err, "decode response") } return result, nil }