// Code generated by ogen, DO NOT EDIT. package api import ( "context" "net/http" "time" "github.com/go-faster/errors" "go.opentelemetry.io/otel/attribute" "go.opentelemetry.io/otel/codes" "go.opentelemetry.io/otel/metric" semconv "go.opentelemetry.io/otel/semconv/v1.19.0" "go.opentelemetry.io/otel/trace" ht "github.com/ogen-go/ogen/http" "github.com/ogen-go/ogen/middleware" "github.com/ogen-go/ogen/ogenerrors" "github.com/ogen-go/ogen/otelogen" ) // handleGetUserRequest handles getUser operation. // // Retrieve user with ID. // // GET /users/{UserID} func (s *Server) handleGetUserRequest(args [1]string, argsEscaped bool, w http.ResponseWriter, r *http.Request) { otelAttrs := []attribute.KeyValue{ otelogen.OperationID("getUser"), semconv.HTTPMethodKey.String("GET"), semconv.HTTPRouteKey.String("/users/{UserID}"), } // Start a span for this request. ctx, span := s.cfg.Tracer.Start(r.Context(), "GetUser", trace.WithAttributes(otelAttrs...), serverSpanKind, ) defer span.End() // Add Labeler to context. labeler := &Labeler{attrs: otelAttrs} ctx = contextWithLabeler(ctx, labeler) // Run stopwatch. startTime := time.Now() defer func() { elapsedDuration := time.Since(startTime) attrOpt := metric.WithAttributeSet(labeler.AttributeSet()) // Increment request counter. s.requests.Add(ctx, 1, attrOpt) // Use floating point division here for higher precision (instead of Millisecond method). s.duration.Record(ctx, float64(float64(elapsedDuration)/float64(time.Millisecond)), attrOpt) }() var ( recordError = func(stage string, err error) { span.RecordError(err) span.SetStatus(codes.Error, stage) s.errors.Add(ctx, 1, metric.WithAttributeSet(labeler.AttributeSet())) } err error opErrContext = ogenerrors.OperationContext{ Name: "GetUser", ID: "getUser", } ) params, err := decodeGetUserParams(args, argsEscaped, r) if err != nil { err = &ogenerrors.DecodeParamsError{ OperationContext: opErrContext, Err: err, } defer recordError("DecodeParams", err) s.cfg.ErrorHandler(ctx, w, r, err) return } var response *User if m := s.cfg.Middleware; m != nil { mreq := middleware.Request{ Context: ctx, OperationName: "GetUser", OperationSummary: "Retrieve user with ID", OperationID: "getUser", Body: nil, Params: middleware.Parameters{ { Name: "UserID", In: "path", }: params.UserID, }, Raw: r, } type ( Request = struct{} Params = GetUserParams Response = *User ) response, err = middleware.HookMiddleware[ Request, Params, Response, ]( m, mreq, unpackGetUserParams, func(ctx context.Context, request Request, params Params) (response Response, err error) { response, err = s.h.GetUser(ctx, params) return response, err }, ) } else { response, err = s.h.GetUser(ctx, params) } if err != nil { if errRes, ok := errors.Into[*ErrorStatusCode](err); ok { if err := encodeErrorResponse(errRes, w, span); err != nil { defer recordError("Internal", err) } return } if errors.Is(err, ht.ErrNotImplemented) { s.cfg.ErrorHandler(ctx, w, r, err) return } if err := encodeErrorResponse(s.h.NewError(ctx, err), w, span); err != nil { defer recordError("Internal", err) } return } if err := encodeGetUserResponse(response, w, span); err != nil { defer recordError("EncodeResponse", err) if !errors.Is(err, ht.ErrInternalServerErrorResponse) { s.cfg.ErrorHandler(ctx, w, r, err) } return } } // handleGetUserRankRequest handles getUserRank operation. // // Retrieve rank of user. // // GET /users/{UserID}/rank func (s *Server) handleGetUserRankRequest(args [1]string, argsEscaped bool, w http.ResponseWriter, r *http.Request) { otelAttrs := []attribute.KeyValue{ otelogen.OperationID("getUserRank"), semconv.HTTPMethodKey.String("GET"), semconv.HTTPRouteKey.String("/users/{UserID}/rank"), } // Start a span for this request. ctx, span := s.cfg.Tracer.Start(r.Context(), "GetUserRank", trace.WithAttributes(otelAttrs...), serverSpanKind, ) defer span.End() // Add Labeler to context. labeler := &Labeler{attrs: otelAttrs} ctx = contextWithLabeler(ctx, labeler) // Run stopwatch. startTime := time.Now() defer func() { elapsedDuration := time.Since(startTime) attrOpt := metric.WithAttributeSet(labeler.AttributeSet()) // Increment request counter. s.requests.Add(ctx, 1, attrOpt) // Use floating point division here for higher precision (instead of Millisecond method). s.duration.Record(ctx, float64(float64(elapsedDuration)/float64(time.Millisecond)), attrOpt) }() var ( recordError = func(stage string, err error) { span.RecordError(err) span.SetStatus(codes.Error, stage) s.errors.Add(ctx, 1, metric.WithAttributeSet(labeler.AttributeSet())) } err error opErrContext = ogenerrors.OperationContext{ Name: "GetUserRank", ID: "getUserRank", } ) params, err := decodeGetUserRankParams(args, argsEscaped, r) if err != nil { err = &ogenerrors.DecodeParamsError{ OperationContext: opErrContext, Err: err, } defer recordError("DecodeParams", err) s.cfg.ErrorHandler(ctx, w, r, err) return } var response *Rank if m := s.cfg.Middleware; m != nil { mreq := middleware.Request{ Context: ctx, OperationName: "GetUserRank", OperationSummary: "Retrieve rank of user", OperationID: "getUserRank", Body: nil, Params: middleware.Parameters{ { Name: "UserID", In: "path", }: params.UserID, { Name: "StyleID", In: "query", }: params.StyleID, { Name: "GameID", In: "query", }: params.GameID, { Name: "ModeID", In: "query", }: params.ModeID, }, Raw: r, } type ( Request = struct{} Params = GetUserRankParams Response = *Rank ) response, err = middleware.HookMiddleware[ Request, Params, Response, ]( m, mreq, unpackGetUserRankParams, func(ctx context.Context, request Request, params Params) (response Response, err error) { response, err = s.h.GetUserRank(ctx, params) return response, err }, ) } else { response, err = s.h.GetUserRank(ctx, params) } if err != nil { if errRes, ok := errors.Into[*ErrorStatusCode](err); ok { if err := encodeErrorResponse(errRes, w, span); err != nil { defer recordError("Internal", err) } return } if errors.Is(err, ht.ErrNotImplemented) { s.cfg.ErrorHandler(ctx, w, r, err) return } if err := encodeErrorResponse(s.h.NewError(ctx, err), w, span); err != nil { defer recordError("Internal", err) } return } if err := encodeGetUserRankResponse(response, w, span); err != nil { defer recordError("EncodeResponse", err) if !errors.Is(err, ht.ErrInternalServerErrorResponse) { s.cfg.ErrorHandler(ctx, w, r, err) } return } } // handleListRanksRequest handles listRanks operation. // // Get list of ranks. // // GET /ranks func (s *Server) handleListRanksRequest(args [0]string, argsEscaped bool, w http.ResponseWriter, r *http.Request) { otelAttrs := []attribute.KeyValue{ otelogen.OperationID("listRanks"), semconv.HTTPMethodKey.String("GET"), semconv.HTTPRouteKey.String("/ranks"), } // Start a span for this request. ctx, span := s.cfg.Tracer.Start(r.Context(), "ListRanks", trace.WithAttributes(otelAttrs...), serverSpanKind, ) defer span.End() // Add Labeler to context. labeler := &Labeler{attrs: otelAttrs} ctx = contextWithLabeler(ctx, labeler) // Run stopwatch. startTime := time.Now() defer func() { elapsedDuration := time.Since(startTime) attrOpt := metric.WithAttributeSet(labeler.AttributeSet()) // Increment request counter. s.requests.Add(ctx, 1, attrOpt) // Use floating point division here for higher precision (instead of Millisecond method). s.duration.Record(ctx, float64(float64(elapsedDuration)/float64(time.Millisecond)), attrOpt) }() var ( recordError = func(stage string, err error) { span.RecordError(err) span.SetStatus(codes.Error, stage) s.errors.Add(ctx, 1, metric.WithAttributeSet(labeler.AttributeSet())) } err error opErrContext = ogenerrors.OperationContext{ Name: "ListRanks", ID: "listRanks", } ) params, err := decodeListRanksParams(args, argsEscaped, r) if err != nil { err = &ogenerrors.DecodeParamsError{ OperationContext: opErrContext, Err: err, } defer recordError("DecodeParams", err) s.cfg.ErrorHandler(ctx, w, r, err) return } var response []Rank if m := s.cfg.Middleware; m != nil { mreq := middleware.Request{ Context: ctx, OperationName: "ListRanks", OperationSummary: "Get list of ranks", OperationID: "listRanks", Body: nil, Params: middleware.Parameters{ { Name: "page", In: "query", }: params.Page, { Name: "filter", In: "query", }: params.Filter, }, Raw: r, } type ( Request = struct{} Params = ListRanksParams Response = []Rank ) response, err = middleware.HookMiddleware[ Request, Params, Response, ]( m, mreq, unpackListRanksParams, func(ctx context.Context, request Request, params Params) (response Response, err error) { response, err = s.h.ListRanks(ctx, params) return response, err }, ) } else { response, err = s.h.ListRanks(ctx, params) } if err != nil { if errRes, ok := errors.Into[*ErrorStatusCode](err); ok { if err := encodeErrorResponse(errRes, w, span); err != nil { defer recordError("Internal", err) } return } if errors.Is(err, ht.ErrNotImplemented) { s.cfg.ErrorHandler(ctx, w, r, err) return } if err := encodeErrorResponse(s.h.NewError(ctx, err), w, span); err != nil { defer recordError("Internal", err) } return } if err := encodeListRanksResponse(response, w, span); err != nil { defer recordError("EncodeResponse", err) if !errors.Is(err, ht.ErrInternalServerErrorResponse) { s.cfg.ErrorHandler(ctx, w, r, err) } return } } // handleListTimesRequest handles listTimes operation. // // Get list of times. // // GET /times func (s *Server) handleListTimesRequest(args [0]string, argsEscaped bool, w http.ResponseWriter, r *http.Request) { otelAttrs := []attribute.KeyValue{ otelogen.OperationID("listTimes"), semconv.HTTPMethodKey.String("GET"), semconv.HTTPRouteKey.String("/times"), } // Start a span for this request. ctx, span := s.cfg.Tracer.Start(r.Context(), "ListTimes", trace.WithAttributes(otelAttrs...), serverSpanKind, ) defer span.End() // Add Labeler to context. labeler := &Labeler{attrs: otelAttrs} ctx = contextWithLabeler(ctx, labeler) // Run stopwatch. startTime := time.Now() defer func() { elapsedDuration := time.Since(startTime) attrOpt := metric.WithAttributeSet(labeler.AttributeSet()) // Increment request counter. s.requests.Add(ctx, 1, attrOpt) // Use floating point division here for higher precision (instead of Millisecond method). s.duration.Record(ctx, float64(float64(elapsedDuration)/float64(time.Millisecond)), attrOpt) }() var ( recordError = func(stage string, err error) { span.RecordError(err) span.SetStatus(codes.Error, stage) s.errors.Add(ctx, 1, metric.WithAttributeSet(labeler.AttributeSet())) } err error opErrContext = ogenerrors.OperationContext{ Name: "ListTimes", ID: "listTimes", } ) params, err := decodeListTimesParams(args, argsEscaped, r) if err != nil { err = &ogenerrors.DecodeParamsError{ OperationContext: opErrContext, Err: err, } defer recordError("DecodeParams", err) s.cfg.ErrorHandler(ctx, w, r, err) return } var response []Time if m := s.cfg.Middleware; m != nil { mreq := middleware.Request{ Context: ctx, OperationName: "ListTimes", OperationSummary: "Get list of times", OperationID: "listTimes", Body: nil, Params: middleware.Parameters{ { Name: "page", In: "query", }: params.Page, { Name: "filter", In: "query", }: params.Filter, }, Raw: r, } type ( Request = struct{} Params = ListTimesParams Response = []Time ) response, err = middleware.HookMiddleware[ Request, Params, Response, ]( m, mreq, unpackListTimesParams, func(ctx context.Context, request Request, params Params) (response Response, err error) { response, err = s.h.ListTimes(ctx, params) return response, err }, ) } else { response, err = s.h.ListTimes(ctx, params) } if err != nil { if errRes, ok := errors.Into[*ErrorStatusCode](err); ok { if err := encodeErrorResponse(errRes, w, span); err != nil { defer recordError("Internal", err) } return } if errors.Is(err, ht.ErrNotImplemented) { s.cfg.ErrorHandler(ctx, w, r, err) return } if err := encodeErrorResponse(s.h.NewError(ctx, err), w, span); err != nil { defer recordError("Internal", err) } return } if err := encodeListTimesResponse(response, w, span); err != nil { defer recordError("EncodeResponse", err) if !errors.Is(err, ht.ErrInternalServerErrorResponse) { s.cfg.ErrorHandler(ctx, w, r, err) } return } }