565 lines
13 KiB
Go
565 lines
13 KiB
Go
|
// 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
|
||
|
}
|