From 866febf42e8e9bc61c11408027643cb66a90afcb Mon Sep 17 00:00:00 2001 From: Quaternions <krakow20@gmail.com> Date: Wed, 2 Apr 2025 13:02:40 -0700 Subject: [PATCH] openapi: generate --- pkg/api/oas_client_gen.go | 129 ++++++++++++++++++ pkg/api/oas_handlers_gen.go | 195 +++++++++++++++++++++++++++ pkg/api/oas_json_gen.go | 181 +++++++++++++++++++++++++ pkg/api/oas_operations_gen.go | 1 + pkg/api/oas_parameters_gen.go | 66 +++++++++ pkg/api/oas_response_decoders_gen.go | 92 +++++++++++++ pkg/api/oas_response_encoders_gen.go | 14 ++ pkg/api/oas_router_gen.go | 64 +++++++++ pkg/api/oas_schemas_gen.go | 70 ++++++++++ pkg/api/oas_server_gen.go | 6 + pkg/api/oas_unimplemented_gen.go | 9 ++ pkg/api/oas_validators_gen.go | 50 +++++++ 12 files changed, 877 insertions(+) diff --git a/pkg/api/oas_client_gen.go b/pkg/api/oas_client_gen.go index 714161e..3ed6249 100644 --- a/pkg/api/oas_client_gen.go +++ b/pkg/api/oas_client_gen.go @@ -185,6 +185,12 @@ type Invoker interface { // // GET /mapfixes/{MapfixID} GetMapfix(ctx context.Context, params GetMapfixParams) (*Mapfix, error) + // GetOperation invokes getOperation operation. + // + // Retrieve operation with ID. + // + // GET /operations/{OperationID} + GetOperation(ctx context.Context, params GetOperationParams) (*Operation, error) // GetScript invokes getScript operation. // // Get the specified script by ID. @@ -3434,6 +3440,129 @@ func (c *Client) sendGetMapfix(ctx context.Context, params GetMapfixParams) (res return result, nil } +// GetOperation invokes getOperation operation. +// +// Retrieve operation with ID. +// +// GET /operations/{OperationID} +func (c *Client) GetOperation(ctx context.Context, params GetOperationParams) (*Operation, error) { + res, err := c.sendGetOperation(ctx, params) + return res, err +} + +func (c *Client) sendGetOperation(ctx context.Context, params GetOperationParams) (res *Operation, err error) { + otelAttrs := []attribute.KeyValue{ + otelogen.OperationID("getOperation"), + semconv.HTTPRequestMethodKey.String("GET"), + semconv.HTTPRouteKey.String("/operations/{OperationID}"), + } + + // Run stopwatch. + startTime := time.Now() + defer func() { + // Use floating point division here for higher precision (instead of Millisecond method). + elapsedDuration := time.Since(startTime) + c.duration.Record(ctx, float64(elapsedDuration)/float64(time.Millisecond), metric.WithAttributes(otelAttrs...)) + }() + + // Increment request counter. + c.requests.Add(ctx, 1, metric.WithAttributes(otelAttrs...)) + + // Start a span for this request. + ctx, span := c.cfg.Tracer.Start(ctx, GetOperationOperation, + trace.WithAttributes(otelAttrs...), + clientSpanKind, + ) + // Track stage for error reporting. + var stage string + defer func() { + if err != nil { + span.RecordError(err) + span.SetStatus(codes.Error, stage) + c.errors.Add(ctx, 1, metric.WithAttributes(otelAttrs...)) + } + span.End() + }() + + stage = "BuildURL" + u := uri.Clone(c.requestURL(ctx)) + var pathParts [2]string + pathParts[0] = "/operations/" + { + // Encode "OperationID" parameter. + e := uri.NewPathEncoder(uri.PathEncoderConfig{ + Param: "OperationID", + Style: uri.PathStyleSimple, + Explode: false, + }) + if err := func() error { + return e.EncodeValue(conv.Int32ToString(params.OperationID)) + }(); err != nil { + return res, errors.Wrap(err, "encode path") + } + encoded, err := e.Result() + if err != nil { + return res, errors.Wrap(err, "encode path") + } + pathParts[1] = encoded + } + uri.AddPathParts(u, pathParts[:]...) + + stage = "EncodeRequest" + r, err := ht.NewRequest(ctx, "GET", u) + if err != nil { + return res, errors.Wrap(err, "create request") + } + + { + type bitset = [1]uint8 + var satisfied bitset + { + stage = "Security:CookieAuth" + switch err := c.securityCookieAuth(ctx, GetOperationOperation, r); { + case err == nil: // if NO error + satisfied[0] |= 1 << 0 + case errors.Is(err, ogenerrors.ErrSkipClientSecurity): + // Skip this security. + default: + return res, errors.Wrap(err, "security \"CookieAuth\"") + } + } + + if ok := func() bool { + nextRequirement: + for _, requirement := range []bitset{ + {0b00000001}, + } { + for i, mask := range requirement { + if satisfied[i]&mask != mask { + continue nextRequirement + } + } + return true + } + return false + }(); !ok { + return res, ogenerrors.ErrSecurityRequirementIsNotSatisfied + } + } + + stage = "SendRequest" + resp, err := c.cfg.Client.Do(r) + if err != nil { + return res, errors.Wrap(err, "do request") + } + defer resp.Body.Close() + + stage = "DecodeResponse" + result, err := decodeGetOperationResponse(resp) + if err != nil { + return res, errors.Wrap(err, "decode response") + } + + return result, nil +} + // GetScript invokes getScript operation. // // Get the specified script by ID. diff --git a/pkg/api/oas_handlers_gen.go b/pkg/api/oas_handlers_gen.go index 95e1799..6b2c786 100644 --- a/pkg/api/oas_handlers_gen.go +++ b/pkg/api/oas_handlers_gen.go @@ -5008,6 +5008,201 @@ func (s *Server) handleGetMapfixRequest(args [1]string, argsEscaped bool, w http } } +// handleGetOperationRequest handles getOperation operation. +// +// Retrieve operation with ID. +// +// GET /operations/{OperationID} +func (s *Server) handleGetOperationRequest(args [1]string, argsEscaped bool, w http.ResponseWriter, r *http.Request) { + statusWriter := &codeRecorder{ResponseWriter: w} + w = statusWriter + otelAttrs := []attribute.KeyValue{ + otelogen.OperationID("getOperation"), + semconv.HTTPRequestMethodKey.String("GET"), + semconv.HTTPRouteKey.String("/operations/{OperationID}"), + } + + // Start a span for this request. + ctx, span := s.cfg.Tracer.Start(r.Context(), GetOperationOperation, + 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) + + attrSet := labeler.AttributeSet() + attrs := attrSet.ToSlice() + code := statusWriter.status + if code != 0 { + codeAttr := semconv.HTTPResponseStatusCode(code) + attrs = append(attrs, codeAttr) + span.SetAttributes(codeAttr) + } + attrOpt := metric.WithAttributes(attrs...) + + // 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(elapsedDuration)/float64(time.Millisecond), attrOpt) + }() + + var ( + recordError = func(stage string, err error) { + span.RecordError(err) + + // https://opentelemetry.io/docs/specs/semconv/http/http-spans/#status + // Span Status MUST be left unset if HTTP status code was in the 1xx, 2xx or 3xx ranges, + // unless there was another error (e.g., network error receiving the response body; or 3xx codes with + // max redirects exceeded), in which case status MUST be set to Error. + code := statusWriter.status + if code >= 100 && code < 500 { + span.SetStatus(codes.Error, stage) + } + + attrSet := labeler.AttributeSet() + attrs := attrSet.ToSlice() + if code != 0 { + attrs = append(attrs, semconv.HTTPResponseStatusCode(code)) + } + + s.errors.Add(ctx, 1, metric.WithAttributes(attrs...)) + } + err error + opErrContext = ogenerrors.OperationContext{ + Name: GetOperationOperation, + ID: "getOperation", + } + ) + { + type bitset = [1]uint8 + var satisfied bitset + { + sctx, ok, err := s.securityCookieAuth(ctx, GetOperationOperation, r) + if err != nil { + err = &ogenerrors.SecurityError{ + OperationContext: opErrContext, + Security: "CookieAuth", + Err: err, + } + if encodeErr := encodeErrorResponse(s.h.NewError(ctx, err), w, span); encodeErr != nil { + defer recordError("Security:CookieAuth", err) + } + return + } + if ok { + satisfied[0] |= 1 << 0 + ctx = sctx + } + } + + if ok := func() bool { + nextRequirement: + for _, requirement := range []bitset{ + {0b00000001}, + } { + for i, mask := range requirement { + if satisfied[i]&mask != mask { + continue nextRequirement + } + } + return true + } + return false + }(); !ok { + err = &ogenerrors.SecurityError{ + OperationContext: opErrContext, + Err: ogenerrors.ErrSecurityRequirementIsNotSatisfied, + } + if encodeErr := encodeErrorResponse(s.h.NewError(ctx, err), w, span); encodeErr != nil { + defer recordError("Security", err) + } + return + } + } + params, err := decodeGetOperationParams(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 *Operation + if m := s.cfg.Middleware; m != nil { + mreq := middleware.Request{ + Context: ctx, + OperationName: GetOperationOperation, + OperationSummary: "Retrieve operation with ID", + OperationID: "getOperation", + Body: nil, + Params: middleware.Parameters{ + { + Name: "OperationID", + In: "path", + }: params.OperationID, + }, + Raw: r, + } + + type ( + Request = struct{} + Params = GetOperationParams + Response = *Operation + ) + response, err = middleware.HookMiddleware[ + Request, + Params, + Response, + ]( + m, + mreq, + unpackGetOperationParams, + func(ctx context.Context, request Request, params Params) (response Response, err error) { + response, err = s.h.GetOperation(ctx, params) + return response, err + }, + ) + } else { + response, err = s.h.GetOperation(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 := encodeGetOperationResponse(response, w, span); err != nil { + defer recordError("EncodeResponse", err) + if !errors.Is(err, ht.ErrInternalServerErrorResponse) { + s.cfg.ErrorHandler(ctx, w, r, err) + } + return + } +} + // handleGetScriptRequest handles getScript operation. // // Get the specified script by ID. diff --git a/pkg/api/oas_json_gen.go b/pkg/api/oas_json_gen.go index 9061475..4e0109b 100644 --- a/pkg/api/oas_json_gen.go +++ b/pkg/api/oas_json_gen.go @@ -868,6 +868,187 @@ func (s *MapfixCreate) UnmarshalJSON(data []byte) error { return s.Decode(d) } +// Encode implements json.Marshaler. +func (s *Operation) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *Operation) encodeFields(e *jx.Encoder) { + { + e.FieldStart("OperationID") + e.Int32(s.OperationID) + } + { + e.FieldStart("Date") + e.Int64(s.Date) + } + { + e.FieldStart("Owner") + e.Int64(s.Owner) + } + { + e.FieldStart("Status") + e.Int32(s.Status) + } + { + e.FieldStart("StatusMessage") + e.Str(s.StatusMessage) + } + { + e.FieldStart("Path") + e.Str(s.Path) + } +} + +var jsonFieldsNameOfOperation = [6]string{ + 0: "OperationID", + 1: "Date", + 2: "Owner", + 3: "Status", + 4: "StatusMessage", + 5: "Path", +} + +// Decode decodes Operation from json. +func (s *Operation) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode Operation to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "OperationID": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + v, err := d.Int32() + s.OperationID = int32(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"OperationID\"") + } + case "Date": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + v, err := d.Int64() + s.Date = int64(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"Date\"") + } + case "Owner": + requiredBitSet[0] |= 1 << 2 + if err := func() error { + v, err := d.Int64() + s.Owner = int64(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"Owner\"") + } + case "Status": + requiredBitSet[0] |= 1 << 3 + if err := func() error { + v, err := d.Int32() + s.Status = int32(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"Status\"") + } + case "StatusMessage": + requiredBitSet[0] |= 1 << 4 + if err := func() error { + v, err := d.Str() + s.StatusMessage = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"StatusMessage\"") + } + case "Path": + requiredBitSet[0] |= 1 << 5 + if err := func() error { + v, err := d.Str() + s.Path = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"Path\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode Operation") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00111111, + } { + if result := (requiredBitSet[i] & mask) ^ mask; result != 0 { + // Mask only required fields and check equality to mask using XOR. + // + // If XOR result is not zero, result is not equal to expected, so some fields are missed. + // Bits of fields which would be set are actually bits of missed fields. + missed := bits.OnesCount8(result) + for bitN := 0; bitN < missed; bitN++ { + bitIdx := bits.TrailingZeros8(result) + fieldIdx := i*8 + bitIdx + var name string + if fieldIdx < len(jsonFieldsNameOfOperation) { + name = jsonFieldsNameOfOperation[fieldIdx] + } else { + name = strconv.Itoa(fieldIdx) + } + failures = append(failures, validate.FieldError{ + Name: name, + Error: validate.ErrFieldRequired, + }) + // Reset bit. + result &^= 1 << bitIdx + } + } + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s *Operation) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *Operation) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + // Encode encodes int32 as json. func (o OptInt32) Encode(e *jx.Encoder) { if !o.Set { diff --git a/pkg/api/oas_operations_gen.go b/pkg/api/oas_operations_gen.go index f2235e9..9806eb1 100644 --- a/pkg/api/oas_operations_gen.go +++ b/pkg/api/oas_operations_gen.go @@ -32,6 +32,7 @@ const ( DeleteScriptPolicyOperation OperationName = "DeleteScriptPolicy" GetMapOperation OperationName = "GetMap" GetMapfixOperation OperationName = "GetMapfix" + GetOperationOperation OperationName = "GetOperation" GetScriptOperation OperationName = "GetScript" GetScriptPolicyOperation OperationName = "GetScriptPolicy" GetSubmissionOperation OperationName = "GetSubmission" diff --git a/pkg/api/oas_parameters_gen.go b/pkg/api/oas_parameters_gen.go index 6ea7cb4..b2cb6ee 100644 --- a/pkg/api/oas_parameters_gen.go +++ b/pkg/api/oas_parameters_gen.go @@ -1467,6 +1467,72 @@ func decodeGetMapfixParams(args [1]string, argsEscaped bool, r *http.Request) (p return params, nil } +// GetOperationParams is parameters of getOperation operation. +type GetOperationParams struct { + // The unique identifier for a long-running operation. + OperationID int32 +} + +func unpackGetOperationParams(packed middleware.Parameters) (params GetOperationParams) { + { + key := middleware.ParameterKey{ + Name: "OperationID", + In: "path", + } + params.OperationID = packed[key].(int32) + } + return params +} + +func decodeGetOperationParams(args [1]string, argsEscaped bool, r *http.Request) (params GetOperationParams, _ error) { + // Decode path: OperationID. + if err := func() error { + param := args[0] + if argsEscaped { + unescaped, err := url.PathUnescape(args[0]) + if err != nil { + return errors.Wrap(err, "unescape path") + } + param = unescaped + } + if len(param) > 0 { + d := uri.NewPathDecoder(uri.PathDecoderConfig{ + Param: "OperationID", + Value: param, + Style: uri.PathStyleSimple, + Explode: false, + }) + + if err := func() error { + val, err := d.DecodeValue() + if err != nil { + return err + } + + c, err := conv.ToInt32(val) + if err != nil { + return err + } + + params.OperationID = c + return nil + }(); err != nil { + return err + } + } else { + return validate.ErrFieldRequired + } + return nil + }(); err != nil { + return params, &ogenerrors.DecodeParamError{ + Name: "OperationID", + In: "path", + Err: err, + } + } + return params, nil +} + // GetScriptParams is parameters of getScript operation. type GetScriptParams struct { // The unique identifier for a script. diff --git a/pkg/api/oas_response_decoders_gen.go b/pkg/api/oas_response_decoders_gen.go index 6a6b258..d871088 100644 --- a/pkg/api/oas_response_decoders_gen.go +++ b/pkg/api/oas_response_decoders_gen.go @@ -1551,6 +1551,98 @@ func decodeGetMapfixResponse(resp *http.Response) (res *Mapfix, _ error) { return res, errors.Wrap(defRes, "error") } +func decodeGetOperationResponse(resp *http.Response) (res *Operation, _ error) { + switch resp.StatusCode { + case 200: + // Code 200. + ct, _, err := mime.ParseMediaType(resp.Header.Get("Content-Type")) + if err != nil { + return res, errors.Wrap(err, "parse media type") + } + switch { + case ct == "application/json": + buf, err := io.ReadAll(resp.Body) + if err != nil { + return res, err + } + d := jx.DecodeBytes(buf) + + var response Operation + if err := func() error { + if err := response.Decode(d); err != nil { + return err + } + if err := d.Skip(); err != io.EOF { + return errors.New("unexpected trailing data") + } + return nil + }(); err != nil { + err = &ogenerrors.DecodeBodyError{ + ContentType: ct, + Body: buf, + Err: err, + } + return res, err + } + // Validate response. + if err := func() error { + if err := response.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return res, errors.Wrap(err, "validate") + } + return &response, nil + default: + return res, validate.InvalidContentType(ct) + } + } + // Convenient error response. + defRes, err := func() (res *ErrorStatusCode, err error) { + ct, _, err := mime.ParseMediaType(resp.Header.Get("Content-Type")) + if err != nil { + return res, errors.Wrap(err, "parse media type") + } + switch { + case ct == "application/json": + buf, err := io.ReadAll(resp.Body) + if err != nil { + return res, err + } + d := jx.DecodeBytes(buf) + + var response Error + if err := func() error { + if err := response.Decode(d); err != nil { + return err + } + if err := d.Skip(); err != io.EOF { + return errors.New("unexpected trailing data") + } + return nil + }(); err != nil { + err = &ogenerrors.DecodeBodyError{ + ContentType: ct, + Body: buf, + Err: err, + } + return res, err + } + return &ErrorStatusCode{ + StatusCode: resp.StatusCode, + Response: response, + }, nil + default: + return res, validate.InvalidContentType(ct) + } + }() + if err != nil { + return res, errors.Wrapf(err, "default (code %d)", resp.StatusCode) + } + return res, errors.Wrap(defRes, "error") +} + func decodeGetScriptResponse(resp *http.Response) (res *Script, _ error) { switch resp.StatusCode { case 200: diff --git a/pkg/api/oas_response_encoders_gen.go b/pkg/api/oas_response_encoders_gen.go index ba6c549..914e275 100644 --- a/pkg/api/oas_response_encoders_gen.go +++ b/pkg/api/oas_response_encoders_gen.go @@ -237,6 +237,20 @@ func encodeGetMapfixResponse(response *Mapfix, w http.ResponseWriter, span trace return nil } +func encodeGetOperationResponse(response *Operation, w http.ResponseWriter, span trace.Span) error { + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(200) + span.SetStatus(codes.Ok, http.StatusText(200)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil +} + func encodeGetScriptResponse(response *Script, w http.ResponseWriter, span trace.Span) error { w.Header().Set("Content-Type", "application/json; charset=utf-8") w.WriteHeader(200) diff --git a/pkg/api/oas_router_gen.go b/pkg/api/oas_router_gen.go index 6ebc1ef..46e8499 100644 --- a/pkg/api/oas_router_gen.go +++ b/pkg/api/oas_router_gen.go @@ -494,6 +494,37 @@ func (s *Server) ServeHTTP(w http.ResponseWriter, r *http.Request) { } + case 'o': // Prefix: "operations/" + + if l := len("operations/"); len(elem) >= l && elem[0:l] == "operations/" { + elem = elem[l:] + } else { + break + } + + // Param: "OperationID" + // Leaf parameter, slashes are prohibited + idx := strings.IndexByte(elem, '/') + if idx >= 0 { + break + } + args[0] = elem + elem = "" + + if len(elem) == 0 { + // Leaf node. + switch r.Method { + case "GET": + s.handleGetOperationRequest([1]string{ + args[0], + }, elemIsEscaped, w, r) + default: + s.notAllowed(w, r, "GET") + } + + return + } + case 'r': // Prefix: "release-submissions" if l := len("release-submissions"); len(elem) >= l && elem[0:l] == "release-submissions" { @@ -1674,6 +1705,39 @@ func (s *Server) FindPath(method string, u *url.URL) (r Route, _ bool) { } + case 'o': // Prefix: "operations/" + + if l := len("operations/"); len(elem) >= l && elem[0:l] == "operations/" { + elem = elem[l:] + } else { + break + } + + // Param: "OperationID" + // Leaf parameter, slashes are prohibited + idx := strings.IndexByte(elem, '/') + if idx >= 0 { + break + } + args[0] = elem + elem = "" + + if len(elem) == 0 { + // Leaf node. + switch method { + case "GET": + r.name = GetOperationOperation + r.summary = "Retrieve operation with ID" + r.operationID = "getOperation" + r.pathPattern = "/operations/{OperationID}" + r.args = args + r.count = 1 + return r, true + default: + return + } + } + case 'r': // Prefix: "release-submissions" if l := len("release-submissions"); len(elem) >= l && elem[0:l] == "release-submissions" { diff --git a/pkg/api/oas_schemas_gen.go b/pkg/api/oas_schemas_gen.go index 4c368c2..e9c86a7 100644 --- a/pkg/api/oas_schemas_gen.go +++ b/pkg/api/oas_schemas_gen.go @@ -429,6 +429,76 @@ func (s *MapfixCreate) SetTargetAssetID(val int64) { s.TargetAssetID = val } +// Ref: #/components/schemas/Operation +type Operation struct { + OperationID int32 `json:"OperationID"` + Date int64 `json:"Date"` + Owner int64 `json:"Owner"` + Status int32 `json:"Status"` + StatusMessage string `json:"StatusMessage"` + Path string `json:"Path"` +} + +// GetOperationID returns the value of OperationID. +func (s *Operation) GetOperationID() int32 { + return s.OperationID +} + +// GetDate returns the value of Date. +func (s *Operation) GetDate() int64 { + return s.Date +} + +// GetOwner returns the value of Owner. +func (s *Operation) GetOwner() int64 { + return s.Owner +} + +// GetStatus returns the value of Status. +func (s *Operation) GetStatus() int32 { + return s.Status +} + +// GetStatusMessage returns the value of StatusMessage. +func (s *Operation) GetStatusMessage() string { + return s.StatusMessage +} + +// GetPath returns the value of Path. +func (s *Operation) GetPath() string { + return s.Path +} + +// SetOperationID sets the value of OperationID. +func (s *Operation) SetOperationID(val int32) { + s.OperationID = val +} + +// SetDate sets the value of Date. +func (s *Operation) SetDate(val int64) { + s.Date = val +} + +// SetOwner sets the value of Owner. +func (s *Operation) SetOwner(val int64) { + s.Owner = val +} + +// SetStatus sets the value of Status. +func (s *Operation) SetStatus(val int32) { + s.Status = val +} + +// SetStatusMessage sets the value of StatusMessage. +func (s *Operation) SetStatusMessage(val string) { + s.StatusMessage = val +} + +// SetPath sets the value of Path. +func (s *Operation) SetPath(val string) { + s.Path = val +} + // NewOptInt32 returns new OptInt32 with value set to v. func NewOptInt32(v int32) OptInt32 { return OptInt32{ diff --git a/pkg/api/oas_server_gen.go b/pkg/api/oas_server_gen.go index 9f294eb..9a623ad 100644 --- a/pkg/api/oas_server_gen.go +++ b/pkg/api/oas_server_gen.go @@ -164,6 +164,12 @@ type Handler interface { // // GET /mapfixes/{MapfixID} GetMapfix(ctx context.Context, params GetMapfixParams) (*Mapfix, error) + // GetOperation implements getOperation operation. + // + // Retrieve operation with ID. + // + // GET /operations/{OperationID} + GetOperation(ctx context.Context, params GetOperationParams) (*Operation, error) // GetScript implements getScript operation. // // Get the specified script by ID. diff --git a/pkg/api/oas_unimplemented_gen.go b/pkg/api/oas_unimplemented_gen.go index 738f398..6e9f4f3 100644 --- a/pkg/api/oas_unimplemented_gen.go +++ b/pkg/api/oas_unimplemented_gen.go @@ -247,6 +247,15 @@ func (UnimplementedHandler) GetMapfix(ctx context.Context, params GetMapfixParam return r, ht.ErrNotImplemented } +// GetOperation implements getOperation operation. +// +// Retrieve operation with ID. +// +// GET /operations/{OperationID} +func (UnimplementedHandler) GetOperation(ctx context.Context, params GetOperationParams) (r *Operation, _ error) { + return r, ht.ErrNotImplemented +} + // GetScript implements getScript operation. // // Get the specified script by ID. diff --git a/pkg/api/oas_validators_gen.go b/pkg/api/oas_validators_gen.go index 4dc04e6..19344a1 100644 --- a/pkg/api/oas_validators_gen.go +++ b/pkg/api/oas_validators_gen.go @@ -177,6 +177,56 @@ func (s *MapfixCreate) Validate() error { return nil } +func (s *Operation) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := (validate.String{ + MinLength: 0, + MinLengthSet: false, + MaxLength: 256, + MaxLengthSet: true, + Email: false, + Hostname: false, + Regex: nil, + }).Validate(string(s.StatusMessage)); err != nil { + return errors.Wrap(err, "string") + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "StatusMessage", + Error: err, + }) + } + if err := func() error { + if err := (validate.String{ + MinLength: 0, + MinLengthSet: false, + MaxLength: 128, + MaxLengthSet: true, + Email: false, + Hostname: false, + Regex: nil, + }).Validate(string(s.Path)); err != nil { + return errors.Wrap(err, "string") + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "Path", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + func (s *Script) Validate() error { if s == nil { return validate.ErrNilPointer