From 95b1b867dba35bedd99563456c9dedf5b5726f9a Mon Sep 17 00:00:00 2001 From: alxeg Date: Thu, 12 Mar 2026 01:07:37 +0300 Subject: [PATCH] Generate yookassa client via openapi tool ogen --- go.mod | 46 +- go.sum | 202 +- internal/service/yookassa/gen/oas_cfg_gen.go | 347 + .../service/yookassa/gen/oas_client_gen.go | 5049 ++ .../service/yookassa/gen/oas_defaults_gen.go | 47 + .../service/yookassa/gen/oas_handlers_gen.go | 5980 +++ .../yookassa/gen/oas_interfaces_gen.go | 110 + internal/service/yookassa/gen/oas_json_gen.go | 41990 ++++++++++++++++ .../service/yookassa/gen/oas_labeler_gen.go | 42 + .../yookassa/gen/oas_middleware_gen.go | 10 + .../yookassa/gen/oas_operations_gen.go | 36 + .../yookassa/gen/oas_parameters_gen.go | 5237 ++ .../yookassa/gen/oas_request_decoders_gen.go | 718 + .../yookassa/gen/oas_request_encoders_gen.go | 137 + .../yookassa/gen/oas_response_decoders_gen.go | 7031 +++ .../yookassa/gen/oas_response_encoders_gen.go | 2229 + .../service/yookassa/gen/oas_router_gen.go | 1691 + .../service/yookassa/gen/oas_schemas_gen.go | 24790 +++++++++ .../service/yookassa/gen/oas_security_gen.go | 207 + .../service/yookassa/gen/oas_server_gen.go | 316 + .../yookassa/gen/oas_unimplemented_gen.go | 383 + internal/service/yookassa/gen/oas_uri_gen.go | 67 + .../yookassa/gen/oas_validators_gen.go | 13852 +++++ internal/service/yookassa/ogen.yml | 2 + internal/service/yookassa/package.go | 3 + .../yookassa-openapi-specification.yaml | 5491 ++ internal/service/yookassa/yookassa_service.go | 37 +- 27 files changed, 116035 insertions(+), 15 deletions(-) create mode 100644 internal/service/yookassa/gen/oas_cfg_gen.go create mode 100644 internal/service/yookassa/gen/oas_client_gen.go create mode 100644 internal/service/yookassa/gen/oas_defaults_gen.go create mode 100644 internal/service/yookassa/gen/oas_handlers_gen.go create mode 100644 internal/service/yookassa/gen/oas_interfaces_gen.go create mode 100644 internal/service/yookassa/gen/oas_json_gen.go create mode 100644 internal/service/yookassa/gen/oas_labeler_gen.go create mode 100644 internal/service/yookassa/gen/oas_middleware_gen.go create mode 100644 internal/service/yookassa/gen/oas_operations_gen.go create mode 100644 internal/service/yookassa/gen/oas_parameters_gen.go create mode 100644 internal/service/yookassa/gen/oas_request_decoders_gen.go create mode 100644 internal/service/yookassa/gen/oas_request_encoders_gen.go create mode 100644 internal/service/yookassa/gen/oas_response_decoders_gen.go create mode 100644 internal/service/yookassa/gen/oas_response_encoders_gen.go create mode 100644 internal/service/yookassa/gen/oas_router_gen.go create mode 100644 internal/service/yookassa/gen/oas_schemas_gen.go create mode 100644 internal/service/yookassa/gen/oas_security_gen.go create mode 100644 internal/service/yookassa/gen/oas_server_gen.go create mode 100644 internal/service/yookassa/gen/oas_unimplemented_gen.go create mode 100644 internal/service/yookassa/gen/oas_uri_gen.go create mode 100644 internal/service/yookassa/gen/oas_validators_gen.go create mode 100644 internal/service/yookassa/ogen.yml create mode 100644 internal/service/yookassa/package.go create mode 100644 internal/service/yookassa/yookassa-openapi-specification.yaml diff --git a/go.mod b/go.mod index d074069..18d9768 100644 --- a/go.mod +++ b/go.mod @@ -1,19 +1,25 @@ module payouts -go 1.24.4 +go 1.25.0 require ( + github.com/go-faster/errors v0.7.1 + github.com/go-faster/jx v1.2.0 github.com/go-viper/encoding/javaproperties v0.1.0 github.com/go-viper/mapstructure/v2 v2.5.0 github.com/google/uuid v1.6.0 github.com/gorilla/mux v1.8.1 github.com/jellydator/ttlcache/v3 v3.4.0 github.com/jinzhu/copier v0.4.0 + github.com/ogen-go/ogen v1.20.1 github.com/ogier/pflag v0.0.1 github.com/orandin/slog-gorm v1.4.0 github.com/prometheus/client_golang v1.23.2 github.com/samber/slog-multi v1.7.1 github.com/spf13/viper v1.21.0 + go.opentelemetry.io/otel v1.42.0 + go.opentelemetry.io/otel/metric v1.42.0 + go.opentelemetry.io/otel/trace v1.42.0 go.uber.org/fx v1.24.0 golang.org/x/crypto v0.48.0 gorm.io/driver/postgres v1.6.0 @@ -24,35 +30,69 @@ require ( require ( github.com/beorn7/perks v1.0.1 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect + github.com/dlclark/regexp2 v1.11.5 // indirect + github.com/dprotaso/go-yit v0.0.0-20220510233725-9ba8df137936 // indirect + github.com/fatih/color v1.18.0 // indirect github.com/fsnotify/fsnotify v1.9.0 // indirect + github.com/getkin/kin-openapi v0.133.0 // indirect + github.com/ghodss/yaml v1.0.0 // indirect + github.com/go-faster/yaml v0.4.6 // indirect + github.com/go-logr/logr v1.4.3 // indirect + github.com/go-logr/stdr v1.2.2 // indirect + github.com/go-openapi/jsonpointer v0.21.0 // indirect + github.com/go-openapi/swag v0.23.0 // indirect github.com/jackc/pgpassfile v1.0.0 // indirect github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 // indirect github.com/jackc/pgx/v5 v5.6.0 // indirect github.com/jackc/puddle/v2 v2.2.2 // indirect github.com/jinzhu/inflection v1.0.0 // indirect github.com/jinzhu/now v1.1.5 // indirect + github.com/josharian/intern v1.0.0 // indirect github.com/magiconair/properties v1.8.7 // indirect + github.com/mailru/easyjson v0.7.7 // indirect + github.com/mattn/go-colorable v0.1.13 // indirect + github.com/mattn/go-isatty v0.0.20 // indirect github.com/mattn/go-sqlite3 v1.14.22 // indirect + github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect + github.com/oapi-codegen/oapi-codegen/v2 v2.6.0 // indirect + github.com/oasdiff/yaml v0.0.0-20250309154309-f31be36b4037 // indirect + github.com/oasdiff/yaml3 v0.0.0-20250309153720-d2182401db90 // indirect github.com/pelletier/go-toml/v2 v2.2.4 // indirect + github.com/perimeterx/marshmallow v1.1.5 // indirect github.com/prometheus/client_model v0.6.2 // indirect github.com/prometheus/common v0.66.1 // indirect github.com/prometheus/procfs v0.16.1 // indirect github.com/sagikazarmark/locafero v0.11.0 // indirect github.com/samber/lo v1.52.0 // indirect github.com/samber/slog-common v0.20.0 // indirect + github.com/segmentio/asm v1.2.1 // indirect + github.com/shopspring/decimal v1.4.0 // indirect github.com/sourcegraph/conc v0.3.1-0.20240121214520-5f936abd7ae8 // indirect + github.com/speakeasy-api/jsonpath v0.6.0 // indirect + github.com/speakeasy-api/openapi-overlay v0.10.2 // indirect github.com/spf13/afero v1.15.0 // indirect github.com/spf13/cast v1.10.0 // indirect github.com/spf13/pflag v1.0.10 // indirect github.com/subosito/gotenv v1.6.0 // indirect + github.com/vmware-labs/yaml-jsonpath v0.3.2 // indirect + github.com/woodsbury/decimal128 v1.3.0 // indirect + go.opentelemetry.io/auto/sdk v1.2.1 // indirect go.uber.org/dig v1.19.0 // indirect - go.uber.org/multierr v1.10.0 // indirect - go.uber.org/zap v1.26.0 // indirect + go.uber.org/multierr v1.11.0 // indirect + go.uber.org/zap v1.27.1 // indirect go.yaml.in/yaml/v2 v2.4.2 // indirect go.yaml.in/yaml/v3 v3.0.4 // indirect + golang.org/x/exp v0.0.0-20230725093048-515e97ebf090 // indirect + golang.org/x/mod v0.33.0 // indirect + golang.org/x/net v0.51.0 // indirect golang.org/x/sync v0.19.0 // indirect golang.org/x/sys v0.41.0 // indirect golang.org/x/text v0.34.0 // indirect + golang.org/x/tools v0.42.0 // indirect google.golang.org/protobuf v1.36.8 // indirect + gopkg.in/yaml.v2 v2.4.0 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect ) + +tool github.com/oapi-codegen/oapi-codegen/v2/cmd/oapi-codegen diff --git a/go.sum b/go.sum index c98113e..89ed8b2 100644 --- a/go.sum +++ b/go.sum @@ -2,23 +2,73 @@ github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= +github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= +github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/dlclark/regexp2 v1.11.5 h1:Q/sSnsKerHeCkc/jSTNq1oCm7KiVgUMZRDUoRu0JQZQ= +github.com/dlclark/regexp2 v1.11.5/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8= +github.com/dprotaso/go-yit v0.0.0-20191028211022-135eb7262960/go.mod h1:9HQzr9D/0PGwMEbC3d5AB7oi67+h4TsQqItC1GVYG58= +github.com/dprotaso/go-yit v0.0.0-20220510233725-9ba8df137936 h1:PRxIJD8XjimM5aTknUK9w6DHLDox2r2M3DI4i2pnd3w= +github.com/dprotaso/go-yit v0.0.0-20220510233725-9ba8df137936/go.mod h1:ttYvX5qlB+mlV1okblJqcSMtR4c52UKxDiX9GRBS8+Q= +github.com/fatih/color v1.18.0 h1:S8gINlzdQ840/4pfAwic/ZE0djQEH3wM94VfqLTZcOM= +github.com/fatih/color v1.18.0/go.mod h1:4FelSpRwEGDpQ12mAdzqdOukCy4u8WUtOY6lkT/6HfU= github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= +github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= +github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/fsnotify/fsnotify v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S9k= github.com/fsnotify/fsnotify v1.9.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0= +github.com/getkin/kin-openapi v0.133.0 h1:pJdmNohVIJ97r4AUFtEXRXwESr8b0bD721u/Tz6k8PQ= +github.com/getkin/kin-openapi v0.133.0/go.mod h1:boAciF6cXk5FhPqe/NQeBTeenbjqU4LhWBf09ILVvWE= +github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= +github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/go-faster/errors v0.7.1 h1:MkJTnDoEdi9pDabt1dpWf7AA8/BaSYZqibYyhZ20AYg= +github.com/go-faster/errors v0.7.1/go.mod h1:5ySTjWFiphBs07IKuiL69nxdfd5+fzh1u7FPGZP2quo= +github.com/go-faster/jx v1.2.0 h1:T2YHJPrFaYu21fJtUxC9GzmluKu8rVIFDwwGBKTDseI= +github.com/go-faster/jx v1.2.0/go.mod h1:UWLOVDmMG597a5tBFPLIWJdUxz5/2emOpfsj9Neg0PE= +github.com/go-faster/yaml v0.4.6 h1:lOK/EhI04gCpPgPhgt0bChS6bvw7G3WwI8xxVe0sw9I= +github.com/go-faster/yaml v0.4.6/go.mod h1:390dRIvV4zbnO7qC9FGo6YYutc+wyyUSHBgbXL52eXk= +github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI= +github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= +github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= +github.com/go-openapi/jsonpointer v0.21.0 h1:YgdVicSA9vH5RiHs9TZW5oyafXZFc6+2Vc1rr/O9oNQ= +github.com/go-openapi/jsonpointer v0.21.0/go.mod h1:IUyH9l/+uyhIYQ/PXVA41Rexl+kOkAPDdXEYns6fzUY= +github.com/go-openapi/swag v0.23.0 h1:vsEVJDUo2hPJ2tu0/Xc+4noaxyEffXNIs3cOULZ+GrE= +github.com/go-openapi/swag v0.23.0/go.mod h1:esZ8ITTYEsH1V2trKHjAN8Ai7xHb8RV+YSZ577vPjgQ= +github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= +github.com/go-test/deep v1.0.8 h1:TDsG77qcSprGbC6vTN8OuXp5g+J+b5Pcguhf7Zt61VM= +github.com/go-test/deep v1.0.8/go.mod h1:5C2ZWiW0ErCdrYzpqxLbTX7MG14M9iiw8DgHncVwcsE= github.com/go-viper/encoding/javaproperties v0.1.0 h1:4pQN/pez/rMy9ITZ++SgLH6VIN3zWzNNuWFHKjrpn6w= github.com/go-viper/encoding/javaproperties v0.1.0/go.mod h1:LGaThjx5J/GFdQRJscxLMQsYt0XKAM7IW9YzsJTv6jw= github.com/go-viper/mapstructure/v2 v2.5.0 h1:vM5IJoUAy3d7zRSVtIwQgBj7BiWtMPfmPEgAXnvj1Ro= github.com/go-viper/mapstructure/v2 v2.5.0/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM= +github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= +github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= +github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= +github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= +github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= +github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= +github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= +github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY= github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ= +github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= +github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM= github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg= github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 h1:iCEnooe7UlwOQYpKFhBabPMi4aNAfoODPEFNiAnClxo= @@ -35,26 +85,65 @@ github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc= github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ= github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= -github.com/klauspost/compress v1.18.0 h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zttxdo= -github.com/klauspost/compress v1.18.0/go.mod h1:2Pp+KzxcywXVXMr50+X0Q/Lsb43OQHYWRCY2AiWywWQ= +github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= +github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= +github.com/klauspost/compress v1.18.2 h1:iiPHWW0YrcFgpBYhsA6D1+fqHssJscY/Tm/y2Uqnapk= +github.com/klauspost/compress v1.18.2/go.mod h1:R0h/fSBs8DE4ENlcrlib3PsXS61voFxhIs2DeRhCvJ4= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY= github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= +github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= +github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= +github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= +github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= +github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= +github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-sqlite3 v1.14.22 h1:2gZY6PC6kBnID23Tichd1K+Z0oS6nE/XwU+Vz/5o4kU= github.com/mattn/go-sqlite3 v1.14.22/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y= +github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 h1:RWengNIwukTxcDr9M+97sNutRR1RKhG96O6jWumTTnw= +github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826/go.mod h1:TaXosZuwdSHYgviHp1DAtfrULt5eUgsSMsZf+YrPgl8= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= +github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= +github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= +github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= +github.com/oapi-codegen/oapi-codegen/v2 v2.6.0 h1:4i+F2cvwBFZeplxCssNdLy3MhNzUD87mI3HnayHZkAU= +github.com/oapi-codegen/oapi-codegen/v2 v2.6.0/go.mod h1:eWHeJSohQJIINJZzzQriVynfGsnlQVh0UkN2UYYcw4Q= +github.com/oasdiff/yaml v0.0.0-20250309154309-f31be36b4037 h1:G7ERwszslrBzRxj//JalHPu/3yz+De2J+4aLtSRlHiY= +github.com/oasdiff/yaml v0.0.0-20250309154309-f31be36b4037/go.mod h1:2bpvgLBZEtENV5scfDFEtB/5+1M4hkQhDQrccEJ/qGw= +github.com/oasdiff/yaml3 v0.0.0-20250309153720-d2182401db90 h1:bQx3WeLcUWy+RletIKwUIt4x3t8n2SxavmoclizMb8c= +github.com/oasdiff/yaml3 v0.0.0-20250309153720-d2182401db90/go.mod h1:y5+oSEHCPT/DGrS++Wc/479ERge0zTFxaF8PbGKcg2o= +github.com/ogen-go/ogen v1.20.1 h1:AFpIeI2rS37TNIMRQTHhAkThICQpa1p+Pceu7HP7xsA= +github.com/ogen-go/ogen v1.20.1/go.mod h1:eXQeqzIfw9qUjXdpqNtkX+XCvhlWNymqU1bm7S7y8iU= github.com/ogier/pflag v0.0.1 h1:RW6JSWSu/RkSatfcLtogGfFgpim5p7ARQ10ECk5O750= github.com/ogier/pflag v0.0.1/go.mod h1:zkFki7tvTa0tafRvTBIZTvzYyAu6kQhPZFnshFFPE+g= +github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.10.2/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= +github.com/onsi/ginkgo v1.16.4 h1:29JGrr5oVBm5ulCWet69zQkzWipVXIol6ygQUe/EzNc= +github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= +github.com/onsi/ginkgo/v2 v2.1.3/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c= +github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= +github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= +github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= +github.com/onsi/gomega v1.19.0 h1:4ieX6qQjPP/BfC3mpsAtIGGlxTWPeA3Inl/7DtXw1tw= +github.com/onsi/gomega v1.19.0/go.mod h1:LY+I3pBVzYsTBU1AnDwOSxaYi9WoWiqgwooUqq9yPro= github.com/orandin/slog-gorm v1.4.0 h1:FgA8hJufF9/jeNSYoEXmHPPBwET2gwlF3B85JdpsTUU= github.com/orandin/slog-gorm v1.4.0/go.mod h1:MoZ51+b7xE9lwGNPYEhxcUtRNrYzjdcKvA8QXQQGEPA= github.com/pelletier/go-toml/v2 v2.2.4 h1:mye9XuhQ6gvn5h28+VilKrrPoQVanw5PMw/TB0t5Ec4= github.com/pelletier/go-toml/v2 v2.2.4/go.mod h1:2gIqNv+qfxSVS7cM2xJQKtLSTLUE9V8t9Stt+h56mCY= +github.com/perimeterx/marshmallow v1.1.5 h1:a2LALqQ1BlHM8PZblsDdidgv1mWi1DgC2UmX50IvK2s= +github.com/perimeterx/marshmallow v1.1.5/go.mod h1:dsXbUu8CRzfYP5a87xpp0xq9S3u0Vchtcl8we9tYaXw= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/prometheus/client_golang v1.23.2 h1:Je96obch5RDVy3FDMndoUsjAhG5Edi49h0RJWRi/o0o= @@ -65,8 +154,8 @@ github.com/prometheus/common v0.66.1 h1:h5E0h5/Y8niHc5DlaLlWLArTQI7tMrsfQjHV+d9Z github.com/prometheus/common v0.66.1/go.mod h1:gcaUsgf3KfRSwHY4dIMXLPV0K/Wg1oZ8+SbZk/HH/dA= github.com/prometheus/procfs v0.16.1 h1:hZ15bTNuirocR6u0JZ6BAHHmwS1p8B4P6MRqxtzMyRg= github.com/prometheus/procfs v0.16.1/go.mod h1:teAbpZRB1iIAJYREa1LsoWUXykVXA1KlTmWl8x/U+Is= -github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ= -github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog= +github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ= +github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc= github.com/sagikazarmark/locafero v0.11.0 h1:1iurJgmM9G3PA/I+wWYIOw/5SyBtxapeHDcg+AAIFXc= github.com/sagikazarmark/locafero v0.11.0/go.mod h1:nVIGvgyzw595SUSUE6tvCp3YYTeHs15MvlmU87WwIik= github.com/samber/lo v1.52.0 h1:Rvi+3BFHES3A8meP33VPAxiBZX/Aws5RxrschYGjomw= @@ -75,8 +164,18 @@ github.com/samber/slog-common v0.20.0 h1:WaLnm/aCvBJSk5nR5aXZTFBaV0B47A+AEaEOiZD github.com/samber/slog-common v0.20.0/go.mod h1:+Ozat1jgnnE59UAlmNX1IF3IByHsODnnwf9jUcBZ+m8= github.com/samber/slog-multi v1.7.1 h1:aCLXHRxgU+2v0PVlEOh7phynzM7CRo89ZgFtOwaqVEE= github.com/samber/slog-multi v1.7.1/go.mod h1:A4KQC99deqfkCDJcL/cO3kX6McX7FffQAx/8QHink+c= +github.com/segmentio/asm v1.2.1 h1:DTNbBqs57ioxAD4PrArqftgypG4/qNpXoJx8TVXxPR0= +github.com/segmentio/asm v1.2.1/go.mod h1:BqMnlJP91P8d+4ibuonYZw9mfnzI9HfxselHZr5aAcs= +github.com/sergi/go-diff v1.1.0 h1:we8PVUC3FE2uYfodKH/nBHMSetSfHDR6scGdBi+erh0= +github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= +github.com/shopspring/decimal v1.4.0 h1:bxl37RwXBklmTi0C79JfXCEBD1cqqHt0bbgBAGFp81k= +github.com/shopspring/decimal v1.4.0/go.mod h1:gawqmDU56v4yIKSwfBSFip1HdCCXN8/+DMd9qYNcwME= github.com/sourcegraph/conc v0.3.1-0.20240121214520-5f936abd7ae8 h1:+jumHNA0Wrelhe64i8F6HNlS8pkoyMv5sreGx2Ry5Rw= github.com/sourcegraph/conc v0.3.1-0.20240121214520-5f936abd7ae8/go.mod h1:3n1Cwaq1E1/1lhQhtRK2ts/ZwZEhjcQeJQ1RuC6Q/8U= +github.com/speakeasy-api/jsonpath v0.6.0 h1:IhtFOV9EbXplhyRqsVhHoBmmYjblIRh5D1/g8DHMXJ8= +github.com/speakeasy-api/jsonpath v0.6.0/go.mod h1:ymb2iSkyOycmzKwbEAYPJV/yi2rSmvBCLZJcyD+VVWw= +github.com/speakeasy-api/openapi-overlay v0.10.2 h1:VOdQ03eGKeiHnpb1boZCGm7x8Haj6gST0P3SGTX95GU= +github.com/speakeasy-api/openapi-overlay v0.10.2/go.mod h1:n0iOU7AqKpNFfEt6tq7qYITC4f0yzVVdFw0S7hukemg= github.com/spf13/afero v1.15.0 h1:b/YBCLWAJdFWJTN9cLhiXXcD7mzKn9Dm86dNnfyQw1I= github.com/spf13/afero v1.15.0/go.mod h1:NC2ByUVxtQs4b3sIUphxK0NioZnmxgyCrfzeuq8lxMg= github.com/spf13/cast v1.10.0 h1:h2x0u2shc1QuLHfxi+cTJvs30+ZAHOGRic8uyGTDWxY= @@ -87,38 +186,125 @@ github.com/spf13/viper v1.21.0 h1:x5S+0EU27Lbphp4UKm1C+1oQO+rKx36vfCoaVebLFSU= github.com/spf13/viper v1.21.0/go.mod h1:P0lhsswPGWD/1lZJ9ny3fYnVqxiegrlNrEmgLjbTCAY= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8= github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU= +github.com/ugorji/go/codec v1.2.11 h1:BMaWp1Bb6fHwEtbplGBGJ498wD+LKlNSl25MjdZY4dU= +github.com/ugorji/go/codec v1.2.11/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg= +github.com/vmware-labs/yaml-jsonpath v0.3.2 h1:/5QKeCBGdsInyDCyVNLbXyilb61MXGi9NP674f9Hobk= +github.com/vmware-labs/yaml-jsonpath v0.3.2/go.mod h1:U6whw1z03QyqgWdgXxvVnQ90zN1BWz5V+51Ewf8k+rQ= +github.com/woodsbury/decimal128 v1.3.0 h1:8pffMNWIlC0O5vbyHWFZAt5yWvWcrHA+3ovIIjVWss0= +github.com/woodsbury/decimal128 v1.3.0/go.mod h1:C5UTmyTjW3JftjUFzOVhC20BEQa2a4ZKOB5I6Zjb+ds= +github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +go.opentelemetry.io/auto/sdk v1.2.1 h1:jXsnJ4Lmnqd11kwkBV2LgLoFMZKizbCi5fNZ/ipaZ64= +go.opentelemetry.io/auto/sdk v1.2.1/go.mod h1:KRTj+aOaElaLi+wW1kO/DZRXwkF4C5xPbEe3ZiIhN7Y= +go.opentelemetry.io/otel v1.42.0 h1:lSQGzTgVR3+sgJDAU/7/ZMjN9Z+vUip7leaqBKy4sho= +go.opentelemetry.io/otel v1.42.0/go.mod h1:lJNsdRMxCUIWuMlVJWzecSMuNjE7dOYyWlqOXWkdqCc= +go.opentelemetry.io/otel/metric v1.42.0 h1:2jXG+3oZLNXEPfNmnpxKDeZsFI5o4J+nz6xUlaFdF/4= +go.opentelemetry.io/otel/metric v1.42.0/go.mod h1:RlUN/7vTU7Ao/diDkEpQpnz3/92J9ko05BIwxYa2SSI= +go.opentelemetry.io/otel/trace v1.42.0 h1:OUCgIPt+mzOnaUTpOQcBiM/PLQ/Op7oq6g4LenLmOYY= +go.opentelemetry.io/otel/trace v1.42.0/go.mod h1:f3K9S+IFqnumBkKhRJMeaZeNk9epyhnCmQh/EysQCdc= go.uber.org/dig v1.19.0 h1:BACLhebsYdpQ7IROQ1AGPjrXcP5dF80U3gKoFzbaq/4= go.uber.org/dig v1.19.0/go.mod h1:Us0rSJiThwCv2GteUN0Q7OKvU7n5J4dxZ9JKUXozFdE= go.uber.org/fx v1.24.0 h1:wE8mruvpg2kiiL1Vqd0CC+tr0/24XIB10Iwp2lLWzkg= go.uber.org/fx v1.24.0/go.mod h1:AmDeGyS+ZARGKM4tlH4FY2Jr63VjbEDJHtqXTGP5hbo= go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= -go.uber.org/multierr v1.10.0 h1:S0h4aNzvfcFsC3dRF1jLoaov7oRaKqRGC/pUEJ2yvPQ= -go.uber.org/multierr v1.10.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= -go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo= -go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so= +go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= +go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= +go.uber.org/zap v1.27.1 h1:08RqriUEv8+ArZRYSTXy1LeBScaMpVSTBhCeaZYfMYc= +go.uber.org/zap v1.27.1/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= go.yaml.in/yaml/v2 v2.4.2 h1:DzmwEr2rDGHl7lsFgAHxmNz/1NlQ7xLIrlN2h5d1eGI= go.yaml.in/yaml/v2 v2.4.2/go.mod h1:081UH+NErpNdqlCXm3TtEran0rJZGxAYx9hb/ELlsPU= go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc= go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.48.0 h1:/VRzVqiRSggnhY7gNRxPauEQ5Drw9haKdM0jqfcCFts= golang.org/x/crypto v0.48.0/go.mod h1:r0kV5h3qnFPlQnBSrULhlsRfryS2pmewsg+XfMgkVos= +golang.org/x/exp v0.0.0-20230725093048-515e97ebf090 h1:Di6/M8l0O2lCLc6VVRWhgCiApHV8MnQurBnFSHsQtNY= +golang.org/x/exp v0.0.0-20230725093048-515e97ebf090/go.mod h1:FXUEEKJgO7OQYeo8N01OfiKP8RXMtf6e8aTskBGqWdc= +golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.33.0 h1:tHFzIWbBifEmbwtGz65eaWyGiGZatSrT9prnU8DbVL8= +golang.org/x/mod v0.33.0/go.mod h1:swjeQEj+6r7fODbD2cqrnje9PnziFuw4bmLbBZFrQ5w= +golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= +golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.51.0 h1:94R/GTO7mt3/4wIKpcR5gkGmRLOuE/2hNGeWq/GBIFo= +golang.org/x/net v0.51.0/go.mod h1:aamm+2QF5ogm02fjy5Bb7CQ0WMt1/WVM7FtyaTLlA9Y= +golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.19.0 h1:vV+1eWNmZ5geRlYjzm2adRgW2/mcpevXNg50YZtPCE4= golang.org/x/sync v0.19.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI= +golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.41.0 h1:Ivj+2Cp/ylzLiEU89QhWblYnOE9zerudt9Ftecq2C6k= golang.org/x/sys v0.41.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.34.0 h1:oL/Qq0Kdaqxa1KbNeMKwQq0reLCCaFtqu2eNuSeNHbk= golang.org/x/text v0.34.0/go.mod h1:homfLqTYRFyVYemLBFl5GgL/DWEiH5wcsQ5gSh1yziA= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.42.0 h1:uNgphsn75Tdz5Ji2q36v/nsFSfR/9BRFvqhGBaJGd5k= +golang.org/x/tools v0.42.0/go.mod h1:Ma6lCIwGZvHK6XtgbswSoWroEkhugApmsXyrUmBhfr0= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= +google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= +google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= +google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= +google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= +google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= +google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.36.8 h1:xHScyCOEuuwZEc6UtSOvPbAT4zRh0xcNRYekJwfqyMc= google.golang.org/protobuf v1.36.8/go.mod h1:fuxRtAxBytpl4zzqUh6/eyUujkJdNiuEkXntxiD/uRU= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= +gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= +gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= +gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= +gopkg.in/yaml.v3 v3.0.0-20191026110619-0b21df46bc1d/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/internal/service/yookassa/gen/oas_cfg_gen.go b/internal/service/yookassa/gen/oas_cfg_gen.go new file mode 100644 index 0000000..57dc7ff --- /dev/null +++ b/internal/service/yookassa/gen/oas_cfg_gen.go @@ -0,0 +1,347 @@ +// Code generated by ogen, DO NOT EDIT. + +package gen + +import ( + "net/http" + "strings" + + ht "github.com/ogen-go/ogen/http" + "github.com/ogen-go/ogen/middleware" + "github.com/ogen-go/ogen/ogenerrors" + "github.com/ogen-go/ogen/ogenregex" + "github.com/ogen-go/ogen/otelogen" + "go.opentelemetry.io/otel" + "go.opentelemetry.io/otel/attribute" + "go.opentelemetry.io/otel/metric" + "go.opentelemetry.io/otel/trace" +) + +var regexMap = map[string]ogenregex.Regexp{ + "(.)([0-9а-яА-Яa-zA-Z]+)(.)": ogenregex.MustCompile("(.)([0-9а-яА-Яa-zA-Z]+)(.)"), + "(?s).{1,210}": ogenregex.MustCompile("(?s).{1,210}"), + "([\\d]{20})|(0)": ogenregex.MustCompile("([\\d]{20})|(0)"), + "([\\d]{8})|(0)": ogenregex.MustCompile("([\\d]{8})|(0)"), + "(^00[1-9]{1}$)|(^0[1-6]{1}[0-9]{1}$)|(^07[0-3]{1}$)": ogenregex.MustCompile("(^00[1-9]{1}$)|(^0[1-6]{1}[0-9]{1}$)|(^07[0-3]{1}$)"), + "[0-9]{1,150}": ogenregex.MustCompile("[0-9]{1,150}"), + "[0-9]{10}": ogenregex.MustCompile("[0-9]{10}"), + "[0-9]{11,33}": ogenregex.MustCompile("[0-9]{11,33}"), + "[0-9]{14,19}": ogenregex.MustCompile("[0-9]{14,19}"), + "[0-9]{16,19}": ogenregex.MustCompile("[0-9]{16,19}"), + "[0-9]{24}": ogenregex.MustCompile("[0-9]{24}"), + "[0-9]{2}": ogenregex.MustCompile("[0-9]{2}"), + "[0-9]{4,15}": ogenregex.MustCompile("[0-9]{4,15}"), + "[0-9]{4}": ogenregex.MustCompile("[0-9]{4}"), + "[0-9]{6}": ogenregex.MustCompile("[0-9]{6}"), + "[0-9]{9}": ogenregex.MustCompile("[0-9]{9}"), + "[0-9a-zA-Z+-_.]{1,64}": ogenregex.MustCompile("[0-9a-zA-Z+-_.]{1,64}"), + "[A-Z]{3}": ogenregex.MustCompile("[A-Z]{3}"), + "[a-zA-Z '-]{0,26}": ogenregex.MustCompile("[a-zA-Z '-]{0,26}"), + "[a-zA-Z0-9]{12}": ogenregex.MustCompile("[a-zA-Z0-9]{12}"), + "\\d{1,20}": ogenregex.MustCompile("\\d{1,20}"), + "\\d{10}|\\d{12}": ogenregex.MustCompile("\\d{10}|\\d{12}"), + "\\d{20}": ogenregex.MustCompile("\\d{20}"), + "\\d{9}": ogenregex.MustCompile("\\d{9}"), + "^[0]{1}$": ogenregex.MustCompile("^[0]{1}$"), + "^[\\-a-zA-Zа-яёА-ЯЁ ]]*$": ogenregex.MustCompile("^[\\-a-zA-Zа-яёА-ЯЁ ]]*$"), +} +var ( + // Allocate option closure once. + clientSpanKind = trace.WithSpanKind(trace.SpanKindClient) + // Allocate option closure once. + serverSpanKind = trace.WithSpanKind(trace.SpanKindServer) +) + +type ( + optionFunc[C any] func(*C) + otelOptionFunc func(*otelConfig) +) + +type otelConfig struct { + TracerProvider trace.TracerProvider + Tracer trace.Tracer + MeterProvider metric.MeterProvider + Meter metric.Meter + Attributes []attribute.KeyValue +} + +func (cfg *otelConfig) initOTEL() { + if cfg.TracerProvider == nil { + cfg.TracerProvider = otel.GetTracerProvider() + } + if cfg.MeterProvider == nil { + cfg.MeterProvider = otel.GetMeterProvider() + } + cfg.Tracer = cfg.TracerProvider.Tracer(otelogen.Name, + trace.WithInstrumentationVersion(otelogen.SemVersion()), + ) + cfg.Meter = cfg.MeterProvider.Meter(otelogen.Name, + metric.WithInstrumentationVersion(otelogen.SemVersion()), + ) +} + +// ErrorHandler is error handler. +type ErrorHandler = ogenerrors.ErrorHandler + +type serverConfig struct { + otelConfig + NotFound http.HandlerFunc + MethodNotAllowed func(w http.ResponseWriter, r *http.Request, allowed string) + ErrorHandler ErrorHandler + Prefix string + Middleware Middleware + MaxMultipartMemory int64 +} + +// ServerOption is server config option. +type ServerOption interface { + applyServer(*serverConfig) +} + +var _ ServerOption = (optionFunc[serverConfig])(nil) + +func (o optionFunc[C]) applyServer(c *C) { + o(c) +} + +var _ ServerOption = (otelOptionFunc)(nil) + +func (o otelOptionFunc) applyServer(c *serverConfig) { + o(&c.otelConfig) +} + +func newServerConfig(opts ...ServerOption) serverConfig { + cfg := serverConfig{ + NotFound: http.NotFound, + MethodNotAllowed: nil, + ErrorHandler: ogenerrors.DefaultErrorHandler, + Middleware: nil, + MaxMultipartMemory: 32 << 20, // 32 MB + } + for _, opt := range opts { + opt.applyServer(&cfg) + } + cfg.initOTEL() + return cfg +} + +type baseServer struct { + cfg serverConfig + requests metric.Int64Counter + errors metric.Int64Counter + duration metric.Float64Histogram +} + +func (s baseServer) notFound(w http.ResponseWriter, r *http.Request) { + s.cfg.NotFound(w, r) +} + +type notAllowedParams struct { + allowedMethods string + allowedHeaders map[string]string + acceptPost string + acceptPatch string +} + +func (s baseServer) notAllowed(w http.ResponseWriter, r *http.Request, params notAllowedParams) { + h := w.Header() + isOptions := r.Method == "OPTIONS" + if isOptions { + h.Set("Access-Control-Allow-Methods", params.allowedMethods) + if params.allowedHeaders != nil { + m := r.Header.Get("Access-Control-Request-Method") + if m != "" { + allowedHeaders, ok := params.allowedHeaders[strings.ToUpper(m)] + if ok { + h.Set("Access-Control-Allow-Headers", allowedHeaders) + } + } + } + if params.acceptPost != "" { + h.Set("Accept-Post", params.acceptPost) + } + if params.acceptPatch != "" { + h.Set("Accept-Patch", params.acceptPatch) + } + } + if s.cfg.MethodNotAllowed != nil { + s.cfg.MethodNotAllowed(w, r, params.allowedMethods) + return + } + status := http.StatusNoContent + if !isOptions { + h.Set("Allow", params.allowedMethods) + status = http.StatusMethodNotAllowed + } + w.WriteHeader(status) +} + +func (cfg serverConfig) baseServer() (s baseServer, err error) { + s = baseServer{cfg: cfg} + if s.requests, err = otelogen.ServerRequestCountCounter(s.cfg.Meter); err != nil { + return s, err + } + if s.errors, err = otelogen.ServerErrorsCountCounter(s.cfg.Meter); err != nil { + return s, err + } + if s.duration, err = otelogen.ServerDurationHistogram(s.cfg.Meter); err != nil { + return s, err + } + return s, nil +} + +type clientConfig struct { + otelConfig + Client ht.Client +} + +// ClientOption is client config option. +type ClientOption interface { + applyClient(*clientConfig) +} + +var _ ClientOption = (optionFunc[clientConfig])(nil) + +func (o optionFunc[C]) applyClient(c *C) { + o(c) +} + +var _ ClientOption = (otelOptionFunc)(nil) + +func (o otelOptionFunc) applyClient(c *clientConfig) { + o(&c.otelConfig) +} + +func newClientConfig(opts ...ClientOption) clientConfig { + cfg := clientConfig{ + Client: http.DefaultClient, + } + for _, opt := range opts { + opt.applyClient(&cfg) + } + cfg.initOTEL() + return cfg +} + +type baseClient struct { + cfg clientConfig + requests metric.Int64Counter + errors metric.Int64Counter + duration metric.Float64Histogram +} + +func (cfg clientConfig) baseClient() (c baseClient, err error) { + c = baseClient{cfg: cfg} + if c.requests, err = otelogen.ClientRequestCountCounter(c.cfg.Meter); err != nil { + return c, err + } + if c.errors, err = otelogen.ClientErrorsCountCounter(c.cfg.Meter); err != nil { + return c, err + } + if c.duration, err = otelogen.ClientDurationHistogram(c.cfg.Meter); err != nil { + return c, err + } + return c, nil +} + +// Option is config option. +type Option interface { + ServerOption + ClientOption +} + +// WithTracerProvider specifies a tracer provider to use for creating a tracer. +// +// If none is specified, the global provider is used. +func WithTracerProvider(provider trace.TracerProvider) Option { + return otelOptionFunc(func(cfg *otelConfig) { + if provider != nil { + cfg.TracerProvider = provider + } + }) +} + +// WithMeterProvider specifies a meter provider to use for creating a meter. +// +// If none is specified, the otel.GetMeterProvider() is used. +func WithMeterProvider(provider metric.MeterProvider) Option { + return otelOptionFunc(func(cfg *otelConfig) { + if provider != nil { + cfg.MeterProvider = provider + } + }) +} + +// WithAttributes specifies default otel attributes. +func WithAttributes(attributes ...attribute.KeyValue) Option { + return otelOptionFunc(func(cfg *otelConfig) { + cfg.Attributes = attributes + }) +} + +// WithClient specifies http client to use. +func WithClient(client ht.Client) ClientOption { + return optionFunc[clientConfig](func(cfg *clientConfig) { + if client != nil { + cfg.Client = client + } + }) +} + +// WithNotFound specifies Not Found handler to use. +func WithNotFound(notFound http.HandlerFunc) ServerOption { + return optionFunc[serverConfig](func(cfg *serverConfig) { + if notFound != nil { + cfg.NotFound = notFound + } + }) +} + +// WithMethodNotAllowed specifies Method Not Allowed handler to use. +func WithMethodNotAllowed(methodNotAllowed func(w http.ResponseWriter, r *http.Request, allowed string)) ServerOption { + return optionFunc[serverConfig](func(cfg *serverConfig) { + if methodNotAllowed != nil { + cfg.MethodNotAllowed = methodNotAllowed + } + }) +} + +// WithErrorHandler specifies error handler to use. +func WithErrorHandler(h ErrorHandler) ServerOption { + return optionFunc[serverConfig](func(cfg *serverConfig) { + if h != nil { + cfg.ErrorHandler = h + } + }) +} + +// WithPathPrefix specifies server path prefix. +func WithPathPrefix(prefix string) ServerOption { + return optionFunc[serverConfig](func(cfg *serverConfig) { + cfg.Prefix = prefix + }) +} + +// WithMiddleware specifies middlewares to use. +func WithMiddleware(m ...Middleware) ServerOption { + return optionFunc[serverConfig](func(cfg *serverConfig) { + switch len(m) { + case 0: + cfg.Middleware = nil + case 1: + cfg.Middleware = m[0] + default: + cfg.Middleware = middleware.ChainMiddlewares(m...) + } + }) +} + +// WithMaxMultipartMemory specifies limit of memory for storing file parts. +// File parts which can't be stored in memory will be stored on disk in temporary files. +func WithMaxMultipartMemory(max int64) ServerOption { + return optionFunc[serverConfig](func(cfg *serverConfig) { + if max > 0 { + cfg.MaxMultipartMemory = max + } + }) +} diff --git a/internal/service/yookassa/gen/oas_client_gen.go b/internal/service/yookassa/gen/oas_client_gen.go new file mode 100644 index 0000000..0164e2d --- /dev/null +++ b/internal/service/yookassa/gen/oas_client_gen.go @@ -0,0 +1,5049 @@ +// Code generated by ogen, DO NOT EDIT. + +package gen + +import ( + "context" + "net/url" + "strings" + "time" + + "github.com/go-faster/errors" + "github.com/ogen-go/ogen/conv" + ht "github.com/ogen-go/ogen/http" + "github.com/ogen-go/ogen/ogenerrors" + "github.com/ogen-go/ogen/uri" + "go.opentelemetry.io/otel/attribute" + "go.opentelemetry.io/otel/codes" + "go.opentelemetry.io/otel/metric" + semconv "go.opentelemetry.io/otel/semconv/v1.39.0" + "go.opentelemetry.io/otel/trace" +) + +func trimTrailingSlashes(u *url.URL) { + u.Path = strings.TrimRight(u.Path, "/") + u.RawPath = strings.TrimRight(u.RawPath, "/") +} + +// Invoker invokes operations described by OpenAPI v3 specification. +type Invoker interface { + // DealsDealIDGet invokes GET /deals/{deal_id} operation. + // + // Запрос позволяет получить информацию о текущем + // состоянии сделки по ее уникальному идентификатору. + // + // GET /deals/{deal_id} + DealsDealIDGet(ctx context.Context, params DealsDealIDGetParams) (DealsDealIDGetRes, error) + // DealsGet invokes GET /deals operation. + // + // Запрос позволяет получить список сделок, + // отфильтрованный по заданным критериям. Подробнее о + // работе со списками: https://yookassa.ru/developers/using-api/lists. + // + // GET /deals + DealsGet(ctx context.Context, params DealsGetParams) (DealsGetRes, error) + // DealsPost invokes POST /deals operation. + // + // Запрос позволяет создать сделку, в рамках которой + // необходимо принять оплату от покупателя и + // перечислить ее продавцу. + // + // POST /deals + DealsPost(ctx context.Context, request *SafeDealRequest, params DealsPostParams) (DealsPostRes, error) + // MeGet invokes GET /me operation. + // + // С помощью этого запроса вы можете получить + // информацию о магазине или шлюзе: * Для Сплитования + // платежей: https://yookassa.ru/developers/solutions-for-platforms/split-payments/basics: в + // запросе необходимо передать параметр on_behalf_of с + // идентификатором магазина продавца и ваши данные для + // аутентификации: https://yookassa.ru/developers/using-api/interaction-format#auth + // (идентификатор и секретный ключ вашей платформы). * + // Для партнеров: https://yookassa. + // ru/developers/solutions-for-platforms/partners-api/basics: в запросе необходимо + // передать OAuth-токен магазина. * Для выплат: https://yookassa. + // ru/developers/payouts/overview: в запросе необходимо передать ваши + // данные для аутентификации: https://yookassa. + // ru/developers/using-api/interaction-format#auth (идентификатор и секретный + // ключ вашего шлюза). + // + // GET /me + MeGet(ctx context.Context, params MeGetParams) (MeGetRes, error) + // PaymentMethodsPaymentMethodIDGet invokes GET /payment_methods/{payment_method_id} operation. + // + // Используйте этот запрос, чтобы получить информацию о + // текущем состоянии способа оплаты по его уникальному + // идентификатору. + // + // GET /payment_methods/{payment_method_id} + PaymentMethodsPaymentMethodIDGet(ctx context.Context, params PaymentMethodsPaymentMethodIDGetParams) (PaymentMethodsPaymentMethodIDGetRes, error) + // PaymentMethodsPost invokes POST /payment_methods operation. + // + // Используйте этот запрос, чтобы создать в ЮKassa объект + // способа оплаты: https://yookassa.ru/developers/api#payment_method_object. В + // запросе необходимо передать код способа оплаты, + // который вы хотите сохранить, и при необходимости + // дополнительные параметры, связанные с той + // функциональностью, которую вы хотите использовать. + // Идентификатор созданного способа оплаты вы можете + // использовать при проведении автоплатежей: https://yookassa. + // ru/developers/payment-acceptance/scenario-extensions/recurring-payments/create-recurring или + // выплат: https://yookassa.ru/developers/payouts/scenario-extensions/multipurpose-token. + // + // POST /payment_methods + PaymentMethodsPost(ctx context.Context, request PaymentMethodsPostReq, params PaymentMethodsPostParams) (PaymentMethodsPostRes, error) + // PaymentsGet invokes GET /payments operation. + // + // Use this request to get a list of payments. You can download payments created over the last 3 + // years. You can filter the list by specified criteria. More about working with lists: + // https://yookassa.ru/developers/using-api/lists. + // + // GET /payments + PaymentsGet(ctx context.Context, params PaymentsGetParams) (PaymentsGetRes, error) + // PaymentsPaymentIDCancelPost invokes POST /payments/{payment_id}/cancel operation. + // + // Cancel payments with the waiting_for_capture status. Payment cancelation means you are not ready + // to dispatch a product or to provide a service to the user. Once you cancel the payment, we will + // start returning the money to the payer’s account. If the payment was made from a bank card, a + // YooMoney wallet, or via SberPay, the money will be refunded instantly. If the payment was made + // using other payment methods, the process can take up to several days. More about capturing and + // canceling payments: https://yookassa. + // ru/developers/payment-acceptance/getting-started/payment-process#capture-and-cancel. + // + // POST /payments/{payment_id}/cancel + PaymentsPaymentIDCancelPost(ctx context.Context, params PaymentsPaymentIDCancelPostParams) (PaymentsPaymentIDCancelPostRes, error) + // PaymentsPaymentIDCapturePost invokes POST /payments/{payment_id}/capture operation. + // + // Confirm you’re ready to accept the payment. Once the payment is captured, the status will change + // to succeeded. After that, you can provide the customer with the product or service. You can only + // capture payments with the waiting_for_capture status, and only for a certain amount of time + // (depending on the payment method). If you do not capture the payment within the allotted time, the + // status will change to canceled, and the money will be returned to the user. More about capturing + // and canceling payments: https://yookassa. + // ru/developers/payment-acceptance/getting-started/payment-process#capture-and-cancel. + // + // POST /payments/{payment_id}/capture + PaymentsPaymentIDCapturePost(ctx context.Context, request *PaymentsPaymentIDCapturePostReq, params PaymentsPaymentIDCapturePostParams) (PaymentsPaymentIDCapturePostRes, error) + // PaymentsPaymentIDGet invokes GET /payments/{payment_id} operation. + // + // This request allows you to get the information about the current payment status by its unique ID. + // + // GET /payments/{payment_id} + PaymentsPaymentIDGet(ctx context.Context, params PaymentsPaymentIDGetParams) (PaymentsPaymentIDGetRes, error) + // PaymentsPost invokes POST /payments operation. + // + // To accept a payment, you need to create a payment object: https://yookassa. + // ru/developers/api#payment_object, Payment. It contains all the necessary payment information + // (amount, currency, and status). Payments have a linear life cycle, going from one status to the + // next sequentially. + // + // POST /payments + PaymentsPost(ctx context.Context, request *PaymentsPostReq, params PaymentsPostParams) (PaymentsPostRes, error) + // PayoutsGet invokes GET /payouts operation. + // + // Use this request to get a list of payouts. You can download payments created over the last 3 years. + // You can filter the list by specified criteria. Request authentication details: https://yookassa. + // ru/developers/using-api/interaction-format#auth depend on which payment solution you are using: + // basic payouts: https://yookassa.ru/developers/payouts/overview or payouts within the Safe Deal: + // https://yookassa.ru/developers/solutions-for-platforms/safe-deal/basics. More about working with + // lists: https://yookassa.ru/developers/using-api/lists. + // + // GET /payouts + PayoutsGet(ctx context.Context, params PayoutsGetParams) (PayoutsGetRes, error) + // PayoutsPayoutIDGet invokes GET /payouts/{payout_id} operation. + // + // Используйте этот запрос, чтобы получить информацию о + // текущем состоянии выплаты по ее уникальному + // идентификатору. Данные для аутентификации: https://yookassa. + // ru/developers/using-api/interaction-format#auth запросов зависят от того, + // какое платежное решение вы используете — обычные + // выплаты: https://yookassa.ru/developers/payouts/overview или выплаты в + // рамках Безопасной сделки: https://yookassa. + // ru/developers/solutions-for-platforms/safe-deal/basics. + // + // GET /payouts/{payout_id} + PayoutsPayoutIDGet(ctx context.Context, params PayoutsPayoutIDGetParams) (PayoutsPayoutIDGetRes, error) + // PayoutsPost invokes POST /payouts operation. + // + // Используйте этот запрос, чтобы создать в ЮKassa объект + // выплаты: https://yookassa.ru/developers/api#payout_object. В запросе + // необходимо передать сумму выплаты, данные о способе + // получения выплаты (например, номер кошелька ЮMoney), + // описание выплаты и при необходимости дополнительные + // параметры, связанные с той функциональностью, + // которую вы хотите использовать. Передаваемые + // параметры и данные для аутентификации: https://yookassa. + // ru/developers/using-api/interaction-format#auth запросов зависят от того, + // какое платежное решение вы используете — обычные + // выплаты: https://yookassa.ru/developers/payouts/overview или выплаты в + // рамках Безопасной сделки: https://yookassa. + // ru/developers/solutions-for-platforms/safe-deal/basics. + // + // POST /payouts + PayoutsPost(ctx context.Context, request *PayoutRequest, params PayoutsPostParams) (PayoutsPostRes, error) + // PayoutsSearchGet invokes GET /payouts/search operation. + // + // Use this request to search for payouts by the specified criteria. Available only for payouts + // created over the last 3 months. At this time, only search by the metadata parameter is available. + // You can also specify the date and time when the payout was created (the created_at parameter). + // Request authentication details: https://yookassa.ru/developers/using-api/interaction-format#auth + // depend on which payment solution you are using: basic payouts: https://yookassa. + // ru/developers/payouts/overview or payouts within the Safe Deal: https://yookassa. + // ru/developers/solutions-for-platforms/safe-deal/basics. + // + // GET /payouts/search + PayoutsSearchGet(ctx context.Context, params PayoutsSearchGetParams) (PayoutsSearchGetRes, error) + // PersonalDataPersonalDataIDGet invokes GET /personal_data/{personal_data_id} operation. + // + // С помощью этого запроса вы можете получить + // информацию о текущем статусе объекта персональных + // данных по его уникальному идентификатору. + // + // GET /personal_data/{personal_data_id} + PersonalDataPersonalDataIDGet(ctx context.Context, params PersonalDataPersonalDataIDGetParams) (PersonalDataPersonalDataIDGetRes, error) + // PersonalDataPost invokes POST /personal_data operation. + // + // Используйте этот запрос, чтобы создать в ЮKassa объект + // персональных данных: https://yookassa.ru/developers/api#personal_data_object. В + // запросе необходимо указать тип данных (с какой целью + // они будут использоваться) и передать информацию о + // пользователе: фамилию, имя, отчество и другие — в + // зависимости от выбранного типа. Идентификатор + // созданного объекта персональных данных необходимо + // использовать в запросе на создание выплаты: https://yookassa. + // ru/developers/api#create_payout. + // + // POST /personal_data + PersonalDataPost(ctx context.Context, request PersonalDataPostReq, params PersonalDataPostParams) (PersonalDataPostRes, error) + // ReceiptsGet invokes GET /receipts operation. + // + // Запрос позволяет получить список чеков, + // отфильтрованный по заданным критериям. Можно + // запросить чеки по конкретному платежу, чеки по + // конкретному возврату или все чеки магазина. + // Подробнее о работе со списками: https://yookassa. + // ru/developers/using-api/lists. + // + // GET /receipts + ReceiptsGet(ctx context.Context, params ReceiptsGetParams) (ReceiptsGetRes, error) + // ReceiptsPost invokes POST /receipts operation. + // + // Используйте этот запрос при оплате с соблюдением + // требований 54-ФЗ: https://yookassa. + // ru/developers/payment-acceptance/receipts/54fz/basics, чтобы создать чек + // зачета предоплаты. Если вы работаете по сценарию + // Сначала платеж, потом чек: https://yookassa. + // ru/developers/payment-acceptance/receipts/54fz/other-services/basics#receipt-after-payment, в + // запросе также нужно передавать данные для + // формирования чека прихода и чека возврата прихода. + // + // POST /receipts + ReceiptsPost(ctx context.Context, request PostReceiptData, params ReceiptsPostParams) (ReceiptsPostRes, error) + // ReceiptsReceiptIDGet invokes GET /receipts/{receipt_id} operation. + // + // Запрос позволяет получить информацию о текущем + // состоянии чека по его уникальному идентификатору. + // + // GET /receipts/{receipt_id} + ReceiptsReceiptIDGet(ctx context.Context, params ReceiptsReceiptIDGetParams) (ReceiptsReceiptIDGetRes, error) + // RefundsGet invokes GET /refunds operation. + // + // Use this request to get a list of refunds. You can download refunds created over the last 3 years. + // You can filter the list by specified criteria. More about working with lists: https://yookassa. + // ru/developers/using-api/lists. + // + // GET /refunds + RefundsGet(ctx context.Context, params RefundsGetParams) (RefundsGetRes, error) + // RefundsPost invokes POST /refunds operation. + // + // Создает возврат успешного платежа на указанную сумму. + // Платеж можно вернуть только в течение трех лет с + // момента его создания: https://yookassa.ru/developers/api#create_payment. + // Комиссия ЮKassa за проведение платежа не возвращается. + // + // POST /refunds + RefundsPost(ctx context.Context, request *RefundsPostReq, params RefundsPostParams) (RefundsPostRes, error) + // RefundsRefundIDGet invokes GET /refunds/{refund_id} operation. + // + // Запрос позволяет получить информацию о текущем + // состоянии возврата по его уникальному + // идентификатору. + // + // GET /refunds/{refund_id} + RefundsRefundIDGet(ctx context.Context, params RefundsRefundIDGetParams) (RefundsRefundIDGetRes, error) + // SbpBanksGet invokes GET /sbp_banks operation. + // + // С помощью этого запроса вы можете получить + // актуальный список всех участников СБП. Список нужно + // вывести получателю выплаты, идентификатор + // выбранного участника СБП необходимо использовать в + // запросе на создание выплаты: https://yookassa. + // ru/developers/api#create_payout. Подробнее о выплатах через СБП: + // https://yookassa.ru/developers/payouts/making-payouts/sbp. + // + // GET /sbp_banks + SbpBanksGet(ctx context.Context) (SbpBanksGetRes, error) + // WebhooksGet invokes GET /webhooks operation. + // + // Запрос позволяет узнать, какие webhook есть для + // переданного OAuth-токена. + // + // GET /webhooks + WebhooksGet(ctx context.Context) (WebhooksGetRes, error) + // WebhooksPost invokes POST /webhooks operation. + // + // Запрос позволяет подписаться на уведомления о + // событиях: https://yookassa.ru/developers/using-api/webhooks#events (например, + // переход платежа в статус succeeded). C помощью webhook можно + // подписаться только на события платежей и возвратов. + // Если вы хотите получать уведомления о нескольких + // событиях, вам нужно для каждого из них создать свой + // webhook. Для каждого OAuth-токена нужно создавать свой + // набор webhook. + // + // POST /webhooks + WebhooksPost(ctx context.Context, request *WebhooksPostReq, params WebhooksPostParams) (WebhooksPostRes, error) + // WebhooksWebhookIDDelete invokes DELETE /webhooks/{webhook_id} operation. + // + // Запрос позволяет отписаться от уведомлений о событии + // для переданного OAuth-токена. Чтобы удалить webhook, вам + // нужно передать в запросе его идентификатор. + // + // DELETE /webhooks/{webhook_id} + WebhooksWebhookIDDelete(ctx context.Context, params WebhooksWebhookIDDeleteParams) (WebhooksWebhookIDDeleteRes, error) +} + +// Client implements OAS client. +type Client struct { + serverURL *url.URL + sec SecuritySource + baseClient +} + +// NewClient initializes new Client defined by OAS. +func NewClient(serverURL string, sec SecuritySource, opts ...ClientOption) (*Client, error) { + u, err := url.Parse(serverURL) + if err != nil { + return nil, err + } + trimTrailingSlashes(u) + + c, err := newClientConfig(opts...).baseClient() + if err != nil { + return nil, err + } + return &Client{ + serverURL: u, + sec: sec, + baseClient: c, + }, nil +} + +type serverURLKey struct{} + +// WithServerURL sets context key to override server URL. +func WithServerURL(ctx context.Context, u *url.URL) context.Context { + return context.WithValue(ctx, serverURLKey{}, u) +} + +func (c *Client) requestURL(ctx context.Context) *url.URL { + u, ok := ctx.Value(serverURLKey{}).(*url.URL) + if !ok { + return c.serverURL + } + return u +} + +// DealsDealIDGet invokes GET /deals/{deal_id} operation. +// +// Запрос позволяет получить информацию о текущем +// состоянии сделки по ее уникальному идентификатору. +// +// GET /deals/{deal_id} +func (c *Client) DealsDealIDGet(ctx context.Context, params DealsDealIDGetParams) (DealsDealIDGetRes, error) { + res, err := c.sendDealsDealIDGet(ctx, params) + return res, err +} + +func (c *Client) sendDealsDealIDGet(ctx context.Context, params DealsDealIDGetParams) (res DealsDealIDGetRes, err error) { + otelAttrs := []attribute.KeyValue{ + semconv.HTTPRequestMethodKey.String("GET"), + semconv.URLTemplateKey.String("/deals/{deal_id}"), + } + otelAttrs = append(otelAttrs, c.cfg.Attributes...) + + // 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, DealsDealIDGetOperation, + 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] = "/deals/" + { + // Encode "deal_id" parameter. + e := uri.NewPathEncoder(uri.PathEncoderConfig{ + Param: "deal_id", + Style: uri.PathStyleSimple, + Explode: false, + }) + if err := func() error { + if unwrapped := string(params.DealID); true { + return e.EncodeValue(conv.StringToString(unwrapped)) + } + return nil + }(); 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:BasicAuth" + switch err := c.securityBasicAuth(ctx, DealsDealIDGetOperation, 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 \"BasicAuth\"") + } + } + { + stage = "Security:OAuth2" + switch err := c.securityOAuth2(ctx, DealsDealIDGetOperation, r); { + case err == nil: // if NO error + satisfied[0] |= 1 << 1 + case errors.Is(err, ogenerrors.ErrSkipClientSecurity): + // Skip this security. + default: + return res, errors.Wrap(err, "security \"OAuth2\"") + } + } + + if ok := func() bool { + nextRequirement: + for _, requirement := range []bitset{ + {0b00000001}, + {0b00000010}, + } { + 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") + } + body := resp.Body + defer body.Close() + + stage = "DecodeResponse" + result, err := decodeDealsDealIDGetResponse(resp) + if err != nil { + return res, errors.Wrap(err, "decode response") + } + + return result, nil +} + +// DealsGet invokes GET /deals operation. +// +// Запрос позволяет получить список сделок, +// отфильтрованный по заданным критериям. Подробнее о +// работе со списками: https://yookassa.ru/developers/using-api/lists. +// +// GET /deals +func (c *Client) DealsGet(ctx context.Context, params DealsGetParams) (DealsGetRes, error) { + res, err := c.sendDealsGet(ctx, params) + return res, err +} + +func (c *Client) sendDealsGet(ctx context.Context, params DealsGetParams) (res DealsGetRes, err error) { + otelAttrs := []attribute.KeyValue{ + semconv.HTTPRequestMethodKey.String("GET"), + semconv.URLTemplateKey.String("/deals"), + } + otelAttrs = append(otelAttrs, c.cfg.Attributes...) + + // 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, DealsGetOperation, + 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 [1]string + pathParts[0] = "/deals" + uri.AddPathParts(u, pathParts[:]...) + + stage = "EncodeQueryParams" + q := uri.NewQueryEncoder() + { + // Encode "created_at.gte" parameter. + cfg := uri.QueryParameterEncodingConfig{ + Name: "created_at.gte", + Style: uri.QueryStyleForm, + Explode: true, + } + + if err := q.EncodeParam(cfg, func(e uri.Encoder) error { + if val, ok := params.CreatedAtGte.Get(); ok { + return e.EncodeValue(conv.DateTimeToString(val)) + } + return nil + }); err != nil { + return res, errors.Wrap(err, "encode query") + } + } + { + // Encode "created_at.gt" parameter. + cfg := uri.QueryParameterEncodingConfig{ + Name: "created_at.gt", + Style: uri.QueryStyleForm, + Explode: true, + } + + if err := q.EncodeParam(cfg, func(e uri.Encoder) error { + if val, ok := params.CreatedAtGt.Get(); ok { + return e.EncodeValue(conv.DateTimeToString(val)) + } + return nil + }); err != nil { + return res, errors.Wrap(err, "encode query") + } + } + { + // Encode "created_at.lte" parameter. + cfg := uri.QueryParameterEncodingConfig{ + Name: "created_at.lte", + Style: uri.QueryStyleForm, + Explode: true, + } + + if err := q.EncodeParam(cfg, func(e uri.Encoder) error { + if val, ok := params.CreatedAtLte.Get(); ok { + return e.EncodeValue(conv.DateTimeToString(val)) + } + return nil + }); err != nil { + return res, errors.Wrap(err, "encode query") + } + } + { + // Encode "created_at.lt" parameter. + cfg := uri.QueryParameterEncodingConfig{ + Name: "created_at.lt", + Style: uri.QueryStyleForm, + Explode: true, + } + + if err := q.EncodeParam(cfg, func(e uri.Encoder) error { + if val, ok := params.CreatedAtLt.Get(); ok { + return e.EncodeValue(conv.DateTimeToString(val)) + } + return nil + }); err != nil { + return res, errors.Wrap(err, "encode query") + } + } + { + // Encode "expires_at.gte" parameter. + cfg := uri.QueryParameterEncodingConfig{ + Name: "expires_at.gte", + Style: uri.QueryStyleForm, + Explode: true, + } + + if err := q.EncodeParam(cfg, func(e uri.Encoder) error { + if val, ok := params.ExpiresAtGte.Get(); ok { + return e.EncodeValue(conv.DateTimeToString(val)) + } + return nil + }); err != nil { + return res, errors.Wrap(err, "encode query") + } + } + { + // Encode "expires_at.gt" parameter. + cfg := uri.QueryParameterEncodingConfig{ + Name: "expires_at.gt", + Style: uri.QueryStyleForm, + Explode: true, + } + + if err := q.EncodeParam(cfg, func(e uri.Encoder) error { + if val, ok := params.ExpiresAtGt.Get(); ok { + return e.EncodeValue(conv.DateTimeToString(val)) + } + return nil + }); err != nil { + return res, errors.Wrap(err, "encode query") + } + } + { + // Encode "expires_at.lte" parameter. + cfg := uri.QueryParameterEncodingConfig{ + Name: "expires_at.lte", + Style: uri.QueryStyleForm, + Explode: true, + } + + if err := q.EncodeParam(cfg, func(e uri.Encoder) error { + if val, ok := params.ExpiresAtLte.Get(); ok { + return e.EncodeValue(conv.DateTimeToString(val)) + } + return nil + }); err != nil { + return res, errors.Wrap(err, "encode query") + } + } + { + // Encode "expires_at.lt" parameter. + cfg := uri.QueryParameterEncodingConfig{ + Name: "expires_at.lt", + Style: uri.QueryStyleForm, + Explode: true, + } + + if err := q.EncodeParam(cfg, func(e uri.Encoder) error { + if val, ok := params.ExpiresAtLt.Get(); ok { + return e.EncodeValue(conv.DateTimeToString(val)) + } + return nil + }); err != nil { + return res, errors.Wrap(err, "encode query") + } + } + { + // Encode "status" parameter. + cfg := uri.QueryParameterEncodingConfig{ + Name: "status", + Style: uri.QueryStyleForm, + Explode: true, + } + + if err := q.EncodeParam(cfg, func(e uri.Encoder) error { + if val, ok := params.Status.Get(); ok { + return e.EncodeValue(conv.StringToString(string(val))) + } + return nil + }); err != nil { + return res, errors.Wrap(err, "encode query") + } + } + { + // Encode "full_text_search" parameter. + cfg := uri.QueryParameterEncodingConfig{ + Name: "full_text_search", + Style: uri.QueryStyleForm, + Explode: true, + } + + if err := q.EncodeParam(cfg, func(e uri.Encoder) error { + if val, ok := params.FullTextSearch.Get(); ok { + return e.EncodeValue(conv.StringToString(val)) + } + return nil + }); err != nil { + return res, errors.Wrap(err, "encode query") + } + } + { + // Encode "limit" parameter. + cfg := uri.QueryParameterEncodingConfig{ + Name: "limit", + Style: uri.QueryStyleForm, + Explode: true, + } + + if err := q.EncodeParam(cfg, func(e uri.Encoder) error { + if val, ok := params.Limit.Get(); ok { + return e.EncodeValue(conv.IntToString(val)) + } + return nil + }); err != nil { + return res, errors.Wrap(err, "encode query") + } + } + { + // Encode "cursor" parameter. + cfg := uri.QueryParameterEncodingConfig{ + Name: "cursor", + Style: uri.QueryStyleForm, + Explode: true, + } + + if err := q.EncodeParam(cfg, func(e uri.Encoder) error { + if val, ok := params.Cursor.Get(); ok { + return e.EncodeValue(conv.StringToString(val)) + } + return nil + }); err != nil { + return res, errors.Wrap(err, "encode query") + } + } + u.RawQuery = q.Values().Encode() + + 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:BasicAuth" + switch err := c.securityBasicAuth(ctx, DealsGetOperation, 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 \"BasicAuth\"") + } + } + { + stage = "Security:OAuth2" + switch err := c.securityOAuth2(ctx, DealsGetOperation, r); { + case err == nil: // if NO error + satisfied[0] |= 1 << 1 + case errors.Is(err, ogenerrors.ErrSkipClientSecurity): + // Skip this security. + default: + return res, errors.Wrap(err, "security \"OAuth2\"") + } + } + + if ok := func() bool { + nextRequirement: + for _, requirement := range []bitset{ + {0b00000001}, + {0b00000010}, + } { + 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") + } + body := resp.Body + defer body.Close() + + stage = "DecodeResponse" + result, err := decodeDealsGetResponse(resp) + if err != nil { + return res, errors.Wrap(err, "decode response") + } + + return result, nil +} + +// DealsPost invokes POST /deals operation. +// +// Запрос позволяет создать сделку, в рамках которой +// необходимо принять оплату от покупателя и +// перечислить ее продавцу. +// +// POST /deals +func (c *Client) DealsPost(ctx context.Context, request *SafeDealRequest, params DealsPostParams) (DealsPostRes, error) { + res, err := c.sendDealsPost(ctx, request, params) + return res, err +} + +func (c *Client) sendDealsPost(ctx context.Context, request *SafeDealRequest, params DealsPostParams) (res DealsPostRes, err error) { + otelAttrs := []attribute.KeyValue{ + semconv.HTTPRequestMethodKey.String("POST"), + semconv.URLTemplateKey.String("/deals"), + } + otelAttrs = append(otelAttrs, c.cfg.Attributes...) + + // 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, DealsPostOperation, + 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 [1]string + pathParts[0] = "/deals" + uri.AddPathParts(u, pathParts[:]...) + + stage = "EncodeRequest" + r, err := ht.NewRequest(ctx, "POST", u) + if err != nil { + return res, errors.Wrap(err, "create request") + } + if err := encodeDealsPostRequest(request, r); err != nil { + return res, errors.Wrap(err, "encode request") + } + + stage = "EncodeHeaderParams" + h := uri.NewHeaderEncoder(r.Header) + { + cfg := uri.HeaderParameterEncodingConfig{ + Name: "Idempotence-Key", + Explode: false, + } + if err := h.EncodeParam(cfg, func(e uri.Encoder) error { + return e.EncodeValue(conv.StringToString(params.IdempotenceKey)) + }); err != nil { + return res, errors.Wrap(err, "encode header") + } + } + + { + type bitset = [1]uint8 + var satisfied bitset + { + stage = "Security:BasicAuth" + switch err := c.securityBasicAuth(ctx, DealsPostOperation, 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 \"BasicAuth\"") + } + } + { + stage = "Security:OAuth2" + switch err := c.securityOAuth2(ctx, DealsPostOperation, r); { + case err == nil: // if NO error + satisfied[0] |= 1 << 1 + case errors.Is(err, ogenerrors.ErrSkipClientSecurity): + // Skip this security. + default: + return res, errors.Wrap(err, "security \"OAuth2\"") + } + } + + if ok := func() bool { + nextRequirement: + for _, requirement := range []bitset{ + {0b00000001}, + {0b00000010}, + } { + 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") + } + body := resp.Body + defer body.Close() + + stage = "DecodeResponse" + result, err := decodeDealsPostResponse(resp) + if err != nil { + return res, errors.Wrap(err, "decode response") + } + + return result, nil +} + +// MeGet invokes GET /me operation. +// +// С помощью этого запроса вы можете получить +// информацию о магазине или шлюзе: * Для Сплитования +// платежей: https://yookassa.ru/developers/solutions-for-platforms/split-payments/basics: в +// запросе необходимо передать параметр on_behalf_of с +// идентификатором магазина продавца и ваши данные для +// аутентификации: https://yookassa.ru/developers/using-api/interaction-format#auth +// (идентификатор и секретный ключ вашей платформы). * +// Для партнеров: https://yookassa. +// ru/developers/solutions-for-platforms/partners-api/basics: в запросе необходимо +// передать OAuth-токен магазина. * Для выплат: https://yookassa. +// ru/developers/payouts/overview: в запросе необходимо передать ваши +// данные для аутентификации: https://yookassa. +// ru/developers/using-api/interaction-format#auth (идентификатор и секретный +// ключ вашего шлюза). +// +// GET /me +func (c *Client) MeGet(ctx context.Context, params MeGetParams) (MeGetRes, error) { + res, err := c.sendMeGet(ctx, params) + return res, err +} + +func (c *Client) sendMeGet(ctx context.Context, params MeGetParams) (res MeGetRes, err error) { + otelAttrs := []attribute.KeyValue{ + semconv.HTTPRequestMethodKey.String("GET"), + semconv.URLTemplateKey.String("/me"), + } + otelAttrs = append(otelAttrs, c.cfg.Attributes...) + + // 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, MeGetOperation, + 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 [1]string + pathParts[0] = "/me" + uri.AddPathParts(u, pathParts[:]...) + + stage = "EncodeQueryParams" + q := uri.NewQueryEncoder() + { + // Encode "on_behalf_of" parameter. + cfg := uri.QueryParameterEncodingConfig{ + Name: "on_behalf_of", + Style: uri.QueryStyleForm, + Explode: true, + } + + if err := q.EncodeParam(cfg, func(e uri.Encoder) error { + if val, ok := params.OnBehalfOf.Get(); ok { + if unwrapped := string(val); true { + return e.EncodeValue(conv.StringToString(unwrapped)) + } + return nil + } + return nil + }); err != nil { + return res, errors.Wrap(err, "encode query") + } + } + u.RawQuery = q.Values().Encode() + + 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:BasicAuth" + switch err := c.securityBasicAuth(ctx, MeGetOperation, 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 \"BasicAuth\"") + } + } + { + stage = "Security:OAuth2" + switch err := c.securityOAuth2(ctx, MeGetOperation, r); { + case err == nil: // if NO error + satisfied[0] |= 1 << 1 + case errors.Is(err, ogenerrors.ErrSkipClientSecurity): + // Skip this security. + default: + return res, errors.Wrap(err, "security \"OAuth2\"") + } + } + + if ok := func() bool { + nextRequirement: + for _, requirement := range []bitset{ + {0b00000001}, + {0b00000010}, + } { + 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") + } + body := resp.Body + defer body.Close() + + stage = "DecodeResponse" + result, err := decodeMeGetResponse(resp) + if err != nil { + return res, errors.Wrap(err, "decode response") + } + + return result, nil +} + +// PaymentMethodsPaymentMethodIDGet invokes GET /payment_methods/{payment_method_id} operation. +// +// Используйте этот запрос, чтобы получить информацию о +// текущем состоянии способа оплаты по его уникальному +// идентификатору. +// +// GET /payment_methods/{payment_method_id} +func (c *Client) PaymentMethodsPaymentMethodIDGet(ctx context.Context, params PaymentMethodsPaymentMethodIDGetParams) (PaymentMethodsPaymentMethodIDGetRes, error) { + res, err := c.sendPaymentMethodsPaymentMethodIDGet(ctx, params) + return res, err +} + +func (c *Client) sendPaymentMethodsPaymentMethodIDGet(ctx context.Context, params PaymentMethodsPaymentMethodIDGetParams) (res PaymentMethodsPaymentMethodIDGetRes, err error) { + otelAttrs := []attribute.KeyValue{ + semconv.HTTPRequestMethodKey.String("GET"), + semconv.URLTemplateKey.String("/payment_methods/{payment_method_id}"), + } + otelAttrs = append(otelAttrs, c.cfg.Attributes...) + + // 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, PaymentMethodsPaymentMethodIDGetOperation, + 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] = "/payment_methods/" + { + // Encode "payment_method_id" parameter. + e := uri.NewPathEncoder(uri.PathEncoderConfig{ + Param: "payment_method_id", + Style: uri.PathStyleSimple, + Explode: false, + }) + if err := func() error { + if unwrapped := string(params.PaymentMethodID); true { + return e.EncodeValue(conv.StringToString(unwrapped)) + } + return nil + }(); 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:BasicAuth" + switch err := c.securityBasicAuth(ctx, PaymentMethodsPaymentMethodIDGetOperation, 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 \"BasicAuth\"") + } + } + { + stage = "Security:OAuth2" + switch err := c.securityOAuth2(ctx, PaymentMethodsPaymentMethodIDGetOperation, r); { + case err == nil: // if NO error + satisfied[0] |= 1 << 1 + case errors.Is(err, ogenerrors.ErrSkipClientSecurity): + // Skip this security. + default: + return res, errors.Wrap(err, "security \"OAuth2\"") + } + } + + if ok := func() bool { + nextRequirement: + for _, requirement := range []bitset{ + {0b00000001}, + {0b00000010}, + } { + 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") + } + body := resp.Body + defer body.Close() + + stage = "DecodeResponse" + result, err := decodePaymentMethodsPaymentMethodIDGetResponse(resp) + if err != nil { + return res, errors.Wrap(err, "decode response") + } + + return result, nil +} + +// PaymentMethodsPost invokes POST /payment_methods operation. +// +// Используйте этот запрос, чтобы создать в ЮKassa объект +// способа оплаты: https://yookassa.ru/developers/api#payment_method_object. В +// запросе необходимо передать код способа оплаты, +// который вы хотите сохранить, и при необходимости +// дополнительные параметры, связанные с той +// функциональностью, которую вы хотите использовать. +// Идентификатор созданного способа оплаты вы можете +// использовать при проведении автоплатежей: https://yookassa. +// ru/developers/payment-acceptance/scenario-extensions/recurring-payments/create-recurring или +// выплат: https://yookassa.ru/developers/payouts/scenario-extensions/multipurpose-token. +// +// POST /payment_methods +func (c *Client) PaymentMethodsPost(ctx context.Context, request PaymentMethodsPostReq, params PaymentMethodsPostParams) (PaymentMethodsPostRes, error) { + res, err := c.sendPaymentMethodsPost(ctx, request, params) + return res, err +} + +func (c *Client) sendPaymentMethodsPost(ctx context.Context, request PaymentMethodsPostReq, params PaymentMethodsPostParams) (res PaymentMethodsPostRes, err error) { + otelAttrs := []attribute.KeyValue{ + semconv.HTTPRequestMethodKey.String("POST"), + semconv.URLTemplateKey.String("/payment_methods"), + } + otelAttrs = append(otelAttrs, c.cfg.Attributes...) + + // 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, PaymentMethodsPostOperation, + 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 [1]string + pathParts[0] = "/payment_methods" + uri.AddPathParts(u, pathParts[:]...) + + stage = "EncodeRequest" + r, err := ht.NewRequest(ctx, "POST", u) + if err != nil { + return res, errors.Wrap(err, "create request") + } + if err := encodePaymentMethodsPostRequest(request, r); err != nil { + return res, errors.Wrap(err, "encode request") + } + + stage = "EncodeHeaderParams" + h := uri.NewHeaderEncoder(r.Header) + { + cfg := uri.HeaderParameterEncodingConfig{ + Name: "Idempotence-Key", + Explode: false, + } + if err := h.EncodeParam(cfg, func(e uri.Encoder) error { + return e.EncodeValue(conv.StringToString(params.IdempotenceKey)) + }); err != nil { + return res, errors.Wrap(err, "encode header") + } + } + + { + type bitset = [1]uint8 + var satisfied bitset + { + stage = "Security:BasicAuth" + switch err := c.securityBasicAuth(ctx, PaymentMethodsPostOperation, 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 \"BasicAuth\"") + } + } + { + stage = "Security:OAuth2" + switch err := c.securityOAuth2(ctx, PaymentMethodsPostOperation, r); { + case err == nil: // if NO error + satisfied[0] |= 1 << 1 + case errors.Is(err, ogenerrors.ErrSkipClientSecurity): + // Skip this security. + default: + return res, errors.Wrap(err, "security \"OAuth2\"") + } + } + + if ok := func() bool { + nextRequirement: + for _, requirement := range []bitset{ + {0b00000001}, + {0b00000010}, + } { + 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") + } + body := resp.Body + defer body.Close() + + stage = "DecodeResponse" + result, err := decodePaymentMethodsPostResponse(resp) + if err != nil { + return res, errors.Wrap(err, "decode response") + } + + return result, nil +} + +// PaymentsGet invokes GET /payments operation. +// +// Use this request to get a list of payments. You can download payments created over the last 3 +// years. You can filter the list by specified criteria. More about working with lists: +// https://yookassa.ru/developers/using-api/lists. +// +// GET /payments +func (c *Client) PaymentsGet(ctx context.Context, params PaymentsGetParams) (PaymentsGetRes, error) { + res, err := c.sendPaymentsGet(ctx, params) + return res, err +} + +func (c *Client) sendPaymentsGet(ctx context.Context, params PaymentsGetParams) (res PaymentsGetRes, err error) { + otelAttrs := []attribute.KeyValue{ + semconv.HTTPRequestMethodKey.String("GET"), + semconv.URLTemplateKey.String("/payments"), + } + otelAttrs = append(otelAttrs, c.cfg.Attributes...) + + // 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, PaymentsGetOperation, + 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 [1]string + pathParts[0] = "/payments" + uri.AddPathParts(u, pathParts[:]...) + + stage = "EncodeQueryParams" + q := uri.NewQueryEncoder() + { + // Encode "created_at.gte" parameter. + cfg := uri.QueryParameterEncodingConfig{ + Name: "created_at.gte", + Style: uri.QueryStyleForm, + Explode: true, + } + + if err := q.EncodeParam(cfg, func(e uri.Encoder) error { + if val, ok := params.CreatedAtGte.Get(); ok { + return e.EncodeValue(conv.DateTimeToString(val)) + } + return nil + }); err != nil { + return res, errors.Wrap(err, "encode query") + } + } + { + // Encode "created_at.gt" parameter. + cfg := uri.QueryParameterEncodingConfig{ + Name: "created_at.gt", + Style: uri.QueryStyleForm, + Explode: true, + } + + if err := q.EncodeParam(cfg, func(e uri.Encoder) error { + if val, ok := params.CreatedAtGt.Get(); ok { + return e.EncodeValue(conv.DateTimeToString(val)) + } + return nil + }); err != nil { + return res, errors.Wrap(err, "encode query") + } + } + { + // Encode "created_at.lte" parameter. + cfg := uri.QueryParameterEncodingConfig{ + Name: "created_at.lte", + Style: uri.QueryStyleForm, + Explode: true, + } + + if err := q.EncodeParam(cfg, func(e uri.Encoder) error { + if val, ok := params.CreatedAtLte.Get(); ok { + return e.EncodeValue(conv.DateTimeToString(val)) + } + return nil + }); err != nil { + return res, errors.Wrap(err, "encode query") + } + } + { + // Encode "created_at.lt" parameter. + cfg := uri.QueryParameterEncodingConfig{ + Name: "created_at.lt", + Style: uri.QueryStyleForm, + Explode: true, + } + + if err := q.EncodeParam(cfg, func(e uri.Encoder) error { + if val, ok := params.CreatedAtLt.Get(); ok { + return e.EncodeValue(conv.DateTimeToString(val)) + } + return nil + }); err != nil { + return res, errors.Wrap(err, "encode query") + } + } + { + // Encode "captured_at.gte" parameter. + cfg := uri.QueryParameterEncodingConfig{ + Name: "captured_at.gte", + Style: uri.QueryStyleForm, + Explode: true, + } + + if err := q.EncodeParam(cfg, func(e uri.Encoder) error { + if val, ok := params.CapturedAtGte.Get(); ok { + return e.EncodeValue(conv.DateTimeToString(val)) + } + return nil + }); err != nil { + return res, errors.Wrap(err, "encode query") + } + } + { + // Encode "captured_at.gt" parameter. + cfg := uri.QueryParameterEncodingConfig{ + Name: "captured_at.gt", + Style: uri.QueryStyleForm, + Explode: true, + } + + if err := q.EncodeParam(cfg, func(e uri.Encoder) error { + if val, ok := params.CapturedAtGt.Get(); ok { + return e.EncodeValue(conv.DateTimeToString(val)) + } + return nil + }); err != nil { + return res, errors.Wrap(err, "encode query") + } + } + { + // Encode "captured_at.lte" parameter. + cfg := uri.QueryParameterEncodingConfig{ + Name: "captured_at.lte", + Style: uri.QueryStyleForm, + Explode: true, + } + + if err := q.EncodeParam(cfg, func(e uri.Encoder) error { + if val, ok := params.CapturedAtLte.Get(); ok { + return e.EncodeValue(conv.DateTimeToString(val)) + } + return nil + }); err != nil { + return res, errors.Wrap(err, "encode query") + } + } + { + // Encode "captured_at.lt" parameter. + cfg := uri.QueryParameterEncodingConfig{ + Name: "captured_at.lt", + Style: uri.QueryStyleForm, + Explode: true, + } + + if err := q.EncodeParam(cfg, func(e uri.Encoder) error { + if val, ok := params.CapturedAtLt.Get(); ok { + return e.EncodeValue(conv.DateTimeToString(val)) + } + return nil + }); err != nil { + return res, errors.Wrap(err, "encode query") + } + } + { + // Encode "payment_method" parameter. + cfg := uri.QueryParameterEncodingConfig{ + Name: "payment_method", + Style: uri.QueryStyleForm, + Explode: true, + } + + if err := q.EncodeParam(cfg, func(e uri.Encoder) error { + if val, ok := params.PaymentMethod.Get(); ok { + return e.EncodeValue(conv.StringToString(string(val))) + } + return nil + }); err != nil { + return res, errors.Wrap(err, "encode query") + } + } + { + // Encode "status" parameter. + cfg := uri.QueryParameterEncodingConfig{ + Name: "status", + Style: uri.QueryStyleForm, + Explode: true, + } + + if err := q.EncodeParam(cfg, func(e uri.Encoder) error { + if val, ok := params.Status.Get(); ok { + return e.EncodeValue(conv.StringToString(string(val))) + } + return nil + }); err != nil { + return res, errors.Wrap(err, "encode query") + } + } + { + // Encode "limit" parameter. + cfg := uri.QueryParameterEncodingConfig{ + Name: "limit", + Style: uri.QueryStyleForm, + Explode: true, + } + + if err := q.EncodeParam(cfg, func(e uri.Encoder) error { + if val, ok := params.Limit.Get(); ok { + return e.EncodeValue(conv.IntToString(val)) + } + return nil + }); err != nil { + return res, errors.Wrap(err, "encode query") + } + } + { + // Encode "cursor" parameter. + cfg := uri.QueryParameterEncodingConfig{ + Name: "cursor", + Style: uri.QueryStyleForm, + Explode: true, + } + + if err := q.EncodeParam(cfg, func(e uri.Encoder) error { + if val, ok := params.Cursor.Get(); ok { + return e.EncodeValue(conv.StringToString(val)) + } + return nil + }); err != nil { + return res, errors.Wrap(err, "encode query") + } + } + u.RawQuery = q.Values().Encode() + + 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:BasicAuth" + switch err := c.securityBasicAuth(ctx, PaymentsGetOperation, 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 \"BasicAuth\"") + } + } + { + stage = "Security:OAuth2" + switch err := c.securityOAuth2(ctx, PaymentsGetOperation, r); { + case err == nil: // if NO error + satisfied[0] |= 1 << 1 + case errors.Is(err, ogenerrors.ErrSkipClientSecurity): + // Skip this security. + default: + return res, errors.Wrap(err, "security \"OAuth2\"") + } + } + + if ok := func() bool { + nextRequirement: + for _, requirement := range []bitset{ + {0b00000001}, + {0b00000010}, + } { + 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") + } + body := resp.Body + defer body.Close() + + stage = "DecodeResponse" + result, err := decodePaymentsGetResponse(resp) + if err != nil { + return res, errors.Wrap(err, "decode response") + } + + return result, nil +} + +// PaymentsPaymentIDCancelPost invokes POST /payments/{payment_id}/cancel operation. +// +// Cancel payments with the waiting_for_capture status. Payment cancelation means you are not ready +// to dispatch a product or to provide a service to the user. Once you cancel the payment, we will +// start returning the money to the payer’s account. If the payment was made from a bank card, a +// YooMoney wallet, or via SberPay, the money will be refunded instantly. If the payment was made +// using other payment methods, the process can take up to several days. More about capturing and +// canceling payments: https://yookassa. +// ru/developers/payment-acceptance/getting-started/payment-process#capture-and-cancel. +// +// POST /payments/{payment_id}/cancel +func (c *Client) PaymentsPaymentIDCancelPost(ctx context.Context, params PaymentsPaymentIDCancelPostParams) (PaymentsPaymentIDCancelPostRes, error) { + res, err := c.sendPaymentsPaymentIDCancelPost(ctx, params) + return res, err +} + +func (c *Client) sendPaymentsPaymentIDCancelPost(ctx context.Context, params PaymentsPaymentIDCancelPostParams) (res PaymentsPaymentIDCancelPostRes, err error) { + otelAttrs := []attribute.KeyValue{ + semconv.HTTPRequestMethodKey.String("POST"), + semconv.URLTemplateKey.String("/payments/{payment_id}/cancel"), + } + otelAttrs = append(otelAttrs, c.cfg.Attributes...) + + // 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, PaymentsPaymentIDCancelPostOperation, + 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 [3]string + pathParts[0] = "/payments/" + { + // Encode "payment_id" parameter. + e := uri.NewPathEncoder(uri.PathEncoderConfig{ + Param: "payment_id", + Style: uri.PathStyleSimple, + Explode: false, + }) + if err := func() error { + if unwrapped := string(params.PaymentID); true { + return e.EncodeValue(conv.StringToString(unwrapped)) + } + return nil + }(); 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 + } + pathParts[2] = "/cancel" + uri.AddPathParts(u, pathParts[:]...) + + stage = "EncodeRequest" + r, err := ht.NewRequest(ctx, "POST", u) + if err != nil { + return res, errors.Wrap(err, "create request") + } + + stage = "EncodeHeaderParams" + h := uri.NewHeaderEncoder(r.Header) + { + cfg := uri.HeaderParameterEncodingConfig{ + Name: "Idempotence-Key", + Explode: false, + } + if err := h.EncodeParam(cfg, func(e uri.Encoder) error { + return e.EncodeValue(conv.StringToString(params.IdempotenceKey)) + }); err != nil { + return res, errors.Wrap(err, "encode header") + } + } + + { + type bitset = [1]uint8 + var satisfied bitset + { + stage = "Security:BasicAuth" + switch err := c.securityBasicAuth(ctx, PaymentsPaymentIDCancelPostOperation, 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 \"BasicAuth\"") + } + } + { + stage = "Security:OAuth2" + switch err := c.securityOAuth2(ctx, PaymentsPaymentIDCancelPostOperation, r); { + case err == nil: // if NO error + satisfied[0] |= 1 << 1 + case errors.Is(err, ogenerrors.ErrSkipClientSecurity): + // Skip this security. + default: + return res, errors.Wrap(err, "security \"OAuth2\"") + } + } + + if ok := func() bool { + nextRequirement: + for _, requirement := range []bitset{ + {0b00000001}, + {0b00000010}, + } { + 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") + } + body := resp.Body + defer body.Close() + + stage = "DecodeResponse" + result, err := decodePaymentsPaymentIDCancelPostResponse(resp) + if err != nil { + return res, errors.Wrap(err, "decode response") + } + + return result, nil +} + +// PaymentsPaymentIDCapturePost invokes POST /payments/{payment_id}/capture operation. +// +// Confirm you’re ready to accept the payment. Once the payment is captured, the status will change +// to succeeded. After that, you can provide the customer with the product or service. You can only +// capture payments with the waiting_for_capture status, and only for a certain amount of time +// (depending on the payment method). If you do not capture the payment within the allotted time, the +// status will change to canceled, and the money will be returned to the user. More about capturing +// and canceling payments: https://yookassa. +// ru/developers/payment-acceptance/getting-started/payment-process#capture-and-cancel. +// +// POST /payments/{payment_id}/capture +func (c *Client) PaymentsPaymentIDCapturePost(ctx context.Context, request *PaymentsPaymentIDCapturePostReq, params PaymentsPaymentIDCapturePostParams) (PaymentsPaymentIDCapturePostRes, error) { + res, err := c.sendPaymentsPaymentIDCapturePost(ctx, request, params) + return res, err +} + +func (c *Client) sendPaymentsPaymentIDCapturePost(ctx context.Context, request *PaymentsPaymentIDCapturePostReq, params PaymentsPaymentIDCapturePostParams) (res PaymentsPaymentIDCapturePostRes, err error) { + otelAttrs := []attribute.KeyValue{ + semconv.HTTPRequestMethodKey.String("POST"), + semconv.URLTemplateKey.String("/payments/{payment_id}/capture"), + } + otelAttrs = append(otelAttrs, c.cfg.Attributes...) + + // 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, PaymentsPaymentIDCapturePostOperation, + 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 [3]string + pathParts[0] = "/payments/" + { + // Encode "payment_id" parameter. + e := uri.NewPathEncoder(uri.PathEncoderConfig{ + Param: "payment_id", + Style: uri.PathStyleSimple, + Explode: false, + }) + if err := func() error { + if unwrapped := string(params.PaymentID); true { + return e.EncodeValue(conv.StringToString(unwrapped)) + } + return nil + }(); 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 + } + pathParts[2] = "/capture" + uri.AddPathParts(u, pathParts[:]...) + + stage = "EncodeRequest" + r, err := ht.NewRequest(ctx, "POST", u) + if err != nil { + return res, errors.Wrap(err, "create request") + } + if err := encodePaymentsPaymentIDCapturePostRequest(request, r); err != nil { + return res, errors.Wrap(err, "encode request") + } + + stage = "EncodeHeaderParams" + h := uri.NewHeaderEncoder(r.Header) + { + cfg := uri.HeaderParameterEncodingConfig{ + Name: "Idempotence-Key", + Explode: false, + } + if err := h.EncodeParam(cfg, func(e uri.Encoder) error { + return e.EncodeValue(conv.StringToString(params.IdempotenceKey)) + }); err != nil { + return res, errors.Wrap(err, "encode header") + } + } + + { + type bitset = [1]uint8 + var satisfied bitset + { + stage = "Security:BasicAuth" + switch err := c.securityBasicAuth(ctx, PaymentsPaymentIDCapturePostOperation, 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 \"BasicAuth\"") + } + } + { + stage = "Security:OAuth2" + switch err := c.securityOAuth2(ctx, PaymentsPaymentIDCapturePostOperation, r); { + case err == nil: // if NO error + satisfied[0] |= 1 << 1 + case errors.Is(err, ogenerrors.ErrSkipClientSecurity): + // Skip this security. + default: + return res, errors.Wrap(err, "security \"OAuth2\"") + } + } + + if ok := func() bool { + nextRequirement: + for _, requirement := range []bitset{ + {0b00000001}, + {0b00000010}, + } { + 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") + } + body := resp.Body + defer body.Close() + + stage = "DecodeResponse" + result, err := decodePaymentsPaymentIDCapturePostResponse(resp) + if err != nil { + return res, errors.Wrap(err, "decode response") + } + + return result, nil +} + +// PaymentsPaymentIDGet invokes GET /payments/{payment_id} operation. +// +// This request allows you to get the information about the current payment status by its unique ID. +// +// GET /payments/{payment_id} +func (c *Client) PaymentsPaymentIDGet(ctx context.Context, params PaymentsPaymentIDGetParams) (PaymentsPaymentIDGetRes, error) { + res, err := c.sendPaymentsPaymentIDGet(ctx, params) + return res, err +} + +func (c *Client) sendPaymentsPaymentIDGet(ctx context.Context, params PaymentsPaymentIDGetParams) (res PaymentsPaymentIDGetRes, err error) { + otelAttrs := []attribute.KeyValue{ + semconv.HTTPRequestMethodKey.String("GET"), + semconv.URLTemplateKey.String("/payments/{payment_id}"), + } + otelAttrs = append(otelAttrs, c.cfg.Attributes...) + + // 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, PaymentsPaymentIDGetOperation, + 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] = "/payments/" + { + // Encode "payment_id" parameter. + e := uri.NewPathEncoder(uri.PathEncoderConfig{ + Param: "payment_id", + Style: uri.PathStyleSimple, + Explode: false, + }) + if err := func() error { + if unwrapped := string(params.PaymentID); true { + return e.EncodeValue(conv.StringToString(unwrapped)) + } + return nil + }(); 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:BasicAuth" + switch err := c.securityBasicAuth(ctx, PaymentsPaymentIDGetOperation, 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 \"BasicAuth\"") + } + } + { + stage = "Security:OAuth2" + switch err := c.securityOAuth2(ctx, PaymentsPaymentIDGetOperation, r); { + case err == nil: // if NO error + satisfied[0] |= 1 << 1 + case errors.Is(err, ogenerrors.ErrSkipClientSecurity): + // Skip this security. + default: + return res, errors.Wrap(err, "security \"OAuth2\"") + } + } + + if ok := func() bool { + nextRequirement: + for _, requirement := range []bitset{ + {0b00000001}, + {0b00000010}, + } { + 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") + } + body := resp.Body + defer body.Close() + + stage = "DecodeResponse" + result, err := decodePaymentsPaymentIDGetResponse(resp) + if err != nil { + return res, errors.Wrap(err, "decode response") + } + + return result, nil +} + +// PaymentsPost invokes POST /payments operation. +// +// To accept a payment, you need to create a payment object: https://yookassa. +// ru/developers/api#payment_object, Payment. It contains all the necessary payment information +// (amount, currency, and status). Payments have a linear life cycle, going from one status to the +// next sequentially. +// +// POST /payments +func (c *Client) PaymentsPost(ctx context.Context, request *PaymentsPostReq, params PaymentsPostParams) (PaymentsPostRes, error) { + res, err := c.sendPaymentsPost(ctx, request, params) + return res, err +} + +func (c *Client) sendPaymentsPost(ctx context.Context, request *PaymentsPostReq, params PaymentsPostParams) (res PaymentsPostRes, err error) { + otelAttrs := []attribute.KeyValue{ + semconv.HTTPRequestMethodKey.String("POST"), + semconv.URLTemplateKey.String("/payments"), + } + otelAttrs = append(otelAttrs, c.cfg.Attributes...) + + // 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, PaymentsPostOperation, + 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 [1]string + pathParts[0] = "/payments" + uri.AddPathParts(u, pathParts[:]...) + + stage = "EncodeRequest" + r, err := ht.NewRequest(ctx, "POST", u) + if err != nil { + return res, errors.Wrap(err, "create request") + } + if err := encodePaymentsPostRequest(request, r); err != nil { + return res, errors.Wrap(err, "encode request") + } + + stage = "EncodeHeaderParams" + h := uri.NewHeaderEncoder(r.Header) + { + cfg := uri.HeaderParameterEncodingConfig{ + Name: "Idempotence-Key", + Explode: false, + } + if err := h.EncodeParam(cfg, func(e uri.Encoder) error { + return e.EncodeValue(conv.StringToString(params.IdempotenceKey)) + }); err != nil { + return res, errors.Wrap(err, "encode header") + } + } + + { + type bitset = [1]uint8 + var satisfied bitset + { + stage = "Security:BasicAuth" + switch err := c.securityBasicAuth(ctx, PaymentsPostOperation, 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 \"BasicAuth\"") + } + } + { + stage = "Security:OAuth2" + switch err := c.securityOAuth2(ctx, PaymentsPostOperation, r); { + case err == nil: // if NO error + satisfied[0] |= 1 << 1 + case errors.Is(err, ogenerrors.ErrSkipClientSecurity): + // Skip this security. + default: + return res, errors.Wrap(err, "security \"OAuth2\"") + } + } + + if ok := func() bool { + nextRequirement: + for _, requirement := range []bitset{ + {0b00000001}, + {0b00000010}, + } { + 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") + } + body := resp.Body + defer body.Close() + + stage = "DecodeResponse" + result, err := decodePaymentsPostResponse(resp) + if err != nil { + return res, errors.Wrap(err, "decode response") + } + + return result, nil +} + +// PayoutsGet invokes GET /payouts operation. +// +// Use this request to get a list of payouts. You can download payments created over the last 3 years. +// +// You can filter the list by specified criteria. Request authentication details: https://yookassa. +// +// ru/developers/using-api/interaction-format#auth depend on which payment solution you are using: +// basic payouts: https://yookassa.ru/developers/payouts/overview or payouts within the Safe Deal: +// https://yookassa.ru/developers/solutions-for-platforms/safe-deal/basics. More about working with +// lists: https://yookassa.ru/developers/using-api/lists. +// +// GET /payouts +func (c *Client) PayoutsGet(ctx context.Context, params PayoutsGetParams) (PayoutsGetRes, error) { + res, err := c.sendPayoutsGet(ctx, params) + return res, err +} + +func (c *Client) sendPayoutsGet(ctx context.Context, params PayoutsGetParams) (res PayoutsGetRes, err error) { + otelAttrs := []attribute.KeyValue{ + semconv.HTTPRequestMethodKey.String("GET"), + semconv.URLTemplateKey.String("/payouts"), + } + otelAttrs = append(otelAttrs, c.cfg.Attributes...) + + // 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, PayoutsGetOperation, + 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 [1]string + pathParts[0] = "/payouts" + uri.AddPathParts(u, pathParts[:]...) + + stage = "EncodeQueryParams" + q := uri.NewQueryEncoder() + { + // Encode "created_at.gte" parameter. + cfg := uri.QueryParameterEncodingConfig{ + Name: "created_at.gte", + Style: uri.QueryStyleForm, + Explode: true, + } + + if err := q.EncodeParam(cfg, func(e uri.Encoder) error { + if val, ok := params.CreatedAtGte.Get(); ok { + return e.EncodeValue(conv.DateTimeToString(val)) + } + return nil + }); err != nil { + return res, errors.Wrap(err, "encode query") + } + } + { + // Encode "created_at.gt" parameter. + cfg := uri.QueryParameterEncodingConfig{ + Name: "created_at.gt", + Style: uri.QueryStyleForm, + Explode: true, + } + + if err := q.EncodeParam(cfg, func(e uri.Encoder) error { + if val, ok := params.CreatedAtGt.Get(); ok { + return e.EncodeValue(conv.DateTimeToString(val)) + } + return nil + }); err != nil { + return res, errors.Wrap(err, "encode query") + } + } + { + // Encode "created_at.lte" parameter. + cfg := uri.QueryParameterEncodingConfig{ + Name: "created_at.lte", + Style: uri.QueryStyleForm, + Explode: true, + } + + if err := q.EncodeParam(cfg, func(e uri.Encoder) error { + if val, ok := params.CreatedAtLte.Get(); ok { + return e.EncodeValue(conv.DateTimeToString(val)) + } + return nil + }); err != nil { + return res, errors.Wrap(err, "encode query") + } + } + { + // Encode "created_at.lt" parameter. + cfg := uri.QueryParameterEncodingConfig{ + Name: "created_at.lt", + Style: uri.QueryStyleForm, + Explode: true, + } + + if err := q.EncodeParam(cfg, func(e uri.Encoder) error { + if val, ok := params.CreatedAtLt.Get(); ok { + return e.EncodeValue(conv.DateTimeToString(val)) + } + return nil + }); err != nil { + return res, errors.Wrap(err, "encode query") + } + } + { + // Encode "payout_destination.type" parameter. + cfg := uri.QueryParameterEncodingConfig{ + Name: "payout_destination.type", + Style: uri.QueryStyleForm, + Explode: true, + } + + if err := q.EncodeParam(cfg, func(e uri.Encoder) error { + if val, ok := params.PayoutDestinationType.Get(); ok { + return e.EncodeValue(conv.StringToString(string(val))) + } + return nil + }); err != nil { + return res, errors.Wrap(err, "encode query") + } + } + { + // Encode "status" parameter. + cfg := uri.QueryParameterEncodingConfig{ + Name: "status", + Style: uri.QueryStyleForm, + Explode: true, + } + + if err := q.EncodeParam(cfg, func(e uri.Encoder) error { + if val, ok := params.Status.Get(); ok { + return e.EncodeValue(conv.StringToString(string(val))) + } + return nil + }); err != nil { + return res, errors.Wrap(err, "encode query") + } + } + { + // Encode "limit" parameter. + cfg := uri.QueryParameterEncodingConfig{ + Name: "limit", + Style: uri.QueryStyleForm, + Explode: true, + } + + if err := q.EncodeParam(cfg, func(e uri.Encoder) error { + if val, ok := params.Limit.Get(); ok { + return e.EncodeValue(conv.IntToString(val)) + } + return nil + }); err != nil { + return res, errors.Wrap(err, "encode query") + } + } + { + // Encode "cursor" parameter. + cfg := uri.QueryParameterEncodingConfig{ + Name: "cursor", + Style: uri.QueryStyleForm, + Explode: true, + } + + if err := q.EncodeParam(cfg, func(e uri.Encoder) error { + if val, ok := params.Cursor.Get(); ok { + return e.EncodeValue(conv.StringToString(val)) + } + return nil + }); err != nil { + return res, errors.Wrap(err, "encode query") + } + } + u.RawQuery = q.Values().Encode() + + 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:BasicAuth" + switch err := c.securityBasicAuth(ctx, PayoutsGetOperation, 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 \"BasicAuth\"") + } + } + { + stage = "Security:OAuth2" + switch err := c.securityOAuth2(ctx, PayoutsGetOperation, r); { + case err == nil: // if NO error + satisfied[0] |= 1 << 1 + case errors.Is(err, ogenerrors.ErrSkipClientSecurity): + // Skip this security. + default: + return res, errors.Wrap(err, "security \"OAuth2\"") + } + } + + if ok := func() bool { + nextRequirement: + for _, requirement := range []bitset{ + {0b00000001}, + {0b00000010}, + } { + 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") + } + body := resp.Body + defer body.Close() + + stage = "DecodeResponse" + result, err := decodePayoutsGetResponse(resp) + if err != nil { + return res, errors.Wrap(err, "decode response") + } + + return result, nil +} + +// PayoutsPayoutIDGet invokes GET /payouts/{payout_id} operation. +// +// Используйте этот запрос, чтобы получить информацию о +// текущем состоянии выплаты по ее уникальному +// идентификатору. Данные для аутентификации: https://yookassa. +// ru/developers/using-api/interaction-format#auth запросов зависят от того, +// какое платежное решение вы используете — обычные +// выплаты: https://yookassa.ru/developers/payouts/overview или выплаты в +// рамках Безопасной сделки: https://yookassa. +// ru/developers/solutions-for-platforms/safe-deal/basics. +// +// GET /payouts/{payout_id} +func (c *Client) PayoutsPayoutIDGet(ctx context.Context, params PayoutsPayoutIDGetParams) (PayoutsPayoutIDGetRes, error) { + res, err := c.sendPayoutsPayoutIDGet(ctx, params) + return res, err +} + +func (c *Client) sendPayoutsPayoutIDGet(ctx context.Context, params PayoutsPayoutIDGetParams) (res PayoutsPayoutIDGetRes, err error) { + otelAttrs := []attribute.KeyValue{ + semconv.HTTPRequestMethodKey.String("GET"), + semconv.URLTemplateKey.String("/payouts/{payout_id}"), + } + otelAttrs = append(otelAttrs, c.cfg.Attributes...) + + // 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, PayoutsPayoutIDGetOperation, + 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] = "/payouts/" + { + // Encode "payout_id" parameter. + e := uri.NewPathEncoder(uri.PathEncoderConfig{ + Param: "payout_id", + Style: uri.PathStyleSimple, + Explode: false, + }) + if err := func() error { + if unwrapped := string(params.PayoutID); true { + return e.EncodeValue(conv.StringToString(unwrapped)) + } + return nil + }(); 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:BasicAuth" + switch err := c.securityBasicAuth(ctx, PayoutsPayoutIDGetOperation, 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 \"BasicAuth\"") + } + } + { + stage = "Security:OAuth2" + switch err := c.securityOAuth2(ctx, PayoutsPayoutIDGetOperation, r); { + case err == nil: // if NO error + satisfied[0] |= 1 << 1 + case errors.Is(err, ogenerrors.ErrSkipClientSecurity): + // Skip this security. + default: + return res, errors.Wrap(err, "security \"OAuth2\"") + } + } + + if ok := func() bool { + nextRequirement: + for _, requirement := range []bitset{ + {0b00000001}, + {0b00000010}, + } { + 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") + } + body := resp.Body + defer body.Close() + + stage = "DecodeResponse" + result, err := decodePayoutsPayoutIDGetResponse(resp) + if err != nil { + return res, errors.Wrap(err, "decode response") + } + + return result, nil +} + +// PayoutsPost invokes POST /payouts operation. +// +// Используйте этот запрос, чтобы создать в ЮKassa объект +// выплаты: https://yookassa.ru/developers/api#payout_object. В запросе +// необходимо передать сумму выплаты, данные о способе +// получения выплаты (например, номер кошелька ЮMoney), +// описание выплаты и при необходимости дополнительные +// параметры, связанные с той функциональностью, +// которую вы хотите использовать. Передаваемые +// параметры и данные для аутентификации: https://yookassa. +// ru/developers/using-api/interaction-format#auth запросов зависят от того, +// какое платежное решение вы используете — обычные +// выплаты: https://yookassa.ru/developers/payouts/overview или выплаты в +// рамках Безопасной сделки: https://yookassa. +// ru/developers/solutions-for-platforms/safe-deal/basics. +// +// POST /payouts +func (c *Client) PayoutsPost(ctx context.Context, request *PayoutRequest, params PayoutsPostParams) (PayoutsPostRes, error) { + res, err := c.sendPayoutsPost(ctx, request, params) + return res, err +} + +func (c *Client) sendPayoutsPost(ctx context.Context, request *PayoutRequest, params PayoutsPostParams) (res PayoutsPostRes, err error) { + otelAttrs := []attribute.KeyValue{ + semconv.HTTPRequestMethodKey.String("POST"), + semconv.URLTemplateKey.String("/payouts"), + } + otelAttrs = append(otelAttrs, c.cfg.Attributes...) + + // 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, PayoutsPostOperation, + 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 [1]string + pathParts[0] = "/payouts" + uri.AddPathParts(u, pathParts[:]...) + + stage = "EncodeRequest" + r, err := ht.NewRequest(ctx, "POST", u) + if err != nil { + return res, errors.Wrap(err, "create request") + } + if err := encodePayoutsPostRequest(request, r); err != nil { + return res, errors.Wrap(err, "encode request") + } + + stage = "EncodeHeaderParams" + h := uri.NewHeaderEncoder(r.Header) + { + cfg := uri.HeaderParameterEncodingConfig{ + Name: "Idempotence-Key", + Explode: false, + } + if err := h.EncodeParam(cfg, func(e uri.Encoder) error { + return e.EncodeValue(conv.StringToString(params.IdempotenceKey)) + }); err != nil { + return res, errors.Wrap(err, "encode header") + } + } + + { + type bitset = [1]uint8 + var satisfied bitset + { + stage = "Security:BasicAuth" + switch err := c.securityBasicAuth(ctx, PayoutsPostOperation, 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 \"BasicAuth\"") + } + } + { + stage = "Security:OAuth2" + switch err := c.securityOAuth2(ctx, PayoutsPostOperation, r); { + case err == nil: // if NO error + satisfied[0] |= 1 << 1 + case errors.Is(err, ogenerrors.ErrSkipClientSecurity): + // Skip this security. + default: + return res, errors.Wrap(err, "security \"OAuth2\"") + } + } + + if ok := func() bool { + nextRequirement: + for _, requirement := range []bitset{ + {0b00000001}, + {0b00000010}, + } { + 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") + } + body := resp.Body + defer body.Close() + + stage = "DecodeResponse" + result, err := decodePayoutsPostResponse(resp) + if err != nil { + return res, errors.Wrap(err, "decode response") + } + + return result, nil +} + +// PayoutsSearchGet invokes GET /payouts/search operation. +// +// Use this request to search for payouts by the specified criteria. Available only for payouts +// created over the last 3 months. At this time, only search by the metadata parameter is available. +// You can also specify the date and time when the payout was created (the created_at parameter). +// Request authentication details: https://yookassa.ru/developers/using-api/interaction-format#auth +// depend on which payment solution you are using: basic payouts: https://yookassa. +// ru/developers/payouts/overview or payouts within the Safe Deal: https://yookassa. +// ru/developers/solutions-for-platforms/safe-deal/basics. +// +// GET /payouts/search +func (c *Client) PayoutsSearchGet(ctx context.Context, params PayoutsSearchGetParams) (PayoutsSearchGetRes, error) { + res, err := c.sendPayoutsSearchGet(ctx, params) + return res, err +} + +func (c *Client) sendPayoutsSearchGet(ctx context.Context, params PayoutsSearchGetParams) (res PayoutsSearchGetRes, err error) { + otelAttrs := []attribute.KeyValue{ + semconv.HTTPRequestMethodKey.String("GET"), + semconv.URLTemplateKey.String("/payouts/search"), + } + otelAttrs = append(otelAttrs, c.cfg.Attributes...) + + // 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, PayoutsSearchGetOperation, + 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 [1]string + pathParts[0] = "/payouts/search" + uri.AddPathParts(u, pathParts[:]...) + + stage = "EncodeQueryParams" + q := uri.NewQueryEncoder() + { + // Encode "created_at.gte" parameter. + cfg := uri.QueryParameterEncodingConfig{ + Name: "created_at.gte", + Style: uri.QueryStyleForm, + Explode: true, + } + + if err := q.EncodeParam(cfg, func(e uri.Encoder) error { + if val, ok := params.CreatedAtGte.Get(); ok { + return e.EncodeValue(conv.DateTimeToString(val)) + } + return nil + }); err != nil { + return res, errors.Wrap(err, "encode query") + } + } + { + // Encode "created_at.gt" parameter. + cfg := uri.QueryParameterEncodingConfig{ + Name: "created_at.gt", + Style: uri.QueryStyleForm, + Explode: true, + } + + if err := q.EncodeParam(cfg, func(e uri.Encoder) error { + if val, ok := params.CreatedAtGt.Get(); ok { + return e.EncodeValue(conv.DateTimeToString(val)) + } + return nil + }); err != nil { + return res, errors.Wrap(err, "encode query") + } + } + { + // Encode "created_at.lte" parameter. + cfg := uri.QueryParameterEncodingConfig{ + Name: "created_at.lte", + Style: uri.QueryStyleForm, + Explode: true, + } + + if err := q.EncodeParam(cfg, func(e uri.Encoder) error { + if val, ok := params.CreatedAtLte.Get(); ok { + return e.EncodeValue(conv.DateTimeToString(val)) + } + return nil + }); err != nil { + return res, errors.Wrap(err, "encode query") + } + } + { + // Encode "created_at.lt" parameter. + cfg := uri.QueryParameterEncodingConfig{ + Name: "created_at.lt", + Style: uri.QueryStyleForm, + Explode: true, + } + + if err := q.EncodeParam(cfg, func(e uri.Encoder) error { + if val, ok := params.CreatedAtLt.Get(); ok { + return e.EncodeValue(conv.DateTimeToString(val)) + } + return nil + }); err != nil { + return res, errors.Wrap(err, "encode query") + } + } + { + // Encode "metadata" parameter. + cfg := uri.QueryParameterEncodingConfig{ + Name: "metadata", + Style: uri.QueryStyleDeepObject, + Explode: true, + } + + if err := q.EncodeParam(cfg, func(e uri.Encoder) error { + if val, ok := params.Metadata.Get(); ok { + return val.EncodeURI(e) + } + return nil + }); err != nil { + return res, errors.Wrap(err, "encode query") + } + } + { + // Encode "limit" parameter. + cfg := uri.QueryParameterEncodingConfig{ + Name: "limit", + Style: uri.QueryStyleForm, + Explode: true, + } + + if err := q.EncodeParam(cfg, func(e uri.Encoder) error { + if val, ok := params.Limit.Get(); ok { + return e.EncodeValue(conv.IntToString(val)) + } + return nil + }); err != nil { + return res, errors.Wrap(err, "encode query") + } + } + { + // Encode "cursor" parameter. + cfg := uri.QueryParameterEncodingConfig{ + Name: "cursor", + Style: uri.QueryStyleForm, + Explode: true, + } + + if err := q.EncodeParam(cfg, func(e uri.Encoder) error { + if val, ok := params.Cursor.Get(); ok { + return e.EncodeValue(conv.StringToString(val)) + } + return nil + }); err != nil { + return res, errors.Wrap(err, "encode query") + } + } + u.RawQuery = q.Values().Encode() + + 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:BasicAuth" + switch err := c.securityBasicAuth(ctx, PayoutsSearchGetOperation, 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 \"BasicAuth\"") + } + } + { + stage = "Security:OAuth2" + switch err := c.securityOAuth2(ctx, PayoutsSearchGetOperation, r); { + case err == nil: // if NO error + satisfied[0] |= 1 << 1 + case errors.Is(err, ogenerrors.ErrSkipClientSecurity): + // Skip this security. + default: + return res, errors.Wrap(err, "security \"OAuth2\"") + } + } + + if ok := func() bool { + nextRequirement: + for _, requirement := range []bitset{ + {0b00000001}, + {0b00000010}, + } { + 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") + } + body := resp.Body + defer body.Close() + + stage = "DecodeResponse" + result, err := decodePayoutsSearchGetResponse(resp) + if err != nil { + return res, errors.Wrap(err, "decode response") + } + + return result, nil +} + +// PersonalDataPersonalDataIDGet invokes GET /personal_data/{personal_data_id} operation. +// +// С помощью этого запроса вы можете получить +// информацию о текущем статусе объекта персональных +// данных по его уникальному идентификатору. +// +// GET /personal_data/{personal_data_id} +func (c *Client) PersonalDataPersonalDataIDGet(ctx context.Context, params PersonalDataPersonalDataIDGetParams) (PersonalDataPersonalDataIDGetRes, error) { + res, err := c.sendPersonalDataPersonalDataIDGet(ctx, params) + return res, err +} + +func (c *Client) sendPersonalDataPersonalDataIDGet(ctx context.Context, params PersonalDataPersonalDataIDGetParams) (res PersonalDataPersonalDataIDGetRes, err error) { + otelAttrs := []attribute.KeyValue{ + semconv.HTTPRequestMethodKey.String("GET"), + semconv.URLTemplateKey.String("/personal_data/{personal_data_id}"), + } + otelAttrs = append(otelAttrs, c.cfg.Attributes...) + + // 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, PersonalDataPersonalDataIDGetOperation, + 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] = "/personal_data/" + { + // Encode "personal_data_id" parameter. + e := uri.NewPathEncoder(uri.PathEncoderConfig{ + Param: "personal_data_id", + Style: uri.PathStyleSimple, + Explode: false, + }) + if err := func() error { + if unwrapped := string(params.PersonalDataID); true { + return e.EncodeValue(conv.StringToString(unwrapped)) + } + return nil + }(); 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:BasicAuth" + switch err := c.securityBasicAuth(ctx, PersonalDataPersonalDataIDGetOperation, 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 \"BasicAuth\"") + } + } + { + stage = "Security:OAuth2" + switch err := c.securityOAuth2(ctx, PersonalDataPersonalDataIDGetOperation, r); { + case err == nil: // if NO error + satisfied[0] |= 1 << 1 + case errors.Is(err, ogenerrors.ErrSkipClientSecurity): + // Skip this security. + default: + return res, errors.Wrap(err, "security \"OAuth2\"") + } + } + + if ok := func() bool { + nextRequirement: + for _, requirement := range []bitset{ + {0b00000001}, + {0b00000010}, + } { + 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") + } + body := resp.Body + defer body.Close() + + stage = "DecodeResponse" + result, err := decodePersonalDataPersonalDataIDGetResponse(resp) + if err != nil { + return res, errors.Wrap(err, "decode response") + } + + return result, nil +} + +// PersonalDataPost invokes POST /personal_data operation. +// +// Используйте этот запрос, чтобы создать в ЮKassa объект +// персональных данных: https://yookassa.ru/developers/api#personal_data_object. В +// запросе необходимо указать тип данных (с какой целью +// они будут использоваться) и передать информацию о +// пользователе: фамилию, имя, отчество и другие — в +// зависимости от выбранного типа. Идентификатор +// созданного объекта персональных данных необходимо +// использовать в запросе на создание выплаты: https://yookassa. +// ru/developers/api#create_payout. +// +// POST /personal_data +func (c *Client) PersonalDataPost(ctx context.Context, request PersonalDataPostReq, params PersonalDataPostParams) (PersonalDataPostRes, error) { + res, err := c.sendPersonalDataPost(ctx, request, params) + return res, err +} + +func (c *Client) sendPersonalDataPost(ctx context.Context, request PersonalDataPostReq, params PersonalDataPostParams) (res PersonalDataPostRes, err error) { + otelAttrs := []attribute.KeyValue{ + semconv.HTTPRequestMethodKey.String("POST"), + semconv.URLTemplateKey.String("/personal_data"), + } + otelAttrs = append(otelAttrs, c.cfg.Attributes...) + + // 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, PersonalDataPostOperation, + 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 [1]string + pathParts[0] = "/personal_data" + uri.AddPathParts(u, pathParts[:]...) + + stage = "EncodeRequest" + r, err := ht.NewRequest(ctx, "POST", u) + if err != nil { + return res, errors.Wrap(err, "create request") + } + if err := encodePersonalDataPostRequest(request, r); err != nil { + return res, errors.Wrap(err, "encode request") + } + + stage = "EncodeHeaderParams" + h := uri.NewHeaderEncoder(r.Header) + { + cfg := uri.HeaderParameterEncodingConfig{ + Name: "Idempotence-Key", + Explode: false, + } + if err := h.EncodeParam(cfg, func(e uri.Encoder) error { + return e.EncodeValue(conv.StringToString(params.IdempotenceKey)) + }); err != nil { + return res, errors.Wrap(err, "encode header") + } + } + + { + type bitset = [1]uint8 + var satisfied bitset + { + stage = "Security:BasicAuth" + switch err := c.securityBasicAuth(ctx, PersonalDataPostOperation, 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 \"BasicAuth\"") + } + } + { + stage = "Security:OAuth2" + switch err := c.securityOAuth2(ctx, PersonalDataPostOperation, r); { + case err == nil: // if NO error + satisfied[0] |= 1 << 1 + case errors.Is(err, ogenerrors.ErrSkipClientSecurity): + // Skip this security. + default: + return res, errors.Wrap(err, "security \"OAuth2\"") + } + } + + if ok := func() bool { + nextRequirement: + for _, requirement := range []bitset{ + {0b00000001}, + {0b00000010}, + } { + 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") + } + body := resp.Body + defer body.Close() + + stage = "DecodeResponse" + result, err := decodePersonalDataPostResponse(resp) + if err != nil { + return res, errors.Wrap(err, "decode response") + } + + return result, nil +} + +// ReceiptsGet invokes GET /receipts operation. +// +// Запрос позволяет получить список чеков, +// отфильтрованный по заданным критериям. Можно +// запросить чеки по конкретному платежу, чеки по +// конкретному возврату или все чеки магазина. +// Подробнее о работе со списками: https://yookassa. +// ru/developers/using-api/lists. +// +// GET /receipts +func (c *Client) ReceiptsGet(ctx context.Context, params ReceiptsGetParams) (ReceiptsGetRes, error) { + res, err := c.sendReceiptsGet(ctx, params) + return res, err +} + +func (c *Client) sendReceiptsGet(ctx context.Context, params ReceiptsGetParams) (res ReceiptsGetRes, err error) { + otelAttrs := []attribute.KeyValue{ + semconv.HTTPRequestMethodKey.String("GET"), + semconv.URLTemplateKey.String("/receipts"), + } + otelAttrs = append(otelAttrs, c.cfg.Attributes...) + + // 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, ReceiptsGetOperation, + 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 [1]string + pathParts[0] = "/receipts" + uri.AddPathParts(u, pathParts[:]...) + + stage = "EncodeQueryParams" + q := uri.NewQueryEncoder() + { + // Encode "created_at.gte" parameter. + cfg := uri.QueryParameterEncodingConfig{ + Name: "created_at.gte", + Style: uri.QueryStyleForm, + Explode: true, + } + + if err := q.EncodeParam(cfg, func(e uri.Encoder) error { + if val, ok := params.CreatedAtGte.Get(); ok { + return e.EncodeValue(conv.DateTimeToString(val)) + } + return nil + }); err != nil { + return res, errors.Wrap(err, "encode query") + } + } + { + // Encode "created_at.gt" parameter. + cfg := uri.QueryParameterEncodingConfig{ + Name: "created_at.gt", + Style: uri.QueryStyleForm, + Explode: true, + } + + if err := q.EncodeParam(cfg, func(e uri.Encoder) error { + if val, ok := params.CreatedAtGt.Get(); ok { + return e.EncodeValue(conv.DateTimeToString(val)) + } + return nil + }); err != nil { + return res, errors.Wrap(err, "encode query") + } + } + { + // Encode "created_at.lte" parameter. + cfg := uri.QueryParameterEncodingConfig{ + Name: "created_at.lte", + Style: uri.QueryStyleForm, + Explode: true, + } + + if err := q.EncodeParam(cfg, func(e uri.Encoder) error { + if val, ok := params.CreatedAtLte.Get(); ok { + return e.EncodeValue(conv.DateTimeToString(val)) + } + return nil + }); err != nil { + return res, errors.Wrap(err, "encode query") + } + } + { + // Encode "created_at.lt" parameter. + cfg := uri.QueryParameterEncodingConfig{ + Name: "created_at.lt", + Style: uri.QueryStyleForm, + Explode: true, + } + + if err := q.EncodeParam(cfg, func(e uri.Encoder) error { + if val, ok := params.CreatedAtLt.Get(); ok { + return e.EncodeValue(conv.DateTimeToString(val)) + } + return nil + }); err != nil { + return res, errors.Wrap(err, "encode query") + } + } + { + // Encode "status" parameter. + cfg := uri.QueryParameterEncodingConfig{ + Name: "status", + Style: uri.QueryStyleForm, + Explode: true, + } + + if err := q.EncodeParam(cfg, func(e uri.Encoder) error { + if val, ok := params.Status.Get(); ok { + return e.EncodeValue(conv.StringToString(string(val))) + } + return nil + }); err != nil { + return res, errors.Wrap(err, "encode query") + } + } + { + // Encode "payment_id" parameter. + cfg := uri.QueryParameterEncodingConfig{ + Name: "payment_id", + Style: uri.QueryStyleForm, + Explode: true, + } + + if err := q.EncodeParam(cfg, func(e uri.Encoder) error { + if val, ok := params.PaymentID.Get(); ok { + if unwrapped := string(val); true { + return e.EncodeValue(conv.StringToString(unwrapped)) + } + return nil + } + return nil + }); err != nil { + return res, errors.Wrap(err, "encode query") + } + } + { + // Encode "refund_id" parameter. + cfg := uri.QueryParameterEncodingConfig{ + Name: "refund_id", + Style: uri.QueryStyleForm, + Explode: true, + } + + if err := q.EncodeParam(cfg, func(e uri.Encoder) error { + if val, ok := params.RefundID.Get(); ok { + if unwrapped := string(val); true { + return e.EncodeValue(conv.StringToString(unwrapped)) + } + return nil + } + return nil + }); err != nil { + return res, errors.Wrap(err, "encode query") + } + } + { + // Encode "limit" parameter. + cfg := uri.QueryParameterEncodingConfig{ + Name: "limit", + Style: uri.QueryStyleForm, + Explode: true, + } + + if err := q.EncodeParam(cfg, func(e uri.Encoder) error { + if val, ok := params.Limit.Get(); ok { + return e.EncodeValue(conv.IntToString(val)) + } + return nil + }); err != nil { + return res, errors.Wrap(err, "encode query") + } + } + { + // Encode "cursor" parameter. + cfg := uri.QueryParameterEncodingConfig{ + Name: "cursor", + Style: uri.QueryStyleForm, + Explode: true, + } + + if err := q.EncodeParam(cfg, func(e uri.Encoder) error { + if val, ok := params.Cursor.Get(); ok { + return e.EncodeValue(conv.StringToString(val)) + } + return nil + }); err != nil { + return res, errors.Wrap(err, "encode query") + } + } + u.RawQuery = q.Values().Encode() + + 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:BasicAuth" + switch err := c.securityBasicAuth(ctx, ReceiptsGetOperation, 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 \"BasicAuth\"") + } + } + { + stage = "Security:OAuth2" + switch err := c.securityOAuth2(ctx, ReceiptsGetOperation, r); { + case err == nil: // if NO error + satisfied[0] |= 1 << 1 + case errors.Is(err, ogenerrors.ErrSkipClientSecurity): + // Skip this security. + default: + return res, errors.Wrap(err, "security \"OAuth2\"") + } + } + + if ok := func() bool { + nextRequirement: + for _, requirement := range []bitset{ + {0b00000001}, + {0b00000010}, + } { + 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") + } + body := resp.Body + defer body.Close() + + stage = "DecodeResponse" + result, err := decodeReceiptsGetResponse(resp) + if err != nil { + return res, errors.Wrap(err, "decode response") + } + + return result, nil +} + +// ReceiptsPost invokes POST /receipts operation. +// +// Используйте этот запрос при оплате с соблюдением +// требований 54-ФЗ: https://yookassa. +// ru/developers/payment-acceptance/receipts/54fz/basics, чтобы создать чек +// зачета предоплаты. Если вы работаете по сценарию +// Сначала платеж, потом чек: https://yookassa. +// ru/developers/payment-acceptance/receipts/54fz/other-services/basics#receipt-after-payment, в +// запросе также нужно передавать данные для +// формирования чека прихода и чека возврата прихода. +// +// POST /receipts +func (c *Client) ReceiptsPost(ctx context.Context, request PostReceiptData, params ReceiptsPostParams) (ReceiptsPostRes, error) { + res, err := c.sendReceiptsPost(ctx, request, params) + return res, err +} + +func (c *Client) sendReceiptsPost(ctx context.Context, request PostReceiptData, params ReceiptsPostParams) (res ReceiptsPostRes, err error) { + otelAttrs := []attribute.KeyValue{ + semconv.HTTPRequestMethodKey.String("POST"), + semconv.URLTemplateKey.String("/receipts"), + } + otelAttrs = append(otelAttrs, c.cfg.Attributes...) + + // 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, ReceiptsPostOperation, + 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 [1]string + pathParts[0] = "/receipts" + uri.AddPathParts(u, pathParts[:]...) + + stage = "EncodeRequest" + r, err := ht.NewRequest(ctx, "POST", u) + if err != nil { + return res, errors.Wrap(err, "create request") + } + if err := encodeReceiptsPostRequest(request, r); err != nil { + return res, errors.Wrap(err, "encode request") + } + + stage = "EncodeHeaderParams" + h := uri.NewHeaderEncoder(r.Header) + { + cfg := uri.HeaderParameterEncodingConfig{ + Name: "Idempotence-Key", + Explode: false, + } + if err := h.EncodeParam(cfg, func(e uri.Encoder) error { + return e.EncodeValue(conv.StringToString(params.IdempotenceKey)) + }); err != nil { + return res, errors.Wrap(err, "encode header") + } + } + + { + type bitset = [1]uint8 + var satisfied bitset + { + stage = "Security:BasicAuth" + switch err := c.securityBasicAuth(ctx, ReceiptsPostOperation, 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 \"BasicAuth\"") + } + } + { + stage = "Security:OAuth2" + switch err := c.securityOAuth2(ctx, ReceiptsPostOperation, r); { + case err == nil: // if NO error + satisfied[0] |= 1 << 1 + case errors.Is(err, ogenerrors.ErrSkipClientSecurity): + // Skip this security. + default: + return res, errors.Wrap(err, "security \"OAuth2\"") + } + } + + if ok := func() bool { + nextRequirement: + for _, requirement := range []bitset{ + {0b00000001}, + {0b00000010}, + } { + 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") + } + body := resp.Body + defer body.Close() + + stage = "DecodeResponse" + result, err := decodeReceiptsPostResponse(resp) + if err != nil { + return res, errors.Wrap(err, "decode response") + } + + return result, nil +} + +// ReceiptsReceiptIDGet invokes GET /receipts/{receipt_id} operation. +// +// Запрос позволяет получить информацию о текущем +// состоянии чека по его уникальному идентификатору. +// +// GET /receipts/{receipt_id} +func (c *Client) ReceiptsReceiptIDGet(ctx context.Context, params ReceiptsReceiptIDGetParams) (ReceiptsReceiptIDGetRes, error) { + res, err := c.sendReceiptsReceiptIDGet(ctx, params) + return res, err +} + +func (c *Client) sendReceiptsReceiptIDGet(ctx context.Context, params ReceiptsReceiptIDGetParams) (res ReceiptsReceiptIDGetRes, err error) { + otelAttrs := []attribute.KeyValue{ + semconv.HTTPRequestMethodKey.String("GET"), + semconv.URLTemplateKey.String("/receipts/{receipt_id}"), + } + otelAttrs = append(otelAttrs, c.cfg.Attributes...) + + // 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, ReceiptsReceiptIDGetOperation, + 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] = "/receipts/" + { + // Encode "receipt_id" parameter. + e := uri.NewPathEncoder(uri.PathEncoderConfig{ + Param: "receipt_id", + Style: uri.PathStyleSimple, + Explode: false, + }) + if err := func() error { + if unwrapped := string(params.ReceiptID); true { + return e.EncodeValue(conv.StringToString(unwrapped)) + } + return nil + }(); 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:BasicAuth" + switch err := c.securityBasicAuth(ctx, ReceiptsReceiptIDGetOperation, 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 \"BasicAuth\"") + } + } + { + stage = "Security:OAuth2" + switch err := c.securityOAuth2(ctx, ReceiptsReceiptIDGetOperation, r); { + case err == nil: // if NO error + satisfied[0] |= 1 << 1 + case errors.Is(err, ogenerrors.ErrSkipClientSecurity): + // Skip this security. + default: + return res, errors.Wrap(err, "security \"OAuth2\"") + } + } + + if ok := func() bool { + nextRequirement: + for _, requirement := range []bitset{ + {0b00000001}, + {0b00000010}, + } { + 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") + } + body := resp.Body + defer body.Close() + + stage = "DecodeResponse" + result, err := decodeReceiptsReceiptIDGetResponse(resp) + if err != nil { + return res, errors.Wrap(err, "decode response") + } + + return result, nil +} + +// RefundsGet invokes GET /refunds operation. +// +// Use this request to get a list of refunds. You can download refunds created over the last 3 years. +// You can filter the list by specified criteria. More about working with lists: https://yookassa. +// ru/developers/using-api/lists. +// +// GET /refunds +func (c *Client) RefundsGet(ctx context.Context, params RefundsGetParams) (RefundsGetRes, error) { + res, err := c.sendRefundsGet(ctx, params) + return res, err +} + +func (c *Client) sendRefundsGet(ctx context.Context, params RefundsGetParams) (res RefundsGetRes, err error) { + otelAttrs := []attribute.KeyValue{ + semconv.HTTPRequestMethodKey.String("GET"), + semconv.URLTemplateKey.String("/refunds"), + } + otelAttrs = append(otelAttrs, c.cfg.Attributes...) + + // 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, RefundsGetOperation, + 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 [1]string + pathParts[0] = "/refunds" + uri.AddPathParts(u, pathParts[:]...) + + stage = "EncodeQueryParams" + q := uri.NewQueryEncoder() + { + // Encode "created_at.gte" parameter. + cfg := uri.QueryParameterEncodingConfig{ + Name: "created_at.gte", + Style: uri.QueryStyleForm, + Explode: true, + } + + if err := q.EncodeParam(cfg, func(e uri.Encoder) error { + if val, ok := params.CreatedAtGte.Get(); ok { + return e.EncodeValue(conv.DateTimeToString(val)) + } + return nil + }); err != nil { + return res, errors.Wrap(err, "encode query") + } + } + { + // Encode "created_at.gt" parameter. + cfg := uri.QueryParameterEncodingConfig{ + Name: "created_at.gt", + Style: uri.QueryStyleForm, + Explode: true, + } + + if err := q.EncodeParam(cfg, func(e uri.Encoder) error { + if val, ok := params.CreatedAtGt.Get(); ok { + return e.EncodeValue(conv.DateTimeToString(val)) + } + return nil + }); err != nil { + return res, errors.Wrap(err, "encode query") + } + } + { + // Encode "created_at.lte" parameter. + cfg := uri.QueryParameterEncodingConfig{ + Name: "created_at.lte", + Style: uri.QueryStyleForm, + Explode: true, + } + + if err := q.EncodeParam(cfg, func(e uri.Encoder) error { + if val, ok := params.CreatedAtLte.Get(); ok { + return e.EncodeValue(conv.DateTimeToString(val)) + } + return nil + }); err != nil { + return res, errors.Wrap(err, "encode query") + } + } + { + // Encode "created_at.lt" parameter. + cfg := uri.QueryParameterEncodingConfig{ + Name: "created_at.lt", + Style: uri.QueryStyleForm, + Explode: true, + } + + if err := q.EncodeParam(cfg, func(e uri.Encoder) error { + if val, ok := params.CreatedAtLt.Get(); ok { + return e.EncodeValue(conv.DateTimeToString(val)) + } + return nil + }); err != nil { + return res, errors.Wrap(err, "encode query") + } + } + { + // Encode "payment_id" parameter. + cfg := uri.QueryParameterEncodingConfig{ + Name: "payment_id", + Style: uri.QueryStyleForm, + Explode: true, + } + + if err := q.EncodeParam(cfg, func(e uri.Encoder) error { + if val, ok := params.PaymentID.Get(); ok { + if unwrapped := string(val); true { + return e.EncodeValue(conv.StringToString(unwrapped)) + } + return nil + } + return nil + }); err != nil { + return res, errors.Wrap(err, "encode query") + } + } + { + // Encode "status" parameter. + cfg := uri.QueryParameterEncodingConfig{ + Name: "status", + Style: uri.QueryStyleForm, + Explode: true, + } + + if err := q.EncodeParam(cfg, func(e uri.Encoder) error { + if val, ok := params.Status.Get(); ok { + return e.EncodeValue(conv.StringToString(string(val))) + } + return nil + }); err != nil { + return res, errors.Wrap(err, "encode query") + } + } + { + // Encode "limit" parameter. + cfg := uri.QueryParameterEncodingConfig{ + Name: "limit", + Style: uri.QueryStyleForm, + Explode: true, + } + + if err := q.EncodeParam(cfg, func(e uri.Encoder) error { + if val, ok := params.Limit.Get(); ok { + return e.EncodeValue(conv.IntToString(val)) + } + return nil + }); err != nil { + return res, errors.Wrap(err, "encode query") + } + } + { + // Encode "cursor" parameter. + cfg := uri.QueryParameterEncodingConfig{ + Name: "cursor", + Style: uri.QueryStyleForm, + Explode: true, + } + + if err := q.EncodeParam(cfg, func(e uri.Encoder) error { + if val, ok := params.Cursor.Get(); ok { + return e.EncodeValue(conv.StringToString(val)) + } + return nil + }); err != nil { + return res, errors.Wrap(err, "encode query") + } + } + u.RawQuery = q.Values().Encode() + + 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:BasicAuth" + switch err := c.securityBasicAuth(ctx, RefundsGetOperation, 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 \"BasicAuth\"") + } + } + { + stage = "Security:OAuth2" + switch err := c.securityOAuth2(ctx, RefundsGetOperation, r); { + case err == nil: // if NO error + satisfied[0] |= 1 << 1 + case errors.Is(err, ogenerrors.ErrSkipClientSecurity): + // Skip this security. + default: + return res, errors.Wrap(err, "security \"OAuth2\"") + } + } + + if ok := func() bool { + nextRequirement: + for _, requirement := range []bitset{ + {0b00000001}, + {0b00000010}, + } { + 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") + } + body := resp.Body + defer body.Close() + + stage = "DecodeResponse" + result, err := decodeRefundsGetResponse(resp) + if err != nil { + return res, errors.Wrap(err, "decode response") + } + + return result, nil +} + +// RefundsPost invokes POST /refunds operation. +// +// Создает возврат успешного платежа на указанную сумму. +// +// Платеж можно вернуть только в течение трех лет с +// +// момента его создания: https://yookassa.ru/developers/api#create_payment. +// Комиссия ЮKassa за проведение платежа не возвращается. +// +// POST /refunds +func (c *Client) RefundsPost(ctx context.Context, request *RefundsPostReq, params RefundsPostParams) (RefundsPostRes, error) { + res, err := c.sendRefundsPost(ctx, request, params) + return res, err +} + +func (c *Client) sendRefundsPost(ctx context.Context, request *RefundsPostReq, params RefundsPostParams) (res RefundsPostRes, err error) { + otelAttrs := []attribute.KeyValue{ + semconv.HTTPRequestMethodKey.String("POST"), + semconv.URLTemplateKey.String("/refunds"), + } + otelAttrs = append(otelAttrs, c.cfg.Attributes...) + + // 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, RefundsPostOperation, + 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 [1]string + pathParts[0] = "/refunds" + uri.AddPathParts(u, pathParts[:]...) + + stage = "EncodeRequest" + r, err := ht.NewRequest(ctx, "POST", u) + if err != nil { + return res, errors.Wrap(err, "create request") + } + if err := encodeRefundsPostRequest(request, r); err != nil { + return res, errors.Wrap(err, "encode request") + } + + stage = "EncodeHeaderParams" + h := uri.NewHeaderEncoder(r.Header) + { + cfg := uri.HeaderParameterEncodingConfig{ + Name: "Idempotence-Key", + Explode: false, + } + if err := h.EncodeParam(cfg, func(e uri.Encoder) error { + return e.EncodeValue(conv.StringToString(params.IdempotenceKey)) + }); err != nil { + return res, errors.Wrap(err, "encode header") + } + } + + { + type bitset = [1]uint8 + var satisfied bitset + { + stage = "Security:BasicAuth" + switch err := c.securityBasicAuth(ctx, RefundsPostOperation, 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 \"BasicAuth\"") + } + } + { + stage = "Security:OAuth2" + switch err := c.securityOAuth2(ctx, RefundsPostOperation, r); { + case err == nil: // if NO error + satisfied[0] |= 1 << 1 + case errors.Is(err, ogenerrors.ErrSkipClientSecurity): + // Skip this security. + default: + return res, errors.Wrap(err, "security \"OAuth2\"") + } + } + + if ok := func() bool { + nextRequirement: + for _, requirement := range []bitset{ + {0b00000001}, + {0b00000010}, + } { + 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") + } + body := resp.Body + defer body.Close() + + stage = "DecodeResponse" + result, err := decodeRefundsPostResponse(resp) + if err != nil { + return res, errors.Wrap(err, "decode response") + } + + return result, nil +} + +// RefundsRefundIDGet invokes GET /refunds/{refund_id} operation. +// +// Запрос позволяет получить информацию о текущем +// состоянии возврата по его уникальному +// идентификатору. +// +// GET /refunds/{refund_id} +func (c *Client) RefundsRefundIDGet(ctx context.Context, params RefundsRefundIDGetParams) (RefundsRefundIDGetRes, error) { + res, err := c.sendRefundsRefundIDGet(ctx, params) + return res, err +} + +func (c *Client) sendRefundsRefundIDGet(ctx context.Context, params RefundsRefundIDGetParams) (res RefundsRefundIDGetRes, err error) { + otelAttrs := []attribute.KeyValue{ + semconv.HTTPRequestMethodKey.String("GET"), + semconv.URLTemplateKey.String("/refunds/{refund_id}"), + } + otelAttrs = append(otelAttrs, c.cfg.Attributes...) + + // 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, RefundsRefundIDGetOperation, + 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] = "/refunds/" + { + // Encode "refund_id" parameter. + e := uri.NewPathEncoder(uri.PathEncoderConfig{ + Param: "refund_id", + Style: uri.PathStyleSimple, + Explode: false, + }) + if err := func() error { + return e.EncodeValue(conv.StringToString(params.RefundID)) + }(); 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:BasicAuth" + switch err := c.securityBasicAuth(ctx, RefundsRefundIDGetOperation, 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 \"BasicAuth\"") + } + } + { + stage = "Security:OAuth2" + switch err := c.securityOAuth2(ctx, RefundsRefundIDGetOperation, r); { + case err == nil: // if NO error + satisfied[0] |= 1 << 1 + case errors.Is(err, ogenerrors.ErrSkipClientSecurity): + // Skip this security. + default: + return res, errors.Wrap(err, "security \"OAuth2\"") + } + } + + if ok := func() bool { + nextRequirement: + for _, requirement := range []bitset{ + {0b00000001}, + {0b00000010}, + } { + 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") + } + body := resp.Body + defer body.Close() + + stage = "DecodeResponse" + result, err := decodeRefundsRefundIDGetResponse(resp) + if err != nil { + return res, errors.Wrap(err, "decode response") + } + + return result, nil +} + +// SbpBanksGet invokes GET /sbp_banks operation. +// +// С помощью этого запроса вы можете получить +// актуальный список всех участников СБП. Список нужно +// вывести получателю выплаты, идентификатор +// выбранного участника СБП необходимо использовать в +// запросе на создание выплаты: https://yookassa. +// ru/developers/api#create_payout. Подробнее о выплатах через СБП: +// https://yookassa.ru/developers/payouts/making-payouts/sbp. +// +// GET /sbp_banks +func (c *Client) SbpBanksGet(ctx context.Context) (SbpBanksGetRes, error) { + res, err := c.sendSbpBanksGet(ctx) + return res, err +} + +func (c *Client) sendSbpBanksGet(ctx context.Context) (res SbpBanksGetRes, err error) { + otelAttrs := []attribute.KeyValue{ + semconv.HTTPRequestMethodKey.String("GET"), + semconv.URLTemplateKey.String("/sbp_banks"), + } + otelAttrs = append(otelAttrs, c.cfg.Attributes...) + + // 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, SbpBanksGetOperation, + 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 [1]string + pathParts[0] = "/sbp_banks" + 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:BasicAuth" + switch err := c.securityBasicAuth(ctx, SbpBanksGetOperation, 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 \"BasicAuth\"") + } + } + { + stage = "Security:OAuth2" + switch err := c.securityOAuth2(ctx, SbpBanksGetOperation, r); { + case err == nil: // if NO error + satisfied[0] |= 1 << 1 + case errors.Is(err, ogenerrors.ErrSkipClientSecurity): + // Skip this security. + default: + return res, errors.Wrap(err, "security \"OAuth2\"") + } + } + + if ok := func() bool { + nextRequirement: + for _, requirement := range []bitset{ + {0b00000001}, + {0b00000010}, + } { + 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") + } + body := resp.Body + defer body.Close() + + stage = "DecodeResponse" + result, err := decodeSbpBanksGetResponse(resp) + if err != nil { + return res, errors.Wrap(err, "decode response") + } + + return result, nil +} + +// WebhooksGet invokes GET /webhooks operation. +// +// Запрос позволяет узнать, какие webhook есть для +// переданного OAuth-токена. +// +// GET /webhooks +func (c *Client) WebhooksGet(ctx context.Context) (WebhooksGetRes, error) { + res, err := c.sendWebhooksGet(ctx) + return res, err +} + +func (c *Client) sendWebhooksGet(ctx context.Context) (res WebhooksGetRes, err error) { + otelAttrs := []attribute.KeyValue{ + semconv.HTTPRequestMethodKey.String("GET"), + semconv.URLTemplateKey.String("/webhooks"), + } + otelAttrs = append(otelAttrs, c.cfg.Attributes...) + + // 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, WebhooksGetOperation, + 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 [1]string + pathParts[0] = "/webhooks" + 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:BasicAuth" + switch err := c.securityBasicAuth(ctx, WebhooksGetOperation, 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 \"BasicAuth\"") + } + } + { + stage = "Security:OAuth2" + switch err := c.securityOAuth2(ctx, WebhooksGetOperation, r); { + case err == nil: // if NO error + satisfied[0] |= 1 << 1 + case errors.Is(err, ogenerrors.ErrSkipClientSecurity): + // Skip this security. + default: + return res, errors.Wrap(err, "security \"OAuth2\"") + } + } + + if ok := func() bool { + nextRequirement: + for _, requirement := range []bitset{ + {0b00000001}, + {0b00000010}, + } { + 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") + } + body := resp.Body + defer body.Close() + + stage = "DecodeResponse" + result, err := decodeWebhooksGetResponse(resp) + if err != nil { + return res, errors.Wrap(err, "decode response") + } + + return result, nil +} + +// WebhooksPost invokes POST /webhooks operation. +// +// Запрос позволяет подписаться на уведомления о +// событиях: https://yookassa.ru/developers/using-api/webhooks#events (например, +// переход платежа в статус succeeded). C помощью webhook можно +// подписаться только на события платежей и возвратов. +// Если вы хотите получать уведомления о нескольких +// событиях, вам нужно для каждого из них создать свой +// webhook. Для каждого OAuth-токена нужно создавать свой +// набор webhook. +// +// POST /webhooks +func (c *Client) WebhooksPost(ctx context.Context, request *WebhooksPostReq, params WebhooksPostParams) (WebhooksPostRes, error) { + res, err := c.sendWebhooksPost(ctx, request, params) + return res, err +} + +func (c *Client) sendWebhooksPost(ctx context.Context, request *WebhooksPostReq, params WebhooksPostParams) (res WebhooksPostRes, err error) { + otelAttrs := []attribute.KeyValue{ + semconv.HTTPRequestMethodKey.String("POST"), + semconv.URLTemplateKey.String("/webhooks"), + } + otelAttrs = append(otelAttrs, c.cfg.Attributes...) + + // 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, WebhooksPostOperation, + 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 [1]string + pathParts[0] = "/webhooks" + uri.AddPathParts(u, pathParts[:]...) + + stage = "EncodeRequest" + r, err := ht.NewRequest(ctx, "POST", u) + if err != nil { + return res, errors.Wrap(err, "create request") + } + if err := encodeWebhooksPostRequest(request, r); err != nil { + return res, errors.Wrap(err, "encode request") + } + + stage = "EncodeHeaderParams" + h := uri.NewHeaderEncoder(r.Header) + { + cfg := uri.HeaderParameterEncodingConfig{ + Name: "Idempotence-Key", + Explode: false, + } + if err := h.EncodeParam(cfg, func(e uri.Encoder) error { + return e.EncodeValue(conv.StringToString(params.IdempotenceKey)) + }); err != nil { + return res, errors.Wrap(err, "encode header") + } + } + + { + type bitset = [1]uint8 + var satisfied bitset + { + stage = "Security:BasicAuth" + switch err := c.securityBasicAuth(ctx, WebhooksPostOperation, 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 \"BasicAuth\"") + } + } + { + stage = "Security:OAuth2" + switch err := c.securityOAuth2(ctx, WebhooksPostOperation, r); { + case err == nil: // if NO error + satisfied[0] |= 1 << 1 + case errors.Is(err, ogenerrors.ErrSkipClientSecurity): + // Skip this security. + default: + return res, errors.Wrap(err, "security \"OAuth2\"") + } + } + + if ok := func() bool { + nextRequirement: + for _, requirement := range []bitset{ + {0b00000001}, + {0b00000010}, + } { + 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") + } + body := resp.Body + defer body.Close() + + stage = "DecodeResponse" + result, err := decodeWebhooksPostResponse(resp) + if err != nil { + return res, errors.Wrap(err, "decode response") + } + + return result, nil +} + +// WebhooksWebhookIDDelete invokes DELETE /webhooks/{webhook_id} operation. +// +// Запрос позволяет отписаться от уведомлений о событии +// для переданного OAuth-токена. Чтобы удалить webhook, вам +// нужно передать в запросе его идентификатор. +// +// DELETE /webhooks/{webhook_id} +func (c *Client) WebhooksWebhookIDDelete(ctx context.Context, params WebhooksWebhookIDDeleteParams) (WebhooksWebhookIDDeleteRes, error) { + res, err := c.sendWebhooksWebhookIDDelete(ctx, params) + return res, err +} + +func (c *Client) sendWebhooksWebhookIDDelete(ctx context.Context, params WebhooksWebhookIDDeleteParams) (res WebhooksWebhookIDDeleteRes, err error) { + otelAttrs := []attribute.KeyValue{ + semconv.HTTPRequestMethodKey.String("DELETE"), + semconv.URLTemplateKey.String("/webhooks/{webhook_id}"), + } + otelAttrs = append(otelAttrs, c.cfg.Attributes...) + + // 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, WebhooksWebhookIDDeleteOperation, + 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] = "/webhooks/" + { + // Encode "webhook_id" parameter. + e := uri.NewPathEncoder(uri.PathEncoderConfig{ + Param: "webhook_id", + Style: uri.PathStyleSimple, + Explode: false, + }) + if err := func() error { + return e.EncodeValue(conv.StringToString(params.WebhookID)) + }(); 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, "DELETE", u) + if err != nil { + return res, errors.Wrap(err, "create request") + } + + { + type bitset = [1]uint8 + var satisfied bitset + { + stage = "Security:BasicAuth" + switch err := c.securityBasicAuth(ctx, WebhooksWebhookIDDeleteOperation, 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 \"BasicAuth\"") + } + } + { + stage = "Security:OAuth2" + switch err := c.securityOAuth2(ctx, WebhooksWebhookIDDeleteOperation, r); { + case err == nil: // if NO error + satisfied[0] |= 1 << 1 + case errors.Is(err, ogenerrors.ErrSkipClientSecurity): + // Skip this security. + default: + return res, errors.Wrap(err, "security \"OAuth2\"") + } + } + + if ok := func() bool { + nextRequirement: + for _, requirement := range []bitset{ + {0b00000001}, + {0b00000010}, + } { + 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") + } + body := resp.Body + defer body.Close() + + stage = "DecodeResponse" + result, err := decodeWebhooksWebhookIDDeleteResponse(resp) + if err != nil { + return res, errors.Wrap(err, "decode response") + } + + return result, nil +} diff --git a/internal/service/yookassa/gen/oas_defaults_gen.go b/internal/service/yookassa/gen/oas_defaults_gen.go new file mode 100644 index 0000000..b141d58 --- /dev/null +++ b/internal/service/yookassa/gen/oas_defaults_gen.go @@ -0,0 +1,47 @@ +// Code generated by ogen, DO NOT EDIT. + +package gen + +// setDefaults set default value of fields. +func (s *ConfirmationDataRedirect) setDefaults() { + { + val := bool(false) + s.Enforce.SetTo(Enforce(val)) + } +} + +// setDefaults set default value of fields. +func (s *ConfirmationRedirect) setDefaults() { + { + val := bool(false) + s.Enforce.SetTo(Enforce(val)) + } +} + +// setDefaults set default value of fields. +func (s *PaymentsPostReq) setDefaults() { + { + val := bool(false) + s.SavePaymentMethod.SetTo(SavePaymentMethodAttribute(val)) + } + { + val := bool(false) + s.Capture.SetTo(Capture(val)) + } +} + +// setDefaults set default value of fields. +func (s *SafeDeal) setDefaults() { + { + val := FeeMoment("payment_succeeded") + s.FeeMoment = val + } +} + +// setDefaults set default value of fields. +func (s *SafeDealRequest) setDefaults() { + { + val := FeeMoment("payment_succeeded") + s.FeeMoment = val + } +} diff --git a/internal/service/yookassa/gen/oas_handlers_gen.go b/internal/service/yookassa/gen/oas_handlers_gen.go new file mode 100644 index 0000000..c3cfe23 --- /dev/null +++ b/internal/service/yookassa/gen/oas_handlers_gen.go @@ -0,0 +1,5980 @@ +// Code generated by ogen, DO NOT EDIT. + +package gen + +import ( + "context" + "net/http" + "time" + + "github.com/go-faster/errors" + ht "github.com/ogen-go/ogen/http" + "github.com/ogen-go/ogen/middleware" + "github.com/ogen-go/ogen/ogenerrors" + "go.opentelemetry.io/otel/attribute" + "go.opentelemetry.io/otel/codes" + "go.opentelemetry.io/otel/metric" + semconv "go.opentelemetry.io/otel/semconv/v1.39.0" + "go.opentelemetry.io/otel/trace" +) + +type codeRecorder struct { + http.ResponseWriter + status int +} + +func (c *codeRecorder) WriteHeader(status int) { + c.status = status + c.ResponseWriter.WriteHeader(status) +} + +func (c *codeRecorder) Unwrap() http.ResponseWriter { + return c.ResponseWriter +} + +// handleDealsDealIDGetRequest handles GET /deals/{deal_id} operation. +// +// Запрос позволяет получить информацию о текущем +// состоянии сделки по ее уникальному идентификатору. +// +// GET /deals/{deal_id} +func (s *Server) handleDealsDealIDGetRequest(args [1]string, argsEscaped bool, w http.ResponseWriter, r *http.Request) { + statusWriter := &codeRecorder{ResponseWriter: w} + w = statusWriter + otelAttrs := []attribute.KeyValue{ + semconv.HTTPRequestMethodKey.String("GET"), + semconv.HTTPRouteKey.String("/deals/{deal_id}"), + } + // Add attributes from config. + otelAttrs = append(otelAttrs, s.cfg.Attributes...) + + // Start a span for this request. + ctx, span := s.cfg.Tracer.Start(r.Context(), DealsDealIDGetOperation, + 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: DealsDealIDGetOperation, + ID: "", + } + ) + { + type bitset = [1]uint8 + var satisfied bitset + { + sctx, ok, err := s.securityBasicAuth(ctx, DealsDealIDGetOperation, r) + if err != nil { + err = &ogenerrors.SecurityError{ + OperationContext: opErrContext, + Security: "BasicAuth", + Err: err, + } + defer recordError("Security:BasicAuth", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + if ok { + satisfied[0] |= 1 << 0 + ctx = sctx + } + } + { + sctx, ok, err := s.securityOAuth2(ctx, DealsDealIDGetOperation, r) + if err != nil { + err = &ogenerrors.SecurityError{ + OperationContext: opErrContext, + Security: "OAuth2", + Err: err, + } + defer recordError("Security:OAuth2", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + if ok { + satisfied[0] |= 1 << 1 + ctx = sctx + } + } + + if ok := func() bool { + nextRequirement: + for _, requirement := range []bitset{ + {0b00000001}, + {0b00000010}, + } { + 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, + } + defer recordError("Security", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + } + params, err := decodeDealsDealIDGetParams(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 rawBody []byte + + var response DealsDealIDGetRes + if m := s.cfg.Middleware; m != nil { + mreq := middleware.Request{ + Context: ctx, + OperationName: DealsDealIDGetOperation, + OperationSummary: "Информация о сделке", + OperationID: "", + Body: nil, + RawBody: rawBody, + Params: middleware.Parameters{ + { + Name: "deal_id", + In: "path", + }: params.DealID, + }, + Raw: r, + } + + type ( + Request = struct{} + Params = DealsDealIDGetParams + Response = DealsDealIDGetRes + ) + response, err = middleware.HookMiddleware[ + Request, + Params, + Response, + ]( + m, + mreq, + unpackDealsDealIDGetParams, + func(ctx context.Context, request Request, params Params) (response Response, err error) { + response, err = s.h.DealsDealIDGet(ctx, params) + return response, err + }, + ) + } else { + response, err = s.h.DealsDealIDGet(ctx, params) + } + if err != nil { + defer recordError("Internal", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + + if err := encodeDealsDealIDGetResponse(response, w, span); err != nil { + defer recordError("EncodeResponse", err) + if !errors.Is(err, ht.ErrInternalServerErrorResponse) { + s.cfg.ErrorHandler(ctx, w, r, err) + } + return + } +} + +// handleDealsGetRequest handles GET /deals operation. +// +// Запрос позволяет получить список сделок, +// отфильтрованный по заданным критериям. Подробнее о +// работе со списками: https://yookassa.ru/developers/using-api/lists. +// +// GET /deals +func (s *Server) handleDealsGetRequest(args [0]string, argsEscaped bool, w http.ResponseWriter, r *http.Request) { + statusWriter := &codeRecorder{ResponseWriter: w} + w = statusWriter + otelAttrs := []attribute.KeyValue{ + semconv.HTTPRequestMethodKey.String("GET"), + semconv.HTTPRouteKey.String("/deals"), + } + // Add attributes from config. + otelAttrs = append(otelAttrs, s.cfg.Attributes...) + + // Start a span for this request. + ctx, span := s.cfg.Tracer.Start(r.Context(), DealsGetOperation, + 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: DealsGetOperation, + ID: "", + } + ) + { + type bitset = [1]uint8 + var satisfied bitset + { + sctx, ok, err := s.securityBasicAuth(ctx, DealsGetOperation, r) + if err != nil { + err = &ogenerrors.SecurityError{ + OperationContext: opErrContext, + Security: "BasicAuth", + Err: err, + } + defer recordError("Security:BasicAuth", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + if ok { + satisfied[0] |= 1 << 0 + ctx = sctx + } + } + { + sctx, ok, err := s.securityOAuth2(ctx, DealsGetOperation, r) + if err != nil { + err = &ogenerrors.SecurityError{ + OperationContext: opErrContext, + Security: "OAuth2", + Err: err, + } + defer recordError("Security:OAuth2", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + if ok { + satisfied[0] |= 1 << 1 + ctx = sctx + } + } + + if ok := func() bool { + nextRequirement: + for _, requirement := range []bitset{ + {0b00000001}, + {0b00000010}, + } { + 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, + } + defer recordError("Security", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + } + params, err := decodeDealsGetParams(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 rawBody []byte + + var response DealsGetRes + if m := s.cfg.Middleware; m != nil { + mreq := middleware.Request{ + Context: ctx, + OperationName: DealsGetOperation, + OperationSummary: "Список сделок", + OperationID: "", + Body: nil, + RawBody: rawBody, + Params: middleware.Parameters{ + { + Name: "created_at.gte", + In: "query", + }: params.CreatedAtGte, + { + Name: "created_at.gt", + In: "query", + }: params.CreatedAtGt, + { + Name: "created_at.lte", + In: "query", + }: params.CreatedAtLte, + { + Name: "created_at.lt", + In: "query", + }: params.CreatedAtLt, + { + Name: "expires_at.gte", + In: "query", + }: params.ExpiresAtGte, + { + Name: "expires_at.gt", + In: "query", + }: params.ExpiresAtGt, + { + Name: "expires_at.lte", + In: "query", + }: params.ExpiresAtLte, + { + Name: "expires_at.lt", + In: "query", + }: params.ExpiresAtLt, + { + Name: "status", + In: "query", + }: params.Status, + { + Name: "full_text_search", + In: "query", + }: params.FullTextSearch, + { + Name: "limit", + In: "query", + }: params.Limit, + { + Name: "cursor", + In: "query", + }: params.Cursor, + }, + Raw: r, + } + + type ( + Request = struct{} + Params = DealsGetParams + Response = DealsGetRes + ) + response, err = middleware.HookMiddleware[ + Request, + Params, + Response, + ]( + m, + mreq, + unpackDealsGetParams, + func(ctx context.Context, request Request, params Params) (response Response, err error) { + response, err = s.h.DealsGet(ctx, params) + return response, err + }, + ) + } else { + response, err = s.h.DealsGet(ctx, params) + } + if err != nil { + defer recordError("Internal", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + + if err := encodeDealsGetResponse(response, w, span); err != nil { + defer recordError("EncodeResponse", err) + if !errors.Is(err, ht.ErrInternalServerErrorResponse) { + s.cfg.ErrorHandler(ctx, w, r, err) + } + return + } +} + +// handleDealsPostRequest handles POST /deals operation. +// +// Запрос позволяет создать сделку, в рамках которой +// необходимо принять оплату от покупателя и +// перечислить ее продавцу. +// +// POST /deals +func (s *Server) handleDealsPostRequest(args [0]string, argsEscaped bool, w http.ResponseWriter, r *http.Request) { + statusWriter := &codeRecorder{ResponseWriter: w} + w = statusWriter + otelAttrs := []attribute.KeyValue{ + semconv.HTTPRequestMethodKey.String("POST"), + semconv.HTTPRouteKey.String("/deals"), + } + // Add attributes from config. + otelAttrs = append(otelAttrs, s.cfg.Attributes...) + + // Start a span for this request. + ctx, span := s.cfg.Tracer.Start(r.Context(), DealsPostOperation, + 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: DealsPostOperation, + ID: "", + } + ) + { + type bitset = [1]uint8 + var satisfied bitset + { + sctx, ok, err := s.securityBasicAuth(ctx, DealsPostOperation, r) + if err != nil { + err = &ogenerrors.SecurityError{ + OperationContext: opErrContext, + Security: "BasicAuth", + Err: err, + } + defer recordError("Security:BasicAuth", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + if ok { + satisfied[0] |= 1 << 0 + ctx = sctx + } + } + { + sctx, ok, err := s.securityOAuth2(ctx, DealsPostOperation, r) + if err != nil { + err = &ogenerrors.SecurityError{ + OperationContext: opErrContext, + Security: "OAuth2", + Err: err, + } + defer recordError("Security:OAuth2", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + if ok { + satisfied[0] |= 1 << 1 + ctx = sctx + } + } + + if ok := func() bool { + nextRequirement: + for _, requirement := range []bitset{ + {0b00000001}, + {0b00000010}, + } { + 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, + } + defer recordError("Security", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + } + params, err := decodeDealsPostParams(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 rawBody []byte + request, rawBody, close, err := s.decodeDealsPostRequest(r) + if err != nil { + err = &ogenerrors.DecodeRequestError{ + OperationContext: opErrContext, + Err: err, + } + defer recordError("DecodeRequest", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + defer func() { + if err := close(); err != nil { + recordError("CloseRequest", err) + } + }() + + var response DealsPostRes + if m := s.cfg.Middleware; m != nil { + mreq := middleware.Request{ + Context: ctx, + OperationName: DealsPostOperation, + OperationSummary: "Создание сделки", + OperationID: "", + Body: request, + RawBody: rawBody, + Params: middleware.Parameters{ + { + Name: "Idempotence-Key", + In: "header", + }: params.IdempotenceKey, + }, + Raw: r, + } + + type ( + Request = *SafeDealRequest + Params = DealsPostParams + Response = DealsPostRes + ) + response, err = middleware.HookMiddleware[ + Request, + Params, + Response, + ]( + m, + mreq, + unpackDealsPostParams, + func(ctx context.Context, request Request, params Params) (response Response, err error) { + response, err = s.h.DealsPost(ctx, request, params) + return response, err + }, + ) + } else { + response, err = s.h.DealsPost(ctx, request, params) + } + if err != nil { + defer recordError("Internal", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + + if err := encodeDealsPostResponse(response, w, span); err != nil { + defer recordError("EncodeResponse", err) + if !errors.Is(err, ht.ErrInternalServerErrorResponse) { + s.cfg.ErrorHandler(ctx, w, r, err) + } + return + } +} + +// handleMeGetRequest handles GET /me operation. +// +// С помощью этого запроса вы можете получить +// информацию о магазине или шлюзе: * Для Сплитования +// платежей: https://yookassa.ru/developers/solutions-for-platforms/split-payments/basics: в +// запросе необходимо передать параметр on_behalf_of с +// идентификатором магазина продавца и ваши данные для +// аутентификации: https://yookassa.ru/developers/using-api/interaction-format#auth +// (идентификатор и секретный ключ вашей платформы). * +// Для партнеров: https://yookassa. +// ru/developers/solutions-for-platforms/partners-api/basics: в запросе необходимо +// передать OAuth-токен магазина. * Для выплат: https://yookassa. +// ru/developers/payouts/overview: в запросе необходимо передать ваши +// данные для аутентификации: https://yookassa. +// ru/developers/using-api/interaction-format#auth (идентификатор и секретный +// ключ вашего шлюза). +// +// GET /me +func (s *Server) handleMeGetRequest(args [0]string, argsEscaped bool, w http.ResponseWriter, r *http.Request) { + statusWriter := &codeRecorder{ResponseWriter: w} + w = statusWriter + otelAttrs := []attribute.KeyValue{ + semconv.HTTPRequestMethodKey.String("GET"), + semconv.HTTPRouteKey.String("/me"), + } + // Add attributes from config. + otelAttrs = append(otelAttrs, s.cfg.Attributes...) + + // Start a span for this request. + ctx, span := s.cfg.Tracer.Start(r.Context(), MeGetOperation, + 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: MeGetOperation, + ID: "", + } + ) + { + type bitset = [1]uint8 + var satisfied bitset + { + sctx, ok, err := s.securityBasicAuth(ctx, MeGetOperation, r) + if err != nil { + err = &ogenerrors.SecurityError{ + OperationContext: opErrContext, + Security: "BasicAuth", + Err: err, + } + defer recordError("Security:BasicAuth", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + if ok { + satisfied[0] |= 1 << 0 + ctx = sctx + } + } + { + sctx, ok, err := s.securityOAuth2(ctx, MeGetOperation, r) + if err != nil { + err = &ogenerrors.SecurityError{ + OperationContext: opErrContext, + Security: "OAuth2", + Err: err, + } + defer recordError("Security:OAuth2", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + if ok { + satisfied[0] |= 1 << 1 + ctx = sctx + } + } + + if ok := func() bool { + nextRequirement: + for _, requirement := range []bitset{ + {0b00000001}, + {0b00000010}, + } { + 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, + } + defer recordError("Security", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + } + params, err := decodeMeGetParams(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 rawBody []byte + + var response MeGetRes + if m := s.cfg.Middleware; m != nil { + mreq := middleware.Request{ + Context: ctx, + OperationName: MeGetOperation, + OperationSummary: "Информация о настройках магазина или шлюза", + OperationID: "", + Body: nil, + RawBody: rawBody, + Params: middleware.Parameters{ + { + Name: "on_behalf_of", + In: "query", + }: params.OnBehalfOf, + }, + Raw: r, + } + + type ( + Request = struct{} + Params = MeGetParams + Response = MeGetRes + ) + response, err = middleware.HookMiddleware[ + Request, + Params, + Response, + ]( + m, + mreq, + unpackMeGetParams, + func(ctx context.Context, request Request, params Params) (response Response, err error) { + response, err = s.h.MeGet(ctx, params) + return response, err + }, + ) + } else { + response, err = s.h.MeGet(ctx, params) + } + if err != nil { + defer recordError("Internal", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + + if err := encodeMeGetResponse(response, w, span); err != nil { + defer recordError("EncodeResponse", err) + if !errors.Is(err, ht.ErrInternalServerErrorResponse) { + s.cfg.ErrorHandler(ctx, w, r, err) + } + return + } +} + +// handlePaymentMethodsPaymentMethodIDGetRequest handles GET /payment_methods/{payment_method_id} operation. +// +// Используйте этот запрос, чтобы получить информацию о +// текущем состоянии способа оплаты по его уникальному +// идентификатору. +// +// GET /payment_methods/{payment_method_id} +func (s *Server) handlePaymentMethodsPaymentMethodIDGetRequest(args [1]string, argsEscaped bool, w http.ResponseWriter, r *http.Request) { + statusWriter := &codeRecorder{ResponseWriter: w} + w = statusWriter + otelAttrs := []attribute.KeyValue{ + semconv.HTTPRequestMethodKey.String("GET"), + semconv.HTTPRouteKey.String("/payment_methods/{payment_method_id}"), + } + // Add attributes from config. + otelAttrs = append(otelAttrs, s.cfg.Attributes...) + + // Start a span for this request. + ctx, span := s.cfg.Tracer.Start(r.Context(), PaymentMethodsPaymentMethodIDGetOperation, + 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: PaymentMethodsPaymentMethodIDGetOperation, + ID: "", + } + ) + { + type bitset = [1]uint8 + var satisfied bitset + { + sctx, ok, err := s.securityBasicAuth(ctx, PaymentMethodsPaymentMethodIDGetOperation, r) + if err != nil { + err = &ogenerrors.SecurityError{ + OperationContext: opErrContext, + Security: "BasicAuth", + Err: err, + } + defer recordError("Security:BasicAuth", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + if ok { + satisfied[0] |= 1 << 0 + ctx = sctx + } + } + { + sctx, ok, err := s.securityOAuth2(ctx, PaymentMethodsPaymentMethodIDGetOperation, r) + if err != nil { + err = &ogenerrors.SecurityError{ + OperationContext: opErrContext, + Security: "OAuth2", + Err: err, + } + defer recordError("Security:OAuth2", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + if ok { + satisfied[0] |= 1 << 1 + ctx = sctx + } + } + + if ok := func() bool { + nextRequirement: + for _, requirement := range []bitset{ + {0b00000001}, + {0b00000010}, + } { + 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, + } + defer recordError("Security", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + } + params, err := decodePaymentMethodsPaymentMethodIDGetParams(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 rawBody []byte + + var response PaymentMethodsPaymentMethodIDGetRes + if m := s.cfg.Middleware; m != nil { + mreq := middleware.Request{ + Context: ctx, + OperationName: PaymentMethodsPaymentMethodIDGetOperation, + OperationSummary: "Информация о способе оплаты", + OperationID: "", + Body: nil, + RawBody: rawBody, + Params: middleware.Parameters{ + { + Name: "payment_method_id", + In: "path", + }: params.PaymentMethodID, + }, + Raw: r, + } + + type ( + Request = struct{} + Params = PaymentMethodsPaymentMethodIDGetParams + Response = PaymentMethodsPaymentMethodIDGetRes + ) + response, err = middleware.HookMiddleware[ + Request, + Params, + Response, + ]( + m, + mreq, + unpackPaymentMethodsPaymentMethodIDGetParams, + func(ctx context.Context, request Request, params Params) (response Response, err error) { + response, err = s.h.PaymentMethodsPaymentMethodIDGet(ctx, params) + return response, err + }, + ) + } else { + response, err = s.h.PaymentMethodsPaymentMethodIDGet(ctx, params) + } + if err != nil { + defer recordError("Internal", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + + if err := encodePaymentMethodsPaymentMethodIDGetResponse(response, w, span); err != nil { + defer recordError("EncodeResponse", err) + if !errors.Is(err, ht.ErrInternalServerErrorResponse) { + s.cfg.ErrorHandler(ctx, w, r, err) + } + return + } +} + +// handlePaymentMethodsPostRequest handles POST /payment_methods operation. +// +// Используйте этот запрос, чтобы создать в ЮKassa объект +// способа оплаты: https://yookassa.ru/developers/api#payment_method_object. В +// запросе необходимо передать код способа оплаты, +// который вы хотите сохранить, и при необходимости +// дополнительные параметры, связанные с той +// функциональностью, которую вы хотите использовать. +// Идентификатор созданного способа оплаты вы можете +// использовать при проведении автоплатежей: https://yookassa. +// ru/developers/payment-acceptance/scenario-extensions/recurring-payments/create-recurring или +// выплат: https://yookassa.ru/developers/payouts/scenario-extensions/multipurpose-token. +// +// POST /payment_methods +func (s *Server) handlePaymentMethodsPostRequest(args [0]string, argsEscaped bool, w http.ResponseWriter, r *http.Request) { + statusWriter := &codeRecorder{ResponseWriter: w} + w = statusWriter + otelAttrs := []attribute.KeyValue{ + semconv.HTTPRequestMethodKey.String("POST"), + semconv.HTTPRouteKey.String("/payment_methods"), + } + // Add attributes from config. + otelAttrs = append(otelAttrs, s.cfg.Attributes...) + + // Start a span for this request. + ctx, span := s.cfg.Tracer.Start(r.Context(), PaymentMethodsPostOperation, + 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: PaymentMethodsPostOperation, + ID: "", + } + ) + { + type bitset = [1]uint8 + var satisfied bitset + { + sctx, ok, err := s.securityBasicAuth(ctx, PaymentMethodsPostOperation, r) + if err != nil { + err = &ogenerrors.SecurityError{ + OperationContext: opErrContext, + Security: "BasicAuth", + Err: err, + } + defer recordError("Security:BasicAuth", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + if ok { + satisfied[0] |= 1 << 0 + ctx = sctx + } + } + { + sctx, ok, err := s.securityOAuth2(ctx, PaymentMethodsPostOperation, r) + if err != nil { + err = &ogenerrors.SecurityError{ + OperationContext: opErrContext, + Security: "OAuth2", + Err: err, + } + defer recordError("Security:OAuth2", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + if ok { + satisfied[0] |= 1 << 1 + ctx = sctx + } + } + + if ok := func() bool { + nextRequirement: + for _, requirement := range []bitset{ + {0b00000001}, + {0b00000010}, + } { + 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, + } + defer recordError("Security", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + } + params, err := decodePaymentMethodsPostParams(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 rawBody []byte + request, rawBody, close, err := s.decodePaymentMethodsPostRequest(r) + if err != nil { + err = &ogenerrors.DecodeRequestError{ + OperationContext: opErrContext, + Err: err, + } + defer recordError("DecodeRequest", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + defer func() { + if err := close(); err != nil { + recordError("CloseRequest", err) + } + }() + + var response PaymentMethodsPostRes + if m := s.cfg.Middleware; m != nil { + mreq := middleware.Request{ + Context: ctx, + OperationName: PaymentMethodsPostOperation, + OperationSummary: "Создание способа оплаты", + OperationID: "", + Body: request, + RawBody: rawBody, + Params: middleware.Parameters{ + { + Name: "Idempotence-Key", + In: "header", + }: params.IdempotenceKey, + }, + Raw: r, + } + + type ( + Request = PaymentMethodsPostReq + Params = PaymentMethodsPostParams + Response = PaymentMethodsPostRes + ) + response, err = middleware.HookMiddleware[ + Request, + Params, + Response, + ]( + m, + mreq, + unpackPaymentMethodsPostParams, + func(ctx context.Context, request Request, params Params) (response Response, err error) { + response, err = s.h.PaymentMethodsPost(ctx, request, params) + return response, err + }, + ) + } else { + response, err = s.h.PaymentMethodsPost(ctx, request, params) + } + if err != nil { + defer recordError("Internal", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + + if err := encodePaymentMethodsPostResponse(response, w, span); err != nil { + defer recordError("EncodeResponse", err) + if !errors.Is(err, ht.ErrInternalServerErrorResponse) { + s.cfg.ErrorHandler(ctx, w, r, err) + } + return + } +} + +// handlePaymentsGetRequest handles GET /payments operation. +// +// Use this request to get a list of payments. You can download payments created over the last 3 +// years. You can filter the list by specified criteria. More about working with lists: +// https://yookassa.ru/developers/using-api/lists. +// +// GET /payments +func (s *Server) handlePaymentsGetRequest(args [0]string, argsEscaped bool, w http.ResponseWriter, r *http.Request) { + statusWriter := &codeRecorder{ResponseWriter: w} + w = statusWriter + otelAttrs := []attribute.KeyValue{ + semconv.HTTPRequestMethodKey.String("GET"), + semconv.HTTPRouteKey.String("/payments"), + } + // Add attributes from config. + otelAttrs = append(otelAttrs, s.cfg.Attributes...) + + // Start a span for this request. + ctx, span := s.cfg.Tracer.Start(r.Context(), PaymentsGetOperation, + 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: PaymentsGetOperation, + ID: "", + } + ) + { + type bitset = [1]uint8 + var satisfied bitset + { + sctx, ok, err := s.securityBasicAuth(ctx, PaymentsGetOperation, r) + if err != nil { + err = &ogenerrors.SecurityError{ + OperationContext: opErrContext, + Security: "BasicAuth", + Err: err, + } + defer recordError("Security:BasicAuth", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + if ok { + satisfied[0] |= 1 << 0 + ctx = sctx + } + } + { + sctx, ok, err := s.securityOAuth2(ctx, PaymentsGetOperation, r) + if err != nil { + err = &ogenerrors.SecurityError{ + OperationContext: opErrContext, + Security: "OAuth2", + Err: err, + } + defer recordError("Security:OAuth2", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + if ok { + satisfied[0] |= 1 << 1 + ctx = sctx + } + } + + if ok := func() bool { + nextRequirement: + for _, requirement := range []bitset{ + {0b00000001}, + {0b00000010}, + } { + 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, + } + defer recordError("Security", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + } + params, err := decodePaymentsGetParams(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 rawBody []byte + + var response PaymentsGetRes + if m := s.cfg.Middleware; m != nil { + mreq := middleware.Request{ + Context: ctx, + OperationName: PaymentsGetOperation, + OperationSummary: "List payments", + OperationID: "", + Body: nil, + RawBody: rawBody, + Params: middleware.Parameters{ + { + Name: "created_at.gte", + In: "query", + }: params.CreatedAtGte, + { + Name: "created_at.gt", + In: "query", + }: params.CreatedAtGt, + { + Name: "created_at.lte", + In: "query", + }: params.CreatedAtLte, + { + Name: "created_at.lt", + In: "query", + }: params.CreatedAtLt, + { + Name: "captured_at.gte", + In: "query", + }: params.CapturedAtGte, + { + Name: "captured_at.gt", + In: "query", + }: params.CapturedAtGt, + { + Name: "captured_at.lte", + In: "query", + }: params.CapturedAtLte, + { + Name: "captured_at.lt", + In: "query", + }: params.CapturedAtLt, + { + Name: "payment_method", + In: "query", + }: params.PaymentMethod, + { + Name: "status", + In: "query", + }: params.Status, + { + Name: "limit", + In: "query", + }: params.Limit, + { + Name: "cursor", + In: "query", + }: params.Cursor, + }, + Raw: r, + } + + type ( + Request = struct{} + Params = PaymentsGetParams + Response = PaymentsGetRes + ) + response, err = middleware.HookMiddleware[ + Request, + Params, + Response, + ]( + m, + mreq, + unpackPaymentsGetParams, + func(ctx context.Context, request Request, params Params) (response Response, err error) { + response, err = s.h.PaymentsGet(ctx, params) + return response, err + }, + ) + } else { + response, err = s.h.PaymentsGet(ctx, params) + } + if err != nil { + defer recordError("Internal", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + + if err := encodePaymentsGetResponse(response, w, span); err != nil { + defer recordError("EncodeResponse", err) + if !errors.Is(err, ht.ErrInternalServerErrorResponse) { + s.cfg.ErrorHandler(ctx, w, r, err) + } + return + } +} + +// handlePaymentsPaymentIDCancelPostRequest handles POST /payments/{payment_id}/cancel operation. +// +// Cancel payments with the waiting_for_capture status. Payment cancelation means you are not ready +// to dispatch a product or to provide a service to the user. Once you cancel the payment, we will +// start returning the money to the payer’s account. If the payment was made from a bank card, a +// YooMoney wallet, or via SberPay, the money will be refunded instantly. If the payment was made +// using other payment methods, the process can take up to several days. More about capturing and +// canceling payments: https://yookassa. +// ru/developers/payment-acceptance/getting-started/payment-process#capture-and-cancel. +// +// POST /payments/{payment_id}/cancel +func (s *Server) handlePaymentsPaymentIDCancelPostRequest(args [1]string, argsEscaped bool, w http.ResponseWriter, r *http.Request) { + statusWriter := &codeRecorder{ResponseWriter: w} + w = statusWriter + otelAttrs := []attribute.KeyValue{ + semconv.HTTPRequestMethodKey.String("POST"), + semconv.HTTPRouteKey.String("/payments/{payment_id}/cancel"), + } + // Add attributes from config. + otelAttrs = append(otelAttrs, s.cfg.Attributes...) + + // Start a span for this request. + ctx, span := s.cfg.Tracer.Start(r.Context(), PaymentsPaymentIDCancelPostOperation, + 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: PaymentsPaymentIDCancelPostOperation, + ID: "", + } + ) + { + type bitset = [1]uint8 + var satisfied bitset + { + sctx, ok, err := s.securityBasicAuth(ctx, PaymentsPaymentIDCancelPostOperation, r) + if err != nil { + err = &ogenerrors.SecurityError{ + OperationContext: opErrContext, + Security: "BasicAuth", + Err: err, + } + defer recordError("Security:BasicAuth", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + if ok { + satisfied[0] |= 1 << 0 + ctx = sctx + } + } + { + sctx, ok, err := s.securityOAuth2(ctx, PaymentsPaymentIDCancelPostOperation, r) + if err != nil { + err = &ogenerrors.SecurityError{ + OperationContext: opErrContext, + Security: "OAuth2", + Err: err, + } + defer recordError("Security:OAuth2", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + if ok { + satisfied[0] |= 1 << 1 + ctx = sctx + } + } + + if ok := func() bool { + nextRequirement: + for _, requirement := range []bitset{ + {0b00000001}, + {0b00000010}, + } { + 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, + } + defer recordError("Security", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + } + params, err := decodePaymentsPaymentIDCancelPostParams(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 rawBody []byte + + var response PaymentsPaymentIDCancelPostRes + if m := s.cfg.Middleware; m != nil { + mreq := middleware.Request{ + Context: ctx, + OperationName: PaymentsPaymentIDCancelPostOperation, + OperationSummary: "Cancel a payment", + OperationID: "", + Body: nil, + RawBody: rawBody, + Params: middleware.Parameters{ + { + Name: "payment_id", + In: "path", + }: params.PaymentID, + { + Name: "Idempotence-Key", + In: "header", + }: params.IdempotenceKey, + }, + Raw: r, + } + + type ( + Request = struct{} + Params = PaymentsPaymentIDCancelPostParams + Response = PaymentsPaymentIDCancelPostRes + ) + response, err = middleware.HookMiddleware[ + Request, + Params, + Response, + ]( + m, + mreq, + unpackPaymentsPaymentIDCancelPostParams, + func(ctx context.Context, request Request, params Params) (response Response, err error) { + response, err = s.h.PaymentsPaymentIDCancelPost(ctx, params) + return response, err + }, + ) + } else { + response, err = s.h.PaymentsPaymentIDCancelPost(ctx, params) + } + if err != nil { + defer recordError("Internal", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + + if err := encodePaymentsPaymentIDCancelPostResponse(response, w, span); err != nil { + defer recordError("EncodeResponse", err) + if !errors.Is(err, ht.ErrInternalServerErrorResponse) { + s.cfg.ErrorHandler(ctx, w, r, err) + } + return + } +} + +// handlePaymentsPaymentIDCapturePostRequest handles POST /payments/{payment_id}/capture operation. +// +// Confirm you’re ready to accept the payment. Once the payment is captured, the status will change +// to succeeded. After that, you can provide the customer with the product or service. You can only +// capture payments with the waiting_for_capture status, and only for a certain amount of time +// (depending on the payment method). If you do not capture the payment within the allotted time, the +// status will change to canceled, and the money will be returned to the user. More about capturing +// and canceling payments: https://yookassa. +// ru/developers/payment-acceptance/getting-started/payment-process#capture-and-cancel. +// +// POST /payments/{payment_id}/capture +func (s *Server) handlePaymentsPaymentIDCapturePostRequest(args [1]string, argsEscaped bool, w http.ResponseWriter, r *http.Request) { + statusWriter := &codeRecorder{ResponseWriter: w} + w = statusWriter + otelAttrs := []attribute.KeyValue{ + semconv.HTTPRequestMethodKey.String("POST"), + semconv.HTTPRouteKey.String("/payments/{payment_id}/capture"), + } + // Add attributes from config. + otelAttrs = append(otelAttrs, s.cfg.Attributes...) + + // Start a span for this request. + ctx, span := s.cfg.Tracer.Start(r.Context(), PaymentsPaymentIDCapturePostOperation, + 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: PaymentsPaymentIDCapturePostOperation, + ID: "", + } + ) + { + type bitset = [1]uint8 + var satisfied bitset + { + sctx, ok, err := s.securityBasicAuth(ctx, PaymentsPaymentIDCapturePostOperation, r) + if err != nil { + err = &ogenerrors.SecurityError{ + OperationContext: opErrContext, + Security: "BasicAuth", + Err: err, + } + defer recordError("Security:BasicAuth", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + if ok { + satisfied[0] |= 1 << 0 + ctx = sctx + } + } + { + sctx, ok, err := s.securityOAuth2(ctx, PaymentsPaymentIDCapturePostOperation, r) + if err != nil { + err = &ogenerrors.SecurityError{ + OperationContext: opErrContext, + Security: "OAuth2", + Err: err, + } + defer recordError("Security:OAuth2", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + if ok { + satisfied[0] |= 1 << 1 + ctx = sctx + } + } + + if ok := func() bool { + nextRequirement: + for _, requirement := range []bitset{ + {0b00000001}, + {0b00000010}, + } { + 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, + } + defer recordError("Security", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + } + params, err := decodePaymentsPaymentIDCapturePostParams(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 rawBody []byte + request, rawBody, close, err := s.decodePaymentsPaymentIDCapturePostRequest(r) + if err != nil { + err = &ogenerrors.DecodeRequestError{ + OperationContext: opErrContext, + Err: err, + } + defer recordError("DecodeRequest", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + defer func() { + if err := close(); err != nil { + recordError("CloseRequest", err) + } + }() + + var response PaymentsPaymentIDCapturePostRes + if m := s.cfg.Middleware; m != nil { + mreq := middleware.Request{ + Context: ctx, + OperationName: PaymentsPaymentIDCapturePostOperation, + OperationSummary: "Capture a payment", + OperationID: "", + Body: request, + RawBody: rawBody, + Params: middleware.Parameters{ + { + Name: "payment_id", + In: "path", + }: params.PaymentID, + { + Name: "Idempotence-Key", + In: "header", + }: params.IdempotenceKey, + }, + Raw: r, + } + + type ( + Request = *PaymentsPaymentIDCapturePostReq + Params = PaymentsPaymentIDCapturePostParams + Response = PaymentsPaymentIDCapturePostRes + ) + response, err = middleware.HookMiddleware[ + Request, + Params, + Response, + ]( + m, + mreq, + unpackPaymentsPaymentIDCapturePostParams, + func(ctx context.Context, request Request, params Params) (response Response, err error) { + response, err = s.h.PaymentsPaymentIDCapturePost(ctx, request, params) + return response, err + }, + ) + } else { + response, err = s.h.PaymentsPaymentIDCapturePost(ctx, request, params) + } + if err != nil { + defer recordError("Internal", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + + if err := encodePaymentsPaymentIDCapturePostResponse(response, w, span); err != nil { + defer recordError("EncodeResponse", err) + if !errors.Is(err, ht.ErrInternalServerErrorResponse) { + s.cfg.ErrorHandler(ctx, w, r, err) + } + return + } +} + +// handlePaymentsPaymentIDGetRequest handles GET /payments/{payment_id} operation. +// +// This request allows you to get the information about the current payment status by its unique ID. +// +// GET /payments/{payment_id} +func (s *Server) handlePaymentsPaymentIDGetRequest(args [1]string, argsEscaped bool, w http.ResponseWriter, r *http.Request) { + statusWriter := &codeRecorder{ResponseWriter: w} + w = statusWriter + otelAttrs := []attribute.KeyValue{ + semconv.HTTPRequestMethodKey.String("GET"), + semconv.HTTPRouteKey.String("/payments/{payment_id}"), + } + // Add attributes from config. + otelAttrs = append(otelAttrs, s.cfg.Attributes...) + + // Start a span for this request. + ctx, span := s.cfg.Tracer.Start(r.Context(), PaymentsPaymentIDGetOperation, + 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: PaymentsPaymentIDGetOperation, + ID: "", + } + ) + { + type bitset = [1]uint8 + var satisfied bitset + { + sctx, ok, err := s.securityBasicAuth(ctx, PaymentsPaymentIDGetOperation, r) + if err != nil { + err = &ogenerrors.SecurityError{ + OperationContext: opErrContext, + Security: "BasicAuth", + Err: err, + } + defer recordError("Security:BasicAuth", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + if ok { + satisfied[0] |= 1 << 0 + ctx = sctx + } + } + { + sctx, ok, err := s.securityOAuth2(ctx, PaymentsPaymentIDGetOperation, r) + if err != nil { + err = &ogenerrors.SecurityError{ + OperationContext: opErrContext, + Security: "OAuth2", + Err: err, + } + defer recordError("Security:OAuth2", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + if ok { + satisfied[0] |= 1 << 1 + ctx = sctx + } + } + + if ok := func() bool { + nextRequirement: + for _, requirement := range []bitset{ + {0b00000001}, + {0b00000010}, + } { + 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, + } + defer recordError("Security", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + } + params, err := decodePaymentsPaymentIDGetParams(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 rawBody []byte + + var response PaymentsPaymentIDGetRes + if m := s.cfg.Middleware; m != nil { + mreq := middleware.Request{ + Context: ctx, + OperationName: PaymentsPaymentIDGetOperation, + OperationSummary: "Get payment information", + OperationID: "", + Body: nil, + RawBody: rawBody, + Params: middleware.Parameters{ + { + Name: "payment_id", + In: "path", + }: params.PaymentID, + }, + Raw: r, + } + + type ( + Request = struct{} + Params = PaymentsPaymentIDGetParams + Response = PaymentsPaymentIDGetRes + ) + response, err = middleware.HookMiddleware[ + Request, + Params, + Response, + ]( + m, + mreq, + unpackPaymentsPaymentIDGetParams, + func(ctx context.Context, request Request, params Params) (response Response, err error) { + response, err = s.h.PaymentsPaymentIDGet(ctx, params) + return response, err + }, + ) + } else { + response, err = s.h.PaymentsPaymentIDGet(ctx, params) + } + if err != nil { + defer recordError("Internal", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + + if err := encodePaymentsPaymentIDGetResponse(response, w, span); err != nil { + defer recordError("EncodeResponse", err) + if !errors.Is(err, ht.ErrInternalServerErrorResponse) { + s.cfg.ErrorHandler(ctx, w, r, err) + } + return + } +} + +// handlePaymentsPostRequest handles POST /payments operation. +// +// To accept a payment, you need to create a payment object: https://yookassa. +// ru/developers/api#payment_object, Payment. It contains all the necessary payment information +// (amount, currency, and status). Payments have a linear life cycle, going from one status to the +// next sequentially. +// +// POST /payments +func (s *Server) handlePaymentsPostRequest(args [0]string, argsEscaped bool, w http.ResponseWriter, r *http.Request) { + statusWriter := &codeRecorder{ResponseWriter: w} + w = statusWriter + otelAttrs := []attribute.KeyValue{ + semconv.HTTPRequestMethodKey.String("POST"), + semconv.HTTPRouteKey.String("/payments"), + } + // Add attributes from config. + otelAttrs = append(otelAttrs, s.cfg.Attributes...) + + // Start a span for this request. + ctx, span := s.cfg.Tracer.Start(r.Context(), PaymentsPostOperation, + 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: PaymentsPostOperation, + ID: "", + } + ) + { + type bitset = [1]uint8 + var satisfied bitset + { + sctx, ok, err := s.securityBasicAuth(ctx, PaymentsPostOperation, r) + if err != nil { + err = &ogenerrors.SecurityError{ + OperationContext: opErrContext, + Security: "BasicAuth", + Err: err, + } + defer recordError("Security:BasicAuth", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + if ok { + satisfied[0] |= 1 << 0 + ctx = sctx + } + } + { + sctx, ok, err := s.securityOAuth2(ctx, PaymentsPostOperation, r) + if err != nil { + err = &ogenerrors.SecurityError{ + OperationContext: opErrContext, + Security: "OAuth2", + Err: err, + } + defer recordError("Security:OAuth2", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + if ok { + satisfied[0] |= 1 << 1 + ctx = sctx + } + } + + if ok := func() bool { + nextRequirement: + for _, requirement := range []bitset{ + {0b00000001}, + {0b00000010}, + } { + 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, + } + defer recordError("Security", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + } + params, err := decodePaymentsPostParams(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 rawBody []byte + request, rawBody, close, err := s.decodePaymentsPostRequest(r) + if err != nil { + err = &ogenerrors.DecodeRequestError{ + OperationContext: opErrContext, + Err: err, + } + defer recordError("DecodeRequest", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + defer func() { + if err := close(); err != nil { + recordError("CloseRequest", err) + } + }() + + var response PaymentsPostRes + if m := s.cfg.Middleware; m != nil { + mreq := middleware.Request{ + Context: ctx, + OperationName: PaymentsPostOperation, + OperationSummary: "Create a payment", + OperationID: "", + Body: request, + RawBody: rawBody, + Params: middleware.Parameters{ + { + Name: "Idempotence-Key", + In: "header", + }: params.IdempotenceKey, + }, + Raw: r, + } + + type ( + Request = *PaymentsPostReq + Params = PaymentsPostParams + Response = PaymentsPostRes + ) + response, err = middleware.HookMiddleware[ + Request, + Params, + Response, + ]( + m, + mreq, + unpackPaymentsPostParams, + func(ctx context.Context, request Request, params Params) (response Response, err error) { + response, err = s.h.PaymentsPost(ctx, request, params) + return response, err + }, + ) + } else { + response, err = s.h.PaymentsPost(ctx, request, params) + } + if err != nil { + defer recordError("Internal", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + + if err := encodePaymentsPostResponse(response, w, span); err != nil { + defer recordError("EncodeResponse", err) + if !errors.Is(err, ht.ErrInternalServerErrorResponse) { + s.cfg.ErrorHandler(ctx, w, r, err) + } + return + } +} + +// handlePayoutsGetRequest handles GET /payouts operation. +// +// Use this request to get a list of payouts. You can download payments created over the last 3 years. +// +// You can filter the list by specified criteria. Request authentication details: https://yookassa. +// +// ru/developers/using-api/interaction-format#auth depend on which payment solution you are using: +// basic payouts: https://yookassa.ru/developers/payouts/overview or payouts within the Safe Deal: +// https://yookassa.ru/developers/solutions-for-platforms/safe-deal/basics. More about working with +// lists: https://yookassa.ru/developers/using-api/lists. +// +// GET /payouts +func (s *Server) handlePayoutsGetRequest(args [0]string, argsEscaped bool, w http.ResponseWriter, r *http.Request) { + statusWriter := &codeRecorder{ResponseWriter: w} + w = statusWriter + otelAttrs := []attribute.KeyValue{ + semconv.HTTPRequestMethodKey.String("GET"), + semconv.HTTPRouteKey.String("/payouts"), + } + // Add attributes from config. + otelAttrs = append(otelAttrs, s.cfg.Attributes...) + + // Start a span for this request. + ctx, span := s.cfg.Tracer.Start(r.Context(), PayoutsGetOperation, + 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: PayoutsGetOperation, + ID: "", + } + ) + { + type bitset = [1]uint8 + var satisfied bitset + { + sctx, ok, err := s.securityBasicAuth(ctx, PayoutsGetOperation, r) + if err != nil { + err = &ogenerrors.SecurityError{ + OperationContext: opErrContext, + Security: "BasicAuth", + Err: err, + } + defer recordError("Security:BasicAuth", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + if ok { + satisfied[0] |= 1 << 0 + ctx = sctx + } + } + { + sctx, ok, err := s.securityOAuth2(ctx, PayoutsGetOperation, r) + if err != nil { + err = &ogenerrors.SecurityError{ + OperationContext: opErrContext, + Security: "OAuth2", + Err: err, + } + defer recordError("Security:OAuth2", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + if ok { + satisfied[0] |= 1 << 1 + ctx = sctx + } + } + + if ok := func() bool { + nextRequirement: + for _, requirement := range []bitset{ + {0b00000001}, + {0b00000010}, + } { + 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, + } + defer recordError("Security", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + } + params, err := decodePayoutsGetParams(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 rawBody []byte + + var response PayoutsGetRes + if m := s.cfg.Middleware; m != nil { + mreq := middleware.Request{ + Context: ctx, + OperationName: PayoutsGetOperation, + OperationSummary: "List of payouts", + OperationID: "", + Body: nil, + RawBody: rawBody, + Params: middleware.Parameters{ + { + Name: "created_at.gte", + In: "query", + }: params.CreatedAtGte, + { + Name: "created_at.gt", + In: "query", + }: params.CreatedAtGt, + { + Name: "created_at.lte", + In: "query", + }: params.CreatedAtLte, + { + Name: "created_at.lt", + In: "query", + }: params.CreatedAtLt, + { + Name: "payout_destination.type", + In: "query", + }: params.PayoutDestinationType, + { + Name: "status", + In: "query", + }: params.Status, + { + Name: "limit", + In: "query", + }: params.Limit, + { + Name: "cursor", + In: "query", + }: params.Cursor, + }, + Raw: r, + } + + type ( + Request = struct{} + Params = PayoutsGetParams + Response = PayoutsGetRes + ) + response, err = middleware.HookMiddleware[ + Request, + Params, + Response, + ]( + m, + mreq, + unpackPayoutsGetParams, + func(ctx context.Context, request Request, params Params) (response Response, err error) { + response, err = s.h.PayoutsGet(ctx, params) + return response, err + }, + ) + } else { + response, err = s.h.PayoutsGet(ctx, params) + } + if err != nil { + defer recordError("Internal", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + + if err := encodePayoutsGetResponse(response, w, span); err != nil { + defer recordError("EncodeResponse", err) + if !errors.Is(err, ht.ErrInternalServerErrorResponse) { + s.cfg.ErrorHandler(ctx, w, r, err) + } + return + } +} + +// handlePayoutsPayoutIDGetRequest handles GET /payouts/{payout_id} operation. +// +// Используйте этот запрос, чтобы получить информацию о +// текущем состоянии выплаты по ее уникальному +// идентификатору. Данные для аутентификации: https://yookassa. +// ru/developers/using-api/interaction-format#auth запросов зависят от того, +// какое платежное решение вы используете — обычные +// выплаты: https://yookassa.ru/developers/payouts/overview или выплаты в +// рамках Безопасной сделки: https://yookassa. +// ru/developers/solutions-for-platforms/safe-deal/basics. +// +// GET /payouts/{payout_id} +func (s *Server) handlePayoutsPayoutIDGetRequest(args [1]string, argsEscaped bool, w http.ResponseWriter, r *http.Request) { + statusWriter := &codeRecorder{ResponseWriter: w} + w = statusWriter + otelAttrs := []attribute.KeyValue{ + semconv.HTTPRequestMethodKey.String("GET"), + semconv.HTTPRouteKey.String("/payouts/{payout_id}"), + } + // Add attributes from config. + otelAttrs = append(otelAttrs, s.cfg.Attributes...) + + // Start a span for this request. + ctx, span := s.cfg.Tracer.Start(r.Context(), PayoutsPayoutIDGetOperation, + 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: PayoutsPayoutIDGetOperation, + ID: "", + } + ) + { + type bitset = [1]uint8 + var satisfied bitset + { + sctx, ok, err := s.securityBasicAuth(ctx, PayoutsPayoutIDGetOperation, r) + if err != nil { + err = &ogenerrors.SecurityError{ + OperationContext: opErrContext, + Security: "BasicAuth", + Err: err, + } + defer recordError("Security:BasicAuth", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + if ok { + satisfied[0] |= 1 << 0 + ctx = sctx + } + } + { + sctx, ok, err := s.securityOAuth2(ctx, PayoutsPayoutIDGetOperation, r) + if err != nil { + err = &ogenerrors.SecurityError{ + OperationContext: opErrContext, + Security: "OAuth2", + Err: err, + } + defer recordError("Security:OAuth2", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + if ok { + satisfied[0] |= 1 << 1 + ctx = sctx + } + } + + if ok := func() bool { + nextRequirement: + for _, requirement := range []bitset{ + {0b00000001}, + {0b00000010}, + } { + 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, + } + defer recordError("Security", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + } + params, err := decodePayoutsPayoutIDGetParams(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 rawBody []byte + + var response PayoutsPayoutIDGetRes + if m := s.cfg.Middleware; m != nil { + mreq := middleware.Request{ + Context: ctx, + OperationName: PayoutsPayoutIDGetOperation, + OperationSummary: "Информация о выплате", + OperationID: "", + Body: nil, + RawBody: rawBody, + Params: middleware.Parameters{ + { + Name: "payout_id", + In: "path", + }: params.PayoutID, + }, + Raw: r, + } + + type ( + Request = struct{} + Params = PayoutsPayoutIDGetParams + Response = PayoutsPayoutIDGetRes + ) + response, err = middleware.HookMiddleware[ + Request, + Params, + Response, + ]( + m, + mreq, + unpackPayoutsPayoutIDGetParams, + func(ctx context.Context, request Request, params Params) (response Response, err error) { + response, err = s.h.PayoutsPayoutIDGet(ctx, params) + return response, err + }, + ) + } else { + response, err = s.h.PayoutsPayoutIDGet(ctx, params) + } + if err != nil { + defer recordError("Internal", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + + if err := encodePayoutsPayoutIDGetResponse(response, w, span); err != nil { + defer recordError("EncodeResponse", err) + if !errors.Is(err, ht.ErrInternalServerErrorResponse) { + s.cfg.ErrorHandler(ctx, w, r, err) + } + return + } +} + +// handlePayoutsPostRequest handles POST /payouts operation. +// +// Используйте этот запрос, чтобы создать в ЮKassa объект +// выплаты: https://yookassa.ru/developers/api#payout_object. В запросе +// необходимо передать сумму выплаты, данные о способе +// получения выплаты (например, номер кошелька ЮMoney), +// описание выплаты и при необходимости дополнительные +// параметры, связанные с той функциональностью, +// которую вы хотите использовать. Передаваемые +// параметры и данные для аутентификации: https://yookassa. +// ru/developers/using-api/interaction-format#auth запросов зависят от того, +// какое платежное решение вы используете — обычные +// выплаты: https://yookassa.ru/developers/payouts/overview или выплаты в +// рамках Безопасной сделки: https://yookassa. +// ru/developers/solutions-for-platforms/safe-deal/basics. +// +// POST /payouts +func (s *Server) handlePayoutsPostRequest(args [0]string, argsEscaped bool, w http.ResponseWriter, r *http.Request) { + statusWriter := &codeRecorder{ResponseWriter: w} + w = statusWriter + otelAttrs := []attribute.KeyValue{ + semconv.HTTPRequestMethodKey.String("POST"), + semconv.HTTPRouteKey.String("/payouts"), + } + // Add attributes from config. + otelAttrs = append(otelAttrs, s.cfg.Attributes...) + + // Start a span for this request. + ctx, span := s.cfg.Tracer.Start(r.Context(), PayoutsPostOperation, + 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: PayoutsPostOperation, + ID: "", + } + ) + { + type bitset = [1]uint8 + var satisfied bitset + { + sctx, ok, err := s.securityBasicAuth(ctx, PayoutsPostOperation, r) + if err != nil { + err = &ogenerrors.SecurityError{ + OperationContext: opErrContext, + Security: "BasicAuth", + Err: err, + } + defer recordError("Security:BasicAuth", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + if ok { + satisfied[0] |= 1 << 0 + ctx = sctx + } + } + { + sctx, ok, err := s.securityOAuth2(ctx, PayoutsPostOperation, r) + if err != nil { + err = &ogenerrors.SecurityError{ + OperationContext: opErrContext, + Security: "OAuth2", + Err: err, + } + defer recordError("Security:OAuth2", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + if ok { + satisfied[0] |= 1 << 1 + ctx = sctx + } + } + + if ok := func() bool { + nextRequirement: + for _, requirement := range []bitset{ + {0b00000001}, + {0b00000010}, + } { + 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, + } + defer recordError("Security", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + } + params, err := decodePayoutsPostParams(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 rawBody []byte + request, rawBody, close, err := s.decodePayoutsPostRequest(r) + if err != nil { + err = &ogenerrors.DecodeRequestError{ + OperationContext: opErrContext, + Err: err, + } + defer recordError("DecodeRequest", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + defer func() { + if err := close(); err != nil { + recordError("CloseRequest", err) + } + }() + + var response PayoutsPostRes + if m := s.cfg.Middleware; m != nil { + mreq := middleware.Request{ + Context: ctx, + OperationName: PayoutsPostOperation, + OperationSummary: "Создание выплаты", + OperationID: "", + Body: request, + RawBody: rawBody, + Params: middleware.Parameters{ + { + Name: "Idempotence-Key", + In: "header", + }: params.IdempotenceKey, + }, + Raw: r, + } + + type ( + Request = *PayoutRequest + Params = PayoutsPostParams + Response = PayoutsPostRes + ) + response, err = middleware.HookMiddleware[ + Request, + Params, + Response, + ]( + m, + mreq, + unpackPayoutsPostParams, + func(ctx context.Context, request Request, params Params) (response Response, err error) { + response, err = s.h.PayoutsPost(ctx, request, params) + return response, err + }, + ) + } else { + response, err = s.h.PayoutsPost(ctx, request, params) + } + if err != nil { + defer recordError("Internal", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + + if err := encodePayoutsPostResponse(response, w, span); err != nil { + defer recordError("EncodeResponse", err) + if !errors.Is(err, ht.ErrInternalServerErrorResponse) { + s.cfg.ErrorHandler(ctx, w, r, err) + } + return + } +} + +// handlePayoutsSearchGetRequest handles GET /payouts/search operation. +// +// Use this request to search for payouts by the specified criteria. Available only for payouts +// created over the last 3 months. At this time, only search by the metadata parameter is available. +// You can also specify the date and time when the payout was created (the created_at parameter). +// Request authentication details: https://yookassa.ru/developers/using-api/interaction-format#auth +// depend on which payment solution you are using: basic payouts: https://yookassa. +// ru/developers/payouts/overview or payouts within the Safe Deal: https://yookassa. +// ru/developers/solutions-for-platforms/safe-deal/basics. +// +// GET /payouts/search +func (s *Server) handlePayoutsSearchGetRequest(args [0]string, argsEscaped bool, w http.ResponseWriter, r *http.Request) { + statusWriter := &codeRecorder{ResponseWriter: w} + w = statusWriter + otelAttrs := []attribute.KeyValue{ + semconv.HTTPRequestMethodKey.String("GET"), + semconv.HTTPRouteKey.String("/payouts/search"), + } + // Add attributes from config. + otelAttrs = append(otelAttrs, s.cfg.Attributes...) + + // Start a span for this request. + ctx, span := s.cfg.Tracer.Start(r.Context(), PayoutsSearchGetOperation, + 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: PayoutsSearchGetOperation, + ID: "", + } + ) + { + type bitset = [1]uint8 + var satisfied bitset + { + sctx, ok, err := s.securityBasicAuth(ctx, PayoutsSearchGetOperation, r) + if err != nil { + err = &ogenerrors.SecurityError{ + OperationContext: opErrContext, + Security: "BasicAuth", + Err: err, + } + defer recordError("Security:BasicAuth", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + if ok { + satisfied[0] |= 1 << 0 + ctx = sctx + } + } + { + sctx, ok, err := s.securityOAuth2(ctx, PayoutsSearchGetOperation, r) + if err != nil { + err = &ogenerrors.SecurityError{ + OperationContext: opErrContext, + Security: "OAuth2", + Err: err, + } + defer recordError("Security:OAuth2", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + if ok { + satisfied[0] |= 1 << 1 + ctx = sctx + } + } + + if ok := func() bool { + nextRequirement: + for _, requirement := range []bitset{ + {0b00000001}, + {0b00000010}, + } { + 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, + } + defer recordError("Security", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + } + params, err := decodePayoutsSearchGetParams(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 rawBody []byte + + var response PayoutsSearchGetRes + if m := s.cfg.Middleware; m != nil { + mreq := middleware.Request{ + Context: ctx, + OperationName: PayoutsSearchGetOperation, + OperationSummary: "Search for payouts", + OperationID: "", + Body: nil, + RawBody: rawBody, + Params: middleware.Parameters{ + { + Name: "created_at.gte", + In: "query", + }: params.CreatedAtGte, + { + Name: "created_at.gt", + In: "query", + }: params.CreatedAtGt, + { + Name: "created_at.lte", + In: "query", + }: params.CreatedAtLte, + { + Name: "created_at.lt", + In: "query", + }: params.CreatedAtLt, + { + Name: "metadata", + In: "query", + }: params.Metadata, + { + Name: "limit", + In: "query", + }: params.Limit, + { + Name: "cursor", + In: "query", + }: params.Cursor, + }, + Raw: r, + } + + type ( + Request = struct{} + Params = PayoutsSearchGetParams + Response = PayoutsSearchGetRes + ) + response, err = middleware.HookMiddleware[ + Request, + Params, + Response, + ]( + m, + mreq, + unpackPayoutsSearchGetParams, + func(ctx context.Context, request Request, params Params) (response Response, err error) { + response, err = s.h.PayoutsSearchGet(ctx, params) + return response, err + }, + ) + } else { + response, err = s.h.PayoutsSearchGet(ctx, params) + } + if err != nil { + defer recordError("Internal", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + + if err := encodePayoutsSearchGetResponse(response, w, span); err != nil { + defer recordError("EncodeResponse", err) + if !errors.Is(err, ht.ErrInternalServerErrorResponse) { + s.cfg.ErrorHandler(ctx, w, r, err) + } + return + } +} + +// handlePersonalDataPersonalDataIDGetRequest handles GET /personal_data/{personal_data_id} operation. +// +// С помощью этого запроса вы можете получить +// информацию о текущем статусе объекта персональных +// данных по его уникальному идентификатору. +// +// GET /personal_data/{personal_data_id} +func (s *Server) handlePersonalDataPersonalDataIDGetRequest(args [1]string, argsEscaped bool, w http.ResponseWriter, r *http.Request) { + statusWriter := &codeRecorder{ResponseWriter: w} + w = statusWriter + otelAttrs := []attribute.KeyValue{ + semconv.HTTPRequestMethodKey.String("GET"), + semconv.HTTPRouteKey.String("/personal_data/{personal_data_id}"), + } + // Add attributes from config. + otelAttrs = append(otelAttrs, s.cfg.Attributes...) + + // Start a span for this request. + ctx, span := s.cfg.Tracer.Start(r.Context(), PersonalDataPersonalDataIDGetOperation, + 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: PersonalDataPersonalDataIDGetOperation, + ID: "", + } + ) + { + type bitset = [1]uint8 + var satisfied bitset + { + sctx, ok, err := s.securityBasicAuth(ctx, PersonalDataPersonalDataIDGetOperation, r) + if err != nil { + err = &ogenerrors.SecurityError{ + OperationContext: opErrContext, + Security: "BasicAuth", + Err: err, + } + defer recordError("Security:BasicAuth", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + if ok { + satisfied[0] |= 1 << 0 + ctx = sctx + } + } + { + sctx, ok, err := s.securityOAuth2(ctx, PersonalDataPersonalDataIDGetOperation, r) + if err != nil { + err = &ogenerrors.SecurityError{ + OperationContext: opErrContext, + Security: "OAuth2", + Err: err, + } + defer recordError("Security:OAuth2", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + if ok { + satisfied[0] |= 1 << 1 + ctx = sctx + } + } + + if ok := func() bool { + nextRequirement: + for _, requirement := range []bitset{ + {0b00000001}, + {0b00000010}, + } { + 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, + } + defer recordError("Security", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + } + params, err := decodePersonalDataPersonalDataIDGetParams(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 rawBody []byte + + var response PersonalDataPersonalDataIDGetRes + if m := s.cfg.Middleware; m != nil { + mreq := middleware.Request{ + Context: ctx, + OperationName: PersonalDataPersonalDataIDGetOperation, + OperationSummary: "Информация о персональных данных", + OperationID: "", + Body: nil, + RawBody: rawBody, + Params: middleware.Parameters{ + { + Name: "personal_data_id", + In: "path", + }: params.PersonalDataID, + }, + Raw: r, + } + + type ( + Request = struct{} + Params = PersonalDataPersonalDataIDGetParams + Response = PersonalDataPersonalDataIDGetRes + ) + response, err = middleware.HookMiddleware[ + Request, + Params, + Response, + ]( + m, + mreq, + unpackPersonalDataPersonalDataIDGetParams, + func(ctx context.Context, request Request, params Params) (response Response, err error) { + response, err = s.h.PersonalDataPersonalDataIDGet(ctx, params) + return response, err + }, + ) + } else { + response, err = s.h.PersonalDataPersonalDataIDGet(ctx, params) + } + if err != nil { + defer recordError("Internal", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + + if err := encodePersonalDataPersonalDataIDGetResponse(response, w, span); err != nil { + defer recordError("EncodeResponse", err) + if !errors.Is(err, ht.ErrInternalServerErrorResponse) { + s.cfg.ErrorHandler(ctx, w, r, err) + } + return + } +} + +// handlePersonalDataPostRequest handles POST /personal_data operation. +// +// Используйте этот запрос, чтобы создать в ЮKassa объект +// персональных данных: https://yookassa.ru/developers/api#personal_data_object. В +// запросе необходимо указать тип данных (с какой целью +// они будут использоваться) и передать информацию о +// пользователе: фамилию, имя, отчество и другие — в +// зависимости от выбранного типа. Идентификатор +// созданного объекта персональных данных необходимо +// использовать в запросе на создание выплаты: https://yookassa. +// ru/developers/api#create_payout. +// +// POST /personal_data +func (s *Server) handlePersonalDataPostRequest(args [0]string, argsEscaped bool, w http.ResponseWriter, r *http.Request) { + statusWriter := &codeRecorder{ResponseWriter: w} + w = statusWriter + otelAttrs := []attribute.KeyValue{ + semconv.HTTPRequestMethodKey.String("POST"), + semconv.HTTPRouteKey.String("/personal_data"), + } + // Add attributes from config. + otelAttrs = append(otelAttrs, s.cfg.Attributes...) + + // Start a span for this request. + ctx, span := s.cfg.Tracer.Start(r.Context(), PersonalDataPostOperation, + 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: PersonalDataPostOperation, + ID: "", + } + ) + { + type bitset = [1]uint8 + var satisfied bitset + { + sctx, ok, err := s.securityBasicAuth(ctx, PersonalDataPostOperation, r) + if err != nil { + err = &ogenerrors.SecurityError{ + OperationContext: opErrContext, + Security: "BasicAuth", + Err: err, + } + defer recordError("Security:BasicAuth", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + if ok { + satisfied[0] |= 1 << 0 + ctx = sctx + } + } + { + sctx, ok, err := s.securityOAuth2(ctx, PersonalDataPostOperation, r) + if err != nil { + err = &ogenerrors.SecurityError{ + OperationContext: opErrContext, + Security: "OAuth2", + Err: err, + } + defer recordError("Security:OAuth2", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + if ok { + satisfied[0] |= 1 << 1 + ctx = sctx + } + } + + if ok := func() bool { + nextRequirement: + for _, requirement := range []bitset{ + {0b00000001}, + {0b00000010}, + } { + 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, + } + defer recordError("Security", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + } + params, err := decodePersonalDataPostParams(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 rawBody []byte + request, rawBody, close, err := s.decodePersonalDataPostRequest(r) + if err != nil { + err = &ogenerrors.DecodeRequestError{ + OperationContext: opErrContext, + Err: err, + } + defer recordError("DecodeRequest", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + defer func() { + if err := close(); err != nil { + recordError("CloseRequest", err) + } + }() + + var response PersonalDataPostRes + if m := s.cfg.Middleware; m != nil { + mreq := middleware.Request{ + Context: ctx, + OperationName: PersonalDataPostOperation, + OperationSummary: "Создание персональных данных", + OperationID: "", + Body: request, + RawBody: rawBody, + Params: middleware.Parameters{ + { + Name: "Idempotence-Key", + In: "header", + }: params.IdempotenceKey, + }, + Raw: r, + } + + type ( + Request = PersonalDataPostReq + Params = PersonalDataPostParams + Response = PersonalDataPostRes + ) + response, err = middleware.HookMiddleware[ + Request, + Params, + Response, + ]( + m, + mreq, + unpackPersonalDataPostParams, + func(ctx context.Context, request Request, params Params) (response Response, err error) { + response, err = s.h.PersonalDataPost(ctx, request, params) + return response, err + }, + ) + } else { + response, err = s.h.PersonalDataPost(ctx, request, params) + } + if err != nil { + defer recordError("Internal", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + + if err := encodePersonalDataPostResponse(response, w, span); err != nil { + defer recordError("EncodeResponse", err) + if !errors.Is(err, ht.ErrInternalServerErrorResponse) { + s.cfg.ErrorHandler(ctx, w, r, err) + } + return + } +} + +// handleReceiptsGetRequest handles GET /receipts operation. +// +// Запрос позволяет получить список чеков, +// отфильтрованный по заданным критериям. Можно +// запросить чеки по конкретному платежу, чеки по +// конкретному возврату или все чеки магазина. +// Подробнее о работе со списками: https://yookassa. +// ru/developers/using-api/lists. +// +// GET /receipts +func (s *Server) handleReceiptsGetRequest(args [0]string, argsEscaped bool, w http.ResponseWriter, r *http.Request) { + statusWriter := &codeRecorder{ResponseWriter: w} + w = statusWriter + otelAttrs := []attribute.KeyValue{ + semconv.HTTPRequestMethodKey.String("GET"), + semconv.HTTPRouteKey.String("/receipts"), + } + // Add attributes from config. + otelAttrs = append(otelAttrs, s.cfg.Attributes...) + + // Start a span for this request. + ctx, span := s.cfg.Tracer.Start(r.Context(), ReceiptsGetOperation, + 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: ReceiptsGetOperation, + ID: "", + } + ) + { + type bitset = [1]uint8 + var satisfied bitset + { + sctx, ok, err := s.securityBasicAuth(ctx, ReceiptsGetOperation, r) + if err != nil { + err = &ogenerrors.SecurityError{ + OperationContext: opErrContext, + Security: "BasicAuth", + Err: err, + } + defer recordError("Security:BasicAuth", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + if ok { + satisfied[0] |= 1 << 0 + ctx = sctx + } + } + { + sctx, ok, err := s.securityOAuth2(ctx, ReceiptsGetOperation, r) + if err != nil { + err = &ogenerrors.SecurityError{ + OperationContext: opErrContext, + Security: "OAuth2", + Err: err, + } + defer recordError("Security:OAuth2", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + if ok { + satisfied[0] |= 1 << 1 + ctx = sctx + } + } + + if ok := func() bool { + nextRequirement: + for _, requirement := range []bitset{ + {0b00000001}, + {0b00000010}, + } { + 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, + } + defer recordError("Security", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + } + params, err := decodeReceiptsGetParams(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 rawBody []byte + + var response ReceiptsGetRes + if m := s.cfg.Middleware; m != nil { + mreq := middleware.Request{ + Context: ctx, + OperationName: ReceiptsGetOperation, + OperationSummary: "Список чеков", + OperationID: "", + Body: nil, + RawBody: rawBody, + Params: middleware.Parameters{ + { + Name: "created_at.gte", + In: "query", + }: params.CreatedAtGte, + { + Name: "created_at.gt", + In: "query", + }: params.CreatedAtGt, + { + Name: "created_at.lte", + In: "query", + }: params.CreatedAtLte, + { + Name: "created_at.lt", + In: "query", + }: params.CreatedAtLt, + { + Name: "status", + In: "query", + }: params.Status, + { + Name: "payment_id", + In: "query", + }: params.PaymentID, + { + Name: "refund_id", + In: "query", + }: params.RefundID, + { + Name: "limit", + In: "query", + }: params.Limit, + { + Name: "cursor", + In: "query", + }: params.Cursor, + }, + Raw: r, + } + + type ( + Request = struct{} + Params = ReceiptsGetParams + Response = ReceiptsGetRes + ) + response, err = middleware.HookMiddleware[ + Request, + Params, + Response, + ]( + m, + mreq, + unpackReceiptsGetParams, + func(ctx context.Context, request Request, params Params) (response Response, err error) { + response, err = s.h.ReceiptsGet(ctx, params) + return response, err + }, + ) + } else { + response, err = s.h.ReceiptsGet(ctx, params) + } + if err != nil { + defer recordError("Internal", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + + if err := encodeReceiptsGetResponse(response, w, span); err != nil { + defer recordError("EncodeResponse", err) + if !errors.Is(err, ht.ErrInternalServerErrorResponse) { + s.cfg.ErrorHandler(ctx, w, r, err) + } + return + } +} + +// handleReceiptsPostRequest handles POST /receipts operation. +// +// Используйте этот запрос при оплате с соблюдением +// требований 54-ФЗ: https://yookassa. +// ru/developers/payment-acceptance/receipts/54fz/basics, чтобы создать чек +// зачета предоплаты. Если вы работаете по сценарию +// Сначала платеж, потом чек: https://yookassa. +// ru/developers/payment-acceptance/receipts/54fz/other-services/basics#receipt-after-payment, в +// запросе также нужно передавать данные для +// формирования чека прихода и чека возврата прихода. +// +// POST /receipts +func (s *Server) handleReceiptsPostRequest(args [0]string, argsEscaped bool, w http.ResponseWriter, r *http.Request) { + statusWriter := &codeRecorder{ResponseWriter: w} + w = statusWriter + otelAttrs := []attribute.KeyValue{ + semconv.HTTPRequestMethodKey.String("POST"), + semconv.HTTPRouteKey.String("/receipts"), + } + // Add attributes from config. + otelAttrs = append(otelAttrs, s.cfg.Attributes...) + + // Start a span for this request. + ctx, span := s.cfg.Tracer.Start(r.Context(), ReceiptsPostOperation, + 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: ReceiptsPostOperation, + ID: "", + } + ) + { + type bitset = [1]uint8 + var satisfied bitset + { + sctx, ok, err := s.securityBasicAuth(ctx, ReceiptsPostOperation, r) + if err != nil { + err = &ogenerrors.SecurityError{ + OperationContext: opErrContext, + Security: "BasicAuth", + Err: err, + } + defer recordError("Security:BasicAuth", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + if ok { + satisfied[0] |= 1 << 0 + ctx = sctx + } + } + { + sctx, ok, err := s.securityOAuth2(ctx, ReceiptsPostOperation, r) + if err != nil { + err = &ogenerrors.SecurityError{ + OperationContext: opErrContext, + Security: "OAuth2", + Err: err, + } + defer recordError("Security:OAuth2", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + if ok { + satisfied[0] |= 1 << 1 + ctx = sctx + } + } + + if ok := func() bool { + nextRequirement: + for _, requirement := range []bitset{ + {0b00000001}, + {0b00000010}, + } { + 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, + } + defer recordError("Security", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + } + params, err := decodeReceiptsPostParams(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 rawBody []byte + request, rawBody, close, err := s.decodeReceiptsPostRequest(r) + if err != nil { + err = &ogenerrors.DecodeRequestError{ + OperationContext: opErrContext, + Err: err, + } + defer recordError("DecodeRequest", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + defer func() { + if err := close(); err != nil { + recordError("CloseRequest", err) + } + }() + + var response ReceiptsPostRes + if m := s.cfg.Middleware; m != nil { + mreq := middleware.Request{ + Context: ctx, + OperationName: ReceiptsPostOperation, + OperationSummary: "Создание чека", + OperationID: "", + Body: request, + RawBody: rawBody, + Params: middleware.Parameters{ + { + Name: "Idempotence-Key", + In: "header", + }: params.IdempotenceKey, + }, + Raw: r, + } + + type ( + Request = PostReceiptData + Params = ReceiptsPostParams + Response = ReceiptsPostRes + ) + response, err = middleware.HookMiddleware[ + Request, + Params, + Response, + ]( + m, + mreq, + unpackReceiptsPostParams, + func(ctx context.Context, request Request, params Params) (response Response, err error) { + response, err = s.h.ReceiptsPost(ctx, request, params) + return response, err + }, + ) + } else { + response, err = s.h.ReceiptsPost(ctx, request, params) + } + if err != nil { + defer recordError("Internal", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + + if err := encodeReceiptsPostResponse(response, w, span); err != nil { + defer recordError("EncodeResponse", err) + if !errors.Is(err, ht.ErrInternalServerErrorResponse) { + s.cfg.ErrorHandler(ctx, w, r, err) + } + return + } +} + +// handleReceiptsReceiptIDGetRequest handles GET /receipts/{receipt_id} operation. +// +// Запрос позволяет получить информацию о текущем +// состоянии чека по его уникальному идентификатору. +// +// GET /receipts/{receipt_id} +func (s *Server) handleReceiptsReceiptIDGetRequest(args [1]string, argsEscaped bool, w http.ResponseWriter, r *http.Request) { + statusWriter := &codeRecorder{ResponseWriter: w} + w = statusWriter + otelAttrs := []attribute.KeyValue{ + semconv.HTTPRequestMethodKey.String("GET"), + semconv.HTTPRouteKey.String("/receipts/{receipt_id}"), + } + // Add attributes from config. + otelAttrs = append(otelAttrs, s.cfg.Attributes...) + + // Start a span for this request. + ctx, span := s.cfg.Tracer.Start(r.Context(), ReceiptsReceiptIDGetOperation, + 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: ReceiptsReceiptIDGetOperation, + ID: "", + } + ) + { + type bitset = [1]uint8 + var satisfied bitset + { + sctx, ok, err := s.securityBasicAuth(ctx, ReceiptsReceiptIDGetOperation, r) + if err != nil { + err = &ogenerrors.SecurityError{ + OperationContext: opErrContext, + Security: "BasicAuth", + Err: err, + } + defer recordError("Security:BasicAuth", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + if ok { + satisfied[0] |= 1 << 0 + ctx = sctx + } + } + { + sctx, ok, err := s.securityOAuth2(ctx, ReceiptsReceiptIDGetOperation, r) + if err != nil { + err = &ogenerrors.SecurityError{ + OperationContext: opErrContext, + Security: "OAuth2", + Err: err, + } + defer recordError("Security:OAuth2", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + if ok { + satisfied[0] |= 1 << 1 + ctx = sctx + } + } + + if ok := func() bool { + nextRequirement: + for _, requirement := range []bitset{ + {0b00000001}, + {0b00000010}, + } { + 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, + } + defer recordError("Security", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + } + params, err := decodeReceiptsReceiptIDGetParams(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 rawBody []byte + + var response ReceiptsReceiptIDGetRes + if m := s.cfg.Middleware; m != nil { + mreq := middleware.Request{ + Context: ctx, + OperationName: ReceiptsReceiptIDGetOperation, + OperationSummary: "Информация о чеке", + OperationID: "", + Body: nil, + RawBody: rawBody, + Params: middleware.Parameters{ + { + Name: "receipt_id", + In: "path", + }: params.ReceiptID, + }, + Raw: r, + } + + type ( + Request = struct{} + Params = ReceiptsReceiptIDGetParams + Response = ReceiptsReceiptIDGetRes + ) + response, err = middleware.HookMiddleware[ + Request, + Params, + Response, + ]( + m, + mreq, + unpackReceiptsReceiptIDGetParams, + func(ctx context.Context, request Request, params Params) (response Response, err error) { + response, err = s.h.ReceiptsReceiptIDGet(ctx, params) + return response, err + }, + ) + } else { + response, err = s.h.ReceiptsReceiptIDGet(ctx, params) + } + if err != nil { + defer recordError("Internal", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + + if err := encodeReceiptsReceiptIDGetResponse(response, w, span); err != nil { + defer recordError("EncodeResponse", err) + if !errors.Is(err, ht.ErrInternalServerErrorResponse) { + s.cfg.ErrorHandler(ctx, w, r, err) + } + return + } +} + +// handleRefundsGetRequest handles GET /refunds operation. +// +// Use this request to get a list of refunds. You can download refunds created over the last 3 years. +// You can filter the list by specified criteria. More about working with lists: https://yookassa. +// ru/developers/using-api/lists. +// +// GET /refunds +func (s *Server) handleRefundsGetRequest(args [0]string, argsEscaped bool, w http.ResponseWriter, r *http.Request) { + statusWriter := &codeRecorder{ResponseWriter: w} + w = statusWriter + otelAttrs := []attribute.KeyValue{ + semconv.HTTPRequestMethodKey.String("GET"), + semconv.HTTPRouteKey.String("/refunds"), + } + // Add attributes from config. + otelAttrs = append(otelAttrs, s.cfg.Attributes...) + + // Start a span for this request. + ctx, span := s.cfg.Tracer.Start(r.Context(), RefundsGetOperation, + 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: RefundsGetOperation, + ID: "", + } + ) + { + type bitset = [1]uint8 + var satisfied bitset + { + sctx, ok, err := s.securityBasicAuth(ctx, RefundsGetOperation, r) + if err != nil { + err = &ogenerrors.SecurityError{ + OperationContext: opErrContext, + Security: "BasicAuth", + Err: err, + } + defer recordError("Security:BasicAuth", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + if ok { + satisfied[0] |= 1 << 0 + ctx = sctx + } + } + { + sctx, ok, err := s.securityOAuth2(ctx, RefundsGetOperation, r) + if err != nil { + err = &ogenerrors.SecurityError{ + OperationContext: opErrContext, + Security: "OAuth2", + Err: err, + } + defer recordError("Security:OAuth2", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + if ok { + satisfied[0] |= 1 << 1 + ctx = sctx + } + } + + if ok := func() bool { + nextRequirement: + for _, requirement := range []bitset{ + {0b00000001}, + {0b00000010}, + } { + 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, + } + defer recordError("Security", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + } + params, err := decodeRefundsGetParams(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 rawBody []byte + + var response RefundsGetRes + if m := s.cfg.Middleware; m != nil { + mreq := middleware.Request{ + Context: ctx, + OperationName: RefundsGetOperation, + OperationSummary: "Список возвратов", + OperationID: "", + Body: nil, + RawBody: rawBody, + Params: middleware.Parameters{ + { + Name: "created_at.gte", + In: "query", + }: params.CreatedAtGte, + { + Name: "created_at.gt", + In: "query", + }: params.CreatedAtGt, + { + Name: "created_at.lte", + In: "query", + }: params.CreatedAtLte, + { + Name: "created_at.lt", + In: "query", + }: params.CreatedAtLt, + { + Name: "payment_id", + In: "query", + }: params.PaymentID, + { + Name: "status", + In: "query", + }: params.Status, + { + Name: "limit", + In: "query", + }: params.Limit, + { + Name: "cursor", + In: "query", + }: params.Cursor, + }, + Raw: r, + } + + type ( + Request = struct{} + Params = RefundsGetParams + Response = RefundsGetRes + ) + response, err = middleware.HookMiddleware[ + Request, + Params, + Response, + ]( + m, + mreq, + unpackRefundsGetParams, + func(ctx context.Context, request Request, params Params) (response Response, err error) { + response, err = s.h.RefundsGet(ctx, params) + return response, err + }, + ) + } else { + response, err = s.h.RefundsGet(ctx, params) + } + if err != nil { + defer recordError("Internal", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + + if err := encodeRefundsGetResponse(response, w, span); err != nil { + defer recordError("EncodeResponse", err) + if !errors.Is(err, ht.ErrInternalServerErrorResponse) { + s.cfg.ErrorHandler(ctx, w, r, err) + } + return + } +} + +// handleRefundsPostRequest handles POST /refunds operation. +// +// Создает возврат успешного платежа на указанную сумму. +// +// Платеж можно вернуть только в течение трех лет с +// +// момента его создания: https://yookassa.ru/developers/api#create_payment. +// Комиссия ЮKassa за проведение платежа не возвращается. +// +// POST /refunds +func (s *Server) handleRefundsPostRequest(args [0]string, argsEscaped bool, w http.ResponseWriter, r *http.Request) { + statusWriter := &codeRecorder{ResponseWriter: w} + w = statusWriter + otelAttrs := []attribute.KeyValue{ + semconv.HTTPRequestMethodKey.String("POST"), + semconv.HTTPRouteKey.String("/refunds"), + } + // Add attributes from config. + otelAttrs = append(otelAttrs, s.cfg.Attributes...) + + // Start a span for this request. + ctx, span := s.cfg.Tracer.Start(r.Context(), RefundsPostOperation, + 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: RefundsPostOperation, + ID: "", + } + ) + { + type bitset = [1]uint8 + var satisfied bitset + { + sctx, ok, err := s.securityBasicAuth(ctx, RefundsPostOperation, r) + if err != nil { + err = &ogenerrors.SecurityError{ + OperationContext: opErrContext, + Security: "BasicAuth", + Err: err, + } + defer recordError("Security:BasicAuth", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + if ok { + satisfied[0] |= 1 << 0 + ctx = sctx + } + } + { + sctx, ok, err := s.securityOAuth2(ctx, RefundsPostOperation, r) + if err != nil { + err = &ogenerrors.SecurityError{ + OperationContext: opErrContext, + Security: "OAuth2", + Err: err, + } + defer recordError("Security:OAuth2", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + if ok { + satisfied[0] |= 1 << 1 + ctx = sctx + } + } + + if ok := func() bool { + nextRequirement: + for _, requirement := range []bitset{ + {0b00000001}, + {0b00000010}, + } { + 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, + } + defer recordError("Security", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + } + params, err := decodeRefundsPostParams(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 rawBody []byte + request, rawBody, close, err := s.decodeRefundsPostRequest(r) + if err != nil { + err = &ogenerrors.DecodeRequestError{ + OperationContext: opErrContext, + Err: err, + } + defer recordError("DecodeRequest", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + defer func() { + if err := close(); err != nil { + recordError("CloseRequest", err) + } + }() + + var response RefundsPostRes + if m := s.cfg.Middleware; m != nil { + mreq := middleware.Request{ + Context: ctx, + OperationName: RefundsPostOperation, + OperationSummary: "Создание возврата", + OperationID: "", + Body: request, + RawBody: rawBody, + Params: middleware.Parameters{ + { + Name: "Idempotence-Key", + In: "header", + }: params.IdempotenceKey, + }, + Raw: r, + } + + type ( + Request = *RefundsPostReq + Params = RefundsPostParams + Response = RefundsPostRes + ) + response, err = middleware.HookMiddleware[ + Request, + Params, + Response, + ]( + m, + mreq, + unpackRefundsPostParams, + func(ctx context.Context, request Request, params Params) (response Response, err error) { + response, err = s.h.RefundsPost(ctx, request, params) + return response, err + }, + ) + } else { + response, err = s.h.RefundsPost(ctx, request, params) + } + if err != nil { + defer recordError("Internal", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + + if err := encodeRefundsPostResponse(response, w, span); err != nil { + defer recordError("EncodeResponse", err) + if !errors.Is(err, ht.ErrInternalServerErrorResponse) { + s.cfg.ErrorHandler(ctx, w, r, err) + } + return + } +} + +// handleRefundsRefundIDGetRequest handles GET /refunds/{refund_id} operation. +// +// Запрос позволяет получить информацию о текущем +// состоянии возврата по его уникальному +// идентификатору. +// +// GET /refunds/{refund_id} +func (s *Server) handleRefundsRefundIDGetRequest(args [1]string, argsEscaped bool, w http.ResponseWriter, r *http.Request) { + statusWriter := &codeRecorder{ResponseWriter: w} + w = statusWriter + otelAttrs := []attribute.KeyValue{ + semconv.HTTPRequestMethodKey.String("GET"), + semconv.HTTPRouteKey.String("/refunds/{refund_id}"), + } + // Add attributes from config. + otelAttrs = append(otelAttrs, s.cfg.Attributes...) + + // Start a span for this request. + ctx, span := s.cfg.Tracer.Start(r.Context(), RefundsRefundIDGetOperation, + 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: RefundsRefundIDGetOperation, + ID: "", + } + ) + { + type bitset = [1]uint8 + var satisfied bitset + { + sctx, ok, err := s.securityBasicAuth(ctx, RefundsRefundIDGetOperation, r) + if err != nil { + err = &ogenerrors.SecurityError{ + OperationContext: opErrContext, + Security: "BasicAuth", + Err: err, + } + defer recordError("Security:BasicAuth", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + if ok { + satisfied[0] |= 1 << 0 + ctx = sctx + } + } + { + sctx, ok, err := s.securityOAuth2(ctx, RefundsRefundIDGetOperation, r) + if err != nil { + err = &ogenerrors.SecurityError{ + OperationContext: opErrContext, + Security: "OAuth2", + Err: err, + } + defer recordError("Security:OAuth2", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + if ok { + satisfied[0] |= 1 << 1 + ctx = sctx + } + } + + if ok := func() bool { + nextRequirement: + for _, requirement := range []bitset{ + {0b00000001}, + {0b00000010}, + } { + 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, + } + defer recordError("Security", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + } + params, err := decodeRefundsRefundIDGetParams(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 rawBody []byte + + var response RefundsRefundIDGetRes + if m := s.cfg.Middleware; m != nil { + mreq := middleware.Request{ + Context: ctx, + OperationName: RefundsRefundIDGetOperation, + OperationSummary: "Информация о возврате", + OperationID: "", + Body: nil, + RawBody: rawBody, + Params: middleware.Parameters{ + { + Name: "refund_id", + In: "path", + }: params.RefundID, + }, + Raw: r, + } + + type ( + Request = struct{} + Params = RefundsRefundIDGetParams + Response = RefundsRefundIDGetRes + ) + response, err = middleware.HookMiddleware[ + Request, + Params, + Response, + ]( + m, + mreq, + unpackRefundsRefundIDGetParams, + func(ctx context.Context, request Request, params Params) (response Response, err error) { + response, err = s.h.RefundsRefundIDGet(ctx, params) + return response, err + }, + ) + } else { + response, err = s.h.RefundsRefundIDGet(ctx, params) + } + if err != nil { + defer recordError("Internal", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + + if err := encodeRefundsRefundIDGetResponse(response, w, span); err != nil { + defer recordError("EncodeResponse", err) + if !errors.Is(err, ht.ErrInternalServerErrorResponse) { + s.cfg.ErrorHandler(ctx, w, r, err) + } + return + } +} + +// handleSbpBanksGetRequest handles GET /sbp_banks operation. +// +// С помощью этого запроса вы можете получить +// актуальный список всех участников СБП. Список нужно +// вывести получателю выплаты, идентификатор +// выбранного участника СБП необходимо использовать в +// запросе на создание выплаты: https://yookassa. +// ru/developers/api#create_payout. Подробнее о выплатах через СБП: +// https://yookassa.ru/developers/payouts/making-payouts/sbp. +// +// GET /sbp_banks +func (s *Server) handleSbpBanksGetRequest(args [0]string, argsEscaped bool, w http.ResponseWriter, r *http.Request) { + statusWriter := &codeRecorder{ResponseWriter: w} + w = statusWriter + otelAttrs := []attribute.KeyValue{ + semconv.HTTPRequestMethodKey.String("GET"), + semconv.HTTPRouteKey.String("/sbp_banks"), + } + // Add attributes from config. + otelAttrs = append(otelAttrs, s.cfg.Attributes...) + + // Start a span for this request. + ctx, span := s.cfg.Tracer.Start(r.Context(), SbpBanksGetOperation, + 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: SbpBanksGetOperation, + ID: "", + } + ) + { + type bitset = [1]uint8 + var satisfied bitset + { + sctx, ok, err := s.securityBasicAuth(ctx, SbpBanksGetOperation, r) + if err != nil { + err = &ogenerrors.SecurityError{ + OperationContext: opErrContext, + Security: "BasicAuth", + Err: err, + } + defer recordError("Security:BasicAuth", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + if ok { + satisfied[0] |= 1 << 0 + ctx = sctx + } + } + { + sctx, ok, err := s.securityOAuth2(ctx, SbpBanksGetOperation, r) + if err != nil { + err = &ogenerrors.SecurityError{ + OperationContext: opErrContext, + Security: "OAuth2", + Err: err, + } + defer recordError("Security:OAuth2", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + if ok { + satisfied[0] |= 1 << 1 + ctx = sctx + } + } + + if ok := func() bool { + nextRequirement: + for _, requirement := range []bitset{ + {0b00000001}, + {0b00000010}, + } { + 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, + } + defer recordError("Security", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + } + + var rawBody []byte + + var response SbpBanksGetRes + if m := s.cfg.Middleware; m != nil { + mreq := middleware.Request{ + Context: ctx, + OperationName: SbpBanksGetOperation, + OperationSummary: "Список участников СБП", + OperationID: "", + Body: nil, + RawBody: rawBody, + Params: middleware.Parameters{}, + Raw: r, + } + + type ( + Request = struct{} + Params = struct{} + Response = SbpBanksGetRes + ) + response, err = middleware.HookMiddleware[ + Request, + Params, + Response, + ]( + m, + mreq, + nil, + func(ctx context.Context, request Request, params Params) (response Response, err error) { + response, err = s.h.SbpBanksGet(ctx) + return response, err + }, + ) + } else { + response, err = s.h.SbpBanksGet(ctx) + } + if err != nil { + defer recordError("Internal", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + + if err := encodeSbpBanksGetResponse(response, w, span); err != nil { + defer recordError("EncodeResponse", err) + if !errors.Is(err, ht.ErrInternalServerErrorResponse) { + s.cfg.ErrorHandler(ctx, w, r, err) + } + return + } +} + +// handleWebhooksGetRequest handles GET /webhooks operation. +// +// Запрос позволяет узнать, какие webhook есть для +// переданного OAuth-токена. +// +// GET /webhooks +func (s *Server) handleWebhooksGetRequest(args [0]string, argsEscaped bool, w http.ResponseWriter, r *http.Request) { + statusWriter := &codeRecorder{ResponseWriter: w} + w = statusWriter + otelAttrs := []attribute.KeyValue{ + semconv.HTTPRequestMethodKey.String("GET"), + semconv.HTTPRouteKey.String("/webhooks"), + } + // Add attributes from config. + otelAttrs = append(otelAttrs, s.cfg.Attributes...) + + // Start a span for this request. + ctx, span := s.cfg.Tracer.Start(r.Context(), WebhooksGetOperation, + 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: WebhooksGetOperation, + ID: "", + } + ) + { + type bitset = [1]uint8 + var satisfied bitset + { + sctx, ok, err := s.securityBasicAuth(ctx, WebhooksGetOperation, r) + if err != nil { + err = &ogenerrors.SecurityError{ + OperationContext: opErrContext, + Security: "BasicAuth", + Err: err, + } + defer recordError("Security:BasicAuth", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + if ok { + satisfied[0] |= 1 << 0 + ctx = sctx + } + } + { + sctx, ok, err := s.securityOAuth2(ctx, WebhooksGetOperation, r) + if err != nil { + err = &ogenerrors.SecurityError{ + OperationContext: opErrContext, + Security: "OAuth2", + Err: err, + } + defer recordError("Security:OAuth2", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + if ok { + satisfied[0] |= 1 << 1 + ctx = sctx + } + } + + if ok := func() bool { + nextRequirement: + for _, requirement := range []bitset{ + {0b00000001}, + {0b00000010}, + } { + 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, + } + defer recordError("Security", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + } + + var rawBody []byte + + var response WebhooksGetRes + if m := s.cfg.Middleware; m != nil { + mreq := middleware.Request{ + Context: ctx, + OperationName: WebhooksGetOperation, + OperationSummary: "Список созданных webhook", + OperationID: "", + Body: nil, + RawBody: rawBody, + Params: middleware.Parameters{}, + Raw: r, + } + + type ( + Request = struct{} + Params = struct{} + Response = WebhooksGetRes + ) + response, err = middleware.HookMiddleware[ + Request, + Params, + Response, + ]( + m, + mreq, + nil, + func(ctx context.Context, request Request, params Params) (response Response, err error) { + response, err = s.h.WebhooksGet(ctx) + return response, err + }, + ) + } else { + response, err = s.h.WebhooksGet(ctx) + } + if err != nil { + defer recordError("Internal", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + + if err := encodeWebhooksGetResponse(response, w, span); err != nil { + defer recordError("EncodeResponse", err) + if !errors.Is(err, ht.ErrInternalServerErrorResponse) { + s.cfg.ErrorHandler(ctx, w, r, err) + } + return + } +} + +// handleWebhooksPostRequest handles POST /webhooks operation. +// +// Запрос позволяет подписаться на уведомления о +// событиях: https://yookassa.ru/developers/using-api/webhooks#events (например, +// переход платежа в статус succeeded). C помощью webhook можно +// подписаться только на события платежей и возвратов. +// Если вы хотите получать уведомления о нескольких +// событиях, вам нужно для каждого из них создать свой +// webhook. Для каждого OAuth-токена нужно создавать свой +// набор webhook. +// +// POST /webhooks +func (s *Server) handleWebhooksPostRequest(args [0]string, argsEscaped bool, w http.ResponseWriter, r *http.Request) { + statusWriter := &codeRecorder{ResponseWriter: w} + w = statusWriter + otelAttrs := []attribute.KeyValue{ + semconv.HTTPRequestMethodKey.String("POST"), + semconv.HTTPRouteKey.String("/webhooks"), + } + // Add attributes from config. + otelAttrs = append(otelAttrs, s.cfg.Attributes...) + + // Start a span for this request. + ctx, span := s.cfg.Tracer.Start(r.Context(), WebhooksPostOperation, + 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: WebhooksPostOperation, + ID: "", + } + ) + { + type bitset = [1]uint8 + var satisfied bitset + { + sctx, ok, err := s.securityBasicAuth(ctx, WebhooksPostOperation, r) + if err != nil { + err = &ogenerrors.SecurityError{ + OperationContext: opErrContext, + Security: "BasicAuth", + Err: err, + } + defer recordError("Security:BasicAuth", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + if ok { + satisfied[0] |= 1 << 0 + ctx = sctx + } + } + { + sctx, ok, err := s.securityOAuth2(ctx, WebhooksPostOperation, r) + if err != nil { + err = &ogenerrors.SecurityError{ + OperationContext: opErrContext, + Security: "OAuth2", + Err: err, + } + defer recordError("Security:OAuth2", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + if ok { + satisfied[0] |= 1 << 1 + ctx = sctx + } + } + + if ok := func() bool { + nextRequirement: + for _, requirement := range []bitset{ + {0b00000001}, + {0b00000010}, + } { + 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, + } + defer recordError("Security", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + } + params, err := decodeWebhooksPostParams(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 rawBody []byte + request, rawBody, close, err := s.decodeWebhooksPostRequest(r) + if err != nil { + err = &ogenerrors.DecodeRequestError{ + OperationContext: opErrContext, + Err: err, + } + defer recordError("DecodeRequest", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + defer func() { + if err := close(); err != nil { + recordError("CloseRequest", err) + } + }() + + var response WebhooksPostRes + if m := s.cfg.Middleware; m != nil { + mreq := middleware.Request{ + Context: ctx, + OperationName: WebhooksPostOperation, + OperationSummary: "Создание webhook", + OperationID: "", + Body: request, + RawBody: rawBody, + Params: middleware.Parameters{ + { + Name: "Idempotence-Key", + In: "header", + }: params.IdempotenceKey, + }, + Raw: r, + } + + type ( + Request = *WebhooksPostReq + Params = WebhooksPostParams + Response = WebhooksPostRes + ) + response, err = middleware.HookMiddleware[ + Request, + Params, + Response, + ]( + m, + mreq, + unpackWebhooksPostParams, + func(ctx context.Context, request Request, params Params) (response Response, err error) { + response, err = s.h.WebhooksPost(ctx, request, params) + return response, err + }, + ) + } else { + response, err = s.h.WebhooksPost(ctx, request, params) + } + if err != nil { + defer recordError("Internal", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + + if err := encodeWebhooksPostResponse(response, w, span); err != nil { + defer recordError("EncodeResponse", err) + if !errors.Is(err, ht.ErrInternalServerErrorResponse) { + s.cfg.ErrorHandler(ctx, w, r, err) + } + return + } +} + +// handleWebhooksWebhookIDDeleteRequest handles DELETE /webhooks/{webhook_id} operation. +// +// Запрос позволяет отписаться от уведомлений о событии +// для переданного OAuth-токена. Чтобы удалить webhook, вам +// нужно передать в запросе его идентификатор. +// +// DELETE /webhooks/{webhook_id} +func (s *Server) handleWebhooksWebhookIDDeleteRequest(args [1]string, argsEscaped bool, w http.ResponseWriter, r *http.Request) { + statusWriter := &codeRecorder{ResponseWriter: w} + w = statusWriter + otelAttrs := []attribute.KeyValue{ + semconv.HTTPRequestMethodKey.String("DELETE"), + semconv.HTTPRouteKey.String("/webhooks/{webhook_id}"), + } + // Add attributes from config. + otelAttrs = append(otelAttrs, s.cfg.Attributes...) + + // Start a span for this request. + ctx, span := s.cfg.Tracer.Start(r.Context(), WebhooksWebhookIDDeleteOperation, + 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: WebhooksWebhookIDDeleteOperation, + ID: "", + } + ) + { + type bitset = [1]uint8 + var satisfied bitset + { + sctx, ok, err := s.securityBasicAuth(ctx, WebhooksWebhookIDDeleteOperation, r) + if err != nil { + err = &ogenerrors.SecurityError{ + OperationContext: opErrContext, + Security: "BasicAuth", + Err: err, + } + defer recordError("Security:BasicAuth", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + if ok { + satisfied[0] |= 1 << 0 + ctx = sctx + } + } + { + sctx, ok, err := s.securityOAuth2(ctx, WebhooksWebhookIDDeleteOperation, r) + if err != nil { + err = &ogenerrors.SecurityError{ + OperationContext: opErrContext, + Security: "OAuth2", + Err: err, + } + defer recordError("Security:OAuth2", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + if ok { + satisfied[0] |= 1 << 1 + ctx = sctx + } + } + + if ok := func() bool { + nextRequirement: + for _, requirement := range []bitset{ + {0b00000001}, + {0b00000010}, + } { + 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, + } + defer recordError("Security", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + } + params, err := decodeWebhooksWebhookIDDeleteParams(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 rawBody []byte + + var response WebhooksWebhookIDDeleteRes + if m := s.cfg.Middleware; m != nil { + mreq := middleware.Request{ + Context: ctx, + OperationName: WebhooksWebhookIDDeleteOperation, + OperationSummary: "Удаление webhook", + OperationID: "", + Body: nil, + RawBody: rawBody, + Params: middleware.Parameters{ + { + Name: "webhook_id", + In: "path", + }: params.WebhookID, + }, + Raw: r, + } + + type ( + Request = struct{} + Params = WebhooksWebhookIDDeleteParams + Response = WebhooksWebhookIDDeleteRes + ) + response, err = middleware.HookMiddleware[ + Request, + Params, + Response, + ]( + m, + mreq, + unpackWebhooksWebhookIDDeleteParams, + func(ctx context.Context, request Request, params Params) (response Response, err error) { + response, err = s.h.WebhooksWebhookIDDelete(ctx, params) + return response, err + }, + ) + } else { + response, err = s.h.WebhooksWebhookIDDelete(ctx, params) + } + if err != nil { + defer recordError("Internal", err) + s.cfg.ErrorHandler(ctx, w, r, err) + return + } + + if err := encodeWebhooksWebhookIDDeleteResponse(response, w, span); err != nil { + defer recordError("EncodeResponse", err) + if !errors.Is(err, ht.ErrInternalServerErrorResponse) { + s.cfg.ErrorHandler(ctx, w, r, err) + } + return + } +} diff --git a/internal/service/yookassa/gen/oas_interfaces_gen.go b/internal/service/yookassa/gen/oas_interfaces_gen.go new file mode 100644 index 0000000..6cf4c4b --- /dev/null +++ b/internal/service/yookassa/gen/oas_interfaces_gen.go @@ -0,0 +1,110 @@ +// Code generated by ogen, DO NOT EDIT. +package gen + +type DealsDealIDGetRes interface { + dealsDealIDGetRes() +} + +type DealsGetRes interface { + dealsGetRes() +} + +type DealsPostRes interface { + dealsPostRes() +} + +type MeGetRes interface { + meGetRes() +} + +type PaymentMethodsPaymentMethodIDGetRes interface { + paymentMethodsPaymentMethodIDGetRes() +} + +type PaymentMethodsPostRes interface { + paymentMethodsPostRes() +} + +type PaymentsGetRes interface { + paymentsGetRes() +} + +type PaymentsPaymentIDCancelPostRes interface { + paymentsPaymentIDCancelPostRes() +} + +type PaymentsPaymentIDCapturePostRes interface { + paymentsPaymentIDCapturePostRes() +} + +type PaymentsPaymentIDGetRes interface { + paymentsPaymentIDGetRes() +} + +type PaymentsPostRes interface { + paymentsPostRes() +} + +type PayoutsGetRes interface { + payoutsGetRes() +} + +type PayoutsPayoutIDGetRes interface { + payoutsPayoutIDGetRes() +} + +type PayoutsPostRes interface { + payoutsPostRes() +} + +type PayoutsSearchGetRes interface { + payoutsSearchGetRes() +} + +type PersonalDataPersonalDataIDGetRes interface { + personalDataPersonalDataIDGetRes() +} + +type PersonalDataPostRes interface { + personalDataPostRes() +} + +type ReceiptsGetRes interface { + receiptsGetRes() +} + +type ReceiptsPostRes interface { + receiptsPostRes() +} + +type ReceiptsReceiptIDGetRes interface { + receiptsReceiptIDGetRes() +} + +type RefundsGetRes interface { + refundsGetRes() +} + +type RefundsPostRes interface { + refundsPostRes() +} + +type RefundsRefundIDGetRes interface { + refundsRefundIDGetRes() +} + +type SbpBanksGetRes interface { + sbpBanksGetRes() +} + +type WebhooksGetRes interface { + webhooksGetRes() +} + +type WebhooksPostRes interface { + webhooksPostRes() +} + +type WebhooksWebhookIDDeleteRes interface { + webhooksWebhookIDDeleteRes() +} diff --git a/internal/service/yookassa/gen/oas_json_gen.go b/internal/service/yookassa/gen/oas_json_gen.go new file mode 100644 index 0000000..d725baa --- /dev/null +++ b/internal/service/yookassa/gen/oas_json_gen.go @@ -0,0 +1,41990 @@ +// Code generated by ogen, DO NOT EDIT. + +package gen + +import ( + "math/bits" + "strconv" + "time" + + "github.com/go-faster/errors" + "github.com/go-faster/jx" + "github.com/ogen-go/ogen/json" + "github.com/ogen-go/ogen/validate" +) + +// Encode encodes AccountId as json. +func (s AccountId) Encode(e *jx.Encoder) { + unwrapped := string(s) + + e.Str(unwrapped) +} + +// Decode decodes AccountId from json. +func (s *AccountId) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode AccountId to nil") + } + var unwrapped string + if err := func() error { + v, err := d.Str() + unwrapped = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "alias") + } + *s = AccountId(unwrapped) + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s AccountId) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *AccountId) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *AirlineLeg) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *AirlineLeg) encodeFields(e *jx.Encoder) { + { + e.FieldStart("departure_airport") + e.Str(s.DepartureAirport) + } + { + e.FieldStart("destination_airport") + e.Str(s.DestinationAirport) + } + { + e.FieldStart("departure_date") + json.EncodeDate(e, s.DepartureDate) + } + { + if s.CarrierCode.Set { + e.FieldStart("carrier_code") + s.CarrierCode.Encode(e) + } + } +} + +var jsonFieldsNameOfAirlineLeg = [4]string{ + 0: "departure_airport", + 1: "destination_airport", + 2: "departure_date", + 3: "carrier_code", +} + +// Decode decodes AirlineLeg from json. +func (s *AirlineLeg) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode AirlineLeg to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "departure_airport": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + v, err := d.Str() + s.DepartureAirport = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"departure_airport\"") + } + case "destination_airport": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + v, err := d.Str() + s.DestinationAirport = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"destination_airport\"") + } + case "departure_date": + requiredBitSet[0] |= 1 << 2 + if err := func() error { + v, err := json.DecodeDate(d) + s.DepartureDate = v + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"departure_date\"") + } + case "carrier_code": + if err := func() error { + s.CarrierCode.Reset() + if err := s.CarrierCode.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"carrier_code\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode AirlineLeg") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000111, + } { + 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(jsonFieldsNameOfAirlineLeg) { + name = jsonFieldsNameOfAirlineLeg[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 *AirlineLeg) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *AirlineLeg) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *AirlinePassenger) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *AirlinePassenger) encodeFields(e *jx.Encoder) { + { + e.FieldStart("first_name") + e.Str(s.FirstName) + } + { + e.FieldStart("last_name") + e.Str(s.LastName) + } +} + +var jsonFieldsNameOfAirlinePassenger = [2]string{ + 0: "first_name", + 1: "last_name", +} + +// Decode decodes AirlinePassenger from json. +func (s *AirlinePassenger) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode AirlinePassenger to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "first_name": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + v, err := d.Str() + s.FirstName = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"first_name\"") + } + case "last_name": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + v, err := d.Str() + s.LastName = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"last_name\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode AirlinePassenger") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000011, + } { + 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(jsonFieldsNameOfAirlinePassenger) { + name = jsonFieldsNameOfAirlinePassenger[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 *AirlinePassenger) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *AirlinePassenger) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *AuthorizationDetails) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *AuthorizationDetails) encodeFields(e *jx.Encoder) { + { + if s.Rrn.Set { + e.FieldStart("rrn") + s.Rrn.Encode(e) + } + } + { + if s.AuthCode.Set { + e.FieldStart("auth_code") + s.AuthCode.Encode(e) + } + } + { + e.FieldStart("three_d_secure") + s.ThreeDSecure.Encode(e) + } +} + +var jsonFieldsNameOfAuthorizationDetails = [3]string{ + 0: "rrn", + 1: "auth_code", + 2: "three_d_secure", +} + +// Decode decodes AuthorizationDetails from json. +func (s *AuthorizationDetails) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode AuthorizationDetails to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "rrn": + if err := func() error { + s.Rrn.Reset() + if err := s.Rrn.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"rrn\"") + } + case "auth_code": + if err := func() error { + s.AuthCode.Reset() + if err := s.AuthCode.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"auth_code\"") + } + case "three_d_secure": + requiredBitSet[0] |= 1 << 2 + if err := func() error { + if err := s.ThreeDSecure.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"three_d_secure\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode AuthorizationDetails") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000100, + } { + 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(jsonFieldsNameOfAuthorizationDetails) { + name = jsonFieldsNameOfAuthorizationDetails[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 *AuthorizationDetails) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *AuthorizationDetails) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *B2bSberbankCalculatedVatData) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *B2bSberbankCalculatedVatData) encodeFields(e *jx.Encoder) { + { + e.FieldStart("type") + s.Type.Encode(e) + } + { + e.FieldStart("rate") + s.Rate.Encode(e) + } + { + e.FieldStart("amount") + s.Amount.Encode(e) + } +} + +var jsonFieldsNameOfB2bSberbankCalculatedVatData = [3]string{ + 0: "type", + 1: "rate", + 2: "amount", +} + +// Decode decodes B2bSberbankCalculatedVatData from json. +func (s *B2bSberbankCalculatedVatData) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode B2bSberbankCalculatedVatData to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "type": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + if err := s.Type.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"type\"") + } + case "rate": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + if err := s.Rate.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"rate\"") + } + case "amount": + requiredBitSet[0] |= 1 << 2 + if err := func() error { + if err := s.Amount.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"amount\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode B2bSberbankCalculatedVatData") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000111, + } { + 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(jsonFieldsNameOfB2bSberbankCalculatedVatData) { + name = jsonFieldsNameOfB2bSberbankCalculatedVatData[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 *B2bSberbankCalculatedVatData) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *B2bSberbankCalculatedVatData) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *B2bSberbankCalculatedVatDataAmount) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *B2bSberbankCalculatedVatDataAmount) encodeFields(e *jx.Encoder) { + { + e.FieldStart("value") + e.Str(s.Value) + } + { + e.FieldStart("currency") + s.Currency.Encode(e) + } +} + +var jsonFieldsNameOfB2bSberbankCalculatedVatDataAmount = [2]string{ + 0: "value", + 1: "currency", +} + +// Decode decodes B2bSberbankCalculatedVatDataAmount from json. +func (s *B2bSberbankCalculatedVatDataAmount) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode B2bSberbankCalculatedVatDataAmount to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "value": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + v, err := d.Str() + s.Value = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"value\"") + } + case "currency": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + if err := s.Currency.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"currency\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode B2bSberbankCalculatedVatDataAmount") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000011, + } { + 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(jsonFieldsNameOfB2bSberbankCalculatedVatDataAmount) { + name = jsonFieldsNameOfB2bSberbankCalculatedVatDataAmount[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 *B2bSberbankCalculatedVatDataAmount) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *B2bSberbankCalculatedVatDataAmount) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes B2bSberbankCalculatedVatDataRate as json. +func (s B2bSberbankCalculatedVatDataRate) Encode(e *jx.Encoder) { + e.Str(string(s)) +} + +// Decode decodes B2bSberbankCalculatedVatDataRate from json. +func (s *B2bSberbankCalculatedVatDataRate) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode B2bSberbankCalculatedVatDataRate to nil") + } + v, err := d.StrBytes() + if err != nil { + return err + } + // Try to use constant string. + switch B2bSberbankCalculatedVatDataRate(v) { + case B2bSberbankCalculatedVatDataRate5: + *s = B2bSberbankCalculatedVatDataRate5 + case B2bSberbankCalculatedVatDataRate7: + *s = B2bSberbankCalculatedVatDataRate7 + case B2bSberbankCalculatedVatDataRate10: + *s = B2bSberbankCalculatedVatDataRate10 + case B2bSberbankCalculatedVatDataRate20: + *s = B2bSberbankCalculatedVatDataRate20 + case B2bSberbankCalculatedVatDataRate22: + *s = B2bSberbankCalculatedVatDataRate22 + default: + *s = B2bSberbankCalculatedVatDataRate(v) + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s B2bSberbankCalculatedVatDataRate) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *B2bSberbankCalculatedVatDataRate) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *B2bSberbankMixedVatData) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *B2bSberbankMixedVatData) encodeFields(e *jx.Encoder) { + { + e.FieldStart("type") + s.Type.Encode(e) + } + { + e.FieldStart("amount") + s.Amount.Encode(e) + } +} + +var jsonFieldsNameOfB2bSberbankMixedVatData = [2]string{ + 0: "type", + 1: "amount", +} + +// Decode decodes B2bSberbankMixedVatData from json. +func (s *B2bSberbankMixedVatData) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode B2bSberbankMixedVatData to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "type": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + if err := s.Type.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"type\"") + } + case "amount": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + if err := s.Amount.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"amount\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode B2bSberbankMixedVatData") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000011, + } { + 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(jsonFieldsNameOfB2bSberbankMixedVatData) { + name = jsonFieldsNameOfB2bSberbankMixedVatData[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 *B2bSberbankMixedVatData) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *B2bSberbankMixedVatData) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *B2bSberbankMixedVatDataAmount) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *B2bSberbankMixedVatDataAmount) encodeFields(e *jx.Encoder) { + { + e.FieldStart("value") + e.Str(s.Value) + } + { + e.FieldStart("currency") + s.Currency.Encode(e) + } +} + +var jsonFieldsNameOfB2bSberbankMixedVatDataAmount = [2]string{ + 0: "value", + 1: "currency", +} + +// Decode decodes B2bSberbankMixedVatDataAmount from json. +func (s *B2bSberbankMixedVatDataAmount) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode B2bSberbankMixedVatDataAmount to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "value": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + v, err := d.Str() + s.Value = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"value\"") + } + case "currency": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + if err := s.Currency.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"currency\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode B2bSberbankMixedVatDataAmount") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000011, + } { + 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(jsonFieldsNameOfB2bSberbankMixedVatDataAmount) { + name = jsonFieldsNameOfB2bSberbankMixedVatDataAmount[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 *B2bSberbankMixedVatDataAmount) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *B2bSberbankMixedVatDataAmount) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *B2bSberbankPayerBankDetails) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *B2bSberbankPayerBankDetails) encodeFields(e *jx.Encoder) { + { + e.FieldStart("full_name") + e.Str(s.FullName) + } + { + e.FieldStart("short_name") + e.Str(s.ShortName) + } + { + e.FieldStart("address") + e.Str(s.Address) + } + { + e.FieldStart("inn") + e.Str(s.Inn) + } + { + e.FieldStart("bank_name") + e.Str(s.BankName) + } + { + e.FieldStart("bank_branch") + e.Str(s.BankBranch) + } + { + e.FieldStart("bank_bik") + e.Str(s.BankBik) + } + { + e.FieldStart("account") + e.Str(s.Account) + } + { + if s.Kpp.Set { + e.FieldStart("kpp") + s.Kpp.Encode(e) + } + } +} + +var jsonFieldsNameOfB2bSberbankPayerBankDetails = [9]string{ + 0: "full_name", + 1: "short_name", + 2: "address", + 3: "inn", + 4: "bank_name", + 5: "bank_branch", + 6: "bank_bik", + 7: "account", + 8: "kpp", +} + +// Decode decodes B2bSberbankPayerBankDetails from json. +func (s *B2bSberbankPayerBankDetails) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode B2bSberbankPayerBankDetails to nil") + } + var requiredBitSet [2]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "full_name": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + v, err := d.Str() + s.FullName = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"full_name\"") + } + case "short_name": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + v, err := d.Str() + s.ShortName = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"short_name\"") + } + case "address": + requiredBitSet[0] |= 1 << 2 + if err := func() error { + v, err := d.Str() + s.Address = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"address\"") + } + case "inn": + requiredBitSet[0] |= 1 << 3 + if err := func() error { + v, err := d.Str() + s.Inn = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"inn\"") + } + case "bank_name": + requiredBitSet[0] |= 1 << 4 + if err := func() error { + v, err := d.Str() + s.BankName = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"bank_name\"") + } + case "bank_branch": + requiredBitSet[0] |= 1 << 5 + if err := func() error { + v, err := d.Str() + s.BankBranch = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"bank_branch\"") + } + case "bank_bik": + requiredBitSet[0] |= 1 << 6 + if err := func() error { + v, err := d.Str() + s.BankBik = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"bank_bik\"") + } + case "account": + requiredBitSet[0] |= 1 << 7 + if err := func() error { + v, err := d.Str() + s.Account = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"account\"") + } + case "kpp": + if err := func() error { + s.Kpp.Reset() + if err := s.Kpp.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"kpp\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode B2bSberbankPayerBankDetails") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [2]uint8{ + 0b11111111, + 0b00000000, + } { + 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(jsonFieldsNameOfB2bSberbankPayerBankDetails) { + name = jsonFieldsNameOfB2bSberbankPayerBankDetails[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 *B2bSberbankPayerBankDetails) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *B2bSberbankPayerBankDetails) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *B2bSberbankUntaxedVatData) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *B2bSberbankUntaxedVatData) encodeFields(e *jx.Encoder) { + { + e.FieldStart("type") + s.Type.Encode(e) + } +} + +var jsonFieldsNameOfB2bSberbankUntaxedVatData = [1]string{ + 0: "type", +} + +// Decode decodes B2bSberbankUntaxedVatData from json. +func (s *B2bSberbankUntaxedVatData) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode B2bSberbankUntaxedVatData to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "type": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + if err := s.Type.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"type\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode B2bSberbankUntaxedVatData") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000001, + } { + 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(jsonFieldsNameOfB2bSberbankUntaxedVatData) { + name = jsonFieldsNameOfB2bSberbankUntaxedVatData[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 *B2bSberbankUntaxedVatData) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *B2bSberbankUntaxedVatData) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes B2bSberbankVatDataType as json. +func (s B2bSberbankVatDataType) Encode(e *jx.Encoder) { + e.Str(string(s)) +} + +// Decode decodes B2bSberbankVatDataType from json. +func (s *B2bSberbankVatDataType) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode B2bSberbankVatDataType to nil") + } + v, err := d.StrBytes() + if err != nil { + return err + } + // Try to use constant string. + switch B2bSberbankVatDataType(v) { + case B2bSberbankVatDataTypeCalculated: + *s = B2bSberbankVatDataTypeCalculated + case B2bSberbankVatDataTypeUntaxed: + *s = B2bSberbankVatDataTypeUntaxed + case B2bSberbankVatDataTypeMixed: + *s = B2bSberbankVatDataTypeMixed + default: + *s = B2bSberbankVatDataType(v) + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s B2bSberbankVatDataType) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *B2bSberbankVatDataType) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *BadRequest) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *BadRequest) encodeFields(e *jx.Encoder) { + { + if s.Type.Set { + e.FieldStart("type") + s.Type.Encode(e) + } + } + { + if s.ID.Set { + e.FieldStart("id") + s.ID.Encode(e) + } + } + { + if s.Description.Set { + e.FieldStart("description") + s.Description.Encode(e) + } + } + { + if s.Parameter.Set { + e.FieldStart("parameter") + s.Parameter.Encode(e) + } + } + { + if s.RetryAfter.Set { + e.FieldStart("retry_after") + s.RetryAfter.Encode(e) + } + } + { + if s.Code.Set { + e.FieldStart("code") + s.Code.Encode(e) + } + } +} + +var jsonFieldsNameOfBadRequest = [6]string{ + 0: "type", + 1: "id", + 2: "description", + 3: "parameter", + 4: "retry_after", + 5: "code", +} + +// Decode decodes BadRequest from json. +func (s *BadRequest) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode BadRequest to nil") + } + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "type": + if err := func() error { + s.Type.Reset() + if err := s.Type.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"type\"") + } + case "id": + if err := func() error { + s.ID.Reset() + if err := s.ID.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"id\"") + } + case "description": + if err := func() error { + s.Description.Reset() + if err := s.Description.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"description\"") + } + case "parameter": + if err := func() error { + s.Parameter.Reset() + if err := s.Parameter.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"parameter\"") + } + case "retry_after": + if err := func() error { + s.RetryAfter.Reset() + if err := s.RetryAfter.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"retry_after\"") + } + case "code": + if err := func() error { + s.Code.Reset() + if err := s.Code.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"code\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode BadRequest") + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s *BadRequest) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *BadRequest) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes BadRequestCode as json. +func (s BadRequestCode) Encode(e *jx.Encoder) { + e.Str(string(s)) +} + +// Decode decodes BadRequestCode from json. +func (s *BadRequestCode) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode BadRequestCode to nil") + } + v, err := d.StrBytes() + if err != nil { + return err + } + // Try to use constant string. + switch BadRequestCode(v) { + case BadRequestCodeInvalidRequest: + *s = BadRequestCodeInvalidRequest + default: + *s = BadRequestCode(v) + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s BadRequestCode) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *BadRequestCode) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes BadRequestType as json. +func (s BadRequestType) Encode(e *jx.Encoder) { + e.Str(string(s)) +} + +// Decode decodes BadRequestType from json. +func (s *BadRequestType) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode BadRequestType to nil") + } + v, err := d.StrBytes() + if err != nil { + return err + } + // Try to use constant string. + switch BadRequestType(v) { + case BadRequestTypeError: + *s = BadRequestTypeError + default: + *s = BadRequestType(v) + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s BadRequestType) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *BadRequestType) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *BankCardData) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *BankCardData) encodeFields(e *jx.Encoder) { + { + if s.First6.Set { + e.FieldStart("first6") + s.First6.Encode(e) + } + } + { + e.FieldStart("last4") + s.Last4.Encode(e) + } + { + e.FieldStart("expiry_year") + s.ExpiryYear.Encode(e) + } + { + e.FieldStart("expiry_month") + s.ExpiryMonth.Encode(e) + } + { + e.FieldStart("card_type") + s.CardType.Encode(e) + } + { + if s.CardProduct.Set { + e.FieldStart("card_product") + s.CardProduct.Encode(e) + } + } + { + if s.IssuerCountry.Set { + e.FieldStart("issuer_country") + s.IssuerCountry.Encode(e) + } + } + { + if s.IssuerName.Set { + e.FieldStart("issuer_name") + s.IssuerName.Encode(e) + } + } + { + if s.Source.Set { + e.FieldStart("source") + s.Source.Encode(e) + } + } +} + +var jsonFieldsNameOfBankCardData = [9]string{ + 0: "first6", + 1: "last4", + 2: "expiry_year", + 3: "expiry_month", + 4: "card_type", + 5: "card_product", + 6: "issuer_country", + 7: "issuer_name", + 8: "source", +} + +// Decode decodes BankCardData from json. +func (s *BankCardData) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode BankCardData to nil") + } + var requiredBitSet [2]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "first6": + if err := func() error { + s.First6.Reset() + if err := s.First6.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"first6\"") + } + case "last4": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + if err := s.Last4.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"last4\"") + } + case "expiry_year": + requiredBitSet[0] |= 1 << 2 + if err := func() error { + if err := s.ExpiryYear.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"expiry_year\"") + } + case "expiry_month": + requiredBitSet[0] |= 1 << 3 + if err := func() error { + if err := s.ExpiryMonth.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"expiry_month\"") + } + case "card_type": + requiredBitSet[0] |= 1 << 4 + if err := func() error { + if err := s.CardType.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"card_type\"") + } + case "card_product": + if err := func() error { + s.CardProduct.Reset() + if err := s.CardProduct.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"card_product\"") + } + case "issuer_country": + if err := func() error { + s.IssuerCountry.Reset() + if err := s.IssuerCountry.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"issuer_country\"") + } + case "issuer_name": + if err := func() error { + s.IssuerName.Reset() + if err := s.IssuerName.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"issuer_name\"") + } + case "source": + if err := func() error { + s.Source.Reset() + if err := s.Source.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"source\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode BankCardData") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [2]uint8{ + 0b00011110, + 0b00000000, + } { + 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(jsonFieldsNameOfBankCardData) { + name = jsonFieldsNameOfBankCardData[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 *BankCardData) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *BankCardData) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes BankCardDataSource as json. +func (s BankCardDataSource) Encode(e *jx.Encoder) { + e.Str(string(s)) +} + +// Decode decodes BankCardDataSource from json. +func (s *BankCardDataSource) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode BankCardDataSource to nil") + } + v, err := d.StrBytes() + if err != nil { + return err + } + // Try to use constant string. + switch BankCardDataSource(v) { + case BankCardDataSourceApplePay: + *s = BankCardDataSourceApplePay + case BankCardDataSourceGooglePay: + *s = BankCardDataSourceGooglePay + case BankCardDataSourceMirPay: + *s = BankCardDataSourceMirPay + default: + *s = BankCardDataSource(v) + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s BankCardDataSource) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *BankCardDataSource) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes BankCardExpiryMonth as json. +func (s BankCardExpiryMonth) Encode(e *jx.Encoder) { + unwrapped := string(s) + + e.Str(unwrapped) +} + +// Decode decodes BankCardExpiryMonth from json. +func (s *BankCardExpiryMonth) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode BankCardExpiryMonth to nil") + } + var unwrapped string + if err := func() error { + v, err := d.Str() + unwrapped = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "alias") + } + *s = BankCardExpiryMonth(unwrapped) + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s BankCardExpiryMonth) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *BankCardExpiryMonth) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes BankCardExpiryYear as json. +func (s BankCardExpiryYear) Encode(e *jx.Encoder) { + unwrapped := string(s) + + e.Str(unwrapped) +} + +// Decode decodes BankCardExpiryYear from json. +func (s *BankCardExpiryYear) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode BankCardExpiryYear to nil") + } + var unwrapped string + if err := func() error { + v, err := d.Str() + unwrapped = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "alias") + } + *s = BankCardExpiryYear(unwrapped) + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s BankCardExpiryYear) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *BankCardExpiryYear) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes BankCardFirst6 as json. +func (s BankCardFirst6) Encode(e *jx.Encoder) { + unwrapped := string(s) + + e.Str(unwrapped) +} + +// Decode decodes BankCardFirst6 from json. +func (s *BankCardFirst6) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode BankCardFirst6 to nil") + } + var unwrapped string + if err := func() error { + v, err := d.Str() + unwrapped = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "alias") + } + *s = BankCardFirst6(unwrapped) + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s BankCardFirst6) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *BankCardFirst6) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes BankCardHolderName as json. +func (s BankCardHolderName) Encode(e *jx.Encoder) { + unwrapped := string(s) + + e.Str(unwrapped) +} + +// Decode decodes BankCardHolderName from json. +func (s *BankCardHolderName) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode BankCardHolderName to nil") + } + var unwrapped string + if err := func() error { + v, err := d.Str() + unwrapped = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "alias") + } + *s = BankCardHolderName(unwrapped) + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s BankCardHolderName) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *BankCardHolderName) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes BankCardIssuerCountry as json. +func (s BankCardIssuerCountry) Encode(e *jx.Encoder) { + unwrapped := string(s) + + e.Str(unwrapped) +} + +// Decode decodes BankCardIssuerCountry from json. +func (s *BankCardIssuerCountry) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode BankCardIssuerCountry to nil") + } + var unwrapped string + if err := func() error { + v, err := d.Str() + unwrapped = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "alias") + } + *s = BankCardIssuerCountry(unwrapped) + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s BankCardIssuerCountry) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *BankCardIssuerCountry) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes BankCardIssuerName as json. +func (s BankCardIssuerName) Encode(e *jx.Encoder) { + unwrapped := string(s) + + e.Str(unwrapped) +} + +// Decode decodes BankCardIssuerName from json. +func (s *BankCardIssuerName) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode BankCardIssuerName to nil") + } + var unwrapped string + if err := func() error { + v, err := d.Str() + unwrapped = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "alias") + } + *s = BankCardIssuerName(unwrapped) + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s BankCardIssuerName) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *BankCardIssuerName) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes BankCardLast4 as json. +func (s BankCardLast4) Encode(e *jx.Encoder) { + unwrapped := string(s) + + e.Str(unwrapped) +} + +// Decode decodes BankCardLast4 from json. +func (s *BankCardLast4) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode BankCardLast4 to nil") + } + var unwrapped string + if err := func() error { + v, err := d.Str() + unwrapped = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "alias") + } + *s = BankCardLast4(unwrapped) + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s BankCardLast4) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *BankCardLast4) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *BankCardProduct) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *BankCardProduct) encodeFields(e *jx.Encoder) { + { + e.FieldStart("code") + e.Str(s.Code) + } + { + if s.Name.Set { + e.FieldStart("name") + s.Name.Encode(e) + } + } +} + +var jsonFieldsNameOfBankCardProduct = [2]string{ + 0: "code", + 1: "name", +} + +// Decode decodes BankCardProduct from json. +func (s *BankCardProduct) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode BankCardProduct to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "code": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + v, err := d.Str() + s.Code = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"code\"") + } + case "name": + if err := func() error { + s.Name.Reset() + if err := s.Name.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"name\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode BankCardProduct") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000001, + } { + 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(jsonFieldsNameOfBankCardProduct) { + name = jsonFieldsNameOfBankCardProduct[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 *BankCardProduct) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *BankCardProduct) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes BankCardType as json. +func (s BankCardType) Encode(e *jx.Encoder) { + e.Str(string(s)) +} + +// Decode decodes BankCardType from json. +func (s *BankCardType) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode BankCardType to nil") + } + v, err := d.StrBytes() + if err != nil { + return err + } + // Try to use constant string. + switch BankCardType(v) { + case BankCardTypeMasterCard: + *s = BankCardTypeMasterCard + case BankCardTypeVisa: + *s = BankCardTypeVisa + case BankCardTypeMir: + *s = BankCardTypeMir + case BankCardTypeUnionPay: + *s = BankCardTypeUnionPay + case BankCardTypeJCB: + *s = BankCardTypeJCB + case BankCardTypeAmericanExpress: + *s = BankCardTypeAmericanExpress + case BankCardTypeDinersClub: + *s = BankCardTypeDinersClub + case BankCardTypeDiscoverCard: + *s = BankCardTypeDiscoverCard + case BankCardTypeInstaPayment: + *s = BankCardTypeInstaPayment + case BankCardTypeInstaPaymentTM: + *s = BankCardTypeInstaPaymentTM + case BankCardTypeLaser: + *s = BankCardTypeLaser + case BankCardTypeDankort: + *s = BankCardTypeDankort + case BankCardTypeSolo: + *s = BankCardTypeSolo + case BankCardTypeSwitch: + *s = BankCardTypeSwitch + case BankCardTypeUnknown: + *s = BankCardTypeUnknown + default: + *s = BankCardType(v) + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s BankCardType) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *BankCardType) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes Capture as json. +func (s Capture) Encode(e *jx.Encoder) { + unwrapped := bool(s) + + e.Bool(unwrapped) +} + +// Decode decodes Capture from json. +func (s *Capture) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode Capture to nil") + } + var unwrapped bool + if err := func() error { + v, err := d.Bool() + unwrapped = bool(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "alias") + } + *s = Capture(unwrapped) + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s Capture) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *Capture) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *CardDataForPayoutDestination) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *CardDataForPayoutDestination) encodeFields(e *jx.Encoder) { + { + e.FieldStart("number") + e.Str(s.Number) + } +} + +var jsonFieldsNameOfCardDataForPayoutDestination = [1]string{ + 0: "number", +} + +// Decode decodes CardDataForPayoutDestination from json. +func (s *CardDataForPayoutDestination) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode CardDataForPayoutDestination to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "number": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + v, err := d.Str() + s.Number = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"number\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode CardDataForPayoutDestination") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000001, + } { + 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(jsonFieldsNameOfCardDataForPayoutDestination) { + name = jsonFieldsNameOfCardDataForPayoutDestination[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 *CardDataForPayoutDestination) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *CardDataForPayoutDestination) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *CardRequestData) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *CardRequestData) encodeFields(e *jx.Encoder) { + { + e.FieldStart("number") + e.Str(s.Number) + } + { + e.FieldStart("expiry_year") + e.Str(s.ExpiryYear) + } + { + e.FieldStart("expiry_month") + e.Str(s.ExpiryMonth) + } + { + if s.Cardholder.Set { + e.FieldStart("cardholder") + s.Cardholder.Encode(e) + } + } +} + +var jsonFieldsNameOfCardRequestData = [4]string{ + 0: "number", + 1: "expiry_year", + 2: "expiry_month", + 3: "cardholder", +} + +// Decode decodes CardRequestData from json. +func (s *CardRequestData) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode CardRequestData to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "number": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + v, err := d.Str() + s.Number = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"number\"") + } + case "expiry_year": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + v, err := d.Str() + s.ExpiryYear = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"expiry_year\"") + } + case "expiry_month": + requiredBitSet[0] |= 1 << 2 + if err := func() error { + v, err := d.Str() + s.ExpiryMonth = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"expiry_month\"") + } + case "cardholder": + if err := func() error { + s.Cardholder.Reset() + if err := s.Cardholder.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"cardholder\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode CardRequestData") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000111, + } { + 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(jsonFieldsNameOfCardRequestData) { + name = jsonFieldsNameOfCardRequestData[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 *CardRequestData) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *CardRequestData) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes ClientIp as json. +func (s ClientIp) Encode(e *jx.Encoder) { + unwrapped := string(s) + + e.Str(unwrapped) +} + +// Decode decodes ClientIp from json. +func (s *ClientIp) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode ClientIp to nil") + } + var unwrapped string + if err := func() error { + v, err := d.Str() + unwrapped = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "alias") + } + *s = ClientIp(unwrapped) + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s ClientIp) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *ClientIp) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *Confirmation) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *Confirmation) encodeFields(e *jx.Encoder) { + { + e.FieldStart("type") + s.Type.Encode(e) + } +} + +var jsonFieldsNameOfConfirmation = [1]string{ + 0: "type", +} + +// Decode decodes Confirmation from json. +func (s *Confirmation) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode Confirmation to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "type": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + if err := s.Type.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"type\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode Confirmation") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000001, + } { + 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(jsonFieldsNameOfConfirmation) { + name = jsonFieldsNameOfConfirmation[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 *Confirmation) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *Confirmation) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *ConfirmationDataEmbedded) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *ConfirmationDataEmbedded) encodeFields(e *jx.Encoder) { + { + e.FieldStart("type") + s.Type.Encode(e) + } + { + if s.Locale.Set { + e.FieldStart("locale") + s.Locale.Encode(e) + } + } +} + +var jsonFieldsNameOfConfirmationDataEmbedded = [2]string{ + 0: "type", + 1: "locale", +} + +// Decode decodes ConfirmationDataEmbedded from json. +func (s *ConfirmationDataEmbedded) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode ConfirmationDataEmbedded to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "type": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + if err := s.Type.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"type\"") + } + case "locale": + if err := func() error { + s.Locale.Reset() + if err := s.Locale.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"locale\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode ConfirmationDataEmbedded") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000001, + } { + 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(jsonFieldsNameOfConfirmationDataEmbedded) { + name = jsonFieldsNameOfConfirmationDataEmbedded[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 *ConfirmationDataEmbedded) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *ConfirmationDataEmbedded) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *ConfirmationDataExternal) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *ConfirmationDataExternal) encodeFields(e *jx.Encoder) { + { + e.FieldStart("type") + s.Type.Encode(e) + } + { + if s.Locale.Set { + e.FieldStart("locale") + s.Locale.Encode(e) + } + } +} + +var jsonFieldsNameOfConfirmationDataExternal = [2]string{ + 0: "type", + 1: "locale", +} + +// Decode decodes ConfirmationDataExternal from json. +func (s *ConfirmationDataExternal) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode ConfirmationDataExternal to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "type": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + if err := s.Type.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"type\"") + } + case "locale": + if err := func() error { + s.Locale.Reset() + if err := s.Locale.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"locale\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode ConfirmationDataExternal") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000001, + } { + 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(jsonFieldsNameOfConfirmationDataExternal) { + name = jsonFieldsNameOfConfirmationDataExternal[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 *ConfirmationDataExternal) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *ConfirmationDataExternal) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *ConfirmationDataMobileApplication) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *ConfirmationDataMobileApplication) encodeFields(e *jx.Encoder) { + { + e.FieldStart("type") + s.Type.Encode(e) + } + { + if s.Locale.Set { + e.FieldStart("locale") + s.Locale.Encode(e) + } + } + { + e.FieldStart("return_url") + e.Str(s.ReturnURL) + } +} + +var jsonFieldsNameOfConfirmationDataMobileApplication = [3]string{ + 0: "type", + 1: "locale", + 2: "return_url", +} + +// Decode decodes ConfirmationDataMobileApplication from json. +func (s *ConfirmationDataMobileApplication) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode ConfirmationDataMobileApplication to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "type": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + if err := s.Type.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"type\"") + } + case "locale": + if err := func() error { + s.Locale.Reset() + if err := s.Locale.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"locale\"") + } + case "return_url": + requiredBitSet[0] |= 1 << 2 + if err := func() error { + v, err := d.Str() + s.ReturnURL = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"return_url\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode ConfirmationDataMobileApplication") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000101, + } { + 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(jsonFieldsNameOfConfirmationDataMobileApplication) { + name = jsonFieldsNameOfConfirmationDataMobileApplication[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 *ConfirmationDataMobileApplication) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *ConfirmationDataMobileApplication) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *ConfirmationDataQr) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *ConfirmationDataQr) encodeFields(e *jx.Encoder) { + { + e.FieldStart("type") + s.Type.Encode(e) + } + { + if s.Locale.Set { + e.FieldStart("locale") + s.Locale.Encode(e) + } + } + { + if s.ReturnURL.Set { + e.FieldStart("return_url") + s.ReturnURL.Encode(e) + } + } +} + +var jsonFieldsNameOfConfirmationDataQr = [3]string{ + 0: "type", + 1: "locale", + 2: "return_url", +} + +// Decode decodes ConfirmationDataQr from json. +func (s *ConfirmationDataQr) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode ConfirmationDataQr to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "type": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + if err := s.Type.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"type\"") + } + case "locale": + if err := func() error { + s.Locale.Reset() + if err := s.Locale.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"locale\"") + } + case "return_url": + if err := func() error { + s.ReturnURL.Reset() + if err := s.ReturnURL.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"return_url\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode ConfirmationDataQr") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000001, + } { + 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(jsonFieldsNameOfConfirmationDataQr) { + name = jsonFieldsNameOfConfirmationDataQr[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 *ConfirmationDataQr) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *ConfirmationDataQr) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *ConfirmationDataRedirect) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *ConfirmationDataRedirect) encodeFields(e *jx.Encoder) { + { + e.FieldStart("type") + s.Type.Encode(e) + } + { + if s.Locale.Set { + e.FieldStart("locale") + s.Locale.Encode(e) + } + } + { + if s.Enforce.Set { + e.FieldStart("enforce") + s.Enforce.Encode(e) + } + } + { + e.FieldStart("return_url") + s.ReturnURL.Encode(e) + } +} + +var jsonFieldsNameOfConfirmationDataRedirect = [4]string{ + 0: "type", + 1: "locale", + 2: "enforce", + 3: "return_url", +} + +// Decode decodes ConfirmationDataRedirect from json. +func (s *ConfirmationDataRedirect) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode ConfirmationDataRedirect to nil") + } + var requiredBitSet [1]uint8 + s.setDefaults() + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "type": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + if err := s.Type.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"type\"") + } + case "locale": + if err := func() error { + s.Locale.Reset() + if err := s.Locale.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"locale\"") + } + case "enforce": + if err := func() error { + s.Enforce.Reset() + if err := s.Enforce.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"enforce\"") + } + case "return_url": + requiredBitSet[0] |= 1 << 3 + if err := func() error { + if err := s.ReturnURL.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"return_url\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode ConfirmationDataRedirect") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00001001, + } { + 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(jsonFieldsNameOfConfirmationDataRedirect) { + name = jsonFieldsNameOfConfirmationDataRedirect[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 *ConfirmationDataRedirect) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *ConfirmationDataRedirect) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes ConfirmationDataType as json. +func (s ConfirmationDataType) Encode(e *jx.Encoder) { + e.Str(string(s)) +} + +// Decode decodes ConfirmationDataType from json. +func (s *ConfirmationDataType) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode ConfirmationDataType to nil") + } + v, err := d.StrBytes() + if err != nil { + return err + } + // Try to use constant string. + switch ConfirmationDataType(v) { + case ConfirmationDataTypeRedirect: + *s = ConfirmationDataTypeRedirect + case ConfirmationDataTypeExternal: + *s = ConfirmationDataTypeExternal + case ConfirmationDataTypeQr: + *s = ConfirmationDataTypeQr + case ConfirmationDataTypeEmbedded: + *s = ConfirmationDataTypeEmbedded + case ConfirmationDataTypeMobileApplication: + *s = ConfirmationDataTypeMobileApplication + default: + *s = ConfirmationDataType(v) + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s ConfirmationDataType) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *ConfirmationDataType) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *ConfirmationEmbedded) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *ConfirmationEmbedded) encodeFields(e *jx.Encoder) { + { + e.FieldStart("type") + s.Type.Encode(e) + } + { + e.FieldStart("confirmation_token") + e.Str(s.ConfirmationToken) + } +} + +var jsonFieldsNameOfConfirmationEmbedded = [2]string{ + 0: "type", + 1: "confirmation_token", +} + +// Decode decodes ConfirmationEmbedded from json. +func (s *ConfirmationEmbedded) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode ConfirmationEmbedded to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "type": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + if err := s.Type.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"type\"") + } + case "confirmation_token": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + v, err := d.Str() + s.ConfirmationToken = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"confirmation_token\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode ConfirmationEmbedded") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000011, + } { + 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(jsonFieldsNameOfConfirmationEmbedded) { + name = jsonFieldsNameOfConfirmationEmbedded[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 *ConfirmationEmbedded) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *ConfirmationEmbedded) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *ConfirmationMobileApplication) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *ConfirmationMobileApplication) encodeFields(e *jx.Encoder) { + { + e.FieldStart("type") + s.Type.Encode(e) + } + { + e.FieldStart("confirmation_url") + e.Str(s.ConfirmationURL) + } +} + +var jsonFieldsNameOfConfirmationMobileApplication = [2]string{ + 0: "type", + 1: "confirmation_url", +} + +// Decode decodes ConfirmationMobileApplication from json. +func (s *ConfirmationMobileApplication) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode ConfirmationMobileApplication to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "type": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + if err := s.Type.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"type\"") + } + case "confirmation_url": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + v, err := d.Str() + s.ConfirmationURL = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"confirmation_url\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode ConfirmationMobileApplication") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000011, + } { + 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(jsonFieldsNameOfConfirmationMobileApplication) { + name = jsonFieldsNameOfConfirmationMobileApplication[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 *ConfirmationMobileApplication) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *ConfirmationMobileApplication) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *ConfirmationQr) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *ConfirmationQr) encodeFields(e *jx.Encoder) { + { + e.FieldStart("type") + s.Type.Encode(e) + } + { + e.FieldStart("confirmation_data") + e.Str(s.ConfirmationData) + } +} + +var jsonFieldsNameOfConfirmationQr = [2]string{ + 0: "type", + 1: "confirmation_data", +} + +// Decode decodes ConfirmationQr from json. +func (s *ConfirmationQr) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode ConfirmationQr to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "type": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + if err := s.Type.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"type\"") + } + case "confirmation_data": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + v, err := d.Str() + s.ConfirmationData = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"confirmation_data\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode ConfirmationQr") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000011, + } { + 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(jsonFieldsNameOfConfirmationQr) { + name = jsonFieldsNameOfConfirmationQr[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 *ConfirmationQr) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *ConfirmationQr) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *ConfirmationRedirect) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *ConfirmationRedirect) encodeFields(e *jx.Encoder) { + { + e.FieldStart("type") + s.Type.Encode(e) + } + { + if s.Enforce.Set { + e.FieldStart("enforce") + s.Enforce.Encode(e) + } + } + { + if s.ReturnURL.Set { + e.FieldStart("return_url") + s.ReturnURL.Encode(e) + } + } + { + e.FieldStart("confirmation_url") + s.ConfirmationURL.Encode(e) + } +} + +var jsonFieldsNameOfConfirmationRedirect = [4]string{ + 0: "type", + 1: "enforce", + 2: "return_url", + 3: "confirmation_url", +} + +// Decode decodes ConfirmationRedirect from json. +func (s *ConfirmationRedirect) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode ConfirmationRedirect to nil") + } + var requiredBitSet [1]uint8 + s.setDefaults() + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "type": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + if err := s.Type.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"type\"") + } + case "enforce": + if err := func() error { + s.Enforce.Reset() + if err := s.Enforce.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"enforce\"") + } + case "return_url": + if err := func() error { + s.ReturnURL.Reset() + if err := s.ReturnURL.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"return_url\"") + } + case "confirmation_url": + requiredBitSet[0] |= 1 << 3 + if err := func() error { + if err := s.ConfirmationURL.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"confirmation_url\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode ConfirmationRedirect") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00001001, + } { + 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(jsonFieldsNameOfConfirmationRedirect) { + name = jsonFieldsNameOfConfirmationRedirect[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 *ConfirmationRedirect) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *ConfirmationRedirect) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes ConfirmationType as json. +func (s ConfirmationType) Encode(e *jx.Encoder) { + e.Str(string(s)) +} + +// Decode decodes ConfirmationType from json. +func (s *ConfirmationType) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode ConfirmationType to nil") + } + v, err := d.StrBytes() + if err != nil { + return err + } + // Try to use constant string. + switch ConfirmationType(v) { + case ConfirmationTypeRedirect: + *s = ConfirmationTypeRedirect + case ConfirmationTypeExternal: + *s = ConfirmationTypeExternal + case ConfirmationTypeQr: + *s = ConfirmationTypeQr + case ConfirmationTypeEmbedded: + *s = ConfirmationTypeEmbedded + case ConfirmationTypeMobileApplication: + *s = ConfirmationTypeMobileApplication + default: + *s = ConfirmationType(v) + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s ConfirmationType) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *ConfirmationType) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes ConfirmationUrl as json. +func (s ConfirmationUrl) Encode(e *jx.Encoder) { + unwrapped := string(s) + + e.Str(unwrapped) +} + +// Decode decodes ConfirmationUrl from json. +func (s *ConfirmationUrl) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode ConfirmationUrl to nil") + } + var unwrapped string + if err := func() error { + v, err := d.Str() + unwrapped = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "alias") + } + *s = ConfirmationUrl(unwrapped) + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s ConfirmationUrl) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *ConfirmationUrl) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes CurrencyCode as json. +func (s CurrencyCode) Encode(e *jx.Encoder) { + e.Str(string(s)) +} + +// Decode decodes CurrencyCode from json. +func (s *CurrencyCode) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode CurrencyCode to nil") + } + v, err := d.StrBytes() + if err != nil { + return err + } + // Try to use constant string. + switch CurrencyCode(v) { + case CurrencyCodeRUB: + *s = CurrencyCodeRUB + case CurrencyCodeEUR: + *s = CurrencyCodeEUR + case CurrencyCodeUSD: + *s = CurrencyCodeUSD + case CurrencyCodeKZT: + *s = CurrencyCodeKZT + case CurrencyCodeBYN: + *s = CurrencyCodeBYN + case CurrencyCodeUAH: + *s = CurrencyCodeUAH + case CurrencyCodeUZS: + *s = CurrencyCodeUZS + case CurrencyCodeTRY: + *s = CurrencyCodeTRY + case CurrencyCodeINR: + *s = CurrencyCodeINR + case CurrencyCodeMDL: + *s = CurrencyCodeMDL + case CurrencyCodeAZN: + *s = CurrencyCodeAZN + case CurrencyCodeAMD: + *s = CurrencyCodeAMD + default: + *s = CurrencyCode(v) + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s CurrencyCode) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *CurrencyCode) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes DealId as json. +func (s DealId) Encode(e *jx.Encoder) { + unwrapped := string(s) + + e.Str(unwrapped) +} + +// Decode decodes DealId from json. +func (s *DealId) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode DealId to nil") + } + var unwrapped string + if err := func() error { + v, err := d.Str() + unwrapped = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "alias") + } + *s = DealId(unwrapped) + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s DealId) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *DealId) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes DealStatus as json. +func (s DealStatus) Encode(e *jx.Encoder) { + e.Str(string(s)) +} + +// Decode decodes DealStatus from json. +func (s *DealStatus) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode DealStatus to nil") + } + v, err := d.StrBytes() + if err != nil { + return err + } + // Try to use constant string. + switch DealStatus(v) { + case DealStatusOpened: + *s = DealStatusOpened + case DealStatusClosed: + *s = DealStatusClosed + default: + *s = DealStatus(v) + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s DealStatus) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *DealStatus) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes DealType as json. +func (s DealType) Encode(e *jx.Encoder) { + e.Str(string(s)) +} + +// Decode decodes DealType from json. +func (s *DealType) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode DealType to nil") + } + v, err := d.StrBytes() + if err != nil { + return err + } + // Try to use constant string. + switch DealType(v) { + case DealTypeSafeDeal: + *s = DealTypeSafeDeal + default: + *s = DealType(v) + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s DealType) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *DealType) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes DealsDealIDGetInternalServerError as json. +func (s *DealsDealIDGetInternalServerError) Encode(e *jx.Encoder) { + unwrapped := (*TooManyRequests)(s) + + unwrapped.Encode(e) +} + +// Decode decodes DealsDealIDGetInternalServerError from json. +func (s *DealsDealIDGetInternalServerError) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode DealsDealIDGetInternalServerError to nil") + } + var unwrapped TooManyRequests + if err := func() error { + if err := unwrapped.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "alias") + } + *s = DealsDealIDGetInternalServerError(unwrapped) + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s *DealsDealIDGetInternalServerError) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *DealsDealIDGetInternalServerError) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes DealsDealIDGetTooManyRequests as json. +func (s *DealsDealIDGetTooManyRequests) Encode(e *jx.Encoder) { + unwrapped := (*TooManyRequests)(s) + + unwrapped.Encode(e) +} + +// Decode decodes DealsDealIDGetTooManyRequests from json. +func (s *DealsDealIDGetTooManyRequests) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode DealsDealIDGetTooManyRequests to nil") + } + var unwrapped TooManyRequests + if err := func() error { + if err := unwrapped.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "alias") + } + *s = DealsDealIDGetTooManyRequests(unwrapped) + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s *DealsDealIDGetTooManyRequests) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *DealsDealIDGetTooManyRequests) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes DealsGetInternalServerError as json. +func (s *DealsGetInternalServerError) Encode(e *jx.Encoder) { + unwrapped := (*TooManyRequests)(s) + + unwrapped.Encode(e) +} + +// Decode decodes DealsGetInternalServerError from json. +func (s *DealsGetInternalServerError) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode DealsGetInternalServerError to nil") + } + var unwrapped TooManyRequests + if err := func() error { + if err := unwrapped.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "alias") + } + *s = DealsGetInternalServerError(unwrapped) + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s *DealsGetInternalServerError) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *DealsGetInternalServerError) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *DealsGetOK) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *DealsGetOK) encodeFields(e *jx.Encoder) { + { + e.FieldStart("type") + s.Type.Encode(e) + } + { + e.FieldStart("items") + e.ArrStart() + for _, elem := range s.Items { + elem.Encode(e) + } + e.ArrEnd() + } + { + if s.NextCursor.Set { + e.FieldStart("next_cursor") + s.NextCursor.Encode(e) + } + } +} + +var jsonFieldsNameOfDealsGetOK = [3]string{ + 0: "type", + 1: "items", + 2: "next_cursor", +} + +// Decode decodes DealsGetOK from json. +func (s *DealsGetOK) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode DealsGetOK to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "type": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + if err := s.Type.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"type\"") + } + case "items": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + s.Items = make([]SafeDeal, 0) + if err := d.Arr(func(d *jx.Decoder) error { + var elem SafeDeal + if err := elem.Decode(d); err != nil { + return err + } + s.Items = append(s.Items, elem) + return nil + }); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"items\"") + } + case "next_cursor": + if err := func() error { + s.NextCursor.Reset() + if err := s.NextCursor.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"next_cursor\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode DealsGetOK") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000011, + } { + 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(jsonFieldsNameOfDealsGetOK) { + name = jsonFieldsNameOfDealsGetOK[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 *DealsGetOK) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *DealsGetOK) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes DealsGetOKType as json. +func (s DealsGetOKType) Encode(e *jx.Encoder) { + e.Str(string(s)) +} + +// Decode decodes DealsGetOKType from json. +func (s *DealsGetOKType) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode DealsGetOKType to nil") + } + v, err := d.StrBytes() + if err != nil { + return err + } + // Try to use constant string. + switch DealsGetOKType(v) { + case DealsGetOKTypeList: + *s = DealsGetOKTypeList + default: + *s = DealsGetOKType(v) + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s DealsGetOKType) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *DealsGetOKType) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes DealsGetTooManyRequests as json. +func (s *DealsGetTooManyRequests) Encode(e *jx.Encoder) { + unwrapped := (*TooManyRequests)(s) + + unwrapped.Encode(e) +} + +// Decode decodes DealsGetTooManyRequests from json. +func (s *DealsGetTooManyRequests) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode DealsGetTooManyRequests to nil") + } + var unwrapped TooManyRequests + if err := func() error { + if err := unwrapped.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "alias") + } + *s = DealsGetTooManyRequests(unwrapped) + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s *DealsGetTooManyRequests) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *DealsGetTooManyRequests) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes DealsPostInternalServerError as json. +func (s *DealsPostInternalServerError) Encode(e *jx.Encoder) { + unwrapped := (*TooManyRequests)(s) + + unwrapped.Encode(e) +} + +// Decode decodes DealsPostInternalServerError from json. +func (s *DealsPostInternalServerError) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode DealsPostInternalServerError to nil") + } + var unwrapped TooManyRequests + if err := func() error { + if err := unwrapped.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "alias") + } + *s = DealsPostInternalServerError(unwrapped) + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s *DealsPostInternalServerError) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *DealsPostInternalServerError) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes DealsPostTooManyRequests as json. +func (s *DealsPostTooManyRequests) Encode(e *jx.Encoder) { + unwrapped := (*TooManyRequests)(s) + + unwrapped.Encode(e) +} + +// Decode decodes DealsPostTooManyRequests from json. +func (s *DealsPostTooManyRequests) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode DealsPostTooManyRequests to nil") + } + var unwrapped TooManyRequests + if err := func() error { + if err := unwrapped.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "alias") + } + *s = DealsPostTooManyRequests(unwrapped) + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s *DealsPostTooManyRequests) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *DealsPostTooManyRequests) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *ElectronicCertificate) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *ElectronicCertificate) encodeFields(e *jx.Encoder) { + { + e.FieldStart("certificate_id") + e.Str(s.CertificateID) + } + { + e.FieldStart("tru_quantity") + e.Int(s.TruQuantity) + } + { + e.FieldStart("available_compensation") + s.AvailableCompensation.Encode(e) + } + { + e.FieldStart("applied_compensation") + s.AppliedCompensation.Encode(e) + } +} + +var jsonFieldsNameOfElectronicCertificate = [4]string{ + 0: "certificate_id", + 1: "tru_quantity", + 2: "available_compensation", + 3: "applied_compensation", +} + +// Decode decodes ElectronicCertificate from json. +func (s *ElectronicCertificate) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode ElectronicCertificate to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "certificate_id": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + v, err := d.Str() + s.CertificateID = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"certificate_id\"") + } + case "tru_quantity": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + v, err := d.Int() + s.TruQuantity = int(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"tru_quantity\"") + } + case "available_compensation": + requiredBitSet[0] |= 1 << 2 + if err := func() error { + if err := s.AvailableCompensation.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"available_compensation\"") + } + case "applied_compensation": + requiredBitSet[0] |= 1 << 3 + if err := func() error { + if err := s.AppliedCompensation.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"applied_compensation\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode ElectronicCertificate") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00001111, + } { + 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(jsonFieldsNameOfElectronicCertificate) { + name = jsonFieldsNameOfElectronicCertificate[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 *ElectronicCertificate) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *ElectronicCertificate) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *ElectronicCertificateAppliedCompensation) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *ElectronicCertificateAppliedCompensation) encodeFields(e *jx.Encoder) { + { + e.FieldStart("value") + e.Str(s.Value) + } + { + e.FieldStart("currency") + s.Currency.Encode(e) + } +} + +var jsonFieldsNameOfElectronicCertificateAppliedCompensation = [2]string{ + 0: "value", + 1: "currency", +} + +// Decode decodes ElectronicCertificateAppliedCompensation from json. +func (s *ElectronicCertificateAppliedCompensation) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode ElectronicCertificateAppliedCompensation to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "value": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + v, err := d.Str() + s.Value = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"value\"") + } + case "currency": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + if err := s.Currency.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"currency\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode ElectronicCertificateAppliedCompensation") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000011, + } { + 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(jsonFieldsNameOfElectronicCertificateAppliedCompensation) { + name = jsonFieldsNameOfElectronicCertificateAppliedCompensation[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 *ElectronicCertificateAppliedCompensation) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *ElectronicCertificateAppliedCompensation) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *ElectronicCertificateApprovedPaymentArticle) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *ElectronicCertificateApprovedPaymentArticle) encodeFields(e *jx.Encoder) { + { + e.FieldStart("article_number") + s.ArticleNumber.Encode(e) + } + { + e.FieldStart("tru_code") + s.TruCode.Encode(e) + } + { + if s.ArticleCode.Set { + e.FieldStart("article_code") + s.ArticleCode.Encode(e) + } + } + { + e.FieldStart("certificates") + e.ArrStart() + for _, elem := range s.Certificates { + elem.Encode(e) + } + e.ArrEnd() + } +} + +var jsonFieldsNameOfElectronicCertificateApprovedPaymentArticle = [4]string{ + 0: "article_number", + 1: "tru_code", + 2: "article_code", + 3: "certificates", +} + +// Decode decodes ElectronicCertificateApprovedPaymentArticle from json. +func (s *ElectronicCertificateApprovedPaymentArticle) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode ElectronicCertificateApprovedPaymentArticle to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "article_number": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + if err := s.ArticleNumber.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"article_number\"") + } + case "tru_code": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + if err := s.TruCode.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"tru_code\"") + } + case "article_code": + if err := func() error { + s.ArticleCode.Reset() + if err := s.ArticleCode.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"article_code\"") + } + case "certificates": + requiredBitSet[0] |= 1 << 3 + if err := func() error { + s.Certificates = make([]ElectronicCertificate, 0) + if err := d.Arr(func(d *jx.Decoder) error { + var elem ElectronicCertificate + if err := elem.Decode(d); err != nil { + return err + } + s.Certificates = append(s.Certificates, elem) + return nil + }); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"certificates\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode ElectronicCertificateApprovedPaymentArticle") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00001011, + } { + 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(jsonFieldsNameOfElectronicCertificateApprovedPaymentArticle) { + name = jsonFieldsNameOfElectronicCertificateApprovedPaymentArticle[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 *ElectronicCertificateApprovedPaymentArticle) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *ElectronicCertificateApprovedPaymentArticle) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *ElectronicCertificateArticle) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *ElectronicCertificateArticle) encodeFields(e *jx.Encoder) { + { + e.FieldStart("article_number") + s.ArticleNumber.Encode(e) + } + { + e.FieldStart("tru_code") + s.TruCode.Encode(e) + } + { + if s.ArticleCode.Set { + e.FieldStart("article_code") + s.ArticleCode.Encode(e) + } + } + { + e.FieldStart("article_name") + e.Str(s.ArticleName) + } + { + e.FieldStart("quantity") + s.Quantity.Encode(e) + } + { + e.FieldStart("price") + s.Price.Encode(e) + } + { + if s.Metadata.Set { + e.FieldStart("metadata") + s.Metadata.Encode(e) + } + } +} + +var jsonFieldsNameOfElectronicCertificateArticle = [7]string{ + 0: "article_number", + 1: "tru_code", + 2: "article_code", + 3: "article_name", + 4: "quantity", + 5: "price", + 6: "metadata", +} + +// Decode decodes ElectronicCertificateArticle from json. +func (s *ElectronicCertificateArticle) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode ElectronicCertificateArticle to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "article_number": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + if err := s.ArticleNumber.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"article_number\"") + } + case "tru_code": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + if err := s.TruCode.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"tru_code\"") + } + case "article_code": + if err := func() error { + s.ArticleCode.Reset() + if err := s.ArticleCode.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"article_code\"") + } + case "article_name": + requiredBitSet[0] |= 1 << 3 + if err := func() error { + v, err := d.Str() + s.ArticleName = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"article_name\"") + } + case "quantity": + requiredBitSet[0] |= 1 << 4 + if err := func() error { + if err := s.Quantity.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"quantity\"") + } + case "price": + requiredBitSet[0] |= 1 << 5 + if err := func() error { + if err := s.Price.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"price\"") + } + case "metadata": + if err := func() error { + s.Metadata.Reset() + if err := s.Metadata.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"metadata\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode ElectronicCertificateArticle") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00111011, + } { + 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(jsonFieldsNameOfElectronicCertificateArticle) { + name = jsonFieldsNameOfElectronicCertificateArticle[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 *ElectronicCertificateArticle) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *ElectronicCertificateArticle) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes ElectronicCertificateArticleCode as json. +func (s ElectronicCertificateArticleCode) Encode(e *jx.Encoder) { + unwrapped := string(s) + + e.Str(unwrapped) +} + +// Decode decodes ElectronicCertificateArticleCode from json. +func (s *ElectronicCertificateArticleCode) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode ElectronicCertificateArticleCode to nil") + } + var unwrapped string + if err := func() error { + v, err := d.Str() + unwrapped = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "alias") + } + *s = ElectronicCertificateArticleCode(unwrapped) + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s ElectronicCertificateArticleCode) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *ElectronicCertificateArticleCode) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes ElectronicCertificateArticleNumber as json. +func (s ElectronicCertificateArticleNumber) Encode(e *jx.Encoder) { + unwrapped := int32(s) + + e.Int32(unwrapped) +} + +// Decode decodes ElectronicCertificateArticleNumber from json. +func (s *ElectronicCertificateArticleNumber) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode ElectronicCertificateArticleNumber to nil") + } + var unwrapped int32 + if err := func() error { + v, err := d.Int32() + unwrapped = int32(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "alias") + } + *s = ElectronicCertificateArticleNumber(unwrapped) + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s ElectronicCertificateArticleNumber) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *ElectronicCertificateArticleNumber) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *ElectronicCertificateArticlePrice) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *ElectronicCertificateArticlePrice) encodeFields(e *jx.Encoder) { + { + e.FieldStart("value") + e.Str(s.Value) + } + { + e.FieldStart("currency") + s.Currency.Encode(e) + } +} + +var jsonFieldsNameOfElectronicCertificateArticlePrice = [2]string{ + 0: "value", + 1: "currency", +} + +// Decode decodes ElectronicCertificateArticlePrice from json. +func (s *ElectronicCertificateArticlePrice) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode ElectronicCertificateArticlePrice to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "value": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + v, err := d.Str() + s.Value = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"value\"") + } + case "currency": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + if err := s.Currency.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"currency\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode ElectronicCertificateArticlePrice") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000011, + } { + 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(jsonFieldsNameOfElectronicCertificateArticlePrice) { + name = jsonFieldsNameOfElectronicCertificateArticlePrice[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 *ElectronicCertificateArticlePrice) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *ElectronicCertificateArticlePrice) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes ElectronicCertificateArticleQuantity as json. +func (s ElectronicCertificateArticleQuantity) Encode(e *jx.Encoder) { + unwrapped := int32(s) + + e.Int32(unwrapped) +} + +// Decode decodes ElectronicCertificateArticleQuantity from json. +func (s *ElectronicCertificateArticleQuantity) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode ElectronicCertificateArticleQuantity to nil") + } + var unwrapped int32 + if err := func() error { + v, err := d.Int32() + unwrapped = int32(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "alias") + } + *s = ElectronicCertificateArticleQuantity(unwrapped) + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s ElectronicCertificateArticleQuantity) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *ElectronicCertificateArticleQuantity) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *ElectronicCertificateAvailableCompensation) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *ElectronicCertificateAvailableCompensation) encodeFields(e *jx.Encoder) { + { + e.FieldStart("value") + e.Str(s.Value) + } + { + e.FieldStart("currency") + s.Currency.Encode(e) + } +} + +var jsonFieldsNameOfElectronicCertificateAvailableCompensation = [2]string{ + 0: "value", + 1: "currency", +} + +// Decode decodes ElectronicCertificateAvailableCompensation from json. +func (s *ElectronicCertificateAvailableCompensation) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode ElectronicCertificateAvailableCompensation to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "value": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + v, err := d.Str() + s.Value = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"value\"") + } + case "currency": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + if err := s.Currency.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"currency\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode ElectronicCertificateAvailableCompensation") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000011, + } { + 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(jsonFieldsNameOfElectronicCertificateAvailableCompensation) { + name = jsonFieldsNameOfElectronicCertificateAvailableCompensation[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 *ElectronicCertificateAvailableCompensation) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *ElectronicCertificateAvailableCompensation) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *ElectronicCertificatePayment) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *ElectronicCertificatePayment) encodeFields(e *jx.Encoder) { + { + e.FieldStart("amount") + s.Amount.Encode(e) + } + { + e.FieldStart("basket_id") + e.Str(s.BasketID) + } +} + +var jsonFieldsNameOfElectronicCertificatePayment = [2]string{ + 0: "amount", + 1: "basket_id", +} + +// Decode decodes ElectronicCertificatePayment from json. +func (s *ElectronicCertificatePayment) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode ElectronicCertificatePayment to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "amount": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + if err := s.Amount.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"amount\"") + } + case "basket_id": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + v, err := d.Str() + s.BasketID = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"basket_id\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode ElectronicCertificatePayment") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000011, + } { + 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(jsonFieldsNameOfElectronicCertificatePayment) { + name = jsonFieldsNameOfElectronicCertificatePayment[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 *ElectronicCertificatePayment) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *ElectronicCertificatePayment) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *ElectronicCertificatePaymentAmount) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *ElectronicCertificatePaymentAmount) encodeFields(e *jx.Encoder) { + { + e.FieldStart("value") + e.Str(s.Value) + } + { + e.FieldStart("currency") + s.Currency.Encode(e) + } +} + +var jsonFieldsNameOfElectronicCertificatePaymentAmount = [2]string{ + 0: "value", + 1: "currency", +} + +// Decode decodes ElectronicCertificatePaymentAmount from json. +func (s *ElectronicCertificatePaymentAmount) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode ElectronicCertificatePaymentAmount to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "value": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + v, err := d.Str() + s.Value = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"value\"") + } + case "currency": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + if err := s.Currency.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"currency\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode ElectronicCertificatePaymentAmount") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000011, + } { + 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(jsonFieldsNameOfElectronicCertificatePaymentAmount) { + name = jsonFieldsNameOfElectronicCertificatePaymentAmount[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 *ElectronicCertificatePaymentAmount) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *ElectronicCertificatePaymentAmount) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *ElectronicCertificatePaymentData) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *ElectronicCertificatePaymentData) encodeFields(e *jx.Encoder) { + { + e.FieldStart("amount") + s.Amount.Encode(e) + } + { + e.FieldStart("basket_id") + e.Str(s.BasketID) + } +} + +var jsonFieldsNameOfElectronicCertificatePaymentData = [2]string{ + 0: "amount", + 1: "basket_id", +} + +// Decode decodes ElectronicCertificatePaymentData from json. +func (s *ElectronicCertificatePaymentData) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode ElectronicCertificatePaymentData to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "amount": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + if err := s.Amount.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"amount\"") + } + case "basket_id": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + v, err := d.Str() + s.BasketID = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"basket_id\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode ElectronicCertificatePaymentData") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000011, + } { + 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(jsonFieldsNameOfElectronicCertificatePaymentData) { + name = jsonFieldsNameOfElectronicCertificatePaymentData[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 *ElectronicCertificatePaymentData) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *ElectronicCertificatePaymentData) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *ElectronicCertificatePaymentDataAmount) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *ElectronicCertificatePaymentDataAmount) encodeFields(e *jx.Encoder) { + { + e.FieldStart("value") + e.Str(s.Value) + } + { + e.FieldStart("currency") + s.Currency.Encode(e) + } +} + +var jsonFieldsNameOfElectronicCertificatePaymentDataAmount = [2]string{ + 0: "value", + 1: "currency", +} + +// Decode decodes ElectronicCertificatePaymentDataAmount from json. +func (s *ElectronicCertificatePaymentDataAmount) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode ElectronicCertificatePaymentDataAmount to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "value": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + v, err := d.Str() + s.Value = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"value\"") + } + case "currency": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + if err := s.Currency.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"currency\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode ElectronicCertificatePaymentDataAmount") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000011, + } { + 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(jsonFieldsNameOfElectronicCertificatePaymentDataAmount) { + name = jsonFieldsNameOfElectronicCertificatePaymentDataAmount[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 *ElectronicCertificatePaymentDataAmount) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *ElectronicCertificatePaymentDataAmount) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *ElectronicCertificateRefundArticle) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *ElectronicCertificateRefundArticle) encodeFields(e *jx.Encoder) { + { + e.FieldStart("article_number") + e.Int32(s.ArticleNumber) + } + { + e.FieldStart("payment_article_number") + e.Int32(s.PaymentArticleNumber) + } + { + e.FieldStart("tru_code") + s.TruCode.Encode(e) + } + { + e.FieldStart("quantity") + e.Int32(s.Quantity) + } +} + +var jsonFieldsNameOfElectronicCertificateRefundArticle = [4]string{ + 0: "article_number", + 1: "payment_article_number", + 2: "tru_code", + 3: "quantity", +} + +// Decode decodes ElectronicCertificateRefundArticle from json. +func (s *ElectronicCertificateRefundArticle) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode ElectronicCertificateRefundArticle to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "article_number": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + v, err := d.Int32() + s.ArticleNumber = int32(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"article_number\"") + } + case "payment_article_number": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + v, err := d.Int32() + s.PaymentArticleNumber = int32(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"payment_article_number\"") + } + case "tru_code": + requiredBitSet[0] |= 1 << 2 + if err := func() error { + if err := s.TruCode.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"tru_code\"") + } + case "quantity": + requiredBitSet[0] |= 1 << 3 + if err := func() error { + v, err := d.Int32() + s.Quantity = int32(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"quantity\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode ElectronicCertificateRefundArticle") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00001111, + } { + 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(jsonFieldsNameOfElectronicCertificateRefundArticle) { + name = jsonFieldsNameOfElectronicCertificateRefundArticle[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 *ElectronicCertificateRefundArticle) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *ElectronicCertificateRefundArticle) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *ElectronicCertificateRefundDataRequest) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *ElectronicCertificateRefundDataRequest) encodeFields(e *jx.Encoder) { + { + e.FieldStart("amount") + s.Amount.Encode(e) + } + { + e.FieldStart("basket_id") + e.Str(s.BasketID) + } +} + +var jsonFieldsNameOfElectronicCertificateRefundDataRequest = [2]string{ + 0: "amount", + 1: "basket_id", +} + +// Decode decodes ElectronicCertificateRefundDataRequest from json. +func (s *ElectronicCertificateRefundDataRequest) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode ElectronicCertificateRefundDataRequest to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "amount": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + if err := s.Amount.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"amount\"") + } + case "basket_id": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + v, err := d.Str() + s.BasketID = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"basket_id\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode ElectronicCertificateRefundDataRequest") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000011, + } { + 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(jsonFieldsNameOfElectronicCertificateRefundDataRequest) { + name = jsonFieldsNameOfElectronicCertificateRefundDataRequest[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 *ElectronicCertificateRefundDataRequest) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *ElectronicCertificateRefundDataRequest) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *ElectronicCertificateRefundDataRequestAmount) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *ElectronicCertificateRefundDataRequestAmount) encodeFields(e *jx.Encoder) { + { + e.FieldStart("value") + e.Str(s.Value) + } + { + e.FieldStart("currency") + s.Currency.Encode(e) + } +} + +var jsonFieldsNameOfElectronicCertificateRefundDataRequestAmount = [2]string{ + 0: "value", + 1: "currency", +} + +// Decode decodes ElectronicCertificateRefundDataRequestAmount from json. +func (s *ElectronicCertificateRefundDataRequestAmount) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode ElectronicCertificateRefundDataRequestAmount to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "value": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + v, err := d.Str() + s.Value = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"value\"") + } + case "currency": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + if err := s.Currency.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"currency\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode ElectronicCertificateRefundDataRequestAmount") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000011, + } { + 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(jsonFieldsNameOfElectronicCertificateRefundDataRequestAmount) { + name = jsonFieldsNameOfElectronicCertificateRefundDataRequestAmount[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 *ElectronicCertificateRefundDataRequestAmount) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *ElectronicCertificateRefundDataRequestAmount) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *ElectronicCertificateRefundDataResponse) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *ElectronicCertificateRefundDataResponse) encodeFields(e *jx.Encoder) { + { + e.FieldStart("basket_id") + e.Str(s.BasketID) + } + { + e.FieldStart("amount") + s.Amount.Encode(e) + } +} + +var jsonFieldsNameOfElectronicCertificateRefundDataResponse = [2]string{ + 0: "basket_id", + 1: "amount", +} + +// Decode decodes ElectronicCertificateRefundDataResponse from json. +func (s *ElectronicCertificateRefundDataResponse) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode ElectronicCertificateRefundDataResponse to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "basket_id": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + v, err := d.Str() + s.BasketID = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"basket_id\"") + } + case "amount": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + if err := s.Amount.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"amount\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode ElectronicCertificateRefundDataResponse") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000011, + } { + 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(jsonFieldsNameOfElectronicCertificateRefundDataResponse) { + name = jsonFieldsNameOfElectronicCertificateRefundDataResponse[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 *ElectronicCertificateRefundDataResponse) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *ElectronicCertificateRefundDataResponse) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *ElectronicCertificateRefundDataResponseAmount) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *ElectronicCertificateRefundDataResponseAmount) encodeFields(e *jx.Encoder) { + { + e.FieldStart("value") + e.Str(s.Value) + } + { + e.FieldStart("currency") + s.Currency.Encode(e) + } +} + +var jsonFieldsNameOfElectronicCertificateRefundDataResponseAmount = [2]string{ + 0: "value", + 1: "currency", +} + +// Decode decodes ElectronicCertificateRefundDataResponseAmount from json. +func (s *ElectronicCertificateRefundDataResponseAmount) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode ElectronicCertificateRefundDataResponseAmount to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "value": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + v, err := d.Str() + s.Value = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"value\"") + } + case "currency": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + if err := s.Currency.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"currency\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode ElectronicCertificateRefundDataResponseAmount") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000011, + } { + 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(jsonFieldsNameOfElectronicCertificateRefundDataResponseAmount) { + name = jsonFieldsNameOfElectronicCertificateRefundDataResponseAmount[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 *ElectronicCertificateRefundDataResponseAmount) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *ElectronicCertificateRefundDataResponseAmount) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *ElectronicCertificateRefundMethod) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *ElectronicCertificateRefundMethod) encodeFields(e *jx.Encoder) { + { + e.FieldStart("type") + s.Type.Encode(e) + } + { + if s.ElectronicCertificate.Set { + e.FieldStart("electronic_certificate") + s.ElectronicCertificate.Encode(e) + } + } + { + if s.Articles != nil { + e.FieldStart("articles") + e.ArrStart() + for _, elem := range s.Articles { + elem.Encode(e) + } + e.ArrEnd() + } + } +} + +var jsonFieldsNameOfElectronicCertificateRefundMethod = [3]string{ + 0: "type", + 1: "electronic_certificate", + 2: "articles", +} + +// Decode decodes ElectronicCertificateRefundMethod from json. +func (s *ElectronicCertificateRefundMethod) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode ElectronicCertificateRefundMethod to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "type": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + if err := s.Type.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"type\"") + } + case "electronic_certificate": + if err := func() error { + s.ElectronicCertificate.Reset() + if err := s.ElectronicCertificate.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"electronic_certificate\"") + } + case "articles": + if err := func() error { + s.Articles = make([]ElectronicCertificateRefundArticle, 0) + if err := d.Arr(func(d *jx.Decoder) error { + var elem ElectronicCertificateRefundArticle + if err := elem.Decode(d); err != nil { + return err + } + s.Articles = append(s.Articles, elem) + return nil + }); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"articles\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode ElectronicCertificateRefundMethod") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000001, + } { + 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(jsonFieldsNameOfElectronicCertificateRefundMethod) { + name = jsonFieldsNameOfElectronicCertificateRefundMethod[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 *ElectronicCertificateRefundMethod) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *ElectronicCertificateRefundMethod) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *ElectronicCertificateRefundMethodData) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *ElectronicCertificateRefundMethodData) encodeFields(e *jx.Encoder) { + { + e.FieldStart("type") + s.Type.Encode(e) + } + { + if s.ElectronicCertificate.Set { + e.FieldStart("electronic_certificate") + s.ElectronicCertificate.Encode(e) + } + } + { + if s.Articles != nil { + e.FieldStart("articles") + e.ArrStart() + for _, elem := range s.Articles { + elem.Encode(e) + } + e.ArrEnd() + } + } +} + +var jsonFieldsNameOfElectronicCertificateRefundMethodData = [3]string{ + 0: "type", + 1: "electronic_certificate", + 2: "articles", +} + +// Decode decodes ElectronicCertificateRefundMethodData from json. +func (s *ElectronicCertificateRefundMethodData) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode ElectronicCertificateRefundMethodData to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "type": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + if err := s.Type.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"type\"") + } + case "electronic_certificate": + if err := func() error { + s.ElectronicCertificate.Reset() + if err := s.ElectronicCertificate.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"electronic_certificate\"") + } + case "articles": + if err := func() error { + s.Articles = make([]ElectronicCertificateRefundArticle, 0) + if err := d.Arr(func(d *jx.Decoder) error { + var elem ElectronicCertificateRefundArticle + if err := elem.Decode(d); err != nil { + return err + } + s.Articles = append(s.Articles, elem) + return nil + }); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"articles\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode ElectronicCertificateRefundMethodData") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000001, + } { + 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(jsonFieldsNameOfElectronicCertificateRefundMethodData) { + name = jsonFieldsNameOfElectronicCertificateRefundMethodData[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 *ElectronicCertificateRefundMethodData) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *ElectronicCertificateRefundMethodData) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes ElectronicCertificateTruCode as json. +func (s ElectronicCertificateTruCode) Encode(e *jx.Encoder) { + unwrapped := string(s) + + e.Str(unwrapped) +} + +// Decode decodes ElectronicCertificateTruCode from json. +func (s *ElectronicCertificateTruCode) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode ElectronicCertificateTruCode to nil") + } + var unwrapped string + if err := func() error { + v, err := d.Str() + unwrapped = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "alias") + } + *s = ElectronicCertificateTruCode(unwrapped) + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s ElectronicCertificateTruCode) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *ElectronicCertificateTruCode) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes Enforce as json. +func (s Enforce) Encode(e *jx.Encoder) { + unwrapped := bool(s) + + e.Bool(unwrapped) +} + +// Decode decodes Enforce from json. +func (s *Enforce) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode Enforce to nil") + } + var unwrapped bool + if err := func() error { + v, err := d.Bool() + unwrapped = bool(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "alias") + } + *s = Enforce(unwrapped) + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s Enforce) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *Enforce) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes FeeMoment as json. +func (s FeeMoment) Encode(e *jx.Encoder) { + e.Str(string(s)) +} + +// Decode decodes FeeMoment from json. +func (s *FeeMoment) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode FeeMoment to nil") + } + v, err := d.StrBytes() + if err != nil { + return err + } + // Try to use constant string. + switch FeeMoment(v) { + case FeeMomentPaymentSucceeded: + *s = FeeMomentPaymentSucceeded + case FeeMomentDealClosed: + *s = FeeMomentDealClosed + default: + *s = FeeMoment(v) + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s FeeMoment) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *FeeMoment) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes FirstName as json. +func (s FirstName) Encode(e *jx.Encoder) { + unwrapped := string(s) + + e.Str(unwrapped) +} + +// Decode decodes FirstName from json. +func (s *FirstName) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode FirstName to nil") + } + var unwrapped string + if err := func() error { + v, err := d.Str() + unwrapped = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "alias") + } + *s = FirstName(unwrapped) + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s FirstName) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *FirstName) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *FiscalizationData) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *FiscalizationData) encodeFields(e *jx.Encoder) { + { + e.FieldStart("enabled") + e.Bool(s.Enabled) + } + { + e.FieldStart("provider") + s.Provider.Encode(e) + } +} + +var jsonFieldsNameOfFiscalizationData = [2]string{ + 0: "enabled", + 1: "provider", +} + +// Decode decodes FiscalizationData from json. +func (s *FiscalizationData) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode FiscalizationData to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "enabled": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + v, err := d.Bool() + s.Enabled = bool(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"enabled\"") + } + case "provider": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + if err := s.Provider.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"provider\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode FiscalizationData") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000011, + } { + 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(jsonFieldsNameOfFiscalizationData) { + name = jsonFieldsNameOfFiscalizationData[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 *FiscalizationData) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *FiscalizationData) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes FiscalizationProvider as json. +func (s FiscalizationProvider) Encode(e *jx.Encoder) { + e.Str(string(s)) +} + +// Decode decodes FiscalizationProvider from json. +func (s *FiscalizationProvider) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode FiscalizationProvider to nil") + } + v, err := d.StrBytes() + if err != nil { + return err + } + // Try to use constant string. + switch FiscalizationProvider(v) { + case FiscalizationProviderAtol: + *s = FiscalizationProviderAtol + case FiscalizationProviderAvanpost: + *s = FiscalizationProviderAvanpost + case FiscalizationProviderAQsi: + *s = FiscalizationProviderAQsi + case FiscalizationProviderBusinessRu: + *s = FiscalizationProviderBusinessRu + case FiscalizationProviderDigitalKassa: + *s = FiscalizationProviderDigitalKassa + case FiscalizationProviderEvotor: + *s = FiscalizationProviderEvotor + case FiscalizationProviderFirstOfd: + *s = FiscalizationProviderFirstOfd + case FiscalizationProviderKitInvest: + *s = FiscalizationProviderKitInvest + case FiscalizationProviderKomtet: + *s = FiscalizationProviderKomtet + case FiscalizationProviderLifePay: + *s = FiscalizationProviderLifePay + case FiscalizationProviderMertrade: + *s = FiscalizationProviderMertrade + case FiscalizationProviderModulKassa: + *s = FiscalizationProviderModulKassa + case FiscalizationProviderRocket: + *s = FiscalizationProviderRocket + case FiscalizationProviderShtrihM: + *s = FiscalizationProviderShtrihM + default: + *s = FiscalizationProvider(v) + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s FiscalizationProvider) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *FiscalizationProvider) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *Forbidden) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *Forbidden) encodeFields(e *jx.Encoder) { + { + if s.Type.Set { + e.FieldStart("type") + s.Type.Encode(e) + } + } + { + if s.ID.Set { + e.FieldStart("id") + s.ID.Encode(e) + } + } + { + if s.Description.Set { + e.FieldStart("description") + s.Description.Encode(e) + } + } + { + if s.Parameter.Set { + e.FieldStart("parameter") + s.Parameter.Encode(e) + } + } + { + if s.RetryAfter.Set { + e.FieldStart("retry_after") + s.RetryAfter.Encode(e) + } + } + { + if s.Code.Set { + e.FieldStart("code") + s.Code.Encode(e) + } + } +} + +var jsonFieldsNameOfForbidden = [6]string{ + 0: "type", + 1: "id", + 2: "description", + 3: "parameter", + 4: "retry_after", + 5: "code", +} + +// Decode decodes Forbidden from json. +func (s *Forbidden) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode Forbidden to nil") + } + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "type": + if err := func() error { + s.Type.Reset() + if err := s.Type.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"type\"") + } + case "id": + if err := func() error { + s.ID.Reset() + if err := s.ID.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"id\"") + } + case "description": + if err := func() error { + s.Description.Reset() + if err := s.Description.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"description\"") + } + case "parameter": + if err := func() error { + s.Parameter.Reset() + if err := s.Parameter.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"parameter\"") + } + case "retry_after": + if err := func() error { + s.RetryAfter.Reset() + if err := s.RetryAfter.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"retry_after\"") + } + case "code": + if err := func() error { + s.Code.Reset() + if err := s.Code.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"code\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode Forbidden") + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s *Forbidden) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *Forbidden) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes ForbiddenCode as json. +func (s ForbiddenCode) Encode(e *jx.Encoder) { + e.Str(string(s)) +} + +// Decode decodes ForbiddenCode from json. +func (s *ForbiddenCode) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode ForbiddenCode to nil") + } + v, err := d.StrBytes() + if err != nil { + return err + } + // Try to use constant string. + switch ForbiddenCode(v) { + case ForbiddenCodeForbidden: + *s = ForbiddenCodeForbidden + default: + *s = ForbiddenCode(v) + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s ForbiddenCode) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *ForbiddenCode) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes ForbiddenType as json. +func (s ForbiddenType) Encode(e *jx.Encoder) { + e.Str(string(s)) +} + +// Decode decodes ForbiddenType from json. +func (s *ForbiddenType) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode ForbiddenType to nil") + } + v, err := d.StrBytes() + if err != nil { + return err + } + // Try to use constant string. + switch ForbiddenType(v) { + case ForbiddenTypeError: + *s = ForbiddenTypeError + default: + *s = ForbiddenType(v) + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s ForbiddenType) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *ForbiddenType) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes GatewayId as json. +func (s GatewayId) Encode(e *jx.Encoder) { + unwrapped := string(s) + + e.Str(unwrapped) +} + +// Decode decodes GatewayId from json. +func (s *GatewayId) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode GatewayId to nil") + } + var unwrapped string + if err := func() error { + v, err := d.Str() + unwrapped = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "alias") + } + *s = GatewayId(unwrapped) + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s GatewayId) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *GatewayId) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *IncomeReceipt) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *IncomeReceipt) encodeFields(e *jx.Encoder) { + { + e.FieldStart("service_name") + s.ServiceName.Encode(e) + } + { + if s.NpdReceiptID.Set { + e.FieldStart("npd_receipt_id") + s.NpdReceiptID.Encode(e) + } + } + { + if s.URL.Set { + e.FieldStart("url") + s.URL.Encode(e) + } + } + { + if s.Amount.Set { + e.FieldStart("amount") + s.Amount.Encode(e) + } + } +} + +var jsonFieldsNameOfIncomeReceipt = [4]string{ + 0: "service_name", + 1: "npd_receipt_id", + 2: "url", + 3: "amount", +} + +// Decode decodes IncomeReceipt from json. +func (s *IncomeReceipt) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode IncomeReceipt to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "service_name": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + if err := s.ServiceName.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"service_name\"") + } + case "npd_receipt_id": + if err := func() error { + s.NpdReceiptID.Reset() + if err := s.NpdReceiptID.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"npd_receipt_id\"") + } + case "url": + if err := func() error { + s.URL.Reset() + if err := s.URL.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"url\"") + } + case "amount": + if err := func() error { + s.Amount.Reset() + if err := s.Amount.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"amount\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode IncomeReceipt") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000001, + } { + 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(jsonFieldsNameOfIncomeReceipt) { + name = jsonFieldsNameOfIncomeReceipt[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 *IncomeReceipt) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *IncomeReceipt) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *IncomeReceiptAmount) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *IncomeReceiptAmount) encodeFields(e *jx.Encoder) { + { + e.FieldStart("value") + e.Str(s.Value) + } + { + e.FieldStart("currency") + s.Currency.Encode(e) + } +} + +var jsonFieldsNameOfIncomeReceiptAmount = [2]string{ + 0: "value", + 1: "currency", +} + +// Decode decodes IncomeReceiptAmount from json. +func (s *IncomeReceiptAmount) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode IncomeReceiptAmount to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "value": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + v, err := d.Str() + s.Value = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"value\"") + } + case "currency": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + if err := s.Currency.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"currency\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode IncomeReceiptAmount") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000011, + } { + 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(jsonFieldsNameOfIncomeReceiptAmount) { + name = jsonFieldsNameOfIncomeReceiptAmount[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 *IncomeReceiptAmount) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *IncomeReceiptAmount) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes IncomeReceiptServiceName as json. +func (s IncomeReceiptServiceName) Encode(e *jx.Encoder) { + unwrapped := string(s) + + e.Str(unwrapped) +} + +// Decode decodes IncomeReceiptServiceName from json. +func (s *IncomeReceiptServiceName) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode IncomeReceiptServiceName to nil") + } + var unwrapped string + if err := func() error { + v, err := d.Str() + unwrapped = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "alias") + } + *s = IncomeReceiptServiceName(unwrapped) + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s IncomeReceiptServiceName) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *IncomeReceiptServiceName) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes IncomeReceiptUrl as json. +func (s IncomeReceiptUrl) Encode(e *jx.Encoder) { + unwrapped := string(s) + + e.Str(unwrapped) +} + +// Decode decodes IncomeReceiptUrl from json. +func (s *IncomeReceiptUrl) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode IncomeReceiptUrl to nil") + } + var unwrapped string + if err := func() error { + v, err := d.Str() + unwrapped = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "alias") + } + *s = IncomeReceiptUrl(unwrapped) + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s IncomeReceiptUrl) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *IncomeReceiptUrl) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *IndustryDetails) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *IndustryDetails) encodeFields(e *jx.Encoder) { + { + e.FieldStart("federal_id") + e.Str(s.FederalID) + } + { + e.FieldStart("document_date") + json.EncodeDate(e, s.DocumentDate) + } + { + e.FieldStart("document_number") + e.Str(s.DocumentNumber) + } + { + e.FieldStart("value") + e.Str(s.Value) + } +} + +var jsonFieldsNameOfIndustryDetails = [4]string{ + 0: "federal_id", + 1: "document_date", + 2: "document_number", + 3: "value", +} + +// Decode decodes IndustryDetails from json. +func (s *IndustryDetails) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode IndustryDetails to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "federal_id": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + v, err := d.Str() + s.FederalID = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"federal_id\"") + } + case "document_date": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + v, err := json.DecodeDate(d) + s.DocumentDate = v + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"document_date\"") + } + case "document_number": + requiredBitSet[0] |= 1 << 2 + if err := func() error { + v, err := d.Str() + s.DocumentNumber = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"document_number\"") + } + case "value": + requiredBitSet[0] |= 1 << 3 + if err := func() error { + v, err := d.Str() + s.Value = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"value\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode IndustryDetails") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00001111, + } { + 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(jsonFieldsNameOfIndustryDetails) { + name = jsonFieldsNameOfIndustryDetails[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 *IndustryDetails) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *IndustryDetails) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *InvalidCredentials) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *InvalidCredentials) encodeFields(e *jx.Encoder) { + { + if s.Type.Set { + e.FieldStart("type") + s.Type.Encode(e) + } + } + { + if s.ID.Set { + e.FieldStart("id") + s.ID.Encode(e) + } + } + { + if s.Description.Set { + e.FieldStart("description") + s.Description.Encode(e) + } + } + { + if s.Parameter.Set { + e.FieldStart("parameter") + s.Parameter.Encode(e) + } + } + { + if s.RetryAfter.Set { + e.FieldStart("retry_after") + s.RetryAfter.Encode(e) + } + } + { + if s.Code.Set { + e.FieldStart("code") + s.Code.Encode(e) + } + } +} + +var jsonFieldsNameOfInvalidCredentials = [6]string{ + 0: "type", + 1: "id", + 2: "description", + 3: "parameter", + 4: "retry_after", + 5: "code", +} + +// Decode decodes InvalidCredentials from json. +func (s *InvalidCredentials) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode InvalidCredentials to nil") + } + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "type": + if err := func() error { + s.Type.Reset() + if err := s.Type.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"type\"") + } + case "id": + if err := func() error { + s.ID.Reset() + if err := s.ID.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"id\"") + } + case "description": + if err := func() error { + s.Description.Reset() + if err := s.Description.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"description\"") + } + case "parameter": + if err := func() error { + s.Parameter.Reset() + if err := s.Parameter.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"parameter\"") + } + case "retry_after": + if err := func() error { + s.RetryAfter.Reset() + if err := s.RetryAfter.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"retry_after\"") + } + case "code": + if err := func() error { + s.Code.Reset() + if err := s.Code.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"code\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode InvalidCredentials") + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s *InvalidCredentials) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *InvalidCredentials) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes InvalidCredentialsCode as json. +func (s InvalidCredentialsCode) Encode(e *jx.Encoder) { + e.Str(string(s)) +} + +// Decode decodes InvalidCredentialsCode from json. +func (s *InvalidCredentialsCode) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode InvalidCredentialsCode to nil") + } + v, err := d.StrBytes() + if err != nil { + return err + } + // Try to use constant string. + switch InvalidCredentialsCode(v) { + case InvalidCredentialsCodeInvalidCredentials: + *s = InvalidCredentialsCodeInvalidCredentials + default: + *s = InvalidCredentialsCode(v) + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s InvalidCredentialsCode) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *InvalidCredentialsCode) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes InvalidCredentialsType as json. +func (s InvalidCredentialsType) Encode(e *jx.Encoder) { + e.Str(string(s)) +} + +// Decode decodes InvalidCredentialsType from json. +func (s *InvalidCredentialsType) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode InvalidCredentialsType to nil") + } + v, err := d.StrBytes() + if err != nil { + return err + } + // Try to use constant string. + switch InvalidCredentialsType(v) { + case InvalidCredentialsTypeError: + *s = InvalidCredentialsTypeError + default: + *s = InvalidCredentialsType(v) + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s InvalidCredentialsType) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *InvalidCredentialsType) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes InvoiceId as json. +func (s InvoiceId) Encode(e *jx.Encoder) { + unwrapped := string(s) + + e.Str(unwrapped) +} + +// Decode decodes InvoiceId from json. +func (s *InvoiceId) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode InvoiceId to nil") + } + var unwrapped string + if err := func() error { + v, err := d.Str() + unwrapped = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "alias") + } + *s = InvoiceId(unwrapped) + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s InvoiceId) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *InvoiceId) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *InvoicingBankCardData) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *InvoicingBankCardData) encodeFields(e *jx.Encoder) { + { + e.FieldStart("first6") + e.Str(s.First6) + } + { + e.FieldStart("last4") + s.Last4.Encode(e) + } + { + e.FieldStart("expiry_year") + s.ExpiryYear.Encode(e) + } + { + e.FieldStart("expiry_month") + s.ExpiryMonth.Encode(e) + } + { + e.FieldStart("card_type") + s.CardType.Encode(e) + } +} + +var jsonFieldsNameOfInvoicingBankCardData = [5]string{ + 0: "first6", + 1: "last4", + 2: "expiry_year", + 3: "expiry_month", + 4: "card_type", +} + +// Decode decodes InvoicingBankCardData from json. +func (s *InvoicingBankCardData) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode InvoicingBankCardData to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "first6": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + v, err := d.Str() + s.First6 = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"first6\"") + } + case "last4": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + if err := s.Last4.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"last4\"") + } + case "expiry_year": + requiredBitSet[0] |= 1 << 2 + if err := func() error { + if err := s.ExpiryYear.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"expiry_year\"") + } + case "expiry_month": + requiredBitSet[0] |= 1 << 3 + if err := func() error { + if err := s.ExpiryMonth.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"expiry_month\"") + } + case "card_type": + requiredBitSet[0] |= 1 << 4 + if err := func() error { + if err := s.CardType.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"card_type\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode InvoicingBankCardData") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00011111, + } { + 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(jsonFieldsNameOfInvoicingBankCardData) { + name = jsonFieldsNameOfInvoicingBankCardData[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 *InvoicingBankCardData) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *InvoicingBankCardData) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes Kbk as json. +func (s Kbk) Encode(e *jx.Encoder) { + unwrapped := string(s) + + e.Str(unwrapped) +} + +// Decode decodes Kbk from json. +func (s *Kbk) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode Kbk to nil") + } + var unwrapped string + if err := func() error { + v, err := d.Str() + unwrapped = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "alias") + } + *s = Kbk(unwrapped) + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s Kbk) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *Kbk) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes LastName as json. +func (s LastName) Encode(e *jx.Encoder) { + unwrapped := string(s) + + e.Str(unwrapped) +} + +// Decode decodes LastName from json. +func (s *LastName) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode LastName to nil") + } + var unwrapped string + if err := func() error { + v, err := d.Str() + unwrapped = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "alias") + } + *s = LastName(unwrapped) + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s LastName) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *LastName) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes Locale as json. +func (s Locale) Encode(e *jx.Encoder) { + e.Str(string(s)) +} + +// Decode decodes Locale from json. +func (s *Locale) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode Locale to nil") + } + v, err := d.StrBytes() + if err != nil { + return err + } + // Try to use constant string. + switch Locale(v) { + case LocaleRuRU: + *s = LocaleRuRU + case LocaleEnUS: + *s = LocaleEnUS + default: + *s = Locale(v) + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s Locale) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *Locale) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *MarkCodeInfo) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *MarkCodeInfo) encodeFields(e *jx.Encoder) { + { + if s.MarkCodeRaw.Set { + e.FieldStart("mark_code_raw") + s.MarkCodeRaw.Encode(e) + } + } + { + if s.Unknown.Set { + e.FieldStart("unknown") + s.Unknown.Encode(e) + } + } + { + if s.Ean8.Set { + e.FieldStart("ean_8") + s.Ean8.Encode(e) + } + } + { + if s.Ean13.Set { + e.FieldStart("ean_13") + s.Ean13.Encode(e) + } + } + { + if s.Itf14.Set { + e.FieldStart("itf_14") + s.Itf14.Encode(e) + } + } + { + if s.Gs10.Set { + e.FieldStart("gs_10") + s.Gs10.Encode(e) + } + } + { + if s.Gs1m.Set { + e.FieldStart("gs_1m") + s.Gs1m.Encode(e) + } + } + { + if s.Short.Set { + e.FieldStart("short") + s.Short.Encode(e) + } + } + { + if s.Fur.Set { + e.FieldStart("fur") + s.Fur.Encode(e) + } + } + { + if s.Egais20.Set { + e.FieldStart("egais_20") + s.Egais20.Encode(e) + } + } + { + if s.Egais30.Set { + e.FieldStart("egais_30") + s.Egais30.Encode(e) + } + } +} + +var jsonFieldsNameOfMarkCodeInfo = [11]string{ + 0: "mark_code_raw", + 1: "unknown", + 2: "ean_8", + 3: "ean_13", + 4: "itf_14", + 5: "gs_10", + 6: "gs_1m", + 7: "short", + 8: "fur", + 9: "egais_20", + 10: "egais_30", +} + +// Decode decodes MarkCodeInfo from json. +func (s *MarkCodeInfo) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode MarkCodeInfo to nil") + } + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "mark_code_raw": + if err := func() error { + s.MarkCodeRaw.Reset() + if err := s.MarkCodeRaw.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"mark_code_raw\"") + } + case "unknown": + if err := func() error { + s.Unknown.Reset() + if err := s.Unknown.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"unknown\"") + } + case "ean_8": + if err := func() error { + s.Ean8.Reset() + if err := s.Ean8.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"ean_8\"") + } + case "ean_13": + if err := func() error { + s.Ean13.Reset() + if err := s.Ean13.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"ean_13\"") + } + case "itf_14": + if err := func() error { + s.Itf14.Reset() + if err := s.Itf14.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"itf_14\"") + } + case "gs_10": + if err := func() error { + s.Gs10.Reset() + if err := s.Gs10.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"gs_10\"") + } + case "gs_1m": + if err := func() error { + s.Gs1m.Reset() + if err := s.Gs1m.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"gs_1m\"") + } + case "short": + if err := func() error { + s.Short.Reset() + if err := s.Short.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"short\"") + } + case "fur": + if err := func() error { + s.Fur.Reset() + if err := s.Fur.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"fur\"") + } + case "egais_20": + if err := func() error { + s.Egais20.Reset() + if err := s.Egais20.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"egais_20\"") + } + case "egais_30": + if err := func() error { + s.Egais30.Reset() + if err := s.Egais30.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"egais_30\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode MarkCodeInfo") + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s *MarkCodeInfo) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *MarkCodeInfo) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes MarkMode as json. +func (s MarkMode) Encode(e *jx.Encoder) { + unwrapped := string(s) + + e.Str(unwrapped) +} + +// Decode decodes MarkMode from json. +func (s *MarkMode) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode MarkMode to nil") + } + var unwrapped string + if err := func() error { + v, err := d.Str() + unwrapped = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "alias") + } + *s = MarkMode(unwrapped) + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s MarkMode) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *MarkMode) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *MarkQuantity) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *MarkQuantity) encodeFields(e *jx.Encoder) { + { + e.FieldStart("numerator") + e.Int(s.Numerator) + } + { + e.FieldStart("denominator") + e.Int(s.Denominator) + } +} + +var jsonFieldsNameOfMarkQuantity = [2]string{ + 0: "numerator", + 1: "denominator", +} + +// Decode decodes MarkQuantity from json. +func (s *MarkQuantity) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode MarkQuantity to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "numerator": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + v, err := d.Int() + s.Numerator = int(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"numerator\"") + } + case "denominator": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + v, err := d.Int() + s.Denominator = int(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"denominator\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode MarkQuantity") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000011, + } { + 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(jsonFieldsNameOfMarkQuantity) { + name = jsonFieldsNameOfMarkQuantity[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 *MarkQuantity) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *MarkQuantity) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *Me) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *Me) encodeFields(e *jx.Encoder) { + { + e.FieldStart("account_id") + e.Str(s.AccountID) + } + { + e.FieldStart("status") + s.Status.Encode(e) + } + { + e.FieldStart("test") + e.Bool(s.Test) + } + { + if s.Fiscalization.Set { + e.FieldStart("fiscalization") + s.Fiscalization.Encode(e) + } + } + { + if s.FiscalizationEnabled.Set { + e.FieldStart("fiscalization_enabled") + s.FiscalizationEnabled.Encode(e) + } + } + { + if s.PaymentMethods != nil { + e.FieldStart("payment_methods") + e.ArrStart() + for _, elem := range s.PaymentMethods { + elem.Encode(e) + } + e.ArrEnd() + } + } + { + if s.Itn.Set { + e.FieldStart("itn") + s.Itn.Encode(e) + } + } + { + if s.PayoutMethods != nil { + e.FieldStart("payout_methods") + e.ArrStart() + for _, elem := range s.PayoutMethods { + elem.Encode(e) + } + e.ArrEnd() + } + } + { + if s.Name.Set { + e.FieldStart("name") + s.Name.Encode(e) + } + } + { + if s.PayoutBalance.Set { + e.FieldStart("payout_balance") + s.PayoutBalance.Encode(e) + } + } +} + +var jsonFieldsNameOfMe = [10]string{ + 0: "account_id", + 1: "status", + 2: "test", + 3: "fiscalization", + 4: "fiscalization_enabled", + 5: "payment_methods", + 6: "itn", + 7: "payout_methods", + 8: "name", + 9: "payout_balance", +} + +// Decode decodes Me from json. +func (s *Me) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode Me to nil") + } + var requiredBitSet [2]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "account_id": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + v, err := d.Str() + s.AccountID = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"account_id\"") + } + case "status": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + if err := s.Status.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"status\"") + } + case "test": + requiredBitSet[0] |= 1 << 2 + if err := func() error { + v, err := d.Bool() + s.Test = bool(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"test\"") + } + case "fiscalization": + if err := func() error { + s.Fiscalization.Reset() + if err := s.Fiscalization.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"fiscalization\"") + } + case "fiscalization_enabled": + if err := func() error { + s.FiscalizationEnabled.Reset() + if err := s.FiscalizationEnabled.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"fiscalization_enabled\"") + } + case "payment_methods": + if err := func() error { + s.PaymentMethods = make([]PaymentMethodType, 0) + if err := d.Arr(func(d *jx.Decoder) error { + var elem PaymentMethodType + if err := elem.Decode(d); err != nil { + return err + } + s.PaymentMethods = append(s.PaymentMethods, elem) + return nil + }); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"payment_methods\"") + } + case "itn": + if err := func() error { + s.Itn.Reset() + if err := s.Itn.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"itn\"") + } + case "payout_methods": + if err := func() error { + s.PayoutMethods = make([]PayoutMethodType, 0) + if err := d.Arr(func(d *jx.Decoder) error { + var elem PayoutMethodType + if err := elem.Decode(d); err != nil { + return err + } + s.PayoutMethods = append(s.PayoutMethods, elem) + return nil + }); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"payout_methods\"") + } + case "name": + if err := func() error { + s.Name.Reset() + if err := s.Name.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"name\"") + } + case "payout_balance": + if err := func() error { + s.PayoutBalance.Reset() + if err := s.PayoutBalance.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"payout_balance\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode Me") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [2]uint8{ + 0b00000111, + 0b00000000, + } { + 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(jsonFieldsNameOfMe) { + name = jsonFieldsNameOfMe[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 *Me) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *Me) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *MePayoutBalance) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *MePayoutBalance) encodeFields(e *jx.Encoder) { + { + e.FieldStart("value") + e.Str(s.Value) + } + { + e.FieldStart("currency") + s.Currency.Encode(e) + } +} + +var jsonFieldsNameOfMePayoutBalance = [2]string{ + 0: "value", + 1: "currency", +} + +// Decode decodes MePayoutBalance from json. +func (s *MePayoutBalance) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode MePayoutBalance to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "value": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + v, err := d.Str() + s.Value = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"value\"") + } + case "currency": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + if err := s.Currency.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"currency\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode MePayoutBalance") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000011, + } { + 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(jsonFieldsNameOfMePayoutBalance) { + name = jsonFieldsNameOfMePayoutBalance[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 *MePayoutBalance) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *MePayoutBalance) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes MeStatus as json. +func (s MeStatus) Encode(e *jx.Encoder) { + e.Str(string(s)) +} + +// Decode decodes MeStatus from json. +func (s *MeStatus) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode MeStatus to nil") + } + v, err := d.StrBytes() + if err != nil { + return err + } + // Try to use constant string. + switch MeStatus(v) { + case MeStatusEnabled: + *s = MeStatusEnabled + case MeStatusDisabled: + *s = MeStatusDisabled + default: + *s = MeStatus(v) + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s MeStatus) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *MeStatus) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s Metadata) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields implements json.Marshaler. +func (s Metadata) encodeFields(e *jx.Encoder) { + for k, elem := range s { + e.FieldStart(k) + + elem.Encode(e) + } +} + +// Decode decodes Metadata from json. +func (s *Metadata) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode Metadata to nil") + } + m := s.init() + var propertiesCount int + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + propertiesCount++ + var elem NilString + if err := func() error { + if err := elem.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrapf(err, "decode field %q", k) + } + m[string(k)] = elem + return nil + }); err != nil { + return errors.Wrap(err, "decode Metadata") + } + // Validate properties count. + if err := (validate.Object{ + MinProperties: 0, + MinPropertiesSet: false, + MaxProperties: 16, + MaxPropertiesSet: true, + }).ValidateProperties(propertiesCount); err != nil { + return errors.Wrap(err, "object") + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s Metadata) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *Metadata) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes MiddleName as json. +func (s MiddleName) Encode(e *jx.Encoder) { + unwrapped := string(s) + + e.Str(unwrapped) +} + +// Decode decodes MiddleName from json. +func (s *MiddleName) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode MiddleName to nil") + } + var unwrapped string + if err := func() error { + v, err := d.Str() + unwrapped = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "alias") + } + *s = MiddleName(unwrapped) + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s MiddleName) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *MiddleName) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes NextCursor as json. +func (s NextCursor) Encode(e *jx.Encoder) { + unwrapped := string(s) + + e.Str(unwrapped) +} + +// Decode decodes NextCursor from json. +func (s *NextCursor) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode NextCursor to nil") + } + var unwrapped string + if err := func() error { + v, err := d.Str() + unwrapped = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "alias") + } + *s = NextCursor(unwrapped) + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s NextCursor) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *NextCursor) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes string as json. +func (o NilString) Encode(e *jx.Encoder) { + if o.Null { + e.Null() + return + } + e.Str(string(o.Value)) +} + +// Decode decodes string from json. +func (o *NilString) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode NilString to nil") + } + if d.Next() == jx.Null { + if err := d.Null(); err != nil { + return err + } + + var v string + o.Value = v + o.Null = true + return nil + } + o.Null = false + v, err := d.Str() + if err != nil { + return err + } + o.Value = string(v) + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s NilString) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *NilString) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *NotFound) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *NotFound) encodeFields(e *jx.Encoder) { + { + if s.Type.Set { + e.FieldStart("type") + s.Type.Encode(e) + } + } + { + if s.ID.Set { + e.FieldStart("id") + s.ID.Encode(e) + } + } + { + if s.Description.Set { + e.FieldStart("description") + s.Description.Encode(e) + } + } + { + if s.Parameter.Set { + e.FieldStart("parameter") + s.Parameter.Encode(e) + } + } + { + if s.RetryAfter.Set { + e.FieldStart("retry_after") + s.RetryAfter.Encode(e) + } + } + { + if s.Code.Set { + e.FieldStart("code") + s.Code.Encode(e) + } + } +} + +var jsonFieldsNameOfNotFound = [6]string{ + 0: "type", + 1: "id", + 2: "description", + 3: "parameter", + 4: "retry_after", + 5: "code", +} + +// Decode decodes NotFound from json. +func (s *NotFound) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode NotFound to nil") + } + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "type": + if err := func() error { + s.Type.Reset() + if err := s.Type.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"type\"") + } + case "id": + if err := func() error { + s.ID.Reset() + if err := s.ID.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"id\"") + } + case "description": + if err := func() error { + s.Description.Reset() + if err := s.Description.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"description\"") + } + case "parameter": + if err := func() error { + s.Parameter.Reset() + if err := s.Parameter.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"parameter\"") + } + case "retry_after": + if err := func() error { + s.RetryAfter.Reset() + if err := s.RetryAfter.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"retry_after\"") + } + case "code": + if err := func() error { + s.Code.Reset() + if err := s.Code.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"code\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode NotFound") + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s *NotFound) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *NotFound) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes NotFoundCode as json. +func (s NotFoundCode) Encode(e *jx.Encoder) { + e.Str(string(s)) +} + +// Decode decodes NotFoundCode from json. +func (s *NotFoundCode) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode NotFoundCode to nil") + } + v, err := d.StrBytes() + if err != nil { + return err + } + // Try to use constant string. + switch NotFoundCode(v) { + case NotFoundCodeNotFound: + *s = NotFoundCodeNotFound + default: + *s = NotFoundCode(v) + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s NotFoundCode) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *NotFoundCode) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes NotFoundType as json. +func (s NotFoundType) Encode(e *jx.Encoder) { + e.Str(string(s)) +} + +// Decode decodes NotFoundType from json. +func (s *NotFoundType) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode NotFoundType to nil") + } + v, err := d.StrBytes() + if err != nil { + return err + } + // Try to use constant string. + switch NotFoundType(v) { + case NotFoundTypeError: + *s = NotFoundTypeError + default: + *s = NotFoundType(v) + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s NotFoundType) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *NotFoundType) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes NpdIncomeReceiptId as json. +func (s NpdIncomeReceiptId) Encode(e *jx.Encoder) { + unwrapped := string(s) + + e.Str(unwrapped) +} + +// Decode decodes NpdIncomeReceiptId from json. +func (s *NpdIncomeReceiptId) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode NpdIncomeReceiptId to nil") + } + var unwrapped string + if err := func() error { + v, err := d.Str() + unwrapped = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "alias") + } + *s = NpdIncomeReceiptId(unwrapped) + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s NpdIncomeReceiptId) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *NpdIncomeReceiptId) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes Oktmo as json. +func (s Oktmo) Encode(e *jx.Encoder) { + unwrapped := string(s) + + e.Str(unwrapped) +} + +// Decode decodes Oktmo from json. +func (s *Oktmo) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode Oktmo to nil") + } + var unwrapped string + if err := func() error { + v, err := d.Str() + unwrapped = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "alias") + } + *s = Oktmo(unwrapped) + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s Oktmo) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *Oktmo) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes AuthorizationDetails as json. +func (o OptAuthorizationDetails) Encode(e *jx.Encoder) { + if !o.Set { + return + } + o.Value.Encode(e) +} + +// Decode decodes AuthorizationDetails from json. +func (o *OptAuthorizationDetails) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptAuthorizationDetails to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptAuthorizationDetails) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptAuthorizationDetails) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes B2bSberbankPayerBankDetails as json. +func (o OptB2bSberbankPayerBankDetails) Encode(e *jx.Encoder) { + if !o.Set { + return + } + o.Value.Encode(e) +} + +// Decode decodes B2bSberbankPayerBankDetails from json. +func (o *OptB2bSberbankPayerBankDetails) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptB2bSberbankPayerBankDetails to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptB2bSberbankPayerBankDetails) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptB2bSberbankPayerBankDetails) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes BadRequestCode as json. +func (o OptBadRequestCode) Encode(e *jx.Encoder) { + if !o.Set { + return + } + e.Str(string(o.Value)) +} + +// Decode decodes BadRequestCode from json. +func (o *OptBadRequestCode) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptBadRequestCode to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptBadRequestCode) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptBadRequestCode) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes BadRequestType as json. +func (o OptBadRequestType) Encode(e *jx.Encoder) { + if !o.Set { + return + } + e.Str(string(o.Value)) +} + +// Decode decodes BadRequestType from json. +func (o *OptBadRequestType) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptBadRequestType to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptBadRequestType) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptBadRequestType) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes BankCardData as json. +func (o OptBankCardData) Encode(e *jx.Encoder) { + if !o.Set { + return + } + o.Value.Encode(e) +} + +// Decode decodes BankCardData from json. +func (o *OptBankCardData) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptBankCardData to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptBankCardData) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptBankCardData) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes BankCardDataSource as json. +func (o OptBankCardDataSource) Encode(e *jx.Encoder) { + if !o.Set { + return + } + e.Str(string(o.Value)) +} + +// Decode decodes BankCardDataSource from json. +func (o *OptBankCardDataSource) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptBankCardDataSource to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptBankCardDataSource) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptBankCardDataSource) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes BankCardFirst6 as json. +func (o OptBankCardFirst6) Encode(e *jx.Encoder) { + if !o.Set { + return + } + o.Value.Encode(e) +} + +// Decode decodes BankCardFirst6 from json. +func (o *OptBankCardFirst6) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptBankCardFirst6 to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptBankCardFirst6) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptBankCardFirst6) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes BankCardHolderName as json. +func (o OptBankCardHolderName) Encode(e *jx.Encoder) { + if !o.Set { + return + } + o.Value.Encode(e) +} + +// Decode decodes BankCardHolderName from json. +func (o *OptBankCardHolderName) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptBankCardHolderName to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptBankCardHolderName) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptBankCardHolderName) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes BankCardIssuerCountry as json. +func (o OptBankCardIssuerCountry) Encode(e *jx.Encoder) { + if !o.Set { + return + } + o.Value.Encode(e) +} + +// Decode decodes BankCardIssuerCountry from json. +func (o *OptBankCardIssuerCountry) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptBankCardIssuerCountry to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptBankCardIssuerCountry) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptBankCardIssuerCountry) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes BankCardIssuerName as json. +func (o OptBankCardIssuerName) Encode(e *jx.Encoder) { + if !o.Set { + return + } + o.Value.Encode(e) +} + +// Decode decodes BankCardIssuerName from json. +func (o *OptBankCardIssuerName) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptBankCardIssuerName to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptBankCardIssuerName) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptBankCardIssuerName) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes BankCardProduct as json. +func (o OptBankCardProduct) Encode(e *jx.Encoder) { + if !o.Set { + return + } + o.Value.Encode(e) +} + +// Decode decodes BankCardProduct from json. +func (o *OptBankCardProduct) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptBankCardProduct to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptBankCardProduct) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptBankCardProduct) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes bool as json. +func (o OptBool) Encode(e *jx.Encoder) { + if !o.Set { + return + } + e.Bool(bool(o.Value)) +} + +// Decode decodes bool from json. +func (o *OptBool) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptBool to nil") + } + o.Set = true + v, err := d.Bool() + if err != nil { + return err + } + o.Value = bool(v) + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptBool) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptBool) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes Capture as json. +func (o OptCapture) Encode(e *jx.Encoder) { + if !o.Set { + return + } + o.Value.Encode(e) +} + +// Decode decodes Capture from json. +func (o *OptCapture) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptCapture to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptCapture) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptCapture) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes CardRequestData as json. +func (o OptCardRequestData) Encode(e *jx.Encoder) { + if !o.Set { + return + } + o.Value.Encode(e) +} + +// Decode decodes CardRequestData from json. +func (o *OptCardRequestData) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptCardRequestData to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptCardRequestData) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptCardRequestData) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes ClientIp as json. +func (o OptClientIp) Encode(e *jx.Encoder) { + if !o.Set { + return + } + o.Value.Encode(e) +} + +// Decode decodes ClientIp from json. +func (o *OptClientIp) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptClientIp to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptClientIp) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptClientIp) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes time.Time as json. +func (o OptDateTime) Encode(e *jx.Encoder, format func(*jx.Encoder, time.Time)) { + if !o.Set { + return + } + format(e, o.Value) +} + +// Decode decodes time.Time from json. +func (o *OptDateTime) Decode(d *jx.Decoder, format func(*jx.Decoder) (time.Time, error)) error { + if o == nil { + return errors.New("invalid: unable to decode OptDateTime to nil") + } + o.Set = true + v, err := format(d) + if err != nil { + return err + } + o.Value = v + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptDateTime) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e, json.EncodeDateTime) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptDateTime) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d, json.DecodeDateTime) +} + +// Encode encodes ElectronicCertificateArticleCode as json. +func (o OptElectronicCertificateArticleCode) Encode(e *jx.Encoder) { + if !o.Set { + return + } + o.Value.Encode(e) +} + +// Decode decodes ElectronicCertificateArticleCode from json. +func (o *OptElectronicCertificateArticleCode) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptElectronicCertificateArticleCode to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptElectronicCertificateArticleCode) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptElectronicCertificateArticleCode) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes ElectronicCertificatePayment as json. +func (o OptElectronicCertificatePayment) Encode(e *jx.Encoder) { + if !o.Set { + return + } + o.Value.Encode(e) +} + +// Decode decodes ElectronicCertificatePayment from json. +func (o *OptElectronicCertificatePayment) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptElectronicCertificatePayment to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptElectronicCertificatePayment) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptElectronicCertificatePayment) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes ElectronicCertificatePaymentData as json. +func (o OptElectronicCertificatePaymentData) Encode(e *jx.Encoder) { + if !o.Set { + return + } + o.Value.Encode(e) +} + +// Decode decodes ElectronicCertificatePaymentData from json. +func (o *OptElectronicCertificatePaymentData) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptElectronicCertificatePaymentData to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptElectronicCertificatePaymentData) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptElectronicCertificatePaymentData) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes ElectronicCertificateRefundDataRequest as json. +func (o OptElectronicCertificateRefundDataRequest) Encode(e *jx.Encoder) { + if !o.Set { + return + } + o.Value.Encode(e) +} + +// Decode decodes ElectronicCertificateRefundDataRequest from json. +func (o *OptElectronicCertificateRefundDataRequest) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptElectronicCertificateRefundDataRequest to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptElectronicCertificateRefundDataRequest) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptElectronicCertificateRefundDataRequest) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes ElectronicCertificateRefundDataResponse as json. +func (o OptElectronicCertificateRefundDataResponse) Encode(e *jx.Encoder) { + if !o.Set { + return + } + o.Value.Encode(e) +} + +// Decode decodes ElectronicCertificateRefundDataResponse from json. +func (o *OptElectronicCertificateRefundDataResponse) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptElectronicCertificateRefundDataResponse to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptElectronicCertificateRefundDataResponse) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptElectronicCertificateRefundDataResponse) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes Enforce as json. +func (o OptEnforce) Encode(e *jx.Encoder) { + if !o.Set { + return + } + o.Value.Encode(e) +} + +// Decode decodes Enforce from json. +func (o *OptEnforce) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptEnforce to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptEnforce) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptEnforce) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes FiscalizationData as json. +func (o OptFiscalizationData) Encode(e *jx.Encoder) { + if !o.Set { + return + } + o.Value.Encode(e) +} + +// Decode decodes FiscalizationData from json. +func (o *OptFiscalizationData) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptFiscalizationData to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptFiscalizationData) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptFiscalizationData) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes ForbiddenCode as json. +func (o OptForbiddenCode) Encode(e *jx.Encoder) { + if !o.Set { + return + } + e.Str(string(o.Value)) +} + +// Decode decodes ForbiddenCode from json. +func (o *OptForbiddenCode) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptForbiddenCode to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptForbiddenCode) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptForbiddenCode) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes ForbiddenType as json. +func (o OptForbiddenType) Encode(e *jx.Encoder) { + if !o.Set { + return + } + e.Str(string(o.Value)) +} + +// Decode decodes ForbiddenType from json. +func (o *OptForbiddenType) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptForbiddenType to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptForbiddenType) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptForbiddenType) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes GatewayId as json. +func (o OptGatewayId) Encode(e *jx.Encoder) { + if !o.Set { + return + } + o.Value.Encode(e) +} + +// Decode decodes GatewayId from json. +func (o *OptGatewayId) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptGatewayId to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptGatewayId) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptGatewayId) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes IncomeReceipt as json. +func (o OptIncomeReceipt) Encode(e *jx.Encoder) { + if !o.Set { + return + } + o.Value.Encode(e) +} + +// Decode decodes IncomeReceipt from json. +func (o *OptIncomeReceipt) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptIncomeReceipt to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptIncomeReceipt) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptIncomeReceipt) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes IncomeReceiptAmount as json. +func (o OptIncomeReceiptAmount) Encode(e *jx.Encoder) { + if !o.Set { + return + } + o.Value.Encode(e) +} + +// Decode decodes IncomeReceiptAmount from json. +func (o *OptIncomeReceiptAmount) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptIncomeReceiptAmount to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptIncomeReceiptAmount) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptIncomeReceiptAmount) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes IncomeReceiptUrl as json. +func (o OptIncomeReceiptUrl) Encode(e *jx.Encoder) { + if !o.Set { + return + } + o.Value.Encode(e) +} + +// Decode decodes IncomeReceiptUrl from json. +func (o *OptIncomeReceiptUrl) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptIncomeReceiptUrl to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptIncomeReceiptUrl) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptIncomeReceiptUrl) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes int as json. +func (o OptInt) Encode(e *jx.Encoder) { + if !o.Set { + return + } + e.Int(int(o.Value)) +} + +// Decode decodes int from json. +func (o *OptInt) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptInt to nil") + } + o.Set = true + v, err := d.Int() + if err != nil { + return err + } + o.Value = int(v) + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptInt) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptInt) 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 { + return + } + e.Int32(int32(o.Value)) +} + +// Decode decodes int32 from json. +func (o *OptInt32) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptInt32 to nil") + } + o.Set = true + v, err := d.Int32() + if err != nil { + return err + } + o.Value = int32(v) + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptInt32) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptInt32) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes InvalidCredentialsCode as json. +func (o OptInvalidCredentialsCode) Encode(e *jx.Encoder) { + if !o.Set { + return + } + e.Str(string(o.Value)) +} + +// Decode decodes InvalidCredentialsCode from json. +func (o *OptInvalidCredentialsCode) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptInvalidCredentialsCode to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptInvalidCredentialsCode) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptInvalidCredentialsCode) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes InvalidCredentialsType as json. +func (o OptInvalidCredentialsType) Encode(e *jx.Encoder) { + if !o.Set { + return + } + e.Str(string(o.Value)) +} + +// Decode decodes InvalidCredentialsType from json. +func (o *OptInvalidCredentialsType) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptInvalidCredentialsType to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptInvalidCredentialsType) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptInvalidCredentialsType) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes InvoiceId as json. +func (o OptInvoiceId) Encode(e *jx.Encoder) { + if !o.Set { + return + } + o.Value.Encode(e) +} + +// Decode decodes InvoiceId from json. +func (o *OptInvoiceId) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptInvoiceId to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptInvoiceId) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptInvoiceId) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes InvoicingBankCardData as json. +func (o OptInvoicingBankCardData) Encode(e *jx.Encoder) { + if !o.Set { + return + } + o.Value.Encode(e) +} + +// Decode decodes InvoicingBankCardData from json. +func (o *OptInvoicingBankCardData) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptInvoicingBankCardData to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptInvoicingBankCardData) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptInvoicingBankCardData) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes Kbk as json. +func (o OptKbk) Encode(e *jx.Encoder) { + if !o.Set { + return + } + o.Value.Encode(e) +} + +// Decode decodes Kbk from json. +func (o *OptKbk) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptKbk to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptKbk) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptKbk) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes Locale as json. +func (o OptLocale) Encode(e *jx.Encoder) { + if !o.Set { + return + } + e.Str(string(o.Value)) +} + +// Decode decodes Locale from json. +func (o *OptLocale) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptLocale to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptLocale) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptLocale) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes MarkCodeInfo as json. +func (o OptMarkCodeInfo) Encode(e *jx.Encoder) { + if !o.Set { + return + } + o.Value.Encode(e) +} + +// Decode decodes MarkCodeInfo from json. +func (o *OptMarkCodeInfo) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptMarkCodeInfo to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptMarkCodeInfo) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptMarkCodeInfo) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes MarkMode as json. +func (o OptMarkMode) Encode(e *jx.Encoder) { + if !o.Set { + return + } + o.Value.Encode(e) +} + +// Decode decodes MarkMode from json. +func (o *OptMarkMode) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptMarkMode to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptMarkMode) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptMarkMode) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes MarkQuantity as json. +func (o OptMarkQuantity) Encode(e *jx.Encoder) { + if !o.Set { + return + } + o.Value.Encode(e) +} + +// Decode decodes MarkQuantity from json. +func (o *OptMarkQuantity) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptMarkQuantity to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptMarkQuantity) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptMarkQuantity) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes MePayoutBalance as json. +func (o OptMePayoutBalance) Encode(e *jx.Encoder) { + if !o.Set { + return + } + o.Value.Encode(e) +} + +// Decode decodes MePayoutBalance from json. +func (o *OptMePayoutBalance) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptMePayoutBalance to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptMePayoutBalance) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptMePayoutBalance) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes Metadata as json. +func (o OptMetadata) Encode(e *jx.Encoder) { + if !o.Set { + return + } + o.Value.Encode(e) +} + +// Decode decodes Metadata from json. +func (o *OptMetadata) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptMetadata to nil") + } + o.Set = true + o.Value = make(Metadata) + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptMetadata) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptMetadata) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes MiddleName as json. +func (o OptMiddleName) Encode(e *jx.Encoder) { + if !o.Set { + return + } + o.Value.Encode(e) +} + +// Decode decodes MiddleName from json. +func (o *OptMiddleName) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptMiddleName to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptMiddleName) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptMiddleName) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes NextCursor as json. +func (o OptNextCursor) Encode(e *jx.Encoder) { + if !o.Set { + return + } + o.Value.Encode(e) +} + +// Decode decodes NextCursor from json. +func (o *OptNextCursor) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptNextCursor to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptNextCursor) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptNextCursor) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes NotFoundCode as json. +func (o OptNotFoundCode) Encode(e *jx.Encoder) { + if !o.Set { + return + } + e.Str(string(o.Value)) +} + +// Decode decodes NotFoundCode from json. +func (o *OptNotFoundCode) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptNotFoundCode to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptNotFoundCode) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptNotFoundCode) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes NotFoundType as json. +func (o OptNotFoundType) Encode(e *jx.Encoder) { + if !o.Set { + return + } + e.Str(string(o.Value)) +} + +// Decode decodes NotFoundType from json. +func (o *OptNotFoundType) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptNotFoundType to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptNotFoundType) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptNotFoundType) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes NpdIncomeReceiptId as json. +func (o OptNpdIncomeReceiptId) Encode(e *jx.Encoder) { + if !o.Set { + return + } + o.Value.Encode(e) +} + +// Decode decodes NpdIncomeReceiptId from json. +func (o *OptNpdIncomeReceiptId) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptNpdIncomeReceiptId to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptNpdIncomeReceiptId) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptNpdIncomeReceiptId) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes Oktmo as json. +func (o OptOktmo) Encode(e *jx.Encoder) { + if !o.Set { + return + } + o.Value.Encode(e) +} + +// Decode decodes Oktmo from json. +func (o *OptOktmo) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptOktmo to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptOktmo) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptOktmo) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PaymentCancellationDetails as json. +func (o OptPaymentCancellationDetails) Encode(e *jx.Encoder) { + if !o.Set { + return + } + o.Value.Encode(e) +} + +// Decode decodes PaymentCancellationDetails from json. +func (o *OptPaymentCancellationDetails) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptPaymentCancellationDetails to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptPaymentCancellationDetails) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptPaymentCancellationDetails) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PaymentConfirmation as json. +func (o OptPaymentConfirmation) Encode(e *jx.Encoder) { + if !o.Set { + return + } + o.Value.Encode(e) +} + +// Decode decodes PaymentConfirmation from json. +func (o *OptPaymentConfirmation) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptPaymentConfirmation to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptPaymentConfirmation) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptPaymentConfirmation) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PaymentDeal as json. +func (o OptPaymentDeal) Encode(e *jx.Encoder) { + if !o.Set { + return + } + o.Value.Encode(e) +} + +// Decode decodes PaymentDeal from json. +func (o *OptPaymentDeal) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptPaymentDeal to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptPaymentDeal) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptPaymentDeal) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PaymentId as json. +func (o OptPaymentId) Encode(e *jx.Encoder) { + if !o.Set { + return + } + o.Value.Encode(e) +} + +// Decode decodes PaymentId from json. +func (o *OptPaymentId) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptPaymentId to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptPaymentId) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptPaymentId) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PaymentIncomeAmount as json. +func (o OptPaymentIncomeAmount) Encode(e *jx.Encoder) { + if !o.Set { + return + } + o.Value.Encode(e) +} + +// Decode decodes PaymentIncomeAmount from json. +func (o *OptPaymentIncomeAmount) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptPaymentIncomeAmount to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptPaymentIncomeAmount) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptPaymentIncomeAmount) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PaymentInvoiceDetails as json. +func (o OptPaymentInvoiceDetails) Encode(e *jx.Encoder) { + if !o.Set { + return + } + o.Value.Encode(e) +} + +// Decode decodes PaymentInvoiceDetails from json. +func (o *OptPaymentInvoiceDetails) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptPaymentInvoiceDetails to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptPaymentInvoiceDetails) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptPaymentInvoiceDetails) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PaymentMethodElectronicCertificateCard as json. +func (o OptPaymentMethodElectronicCertificateCard) Encode(e *jx.Encoder) { + if !o.Set { + return + } + o.Value.Encode(e) +} + +// Decode decodes PaymentMethodElectronicCertificateCard from json. +func (o *OptPaymentMethodElectronicCertificateCard) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptPaymentMethodElectronicCertificateCard to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptPaymentMethodElectronicCertificateCard) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptPaymentMethodElectronicCertificateCard) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PaymentMethodId as json. +func (o OptPaymentMethodId) Encode(e *jx.Encoder) { + if !o.Set { + return + } + o.Value.Encode(e) +} + +// Decode decodes PaymentMethodId from json. +func (o *OptPaymentMethodId) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptPaymentMethodId to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptPaymentMethodId) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptPaymentMethodId) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PaymentMethodSberLoanDiscountAmount as json. +func (o OptPaymentMethodSberLoanDiscountAmount) Encode(e *jx.Encoder) { + if !o.Set { + return + } + o.Value.Encode(e) +} + +// Decode decodes PaymentMethodSberLoanDiscountAmount from json. +func (o *OptPaymentMethodSberLoanDiscountAmount) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptPaymentMethodSberLoanDiscountAmount to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptPaymentMethodSberLoanDiscountAmount) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptPaymentMethodSberLoanDiscountAmount) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PaymentMethodTitle as json. +func (o OptPaymentMethodTitle) Encode(e *jx.Encoder) { + if !o.Set { + return + } + o.Value.Encode(e) +} + +// Decode decodes PaymentMethodTitle from json. +func (o *OptPaymentMethodTitle) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptPaymentMethodTitle to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptPaymentMethodTitle) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptPaymentMethodTitle) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PaymentMethodType as json. +func (o OptPaymentMethodType) Encode(e *jx.Encoder) { + if !o.Set { + return + } + e.Str(string(o.Value)) +} + +// Decode decodes PaymentMethodType from json. +func (o *OptPaymentMethodType) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptPaymentMethodType to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptPaymentMethodType) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptPaymentMethodType) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PaymentMethodsConfirmationDataRedirect as json. +func (o OptPaymentMethodsConfirmationDataRedirect) Encode(e *jx.Encoder) { + if !o.Set { + return + } + o.Value.Encode(e) +} + +// Decode decodes PaymentMethodsConfirmationDataRedirect from json. +func (o *OptPaymentMethodsConfirmationDataRedirect) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptPaymentMethodsConfirmationDataRedirect to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptPaymentMethodsConfirmationDataRedirect) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptPaymentMethodsConfirmationDataRedirect) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PaymentPaymentMethod as json. +func (o OptPaymentPaymentMethod) Encode(e *jx.Encoder) { + if !o.Set { + return + } + o.Value.Encode(e) +} + +// Decode decodes PaymentPaymentMethod from json. +func (o *OptPaymentPaymentMethod) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptPaymentPaymentMethod to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptPaymentPaymentMethod) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptPaymentPaymentMethod) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PaymentPeriod as json. +func (o OptPaymentPeriod) Encode(e *jx.Encoder) { + if !o.Set { + return + } + o.Value.Encode(e) +} + +// Decode decodes PaymentPeriod from json. +func (o *OptPaymentPeriod) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptPaymentPeriod to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptPaymentPeriod) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptPaymentPeriod) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PaymentReceiptRegistration as json. +func (o OptPaymentReceiptRegistration) Encode(e *jx.Encoder) { + if !o.Set { + return + } + e.Str(string(o.Value)) +} + +// Decode decodes PaymentReceiptRegistration from json. +func (o *OptPaymentReceiptRegistration) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptPaymentReceiptRegistration to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptPaymentReceiptRegistration) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptPaymentReceiptRegistration) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PaymentRefundedAmount as json. +func (o OptPaymentRefundedAmount) Encode(e *jx.Encoder) { + if !o.Set { + return + } + o.Value.Encode(e) +} + +// Decode decodes PaymentRefundedAmount from json. +func (o *OptPaymentRefundedAmount) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptPaymentRefundedAmount to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptPaymentRefundedAmount) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptPaymentRefundedAmount) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PaymentToken as json. +func (o OptPaymentToken) Encode(e *jx.Encoder) { + if !o.Set { + return + } + o.Value.Encode(e) +} + +// Decode decodes PaymentToken from json. +func (o *OptPaymentToken) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptPaymentToken to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptPaymentToken) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptPaymentToken) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PaymentsPaymentIDCapturePostReqAirline as json. +func (o OptPaymentsPaymentIDCapturePostReqAirline) Encode(e *jx.Encoder) { + if !o.Set { + return + } + o.Value.Encode(e) +} + +// Decode decodes PaymentsPaymentIDCapturePostReqAirline from json. +func (o *OptPaymentsPaymentIDCapturePostReqAirline) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptPaymentsPaymentIDCapturePostReqAirline to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptPaymentsPaymentIDCapturePostReqAirline) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptPaymentsPaymentIDCapturePostReqAirline) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PaymentsPaymentIDCapturePostReqAmount as json. +func (o OptPaymentsPaymentIDCapturePostReqAmount) Encode(e *jx.Encoder) { + if !o.Set { + return + } + o.Value.Encode(e) +} + +// Decode decodes PaymentsPaymentIDCapturePostReqAmount from json. +func (o *OptPaymentsPaymentIDCapturePostReqAmount) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptPaymentsPaymentIDCapturePostReqAmount to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptPaymentsPaymentIDCapturePostReqAmount) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptPaymentsPaymentIDCapturePostReqAmount) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PaymentsPaymentIDCapturePostReqDeal as json. +func (o OptPaymentsPaymentIDCapturePostReqDeal) Encode(e *jx.Encoder) { + if !o.Set { + return + } + o.Value.Encode(e) +} + +// Decode decodes PaymentsPaymentIDCapturePostReqDeal from json. +func (o *OptPaymentsPaymentIDCapturePostReqDeal) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptPaymentsPaymentIDCapturePostReqDeal to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptPaymentsPaymentIDCapturePostReqDeal) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptPaymentsPaymentIDCapturePostReqDeal) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PaymentsPostReqAirline as json. +func (o OptPaymentsPostReqAirline) Encode(e *jx.Encoder) { + if !o.Set { + return + } + o.Value.Encode(e) +} + +// Decode decodes PaymentsPostReqAirline from json. +func (o *OptPaymentsPostReqAirline) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptPaymentsPostReqAirline to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptPaymentsPostReqAirline) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptPaymentsPostReqAirline) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PaymentsPostReqConfirmation as json. +func (o OptPaymentsPostReqConfirmation) Encode(e *jx.Encoder) { + if !o.Set { + return + } + o.Value.Encode(e) +} + +// Decode decodes PaymentsPostReqConfirmation from json. +func (o *OptPaymentsPostReqConfirmation) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptPaymentsPostReqConfirmation to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptPaymentsPostReqConfirmation) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptPaymentsPostReqConfirmation) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PaymentsPostReqDeal as json. +func (o OptPaymentsPostReqDeal) Encode(e *jx.Encoder) { + if !o.Set { + return + } + o.Value.Encode(e) +} + +// Decode decodes PaymentsPostReqDeal from json. +func (o *OptPaymentsPostReqDeal) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptPaymentsPostReqDeal to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptPaymentsPostReqDeal) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptPaymentsPostReqDeal) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PaymentsPostReqPaymentMethodData as json. +func (o OptPaymentsPostReqPaymentMethodData) Encode(e *jx.Encoder) { + if !o.Set { + return + } + o.Value.Encode(e) +} + +// Decode decodes PaymentsPostReqPaymentMethodData from json. +func (o *OptPaymentsPostReqPaymentMethodData) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptPaymentsPostReqPaymentMethodData to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptPaymentsPostReqPaymentMethodData) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptPaymentsPostReqPaymentMethodData) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PaymentsPostReqPaymentOrder as json. +func (o OptPaymentsPostReqPaymentOrder) Encode(e *jx.Encoder) { + if !o.Set { + return + } + o.Value.Encode(e) +} + +// Decode decodes PaymentsPostReqPaymentOrder from json. +func (o *OptPaymentsPostReqPaymentOrder) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptPaymentsPostReqPaymentOrder to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptPaymentsPostReqPaymentOrder) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptPaymentsPostReqPaymentOrder) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PaymentsPostReqReceiver as json. +func (o OptPaymentsPostReqReceiver) Encode(e *jx.Encoder) { + if !o.Set { + return + } + o.Value.Encode(e) +} + +// Decode decodes PaymentsPostReqReceiver from json. +func (o *OptPaymentsPostReqReceiver) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptPaymentsPostReqReceiver to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptPaymentsPostReqReceiver) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptPaymentsPostReqReceiver) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PayoutCancellationDetails as json. +func (o OptPayoutCancellationDetails) Encode(e *jx.Encoder) { + if !o.Set { + return + } + o.Value.Encode(e) +} + +// Decode decodes PayoutCancellationDetails from json. +func (o *OptPayoutCancellationDetails) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptPayoutCancellationDetails to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptPayoutCancellationDetails) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptPayoutCancellationDetails) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PayoutCardData as json. +func (o OptPayoutCardData) Encode(e *jx.Encoder) { + if !o.Set { + return + } + o.Value.Encode(e) +} + +// Decode decodes PayoutCardData from json. +func (o *OptPayoutCardData) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptPayoutCardData to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptPayoutCardData) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptPayoutCardData) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PayoutDeal as json. +func (o OptPayoutDeal) Encode(e *jx.Encoder) { + if !o.Set { + return + } + o.Value.Encode(e) +} + +// Decode decodes PayoutDeal from json. +func (o *OptPayoutDeal) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptPayoutDeal to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptPayoutDeal) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptPayoutDeal) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PayoutDealInfo as json. +func (o OptPayoutDealInfo) Encode(e *jx.Encoder) { + if !o.Set { + return + } + o.Value.Encode(e) +} + +// Decode decodes PayoutDealInfo from json. +func (o *OptPayoutDealInfo) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptPayoutDealInfo to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptPayoutDealInfo) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptPayoutDealInfo) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PayoutRequestPayoutDestinationData as json. +func (o OptPayoutRequestPayoutDestinationData) Encode(e *jx.Encoder) { + if !o.Set { + return + } + o.Value.Encode(e) +} + +// Decode decodes PayoutRequestPayoutDestinationData from json. +func (o *OptPayoutRequestPayoutDestinationData) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptPayoutRequestPayoutDestinationData to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptPayoutRequestPayoutDestinationData) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptPayoutRequestPayoutDestinationData) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PayoutSelfEmployed as json. +func (o OptPayoutSelfEmployed) Encode(e *jx.Encoder) { + if !o.Set { + return + } + o.Value.Encode(e) +} + +// Decode decodes PayoutSelfEmployed from json. +func (o *OptPayoutSelfEmployed) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptPayoutSelfEmployed to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptPayoutSelfEmployed) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptPayoutSelfEmployed) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PersonalDataCancellationDetails as json. +func (o OptPersonalDataCancellationDetails) Encode(e *jx.Encoder) { + if !o.Set { + return + } + o.Value.Encode(e) +} + +// Decode decodes PersonalDataCancellationDetails from json. +func (o *OptPersonalDataCancellationDetails) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptPersonalDataCancellationDetails to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptPersonalDataCancellationDetails) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptPersonalDataCancellationDetails) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes ReceiptData as json. +func (o OptReceiptData) Encode(e *jx.Encoder) { + if !o.Set { + return + } + o.Value.Encode(e) +} + +// Decode decodes ReceiptData from json. +func (o *OptReceiptData) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptReceiptData to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptReceiptData) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptReceiptData) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes ReceiptDataCustomer as json. +func (o OptReceiptDataCustomer) Encode(e *jx.Encoder) { + if !o.Set { + return + } + o.Value.Encode(e) +} + +// Decode decodes ReceiptDataCustomer from json. +func (o *OptReceiptDataCustomer) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptReceiptDataCustomer to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptReceiptDataCustomer) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptReceiptDataCustomer) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes ReceiptDataReceiptOperationalDetails as json. +func (o OptReceiptDataReceiptOperationalDetails) Encode(e *jx.Encoder) { + if !o.Set { + return + } + o.Value.Encode(e) +} + +// Decode decodes ReceiptDataReceiptOperationalDetails from json. +func (o *OptReceiptDataReceiptOperationalDetails) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptReceiptDataReceiptOperationalDetails to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptReceiptDataReceiptOperationalDetails) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptReceiptDataReceiptOperationalDetails) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes ReceiptItemAgentType as json. +func (o OptReceiptItemAgentType) Encode(e *jx.Encoder) { + if !o.Set { + return + } + e.Str(string(o.Value)) +} + +// Decode decodes ReceiptItemAgentType from json. +func (o *OptReceiptItemAgentType) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptReceiptItemAgentType to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptReceiptItemAgentType) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptReceiptItemAgentType) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes ReceiptItemCountryOfOriginCode as json. +func (o OptReceiptItemCountryOfOriginCode) Encode(e *jx.Encoder) { + if !o.Set { + return + } + o.Value.Encode(e) +} + +// Decode decodes ReceiptItemCountryOfOriginCode from json. +func (o *OptReceiptItemCountryOfOriginCode) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptReceiptItemCountryOfOriginCode to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptReceiptItemCountryOfOriginCode) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptReceiptItemCountryOfOriginCode) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes ReceiptItemCustomsDeclarationNumber as json. +func (o OptReceiptItemCustomsDeclarationNumber) Encode(e *jx.Encoder) { + if !o.Set { + return + } + o.Value.Encode(e) +} + +// Decode decodes ReceiptItemCustomsDeclarationNumber from json. +func (o *OptReceiptItemCustomsDeclarationNumber) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptReceiptItemCustomsDeclarationNumber to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptReceiptItemCustomsDeclarationNumber) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptReceiptItemCustomsDeclarationNumber) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes ReceiptItemExcise as json. +func (o OptReceiptItemExcise) Encode(e *jx.Encoder) { + if !o.Set { + return + } + o.Value.Encode(e) +} + +// Decode decodes ReceiptItemExcise from json. +func (o *OptReceiptItemExcise) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptReceiptItemExcise to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptReceiptItemExcise) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptReceiptItemExcise) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes ReceiptItemMeasure as json. +func (o OptReceiptItemMeasure) Encode(e *jx.Encoder) { + if !o.Set { + return + } + e.Str(string(o.Value)) +} + +// Decode decodes ReceiptItemMeasure from json. +func (o *OptReceiptItemMeasure) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptReceiptItemMeasure to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptReceiptItemMeasure) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptReceiptItemMeasure) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes ReceiptItemPaymentMode as json. +func (o OptReceiptItemPaymentMode) Encode(e *jx.Encoder) { + if !o.Set { + return + } + e.Str(string(o.Value)) +} + +// Decode decodes ReceiptItemPaymentMode from json. +func (o *OptReceiptItemPaymentMode) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptReceiptItemPaymentMode to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptReceiptItemPaymentMode) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptReceiptItemPaymentMode) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes ReceiptItemPaymentSubject as json. +func (o OptReceiptItemPaymentSubject) Encode(e *jx.Encoder) { + if !o.Set { + return + } + e.Str(string(o.Value)) +} + +// Decode decodes ReceiptItemPaymentSubject from json. +func (o *OptReceiptItemPaymentSubject) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptReceiptItemPaymentSubject to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptReceiptItemPaymentSubject) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptReceiptItemPaymentSubject) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes ReceiptItemPlannedStatus as json. +func (o OptReceiptItemPlannedStatus) Encode(e *jx.Encoder) { + if !o.Set { + return + } + o.Value.Encode(e) +} + +// Decode decodes ReceiptItemPlannedStatus from json. +func (o *OptReceiptItemPlannedStatus) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptReceiptItemPlannedStatus to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptReceiptItemPlannedStatus) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptReceiptItemPlannedStatus) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes ReceiptItemProductCode as json. +func (o OptReceiptItemProductCode) Encode(e *jx.Encoder) { + if !o.Set { + return + } + o.Value.Encode(e) +} + +// Decode decodes ReceiptItemProductCode from json. +func (o *OptReceiptItemProductCode) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptReceiptItemProductCode to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptReceiptItemProductCode) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptReceiptItemProductCode) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes ReceiptItemSupplierWithInn as json. +func (o OptReceiptItemSupplierWithInn) Encode(e *jx.Encoder) { + if !o.Set { + return + } + o.Value.Encode(e) +} + +// Decode decodes ReceiptItemSupplierWithInn from json. +func (o *OptReceiptItemSupplierWithInn) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptReceiptItemSupplierWithInn to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptReceiptItemSupplierWithInn) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptReceiptItemSupplierWithInn) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes ReceiptReceiptOperationalDetails as json. +func (o OptReceiptReceiptOperationalDetails) Encode(e *jx.Encoder) { + if !o.Set { + return + } + o.Value.Encode(e) +} + +// Decode decodes ReceiptReceiptOperationalDetails from json. +func (o *OptReceiptReceiptOperationalDetails) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptReceiptReceiptOperationalDetails to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptReceiptReceiptOperationalDetails) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptReceiptReceiptOperationalDetails) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes Recipient as json. +func (o OptRecipient) Encode(e *jx.Encoder) { + if !o.Set { + return + } + o.Value.Encode(e) +} + +// Decode decodes Recipient from json. +func (o *OptRecipient) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptRecipient to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptRecipient) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptRecipient) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes RefundAuthorizationDetails as json. +func (o OptRefundAuthorizationDetails) Encode(e *jx.Encoder) { + if !o.Set { + return + } + o.Value.Encode(e) +} + +// Decode decodes RefundAuthorizationDetails from json. +func (o *OptRefundAuthorizationDetails) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptRefundAuthorizationDetails to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptRefundAuthorizationDetails) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptRefundAuthorizationDetails) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes RefundCancellationDetails as json. +func (o OptRefundCancellationDetails) Encode(e *jx.Encoder) { + if !o.Set { + return + } + o.Value.Encode(e) +} + +// Decode decodes RefundCancellationDetails from json. +func (o *OptRefundCancellationDetails) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptRefundCancellationDetails to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptRefundCancellationDetails) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptRefundCancellationDetails) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes RefundDealData as json. +func (o OptRefundDealData) Encode(e *jx.Encoder) { + if !o.Set { + return + } + o.Value.Encode(e) +} + +// Decode decodes RefundDealData from json. +func (o *OptRefundDealData) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptRefundDealData to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptRefundDealData) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptRefundDealData) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes RefundDealInfo as json. +func (o OptRefundDealInfo) Encode(e *jx.Encoder) { + if !o.Set { + return + } + o.Value.Encode(e) +} + +// Decode decodes RefundDealInfo from json. +func (o *OptRefundDealInfo) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptRefundDealInfo to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptRefundDealInfo) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptRefundDealInfo) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes RefundReceiptRegistration as json. +func (o OptRefundReceiptRegistration) Encode(e *jx.Encoder) { + if !o.Set { + return + } + e.Str(string(o.Value)) +} + +// Decode decodes RefundReceiptRegistration from json. +func (o *OptRefundReceiptRegistration) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptRefundReceiptRegistration to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptRefundReceiptRegistration) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptRefundReceiptRegistration) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes RefundRefundMethod as json. +func (o OptRefundRefundMethod) Encode(e *jx.Encoder) { + if !o.Set { + return + } + o.Value.Encode(e) +} + +// Decode decodes RefundRefundMethod from json. +func (o *OptRefundRefundMethod) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptRefundRefundMethod to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptRefundRefundMethod) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptRefundRefundMethod) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes RefundSourcesDataPlatformFeeAmount as json. +func (o OptRefundSourcesDataPlatformFeeAmount) Encode(e *jx.Encoder) { + if !o.Set { + return + } + o.Value.Encode(e) +} + +// Decode decodes RefundSourcesDataPlatformFeeAmount from json. +func (o *OptRefundSourcesDataPlatformFeeAmount) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptRefundSourcesDataPlatformFeeAmount to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptRefundSourcesDataPlatformFeeAmount) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptRefundSourcesDataPlatformFeeAmount) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes RefundsPostReqRefundMethodData as json. +func (o OptRefundsPostReqRefundMethodData) Encode(e *jx.Encoder) { + if !o.Set { + return + } + o.Value.Encode(e) +} + +// Decode decodes RefundsPostReqRefundMethodData from json. +func (o *OptRefundsPostReqRefundMethodData) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptRefundsPostReqRefundMethodData to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptRefundsPostReqRefundMethodData) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptRefundsPostReqRefundMethodData) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes ReturnUrl as json. +func (o OptReturnUrl) Encode(e *jx.Encoder) { + if !o.Set { + return + } + o.Value.Encode(e) +} + +// Decode decodes ReturnUrl from json. +func (o *OptReturnUrl) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptReturnUrl to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptReturnUrl) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptReturnUrl) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes Rrn as json. +func (o OptRrn) Encode(e *jx.Encoder) { + if !o.Set { + return + } + o.Value.Encode(e) +} + +// Decode decodes Rrn from json. +func (o *OptRrn) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptRrn to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptRrn) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptRrn) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes SavePaymentMethodAttribute as json. +func (o OptSavePaymentMethodAttribute) Encode(e *jx.Encoder) { + if !o.Set { + return + } + o.Value.Encode(e) +} + +// Decode decodes SavePaymentMethodAttribute from json. +func (o *OptSavePaymentMethodAttribute) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptSavePaymentMethodAttribute to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptSavePaymentMethodAttribute) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptSavePaymentMethodAttribute) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes SavePaymentMethodBankCardConfirmation as json. +func (o OptSavePaymentMethodBankCardConfirmation) Encode(e *jx.Encoder) { + if !o.Set { + return + } + o.Value.Encode(e) +} + +// Decode decodes SavePaymentMethodBankCardConfirmation from json. +func (o *OptSavePaymentMethodBankCardConfirmation) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptSavePaymentMethodBankCardConfirmation to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptSavePaymentMethodBankCardConfirmation) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptSavePaymentMethodBankCardConfirmation) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes SavePaymentMethodDataBankCardHolder as json. +func (o OptSavePaymentMethodDataBankCardHolder) Encode(e *jx.Encoder) { + if !o.Set { + return + } + o.Value.Encode(e) +} + +// Decode decodes SavePaymentMethodDataBankCardHolder from json. +func (o *OptSavePaymentMethodDataBankCardHolder) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptSavePaymentMethodDataBankCardHolder to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptSavePaymentMethodDataBankCardHolder) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptSavePaymentMethodDataBankCardHolder) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes SbpPayerBankDetails as json. +func (o OptSbpPayerBankDetails) Encode(e *jx.Encoder) { + if !o.Set { + return + } + o.Value.Encode(e) +} + +// Decode decodes SbpPayerBankDetails from json. +func (o *OptSbpPayerBankDetails) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptSbpPayerBankDetails to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptSbpPayerBankDetails) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptSbpPayerBankDetails) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes string as json. +func (o OptString) Encode(e *jx.Encoder) { + if !o.Set { + return + } + e.Str(string(o.Value)) +} + +// Decode decodes string from json. +func (o *OptString) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptString to nil") + } + o.Set = true + v, err := d.Str() + if err != nil { + return err + } + o.Value = string(v) + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptString) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptString) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes TaxSystemCode as json. +func (o OptTaxSystemCode) Encode(e *jx.Encoder) { + if !o.Set { + return + } + o.Value.Encode(e) +} + +// Decode decodes TaxSystemCode from json. +func (o *OptTaxSystemCode) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptTaxSystemCode to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptTaxSystemCode) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptTaxSystemCode) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes Test as json. +func (o OptTest) Encode(e *jx.Encoder) { + if !o.Set { + return + } + o.Value.Encode(e) +} + +// Decode decodes Test from json. +func (o *OptTest) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptTest to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptTest) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptTest) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes TooManyRequestsCode as json. +func (o OptTooManyRequestsCode) Encode(e *jx.Encoder) { + if !o.Set { + return + } + e.Str(string(o.Value)) +} + +// Decode decodes TooManyRequestsCode from json. +func (o *OptTooManyRequestsCode) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptTooManyRequestsCode to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptTooManyRequestsCode) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptTooManyRequestsCode) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes TooManyRequestsType as json. +func (o OptTooManyRequestsType) Encode(e *jx.Encoder) { + if !o.Set { + return + } + e.Str(string(o.Value)) +} + +// Decode decodes TooManyRequestsType from json. +func (o *OptTooManyRequestsType) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptTooManyRequestsType to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptTooManyRequestsType) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptTooManyRequestsType) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes TransferDataPaymentPlatformFeeAmount as json. +func (o OptTransferDataPaymentPlatformFeeAmount) Encode(e *jx.Encoder) { + if !o.Set { + return + } + o.Value.Encode(e) +} + +// Decode decodes TransferDataPaymentPlatformFeeAmount from json. +func (o *OptTransferDataPaymentPlatformFeeAmount) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptTransferDataPaymentPlatformFeeAmount to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptTransferDataPaymentPlatformFeeAmount) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptTransferDataPaymentPlatformFeeAmount) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes TransferDataPlatformFeeAmount as json. +func (o OptTransferDataPlatformFeeAmount) Encode(e *jx.Encoder) { + if !o.Set { + return + } + o.Value.Encode(e) +} + +// Decode decodes TransferDataPlatformFeeAmount from json. +func (o *OptTransferDataPlatformFeeAmount) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptTransferDataPlatformFeeAmount to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptTransferDataPlatformFeeAmount) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptTransferDataPlatformFeeAmount) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes TransferPlatformFeeAmount as json. +func (o OptTransferPlatformFeeAmount) Encode(e *jx.Encoder) { + if !o.Set { + return + } + o.Value.Encode(e) +} + +// Decode decodes TransferPlatformFeeAmount from json. +func (o *OptTransferPlatformFeeAmount) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptTransferPlatformFeeAmount to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptTransferPlatformFeeAmount) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptTransferPlatformFeeAmount) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *Payment) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *Payment) encodeFields(e *jx.Encoder) { + { + e.FieldStart("id") + s.ID.Encode(e) + } + { + e.FieldStart("status") + s.Status.Encode(e) + } + { + e.FieldStart("amount") + s.Amount.Encode(e) + } + { + if s.IncomeAmount.Set { + e.FieldStart("income_amount") + s.IncomeAmount.Encode(e) + } + } + { + if s.Description.Set { + e.FieldStart("description") + s.Description.Encode(e) + } + } + { + e.FieldStart("recipient") + s.Recipient.Encode(e) + } + { + if s.PaymentMethod.Set { + e.FieldStart("payment_method") + s.PaymentMethod.Encode(e) + } + } + { + if s.CapturedAt.Set { + e.FieldStart("captured_at") + s.CapturedAt.Encode(e, json.EncodeDateTime) + } + } + { + e.FieldStart("created_at") + json.EncodeDateTime(e, s.CreatedAt) + } + { + if s.ExpiresAt.Set { + e.FieldStart("expires_at") + s.ExpiresAt.Encode(e, json.EncodeDateTime) + } + } + { + if s.Confirmation.Set { + e.FieldStart("confirmation") + s.Confirmation.Encode(e) + } + } + { + e.FieldStart("test") + s.Test.Encode(e) + } + { + if s.RefundedAmount.Set { + e.FieldStart("refunded_amount") + s.RefundedAmount.Encode(e) + } + } + { + e.FieldStart("paid") + e.Bool(s.Paid) + } + { + e.FieldStart("refundable") + e.Bool(s.Refundable) + } + { + if s.ReceiptRegistration.Set { + e.FieldStart("receipt_registration") + s.ReceiptRegistration.Encode(e) + } + } + { + if s.Metadata.Set { + e.FieldStart("metadata") + s.Metadata.Encode(e) + } + } + { + if s.CancellationDetails.Set { + e.FieldStart("cancellation_details") + s.CancellationDetails.Encode(e) + } + } + { + if s.AuthorizationDetails.Set { + e.FieldStart("authorization_details") + s.AuthorizationDetails.Encode(e) + } + } + { + if s.Transfers != nil { + e.FieldStart("transfers") + e.ArrStart() + for _, elem := range s.Transfers { + elem.Encode(e) + } + e.ArrEnd() + } + } + { + if s.Deal.Set { + e.FieldStart("deal") + s.Deal.Encode(e) + } + } + { + if s.MerchantCustomerID.Set { + e.FieldStart("merchant_customer_id") + s.MerchantCustomerID.Encode(e) + } + } + { + if s.InvoiceDetails.Set { + e.FieldStart("invoice_details") + s.InvoiceDetails.Encode(e) + } + } +} + +var jsonFieldsNameOfPayment = [23]string{ + 0: "id", + 1: "status", + 2: "amount", + 3: "income_amount", + 4: "description", + 5: "recipient", + 6: "payment_method", + 7: "captured_at", + 8: "created_at", + 9: "expires_at", + 10: "confirmation", + 11: "test", + 12: "refunded_amount", + 13: "paid", + 14: "refundable", + 15: "receipt_registration", + 16: "metadata", + 17: "cancellation_details", + 18: "authorization_details", + 19: "transfers", + 20: "deal", + 21: "merchant_customer_id", + 22: "invoice_details", +} + +// Decode decodes Payment from json. +func (s *Payment) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode Payment to nil") + } + var requiredBitSet [3]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "id": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + if err := s.ID.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"id\"") + } + case "status": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + if err := s.Status.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"status\"") + } + case "amount": + requiredBitSet[0] |= 1 << 2 + if err := func() error { + if err := s.Amount.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"amount\"") + } + case "income_amount": + if err := func() error { + s.IncomeAmount.Reset() + if err := s.IncomeAmount.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"income_amount\"") + } + case "description": + if err := func() error { + s.Description.Reset() + if err := s.Description.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"description\"") + } + case "recipient": + requiredBitSet[0] |= 1 << 5 + if err := func() error { + if err := s.Recipient.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"recipient\"") + } + case "payment_method": + if err := func() error { + s.PaymentMethod.Reset() + if err := s.PaymentMethod.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"payment_method\"") + } + case "captured_at": + if err := func() error { + s.CapturedAt.Reset() + if err := s.CapturedAt.Decode(d, json.DecodeDateTime); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"captured_at\"") + } + case "created_at": + requiredBitSet[1] |= 1 << 0 + if err := func() error { + v, err := json.DecodeDateTime(d) + s.CreatedAt = v + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"created_at\"") + } + case "expires_at": + if err := func() error { + s.ExpiresAt.Reset() + if err := s.ExpiresAt.Decode(d, json.DecodeDateTime); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"expires_at\"") + } + case "confirmation": + if err := func() error { + s.Confirmation.Reset() + if err := s.Confirmation.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"confirmation\"") + } + case "test": + requiredBitSet[1] |= 1 << 3 + if err := func() error { + if err := s.Test.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"test\"") + } + case "refunded_amount": + if err := func() error { + s.RefundedAmount.Reset() + if err := s.RefundedAmount.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"refunded_amount\"") + } + case "paid": + requiredBitSet[1] |= 1 << 5 + if err := func() error { + v, err := d.Bool() + s.Paid = bool(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"paid\"") + } + case "refundable": + requiredBitSet[1] |= 1 << 6 + if err := func() error { + v, err := d.Bool() + s.Refundable = bool(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"refundable\"") + } + case "receipt_registration": + if err := func() error { + s.ReceiptRegistration.Reset() + if err := s.ReceiptRegistration.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"receipt_registration\"") + } + case "metadata": + if err := func() error { + s.Metadata.Reset() + if err := s.Metadata.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"metadata\"") + } + case "cancellation_details": + if err := func() error { + s.CancellationDetails.Reset() + if err := s.CancellationDetails.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"cancellation_details\"") + } + case "authorization_details": + if err := func() error { + s.AuthorizationDetails.Reset() + if err := s.AuthorizationDetails.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"authorization_details\"") + } + case "transfers": + if err := func() error { + s.Transfers = make([]Transfer, 0) + if err := d.Arr(func(d *jx.Decoder) error { + var elem Transfer + if err := elem.Decode(d); err != nil { + return err + } + s.Transfers = append(s.Transfers, elem) + return nil + }); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"transfers\"") + } + case "deal": + if err := func() error { + s.Deal.Reset() + if err := s.Deal.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"deal\"") + } + case "merchant_customer_id": + if err := func() error { + s.MerchantCustomerID.Reset() + if err := s.MerchantCustomerID.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"merchant_customer_id\"") + } + case "invoice_details": + if err := func() error { + s.InvoiceDetails.Reset() + if err := s.InvoiceDetails.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"invoice_details\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode Payment") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [3]uint8{ + 0b00100111, + 0b01101001, + 0b00000000, + } { + 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(jsonFieldsNameOfPayment) { + name = jsonFieldsNameOfPayment[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 *Payment) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *Payment) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *PaymentAmount) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *PaymentAmount) encodeFields(e *jx.Encoder) { + { + e.FieldStart("value") + e.Str(s.Value) + } + { + e.FieldStart("currency") + s.Currency.Encode(e) + } +} + +var jsonFieldsNameOfPaymentAmount = [2]string{ + 0: "value", + 1: "currency", +} + +// Decode decodes PaymentAmount from json. +func (s *PaymentAmount) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentAmount to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "value": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + v, err := d.Str() + s.Value = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"value\"") + } + case "currency": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + if err := s.Currency.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"currency\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode PaymentAmount") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000011, + } { + 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(jsonFieldsNameOfPaymentAmount) { + name = jsonFieldsNameOfPaymentAmount[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 *PaymentAmount) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentAmount) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *PaymentCancellationDetails) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *PaymentCancellationDetails) encodeFields(e *jx.Encoder) { + { + e.FieldStart("party") + s.Party.Encode(e) + } + { + e.FieldStart("reason") + s.Reason.Encode(e) + } +} + +var jsonFieldsNameOfPaymentCancellationDetails = [2]string{ + 0: "party", + 1: "reason", +} + +// Decode decodes PaymentCancellationDetails from json. +func (s *PaymentCancellationDetails) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentCancellationDetails to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "party": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + if err := s.Party.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"party\"") + } + case "reason": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + if err := s.Reason.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"reason\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode PaymentCancellationDetails") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000011, + } { + 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(jsonFieldsNameOfPaymentCancellationDetails) { + name = jsonFieldsNameOfPaymentCancellationDetails[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 *PaymentCancellationDetails) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentCancellationDetails) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PaymentCancellationDetailsParty as json. +func (s PaymentCancellationDetailsParty) Encode(e *jx.Encoder) { + e.Str(string(s)) +} + +// Decode decodes PaymentCancellationDetailsParty from json. +func (s *PaymentCancellationDetailsParty) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentCancellationDetailsParty to nil") + } + v, err := d.StrBytes() + if err != nil { + return err + } + // Try to use constant string. + switch PaymentCancellationDetailsParty(v) { + case PaymentCancellationDetailsPartyYooMoney: + *s = PaymentCancellationDetailsPartyYooMoney + case PaymentCancellationDetailsPartyPaymentNetwork: + *s = PaymentCancellationDetailsPartyPaymentNetwork + case PaymentCancellationDetailsPartyMerchant: + *s = PaymentCancellationDetailsPartyMerchant + default: + *s = PaymentCancellationDetailsParty(v) + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s PaymentCancellationDetailsParty) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentCancellationDetailsParty) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PaymentCancellationDetailsReason as json. +func (s PaymentCancellationDetailsReason) Encode(e *jx.Encoder) { + e.Str(string(s)) +} + +// Decode decodes PaymentCancellationDetailsReason from json. +func (s *PaymentCancellationDetailsReason) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentCancellationDetailsReason to nil") + } + v, err := d.StrBytes() + if err != nil { + return err + } + // Try to use constant string. + switch PaymentCancellationDetailsReason(v) { + case PaymentCancellationDetailsReason3dSecureFailed: + *s = PaymentCancellationDetailsReason3dSecureFailed + case PaymentCancellationDetailsReasonCallIssuer: + *s = PaymentCancellationDetailsReasonCallIssuer + case PaymentCancellationDetailsReasonCardExpired: + *s = PaymentCancellationDetailsReasonCardExpired + case PaymentCancellationDetailsReasonPaymentMethodLimitExceeded: + *s = PaymentCancellationDetailsReasonPaymentMethodLimitExceeded + case PaymentCancellationDetailsReasonPaymentMethodRestricted: + *s = PaymentCancellationDetailsReasonPaymentMethodRestricted + case PaymentCancellationDetailsReasonCountryForbidden: + *s = PaymentCancellationDetailsReasonCountryForbidden + case PaymentCancellationDetailsReasonGeneralDecline: + *s = PaymentCancellationDetailsReasonGeneralDecline + case PaymentCancellationDetailsReasonFraudSuspected: + *s = PaymentCancellationDetailsReasonFraudSuspected + case PaymentCancellationDetailsReasonIdentificationRequired: + *s = PaymentCancellationDetailsReasonIdentificationRequired + case PaymentCancellationDetailsReasonInsufficientFunds: + *s = PaymentCancellationDetailsReasonInsufficientFunds + case PaymentCancellationDetailsReasonInvalidCardNumber: + *s = PaymentCancellationDetailsReasonInvalidCardNumber + case PaymentCancellationDetailsReasonInvalidCsc: + *s = PaymentCancellationDetailsReasonInvalidCsc + case PaymentCancellationDetailsReasonIssuerUnavailable: + *s = PaymentCancellationDetailsReasonIssuerUnavailable + case PaymentCancellationDetailsReasonCanceledByMerchant: + *s = PaymentCancellationDetailsReasonCanceledByMerchant + case PaymentCancellationDetailsReasonPermissionRevoked: + *s = PaymentCancellationDetailsReasonPermissionRevoked + case PaymentCancellationDetailsReasonInternalTimeout: + *s = PaymentCancellationDetailsReasonInternalTimeout + case PaymentCancellationDetailsReasonExpiredOnConfirmation: + *s = PaymentCancellationDetailsReasonExpiredOnConfirmation + case PaymentCancellationDetailsReasonExpiredOnCapture: + *s = PaymentCancellationDetailsReasonExpiredOnCapture + case PaymentCancellationDetailsReasonUnsupportedMobileOperator: + *s = PaymentCancellationDetailsReasonUnsupportedMobileOperator + case PaymentCancellationDetailsReasonDealExpired: + *s = PaymentCancellationDetailsReasonDealExpired + default: + *s = PaymentCancellationDetailsReason(v) + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s PaymentCancellationDetailsReason) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentCancellationDetailsReason) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PaymentConfirmation as json. +func (s PaymentConfirmation) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +func (s PaymentConfirmation) encodeFields(e *jx.Encoder) { + switch s.Type { + case ConfirmationRedirectPaymentConfirmation: + e.FieldStart("type") + e.Str("ConfirmationRedirect") + { + s := s.ConfirmationRedirect + { + if s.Enforce.Set { + e.FieldStart("enforce") + s.Enforce.Encode(e) + } + } + { + if s.ReturnURL.Set { + e.FieldStart("return_url") + s.ReturnURL.Encode(e) + } + } + { + e.FieldStart("confirmation_url") + s.ConfirmationURL.Encode(e) + } + } + case ConfirmationPaymentConfirmation: + e.FieldStart("type") + e.Str("Confirmation") + case ConfirmationQrPaymentConfirmation: + e.FieldStart("type") + e.Str("ConfirmationQr") + { + s := s.ConfirmationQr + { + e.FieldStart("confirmation_data") + e.Str(s.ConfirmationData) + } + } + case ConfirmationEmbeddedPaymentConfirmation: + e.FieldStart("type") + e.Str("ConfirmationEmbedded") + { + s := s.ConfirmationEmbedded + { + e.FieldStart("confirmation_token") + e.Str(s.ConfirmationToken) + } + } + case ConfirmationMobileApplicationPaymentConfirmation: + e.FieldStart("type") + e.Str("ConfirmationMobileApplication") + { + s := s.ConfirmationMobileApplication + { + e.FieldStart("confirmation_url") + e.Str(s.ConfirmationURL) + } + } + } +} + +// Decode decodes PaymentConfirmation from json. +func (s *PaymentConfirmation) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentConfirmation to nil") + } + // Sum type discriminator. + if typ := d.Next(); typ != jx.Object { + return errors.Errorf("unexpected json type %q", typ) + } + + var found bool + if err := d.Capture(func(d *jx.Decoder) error { + return d.ObjBytes(func(d *jx.Decoder, key []byte) error { + if found { + return d.Skip() + } + switch string(key) { + case "type": + typ, err := d.Str() + if err != nil { + return err + } + switch typ { + case "ConfirmationRedirect": + s.Type = ConfirmationRedirectPaymentConfirmation + found = true + case "Confirmation": + s.Type = ConfirmationPaymentConfirmation + found = true + case "ConfirmationQr": + s.Type = ConfirmationQrPaymentConfirmation + found = true + case "ConfirmationEmbedded": + s.Type = ConfirmationEmbeddedPaymentConfirmation + found = true + case "ConfirmationMobileApplication": + s.Type = ConfirmationMobileApplicationPaymentConfirmation + found = true + default: + return errors.Errorf("unknown type %s", typ) + } + return nil + } + return d.Skip() + }) + }); err != nil { + return errors.Wrap(err, "capture") + } + if !found { + return errors.New("unable to detect sum type variant") + } + switch s.Type { + case ConfirmationRedirectPaymentConfirmation: + if err := s.ConfirmationRedirect.Decode(d); err != nil { + return err + } + case ConfirmationPaymentConfirmation: + if err := s.Confirmation.Decode(d); err != nil { + return err + } + case ConfirmationQrPaymentConfirmation: + if err := s.ConfirmationQr.Decode(d); err != nil { + return err + } + case ConfirmationEmbeddedPaymentConfirmation: + if err := s.ConfirmationEmbedded.Decode(d); err != nil { + return err + } + case ConfirmationMobileApplicationPaymentConfirmation: + if err := s.ConfirmationMobileApplication.Decode(d); err != nil { + return err + } + default: + return errors.Errorf("inferred invalid type: %s", s.Type) + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s PaymentConfirmation) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentConfirmation) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *PaymentDeal) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *PaymentDeal) encodeFields(e *jx.Encoder) { + { + e.FieldStart("id") + s.ID.Encode(e) + } + { + e.FieldStart("settlements") + s.Settlements.Encode(e) + } +} + +var jsonFieldsNameOfPaymentDeal = [2]string{ + 0: "id", + 1: "settlements", +} + +// Decode decodes PaymentDeal from json. +func (s *PaymentDeal) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentDeal to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "id": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + if err := s.ID.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"id\"") + } + case "settlements": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + if err := s.Settlements.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"settlements\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode PaymentDeal") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000011, + } { + 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(jsonFieldsNameOfPaymentDeal) { + name = jsonFieldsNameOfPaymentDeal[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 *PaymentDeal) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentDeal) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PaymentId as json. +func (s PaymentId) Encode(e *jx.Encoder) { + unwrapped := string(s) + + e.Str(unwrapped) +} + +// Decode decodes PaymentId from json. +func (s *PaymentId) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentId to nil") + } + var unwrapped string + if err := func() error { + v, err := d.Str() + unwrapped = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "alias") + } + *s = PaymentId(unwrapped) + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s PaymentId) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentId) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *PaymentIncomeAmount) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *PaymentIncomeAmount) encodeFields(e *jx.Encoder) { + { + e.FieldStart("value") + e.Str(s.Value) + } + { + e.FieldStart("currency") + s.Currency.Encode(e) + } +} + +var jsonFieldsNameOfPaymentIncomeAmount = [2]string{ + 0: "value", + 1: "currency", +} + +// Decode decodes PaymentIncomeAmount from json. +func (s *PaymentIncomeAmount) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentIncomeAmount to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "value": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + v, err := d.Str() + s.Value = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"value\"") + } + case "currency": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + if err := s.Currency.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"currency\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode PaymentIncomeAmount") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000011, + } { + 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(jsonFieldsNameOfPaymentIncomeAmount) { + name = jsonFieldsNameOfPaymentIncomeAmount[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 *PaymentIncomeAmount) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentIncomeAmount) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *PaymentInvoiceDetails) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *PaymentInvoiceDetails) encodeFields(e *jx.Encoder) { + { + if s.ID.Set { + e.FieldStart("id") + s.ID.Encode(e) + } + } +} + +var jsonFieldsNameOfPaymentInvoiceDetails = [1]string{ + 0: "id", +} + +// Decode decodes PaymentInvoiceDetails from json. +func (s *PaymentInvoiceDetails) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentInvoiceDetails to nil") + } + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "id": + if err := func() error { + s.ID.Reset() + if err := s.ID.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"id\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode PaymentInvoiceDetails") + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s *PaymentInvoiceDetails) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentInvoiceDetails) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *PaymentList) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *PaymentList) encodeFields(e *jx.Encoder) { + { + e.FieldStart("type") + s.Type.Encode(e) + } + { + e.FieldStart("items") + e.ArrStart() + for _, elem := range s.Items { + elem.Encode(e) + } + e.ArrEnd() + } + { + if s.NextCursor.Set { + e.FieldStart("next_cursor") + s.NextCursor.Encode(e) + } + } +} + +var jsonFieldsNameOfPaymentList = [3]string{ + 0: "type", + 1: "items", + 2: "next_cursor", +} + +// Decode decodes PaymentList from json. +func (s *PaymentList) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentList to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "type": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + if err := s.Type.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"type\"") + } + case "items": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + s.Items = make([]Payment, 0) + if err := d.Arr(func(d *jx.Decoder) error { + var elem Payment + if err := elem.Decode(d); err != nil { + return err + } + s.Items = append(s.Items, elem) + return nil + }); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"items\"") + } + case "next_cursor": + if err := func() error { + s.NextCursor.Reset() + if err := s.NextCursor.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"next_cursor\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode PaymentList") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000011, + } { + 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(jsonFieldsNameOfPaymentList) { + name = jsonFieldsNameOfPaymentList[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 *PaymentList) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentList) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PaymentListType as json. +func (s PaymentListType) Encode(e *jx.Encoder) { + e.Str(string(s)) +} + +// Decode decodes PaymentListType from json. +func (s *PaymentListType) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentListType to nil") + } + v, err := d.StrBytes() + if err != nil { + return err + } + // Try to use constant string. + switch PaymentListType(v) { + case PaymentListTypeList: + *s = PaymentListTypeList + default: + *s = PaymentListType(v) + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s PaymentListType) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentListType) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *PaymentMethodAlfabank) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *PaymentMethodAlfabank) encodeFields(e *jx.Encoder) { + { + e.FieldStart("type") + s.Type.Encode(e) + } + { + e.FieldStart("id") + e.Str(s.ID) + } + { + e.FieldStart("saved") + e.Bool(s.Saved) + } + { + e.FieldStart("status") + s.Status.Encode(e) + } + { + if s.Title.Set { + e.FieldStart("title") + s.Title.Encode(e) + } + } + { + if s.Login.Set { + e.FieldStart("login") + s.Login.Encode(e) + } + } +} + +var jsonFieldsNameOfPaymentMethodAlfabank = [6]string{ + 0: "type", + 1: "id", + 2: "saved", + 3: "status", + 4: "title", + 5: "login", +} + +// Decode decodes PaymentMethodAlfabank from json. +func (s *PaymentMethodAlfabank) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentMethodAlfabank to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "type": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + if err := s.Type.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"type\"") + } + case "id": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + v, err := d.Str() + s.ID = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"id\"") + } + case "saved": + requiredBitSet[0] |= 1 << 2 + if err := func() error { + v, err := d.Bool() + s.Saved = bool(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"saved\"") + } + case "status": + requiredBitSet[0] |= 1 << 3 + if err := func() error { + if err := s.Status.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"status\"") + } + case "title": + if err := func() error { + s.Title.Reset() + if err := s.Title.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"title\"") + } + case "login": + if err := func() error { + s.Login.Reset() + if err := s.Login.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"login\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode PaymentMethodAlfabank") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00001111, + } { + 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(jsonFieldsNameOfPaymentMethodAlfabank) { + name = jsonFieldsNameOfPaymentMethodAlfabank[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 *PaymentMethodAlfabank) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentMethodAlfabank) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PaymentMethodAlfabankStatus as json. +func (s PaymentMethodAlfabankStatus) Encode(e *jx.Encoder) { + e.Str(string(s)) +} + +// Decode decodes PaymentMethodAlfabankStatus from json. +func (s *PaymentMethodAlfabankStatus) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentMethodAlfabankStatus to nil") + } + v, err := d.StrBytes() + if err != nil { + return err + } + // Try to use constant string. + switch PaymentMethodAlfabankStatus(v) { + case PaymentMethodAlfabankStatusPending: + *s = PaymentMethodAlfabankStatusPending + case PaymentMethodAlfabankStatusActive: + *s = PaymentMethodAlfabankStatusActive + case PaymentMethodAlfabankStatusInactive: + *s = PaymentMethodAlfabankStatusInactive + default: + *s = PaymentMethodAlfabankStatus(v) + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s PaymentMethodAlfabankStatus) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentMethodAlfabankStatus) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *PaymentMethodApplePay) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *PaymentMethodApplePay) encodeFields(e *jx.Encoder) { + { + e.FieldStart("type") + s.Type.Encode(e) + } + { + e.FieldStart("id") + e.Str(s.ID) + } + { + e.FieldStart("saved") + e.Bool(s.Saved) + } + { + e.FieldStart("status") + s.Status.Encode(e) + } + { + if s.Title.Set { + e.FieldStart("title") + s.Title.Encode(e) + } + } +} + +var jsonFieldsNameOfPaymentMethodApplePay = [5]string{ + 0: "type", + 1: "id", + 2: "saved", + 3: "status", + 4: "title", +} + +// Decode decodes PaymentMethodApplePay from json. +func (s *PaymentMethodApplePay) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentMethodApplePay to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "type": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + if err := s.Type.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"type\"") + } + case "id": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + v, err := d.Str() + s.ID = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"id\"") + } + case "saved": + requiredBitSet[0] |= 1 << 2 + if err := func() error { + v, err := d.Bool() + s.Saved = bool(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"saved\"") + } + case "status": + requiredBitSet[0] |= 1 << 3 + if err := func() error { + if err := s.Status.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"status\"") + } + case "title": + if err := func() error { + s.Title.Reset() + if err := s.Title.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"title\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode PaymentMethodApplePay") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00001111, + } { + 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(jsonFieldsNameOfPaymentMethodApplePay) { + name = jsonFieldsNameOfPaymentMethodApplePay[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 *PaymentMethodApplePay) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentMethodApplePay) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PaymentMethodApplePayStatus as json. +func (s PaymentMethodApplePayStatus) Encode(e *jx.Encoder) { + e.Str(string(s)) +} + +// Decode decodes PaymentMethodApplePayStatus from json. +func (s *PaymentMethodApplePayStatus) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentMethodApplePayStatus to nil") + } + v, err := d.StrBytes() + if err != nil { + return err + } + // Try to use constant string. + switch PaymentMethodApplePayStatus(v) { + case PaymentMethodApplePayStatusPending: + *s = PaymentMethodApplePayStatusPending + case PaymentMethodApplePayStatusActive: + *s = PaymentMethodApplePayStatusActive + case PaymentMethodApplePayStatusInactive: + *s = PaymentMethodApplePayStatusInactive + default: + *s = PaymentMethodApplePayStatus(v) + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s PaymentMethodApplePayStatus) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentMethodApplePayStatus) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *PaymentMethodB2bSberbank) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *PaymentMethodB2bSberbank) encodeFields(e *jx.Encoder) { + { + e.FieldStart("type") + s.Type.Encode(e) + } + { + e.FieldStart("id") + e.Str(s.ID) + } + { + e.FieldStart("saved") + e.Bool(s.Saved) + } + { + e.FieldStart("status") + s.Status.Encode(e) + } + { + if s.Title.Set { + e.FieldStart("title") + s.Title.Encode(e) + } + } + { + e.FieldStart("payment_purpose") + s.PaymentPurpose.Encode(e) + } + { + e.FieldStart("vat_data") + s.VatData.Encode(e) + } + { + if s.PayerBankDetails.Set { + e.FieldStart("payer_bank_details") + s.PayerBankDetails.Encode(e) + } + } +} + +var jsonFieldsNameOfPaymentMethodB2bSberbank = [8]string{ + 0: "type", + 1: "id", + 2: "saved", + 3: "status", + 4: "title", + 5: "payment_purpose", + 6: "vat_data", + 7: "payer_bank_details", +} + +// Decode decodes PaymentMethodB2bSberbank from json. +func (s *PaymentMethodB2bSberbank) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentMethodB2bSberbank to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "type": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + if err := s.Type.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"type\"") + } + case "id": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + v, err := d.Str() + s.ID = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"id\"") + } + case "saved": + requiredBitSet[0] |= 1 << 2 + if err := func() error { + v, err := d.Bool() + s.Saved = bool(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"saved\"") + } + case "status": + requiredBitSet[0] |= 1 << 3 + if err := func() error { + if err := s.Status.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"status\"") + } + case "title": + if err := func() error { + s.Title.Reset() + if err := s.Title.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"title\"") + } + case "payment_purpose": + requiredBitSet[0] |= 1 << 5 + if err := func() error { + if err := s.PaymentPurpose.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"payment_purpose\"") + } + case "vat_data": + requiredBitSet[0] |= 1 << 6 + if err := func() error { + if err := s.VatData.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"vat_data\"") + } + case "payer_bank_details": + if err := func() error { + s.PayerBankDetails.Reset() + if err := s.PayerBankDetails.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"payer_bank_details\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode PaymentMethodB2bSberbank") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b01101111, + } { + 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(jsonFieldsNameOfPaymentMethodB2bSberbank) { + name = jsonFieldsNameOfPaymentMethodB2bSberbank[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 *PaymentMethodB2bSberbank) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentMethodB2bSberbank) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PaymentMethodB2bSberbankStatus as json. +func (s PaymentMethodB2bSberbankStatus) Encode(e *jx.Encoder) { + e.Str(string(s)) +} + +// Decode decodes PaymentMethodB2bSberbankStatus from json. +func (s *PaymentMethodB2bSberbankStatus) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentMethodB2bSberbankStatus to nil") + } + v, err := d.StrBytes() + if err != nil { + return err + } + // Try to use constant string. + switch PaymentMethodB2bSberbankStatus(v) { + case PaymentMethodB2bSberbankStatusPending: + *s = PaymentMethodB2bSberbankStatusPending + case PaymentMethodB2bSberbankStatusActive: + *s = PaymentMethodB2bSberbankStatusActive + case PaymentMethodB2bSberbankStatusInactive: + *s = PaymentMethodB2bSberbankStatusInactive + default: + *s = PaymentMethodB2bSberbankStatus(v) + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s PaymentMethodB2bSberbankStatus) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentMethodB2bSberbankStatus) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PaymentMethodB2bSberbankVatData as json. +func (s PaymentMethodB2bSberbankVatData) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +func (s PaymentMethodB2bSberbankVatData) encodeFields(e *jx.Encoder) { + switch s.Type { + case B2bSberbankCalculatedVatDataPaymentMethodB2bSberbankVatData: + e.FieldStart("type") + e.Str("B2bSberbankCalculatedVatData") + { + s := s.B2bSberbankCalculatedVatData + { + e.FieldStart("rate") + s.Rate.Encode(e) + } + { + e.FieldStart("amount") + s.Amount.Encode(e) + } + } + case B2bSberbankUntaxedVatDataPaymentMethodB2bSberbankVatData: + e.FieldStart("type") + e.Str("B2bSberbankUntaxedVatData") + case B2bSberbankMixedVatDataPaymentMethodB2bSberbankVatData: + e.FieldStart("type") + e.Str("B2bSberbankMixedVatData") + { + s := s.B2bSberbankMixedVatData + { + e.FieldStart("amount") + s.Amount.Encode(e) + } + } + } +} + +// Decode decodes PaymentMethodB2bSberbankVatData from json. +func (s *PaymentMethodB2bSberbankVatData) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentMethodB2bSberbankVatData to nil") + } + // Sum type discriminator. + if typ := d.Next(); typ != jx.Object { + return errors.Errorf("unexpected json type %q", typ) + } + + var found bool + if err := d.Capture(func(d *jx.Decoder) error { + return d.ObjBytes(func(d *jx.Decoder, key []byte) error { + if found { + return d.Skip() + } + switch string(key) { + case "type": + typ, err := d.Str() + if err != nil { + return err + } + switch typ { + case "B2bSberbankCalculatedVatData": + s.Type = B2bSberbankCalculatedVatDataPaymentMethodB2bSberbankVatData + found = true + case "B2bSberbankUntaxedVatData": + s.Type = B2bSberbankUntaxedVatDataPaymentMethodB2bSberbankVatData + found = true + case "B2bSberbankMixedVatData": + s.Type = B2bSberbankMixedVatDataPaymentMethodB2bSberbankVatData + found = true + default: + return errors.Errorf("unknown type %s", typ) + } + return nil + } + return d.Skip() + }) + }); err != nil { + return errors.Wrap(err, "capture") + } + if !found { + return errors.New("unable to detect sum type variant") + } + switch s.Type { + case B2bSberbankCalculatedVatDataPaymentMethodB2bSberbankVatData: + if err := s.B2bSberbankCalculatedVatData.Decode(d); err != nil { + return err + } + case B2bSberbankUntaxedVatDataPaymentMethodB2bSberbankVatData: + if err := s.B2bSberbankUntaxedVatData.Decode(d); err != nil { + return err + } + case B2bSberbankMixedVatDataPaymentMethodB2bSberbankVatData: + if err := s.B2bSberbankMixedVatData.Decode(d); err != nil { + return err + } + default: + return errors.Errorf("inferred invalid type: %s", s.Type) + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s PaymentMethodB2bSberbankVatData) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentMethodB2bSberbankVatData) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *PaymentMethodBankCard) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *PaymentMethodBankCard) encodeFields(e *jx.Encoder) { + { + e.FieldStart("type") + s.Type.Encode(e) + } + { + e.FieldStart("id") + e.Str(s.ID) + } + { + e.FieldStart("saved") + e.Bool(s.Saved) + } + { + e.FieldStart("status") + s.Status.Encode(e) + } + { + if s.Title.Set { + e.FieldStart("title") + s.Title.Encode(e) + } + } + { + if s.Card.Set { + e.FieldStart("card") + s.Card.Encode(e) + } + } +} + +var jsonFieldsNameOfPaymentMethodBankCard = [6]string{ + 0: "type", + 1: "id", + 2: "saved", + 3: "status", + 4: "title", + 5: "card", +} + +// Decode decodes PaymentMethodBankCard from json. +func (s *PaymentMethodBankCard) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentMethodBankCard to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "type": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + if err := s.Type.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"type\"") + } + case "id": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + v, err := d.Str() + s.ID = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"id\"") + } + case "saved": + requiredBitSet[0] |= 1 << 2 + if err := func() error { + v, err := d.Bool() + s.Saved = bool(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"saved\"") + } + case "status": + requiredBitSet[0] |= 1 << 3 + if err := func() error { + if err := s.Status.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"status\"") + } + case "title": + if err := func() error { + s.Title.Reset() + if err := s.Title.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"title\"") + } + case "card": + if err := func() error { + s.Card.Reset() + if err := s.Card.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"card\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode PaymentMethodBankCard") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00001111, + } { + 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(jsonFieldsNameOfPaymentMethodBankCard) { + name = jsonFieldsNameOfPaymentMethodBankCard[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 *PaymentMethodBankCard) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentMethodBankCard) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PaymentMethodBankCardStatus as json. +func (s PaymentMethodBankCardStatus) Encode(e *jx.Encoder) { + e.Str(string(s)) +} + +// Decode decodes PaymentMethodBankCardStatus from json. +func (s *PaymentMethodBankCardStatus) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentMethodBankCardStatus to nil") + } + v, err := d.StrBytes() + if err != nil { + return err + } + // Try to use constant string. + switch PaymentMethodBankCardStatus(v) { + case PaymentMethodBankCardStatusPending: + *s = PaymentMethodBankCardStatusPending + case PaymentMethodBankCardStatusActive: + *s = PaymentMethodBankCardStatusActive + case PaymentMethodBankCardStatusInactive: + *s = PaymentMethodBankCardStatusInactive + default: + *s = PaymentMethodBankCardStatus(v) + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s PaymentMethodBankCardStatus) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentMethodBankCardStatus) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *PaymentMethodCash) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *PaymentMethodCash) encodeFields(e *jx.Encoder) { + { + e.FieldStart("type") + s.Type.Encode(e) + } + { + e.FieldStart("id") + e.Str(s.ID) + } + { + e.FieldStart("saved") + e.Bool(s.Saved) + } + { + e.FieldStart("status") + s.Status.Encode(e) + } + { + if s.Title.Set { + e.FieldStart("title") + s.Title.Encode(e) + } + } +} + +var jsonFieldsNameOfPaymentMethodCash = [5]string{ + 0: "type", + 1: "id", + 2: "saved", + 3: "status", + 4: "title", +} + +// Decode decodes PaymentMethodCash from json. +func (s *PaymentMethodCash) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentMethodCash to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "type": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + if err := s.Type.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"type\"") + } + case "id": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + v, err := d.Str() + s.ID = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"id\"") + } + case "saved": + requiredBitSet[0] |= 1 << 2 + if err := func() error { + v, err := d.Bool() + s.Saved = bool(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"saved\"") + } + case "status": + requiredBitSet[0] |= 1 << 3 + if err := func() error { + if err := s.Status.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"status\"") + } + case "title": + if err := func() error { + s.Title.Reset() + if err := s.Title.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"title\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode PaymentMethodCash") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00001111, + } { + 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(jsonFieldsNameOfPaymentMethodCash) { + name = jsonFieldsNameOfPaymentMethodCash[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 *PaymentMethodCash) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentMethodCash) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PaymentMethodCashStatus as json. +func (s PaymentMethodCashStatus) Encode(e *jx.Encoder) { + e.Str(string(s)) +} + +// Decode decodes PaymentMethodCashStatus from json. +func (s *PaymentMethodCashStatus) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentMethodCashStatus to nil") + } + v, err := d.StrBytes() + if err != nil { + return err + } + // Try to use constant string. + switch PaymentMethodCashStatus(v) { + case PaymentMethodCashStatusPending: + *s = PaymentMethodCashStatusPending + case PaymentMethodCashStatusActive: + *s = PaymentMethodCashStatusActive + case PaymentMethodCashStatusInactive: + *s = PaymentMethodCashStatusInactive + default: + *s = PaymentMethodCashStatus(v) + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s PaymentMethodCashStatus) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentMethodCashStatus) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *PaymentMethodDataB2bSberbank) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *PaymentMethodDataB2bSberbank) encodeFields(e *jx.Encoder) { + { + e.FieldStart("type") + s.Type.Encode(e) + } + { + e.FieldStart("payment_purpose") + s.PaymentPurpose.Encode(e) + } + { + e.FieldStart("vat_data") + s.VatData.Encode(e) + } +} + +var jsonFieldsNameOfPaymentMethodDataB2bSberbank = [3]string{ + 0: "type", + 1: "payment_purpose", + 2: "vat_data", +} + +// Decode decodes PaymentMethodDataB2bSberbank from json. +func (s *PaymentMethodDataB2bSberbank) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentMethodDataB2bSberbank to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "type": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + if err := s.Type.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"type\"") + } + case "payment_purpose": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + if err := s.PaymentPurpose.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"payment_purpose\"") + } + case "vat_data": + requiredBitSet[0] |= 1 << 2 + if err := func() error { + if err := s.VatData.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"vat_data\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode PaymentMethodDataB2bSberbank") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000111, + } { + 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(jsonFieldsNameOfPaymentMethodDataB2bSberbank) { + name = jsonFieldsNameOfPaymentMethodDataB2bSberbank[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 *PaymentMethodDataB2bSberbank) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentMethodDataB2bSberbank) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PaymentMethodDataB2bSberbankType as json. +func (s PaymentMethodDataB2bSberbankType) Encode(e *jx.Encoder) { + e.Str(string(s)) +} + +// Decode decodes PaymentMethodDataB2bSberbankType from json. +func (s *PaymentMethodDataB2bSberbankType) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentMethodDataB2bSberbankType to nil") + } + v, err := d.StrBytes() + if err != nil { + return err + } + // Try to use constant string. + switch PaymentMethodDataB2bSberbankType(v) { + case PaymentMethodDataB2bSberbankTypeBankCard: + *s = PaymentMethodDataB2bSberbankTypeBankCard + case PaymentMethodDataB2bSberbankTypeCash: + *s = PaymentMethodDataB2bSberbankTypeCash + case PaymentMethodDataB2bSberbankTypeSberbank: + *s = PaymentMethodDataB2bSberbankTypeSberbank + case PaymentMethodDataB2bSberbankTypeTinkoffBank: + *s = PaymentMethodDataB2bSberbankTypeTinkoffBank + case PaymentMethodDataB2bSberbankTypeYooMoney: + *s = PaymentMethodDataB2bSberbankTypeYooMoney + case PaymentMethodDataB2bSberbankTypeMobileBalance: + *s = PaymentMethodDataB2bSberbankTypeMobileBalance + case PaymentMethodDataB2bSberbankTypeB2bSberbank: + *s = PaymentMethodDataB2bSberbankTypeB2bSberbank + case PaymentMethodDataB2bSberbankTypeSbp: + *s = PaymentMethodDataB2bSberbankTypeSbp + case PaymentMethodDataB2bSberbankTypeSberLoan: + *s = PaymentMethodDataB2bSberbankTypeSberLoan + case PaymentMethodDataB2bSberbankTypeElectronicCertificate: + *s = PaymentMethodDataB2bSberbankTypeElectronicCertificate + case PaymentMethodDataB2bSberbankTypeSberBnpl: + *s = PaymentMethodDataB2bSberbankTypeSberBnpl + default: + *s = PaymentMethodDataB2bSberbankType(v) + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s PaymentMethodDataB2bSberbankType) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentMethodDataB2bSberbankType) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PaymentMethodDataB2bSberbankVatData as json. +func (s PaymentMethodDataB2bSberbankVatData) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +func (s PaymentMethodDataB2bSberbankVatData) encodeFields(e *jx.Encoder) { + switch s.Type { + case B2bSberbankCalculatedVatDataPaymentMethodDataB2bSberbankVatData: + e.FieldStart("type") + e.Str("B2bSberbankCalculatedVatData") + { + s := s.B2bSberbankCalculatedVatData + { + e.FieldStart("rate") + s.Rate.Encode(e) + } + { + e.FieldStart("amount") + s.Amount.Encode(e) + } + } + case B2bSberbankUntaxedVatDataPaymentMethodDataB2bSberbankVatData: + e.FieldStart("type") + e.Str("B2bSberbankUntaxedVatData") + case B2bSberbankMixedVatDataPaymentMethodDataB2bSberbankVatData: + e.FieldStart("type") + e.Str("B2bSberbankMixedVatData") + { + s := s.B2bSberbankMixedVatData + { + e.FieldStart("amount") + s.Amount.Encode(e) + } + } + } +} + +// Decode decodes PaymentMethodDataB2bSberbankVatData from json. +func (s *PaymentMethodDataB2bSberbankVatData) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentMethodDataB2bSberbankVatData to nil") + } + // Sum type discriminator. + if typ := d.Next(); typ != jx.Object { + return errors.Errorf("unexpected json type %q", typ) + } + + var found bool + if err := d.Capture(func(d *jx.Decoder) error { + return d.ObjBytes(func(d *jx.Decoder, key []byte) error { + if found { + return d.Skip() + } + switch string(key) { + case "type": + typ, err := d.Str() + if err != nil { + return err + } + switch typ { + case "B2bSberbankCalculatedVatData": + s.Type = B2bSberbankCalculatedVatDataPaymentMethodDataB2bSberbankVatData + found = true + case "B2bSberbankUntaxedVatData": + s.Type = B2bSberbankUntaxedVatDataPaymentMethodDataB2bSberbankVatData + found = true + case "B2bSberbankMixedVatData": + s.Type = B2bSberbankMixedVatDataPaymentMethodDataB2bSberbankVatData + found = true + default: + return errors.Errorf("unknown type %s", typ) + } + return nil + } + return d.Skip() + }) + }); err != nil { + return errors.Wrap(err, "capture") + } + if !found { + return errors.New("unable to detect sum type variant") + } + switch s.Type { + case B2bSberbankCalculatedVatDataPaymentMethodDataB2bSberbankVatData: + if err := s.B2bSberbankCalculatedVatData.Decode(d); err != nil { + return err + } + case B2bSberbankUntaxedVatDataPaymentMethodDataB2bSberbankVatData: + if err := s.B2bSberbankUntaxedVatData.Decode(d); err != nil { + return err + } + case B2bSberbankMixedVatDataPaymentMethodDataB2bSberbankVatData: + if err := s.B2bSberbankMixedVatData.Decode(d); err != nil { + return err + } + default: + return errors.Errorf("inferred invalid type: %s", s.Type) + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s PaymentMethodDataB2bSberbankVatData) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentMethodDataB2bSberbankVatData) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *PaymentMethodDataBankCard) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *PaymentMethodDataBankCard) encodeFields(e *jx.Encoder) { + { + e.FieldStart("type") + s.Type.Encode(e) + } + { + if s.Card.Set { + e.FieldStart("card") + s.Card.Encode(e) + } + } +} + +var jsonFieldsNameOfPaymentMethodDataBankCard = [2]string{ + 0: "type", + 1: "card", +} + +// Decode decodes PaymentMethodDataBankCard from json. +func (s *PaymentMethodDataBankCard) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentMethodDataBankCard to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "type": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + if err := s.Type.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"type\"") + } + case "card": + if err := func() error { + s.Card.Reset() + if err := s.Card.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"card\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode PaymentMethodDataBankCard") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000001, + } { + 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(jsonFieldsNameOfPaymentMethodDataBankCard) { + name = jsonFieldsNameOfPaymentMethodDataBankCard[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 *PaymentMethodDataBankCard) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentMethodDataBankCard) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PaymentMethodDataBankCardType as json. +func (s PaymentMethodDataBankCardType) Encode(e *jx.Encoder) { + e.Str(string(s)) +} + +// Decode decodes PaymentMethodDataBankCardType from json. +func (s *PaymentMethodDataBankCardType) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentMethodDataBankCardType to nil") + } + v, err := d.StrBytes() + if err != nil { + return err + } + // Try to use constant string. + switch PaymentMethodDataBankCardType(v) { + case PaymentMethodDataBankCardTypeBankCard: + *s = PaymentMethodDataBankCardTypeBankCard + case PaymentMethodDataBankCardTypeCash: + *s = PaymentMethodDataBankCardTypeCash + case PaymentMethodDataBankCardTypeSberbank: + *s = PaymentMethodDataBankCardTypeSberbank + case PaymentMethodDataBankCardTypeTinkoffBank: + *s = PaymentMethodDataBankCardTypeTinkoffBank + case PaymentMethodDataBankCardTypeYooMoney: + *s = PaymentMethodDataBankCardTypeYooMoney + case PaymentMethodDataBankCardTypeMobileBalance: + *s = PaymentMethodDataBankCardTypeMobileBalance + case PaymentMethodDataBankCardTypeB2bSberbank: + *s = PaymentMethodDataBankCardTypeB2bSberbank + case PaymentMethodDataBankCardTypeSbp: + *s = PaymentMethodDataBankCardTypeSbp + case PaymentMethodDataBankCardTypeSberLoan: + *s = PaymentMethodDataBankCardTypeSberLoan + case PaymentMethodDataBankCardTypeElectronicCertificate: + *s = PaymentMethodDataBankCardTypeElectronicCertificate + case PaymentMethodDataBankCardTypeSberBnpl: + *s = PaymentMethodDataBankCardTypeSberBnpl + default: + *s = PaymentMethodDataBankCardType(v) + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s PaymentMethodDataBankCardType) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentMethodDataBankCardType) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *PaymentMethodDataCash) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *PaymentMethodDataCash) encodeFields(e *jx.Encoder) { + { + e.FieldStart("type") + s.Type.Encode(e) + } + { + if s.Phone.Set { + e.FieldStart("phone") + s.Phone.Encode(e) + } + } +} + +var jsonFieldsNameOfPaymentMethodDataCash = [2]string{ + 0: "type", + 1: "phone", +} + +// Decode decodes PaymentMethodDataCash from json. +func (s *PaymentMethodDataCash) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentMethodDataCash to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "type": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + if err := s.Type.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"type\"") + } + case "phone": + if err := func() error { + s.Phone.Reset() + if err := s.Phone.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"phone\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode PaymentMethodDataCash") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000001, + } { + 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(jsonFieldsNameOfPaymentMethodDataCash) { + name = jsonFieldsNameOfPaymentMethodDataCash[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 *PaymentMethodDataCash) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentMethodDataCash) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PaymentMethodDataCashType as json. +func (s PaymentMethodDataCashType) Encode(e *jx.Encoder) { + e.Str(string(s)) +} + +// Decode decodes PaymentMethodDataCashType from json. +func (s *PaymentMethodDataCashType) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentMethodDataCashType to nil") + } + v, err := d.StrBytes() + if err != nil { + return err + } + // Try to use constant string. + switch PaymentMethodDataCashType(v) { + case PaymentMethodDataCashTypeBankCard: + *s = PaymentMethodDataCashTypeBankCard + case PaymentMethodDataCashTypeCash: + *s = PaymentMethodDataCashTypeCash + case PaymentMethodDataCashTypeSberbank: + *s = PaymentMethodDataCashTypeSberbank + case PaymentMethodDataCashTypeTinkoffBank: + *s = PaymentMethodDataCashTypeTinkoffBank + case PaymentMethodDataCashTypeYooMoney: + *s = PaymentMethodDataCashTypeYooMoney + case PaymentMethodDataCashTypeMobileBalance: + *s = PaymentMethodDataCashTypeMobileBalance + case PaymentMethodDataCashTypeB2bSberbank: + *s = PaymentMethodDataCashTypeB2bSberbank + case PaymentMethodDataCashTypeSbp: + *s = PaymentMethodDataCashTypeSbp + case PaymentMethodDataCashTypeSberLoan: + *s = PaymentMethodDataCashTypeSberLoan + case PaymentMethodDataCashTypeElectronicCertificate: + *s = PaymentMethodDataCashTypeElectronicCertificate + case PaymentMethodDataCashTypeSberBnpl: + *s = PaymentMethodDataCashTypeSberBnpl + default: + *s = PaymentMethodDataCashType(v) + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s PaymentMethodDataCashType) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentMethodDataCashType) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *PaymentMethodDataElectronicCertificate) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *PaymentMethodDataElectronicCertificate) encodeFields(e *jx.Encoder) { + { + e.FieldStart("type") + s.Type.Encode(e) + } + { + if s.Card.Set { + e.FieldStart("card") + s.Card.Encode(e) + } + } + { + if s.ElectronicCertificate.Set { + e.FieldStart("electronic_certificate") + s.ElectronicCertificate.Encode(e) + } + } + { + if s.Articles != nil { + e.FieldStart("articles") + e.ArrStart() + for _, elem := range s.Articles { + elem.Encode(e) + } + e.ArrEnd() + } + } +} + +var jsonFieldsNameOfPaymentMethodDataElectronicCertificate = [4]string{ + 0: "type", + 1: "card", + 2: "electronic_certificate", + 3: "articles", +} + +// Decode decodes PaymentMethodDataElectronicCertificate from json. +func (s *PaymentMethodDataElectronicCertificate) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentMethodDataElectronicCertificate to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "type": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + if err := s.Type.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"type\"") + } + case "card": + if err := func() error { + s.Card.Reset() + if err := s.Card.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"card\"") + } + case "electronic_certificate": + if err := func() error { + s.ElectronicCertificate.Reset() + if err := s.ElectronicCertificate.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"electronic_certificate\"") + } + case "articles": + if err := func() error { + s.Articles = make([]ElectronicCertificateArticle, 0) + if err := d.Arr(func(d *jx.Decoder) error { + var elem ElectronicCertificateArticle + if err := elem.Decode(d); err != nil { + return err + } + s.Articles = append(s.Articles, elem) + return nil + }); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"articles\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode PaymentMethodDataElectronicCertificate") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000001, + } { + 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(jsonFieldsNameOfPaymentMethodDataElectronicCertificate) { + name = jsonFieldsNameOfPaymentMethodDataElectronicCertificate[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 *PaymentMethodDataElectronicCertificate) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentMethodDataElectronicCertificate) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PaymentMethodDataElectronicCertificateType as json. +func (s PaymentMethodDataElectronicCertificateType) Encode(e *jx.Encoder) { + e.Str(string(s)) +} + +// Decode decodes PaymentMethodDataElectronicCertificateType from json. +func (s *PaymentMethodDataElectronicCertificateType) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentMethodDataElectronicCertificateType to nil") + } + v, err := d.StrBytes() + if err != nil { + return err + } + // Try to use constant string. + switch PaymentMethodDataElectronicCertificateType(v) { + case PaymentMethodDataElectronicCertificateTypeBankCard: + *s = PaymentMethodDataElectronicCertificateTypeBankCard + case PaymentMethodDataElectronicCertificateTypeCash: + *s = PaymentMethodDataElectronicCertificateTypeCash + case PaymentMethodDataElectronicCertificateTypeSberbank: + *s = PaymentMethodDataElectronicCertificateTypeSberbank + case PaymentMethodDataElectronicCertificateTypeTinkoffBank: + *s = PaymentMethodDataElectronicCertificateTypeTinkoffBank + case PaymentMethodDataElectronicCertificateTypeYooMoney: + *s = PaymentMethodDataElectronicCertificateTypeYooMoney + case PaymentMethodDataElectronicCertificateTypeMobileBalance: + *s = PaymentMethodDataElectronicCertificateTypeMobileBalance + case PaymentMethodDataElectronicCertificateTypeB2bSberbank: + *s = PaymentMethodDataElectronicCertificateTypeB2bSberbank + case PaymentMethodDataElectronicCertificateTypeSbp: + *s = PaymentMethodDataElectronicCertificateTypeSbp + case PaymentMethodDataElectronicCertificateTypeSberLoan: + *s = PaymentMethodDataElectronicCertificateTypeSberLoan + case PaymentMethodDataElectronicCertificateTypeElectronicCertificate: + *s = PaymentMethodDataElectronicCertificateTypeElectronicCertificate + case PaymentMethodDataElectronicCertificateTypeSberBnpl: + *s = PaymentMethodDataElectronicCertificateTypeSberBnpl + default: + *s = PaymentMethodDataElectronicCertificateType(v) + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s PaymentMethodDataElectronicCertificateType) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentMethodDataElectronicCertificateType) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *PaymentMethodDataMobileBalance) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *PaymentMethodDataMobileBalance) encodeFields(e *jx.Encoder) { + { + e.FieldStart("type") + s.Type.Encode(e) + } + { + e.FieldStart("phone") + e.Str(s.Phone) + } +} + +var jsonFieldsNameOfPaymentMethodDataMobileBalance = [2]string{ + 0: "type", + 1: "phone", +} + +// Decode decodes PaymentMethodDataMobileBalance from json. +func (s *PaymentMethodDataMobileBalance) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentMethodDataMobileBalance to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "type": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + if err := s.Type.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"type\"") + } + case "phone": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + v, err := d.Str() + s.Phone = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"phone\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode PaymentMethodDataMobileBalance") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000011, + } { + 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(jsonFieldsNameOfPaymentMethodDataMobileBalance) { + name = jsonFieldsNameOfPaymentMethodDataMobileBalance[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 *PaymentMethodDataMobileBalance) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentMethodDataMobileBalance) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PaymentMethodDataMobileBalanceType as json. +func (s PaymentMethodDataMobileBalanceType) Encode(e *jx.Encoder) { + e.Str(string(s)) +} + +// Decode decodes PaymentMethodDataMobileBalanceType from json. +func (s *PaymentMethodDataMobileBalanceType) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentMethodDataMobileBalanceType to nil") + } + v, err := d.StrBytes() + if err != nil { + return err + } + // Try to use constant string. + switch PaymentMethodDataMobileBalanceType(v) { + case PaymentMethodDataMobileBalanceTypeBankCard: + *s = PaymentMethodDataMobileBalanceTypeBankCard + case PaymentMethodDataMobileBalanceTypeCash: + *s = PaymentMethodDataMobileBalanceTypeCash + case PaymentMethodDataMobileBalanceTypeSberbank: + *s = PaymentMethodDataMobileBalanceTypeSberbank + case PaymentMethodDataMobileBalanceTypeTinkoffBank: + *s = PaymentMethodDataMobileBalanceTypeTinkoffBank + case PaymentMethodDataMobileBalanceTypeYooMoney: + *s = PaymentMethodDataMobileBalanceTypeYooMoney + case PaymentMethodDataMobileBalanceTypeMobileBalance: + *s = PaymentMethodDataMobileBalanceTypeMobileBalance + case PaymentMethodDataMobileBalanceTypeB2bSberbank: + *s = PaymentMethodDataMobileBalanceTypeB2bSberbank + case PaymentMethodDataMobileBalanceTypeSbp: + *s = PaymentMethodDataMobileBalanceTypeSbp + case PaymentMethodDataMobileBalanceTypeSberLoan: + *s = PaymentMethodDataMobileBalanceTypeSberLoan + case PaymentMethodDataMobileBalanceTypeElectronicCertificate: + *s = PaymentMethodDataMobileBalanceTypeElectronicCertificate + case PaymentMethodDataMobileBalanceTypeSberBnpl: + *s = PaymentMethodDataMobileBalanceTypeSberBnpl + default: + *s = PaymentMethodDataMobileBalanceType(v) + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s PaymentMethodDataMobileBalanceType) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentMethodDataMobileBalanceType) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *PaymentMethodDataSberBnpl) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *PaymentMethodDataSberBnpl) encodeFields(e *jx.Encoder) { + { + e.FieldStart("type") + s.Type.Encode(e) + } + { + if s.Phone.Set { + e.FieldStart("phone") + s.Phone.Encode(e) + } + } +} + +var jsonFieldsNameOfPaymentMethodDataSberBnpl = [2]string{ + 0: "type", + 1: "phone", +} + +// Decode decodes PaymentMethodDataSberBnpl from json. +func (s *PaymentMethodDataSberBnpl) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentMethodDataSberBnpl to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "type": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + if err := s.Type.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"type\"") + } + case "phone": + if err := func() error { + s.Phone.Reset() + if err := s.Phone.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"phone\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode PaymentMethodDataSberBnpl") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000001, + } { + 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(jsonFieldsNameOfPaymentMethodDataSberBnpl) { + name = jsonFieldsNameOfPaymentMethodDataSberBnpl[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 *PaymentMethodDataSberBnpl) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentMethodDataSberBnpl) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PaymentMethodDataSberBnplType as json. +func (s PaymentMethodDataSberBnplType) Encode(e *jx.Encoder) { + e.Str(string(s)) +} + +// Decode decodes PaymentMethodDataSberBnplType from json. +func (s *PaymentMethodDataSberBnplType) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentMethodDataSberBnplType to nil") + } + v, err := d.StrBytes() + if err != nil { + return err + } + // Try to use constant string. + switch PaymentMethodDataSberBnplType(v) { + case PaymentMethodDataSberBnplTypeBankCard: + *s = PaymentMethodDataSberBnplTypeBankCard + case PaymentMethodDataSberBnplTypeCash: + *s = PaymentMethodDataSberBnplTypeCash + case PaymentMethodDataSberBnplTypeSberbank: + *s = PaymentMethodDataSberBnplTypeSberbank + case PaymentMethodDataSberBnplTypeTinkoffBank: + *s = PaymentMethodDataSberBnplTypeTinkoffBank + case PaymentMethodDataSberBnplTypeYooMoney: + *s = PaymentMethodDataSberBnplTypeYooMoney + case PaymentMethodDataSberBnplTypeMobileBalance: + *s = PaymentMethodDataSberBnplTypeMobileBalance + case PaymentMethodDataSberBnplTypeB2bSberbank: + *s = PaymentMethodDataSberBnplTypeB2bSberbank + case PaymentMethodDataSberBnplTypeSbp: + *s = PaymentMethodDataSberBnplTypeSbp + case PaymentMethodDataSberBnplTypeSberLoan: + *s = PaymentMethodDataSberBnplTypeSberLoan + case PaymentMethodDataSberBnplTypeElectronicCertificate: + *s = PaymentMethodDataSberBnplTypeElectronicCertificate + case PaymentMethodDataSberBnplTypeSberBnpl: + *s = PaymentMethodDataSberBnplTypeSberBnpl + default: + *s = PaymentMethodDataSberBnplType(v) + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s PaymentMethodDataSberBnplType) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentMethodDataSberBnplType) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *PaymentMethodDataSberLoan) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *PaymentMethodDataSberLoan) encodeFields(e *jx.Encoder) { + { + e.FieldStart("type") + s.Type.Encode(e) + } +} + +var jsonFieldsNameOfPaymentMethodDataSberLoan = [1]string{ + 0: "type", +} + +// Decode decodes PaymentMethodDataSberLoan from json. +func (s *PaymentMethodDataSberLoan) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentMethodDataSberLoan to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "type": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + if err := s.Type.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"type\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode PaymentMethodDataSberLoan") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000001, + } { + 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(jsonFieldsNameOfPaymentMethodDataSberLoan) { + name = jsonFieldsNameOfPaymentMethodDataSberLoan[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 *PaymentMethodDataSberLoan) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentMethodDataSberLoan) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PaymentMethodDataSberLoanType as json. +func (s PaymentMethodDataSberLoanType) Encode(e *jx.Encoder) { + e.Str(string(s)) +} + +// Decode decodes PaymentMethodDataSberLoanType from json. +func (s *PaymentMethodDataSberLoanType) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentMethodDataSberLoanType to nil") + } + v, err := d.StrBytes() + if err != nil { + return err + } + // Try to use constant string. + switch PaymentMethodDataSberLoanType(v) { + case PaymentMethodDataSberLoanTypeBankCard: + *s = PaymentMethodDataSberLoanTypeBankCard + case PaymentMethodDataSberLoanTypeCash: + *s = PaymentMethodDataSberLoanTypeCash + case PaymentMethodDataSberLoanTypeSberbank: + *s = PaymentMethodDataSberLoanTypeSberbank + case PaymentMethodDataSberLoanTypeTinkoffBank: + *s = PaymentMethodDataSberLoanTypeTinkoffBank + case PaymentMethodDataSberLoanTypeYooMoney: + *s = PaymentMethodDataSberLoanTypeYooMoney + case PaymentMethodDataSberLoanTypeMobileBalance: + *s = PaymentMethodDataSberLoanTypeMobileBalance + case PaymentMethodDataSberLoanTypeB2bSberbank: + *s = PaymentMethodDataSberLoanTypeB2bSberbank + case PaymentMethodDataSberLoanTypeSbp: + *s = PaymentMethodDataSberLoanTypeSbp + case PaymentMethodDataSberLoanTypeSberLoan: + *s = PaymentMethodDataSberLoanTypeSberLoan + case PaymentMethodDataSberLoanTypeElectronicCertificate: + *s = PaymentMethodDataSberLoanTypeElectronicCertificate + case PaymentMethodDataSberLoanTypeSberBnpl: + *s = PaymentMethodDataSberLoanTypeSberBnpl + default: + *s = PaymentMethodDataSberLoanType(v) + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s PaymentMethodDataSberLoanType) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentMethodDataSberLoanType) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *PaymentMethodDataSberbank) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *PaymentMethodDataSberbank) encodeFields(e *jx.Encoder) { + { + e.FieldStart("type") + s.Type.Encode(e) + } + { + if s.Phone.Set { + e.FieldStart("phone") + s.Phone.Encode(e) + } + } +} + +var jsonFieldsNameOfPaymentMethodDataSberbank = [2]string{ + 0: "type", + 1: "phone", +} + +// Decode decodes PaymentMethodDataSberbank from json. +func (s *PaymentMethodDataSberbank) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentMethodDataSberbank to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "type": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + if err := s.Type.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"type\"") + } + case "phone": + if err := func() error { + s.Phone.Reset() + if err := s.Phone.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"phone\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode PaymentMethodDataSberbank") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000001, + } { + 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(jsonFieldsNameOfPaymentMethodDataSberbank) { + name = jsonFieldsNameOfPaymentMethodDataSberbank[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 *PaymentMethodDataSberbank) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentMethodDataSberbank) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PaymentMethodDataSberbankType as json. +func (s PaymentMethodDataSberbankType) Encode(e *jx.Encoder) { + e.Str(string(s)) +} + +// Decode decodes PaymentMethodDataSberbankType from json. +func (s *PaymentMethodDataSberbankType) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentMethodDataSberbankType to nil") + } + v, err := d.StrBytes() + if err != nil { + return err + } + // Try to use constant string. + switch PaymentMethodDataSberbankType(v) { + case PaymentMethodDataSberbankTypeBankCard: + *s = PaymentMethodDataSberbankTypeBankCard + case PaymentMethodDataSberbankTypeCash: + *s = PaymentMethodDataSberbankTypeCash + case PaymentMethodDataSberbankTypeSberbank: + *s = PaymentMethodDataSberbankTypeSberbank + case PaymentMethodDataSberbankTypeTinkoffBank: + *s = PaymentMethodDataSberbankTypeTinkoffBank + case PaymentMethodDataSberbankTypeYooMoney: + *s = PaymentMethodDataSberbankTypeYooMoney + case PaymentMethodDataSberbankTypeMobileBalance: + *s = PaymentMethodDataSberbankTypeMobileBalance + case PaymentMethodDataSberbankTypeB2bSberbank: + *s = PaymentMethodDataSberbankTypeB2bSberbank + case PaymentMethodDataSberbankTypeSbp: + *s = PaymentMethodDataSberbankTypeSbp + case PaymentMethodDataSberbankTypeSberLoan: + *s = PaymentMethodDataSberbankTypeSberLoan + case PaymentMethodDataSberbankTypeElectronicCertificate: + *s = PaymentMethodDataSberbankTypeElectronicCertificate + case PaymentMethodDataSberbankTypeSberBnpl: + *s = PaymentMethodDataSberbankTypeSberBnpl + default: + *s = PaymentMethodDataSberbankType(v) + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s PaymentMethodDataSberbankType) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentMethodDataSberbankType) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *PaymentMethodDataSbp) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *PaymentMethodDataSbp) encodeFields(e *jx.Encoder) { + { + e.FieldStart("type") + s.Type.Encode(e) + } +} + +var jsonFieldsNameOfPaymentMethodDataSbp = [1]string{ + 0: "type", +} + +// Decode decodes PaymentMethodDataSbp from json. +func (s *PaymentMethodDataSbp) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentMethodDataSbp to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "type": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + if err := s.Type.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"type\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode PaymentMethodDataSbp") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000001, + } { + 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(jsonFieldsNameOfPaymentMethodDataSbp) { + name = jsonFieldsNameOfPaymentMethodDataSbp[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 *PaymentMethodDataSbp) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentMethodDataSbp) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PaymentMethodDataSbpType as json. +func (s PaymentMethodDataSbpType) Encode(e *jx.Encoder) { + e.Str(string(s)) +} + +// Decode decodes PaymentMethodDataSbpType from json. +func (s *PaymentMethodDataSbpType) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentMethodDataSbpType to nil") + } + v, err := d.StrBytes() + if err != nil { + return err + } + // Try to use constant string. + switch PaymentMethodDataSbpType(v) { + case PaymentMethodDataSbpTypeBankCard: + *s = PaymentMethodDataSbpTypeBankCard + case PaymentMethodDataSbpTypeCash: + *s = PaymentMethodDataSbpTypeCash + case PaymentMethodDataSbpTypeSberbank: + *s = PaymentMethodDataSbpTypeSberbank + case PaymentMethodDataSbpTypeTinkoffBank: + *s = PaymentMethodDataSbpTypeTinkoffBank + case PaymentMethodDataSbpTypeYooMoney: + *s = PaymentMethodDataSbpTypeYooMoney + case PaymentMethodDataSbpTypeMobileBalance: + *s = PaymentMethodDataSbpTypeMobileBalance + case PaymentMethodDataSbpTypeB2bSberbank: + *s = PaymentMethodDataSbpTypeB2bSberbank + case PaymentMethodDataSbpTypeSbp: + *s = PaymentMethodDataSbpTypeSbp + case PaymentMethodDataSbpTypeSberLoan: + *s = PaymentMethodDataSbpTypeSberLoan + case PaymentMethodDataSbpTypeElectronicCertificate: + *s = PaymentMethodDataSbpTypeElectronicCertificate + case PaymentMethodDataSbpTypeSberBnpl: + *s = PaymentMethodDataSbpTypeSberBnpl + default: + *s = PaymentMethodDataSbpType(v) + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s PaymentMethodDataSbpType) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentMethodDataSbpType) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *PaymentMethodDataTinkoffBank) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *PaymentMethodDataTinkoffBank) encodeFields(e *jx.Encoder) { + { + e.FieldStart("type") + s.Type.Encode(e) + } +} + +var jsonFieldsNameOfPaymentMethodDataTinkoffBank = [1]string{ + 0: "type", +} + +// Decode decodes PaymentMethodDataTinkoffBank from json. +func (s *PaymentMethodDataTinkoffBank) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentMethodDataTinkoffBank to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "type": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + if err := s.Type.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"type\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode PaymentMethodDataTinkoffBank") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000001, + } { + 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(jsonFieldsNameOfPaymentMethodDataTinkoffBank) { + name = jsonFieldsNameOfPaymentMethodDataTinkoffBank[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 *PaymentMethodDataTinkoffBank) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentMethodDataTinkoffBank) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PaymentMethodDataTinkoffBankType as json. +func (s PaymentMethodDataTinkoffBankType) Encode(e *jx.Encoder) { + e.Str(string(s)) +} + +// Decode decodes PaymentMethodDataTinkoffBankType from json. +func (s *PaymentMethodDataTinkoffBankType) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentMethodDataTinkoffBankType to nil") + } + v, err := d.StrBytes() + if err != nil { + return err + } + // Try to use constant string. + switch PaymentMethodDataTinkoffBankType(v) { + case PaymentMethodDataTinkoffBankTypeBankCard: + *s = PaymentMethodDataTinkoffBankTypeBankCard + case PaymentMethodDataTinkoffBankTypeCash: + *s = PaymentMethodDataTinkoffBankTypeCash + case PaymentMethodDataTinkoffBankTypeSberbank: + *s = PaymentMethodDataTinkoffBankTypeSberbank + case PaymentMethodDataTinkoffBankTypeTinkoffBank: + *s = PaymentMethodDataTinkoffBankTypeTinkoffBank + case PaymentMethodDataTinkoffBankTypeYooMoney: + *s = PaymentMethodDataTinkoffBankTypeYooMoney + case PaymentMethodDataTinkoffBankTypeMobileBalance: + *s = PaymentMethodDataTinkoffBankTypeMobileBalance + case PaymentMethodDataTinkoffBankTypeB2bSberbank: + *s = PaymentMethodDataTinkoffBankTypeB2bSberbank + case PaymentMethodDataTinkoffBankTypeSbp: + *s = PaymentMethodDataTinkoffBankTypeSbp + case PaymentMethodDataTinkoffBankTypeSberLoan: + *s = PaymentMethodDataTinkoffBankTypeSberLoan + case PaymentMethodDataTinkoffBankTypeElectronicCertificate: + *s = PaymentMethodDataTinkoffBankTypeElectronicCertificate + case PaymentMethodDataTinkoffBankTypeSberBnpl: + *s = PaymentMethodDataTinkoffBankTypeSberBnpl + default: + *s = PaymentMethodDataTinkoffBankType(v) + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s PaymentMethodDataTinkoffBankType) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentMethodDataTinkoffBankType) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *PaymentMethodDataYooMoney) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *PaymentMethodDataYooMoney) encodeFields(e *jx.Encoder) { + { + e.FieldStart("type") + s.Type.Encode(e) + } +} + +var jsonFieldsNameOfPaymentMethodDataYooMoney = [1]string{ + 0: "type", +} + +// Decode decodes PaymentMethodDataYooMoney from json. +func (s *PaymentMethodDataYooMoney) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentMethodDataYooMoney to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "type": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + if err := s.Type.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"type\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode PaymentMethodDataYooMoney") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000001, + } { + 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(jsonFieldsNameOfPaymentMethodDataYooMoney) { + name = jsonFieldsNameOfPaymentMethodDataYooMoney[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 *PaymentMethodDataYooMoney) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentMethodDataYooMoney) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PaymentMethodDataYooMoneyType as json. +func (s PaymentMethodDataYooMoneyType) Encode(e *jx.Encoder) { + e.Str(string(s)) +} + +// Decode decodes PaymentMethodDataYooMoneyType from json. +func (s *PaymentMethodDataYooMoneyType) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentMethodDataYooMoneyType to nil") + } + v, err := d.StrBytes() + if err != nil { + return err + } + // Try to use constant string. + switch PaymentMethodDataYooMoneyType(v) { + case PaymentMethodDataYooMoneyTypeBankCard: + *s = PaymentMethodDataYooMoneyTypeBankCard + case PaymentMethodDataYooMoneyTypeCash: + *s = PaymentMethodDataYooMoneyTypeCash + case PaymentMethodDataYooMoneyTypeSberbank: + *s = PaymentMethodDataYooMoneyTypeSberbank + case PaymentMethodDataYooMoneyTypeTinkoffBank: + *s = PaymentMethodDataYooMoneyTypeTinkoffBank + case PaymentMethodDataYooMoneyTypeYooMoney: + *s = PaymentMethodDataYooMoneyTypeYooMoney + case PaymentMethodDataYooMoneyTypeMobileBalance: + *s = PaymentMethodDataYooMoneyTypeMobileBalance + case PaymentMethodDataYooMoneyTypeB2bSberbank: + *s = PaymentMethodDataYooMoneyTypeB2bSberbank + case PaymentMethodDataYooMoneyTypeSbp: + *s = PaymentMethodDataYooMoneyTypeSbp + case PaymentMethodDataYooMoneyTypeSberLoan: + *s = PaymentMethodDataYooMoneyTypeSberLoan + case PaymentMethodDataYooMoneyTypeElectronicCertificate: + *s = PaymentMethodDataYooMoneyTypeElectronicCertificate + case PaymentMethodDataYooMoneyTypeSberBnpl: + *s = PaymentMethodDataYooMoneyTypeSberBnpl + default: + *s = PaymentMethodDataYooMoneyType(v) + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s PaymentMethodDataYooMoneyType) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentMethodDataYooMoneyType) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *PaymentMethodElectronicCertificate) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *PaymentMethodElectronicCertificate) encodeFields(e *jx.Encoder) { + { + e.FieldStart("type") + s.Type.Encode(e) + } + { + e.FieldStart("id") + e.Str(s.ID) + } + { + e.FieldStart("saved") + e.Bool(s.Saved) + } + { + e.FieldStart("status") + s.Status.Encode(e) + } + { + if s.Title.Set { + e.FieldStart("title") + s.Title.Encode(e) + } + } + { + if s.Card.Set { + e.FieldStart("card") + s.Card.Encode(e) + } + } + { + if s.ElectronicCertificate.Set { + e.FieldStart("electronic_certificate") + s.ElectronicCertificate.Encode(e) + } + } + { + if s.Articles != nil { + e.FieldStart("articles") + e.ArrStart() + for _, elem := range s.Articles { + elem.Encode(e) + } + e.ArrEnd() + } + } +} + +var jsonFieldsNameOfPaymentMethodElectronicCertificate = [8]string{ + 0: "type", + 1: "id", + 2: "saved", + 3: "status", + 4: "title", + 5: "card", + 6: "electronic_certificate", + 7: "articles", +} + +// Decode decodes PaymentMethodElectronicCertificate from json. +func (s *PaymentMethodElectronicCertificate) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentMethodElectronicCertificate to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "type": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + if err := s.Type.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"type\"") + } + case "id": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + v, err := d.Str() + s.ID = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"id\"") + } + case "saved": + requiredBitSet[0] |= 1 << 2 + if err := func() error { + v, err := d.Bool() + s.Saved = bool(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"saved\"") + } + case "status": + requiredBitSet[0] |= 1 << 3 + if err := func() error { + if err := s.Status.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"status\"") + } + case "title": + if err := func() error { + s.Title.Reset() + if err := s.Title.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"title\"") + } + case "card": + if err := func() error { + s.Card.Reset() + if err := s.Card.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"card\"") + } + case "electronic_certificate": + if err := func() error { + s.ElectronicCertificate.Reset() + if err := s.ElectronicCertificate.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"electronic_certificate\"") + } + case "articles": + if err := func() error { + s.Articles = make([]ElectronicCertificateApprovedPaymentArticle, 0) + if err := d.Arr(func(d *jx.Decoder) error { + var elem ElectronicCertificateApprovedPaymentArticle + if err := elem.Decode(d); err != nil { + return err + } + s.Articles = append(s.Articles, elem) + return nil + }); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"articles\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode PaymentMethodElectronicCertificate") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00001111, + } { + 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(jsonFieldsNameOfPaymentMethodElectronicCertificate) { + name = jsonFieldsNameOfPaymentMethodElectronicCertificate[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 *PaymentMethodElectronicCertificate) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentMethodElectronicCertificate) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *PaymentMethodElectronicCertificateCard) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *PaymentMethodElectronicCertificateCard) encodeFields(e *jx.Encoder) { + { + if s.First6.Set { + e.FieldStart("first6") + s.First6.Encode(e) + } + } + { + e.FieldStart("last4") + s.Last4.Encode(e) + } + { + e.FieldStart("expiry_year") + s.ExpiryYear.Encode(e) + } + { + e.FieldStart("expiry_month") + s.ExpiryMonth.Encode(e) + } + { + e.FieldStart("card_type") + s.CardType.Encode(e) + } + { + if s.CardProduct.Set { + e.FieldStart("card_product") + s.CardProduct.Encode(e) + } + } + { + if s.IssuerCountry.Set { + e.FieldStart("issuer_country") + s.IssuerCountry.Encode(e) + } + } + { + if s.IssuerName.Set { + e.FieldStart("issuer_name") + s.IssuerName.Encode(e) + } + } + { + if s.Source.Set { + e.FieldStart("source") + s.Source.Encode(e) + } + } +} + +var jsonFieldsNameOfPaymentMethodElectronicCertificateCard = [9]string{ + 0: "first6", + 1: "last4", + 2: "expiry_year", + 3: "expiry_month", + 4: "card_type", + 5: "card_product", + 6: "issuer_country", + 7: "issuer_name", + 8: "source", +} + +// Decode decodes PaymentMethodElectronicCertificateCard from json. +func (s *PaymentMethodElectronicCertificateCard) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentMethodElectronicCertificateCard to nil") + } + var requiredBitSet [2]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "first6": + if err := func() error { + s.First6.Reset() + if err := s.First6.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"first6\"") + } + case "last4": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + if err := s.Last4.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"last4\"") + } + case "expiry_year": + requiredBitSet[0] |= 1 << 2 + if err := func() error { + if err := s.ExpiryYear.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"expiry_year\"") + } + case "expiry_month": + requiredBitSet[0] |= 1 << 3 + if err := func() error { + if err := s.ExpiryMonth.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"expiry_month\"") + } + case "card_type": + requiredBitSet[0] |= 1 << 4 + if err := func() error { + if err := s.CardType.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"card_type\"") + } + case "card_product": + if err := func() error { + s.CardProduct.Reset() + if err := s.CardProduct.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"card_product\"") + } + case "issuer_country": + if err := func() error { + s.IssuerCountry.Reset() + if err := s.IssuerCountry.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"issuer_country\"") + } + case "issuer_name": + if err := func() error { + s.IssuerName.Reset() + if err := s.IssuerName.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"issuer_name\"") + } + case "source": + if err := func() error { + s.Source.Reset() + if err := s.Source.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"source\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode PaymentMethodElectronicCertificateCard") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [2]uint8{ + 0b00011110, + 0b00000000, + } { + 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(jsonFieldsNameOfPaymentMethodElectronicCertificateCard) { + name = jsonFieldsNameOfPaymentMethodElectronicCertificateCard[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 *PaymentMethodElectronicCertificateCard) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentMethodElectronicCertificateCard) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PaymentMethodElectronicCertificateStatus as json. +func (s PaymentMethodElectronicCertificateStatus) Encode(e *jx.Encoder) { + e.Str(string(s)) +} + +// Decode decodes PaymentMethodElectronicCertificateStatus from json. +func (s *PaymentMethodElectronicCertificateStatus) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentMethodElectronicCertificateStatus to nil") + } + v, err := d.StrBytes() + if err != nil { + return err + } + // Try to use constant string. + switch PaymentMethodElectronicCertificateStatus(v) { + case PaymentMethodElectronicCertificateStatusPending: + *s = PaymentMethodElectronicCertificateStatusPending + case PaymentMethodElectronicCertificateStatusActive: + *s = PaymentMethodElectronicCertificateStatusActive + case PaymentMethodElectronicCertificateStatusInactive: + *s = PaymentMethodElectronicCertificateStatusInactive + default: + *s = PaymentMethodElectronicCertificateStatus(v) + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s PaymentMethodElectronicCertificateStatus) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentMethodElectronicCertificateStatus) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *PaymentMethodGooglePay) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *PaymentMethodGooglePay) encodeFields(e *jx.Encoder) { + { + e.FieldStart("type") + s.Type.Encode(e) + } + { + e.FieldStart("id") + e.Str(s.ID) + } + { + e.FieldStart("saved") + e.Bool(s.Saved) + } + { + e.FieldStart("status") + s.Status.Encode(e) + } + { + if s.Title.Set { + e.FieldStart("title") + s.Title.Encode(e) + } + } +} + +var jsonFieldsNameOfPaymentMethodGooglePay = [5]string{ + 0: "type", + 1: "id", + 2: "saved", + 3: "status", + 4: "title", +} + +// Decode decodes PaymentMethodGooglePay from json. +func (s *PaymentMethodGooglePay) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentMethodGooglePay to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "type": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + if err := s.Type.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"type\"") + } + case "id": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + v, err := d.Str() + s.ID = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"id\"") + } + case "saved": + requiredBitSet[0] |= 1 << 2 + if err := func() error { + v, err := d.Bool() + s.Saved = bool(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"saved\"") + } + case "status": + requiredBitSet[0] |= 1 << 3 + if err := func() error { + if err := s.Status.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"status\"") + } + case "title": + if err := func() error { + s.Title.Reset() + if err := s.Title.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"title\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode PaymentMethodGooglePay") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00001111, + } { + 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(jsonFieldsNameOfPaymentMethodGooglePay) { + name = jsonFieldsNameOfPaymentMethodGooglePay[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 *PaymentMethodGooglePay) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentMethodGooglePay) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PaymentMethodGooglePayStatus as json. +func (s PaymentMethodGooglePayStatus) Encode(e *jx.Encoder) { + e.Str(string(s)) +} + +// Decode decodes PaymentMethodGooglePayStatus from json. +func (s *PaymentMethodGooglePayStatus) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentMethodGooglePayStatus to nil") + } + v, err := d.StrBytes() + if err != nil { + return err + } + // Try to use constant string. + switch PaymentMethodGooglePayStatus(v) { + case PaymentMethodGooglePayStatusPending: + *s = PaymentMethodGooglePayStatusPending + case PaymentMethodGooglePayStatusActive: + *s = PaymentMethodGooglePayStatusActive + case PaymentMethodGooglePayStatusInactive: + *s = PaymentMethodGooglePayStatusInactive + default: + *s = PaymentMethodGooglePayStatus(v) + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s PaymentMethodGooglePayStatus) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentMethodGooglePayStatus) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PaymentMethodId as json. +func (s PaymentMethodId) Encode(e *jx.Encoder) { + unwrapped := string(s) + + e.Str(unwrapped) +} + +// Decode decodes PaymentMethodId from json. +func (s *PaymentMethodId) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentMethodId to nil") + } + var unwrapped string + if err := func() error { + v, err := d.Str() + unwrapped = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "alias") + } + *s = PaymentMethodId(unwrapped) + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s PaymentMethodId) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentMethodId) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *PaymentMethodInstallments) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *PaymentMethodInstallments) encodeFields(e *jx.Encoder) { + { + e.FieldStart("type") + s.Type.Encode(e) + } + { + e.FieldStart("id") + e.Str(s.ID) + } + { + e.FieldStart("saved") + e.Bool(s.Saved) + } + { + e.FieldStart("status") + s.Status.Encode(e) + } + { + if s.Title.Set { + e.FieldStart("title") + s.Title.Encode(e) + } + } +} + +var jsonFieldsNameOfPaymentMethodInstallments = [5]string{ + 0: "type", + 1: "id", + 2: "saved", + 3: "status", + 4: "title", +} + +// Decode decodes PaymentMethodInstallments from json. +func (s *PaymentMethodInstallments) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentMethodInstallments to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "type": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + if err := s.Type.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"type\"") + } + case "id": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + v, err := d.Str() + s.ID = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"id\"") + } + case "saved": + requiredBitSet[0] |= 1 << 2 + if err := func() error { + v, err := d.Bool() + s.Saved = bool(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"saved\"") + } + case "status": + requiredBitSet[0] |= 1 << 3 + if err := func() error { + if err := s.Status.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"status\"") + } + case "title": + if err := func() error { + s.Title.Reset() + if err := s.Title.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"title\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode PaymentMethodInstallments") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00001111, + } { + 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(jsonFieldsNameOfPaymentMethodInstallments) { + name = jsonFieldsNameOfPaymentMethodInstallments[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 *PaymentMethodInstallments) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentMethodInstallments) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PaymentMethodInstallmentsStatus as json. +func (s PaymentMethodInstallmentsStatus) Encode(e *jx.Encoder) { + e.Str(string(s)) +} + +// Decode decodes PaymentMethodInstallmentsStatus from json. +func (s *PaymentMethodInstallmentsStatus) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentMethodInstallmentsStatus to nil") + } + v, err := d.StrBytes() + if err != nil { + return err + } + // Try to use constant string. + switch PaymentMethodInstallmentsStatus(v) { + case PaymentMethodInstallmentsStatusPending: + *s = PaymentMethodInstallmentsStatusPending + case PaymentMethodInstallmentsStatusActive: + *s = PaymentMethodInstallmentsStatusActive + case PaymentMethodInstallmentsStatusInactive: + *s = PaymentMethodInstallmentsStatusInactive + default: + *s = PaymentMethodInstallmentsStatus(v) + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s PaymentMethodInstallmentsStatus) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentMethodInstallmentsStatus) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *PaymentMethodMobileBalance) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *PaymentMethodMobileBalance) encodeFields(e *jx.Encoder) { + { + e.FieldStart("type") + s.Type.Encode(e) + } + { + e.FieldStart("id") + e.Str(s.ID) + } + { + e.FieldStart("saved") + e.Bool(s.Saved) + } + { + e.FieldStart("status") + s.Status.Encode(e) + } + { + if s.Title.Set { + e.FieldStart("title") + s.Title.Encode(e) + } + } +} + +var jsonFieldsNameOfPaymentMethodMobileBalance = [5]string{ + 0: "type", + 1: "id", + 2: "saved", + 3: "status", + 4: "title", +} + +// Decode decodes PaymentMethodMobileBalance from json. +func (s *PaymentMethodMobileBalance) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentMethodMobileBalance to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "type": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + if err := s.Type.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"type\"") + } + case "id": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + v, err := d.Str() + s.ID = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"id\"") + } + case "saved": + requiredBitSet[0] |= 1 << 2 + if err := func() error { + v, err := d.Bool() + s.Saved = bool(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"saved\"") + } + case "status": + requiredBitSet[0] |= 1 << 3 + if err := func() error { + if err := s.Status.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"status\"") + } + case "title": + if err := func() error { + s.Title.Reset() + if err := s.Title.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"title\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode PaymentMethodMobileBalance") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00001111, + } { + 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(jsonFieldsNameOfPaymentMethodMobileBalance) { + name = jsonFieldsNameOfPaymentMethodMobileBalance[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 *PaymentMethodMobileBalance) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentMethodMobileBalance) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PaymentMethodMobileBalanceStatus as json. +func (s PaymentMethodMobileBalanceStatus) Encode(e *jx.Encoder) { + e.Str(string(s)) +} + +// Decode decodes PaymentMethodMobileBalanceStatus from json. +func (s *PaymentMethodMobileBalanceStatus) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentMethodMobileBalanceStatus to nil") + } + v, err := d.StrBytes() + if err != nil { + return err + } + // Try to use constant string. + switch PaymentMethodMobileBalanceStatus(v) { + case PaymentMethodMobileBalanceStatusPending: + *s = PaymentMethodMobileBalanceStatusPending + case PaymentMethodMobileBalanceStatusActive: + *s = PaymentMethodMobileBalanceStatusActive + case PaymentMethodMobileBalanceStatusInactive: + *s = PaymentMethodMobileBalanceStatusInactive + default: + *s = PaymentMethodMobileBalanceStatus(v) + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s PaymentMethodMobileBalanceStatus) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentMethodMobileBalanceStatus) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *PaymentMethodQiwi) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *PaymentMethodQiwi) encodeFields(e *jx.Encoder) { + { + e.FieldStart("type") + s.Type.Encode(e) + } + { + e.FieldStart("id") + e.Str(s.ID) + } + { + e.FieldStart("saved") + e.Bool(s.Saved) + } + { + e.FieldStart("status") + s.Status.Encode(e) + } + { + if s.Title.Set { + e.FieldStart("title") + s.Title.Encode(e) + } + } +} + +var jsonFieldsNameOfPaymentMethodQiwi = [5]string{ + 0: "type", + 1: "id", + 2: "saved", + 3: "status", + 4: "title", +} + +// Decode decodes PaymentMethodQiwi from json. +func (s *PaymentMethodQiwi) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentMethodQiwi to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "type": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + if err := s.Type.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"type\"") + } + case "id": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + v, err := d.Str() + s.ID = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"id\"") + } + case "saved": + requiredBitSet[0] |= 1 << 2 + if err := func() error { + v, err := d.Bool() + s.Saved = bool(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"saved\"") + } + case "status": + requiredBitSet[0] |= 1 << 3 + if err := func() error { + if err := s.Status.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"status\"") + } + case "title": + if err := func() error { + s.Title.Reset() + if err := s.Title.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"title\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode PaymentMethodQiwi") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00001111, + } { + 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(jsonFieldsNameOfPaymentMethodQiwi) { + name = jsonFieldsNameOfPaymentMethodQiwi[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 *PaymentMethodQiwi) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentMethodQiwi) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PaymentMethodQiwiStatus as json. +func (s PaymentMethodQiwiStatus) Encode(e *jx.Encoder) { + e.Str(string(s)) +} + +// Decode decodes PaymentMethodQiwiStatus from json. +func (s *PaymentMethodQiwiStatus) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentMethodQiwiStatus to nil") + } + v, err := d.StrBytes() + if err != nil { + return err + } + // Try to use constant string. + switch PaymentMethodQiwiStatus(v) { + case PaymentMethodQiwiStatusPending: + *s = PaymentMethodQiwiStatusPending + case PaymentMethodQiwiStatusActive: + *s = PaymentMethodQiwiStatusActive + case PaymentMethodQiwiStatusInactive: + *s = PaymentMethodQiwiStatusInactive + default: + *s = PaymentMethodQiwiStatus(v) + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s PaymentMethodQiwiStatus) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentMethodQiwiStatus) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *PaymentMethodSberBnpl) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *PaymentMethodSberBnpl) encodeFields(e *jx.Encoder) { + { + e.FieldStart("type") + s.Type.Encode(e) + } + { + e.FieldStart("id") + e.Str(s.ID) + } + { + e.FieldStart("saved") + e.Bool(s.Saved) + } + { + e.FieldStart("status") + s.Status.Encode(e) + } + { + if s.Title.Set { + e.FieldStart("title") + s.Title.Encode(e) + } + } +} + +var jsonFieldsNameOfPaymentMethodSberBnpl = [5]string{ + 0: "type", + 1: "id", + 2: "saved", + 3: "status", + 4: "title", +} + +// Decode decodes PaymentMethodSberBnpl from json. +func (s *PaymentMethodSberBnpl) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentMethodSberBnpl to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "type": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + if err := s.Type.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"type\"") + } + case "id": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + v, err := d.Str() + s.ID = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"id\"") + } + case "saved": + requiredBitSet[0] |= 1 << 2 + if err := func() error { + v, err := d.Bool() + s.Saved = bool(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"saved\"") + } + case "status": + requiredBitSet[0] |= 1 << 3 + if err := func() error { + if err := s.Status.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"status\"") + } + case "title": + if err := func() error { + s.Title.Reset() + if err := s.Title.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"title\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode PaymentMethodSberBnpl") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00001111, + } { + 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(jsonFieldsNameOfPaymentMethodSberBnpl) { + name = jsonFieldsNameOfPaymentMethodSberBnpl[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 *PaymentMethodSberBnpl) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentMethodSberBnpl) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PaymentMethodSberBnplStatus as json. +func (s PaymentMethodSberBnplStatus) Encode(e *jx.Encoder) { + e.Str(string(s)) +} + +// Decode decodes PaymentMethodSberBnplStatus from json. +func (s *PaymentMethodSberBnplStatus) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentMethodSberBnplStatus to nil") + } + v, err := d.StrBytes() + if err != nil { + return err + } + // Try to use constant string. + switch PaymentMethodSberBnplStatus(v) { + case PaymentMethodSberBnplStatusPending: + *s = PaymentMethodSberBnplStatusPending + case PaymentMethodSberBnplStatusActive: + *s = PaymentMethodSberBnplStatusActive + case PaymentMethodSberBnplStatusInactive: + *s = PaymentMethodSberBnplStatusInactive + default: + *s = PaymentMethodSberBnplStatus(v) + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s PaymentMethodSberBnplStatus) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentMethodSberBnplStatus) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *PaymentMethodSberLoan) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *PaymentMethodSberLoan) encodeFields(e *jx.Encoder) { + { + e.FieldStart("type") + s.Type.Encode(e) + } + { + e.FieldStart("id") + e.Str(s.ID) + } + { + e.FieldStart("saved") + e.Bool(s.Saved) + } + { + e.FieldStart("status") + s.Status.Encode(e) + } + { + if s.Title.Set { + e.FieldStart("title") + s.Title.Encode(e) + } + } + { + if s.LoanOption.Set { + e.FieldStart("loan_option") + s.LoanOption.Encode(e) + } + } + { + if s.DiscountAmount.Set { + e.FieldStart("discount_amount") + s.DiscountAmount.Encode(e) + } + } + { + if s.SuspendedUntil.Set { + e.FieldStart("suspended_until") + s.SuspendedUntil.Encode(e, json.EncodeDateTime) + } + } +} + +var jsonFieldsNameOfPaymentMethodSberLoan = [8]string{ + 0: "type", + 1: "id", + 2: "saved", + 3: "status", + 4: "title", + 5: "loan_option", + 6: "discount_amount", + 7: "suspended_until", +} + +// Decode decodes PaymentMethodSberLoan from json. +func (s *PaymentMethodSberLoan) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentMethodSberLoan to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "type": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + if err := s.Type.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"type\"") + } + case "id": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + v, err := d.Str() + s.ID = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"id\"") + } + case "saved": + requiredBitSet[0] |= 1 << 2 + if err := func() error { + v, err := d.Bool() + s.Saved = bool(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"saved\"") + } + case "status": + requiredBitSet[0] |= 1 << 3 + if err := func() error { + if err := s.Status.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"status\"") + } + case "title": + if err := func() error { + s.Title.Reset() + if err := s.Title.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"title\"") + } + case "loan_option": + if err := func() error { + s.LoanOption.Reset() + if err := s.LoanOption.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"loan_option\"") + } + case "discount_amount": + if err := func() error { + s.DiscountAmount.Reset() + if err := s.DiscountAmount.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"discount_amount\"") + } + case "suspended_until": + if err := func() error { + s.SuspendedUntil.Reset() + if err := s.SuspendedUntil.Decode(d, json.DecodeDateTime); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"suspended_until\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode PaymentMethodSberLoan") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00001111, + } { + 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(jsonFieldsNameOfPaymentMethodSberLoan) { + name = jsonFieldsNameOfPaymentMethodSberLoan[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 *PaymentMethodSberLoan) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentMethodSberLoan) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *PaymentMethodSberLoanDiscountAmount) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *PaymentMethodSberLoanDiscountAmount) encodeFields(e *jx.Encoder) { + { + e.FieldStart("value") + e.Str(s.Value) + } + { + e.FieldStart("currency") + s.Currency.Encode(e) + } +} + +var jsonFieldsNameOfPaymentMethodSberLoanDiscountAmount = [2]string{ + 0: "value", + 1: "currency", +} + +// Decode decodes PaymentMethodSberLoanDiscountAmount from json. +func (s *PaymentMethodSberLoanDiscountAmount) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentMethodSberLoanDiscountAmount to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "value": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + v, err := d.Str() + s.Value = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"value\"") + } + case "currency": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + if err := s.Currency.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"currency\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode PaymentMethodSberLoanDiscountAmount") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000011, + } { + 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(jsonFieldsNameOfPaymentMethodSberLoanDiscountAmount) { + name = jsonFieldsNameOfPaymentMethodSberLoanDiscountAmount[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 *PaymentMethodSberLoanDiscountAmount) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentMethodSberLoanDiscountAmount) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PaymentMethodSberLoanStatus as json. +func (s PaymentMethodSberLoanStatus) Encode(e *jx.Encoder) { + e.Str(string(s)) +} + +// Decode decodes PaymentMethodSberLoanStatus from json. +func (s *PaymentMethodSberLoanStatus) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentMethodSberLoanStatus to nil") + } + v, err := d.StrBytes() + if err != nil { + return err + } + // Try to use constant string. + switch PaymentMethodSberLoanStatus(v) { + case PaymentMethodSberLoanStatusPending: + *s = PaymentMethodSberLoanStatusPending + case PaymentMethodSberLoanStatusActive: + *s = PaymentMethodSberLoanStatusActive + case PaymentMethodSberLoanStatusInactive: + *s = PaymentMethodSberLoanStatusInactive + default: + *s = PaymentMethodSberLoanStatus(v) + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s PaymentMethodSberLoanStatus) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentMethodSberLoanStatus) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *PaymentMethodSberbank) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *PaymentMethodSberbank) encodeFields(e *jx.Encoder) { + { + e.FieldStart("type") + s.Type.Encode(e) + } + { + e.FieldStart("id") + e.Str(s.ID) + } + { + e.FieldStart("saved") + e.Bool(s.Saved) + } + { + e.FieldStart("status") + s.Status.Encode(e) + } + { + if s.Title.Set { + e.FieldStart("title") + s.Title.Encode(e) + } + } + { + if s.Phone.Set { + e.FieldStart("phone") + s.Phone.Encode(e) + } + } + { + if s.Card.Set { + e.FieldStart("card") + s.Card.Encode(e) + } + } +} + +var jsonFieldsNameOfPaymentMethodSberbank = [7]string{ + 0: "type", + 1: "id", + 2: "saved", + 3: "status", + 4: "title", + 5: "phone", + 6: "card", +} + +// Decode decodes PaymentMethodSberbank from json. +func (s *PaymentMethodSberbank) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentMethodSberbank to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "type": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + if err := s.Type.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"type\"") + } + case "id": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + v, err := d.Str() + s.ID = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"id\"") + } + case "saved": + requiredBitSet[0] |= 1 << 2 + if err := func() error { + v, err := d.Bool() + s.Saved = bool(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"saved\"") + } + case "status": + requiredBitSet[0] |= 1 << 3 + if err := func() error { + if err := s.Status.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"status\"") + } + case "title": + if err := func() error { + s.Title.Reset() + if err := s.Title.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"title\"") + } + case "phone": + if err := func() error { + s.Phone.Reset() + if err := s.Phone.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"phone\"") + } + case "card": + if err := func() error { + s.Card.Reset() + if err := s.Card.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"card\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode PaymentMethodSberbank") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00001111, + } { + 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(jsonFieldsNameOfPaymentMethodSberbank) { + name = jsonFieldsNameOfPaymentMethodSberbank[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 *PaymentMethodSberbank) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentMethodSberbank) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PaymentMethodSberbankStatus as json. +func (s PaymentMethodSberbankStatus) Encode(e *jx.Encoder) { + e.Str(string(s)) +} + +// Decode decodes PaymentMethodSberbankStatus from json. +func (s *PaymentMethodSberbankStatus) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentMethodSberbankStatus to nil") + } + v, err := d.StrBytes() + if err != nil { + return err + } + // Try to use constant string. + switch PaymentMethodSberbankStatus(v) { + case PaymentMethodSberbankStatusPending: + *s = PaymentMethodSberbankStatusPending + case PaymentMethodSberbankStatusActive: + *s = PaymentMethodSberbankStatusActive + case PaymentMethodSberbankStatusInactive: + *s = PaymentMethodSberbankStatusInactive + default: + *s = PaymentMethodSberbankStatus(v) + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s PaymentMethodSberbankStatus) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentMethodSberbankStatus) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *PaymentMethodSbp) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *PaymentMethodSbp) encodeFields(e *jx.Encoder) { + { + e.FieldStart("type") + s.Type.Encode(e) + } + { + e.FieldStart("id") + e.Str(s.ID) + } + { + e.FieldStart("saved") + e.Bool(s.Saved) + } + { + e.FieldStart("status") + s.Status.Encode(e) + } + { + if s.Title.Set { + e.FieldStart("title") + s.Title.Encode(e) + } + } + { + if s.SbpOperationID.Set { + e.FieldStart("sbp_operation_id") + s.SbpOperationID.Encode(e) + } + } + { + if s.PayerBankDetails.Set { + e.FieldStart("payer_bank_details") + s.PayerBankDetails.Encode(e) + } + } +} + +var jsonFieldsNameOfPaymentMethodSbp = [7]string{ + 0: "type", + 1: "id", + 2: "saved", + 3: "status", + 4: "title", + 5: "sbp_operation_id", + 6: "payer_bank_details", +} + +// Decode decodes PaymentMethodSbp from json. +func (s *PaymentMethodSbp) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentMethodSbp to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "type": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + if err := s.Type.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"type\"") + } + case "id": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + v, err := d.Str() + s.ID = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"id\"") + } + case "saved": + requiredBitSet[0] |= 1 << 2 + if err := func() error { + v, err := d.Bool() + s.Saved = bool(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"saved\"") + } + case "status": + requiredBitSet[0] |= 1 << 3 + if err := func() error { + if err := s.Status.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"status\"") + } + case "title": + if err := func() error { + s.Title.Reset() + if err := s.Title.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"title\"") + } + case "sbp_operation_id": + if err := func() error { + s.SbpOperationID.Reset() + if err := s.SbpOperationID.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"sbp_operation_id\"") + } + case "payer_bank_details": + if err := func() error { + s.PayerBankDetails.Reset() + if err := s.PayerBankDetails.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"payer_bank_details\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode PaymentMethodSbp") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00001111, + } { + 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(jsonFieldsNameOfPaymentMethodSbp) { + name = jsonFieldsNameOfPaymentMethodSbp[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 *PaymentMethodSbp) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentMethodSbp) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PaymentMethodSbpStatus as json. +func (s PaymentMethodSbpStatus) Encode(e *jx.Encoder) { + e.Str(string(s)) +} + +// Decode decodes PaymentMethodSbpStatus from json. +func (s *PaymentMethodSbpStatus) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentMethodSbpStatus to nil") + } + v, err := d.StrBytes() + if err != nil { + return err + } + // Try to use constant string. + switch PaymentMethodSbpStatus(v) { + case PaymentMethodSbpStatusPending: + *s = PaymentMethodSbpStatusPending + case PaymentMethodSbpStatusActive: + *s = PaymentMethodSbpStatusActive + case PaymentMethodSbpStatusInactive: + *s = PaymentMethodSbpStatusInactive + default: + *s = PaymentMethodSbpStatus(v) + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s PaymentMethodSbpStatus) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentMethodSbpStatus) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PaymentMethodStatus as json. +func (s PaymentMethodStatus) Encode(e *jx.Encoder) { + e.Str(string(s)) +} + +// Decode decodes PaymentMethodStatus from json. +func (s *PaymentMethodStatus) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentMethodStatus to nil") + } + v, err := d.StrBytes() + if err != nil { + return err + } + // Try to use constant string. + switch PaymentMethodStatus(v) { + case PaymentMethodStatusPending: + *s = PaymentMethodStatusPending + case PaymentMethodStatusActive: + *s = PaymentMethodStatusActive + case PaymentMethodStatusInactive: + *s = PaymentMethodStatusInactive + default: + *s = PaymentMethodStatus(v) + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s PaymentMethodStatus) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentMethodStatus) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *PaymentMethodTinkoffBank) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *PaymentMethodTinkoffBank) encodeFields(e *jx.Encoder) { + { + e.FieldStart("type") + s.Type.Encode(e) + } + { + e.FieldStart("id") + e.Str(s.ID) + } + { + e.FieldStart("saved") + e.Bool(s.Saved) + } + { + e.FieldStart("status") + s.Status.Encode(e) + } + { + if s.Title.Set { + e.FieldStart("title") + s.Title.Encode(e) + } + } + { + if s.Card.Set { + e.FieldStart("card") + s.Card.Encode(e) + } + } +} + +var jsonFieldsNameOfPaymentMethodTinkoffBank = [6]string{ + 0: "type", + 1: "id", + 2: "saved", + 3: "status", + 4: "title", + 5: "card", +} + +// Decode decodes PaymentMethodTinkoffBank from json. +func (s *PaymentMethodTinkoffBank) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentMethodTinkoffBank to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "type": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + if err := s.Type.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"type\"") + } + case "id": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + v, err := d.Str() + s.ID = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"id\"") + } + case "saved": + requiredBitSet[0] |= 1 << 2 + if err := func() error { + v, err := d.Bool() + s.Saved = bool(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"saved\"") + } + case "status": + requiredBitSet[0] |= 1 << 3 + if err := func() error { + if err := s.Status.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"status\"") + } + case "title": + if err := func() error { + s.Title.Reset() + if err := s.Title.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"title\"") + } + case "card": + if err := func() error { + s.Card.Reset() + if err := s.Card.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"card\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode PaymentMethodTinkoffBank") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00001111, + } { + 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(jsonFieldsNameOfPaymentMethodTinkoffBank) { + name = jsonFieldsNameOfPaymentMethodTinkoffBank[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 *PaymentMethodTinkoffBank) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentMethodTinkoffBank) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PaymentMethodTinkoffBankStatus as json. +func (s PaymentMethodTinkoffBankStatus) Encode(e *jx.Encoder) { + e.Str(string(s)) +} + +// Decode decodes PaymentMethodTinkoffBankStatus from json. +func (s *PaymentMethodTinkoffBankStatus) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentMethodTinkoffBankStatus to nil") + } + v, err := d.StrBytes() + if err != nil { + return err + } + // Try to use constant string. + switch PaymentMethodTinkoffBankStatus(v) { + case PaymentMethodTinkoffBankStatusPending: + *s = PaymentMethodTinkoffBankStatusPending + case PaymentMethodTinkoffBankStatusActive: + *s = PaymentMethodTinkoffBankStatusActive + case PaymentMethodTinkoffBankStatusInactive: + *s = PaymentMethodTinkoffBankStatusInactive + default: + *s = PaymentMethodTinkoffBankStatus(v) + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s PaymentMethodTinkoffBankStatus) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentMethodTinkoffBankStatus) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PaymentMethodTitle as json. +func (s PaymentMethodTitle) Encode(e *jx.Encoder) { + unwrapped := string(s) + + e.Str(unwrapped) +} + +// Decode decodes PaymentMethodTitle from json. +func (s *PaymentMethodTitle) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentMethodTitle to nil") + } + var unwrapped string + if err := func() error { + v, err := d.Str() + unwrapped = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "alias") + } + *s = PaymentMethodTitle(unwrapped) + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s PaymentMethodTitle) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentMethodTitle) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PaymentMethodType as json. +func (s PaymentMethodType) Encode(e *jx.Encoder) { + e.Str(string(s)) +} + +// Decode decodes PaymentMethodType from json. +func (s *PaymentMethodType) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentMethodType to nil") + } + v, err := d.StrBytes() + if err != nil { + return err + } + // Try to use constant string. + switch PaymentMethodType(v) { + case PaymentMethodTypeBankCard: + *s = PaymentMethodTypeBankCard + case PaymentMethodTypeCash: + *s = PaymentMethodTypeCash + case PaymentMethodTypeAlfabank: + *s = PaymentMethodTypeAlfabank + case PaymentMethodTypeWebmoney: + *s = PaymentMethodTypeWebmoney + case PaymentMethodTypeWechat: + *s = PaymentMethodTypeWechat + case PaymentMethodTypeApplePay: + *s = PaymentMethodTypeApplePay + case PaymentMethodTypeGooglePay: + *s = PaymentMethodTypeGooglePay + case PaymentMethodTypeQiwi: + *s = PaymentMethodTypeQiwi + case PaymentMethodTypeInstallments: + *s = PaymentMethodTypeInstallments + case PaymentMethodTypeYooMoney: + *s = PaymentMethodTypeYooMoney + case PaymentMethodTypeSberbank: + *s = PaymentMethodTypeSberbank + case PaymentMethodTypeMobileBalance: + *s = PaymentMethodTypeMobileBalance + case PaymentMethodTypeB2bSberbank: + *s = PaymentMethodTypeB2bSberbank + case PaymentMethodTypeTinkoffBank: + *s = PaymentMethodTypeTinkoffBank + case PaymentMethodTypeSbp: + *s = PaymentMethodTypeSbp + case PaymentMethodTypeSberLoan: + *s = PaymentMethodTypeSberLoan + case PaymentMethodTypeElectronicCertificate: + *s = PaymentMethodTypeElectronicCertificate + case PaymentMethodTypeSberBnpl: + *s = PaymentMethodTypeSberBnpl + default: + *s = PaymentMethodType(v) + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s PaymentMethodType) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentMethodType) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *PaymentMethodWeChat) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *PaymentMethodWeChat) encodeFields(e *jx.Encoder) { + { + e.FieldStart("type") + s.Type.Encode(e) + } + { + e.FieldStart("id") + e.Str(s.ID) + } + { + e.FieldStart("saved") + e.Bool(s.Saved) + } + { + e.FieldStart("status") + s.Status.Encode(e) + } + { + if s.Title.Set { + e.FieldStart("title") + s.Title.Encode(e) + } + } +} + +var jsonFieldsNameOfPaymentMethodWeChat = [5]string{ + 0: "type", + 1: "id", + 2: "saved", + 3: "status", + 4: "title", +} + +// Decode decodes PaymentMethodWeChat from json. +func (s *PaymentMethodWeChat) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentMethodWeChat to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "type": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + if err := s.Type.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"type\"") + } + case "id": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + v, err := d.Str() + s.ID = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"id\"") + } + case "saved": + requiredBitSet[0] |= 1 << 2 + if err := func() error { + v, err := d.Bool() + s.Saved = bool(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"saved\"") + } + case "status": + requiredBitSet[0] |= 1 << 3 + if err := func() error { + if err := s.Status.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"status\"") + } + case "title": + if err := func() error { + s.Title.Reset() + if err := s.Title.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"title\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode PaymentMethodWeChat") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00001111, + } { + 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(jsonFieldsNameOfPaymentMethodWeChat) { + name = jsonFieldsNameOfPaymentMethodWeChat[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 *PaymentMethodWeChat) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentMethodWeChat) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PaymentMethodWeChatStatus as json. +func (s PaymentMethodWeChatStatus) Encode(e *jx.Encoder) { + e.Str(string(s)) +} + +// Decode decodes PaymentMethodWeChatStatus from json. +func (s *PaymentMethodWeChatStatus) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentMethodWeChatStatus to nil") + } + v, err := d.StrBytes() + if err != nil { + return err + } + // Try to use constant string. + switch PaymentMethodWeChatStatus(v) { + case PaymentMethodWeChatStatusPending: + *s = PaymentMethodWeChatStatusPending + case PaymentMethodWeChatStatusActive: + *s = PaymentMethodWeChatStatusActive + case PaymentMethodWeChatStatusInactive: + *s = PaymentMethodWeChatStatusInactive + default: + *s = PaymentMethodWeChatStatus(v) + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s PaymentMethodWeChatStatus) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentMethodWeChatStatus) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *PaymentMethodWebmoney) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *PaymentMethodWebmoney) encodeFields(e *jx.Encoder) { + { + e.FieldStart("type") + s.Type.Encode(e) + } + { + e.FieldStart("id") + e.Str(s.ID) + } + { + e.FieldStart("saved") + e.Bool(s.Saved) + } + { + e.FieldStart("status") + s.Status.Encode(e) + } + { + if s.Title.Set { + e.FieldStart("title") + s.Title.Encode(e) + } + } +} + +var jsonFieldsNameOfPaymentMethodWebmoney = [5]string{ + 0: "type", + 1: "id", + 2: "saved", + 3: "status", + 4: "title", +} + +// Decode decodes PaymentMethodWebmoney from json. +func (s *PaymentMethodWebmoney) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentMethodWebmoney to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "type": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + if err := s.Type.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"type\"") + } + case "id": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + v, err := d.Str() + s.ID = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"id\"") + } + case "saved": + requiredBitSet[0] |= 1 << 2 + if err := func() error { + v, err := d.Bool() + s.Saved = bool(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"saved\"") + } + case "status": + requiredBitSet[0] |= 1 << 3 + if err := func() error { + if err := s.Status.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"status\"") + } + case "title": + if err := func() error { + s.Title.Reset() + if err := s.Title.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"title\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode PaymentMethodWebmoney") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00001111, + } { + 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(jsonFieldsNameOfPaymentMethodWebmoney) { + name = jsonFieldsNameOfPaymentMethodWebmoney[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 *PaymentMethodWebmoney) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentMethodWebmoney) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PaymentMethodWebmoneyStatus as json. +func (s PaymentMethodWebmoneyStatus) Encode(e *jx.Encoder) { + e.Str(string(s)) +} + +// Decode decodes PaymentMethodWebmoneyStatus from json. +func (s *PaymentMethodWebmoneyStatus) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentMethodWebmoneyStatus to nil") + } + v, err := d.StrBytes() + if err != nil { + return err + } + // Try to use constant string. + switch PaymentMethodWebmoneyStatus(v) { + case PaymentMethodWebmoneyStatusPending: + *s = PaymentMethodWebmoneyStatusPending + case PaymentMethodWebmoneyStatusActive: + *s = PaymentMethodWebmoneyStatusActive + case PaymentMethodWebmoneyStatusInactive: + *s = PaymentMethodWebmoneyStatusInactive + default: + *s = PaymentMethodWebmoneyStatus(v) + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s PaymentMethodWebmoneyStatus) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentMethodWebmoneyStatus) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *PaymentMethodYooMoney) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *PaymentMethodYooMoney) encodeFields(e *jx.Encoder) { + { + e.FieldStart("type") + s.Type.Encode(e) + } + { + e.FieldStart("id") + e.Str(s.ID) + } + { + e.FieldStart("saved") + e.Bool(s.Saved) + } + { + e.FieldStart("status") + s.Status.Encode(e) + } + { + if s.Title.Set { + e.FieldStart("title") + s.Title.Encode(e) + } + } + { + if s.AccountNumber.Set { + e.FieldStart("account_number") + s.AccountNumber.Encode(e) + } + } +} + +var jsonFieldsNameOfPaymentMethodYooMoney = [6]string{ + 0: "type", + 1: "id", + 2: "saved", + 3: "status", + 4: "title", + 5: "account_number", +} + +// Decode decodes PaymentMethodYooMoney from json. +func (s *PaymentMethodYooMoney) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentMethodYooMoney to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "type": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + if err := s.Type.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"type\"") + } + case "id": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + v, err := d.Str() + s.ID = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"id\"") + } + case "saved": + requiredBitSet[0] |= 1 << 2 + if err := func() error { + v, err := d.Bool() + s.Saved = bool(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"saved\"") + } + case "status": + requiredBitSet[0] |= 1 << 3 + if err := func() error { + if err := s.Status.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"status\"") + } + case "title": + if err := func() error { + s.Title.Reset() + if err := s.Title.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"title\"") + } + case "account_number": + if err := func() error { + s.AccountNumber.Reset() + if err := s.AccountNumber.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"account_number\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode PaymentMethodYooMoney") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00001111, + } { + 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(jsonFieldsNameOfPaymentMethodYooMoney) { + name = jsonFieldsNameOfPaymentMethodYooMoney[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 *PaymentMethodYooMoney) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentMethodYooMoney) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PaymentMethodYooMoneyStatus as json. +func (s PaymentMethodYooMoneyStatus) Encode(e *jx.Encoder) { + e.Str(string(s)) +} + +// Decode decodes PaymentMethodYooMoneyStatus from json. +func (s *PaymentMethodYooMoneyStatus) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentMethodYooMoneyStatus to nil") + } + v, err := d.StrBytes() + if err != nil { + return err + } + // Try to use constant string. + switch PaymentMethodYooMoneyStatus(v) { + case PaymentMethodYooMoneyStatusPending: + *s = PaymentMethodYooMoneyStatusPending + case PaymentMethodYooMoneyStatusActive: + *s = PaymentMethodYooMoneyStatusActive + case PaymentMethodYooMoneyStatusInactive: + *s = PaymentMethodYooMoneyStatusInactive + default: + *s = PaymentMethodYooMoneyStatus(v) + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s PaymentMethodYooMoneyStatus) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentMethodYooMoneyStatus) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *PaymentMethodsConfirmationDataRedirect) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *PaymentMethodsConfirmationDataRedirect) encodeFields(e *jx.Encoder) { + { + e.FieldStart("type") + s.Type.Encode(e) + } + { + if s.Enforce.Set { + e.FieldStart("enforce") + s.Enforce.Encode(e) + } + } + { + e.FieldStart("return_url") + e.Str(s.ReturnURL) + } + { + if s.Locale.Set { + e.FieldStart("locale") + s.Locale.Encode(e) + } + } +} + +var jsonFieldsNameOfPaymentMethodsConfirmationDataRedirect = [4]string{ + 0: "type", + 1: "enforce", + 2: "return_url", + 3: "locale", +} + +// Decode decodes PaymentMethodsConfirmationDataRedirect from json. +func (s *PaymentMethodsConfirmationDataRedirect) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentMethodsConfirmationDataRedirect to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "type": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + if err := s.Type.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"type\"") + } + case "enforce": + if err := func() error { + s.Enforce.Reset() + if err := s.Enforce.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"enforce\"") + } + case "return_url": + requiredBitSet[0] |= 1 << 2 + if err := func() error { + v, err := d.Str() + s.ReturnURL = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"return_url\"") + } + case "locale": + if err := func() error { + s.Locale.Reset() + if err := s.Locale.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"locale\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode PaymentMethodsConfirmationDataRedirect") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000101, + } { + 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(jsonFieldsNameOfPaymentMethodsConfirmationDataRedirect) { + name = jsonFieldsNameOfPaymentMethodsConfirmationDataRedirect[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 *PaymentMethodsConfirmationDataRedirect) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentMethodsConfirmationDataRedirect) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *PaymentMethodsConfirmationRedirect) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *PaymentMethodsConfirmationRedirect) encodeFields(e *jx.Encoder) { + { + e.FieldStart("type") + s.Type.Encode(e) + } + { + e.FieldStart("confirmation_url") + e.Str(s.ConfirmationURL) + } + { + if s.Enforce.Set { + e.FieldStart("enforce") + s.Enforce.Encode(e) + } + } + { + if s.ReturnURL.Set { + e.FieldStart("return_url") + s.ReturnURL.Encode(e) + } + } +} + +var jsonFieldsNameOfPaymentMethodsConfirmationRedirect = [4]string{ + 0: "type", + 1: "confirmation_url", + 2: "enforce", + 3: "return_url", +} + +// Decode decodes PaymentMethodsConfirmationRedirect from json. +func (s *PaymentMethodsConfirmationRedirect) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentMethodsConfirmationRedirect to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "type": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + if err := s.Type.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"type\"") + } + case "confirmation_url": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + v, err := d.Str() + s.ConfirmationURL = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"confirmation_url\"") + } + case "enforce": + if err := func() error { + s.Enforce.Reset() + if err := s.Enforce.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"enforce\"") + } + case "return_url": + if err := func() error { + s.ReturnURL.Reset() + if err := s.ReturnURL.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"return_url\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode PaymentMethodsConfirmationRedirect") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000011, + } { + 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(jsonFieldsNameOfPaymentMethodsConfirmationRedirect) { + name = jsonFieldsNameOfPaymentMethodsConfirmationRedirect[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 *PaymentMethodsConfirmationRedirect) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentMethodsConfirmationRedirect) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PaymentMethodsConfirmationType as json. +func (s PaymentMethodsConfirmationType) Encode(e *jx.Encoder) { + e.Str(string(s)) +} + +// Decode decodes PaymentMethodsConfirmationType from json. +func (s *PaymentMethodsConfirmationType) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentMethodsConfirmationType to nil") + } + v, err := d.StrBytes() + if err != nil { + return err + } + // Try to use constant string. + switch PaymentMethodsConfirmationType(v) { + case PaymentMethodsConfirmationTypeRedirect: + *s = PaymentMethodsConfirmationTypeRedirect + default: + *s = PaymentMethodsConfirmationType(v) + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s PaymentMethodsConfirmationType) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentMethodsConfirmationType) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PaymentMethodsPaymentMethodIDGetInternalServerError as json. +func (s *PaymentMethodsPaymentMethodIDGetInternalServerError) Encode(e *jx.Encoder) { + unwrapped := (*TooManyRequests)(s) + + unwrapped.Encode(e) +} + +// Decode decodes PaymentMethodsPaymentMethodIDGetInternalServerError from json. +func (s *PaymentMethodsPaymentMethodIDGetInternalServerError) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentMethodsPaymentMethodIDGetInternalServerError to nil") + } + var unwrapped TooManyRequests + if err := func() error { + if err := unwrapped.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "alias") + } + *s = PaymentMethodsPaymentMethodIDGetInternalServerError(unwrapped) + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s *PaymentMethodsPaymentMethodIDGetInternalServerError) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentMethodsPaymentMethodIDGetInternalServerError) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PaymentMethodsPaymentMethodIDGetOK as json. +func (s PaymentMethodsPaymentMethodIDGetOK) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +func (s PaymentMethodsPaymentMethodIDGetOK) encodeFields(e *jx.Encoder) { + switch s.Type { + case SavePaymentMethodBankCardPaymentMethodsPaymentMethodIDGetOK: + e.FieldStart("type") + e.Str("SavePaymentMethodBankCard") + { + s := s.SavePaymentMethodBankCard + { + e.FieldStart("id") + e.Str(s.ID) + } + { + e.FieldStart("saved") + e.Bool(s.Saved) + } + { + e.FieldStart("status") + s.Status.Encode(e) + } + { + e.FieldStart("holder") + s.Holder.Encode(e) + } + { + if s.Title.Set { + e.FieldStart("title") + s.Title.Encode(e) + } + } + { + if s.Confirmation.Set { + e.FieldStart("confirmation") + s.Confirmation.Encode(e) + } + } + { + if s.Card.Set { + e.FieldStart("card") + s.Card.Encode(e) + } + } + } + } +} + +// Decode decodes PaymentMethodsPaymentMethodIDGetOK from json. +func (s *PaymentMethodsPaymentMethodIDGetOK) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentMethodsPaymentMethodIDGetOK to nil") + } + // Sum type discriminator. + if typ := d.Next(); typ != jx.Object { + return errors.Errorf("unexpected json type %q", typ) + } + + var found bool + if err := d.Capture(func(d *jx.Decoder) error { + return d.ObjBytes(func(d *jx.Decoder, key []byte) error { + if found { + return d.Skip() + } + switch string(key) { + case "type": + typ, err := d.Str() + if err != nil { + return err + } + switch typ { + case "SavePaymentMethodBankCard": + s.Type = SavePaymentMethodBankCardPaymentMethodsPaymentMethodIDGetOK + found = true + default: + return errors.Errorf("unknown type %s", typ) + } + return nil + } + return d.Skip() + }) + }); err != nil { + return errors.Wrap(err, "capture") + } + if !found { + return errors.New("unable to detect sum type variant") + } + switch s.Type { + case SavePaymentMethodBankCardPaymentMethodsPaymentMethodIDGetOK: + if err := s.SavePaymentMethodBankCard.Decode(d); err != nil { + return err + } + default: + return errors.Errorf("inferred invalid type: %s", s.Type) + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s PaymentMethodsPaymentMethodIDGetOK) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentMethodsPaymentMethodIDGetOK) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PaymentMethodsPaymentMethodIDGetTooManyRequests as json. +func (s *PaymentMethodsPaymentMethodIDGetTooManyRequests) Encode(e *jx.Encoder) { + unwrapped := (*TooManyRequests)(s) + + unwrapped.Encode(e) +} + +// Decode decodes PaymentMethodsPaymentMethodIDGetTooManyRequests from json. +func (s *PaymentMethodsPaymentMethodIDGetTooManyRequests) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentMethodsPaymentMethodIDGetTooManyRequests to nil") + } + var unwrapped TooManyRequests + if err := func() error { + if err := unwrapped.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "alias") + } + *s = PaymentMethodsPaymentMethodIDGetTooManyRequests(unwrapped) + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s *PaymentMethodsPaymentMethodIDGetTooManyRequests) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentMethodsPaymentMethodIDGetTooManyRequests) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PaymentMethodsPostInternalServerError as json. +func (s *PaymentMethodsPostInternalServerError) Encode(e *jx.Encoder) { + unwrapped := (*TooManyRequests)(s) + + unwrapped.Encode(e) +} + +// Decode decodes PaymentMethodsPostInternalServerError from json. +func (s *PaymentMethodsPostInternalServerError) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentMethodsPostInternalServerError to nil") + } + var unwrapped TooManyRequests + if err := func() error { + if err := unwrapped.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "alias") + } + *s = PaymentMethodsPostInternalServerError(unwrapped) + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s *PaymentMethodsPostInternalServerError) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentMethodsPostInternalServerError) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PaymentMethodsPostOK as json. +func (s PaymentMethodsPostOK) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +func (s PaymentMethodsPostOK) encodeFields(e *jx.Encoder) { + switch s.Type { + case SavePaymentMethodBankCardPaymentMethodsPostOK: + e.FieldStart("type") + e.Str("SavePaymentMethodBankCard") + { + s := s.SavePaymentMethodBankCard + { + e.FieldStart("id") + e.Str(s.ID) + } + { + e.FieldStart("saved") + e.Bool(s.Saved) + } + { + e.FieldStart("status") + s.Status.Encode(e) + } + { + e.FieldStart("holder") + s.Holder.Encode(e) + } + { + if s.Title.Set { + e.FieldStart("title") + s.Title.Encode(e) + } + } + { + if s.Confirmation.Set { + e.FieldStart("confirmation") + s.Confirmation.Encode(e) + } + } + { + if s.Card.Set { + e.FieldStart("card") + s.Card.Encode(e) + } + } + } + } +} + +// Decode decodes PaymentMethodsPostOK from json. +func (s *PaymentMethodsPostOK) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentMethodsPostOK to nil") + } + // Sum type discriminator. + if typ := d.Next(); typ != jx.Object { + return errors.Errorf("unexpected json type %q", typ) + } + + var found bool + if err := d.Capture(func(d *jx.Decoder) error { + return d.ObjBytes(func(d *jx.Decoder, key []byte) error { + if found { + return d.Skip() + } + switch string(key) { + case "type": + typ, err := d.Str() + if err != nil { + return err + } + switch typ { + case "SavePaymentMethodBankCard": + s.Type = SavePaymentMethodBankCardPaymentMethodsPostOK + found = true + default: + return errors.Errorf("unknown type %s", typ) + } + return nil + } + return d.Skip() + }) + }); err != nil { + return errors.Wrap(err, "capture") + } + if !found { + return errors.New("unable to detect sum type variant") + } + switch s.Type { + case SavePaymentMethodBankCardPaymentMethodsPostOK: + if err := s.SavePaymentMethodBankCard.Decode(d); err != nil { + return err + } + default: + return errors.Errorf("inferred invalid type: %s", s.Type) + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s PaymentMethodsPostOK) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentMethodsPostOK) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PaymentMethodsPostReq as json. +func (s PaymentMethodsPostReq) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +func (s PaymentMethodsPostReq) encodeFields(e *jx.Encoder) { + switch s.Type { + case SavePaymentMethodDataBankCardPaymentMethodsPostReq: + e.FieldStart("type") + e.Str("SavePaymentMethodDataBankCard") + { + s := s.SavePaymentMethodDataBankCard + { + if s.Holder.Set { + e.FieldStart("holder") + s.Holder.Encode(e) + } + } + { + if s.ClientIP.Set { + e.FieldStart("client_ip") + s.ClientIP.Encode(e) + } + } + { + if s.Confirmation.Set { + e.FieldStart("confirmation") + s.Confirmation.Encode(e) + } + } + { + if s.Card.Set { + e.FieldStart("card") + s.Card.Encode(e) + } + } + } + } +} + +// Decode decodes PaymentMethodsPostReq from json. +func (s *PaymentMethodsPostReq) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentMethodsPostReq to nil") + } + // Sum type discriminator. + if typ := d.Next(); typ != jx.Object { + return errors.Errorf("unexpected json type %q", typ) + } + + var found bool + if err := d.Capture(func(d *jx.Decoder) error { + return d.ObjBytes(func(d *jx.Decoder, key []byte) error { + if found { + return d.Skip() + } + switch string(key) { + case "type": + typ, err := d.Str() + if err != nil { + return err + } + switch typ { + case "SavePaymentMethodDataBankCard": + s.Type = SavePaymentMethodDataBankCardPaymentMethodsPostReq + found = true + default: + return errors.Errorf("unknown type %s", typ) + } + return nil + } + return d.Skip() + }) + }); err != nil { + return errors.Wrap(err, "capture") + } + if !found { + return errors.New("unable to detect sum type variant") + } + switch s.Type { + case SavePaymentMethodDataBankCardPaymentMethodsPostReq: + if err := s.SavePaymentMethodDataBankCard.Decode(d); err != nil { + return err + } + default: + return errors.Errorf("inferred invalid type: %s", s.Type) + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s PaymentMethodsPostReq) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentMethodsPostReq) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PaymentMethodsPostTooManyRequests as json. +func (s *PaymentMethodsPostTooManyRequests) Encode(e *jx.Encoder) { + unwrapped := (*TooManyRequests)(s) + + unwrapped.Encode(e) +} + +// Decode decodes PaymentMethodsPostTooManyRequests from json. +func (s *PaymentMethodsPostTooManyRequests) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentMethodsPostTooManyRequests to nil") + } + var unwrapped TooManyRequests + if err := func() error { + if err := unwrapped.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "alias") + } + *s = PaymentMethodsPostTooManyRequests(unwrapped) + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s *PaymentMethodsPostTooManyRequests) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentMethodsPostTooManyRequests) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *PaymentOrderDataUtilities) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *PaymentOrderDataUtilities) encodeFields(e *jx.Encoder) { + { + e.FieldStart("type") + s.Type.Encode(e) + } + { + e.FieldStart("amount") + s.Amount.Encode(e) + } + { + e.FieldStart("payment_purpose") + e.Str(s.PaymentPurpose) + } + { + e.FieldStart("recipient") + s.Recipient.Encode(e) + } + { + if s.Kbk.Set { + e.FieldStart("kbk") + s.Kbk.Encode(e) + } + } + { + if s.Oktmo.Set { + e.FieldStart("oktmo") + s.Oktmo.Encode(e) + } + } + { + if s.PaymentPeriod.Set { + e.FieldStart("payment_period") + s.PaymentPeriod.Encode(e) + } + } + { + if s.PaymentDocumentID.Set { + e.FieldStart("payment_document_id") + s.PaymentDocumentID.Encode(e) + } + } + { + if s.PaymentDocumentNumber.Set { + e.FieldStart("payment_document_number") + s.PaymentDocumentNumber.Encode(e) + } + } + { + if s.AccountNumber.Set { + e.FieldStart("account_number") + s.AccountNumber.Encode(e) + } + } + { + if s.UnifiedAccountNumber.Set { + e.FieldStart("unified_account_number") + s.UnifiedAccountNumber.Encode(e) + } + } + { + if s.ServiceID.Set { + e.FieldStart("service_id") + s.ServiceID.Encode(e) + } + } +} + +var jsonFieldsNameOfPaymentOrderDataUtilities = [12]string{ + 0: "type", + 1: "amount", + 2: "payment_purpose", + 3: "recipient", + 4: "kbk", + 5: "oktmo", + 6: "payment_period", + 7: "payment_document_id", + 8: "payment_document_number", + 9: "account_number", + 10: "unified_account_number", + 11: "service_id", +} + +// Decode decodes PaymentOrderDataUtilities from json. +func (s *PaymentOrderDataUtilities) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentOrderDataUtilities to nil") + } + var requiredBitSet [2]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "type": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + if err := s.Type.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"type\"") + } + case "amount": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + if err := s.Amount.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"amount\"") + } + case "payment_purpose": + requiredBitSet[0] |= 1 << 2 + if err := func() error { + v, err := d.Str() + s.PaymentPurpose = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"payment_purpose\"") + } + case "recipient": + requiredBitSet[0] |= 1 << 3 + if err := func() error { + if err := s.Recipient.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"recipient\"") + } + case "kbk": + if err := func() error { + s.Kbk.Reset() + if err := s.Kbk.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"kbk\"") + } + case "oktmo": + if err := func() error { + s.Oktmo.Reset() + if err := s.Oktmo.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"oktmo\"") + } + case "payment_period": + if err := func() error { + s.PaymentPeriod.Reset() + if err := s.PaymentPeriod.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"payment_period\"") + } + case "payment_document_id": + if err := func() error { + s.PaymentDocumentID.Reset() + if err := s.PaymentDocumentID.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"payment_document_id\"") + } + case "payment_document_number": + if err := func() error { + s.PaymentDocumentNumber.Reset() + if err := s.PaymentDocumentNumber.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"payment_document_number\"") + } + case "account_number": + if err := func() error { + s.AccountNumber.Reset() + if err := s.AccountNumber.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"account_number\"") + } + case "unified_account_number": + if err := func() error { + s.UnifiedAccountNumber.Reset() + if err := s.UnifiedAccountNumber.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"unified_account_number\"") + } + case "service_id": + if err := func() error { + s.ServiceID.Reset() + if err := s.ServiceID.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"service_id\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode PaymentOrderDataUtilities") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [2]uint8{ + 0b00001111, + 0b00000000, + } { + 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(jsonFieldsNameOfPaymentOrderDataUtilities) { + name = jsonFieldsNameOfPaymentOrderDataUtilities[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 *PaymentOrderDataUtilities) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentOrderDataUtilities) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *PaymentOrderDataUtilitiesAmount) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *PaymentOrderDataUtilitiesAmount) encodeFields(e *jx.Encoder) { + { + e.FieldStart("value") + e.Str(s.Value) + } + { + e.FieldStart("currency") + s.Currency.Encode(e) + } +} + +var jsonFieldsNameOfPaymentOrderDataUtilitiesAmount = [2]string{ + 0: "value", + 1: "currency", +} + +// Decode decodes PaymentOrderDataUtilitiesAmount from json. +func (s *PaymentOrderDataUtilitiesAmount) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentOrderDataUtilitiesAmount to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "value": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + v, err := d.Str() + s.Value = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"value\"") + } + case "currency": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + if err := s.Currency.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"currency\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode PaymentOrderDataUtilitiesAmount") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000011, + } { + 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(jsonFieldsNameOfPaymentOrderDataUtilitiesAmount) { + name = jsonFieldsNameOfPaymentOrderDataUtilitiesAmount[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 *PaymentOrderDataUtilitiesAmount) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentOrderDataUtilitiesAmount) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *PaymentOrderDataUtilitiesRecipient) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *PaymentOrderDataUtilitiesRecipient) encodeFields(e *jx.Encoder) { + { + e.FieldStart("name") + e.Str(s.Name) + } + { + e.FieldStart("inn") + e.Str(s.Inn) + } + { + e.FieldStart("kpp") + e.Str(s.Kpp) + } + { + e.FieldStart("bank") + s.Bank.Encode(e) + } +} + +var jsonFieldsNameOfPaymentOrderDataUtilitiesRecipient = [4]string{ + 0: "name", + 1: "inn", + 2: "kpp", + 3: "bank", +} + +// Decode decodes PaymentOrderDataUtilitiesRecipient from json. +func (s *PaymentOrderDataUtilitiesRecipient) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentOrderDataUtilitiesRecipient to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "name": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + v, err := d.Str() + s.Name = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"name\"") + } + case "inn": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + v, err := d.Str() + s.Inn = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"inn\"") + } + case "kpp": + requiredBitSet[0] |= 1 << 2 + if err := func() error { + v, err := d.Str() + s.Kpp = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"kpp\"") + } + case "bank": + requiredBitSet[0] |= 1 << 3 + if err := func() error { + if err := s.Bank.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"bank\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode PaymentOrderDataUtilitiesRecipient") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00001111, + } { + 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(jsonFieldsNameOfPaymentOrderDataUtilitiesRecipient) { + name = jsonFieldsNameOfPaymentOrderDataUtilitiesRecipient[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 *PaymentOrderDataUtilitiesRecipient) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentOrderDataUtilitiesRecipient) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *PaymentOrderDataUtilitiesRecipientBank) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *PaymentOrderDataUtilitiesRecipientBank) encodeFields(e *jx.Encoder) { + { + e.FieldStart("name") + e.Str(s.Name) + } + { + e.FieldStart("bic") + e.Str(s.Bic) + } + { + e.FieldStart("account") + e.Str(s.Account) + } + { + e.FieldStart("correspondent_account") + e.Str(s.CorrespondentAccount) + } +} + +var jsonFieldsNameOfPaymentOrderDataUtilitiesRecipientBank = [4]string{ + 0: "name", + 1: "bic", + 2: "account", + 3: "correspondent_account", +} + +// Decode decodes PaymentOrderDataUtilitiesRecipientBank from json. +func (s *PaymentOrderDataUtilitiesRecipientBank) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentOrderDataUtilitiesRecipientBank to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "name": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + v, err := d.Str() + s.Name = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"name\"") + } + case "bic": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + v, err := d.Str() + s.Bic = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"bic\"") + } + case "account": + requiredBitSet[0] |= 1 << 2 + if err := func() error { + v, err := d.Str() + s.Account = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"account\"") + } + case "correspondent_account": + requiredBitSet[0] |= 1 << 3 + if err := func() error { + v, err := d.Str() + s.CorrespondentAccount = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"correspondent_account\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode PaymentOrderDataUtilitiesRecipientBank") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00001111, + } { + 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(jsonFieldsNameOfPaymentOrderDataUtilitiesRecipientBank) { + name = jsonFieldsNameOfPaymentOrderDataUtilitiesRecipientBank[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 *PaymentOrderDataUtilitiesRecipientBank) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentOrderDataUtilitiesRecipientBank) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PaymentOrderDataUtilitiesType as json. +func (s PaymentOrderDataUtilitiesType) Encode(e *jx.Encoder) { + e.Str(string(s)) +} + +// Decode decodes PaymentOrderDataUtilitiesType from json. +func (s *PaymentOrderDataUtilitiesType) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentOrderDataUtilitiesType to nil") + } + v, err := d.StrBytes() + if err != nil { + return err + } + // Try to use constant string. + switch PaymentOrderDataUtilitiesType(v) { + case PaymentOrderDataUtilitiesTypeUtilities: + *s = PaymentOrderDataUtilitiesTypeUtilities + default: + *s = PaymentOrderDataUtilitiesType(v) + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s PaymentOrderDataUtilitiesType) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentOrderDataUtilitiesType) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *PaymentOverviewStatementData) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *PaymentOverviewStatementData) encodeFields(e *jx.Encoder) { + { + e.FieldStart("type") + s.Type.Encode(e) + } + { + e.FieldStart("delivery_method") + s.DeliveryMethod.Encode(e) + } +} + +var jsonFieldsNameOfPaymentOverviewStatementData = [2]string{ + 0: "type", + 1: "delivery_method", +} + +// Decode decodes PaymentOverviewStatementData from json. +func (s *PaymentOverviewStatementData) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentOverviewStatementData to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "type": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + if err := s.Type.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"type\"") + } + case "delivery_method": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + if err := s.DeliveryMethod.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"delivery_method\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode PaymentOverviewStatementData") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000011, + } { + 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(jsonFieldsNameOfPaymentOverviewStatementData) { + name = jsonFieldsNameOfPaymentOverviewStatementData[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 *PaymentOverviewStatementData) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentOverviewStatementData) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PaymentOverviewStatementDataType as json. +func (s PaymentOverviewStatementDataType) Encode(e *jx.Encoder) { + e.Str(string(s)) +} + +// Decode decodes PaymentOverviewStatementDataType from json. +func (s *PaymentOverviewStatementDataType) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentOverviewStatementDataType to nil") + } + v, err := d.StrBytes() + if err != nil { + return err + } + // Try to use constant string. + switch PaymentOverviewStatementDataType(v) { + case PaymentOverviewStatementDataTypePaymentOverview: + *s = PaymentOverviewStatementDataTypePaymentOverview + default: + *s = PaymentOverviewStatementDataType(v) + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s PaymentOverviewStatementDataType) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentOverviewStatementDataType) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PaymentOverviewStatementDeliveryMethodType as json. +func (s PaymentOverviewStatementDeliveryMethodType) Encode(e *jx.Encoder) { + e.Str(string(s)) +} + +// Decode decodes PaymentOverviewStatementDeliveryMethodType from json. +func (s *PaymentOverviewStatementDeliveryMethodType) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentOverviewStatementDeliveryMethodType to nil") + } + v, err := d.StrBytes() + if err != nil { + return err + } + // Try to use constant string. + switch PaymentOverviewStatementDeliveryMethodType(v) { + case PaymentOverviewStatementDeliveryMethodTypeEmail: + *s = PaymentOverviewStatementDeliveryMethodTypeEmail + default: + *s = PaymentOverviewStatementDeliveryMethodType(v) + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s PaymentOverviewStatementDeliveryMethodType) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentOverviewStatementDeliveryMethodType) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *PaymentOverviewStatementEmailDeliveryMethod) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *PaymentOverviewStatementEmailDeliveryMethod) encodeFields(e *jx.Encoder) { + { + e.FieldStart("type") + s.Type.Encode(e) + } + { + e.FieldStart("email") + e.Str(s.Email) + } +} + +var jsonFieldsNameOfPaymentOverviewStatementEmailDeliveryMethod = [2]string{ + 0: "type", + 1: "email", +} + +// Decode decodes PaymentOverviewStatementEmailDeliveryMethod from json. +func (s *PaymentOverviewStatementEmailDeliveryMethod) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentOverviewStatementEmailDeliveryMethod to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "type": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + if err := s.Type.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"type\"") + } + case "email": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + v, err := d.Str() + s.Email = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"email\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode PaymentOverviewStatementEmailDeliveryMethod") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000011, + } { + 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(jsonFieldsNameOfPaymentOverviewStatementEmailDeliveryMethod) { + name = jsonFieldsNameOfPaymentOverviewStatementEmailDeliveryMethod[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 *PaymentOverviewStatementEmailDeliveryMethod) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentOverviewStatementEmailDeliveryMethod) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PaymentPaymentMethod as json. +func (s PaymentPaymentMethod) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +func (s PaymentPaymentMethod) encodeFields(e *jx.Encoder) { + switch s.Type { + case PaymentMethodBankCardPaymentPaymentMethod: + e.FieldStart("type") + e.Str("PaymentMethodBankCard") + { + s := s.PaymentMethodBankCard + { + e.FieldStart("id") + e.Str(s.ID) + } + { + e.FieldStart("saved") + e.Bool(s.Saved) + } + { + e.FieldStart("status") + s.Status.Encode(e) + } + { + if s.Title.Set { + e.FieldStart("title") + s.Title.Encode(e) + } + } + { + if s.Card.Set { + e.FieldStart("card") + s.Card.Encode(e) + } + } + } + case PaymentMethodCashPaymentPaymentMethod: + e.FieldStart("type") + e.Str("PaymentMethodCash") + { + s := s.PaymentMethodCash + { + e.FieldStart("id") + e.Str(s.ID) + } + { + e.FieldStart("saved") + e.Bool(s.Saved) + } + { + e.FieldStart("status") + s.Status.Encode(e) + } + { + if s.Title.Set { + e.FieldStart("title") + s.Title.Encode(e) + } + } + } + case PaymentMethodQiwiPaymentPaymentMethod: + e.FieldStart("type") + e.Str("PaymentMethodQiwi") + { + s := s.PaymentMethodQiwi + { + e.FieldStart("id") + e.Str(s.ID) + } + { + e.FieldStart("saved") + e.Bool(s.Saved) + } + { + e.FieldStart("status") + s.Status.Encode(e) + } + { + if s.Title.Set { + e.FieldStart("title") + s.Title.Encode(e) + } + } + } + case PaymentMethodAlfabankPaymentPaymentMethod: + e.FieldStart("type") + e.Str("PaymentMethodAlfabank") + { + s := s.PaymentMethodAlfabank + { + e.FieldStart("id") + e.Str(s.ID) + } + { + e.FieldStart("saved") + e.Bool(s.Saved) + } + { + e.FieldStart("status") + s.Status.Encode(e) + } + { + if s.Title.Set { + e.FieldStart("title") + s.Title.Encode(e) + } + } + { + if s.Login.Set { + e.FieldStart("login") + s.Login.Encode(e) + } + } + } + case PaymentMethodWebmoneyPaymentPaymentMethod: + e.FieldStart("type") + e.Str("PaymentMethodWebmoney") + { + s := s.PaymentMethodWebmoney + { + e.FieldStart("id") + e.Str(s.ID) + } + { + e.FieldStart("saved") + e.Bool(s.Saved) + } + { + e.FieldStart("status") + s.Status.Encode(e) + } + { + if s.Title.Set { + e.FieldStart("title") + s.Title.Encode(e) + } + } + } + case PaymentMethodSberbankPaymentPaymentMethod: + e.FieldStart("type") + e.Str("PaymentMethodSberbank") + { + s := s.PaymentMethodSberbank + { + e.FieldStart("id") + e.Str(s.ID) + } + { + e.FieldStart("saved") + e.Bool(s.Saved) + } + { + e.FieldStart("status") + s.Status.Encode(e) + } + { + if s.Title.Set { + e.FieldStart("title") + s.Title.Encode(e) + } + } + { + if s.Phone.Set { + e.FieldStart("phone") + s.Phone.Encode(e) + } + } + { + if s.Card.Set { + e.FieldStart("card") + s.Card.Encode(e) + } + } + } + case PaymentMethodTinkoffBankPaymentPaymentMethod: + e.FieldStart("type") + e.Str("PaymentMethodTinkoffBank") + { + s := s.PaymentMethodTinkoffBank + { + e.FieldStart("id") + e.Str(s.ID) + } + { + e.FieldStart("saved") + e.Bool(s.Saved) + } + { + e.FieldStart("status") + s.Status.Encode(e) + } + { + if s.Title.Set { + e.FieldStart("title") + s.Title.Encode(e) + } + } + { + if s.Card.Set { + e.FieldStart("card") + s.Card.Encode(e) + } + } + } + case PaymentMethodYooMoneyPaymentPaymentMethod: + e.FieldStart("type") + e.Str("PaymentMethodYooMoney") + { + s := s.PaymentMethodYooMoney + { + e.FieldStart("id") + e.Str(s.ID) + } + { + e.FieldStart("saved") + e.Bool(s.Saved) + } + { + e.FieldStart("status") + s.Status.Encode(e) + } + { + if s.Title.Set { + e.FieldStart("title") + s.Title.Encode(e) + } + } + { + if s.AccountNumber.Set { + e.FieldStart("account_number") + s.AccountNumber.Encode(e) + } + } + } + case PaymentMethodApplePayPaymentPaymentMethod: + e.FieldStart("type") + e.Str("PaymentMethodApplePay") + { + s := s.PaymentMethodApplePay + { + e.FieldStart("id") + e.Str(s.ID) + } + { + e.FieldStart("saved") + e.Bool(s.Saved) + } + { + e.FieldStart("status") + s.Status.Encode(e) + } + { + if s.Title.Set { + e.FieldStart("title") + s.Title.Encode(e) + } + } + } + case PaymentMethodGooglePayPaymentPaymentMethod: + e.FieldStart("type") + e.Str("PaymentMethodGooglePay") + { + s := s.PaymentMethodGooglePay + { + e.FieldStart("id") + e.Str(s.ID) + } + { + e.FieldStart("saved") + e.Bool(s.Saved) + } + { + e.FieldStart("status") + s.Status.Encode(e) + } + { + if s.Title.Set { + e.FieldStart("title") + s.Title.Encode(e) + } + } + } + case PaymentMethodMobileBalancePaymentPaymentMethod: + e.FieldStart("type") + e.Str("PaymentMethodMobileBalance") + { + s := s.PaymentMethodMobileBalance + { + e.FieldStart("id") + e.Str(s.ID) + } + { + e.FieldStart("saved") + e.Bool(s.Saved) + } + { + e.FieldStart("status") + s.Status.Encode(e) + } + { + if s.Title.Set { + e.FieldStart("title") + s.Title.Encode(e) + } + } + } + case PaymentMethodInstallmentsPaymentPaymentMethod: + e.FieldStart("type") + e.Str("PaymentMethodInstallments") + { + s := s.PaymentMethodInstallments + { + e.FieldStart("id") + e.Str(s.ID) + } + { + e.FieldStart("saved") + e.Bool(s.Saved) + } + { + e.FieldStart("status") + s.Status.Encode(e) + } + { + if s.Title.Set { + e.FieldStart("title") + s.Title.Encode(e) + } + } + } + case PaymentMethodB2bSberbankPaymentPaymentMethod: + e.FieldStart("type") + e.Str("PaymentMethodB2bSberbank") + { + s := s.PaymentMethodB2bSberbank + { + e.FieldStart("id") + e.Str(s.ID) + } + { + e.FieldStart("saved") + e.Bool(s.Saved) + } + { + e.FieldStart("status") + s.Status.Encode(e) + } + { + if s.Title.Set { + e.FieldStart("title") + s.Title.Encode(e) + } + } + { + e.FieldStart("payment_purpose") + s.PaymentPurpose.Encode(e) + } + { + e.FieldStart("vat_data") + s.VatData.Encode(e) + } + { + if s.PayerBankDetails.Set { + e.FieldStart("payer_bank_details") + s.PayerBankDetails.Encode(e) + } + } + } + case PaymentMethodWeChatPaymentPaymentMethod: + e.FieldStart("type") + e.Str("PaymentMethodWeChat") + { + s := s.PaymentMethodWeChat + { + e.FieldStart("id") + e.Str(s.ID) + } + { + e.FieldStart("saved") + e.Bool(s.Saved) + } + { + e.FieldStart("status") + s.Status.Encode(e) + } + { + if s.Title.Set { + e.FieldStart("title") + s.Title.Encode(e) + } + } + } + case PaymentMethodSbpPaymentPaymentMethod: + e.FieldStart("type") + e.Str("PaymentMethodSbp") + { + s := s.PaymentMethodSbp + { + e.FieldStart("id") + e.Str(s.ID) + } + { + e.FieldStart("saved") + e.Bool(s.Saved) + } + { + e.FieldStart("status") + s.Status.Encode(e) + } + { + if s.Title.Set { + e.FieldStart("title") + s.Title.Encode(e) + } + } + { + if s.SbpOperationID.Set { + e.FieldStart("sbp_operation_id") + s.SbpOperationID.Encode(e) + } + } + { + if s.PayerBankDetails.Set { + e.FieldStart("payer_bank_details") + s.PayerBankDetails.Encode(e) + } + } + } + case PaymentMethodSberLoanPaymentPaymentMethod: + e.FieldStart("type") + e.Str("PaymentMethodSberLoan") + { + s := s.PaymentMethodSberLoan + { + e.FieldStart("id") + e.Str(s.ID) + } + { + e.FieldStart("saved") + e.Bool(s.Saved) + } + { + e.FieldStart("status") + s.Status.Encode(e) + } + { + if s.Title.Set { + e.FieldStart("title") + s.Title.Encode(e) + } + } + { + if s.LoanOption.Set { + e.FieldStart("loan_option") + s.LoanOption.Encode(e) + } + } + { + if s.DiscountAmount.Set { + e.FieldStart("discount_amount") + s.DiscountAmount.Encode(e) + } + } + { + if s.SuspendedUntil.Set { + e.FieldStart("suspended_until") + s.SuspendedUntil.Encode(e, json.EncodeDateTime) + } + } + } + case PaymentMethodElectronicCertificatePaymentPaymentMethod: + e.FieldStart("type") + e.Str("PaymentMethodElectronicCertificate") + { + s := s.PaymentMethodElectronicCertificate + { + e.FieldStart("id") + e.Str(s.ID) + } + { + e.FieldStart("saved") + e.Bool(s.Saved) + } + { + e.FieldStart("status") + s.Status.Encode(e) + } + { + if s.Title.Set { + e.FieldStart("title") + s.Title.Encode(e) + } + } + { + if s.Card.Set { + e.FieldStart("card") + s.Card.Encode(e) + } + } + { + if s.ElectronicCertificate.Set { + e.FieldStart("electronic_certificate") + s.ElectronicCertificate.Encode(e) + } + } + { + if s.Articles != nil { + e.FieldStart("articles") + e.ArrStart() + for _, elem := range s.Articles { + elem.Encode(e) + } + e.ArrEnd() + } + } + } + case PaymentMethodSberBnplPaymentPaymentMethod: + e.FieldStart("type") + e.Str("PaymentMethodSberBnpl") + { + s := s.PaymentMethodSberBnpl + { + e.FieldStart("id") + e.Str(s.ID) + } + { + e.FieldStart("saved") + e.Bool(s.Saved) + } + { + e.FieldStart("status") + s.Status.Encode(e) + } + { + if s.Title.Set { + e.FieldStart("title") + s.Title.Encode(e) + } + } + } + } +} + +// Decode decodes PaymentPaymentMethod from json. +func (s *PaymentPaymentMethod) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentPaymentMethod to nil") + } + // Sum type discriminator. + if typ := d.Next(); typ != jx.Object { + return errors.Errorf("unexpected json type %q", typ) + } + + var found bool + if err := d.Capture(func(d *jx.Decoder) error { + return d.ObjBytes(func(d *jx.Decoder, key []byte) error { + if found { + return d.Skip() + } + switch string(key) { + case "type": + typ, err := d.Str() + if err != nil { + return err + } + switch typ { + case "PaymentMethodBankCard": + s.Type = PaymentMethodBankCardPaymentPaymentMethod + found = true + case "PaymentMethodCash": + s.Type = PaymentMethodCashPaymentPaymentMethod + found = true + case "PaymentMethodQiwi": + s.Type = PaymentMethodQiwiPaymentPaymentMethod + found = true + case "PaymentMethodAlfabank": + s.Type = PaymentMethodAlfabankPaymentPaymentMethod + found = true + case "PaymentMethodWebmoney": + s.Type = PaymentMethodWebmoneyPaymentPaymentMethod + found = true + case "PaymentMethodSberbank": + s.Type = PaymentMethodSberbankPaymentPaymentMethod + found = true + case "PaymentMethodTinkoffBank": + s.Type = PaymentMethodTinkoffBankPaymentPaymentMethod + found = true + case "PaymentMethodYooMoney": + s.Type = PaymentMethodYooMoneyPaymentPaymentMethod + found = true + case "PaymentMethodApplePay": + s.Type = PaymentMethodApplePayPaymentPaymentMethod + found = true + case "PaymentMethodGooglePay": + s.Type = PaymentMethodGooglePayPaymentPaymentMethod + found = true + case "PaymentMethodMobileBalance": + s.Type = PaymentMethodMobileBalancePaymentPaymentMethod + found = true + case "PaymentMethodInstallments": + s.Type = PaymentMethodInstallmentsPaymentPaymentMethod + found = true + case "PaymentMethodB2bSberbank": + s.Type = PaymentMethodB2bSberbankPaymentPaymentMethod + found = true + case "PaymentMethodWeChat": + s.Type = PaymentMethodWeChatPaymentPaymentMethod + found = true + case "PaymentMethodSbp": + s.Type = PaymentMethodSbpPaymentPaymentMethod + found = true + case "PaymentMethodSberLoan": + s.Type = PaymentMethodSberLoanPaymentPaymentMethod + found = true + case "PaymentMethodElectronicCertificate": + s.Type = PaymentMethodElectronicCertificatePaymentPaymentMethod + found = true + case "PaymentMethodSberBnpl": + s.Type = PaymentMethodSberBnplPaymentPaymentMethod + found = true + default: + return errors.Errorf("unknown type %s", typ) + } + return nil + } + return d.Skip() + }) + }); err != nil { + return errors.Wrap(err, "capture") + } + if !found { + return errors.New("unable to detect sum type variant") + } + switch s.Type { + case PaymentMethodBankCardPaymentPaymentMethod: + if err := s.PaymentMethodBankCard.Decode(d); err != nil { + return err + } + case PaymentMethodCashPaymentPaymentMethod: + if err := s.PaymentMethodCash.Decode(d); err != nil { + return err + } + case PaymentMethodQiwiPaymentPaymentMethod: + if err := s.PaymentMethodQiwi.Decode(d); err != nil { + return err + } + case PaymentMethodAlfabankPaymentPaymentMethod: + if err := s.PaymentMethodAlfabank.Decode(d); err != nil { + return err + } + case PaymentMethodWebmoneyPaymentPaymentMethod: + if err := s.PaymentMethodWebmoney.Decode(d); err != nil { + return err + } + case PaymentMethodSberbankPaymentPaymentMethod: + if err := s.PaymentMethodSberbank.Decode(d); err != nil { + return err + } + case PaymentMethodTinkoffBankPaymentPaymentMethod: + if err := s.PaymentMethodTinkoffBank.Decode(d); err != nil { + return err + } + case PaymentMethodYooMoneyPaymentPaymentMethod: + if err := s.PaymentMethodYooMoney.Decode(d); err != nil { + return err + } + case PaymentMethodApplePayPaymentPaymentMethod: + if err := s.PaymentMethodApplePay.Decode(d); err != nil { + return err + } + case PaymentMethodGooglePayPaymentPaymentMethod: + if err := s.PaymentMethodGooglePay.Decode(d); err != nil { + return err + } + case PaymentMethodMobileBalancePaymentPaymentMethod: + if err := s.PaymentMethodMobileBalance.Decode(d); err != nil { + return err + } + case PaymentMethodInstallmentsPaymentPaymentMethod: + if err := s.PaymentMethodInstallments.Decode(d); err != nil { + return err + } + case PaymentMethodB2bSberbankPaymentPaymentMethod: + if err := s.PaymentMethodB2bSberbank.Decode(d); err != nil { + return err + } + case PaymentMethodWeChatPaymentPaymentMethod: + if err := s.PaymentMethodWeChat.Decode(d); err != nil { + return err + } + case PaymentMethodSbpPaymentPaymentMethod: + if err := s.PaymentMethodSbp.Decode(d); err != nil { + return err + } + case PaymentMethodSberLoanPaymentPaymentMethod: + if err := s.PaymentMethodSberLoan.Decode(d); err != nil { + return err + } + case PaymentMethodElectronicCertificatePaymentPaymentMethod: + if err := s.PaymentMethodElectronicCertificate.Decode(d); err != nil { + return err + } + case PaymentMethodSberBnplPaymentPaymentMethod: + if err := s.PaymentMethodSberBnpl.Decode(d); err != nil { + return err + } + default: + return errors.Errorf("inferred invalid type: %s", s.Type) + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s PaymentPaymentMethod) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentPaymentMethod) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *PaymentPeriod) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *PaymentPeriod) encodeFields(e *jx.Encoder) { + { + e.FieldStart("month") + e.Int(s.Month) + } + { + e.FieldStart("year") + e.Int(s.Year) + } +} + +var jsonFieldsNameOfPaymentPeriod = [2]string{ + 0: "month", + 1: "year", +} + +// Decode decodes PaymentPeriod from json. +func (s *PaymentPeriod) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentPeriod to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "month": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + v, err := d.Int() + s.Month = int(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"month\"") + } + case "year": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + v, err := d.Int() + s.Year = int(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"year\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode PaymentPeriod") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000011, + } { + 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(jsonFieldsNameOfPaymentPeriod) { + name = jsonFieldsNameOfPaymentPeriod[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 *PaymentPeriod) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentPeriod) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PaymentPurpose as json. +func (s PaymentPurpose) Encode(e *jx.Encoder) { + unwrapped := string(s) + + e.Str(unwrapped) +} + +// Decode decodes PaymentPurpose from json. +func (s *PaymentPurpose) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentPurpose to nil") + } + var unwrapped string + if err := func() error { + v, err := d.Str() + unwrapped = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "alias") + } + *s = PaymentPurpose(unwrapped) + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s PaymentPurpose) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentPurpose) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PaymentReceiptRegistration as json. +func (s PaymentReceiptRegistration) Encode(e *jx.Encoder) { + e.Str(string(s)) +} + +// Decode decodes PaymentReceiptRegistration from json. +func (s *PaymentReceiptRegistration) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentReceiptRegistration to nil") + } + v, err := d.StrBytes() + if err != nil { + return err + } + // Try to use constant string. + switch PaymentReceiptRegistration(v) { + case PaymentReceiptRegistrationPending: + *s = PaymentReceiptRegistrationPending + case PaymentReceiptRegistrationSucceeded: + *s = PaymentReceiptRegistrationSucceeded + case PaymentReceiptRegistrationCanceled: + *s = PaymentReceiptRegistrationCanceled + default: + *s = PaymentReceiptRegistration(v) + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s PaymentReceiptRegistration) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentReceiptRegistration) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *PaymentRecipient) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *PaymentRecipient) encodeFields(e *jx.Encoder) { + { + e.FieldStart("account_id") + s.AccountID.Encode(e) + } + { + e.FieldStart("gateway_id") + s.GatewayID.Encode(e) + } +} + +var jsonFieldsNameOfPaymentRecipient = [2]string{ + 0: "account_id", + 1: "gateway_id", +} + +// Decode decodes PaymentRecipient from json. +func (s *PaymentRecipient) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentRecipient to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "account_id": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + if err := s.AccountID.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"account_id\"") + } + case "gateway_id": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + if err := s.GatewayID.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"gateway_id\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode PaymentRecipient") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000011, + } { + 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(jsonFieldsNameOfPaymentRecipient) { + name = jsonFieldsNameOfPaymentRecipient[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 *PaymentRecipient) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentRecipient) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *PaymentRefundedAmount) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *PaymentRefundedAmount) encodeFields(e *jx.Encoder) { + { + e.FieldStart("value") + e.Str(s.Value) + } + { + e.FieldStart("currency") + s.Currency.Encode(e) + } +} + +var jsonFieldsNameOfPaymentRefundedAmount = [2]string{ + 0: "value", + 1: "currency", +} + +// Decode decodes PaymentRefundedAmount from json. +func (s *PaymentRefundedAmount) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentRefundedAmount to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "value": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + v, err := d.Str() + s.Value = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"value\"") + } + case "currency": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + if err := s.Currency.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"currency\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode PaymentRefundedAmount") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000011, + } { + 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(jsonFieldsNameOfPaymentRefundedAmount) { + name = jsonFieldsNameOfPaymentRefundedAmount[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 *PaymentRefundedAmount) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentRefundedAmount) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PaymentStatus as json. +func (s PaymentStatus) Encode(e *jx.Encoder) { + e.Str(string(s)) +} + +// Decode decodes PaymentStatus from json. +func (s *PaymentStatus) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentStatus to nil") + } + v, err := d.StrBytes() + if err != nil { + return err + } + // Try to use constant string. + switch PaymentStatus(v) { + case PaymentStatusPending: + *s = PaymentStatusPending + case PaymentStatusWaitingForCapture: + *s = PaymentStatusWaitingForCapture + case PaymentStatusSucceeded: + *s = PaymentStatusSucceeded + case PaymentStatusCanceled: + *s = PaymentStatusCanceled + default: + *s = PaymentStatus(v) + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s PaymentStatus) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentStatus) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PaymentToken as json. +func (s PaymentToken) Encode(e *jx.Encoder) { + unwrapped := string(s) + + e.Str(unwrapped) +} + +// Decode decodes PaymentToken from json. +func (s *PaymentToken) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentToken to nil") + } + var unwrapped string + if err := func() error { + v, err := d.Str() + unwrapped = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "alias") + } + *s = PaymentToken(unwrapped) + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s PaymentToken) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentToken) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *PaymentsPaymentIDCapturePostReq) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *PaymentsPaymentIDCapturePostReq) encodeFields(e *jx.Encoder) { + { + if s.Amount.Set { + e.FieldStart("amount") + s.Amount.Encode(e) + } + } + { + if s.Receipt.Set { + e.FieldStart("receipt") + s.Receipt.Encode(e) + } + } + { + if s.Airline.Set { + e.FieldStart("airline") + s.Airline.Encode(e) + } + } + { + if s.Transfers != nil { + e.FieldStart("transfers") + e.ArrStart() + for _, elem := range s.Transfers { + elem.Encode(e) + } + e.ArrEnd() + } + } + { + if s.Deal.Set { + e.FieldStart("deal") + s.Deal.Encode(e) + } + } +} + +var jsonFieldsNameOfPaymentsPaymentIDCapturePostReq = [5]string{ + 0: "amount", + 1: "receipt", + 2: "airline", + 3: "transfers", + 4: "deal", +} + +// Decode decodes PaymentsPaymentIDCapturePostReq from json. +func (s *PaymentsPaymentIDCapturePostReq) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentsPaymentIDCapturePostReq to nil") + } + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "amount": + if err := func() error { + s.Amount.Reset() + if err := s.Amount.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"amount\"") + } + case "receipt": + if err := func() error { + s.Receipt.Reset() + if err := s.Receipt.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"receipt\"") + } + case "airline": + if err := func() error { + s.Airline.Reset() + if err := s.Airline.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"airline\"") + } + case "transfers": + if err := func() error { + s.Transfers = make([]TransferData, 0) + if err := d.Arr(func(d *jx.Decoder) error { + var elem TransferData + if err := elem.Decode(d); err != nil { + return err + } + s.Transfers = append(s.Transfers, elem) + return nil + }); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"transfers\"") + } + case "deal": + if err := func() error { + s.Deal.Reset() + if err := s.Deal.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"deal\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode PaymentsPaymentIDCapturePostReq") + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s *PaymentsPaymentIDCapturePostReq) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentsPaymentIDCapturePostReq) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *PaymentsPaymentIDCapturePostReqAirline) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *PaymentsPaymentIDCapturePostReqAirline) encodeFields(e *jx.Encoder) { + { + if s.TicketNumber.Set { + e.FieldStart("ticket_number") + s.TicketNumber.Encode(e) + } + } + { + if s.BookingReference.Set { + e.FieldStart("booking_reference") + s.BookingReference.Encode(e) + } + } + { + if s.Passengers != nil { + e.FieldStart("passengers") + e.ArrStart() + for _, elem := range s.Passengers { + elem.Encode(e) + } + e.ArrEnd() + } + } + { + if s.Legs != nil { + e.FieldStart("legs") + e.ArrStart() + for _, elem := range s.Legs { + elem.Encode(e) + } + e.ArrEnd() + } + } +} + +var jsonFieldsNameOfPaymentsPaymentIDCapturePostReqAirline = [4]string{ + 0: "ticket_number", + 1: "booking_reference", + 2: "passengers", + 3: "legs", +} + +// Decode decodes PaymentsPaymentIDCapturePostReqAirline from json. +func (s *PaymentsPaymentIDCapturePostReqAirline) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentsPaymentIDCapturePostReqAirline to nil") + } + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "ticket_number": + if err := func() error { + s.TicketNumber.Reset() + if err := s.TicketNumber.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"ticket_number\"") + } + case "booking_reference": + if err := func() error { + s.BookingReference.Reset() + if err := s.BookingReference.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"booking_reference\"") + } + case "passengers": + if err := func() error { + s.Passengers = make([]AirlinePassenger, 0) + if err := d.Arr(func(d *jx.Decoder) error { + var elem AirlinePassenger + if err := elem.Decode(d); err != nil { + return err + } + s.Passengers = append(s.Passengers, elem) + return nil + }); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"passengers\"") + } + case "legs": + if err := func() error { + s.Legs = make([]AirlineLeg, 0) + if err := d.Arr(func(d *jx.Decoder) error { + var elem AirlineLeg + if err := elem.Decode(d); err != nil { + return err + } + s.Legs = append(s.Legs, elem) + return nil + }); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"legs\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode PaymentsPaymentIDCapturePostReqAirline") + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s *PaymentsPaymentIDCapturePostReqAirline) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentsPaymentIDCapturePostReqAirline) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *PaymentsPaymentIDCapturePostReqAmount) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *PaymentsPaymentIDCapturePostReqAmount) encodeFields(e *jx.Encoder) { + { + e.FieldStart("value") + e.Str(s.Value) + } + { + e.FieldStart("currency") + s.Currency.Encode(e) + } +} + +var jsonFieldsNameOfPaymentsPaymentIDCapturePostReqAmount = [2]string{ + 0: "value", + 1: "currency", +} + +// Decode decodes PaymentsPaymentIDCapturePostReqAmount from json. +func (s *PaymentsPaymentIDCapturePostReqAmount) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentsPaymentIDCapturePostReqAmount to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "value": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + v, err := d.Str() + s.Value = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"value\"") + } + case "currency": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + if err := s.Currency.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"currency\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode PaymentsPaymentIDCapturePostReqAmount") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000011, + } { + 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(jsonFieldsNameOfPaymentsPaymentIDCapturePostReqAmount) { + name = jsonFieldsNameOfPaymentsPaymentIDCapturePostReqAmount[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 *PaymentsPaymentIDCapturePostReqAmount) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentsPaymentIDCapturePostReqAmount) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *PaymentsPaymentIDCapturePostReqDeal) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *PaymentsPaymentIDCapturePostReqDeal) encodeFields(e *jx.Encoder) { + { + e.FieldStart("settlements") + s.Settlements.Encode(e) + } +} + +var jsonFieldsNameOfPaymentsPaymentIDCapturePostReqDeal = [1]string{ + 0: "settlements", +} + +// Decode decodes PaymentsPaymentIDCapturePostReqDeal from json. +func (s *PaymentsPaymentIDCapturePostReqDeal) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentsPaymentIDCapturePostReqDeal to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "settlements": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + if err := s.Settlements.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"settlements\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode PaymentsPaymentIDCapturePostReqDeal") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000001, + } { + 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(jsonFieldsNameOfPaymentsPaymentIDCapturePostReqDeal) { + name = jsonFieldsNameOfPaymentsPaymentIDCapturePostReqDeal[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 *PaymentsPaymentIDCapturePostReqDeal) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentsPaymentIDCapturePostReqDeal) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *PaymentsPostReq) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *PaymentsPostReq) encodeFields(e *jx.Encoder) { + { + e.FieldStart("amount") + s.Amount.Encode(e) + } + { + if s.Description.Set { + e.FieldStart("description") + s.Description.Encode(e) + } + } + { + if s.Receipt.Set { + e.FieldStart("receipt") + s.Receipt.Encode(e) + } + } + { + if s.Recipient.Set { + e.FieldStart("recipient") + s.Recipient.Encode(e) + } + } + { + if s.PaymentToken.Set { + e.FieldStart("payment_token") + s.PaymentToken.Encode(e) + } + } + { + if s.PaymentMethodID.Set { + e.FieldStart("payment_method_id") + s.PaymentMethodID.Encode(e) + } + } + { + if s.PaymentMethodData.Set { + e.FieldStart("payment_method_data") + s.PaymentMethodData.Encode(e) + } + } + { + if s.Confirmation.Set { + e.FieldStart("confirmation") + s.Confirmation.Encode(e) + } + } + { + if s.SavePaymentMethod.Set { + e.FieldStart("save_payment_method") + s.SavePaymentMethod.Encode(e) + } + } + { + if s.Capture.Set { + e.FieldStart("capture") + s.Capture.Encode(e) + } + } + { + if s.ClientIP.Set { + e.FieldStart("client_ip") + s.ClientIP.Encode(e) + } + } + { + if s.Metadata.Set { + e.FieldStart("metadata") + s.Metadata.Encode(e) + } + } + { + if s.Airline.Set { + e.FieldStart("airline") + s.Airline.Encode(e) + } + } + { + if s.Transfers != nil { + e.FieldStart("transfers") + e.ArrStart() + for _, elem := range s.Transfers { + elem.Encode(e) + } + e.ArrEnd() + } + } + { + if s.Deal.Set { + e.FieldStart("deal") + s.Deal.Encode(e) + } + } + { + if s.MerchantCustomerID.Set { + e.FieldStart("merchant_customer_id") + s.MerchantCustomerID.Encode(e) + } + } + { + if s.PaymentOrder.Set { + e.FieldStart("payment_order") + s.PaymentOrder.Encode(e) + } + } + { + if s.Receiver.Set { + e.FieldStart("receiver") + s.Receiver.Encode(e) + } + } + { + if s.Statements != nil { + e.FieldStart("statements") + e.ArrStart() + for _, elem := range s.Statements { + elem.Encode(e) + } + e.ArrEnd() + } + } + { + if s.Test.Set { + e.FieldStart("test") + s.Test.Encode(e) + } + } +} + +var jsonFieldsNameOfPaymentsPostReq = [20]string{ + 0: "amount", + 1: "description", + 2: "receipt", + 3: "recipient", + 4: "payment_token", + 5: "payment_method_id", + 6: "payment_method_data", + 7: "confirmation", + 8: "save_payment_method", + 9: "capture", + 10: "client_ip", + 11: "metadata", + 12: "airline", + 13: "transfers", + 14: "deal", + 15: "merchant_customer_id", + 16: "payment_order", + 17: "receiver", + 18: "statements", + 19: "test", +} + +// Decode decodes PaymentsPostReq from json. +func (s *PaymentsPostReq) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentsPostReq to nil") + } + var requiredBitSet [3]uint8 + s.setDefaults() + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "amount": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + if err := s.Amount.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"amount\"") + } + case "description": + if err := func() error { + s.Description.Reset() + if err := s.Description.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"description\"") + } + case "receipt": + if err := func() error { + s.Receipt.Reset() + if err := s.Receipt.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"receipt\"") + } + case "recipient": + if err := func() error { + s.Recipient.Reset() + if err := s.Recipient.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"recipient\"") + } + case "payment_token": + if err := func() error { + s.PaymentToken.Reset() + if err := s.PaymentToken.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"payment_token\"") + } + case "payment_method_id": + if err := func() error { + s.PaymentMethodID.Reset() + if err := s.PaymentMethodID.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"payment_method_id\"") + } + case "payment_method_data": + if err := func() error { + s.PaymentMethodData.Reset() + if err := s.PaymentMethodData.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"payment_method_data\"") + } + case "confirmation": + if err := func() error { + s.Confirmation.Reset() + if err := s.Confirmation.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"confirmation\"") + } + case "save_payment_method": + if err := func() error { + s.SavePaymentMethod.Reset() + if err := s.SavePaymentMethod.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"save_payment_method\"") + } + case "capture": + if err := func() error { + s.Capture.Reset() + if err := s.Capture.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"capture\"") + } + case "client_ip": + if err := func() error { + s.ClientIP.Reset() + if err := s.ClientIP.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"client_ip\"") + } + case "metadata": + if err := func() error { + s.Metadata.Reset() + if err := s.Metadata.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"metadata\"") + } + case "airline": + if err := func() error { + s.Airline.Reset() + if err := s.Airline.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"airline\"") + } + case "transfers": + if err := func() error { + s.Transfers = make([]TransferDataPayment, 0) + if err := d.Arr(func(d *jx.Decoder) error { + var elem TransferDataPayment + if err := elem.Decode(d); err != nil { + return err + } + s.Transfers = append(s.Transfers, elem) + return nil + }); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"transfers\"") + } + case "deal": + if err := func() error { + s.Deal.Reset() + if err := s.Deal.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"deal\"") + } + case "merchant_customer_id": + if err := func() error { + s.MerchantCustomerID.Reset() + if err := s.MerchantCustomerID.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"merchant_customer_id\"") + } + case "payment_order": + if err := func() error { + s.PaymentOrder.Reset() + if err := s.PaymentOrder.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"payment_order\"") + } + case "receiver": + if err := func() error { + s.Receiver.Reset() + if err := s.Receiver.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"receiver\"") + } + case "statements": + if err := func() error { + s.Statements = make([]PaymentsPostReqStatementsItem, 0) + if err := d.Arr(func(d *jx.Decoder) error { + var elem PaymentsPostReqStatementsItem + if err := elem.Decode(d); err != nil { + return err + } + s.Statements = append(s.Statements, elem) + return nil + }); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"statements\"") + } + case "test": + if err := func() error { + s.Test.Reset() + if err := s.Test.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"test\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode PaymentsPostReq") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [3]uint8{ + 0b00000001, + 0b00000000, + 0b00000000, + } { + 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(jsonFieldsNameOfPaymentsPostReq) { + name = jsonFieldsNameOfPaymentsPostReq[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 *PaymentsPostReq) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentsPostReq) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *PaymentsPostReqAirline) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *PaymentsPostReqAirline) encodeFields(e *jx.Encoder) { + { + if s.TicketNumber.Set { + e.FieldStart("ticket_number") + s.TicketNumber.Encode(e) + } + } + { + if s.BookingReference.Set { + e.FieldStart("booking_reference") + s.BookingReference.Encode(e) + } + } + { + if s.Passengers != nil { + e.FieldStart("passengers") + e.ArrStart() + for _, elem := range s.Passengers { + elem.Encode(e) + } + e.ArrEnd() + } + } + { + if s.Legs != nil { + e.FieldStart("legs") + e.ArrStart() + for _, elem := range s.Legs { + elem.Encode(e) + } + e.ArrEnd() + } + } +} + +var jsonFieldsNameOfPaymentsPostReqAirline = [4]string{ + 0: "ticket_number", + 1: "booking_reference", + 2: "passengers", + 3: "legs", +} + +// Decode decodes PaymentsPostReqAirline from json. +func (s *PaymentsPostReqAirline) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentsPostReqAirline to nil") + } + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "ticket_number": + if err := func() error { + s.TicketNumber.Reset() + if err := s.TicketNumber.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"ticket_number\"") + } + case "booking_reference": + if err := func() error { + s.BookingReference.Reset() + if err := s.BookingReference.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"booking_reference\"") + } + case "passengers": + if err := func() error { + s.Passengers = make([]AirlinePassenger, 0) + if err := d.Arr(func(d *jx.Decoder) error { + var elem AirlinePassenger + if err := elem.Decode(d); err != nil { + return err + } + s.Passengers = append(s.Passengers, elem) + return nil + }); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"passengers\"") + } + case "legs": + if err := func() error { + s.Legs = make([]AirlineLeg, 0) + if err := d.Arr(func(d *jx.Decoder) error { + var elem AirlineLeg + if err := elem.Decode(d); err != nil { + return err + } + s.Legs = append(s.Legs, elem) + return nil + }); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"legs\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode PaymentsPostReqAirline") + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s *PaymentsPostReqAirline) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentsPostReqAirline) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *PaymentsPostReqAmount) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *PaymentsPostReqAmount) encodeFields(e *jx.Encoder) { + { + e.FieldStart("value") + e.Str(s.Value) + } + { + e.FieldStart("currency") + s.Currency.Encode(e) + } +} + +var jsonFieldsNameOfPaymentsPostReqAmount = [2]string{ + 0: "value", + 1: "currency", +} + +// Decode decodes PaymentsPostReqAmount from json. +func (s *PaymentsPostReqAmount) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentsPostReqAmount to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "value": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + v, err := d.Str() + s.Value = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"value\"") + } + case "currency": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + if err := s.Currency.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"currency\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode PaymentsPostReqAmount") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000011, + } { + 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(jsonFieldsNameOfPaymentsPostReqAmount) { + name = jsonFieldsNameOfPaymentsPostReqAmount[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 *PaymentsPostReqAmount) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentsPostReqAmount) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PaymentsPostReqConfirmation as json. +func (s PaymentsPostReqConfirmation) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +func (s PaymentsPostReqConfirmation) encodeFields(e *jx.Encoder) { + switch s.Type { + case ConfirmationDataRedirectPaymentsPostReqConfirmation: + e.FieldStart("type") + e.Str("ConfirmationDataRedirect") + { + s := s.ConfirmationDataRedirect + { + if s.Locale.Set { + e.FieldStart("locale") + s.Locale.Encode(e) + } + } + { + if s.Enforce.Set { + e.FieldStart("enforce") + s.Enforce.Encode(e) + } + } + { + e.FieldStart("return_url") + s.ReturnURL.Encode(e) + } + } + case ConfirmationDataExternalPaymentsPostReqConfirmation: + e.FieldStart("type") + e.Str("ConfirmationDataExternal") + { + s := s.ConfirmationDataExternal + { + if s.Locale.Set { + e.FieldStart("locale") + s.Locale.Encode(e) + } + } + } + case ConfirmationDataQrPaymentsPostReqConfirmation: + e.FieldStart("type") + e.Str("ConfirmationDataQr") + { + s := s.ConfirmationDataQr + { + if s.Locale.Set { + e.FieldStart("locale") + s.Locale.Encode(e) + } + } + { + if s.ReturnURL.Set { + e.FieldStart("return_url") + s.ReturnURL.Encode(e) + } + } + } + case ConfirmationDataEmbeddedPaymentsPostReqConfirmation: + e.FieldStart("type") + e.Str("ConfirmationDataEmbedded") + { + s := s.ConfirmationDataEmbedded + { + if s.Locale.Set { + e.FieldStart("locale") + s.Locale.Encode(e) + } + } + } + case ConfirmationDataMobileApplicationPaymentsPostReqConfirmation: + e.FieldStart("type") + e.Str("ConfirmationDataMobileApplication") + { + s := s.ConfirmationDataMobileApplication + { + if s.Locale.Set { + e.FieldStart("locale") + s.Locale.Encode(e) + } + } + { + e.FieldStart("return_url") + e.Str(s.ReturnURL) + } + } + } +} + +// Decode decodes PaymentsPostReqConfirmation from json. +func (s *PaymentsPostReqConfirmation) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentsPostReqConfirmation to nil") + } + // Sum type discriminator. + if typ := d.Next(); typ != jx.Object { + return errors.Errorf("unexpected json type %q", typ) + } + + var found bool + if err := d.Capture(func(d *jx.Decoder) error { + return d.ObjBytes(func(d *jx.Decoder, key []byte) error { + if found { + return d.Skip() + } + switch string(key) { + case "type": + typ, err := d.Str() + if err != nil { + return err + } + switch typ { + case "ConfirmationDataRedirect": + s.Type = ConfirmationDataRedirectPaymentsPostReqConfirmation + found = true + case "ConfirmationDataExternal": + s.Type = ConfirmationDataExternalPaymentsPostReqConfirmation + found = true + case "ConfirmationDataQr": + s.Type = ConfirmationDataQrPaymentsPostReqConfirmation + found = true + case "ConfirmationDataEmbedded": + s.Type = ConfirmationDataEmbeddedPaymentsPostReqConfirmation + found = true + case "ConfirmationDataMobileApplication": + s.Type = ConfirmationDataMobileApplicationPaymentsPostReqConfirmation + found = true + default: + return errors.Errorf("unknown type %s", typ) + } + return nil + } + return d.Skip() + }) + }); err != nil { + return errors.Wrap(err, "capture") + } + if !found { + return errors.New("unable to detect sum type variant") + } + switch s.Type { + case ConfirmationDataRedirectPaymentsPostReqConfirmation: + if err := s.ConfirmationDataRedirect.Decode(d); err != nil { + return err + } + case ConfirmationDataExternalPaymentsPostReqConfirmation: + if err := s.ConfirmationDataExternal.Decode(d); err != nil { + return err + } + case ConfirmationDataQrPaymentsPostReqConfirmation: + if err := s.ConfirmationDataQr.Decode(d); err != nil { + return err + } + case ConfirmationDataEmbeddedPaymentsPostReqConfirmation: + if err := s.ConfirmationDataEmbedded.Decode(d); err != nil { + return err + } + case ConfirmationDataMobileApplicationPaymentsPostReqConfirmation: + if err := s.ConfirmationDataMobileApplication.Decode(d); err != nil { + return err + } + default: + return errors.Errorf("inferred invalid type: %s", s.Type) + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s PaymentsPostReqConfirmation) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentsPostReqConfirmation) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *PaymentsPostReqDeal) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *PaymentsPostReqDeal) encodeFields(e *jx.Encoder) { + { + e.FieldStart("id") + s.ID.Encode(e) + } + { + e.FieldStart("settlements") + s.Settlements.Encode(e) + } +} + +var jsonFieldsNameOfPaymentsPostReqDeal = [2]string{ + 0: "id", + 1: "settlements", +} + +// Decode decodes PaymentsPostReqDeal from json. +func (s *PaymentsPostReqDeal) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentsPostReqDeal to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "id": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + if err := s.ID.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"id\"") + } + case "settlements": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + if err := s.Settlements.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"settlements\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode PaymentsPostReqDeal") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000011, + } { + 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(jsonFieldsNameOfPaymentsPostReqDeal) { + name = jsonFieldsNameOfPaymentsPostReqDeal[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 *PaymentsPostReqDeal) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentsPostReqDeal) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PaymentsPostReqPaymentMethodData as json. +func (s PaymentsPostReqPaymentMethodData) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +func (s PaymentsPostReqPaymentMethodData) encodeFields(e *jx.Encoder) { + switch s.Type { + case PaymentMethodDataBankCardPaymentsPostReqPaymentMethodData: + e.FieldStart("type") + e.Str("PaymentMethodDataBankCard") + { + s := s.PaymentMethodDataBankCard + { + if s.Card.Set { + e.FieldStart("card") + s.Card.Encode(e) + } + } + } + case PaymentMethodDataCashPaymentsPostReqPaymentMethodData: + e.FieldStart("type") + e.Str("PaymentMethodDataCash") + { + s := s.PaymentMethodDataCash + { + if s.Phone.Set { + e.FieldStart("phone") + s.Phone.Encode(e) + } + } + } + case PaymentMethodDataSberbankPaymentsPostReqPaymentMethodData: + e.FieldStart("type") + e.Str("PaymentMethodDataSberbank") + { + s := s.PaymentMethodDataSberbank + { + if s.Phone.Set { + e.FieldStart("phone") + s.Phone.Encode(e) + } + } + } + case PaymentMethodDataTinkoffBankPaymentsPostReqPaymentMethodData: + e.FieldStart("type") + e.Str("PaymentMethodDataTinkoffBank") + case PaymentMethodDataYooMoneyPaymentsPostReqPaymentMethodData: + e.FieldStart("type") + e.Str("PaymentMethodDataYooMoney") + case PaymentMethodDataMobileBalancePaymentsPostReqPaymentMethodData: + e.FieldStart("type") + e.Str("PaymentMethodDataMobileBalance") + { + s := s.PaymentMethodDataMobileBalance + { + e.FieldStart("phone") + e.Str(s.Phone) + } + } + case PaymentMethodDataB2bSberbankPaymentsPostReqPaymentMethodData: + e.FieldStart("type") + e.Str("PaymentMethodDataB2bSberbank") + { + s := s.PaymentMethodDataB2bSberbank + { + e.FieldStart("payment_purpose") + s.PaymentPurpose.Encode(e) + } + { + e.FieldStart("vat_data") + s.VatData.Encode(e) + } + } + case PaymentMethodDataSbpPaymentsPostReqPaymentMethodData: + e.FieldStart("type") + e.Str("PaymentMethodDataSbp") + case PaymentMethodDataSberLoanPaymentsPostReqPaymentMethodData: + e.FieldStart("type") + e.Str("PaymentMethodDataSberLoan") + case PaymentMethodDataElectronicCertificatePaymentsPostReqPaymentMethodData: + e.FieldStart("type") + e.Str("PaymentMethodDataElectronicCertificate") + { + s := s.PaymentMethodDataElectronicCertificate + { + if s.Card.Set { + e.FieldStart("card") + s.Card.Encode(e) + } + } + { + if s.ElectronicCertificate.Set { + e.FieldStart("electronic_certificate") + s.ElectronicCertificate.Encode(e) + } + } + { + if s.Articles != nil { + e.FieldStart("articles") + e.ArrStart() + for _, elem := range s.Articles { + elem.Encode(e) + } + e.ArrEnd() + } + } + } + case PaymentMethodDataSberBnplPaymentsPostReqPaymentMethodData: + e.FieldStart("type") + e.Str("PaymentMethodDataSberBnpl") + { + s := s.PaymentMethodDataSberBnpl + { + if s.Phone.Set { + e.FieldStart("phone") + s.Phone.Encode(e) + } + } + } + } +} + +// Decode decodes PaymentsPostReqPaymentMethodData from json. +func (s *PaymentsPostReqPaymentMethodData) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentsPostReqPaymentMethodData to nil") + } + // Sum type discriminator. + if typ := d.Next(); typ != jx.Object { + return errors.Errorf("unexpected json type %q", typ) + } + + var found bool + if err := d.Capture(func(d *jx.Decoder) error { + return d.ObjBytes(func(d *jx.Decoder, key []byte) error { + if found { + return d.Skip() + } + switch string(key) { + case "type": + typ, err := d.Str() + if err != nil { + return err + } + switch typ { + case "PaymentMethodDataBankCard": + s.Type = PaymentMethodDataBankCardPaymentsPostReqPaymentMethodData + found = true + case "PaymentMethodDataCash": + s.Type = PaymentMethodDataCashPaymentsPostReqPaymentMethodData + found = true + case "PaymentMethodDataSberbank": + s.Type = PaymentMethodDataSberbankPaymentsPostReqPaymentMethodData + found = true + case "PaymentMethodDataTinkoffBank": + s.Type = PaymentMethodDataTinkoffBankPaymentsPostReqPaymentMethodData + found = true + case "PaymentMethodDataYooMoney": + s.Type = PaymentMethodDataYooMoneyPaymentsPostReqPaymentMethodData + found = true + case "PaymentMethodDataMobileBalance": + s.Type = PaymentMethodDataMobileBalancePaymentsPostReqPaymentMethodData + found = true + case "PaymentMethodDataB2bSberbank": + s.Type = PaymentMethodDataB2bSberbankPaymentsPostReqPaymentMethodData + found = true + case "PaymentMethodDataSbp": + s.Type = PaymentMethodDataSbpPaymentsPostReqPaymentMethodData + found = true + case "PaymentMethodDataSberLoan": + s.Type = PaymentMethodDataSberLoanPaymentsPostReqPaymentMethodData + found = true + case "PaymentMethodDataElectronicCertificate": + s.Type = PaymentMethodDataElectronicCertificatePaymentsPostReqPaymentMethodData + found = true + case "PaymentMethodDataSberBnpl": + s.Type = PaymentMethodDataSberBnplPaymentsPostReqPaymentMethodData + found = true + default: + return errors.Errorf("unknown type %s", typ) + } + return nil + } + return d.Skip() + }) + }); err != nil { + return errors.Wrap(err, "capture") + } + if !found { + return errors.New("unable to detect sum type variant") + } + switch s.Type { + case PaymentMethodDataBankCardPaymentsPostReqPaymentMethodData: + if err := s.PaymentMethodDataBankCard.Decode(d); err != nil { + return err + } + case PaymentMethodDataCashPaymentsPostReqPaymentMethodData: + if err := s.PaymentMethodDataCash.Decode(d); err != nil { + return err + } + case PaymentMethodDataSberbankPaymentsPostReqPaymentMethodData: + if err := s.PaymentMethodDataSberbank.Decode(d); err != nil { + return err + } + case PaymentMethodDataTinkoffBankPaymentsPostReqPaymentMethodData: + if err := s.PaymentMethodDataTinkoffBank.Decode(d); err != nil { + return err + } + case PaymentMethodDataYooMoneyPaymentsPostReqPaymentMethodData: + if err := s.PaymentMethodDataYooMoney.Decode(d); err != nil { + return err + } + case PaymentMethodDataMobileBalancePaymentsPostReqPaymentMethodData: + if err := s.PaymentMethodDataMobileBalance.Decode(d); err != nil { + return err + } + case PaymentMethodDataB2bSberbankPaymentsPostReqPaymentMethodData: + if err := s.PaymentMethodDataB2bSberbank.Decode(d); err != nil { + return err + } + case PaymentMethodDataSbpPaymentsPostReqPaymentMethodData: + if err := s.PaymentMethodDataSbp.Decode(d); err != nil { + return err + } + case PaymentMethodDataSberLoanPaymentsPostReqPaymentMethodData: + if err := s.PaymentMethodDataSberLoan.Decode(d); err != nil { + return err + } + case PaymentMethodDataElectronicCertificatePaymentsPostReqPaymentMethodData: + if err := s.PaymentMethodDataElectronicCertificate.Decode(d); err != nil { + return err + } + case PaymentMethodDataSberBnplPaymentsPostReqPaymentMethodData: + if err := s.PaymentMethodDataSberBnpl.Decode(d); err != nil { + return err + } + default: + return errors.Errorf("inferred invalid type: %s", s.Type) + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s PaymentsPostReqPaymentMethodData) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentsPostReqPaymentMethodData) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PaymentsPostReqPaymentOrder as json. +func (s PaymentsPostReqPaymentOrder) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +func (s PaymentsPostReqPaymentOrder) encodeFields(e *jx.Encoder) { + switch s.Type { + case PaymentOrderDataUtilitiesPaymentsPostReqPaymentOrder: + e.FieldStart("type") + e.Str("PaymentOrderDataUtilities") + { + s := s.PaymentOrderDataUtilities + { + e.FieldStart("amount") + s.Amount.Encode(e) + } + { + e.FieldStart("payment_purpose") + e.Str(s.PaymentPurpose) + } + { + e.FieldStart("recipient") + s.Recipient.Encode(e) + } + { + if s.Kbk.Set { + e.FieldStart("kbk") + s.Kbk.Encode(e) + } + } + { + if s.Oktmo.Set { + e.FieldStart("oktmo") + s.Oktmo.Encode(e) + } + } + { + if s.PaymentPeriod.Set { + e.FieldStart("payment_period") + s.PaymentPeriod.Encode(e) + } + } + { + if s.PaymentDocumentID.Set { + e.FieldStart("payment_document_id") + s.PaymentDocumentID.Encode(e) + } + } + { + if s.PaymentDocumentNumber.Set { + e.FieldStart("payment_document_number") + s.PaymentDocumentNumber.Encode(e) + } + } + { + if s.AccountNumber.Set { + e.FieldStart("account_number") + s.AccountNumber.Encode(e) + } + } + { + if s.UnifiedAccountNumber.Set { + e.FieldStart("unified_account_number") + s.UnifiedAccountNumber.Encode(e) + } + } + { + if s.ServiceID.Set { + e.FieldStart("service_id") + s.ServiceID.Encode(e) + } + } + } + } +} + +// Decode decodes PaymentsPostReqPaymentOrder from json. +func (s *PaymentsPostReqPaymentOrder) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentsPostReqPaymentOrder to nil") + } + // Sum type discriminator. + if typ := d.Next(); typ != jx.Object { + return errors.Errorf("unexpected json type %q", typ) + } + + var found bool + if err := d.Capture(func(d *jx.Decoder) error { + return d.ObjBytes(func(d *jx.Decoder, key []byte) error { + if found { + return d.Skip() + } + switch string(key) { + case "type": + typ, err := d.Str() + if err != nil { + return err + } + switch typ { + case "PaymentOrderDataUtilities": + s.Type = PaymentOrderDataUtilitiesPaymentsPostReqPaymentOrder + found = true + default: + return errors.Errorf("unknown type %s", typ) + } + return nil + } + return d.Skip() + }) + }); err != nil { + return errors.Wrap(err, "capture") + } + if !found { + return errors.New("unable to detect sum type variant") + } + switch s.Type { + case PaymentOrderDataUtilitiesPaymentsPostReqPaymentOrder: + if err := s.PaymentOrderDataUtilities.Decode(d); err != nil { + return err + } + default: + return errors.Errorf("inferred invalid type: %s", s.Type) + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s PaymentsPostReqPaymentOrder) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentsPostReqPaymentOrder) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PaymentsPostReqReceiver as json. +func (s PaymentsPostReqReceiver) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +func (s PaymentsPostReqReceiver) encodeFields(e *jx.Encoder) { + switch s.Type { + case ReceiverMobileBalancePaymentsPostReqReceiver: + e.FieldStart("type") + e.Str("ReceiverMobileBalance") + { + s := s.ReceiverMobileBalance + { + e.FieldStart("phone") + e.Str(s.Phone) + } + } + case ReceiverDigitalWalletPaymentsPostReqReceiver: + e.FieldStart("type") + e.Str("ReceiverDigitalWallet") + { + s := s.ReceiverDigitalWallet + { + e.FieldStart("account_number") + e.Str(s.AccountNumber) + } + } + case ReceiverBankAccountPaymentsPostReqReceiver: + e.FieldStart("type") + e.Str("ReceiverBankAccount") + { + s := s.ReceiverBankAccount + { + e.FieldStart("account_number") + e.Str(s.AccountNumber) + } + { + e.FieldStart("bic") + e.Str(s.Bic) + } + } + } +} + +// Decode decodes PaymentsPostReqReceiver from json. +func (s *PaymentsPostReqReceiver) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentsPostReqReceiver to nil") + } + // Sum type discriminator. + if typ := d.Next(); typ != jx.Object { + return errors.Errorf("unexpected json type %q", typ) + } + + var found bool + if err := d.Capture(func(d *jx.Decoder) error { + return d.ObjBytes(func(d *jx.Decoder, key []byte) error { + if found { + return d.Skip() + } + switch string(key) { + case "type": + typ, err := d.Str() + if err != nil { + return err + } + switch typ { + case "ReceiverMobileBalance": + s.Type = ReceiverMobileBalancePaymentsPostReqReceiver + found = true + case "ReceiverDigitalWallet": + s.Type = ReceiverDigitalWalletPaymentsPostReqReceiver + found = true + case "ReceiverBankAccount": + s.Type = ReceiverBankAccountPaymentsPostReqReceiver + found = true + default: + return errors.Errorf("unknown type %s", typ) + } + return nil + } + return d.Skip() + }) + }); err != nil { + return errors.Wrap(err, "capture") + } + if !found { + return errors.New("unable to detect sum type variant") + } + switch s.Type { + case ReceiverMobileBalancePaymentsPostReqReceiver: + if err := s.ReceiverMobileBalance.Decode(d); err != nil { + return err + } + case ReceiverDigitalWalletPaymentsPostReqReceiver: + if err := s.ReceiverDigitalWallet.Decode(d); err != nil { + return err + } + case ReceiverBankAccountPaymentsPostReqReceiver: + if err := s.ReceiverBankAccount.Decode(d); err != nil { + return err + } + default: + return errors.Errorf("inferred invalid type: %s", s.Type) + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s PaymentsPostReqReceiver) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentsPostReqReceiver) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PaymentsPostReqStatementsItem as json. +func (s PaymentsPostReqStatementsItem) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +func (s PaymentsPostReqStatementsItem) encodeFields(e *jx.Encoder) { + switch s.Type { + case PaymentOverviewStatementDataPaymentsPostReqStatementsItem: + e.FieldStart("type") + e.Str("PaymentOverviewStatementData") + { + s := s.PaymentOverviewStatementData + { + e.FieldStart("delivery_method") + s.DeliveryMethod.Encode(e) + } + } + } +} + +// Decode decodes PaymentsPostReqStatementsItem from json. +func (s *PaymentsPostReqStatementsItem) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PaymentsPostReqStatementsItem to nil") + } + // Sum type discriminator. + if typ := d.Next(); typ != jx.Object { + return errors.Errorf("unexpected json type %q", typ) + } + + var found bool + if err := d.Capture(func(d *jx.Decoder) error { + return d.ObjBytes(func(d *jx.Decoder, key []byte) error { + if found { + return d.Skip() + } + switch string(key) { + case "type": + typ, err := d.Str() + if err != nil { + return err + } + switch typ { + case "PaymentOverviewStatementData": + s.Type = PaymentOverviewStatementDataPaymentsPostReqStatementsItem + found = true + default: + return errors.Errorf("unknown type %s", typ) + } + return nil + } + return d.Skip() + }) + }); err != nil { + return errors.Wrap(err, "capture") + } + if !found { + return errors.New("unable to detect sum type variant") + } + switch s.Type { + case PaymentOverviewStatementDataPaymentsPostReqStatementsItem: + if err := s.PaymentOverviewStatementData.Decode(d); err != nil { + return err + } + default: + return errors.Errorf("inferred invalid type: %s", s.Type) + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s PaymentsPostReqStatementsItem) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PaymentsPostReqStatementsItem) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *Payout) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *Payout) encodeFields(e *jx.Encoder) { + { + e.FieldStart("id") + s.ID.Encode(e) + } + { + e.FieldStart("amount") + s.Amount.Encode(e) + } + { + e.FieldStart("status") + s.Status.Encode(e) + } + { + e.FieldStart("payout_destination") + s.PayoutDestination.Encode(e) + } + { + if s.Description.Set { + e.FieldStart("description") + s.Description.Encode(e) + } + } + { + e.FieldStart("created_at") + json.EncodeDateTime(e, s.CreatedAt) + } + { + if s.SucceededAt.Set { + e.FieldStart("succeeded_at") + s.SucceededAt.Encode(e, json.EncodeDateTime) + } + } + { + if s.Deal.Set { + e.FieldStart("deal") + s.Deal.Encode(e) + } + } + { + if s.SelfEmployed.Set { + e.FieldStart("self_employed") + s.SelfEmployed.Encode(e) + } + } + { + if s.Receipt.Set { + e.FieldStart("receipt") + s.Receipt.Encode(e) + } + } + { + if s.CancellationDetails.Set { + e.FieldStart("cancellation_details") + s.CancellationDetails.Encode(e) + } + } + { + if s.Metadata.Set { + e.FieldStart("metadata") + s.Metadata.Encode(e) + } + } + { + e.FieldStart("test") + s.Test.Encode(e) + } +} + +var jsonFieldsNameOfPayout = [13]string{ + 0: "id", + 1: "amount", + 2: "status", + 3: "payout_destination", + 4: "description", + 5: "created_at", + 6: "succeeded_at", + 7: "deal", + 8: "self_employed", + 9: "receipt", + 10: "cancellation_details", + 11: "metadata", + 12: "test", +} + +// Decode decodes Payout from json. +func (s *Payout) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode Payout to nil") + } + var requiredBitSet [2]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "id": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + if err := s.ID.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"id\"") + } + case "amount": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + if err := s.Amount.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"amount\"") + } + case "status": + requiredBitSet[0] |= 1 << 2 + if err := func() error { + if err := s.Status.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"status\"") + } + case "payout_destination": + requiredBitSet[0] |= 1 << 3 + if err := func() error { + if err := s.PayoutDestination.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"payout_destination\"") + } + case "description": + if err := func() error { + s.Description.Reset() + if err := s.Description.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"description\"") + } + case "created_at": + requiredBitSet[0] |= 1 << 5 + if err := func() error { + v, err := json.DecodeDateTime(d) + s.CreatedAt = v + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"created_at\"") + } + case "succeeded_at": + if err := func() error { + s.SucceededAt.Reset() + if err := s.SucceededAt.Decode(d, json.DecodeDateTime); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"succeeded_at\"") + } + case "deal": + if err := func() error { + s.Deal.Reset() + if err := s.Deal.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"deal\"") + } + case "self_employed": + if err := func() error { + s.SelfEmployed.Reset() + if err := s.SelfEmployed.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"self_employed\"") + } + case "receipt": + if err := func() error { + s.Receipt.Reset() + if err := s.Receipt.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"receipt\"") + } + case "cancellation_details": + if err := func() error { + s.CancellationDetails.Reset() + if err := s.CancellationDetails.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"cancellation_details\"") + } + case "metadata": + if err := func() error { + s.Metadata.Reset() + if err := s.Metadata.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"metadata\"") + } + case "test": + requiredBitSet[1] |= 1 << 4 + if err := func() error { + if err := s.Test.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"test\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode Payout") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [2]uint8{ + 0b00101111, + 0b00010000, + } { + 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(jsonFieldsNameOfPayout) { + name = jsonFieldsNameOfPayout[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 *Payout) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *Payout) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *PayoutAmount) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *PayoutAmount) encodeFields(e *jx.Encoder) { + { + e.FieldStart("value") + e.Str(s.Value) + } + { + e.FieldStart("currency") + s.Currency.Encode(e) + } +} + +var jsonFieldsNameOfPayoutAmount = [2]string{ + 0: "value", + 1: "currency", +} + +// Decode decodes PayoutAmount from json. +func (s *PayoutAmount) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PayoutAmount to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "value": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + v, err := d.Str() + s.Value = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"value\"") + } + case "currency": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + if err := s.Currency.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"currency\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode PayoutAmount") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000011, + } { + 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(jsonFieldsNameOfPayoutAmount) { + name = jsonFieldsNameOfPayoutAmount[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 *PayoutAmount) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PayoutAmount) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *PayoutCancellationDetails) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *PayoutCancellationDetails) encodeFields(e *jx.Encoder) { + { + e.FieldStart("party") + s.Party.Encode(e) + } + { + e.FieldStart("reason") + s.Reason.Encode(e) + } +} + +var jsonFieldsNameOfPayoutCancellationDetails = [2]string{ + 0: "party", + 1: "reason", +} + +// Decode decodes PayoutCancellationDetails from json. +func (s *PayoutCancellationDetails) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PayoutCancellationDetails to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "party": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + if err := s.Party.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"party\"") + } + case "reason": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + if err := s.Reason.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"reason\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode PayoutCancellationDetails") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000011, + } { + 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(jsonFieldsNameOfPayoutCancellationDetails) { + name = jsonFieldsNameOfPayoutCancellationDetails[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 *PayoutCancellationDetails) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PayoutCancellationDetails) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PayoutCancellationDetailsParty as json. +func (s PayoutCancellationDetailsParty) Encode(e *jx.Encoder) { + e.Str(string(s)) +} + +// Decode decodes PayoutCancellationDetailsParty from json. +func (s *PayoutCancellationDetailsParty) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PayoutCancellationDetailsParty to nil") + } + v, err := d.StrBytes() + if err != nil { + return err + } + // Try to use constant string. + switch PayoutCancellationDetailsParty(v) { + case PayoutCancellationDetailsPartyYooMoney: + *s = PayoutCancellationDetailsPartyYooMoney + case PayoutCancellationDetailsPartyPayoutNetwork: + *s = PayoutCancellationDetailsPartyPayoutNetwork + default: + *s = PayoutCancellationDetailsParty(v) + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s PayoutCancellationDetailsParty) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PayoutCancellationDetailsParty) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PayoutCancellationDetailsReason as json. +func (s PayoutCancellationDetailsReason) Encode(e *jx.Encoder) { + e.Str(string(s)) +} + +// Decode decodes PayoutCancellationDetailsReason from json. +func (s *PayoutCancellationDetailsReason) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PayoutCancellationDetailsReason to nil") + } + v, err := d.StrBytes() + if err != nil { + return err + } + // Try to use constant string. + switch PayoutCancellationDetailsReason(v) { + case PayoutCancellationDetailsReasonInsufficientFunds: + *s = PayoutCancellationDetailsReasonInsufficientFunds + case PayoutCancellationDetailsReasonFraudSuspected: + *s = PayoutCancellationDetailsReasonFraudSuspected + case PayoutCancellationDetailsReasonOneTimeLimitExceeded: + *s = PayoutCancellationDetailsReasonOneTimeLimitExceeded + case PayoutCancellationDetailsReasonPeriodicLimitExceeded: + *s = PayoutCancellationDetailsReasonPeriodicLimitExceeded + case PayoutCancellationDetailsReasonRejectedByPayee: + *s = PayoutCancellationDetailsReasonRejectedByPayee + case PayoutCancellationDetailsReasonGeneralDecline: + *s = PayoutCancellationDetailsReasonGeneralDecline + case PayoutCancellationDetailsReasonIssuerUnavailable: + *s = PayoutCancellationDetailsReasonIssuerUnavailable + case PayoutCancellationDetailsReasonRecipientNotFound: + *s = PayoutCancellationDetailsReasonRecipientNotFound + case PayoutCancellationDetailsReasonRecipientCheckFailed: + *s = PayoutCancellationDetailsReasonRecipientCheckFailed + case PayoutCancellationDetailsReasonIdentificationRequired: + *s = PayoutCancellationDetailsReasonIdentificationRequired + case PayoutCancellationDetailsReasonSelfEmployedAnnualLimitExceeded: + *s = PayoutCancellationDetailsReasonSelfEmployedAnnualLimitExceeded + default: + *s = PayoutCancellationDetailsReason(v) + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s PayoutCancellationDetailsReason) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PayoutCancellationDetailsReason) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *PayoutCardData) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *PayoutCardData) encodeFields(e *jx.Encoder) { + { + e.FieldStart("first6") + e.Str(s.First6) + } + { + e.FieldStart("last4") + s.Last4.Encode(e) + } + { + e.FieldStart("card_type") + s.CardType.Encode(e) + } + { + if s.IssuerCountry.Set { + e.FieldStart("issuer_country") + s.IssuerCountry.Encode(e) + } + } + { + if s.IssuerName.Set { + e.FieldStart("issuer_name") + s.IssuerName.Encode(e) + } + } +} + +var jsonFieldsNameOfPayoutCardData = [5]string{ + 0: "first6", + 1: "last4", + 2: "card_type", + 3: "issuer_country", + 4: "issuer_name", +} + +// Decode decodes PayoutCardData from json. +func (s *PayoutCardData) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PayoutCardData to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "first6": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + v, err := d.Str() + s.First6 = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"first6\"") + } + case "last4": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + if err := s.Last4.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"last4\"") + } + case "card_type": + requiredBitSet[0] |= 1 << 2 + if err := func() error { + if err := s.CardType.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"card_type\"") + } + case "issuer_country": + if err := func() error { + s.IssuerCountry.Reset() + if err := s.IssuerCountry.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"issuer_country\"") + } + case "issuer_name": + if err := func() error { + s.IssuerName.Reset() + if err := s.IssuerName.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"issuer_name\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode PayoutCardData") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000111, + } { + 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(jsonFieldsNameOfPayoutCardData) { + name = jsonFieldsNameOfPayoutCardData[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 *PayoutCardData) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PayoutCardData) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *PayoutDeal) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *PayoutDeal) encodeFields(e *jx.Encoder) { + { + e.FieldStart("id") + s.ID.Encode(e) + } +} + +var jsonFieldsNameOfPayoutDeal = [1]string{ + 0: "id", +} + +// Decode decodes PayoutDeal from json. +func (s *PayoutDeal) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PayoutDeal to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "id": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + if err := s.ID.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"id\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode PayoutDeal") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000001, + } { + 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(jsonFieldsNameOfPayoutDeal) { + name = jsonFieldsNameOfPayoutDeal[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 *PayoutDeal) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PayoutDeal) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *PayoutDealInfo) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *PayoutDealInfo) encodeFields(e *jx.Encoder) { + { + e.FieldStart("id") + s.ID.Encode(e) + } +} + +var jsonFieldsNameOfPayoutDealInfo = [1]string{ + 0: "id", +} + +// Decode decodes PayoutDealInfo from json. +func (s *PayoutDealInfo) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PayoutDealInfo to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "id": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + if err := s.ID.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"id\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode PayoutDealInfo") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000001, + } { + 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(jsonFieldsNameOfPayoutDealInfo) { + name = jsonFieldsNameOfPayoutDealInfo[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 *PayoutDealInfo) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PayoutDealInfo) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PayoutDestinationDataType as json. +func (s PayoutDestinationDataType) Encode(e *jx.Encoder) { + e.Str(string(s)) +} + +// Decode decodes PayoutDestinationDataType from json. +func (s *PayoutDestinationDataType) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PayoutDestinationDataType to nil") + } + v, err := d.StrBytes() + if err != nil { + return err + } + // Try to use constant string. + switch PayoutDestinationDataType(v) { + case PayoutDestinationDataTypeYooMoney: + *s = PayoutDestinationDataTypeYooMoney + case PayoutDestinationDataTypeBankCard: + *s = PayoutDestinationDataTypeBankCard + case PayoutDestinationDataTypeSbp: + *s = PayoutDestinationDataTypeSbp + default: + *s = PayoutDestinationDataType(v) + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s PayoutDestinationDataType) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PayoutDestinationDataType) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PayoutDestinationType as json. +func (s PayoutDestinationType) Encode(e *jx.Encoder) { + e.Str(string(s)) +} + +// Decode decodes PayoutDestinationType from json. +func (s *PayoutDestinationType) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PayoutDestinationType to nil") + } + v, err := d.StrBytes() + if err != nil { + return err + } + // Try to use constant string. + switch PayoutDestinationType(v) { + case PayoutDestinationTypeBankCard: + *s = PayoutDestinationTypeBankCard + case PayoutDestinationTypeYooMoney: + *s = PayoutDestinationTypeYooMoney + case PayoutDestinationTypeSbp: + *s = PayoutDestinationTypeSbp + default: + *s = PayoutDestinationType(v) + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s PayoutDestinationType) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PayoutDestinationType) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PayoutId as json. +func (s PayoutId) Encode(e *jx.Encoder) { + unwrapped := string(s) + + e.Str(unwrapped) +} + +// Decode decodes PayoutId from json. +func (s *PayoutId) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PayoutId to nil") + } + var unwrapped string + if err := func() error { + v, err := d.Str() + unwrapped = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "alias") + } + *s = PayoutId(unwrapped) + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s PayoutId) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PayoutId) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PayoutMethodType as json. +func (s PayoutMethodType) Encode(e *jx.Encoder) { + e.Str(string(s)) +} + +// Decode decodes PayoutMethodType from json. +func (s *PayoutMethodType) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PayoutMethodType to nil") + } + v, err := d.StrBytes() + if err != nil { + return err + } + // Try to use constant string. + switch PayoutMethodType(v) { + case PayoutMethodTypeBankCard: + *s = PayoutMethodTypeBankCard + case PayoutMethodTypeYooMoney: + *s = PayoutMethodTypeYooMoney + case PayoutMethodTypeSbp: + *s = PayoutMethodTypeSbp + default: + *s = PayoutMethodType(v) + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s PayoutMethodType) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PayoutMethodType) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PayoutPayoutDestination as json. +func (s PayoutPayoutDestination) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +func (s PayoutPayoutDestination) encodeFields(e *jx.Encoder) { + switch s.Type { + case PayoutToCardDestinationPayoutPayoutDestination: + e.FieldStart("type") + e.Str("PayoutToCardDestination") + { + s := s.PayoutToCardDestination + { + if s.Card.Set { + e.FieldStart("card") + s.Card.Encode(e) + } + } + } + case PayoutToYooMoneyDestinationPayoutPayoutDestination: + e.FieldStart("type") + e.Str("PayoutToYooMoneyDestination") + { + s := s.PayoutToYooMoneyDestination + { + e.FieldStart("account_number") + s.AccountNumber.Encode(e) + } + } + case PayoutToSbpDestinationPayoutPayoutDestination: + e.FieldStart("type") + e.Str("PayoutToSbpDestination") + { + s := s.PayoutToSbpDestination + { + e.FieldStart("phone") + e.Str(s.Phone) + } + { + e.FieldStart("bank_id") + e.Str(s.BankID) + } + { + e.FieldStart("recipient_checked") + e.Bool(s.RecipientChecked) + } + } + } +} + +// Decode decodes PayoutPayoutDestination from json. +func (s *PayoutPayoutDestination) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PayoutPayoutDestination to nil") + } + // Sum type discriminator. + if typ := d.Next(); typ != jx.Object { + return errors.Errorf("unexpected json type %q", typ) + } + + var found bool + if err := d.Capture(func(d *jx.Decoder) error { + return d.ObjBytes(func(d *jx.Decoder, key []byte) error { + if found { + return d.Skip() + } + switch string(key) { + case "type": + typ, err := d.Str() + if err != nil { + return err + } + switch typ { + case "PayoutToCardDestination": + s.Type = PayoutToCardDestinationPayoutPayoutDestination + found = true + case "PayoutToYooMoneyDestination": + s.Type = PayoutToYooMoneyDestinationPayoutPayoutDestination + found = true + case "PayoutToSbpDestination": + s.Type = PayoutToSbpDestinationPayoutPayoutDestination + found = true + default: + return errors.Errorf("unknown type %s", typ) + } + return nil + } + return d.Skip() + }) + }); err != nil { + return errors.Wrap(err, "capture") + } + if !found { + return errors.New("unable to detect sum type variant") + } + switch s.Type { + case PayoutToCardDestinationPayoutPayoutDestination: + if err := s.PayoutToCardDestination.Decode(d); err != nil { + return err + } + case PayoutToYooMoneyDestinationPayoutPayoutDestination: + if err := s.PayoutToYooMoneyDestination.Decode(d); err != nil { + return err + } + case PayoutToSbpDestinationPayoutPayoutDestination: + if err := s.PayoutToSbpDestination.Decode(d); err != nil { + return err + } + default: + return errors.Errorf("inferred invalid type: %s", s.Type) + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s PayoutPayoutDestination) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PayoutPayoutDestination) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *PayoutRequest) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *PayoutRequest) encodeFields(e *jx.Encoder) { + { + e.FieldStart("amount") + s.Amount.Encode(e) + } + { + if s.PayoutDestinationData.Set { + e.FieldStart("payout_destination_data") + s.PayoutDestinationData.Encode(e) + } + } + { + if s.PayoutToken.Set { + e.FieldStart("payout_token") + s.PayoutToken.Encode(e) + } + } + { + if s.PaymentMethodID.Set { + e.FieldStart("payment_method_id") + s.PaymentMethodID.Encode(e) + } + } + { + if s.Description.Set { + e.FieldStart("description") + s.Description.Encode(e) + } + } + { + if s.Deal.Set { + e.FieldStart("deal") + s.Deal.Encode(e) + } + } + { + if s.PersonalData != nil { + e.FieldStart("personal_data") + e.ArrStart() + for _, elem := range s.PersonalData { + elem.Encode(e) + } + e.ArrEnd() + } + } + { + if s.Metadata.Set { + e.FieldStart("metadata") + s.Metadata.Encode(e) + } + } +} + +var jsonFieldsNameOfPayoutRequest = [8]string{ + 0: "amount", + 1: "payout_destination_data", + 2: "payout_token", + 3: "payment_method_id", + 4: "description", + 5: "deal", + 6: "personal_data", + 7: "metadata", +} + +// Decode decodes PayoutRequest from json. +func (s *PayoutRequest) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PayoutRequest to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "amount": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + if err := s.Amount.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"amount\"") + } + case "payout_destination_data": + if err := func() error { + s.PayoutDestinationData.Reset() + if err := s.PayoutDestinationData.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"payout_destination_data\"") + } + case "payout_token": + if err := func() error { + s.PayoutToken.Reset() + if err := s.PayoutToken.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"payout_token\"") + } + case "payment_method_id": + if err := func() error { + s.PaymentMethodID.Reset() + if err := s.PaymentMethodID.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"payment_method_id\"") + } + case "description": + if err := func() error { + s.Description.Reset() + if err := s.Description.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"description\"") + } + case "deal": + if err := func() error { + s.Deal.Reset() + if err := s.Deal.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"deal\"") + } + case "personal_data": + if err := func() error { + s.PersonalData = make([]PayoutsPersonalData, 0) + if err := d.Arr(func(d *jx.Decoder) error { + var elem PayoutsPersonalData + if err := elem.Decode(d); err != nil { + return err + } + s.PersonalData = append(s.PersonalData, elem) + return nil + }); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"personal_data\"") + } + case "metadata": + if err := func() error { + s.Metadata.Reset() + if err := s.Metadata.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"metadata\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode PayoutRequest") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000001, + } { + 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(jsonFieldsNameOfPayoutRequest) { + name = jsonFieldsNameOfPayoutRequest[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 *PayoutRequest) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PayoutRequest) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *PayoutRequestAmount) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *PayoutRequestAmount) encodeFields(e *jx.Encoder) { + { + e.FieldStart("value") + e.Str(s.Value) + } + { + e.FieldStart("currency") + s.Currency.Encode(e) + } +} + +var jsonFieldsNameOfPayoutRequestAmount = [2]string{ + 0: "value", + 1: "currency", +} + +// Decode decodes PayoutRequestAmount from json. +func (s *PayoutRequestAmount) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PayoutRequestAmount to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "value": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + v, err := d.Str() + s.Value = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"value\"") + } + case "currency": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + if err := s.Currency.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"currency\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode PayoutRequestAmount") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000011, + } { + 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(jsonFieldsNameOfPayoutRequestAmount) { + name = jsonFieldsNameOfPayoutRequestAmount[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 *PayoutRequestAmount) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PayoutRequestAmount) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PayoutRequestPayoutDestinationData as json. +func (s PayoutRequestPayoutDestinationData) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +func (s PayoutRequestPayoutDestinationData) encodeFields(e *jx.Encoder) { + switch s.Type { + case PayoutToYooMoneyDestinationDataPayoutRequestPayoutDestinationData: + e.FieldStart("type") + e.Str("PayoutToYooMoneyDestinationData") + { + s := s.PayoutToYooMoneyDestinationData + { + e.FieldStart("account_number") + e.Str(s.AccountNumber) + } + } + case PayoutToBankCardDestinationDataPayoutRequestPayoutDestinationData: + e.FieldStart("type") + e.Str("PayoutToBankCardDestinationData") + { + s := s.PayoutToBankCardDestinationData + { + e.FieldStart("card") + s.Card.Encode(e) + } + } + case PayoutToSbpDestinationDataPayoutRequestPayoutDestinationData: + e.FieldStart("type") + e.Str("PayoutToSbpDestinationData") + { + s := s.PayoutToSbpDestinationData + { + e.FieldStart("phone") + e.Str(s.Phone) + } + { + e.FieldStart("bank_id") + e.Str(s.BankID) + } + } + } +} + +// Decode decodes PayoutRequestPayoutDestinationData from json. +func (s *PayoutRequestPayoutDestinationData) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PayoutRequestPayoutDestinationData to nil") + } + // Sum type discriminator. + if typ := d.Next(); typ != jx.Object { + return errors.Errorf("unexpected json type %q", typ) + } + + var found bool + if err := d.Capture(func(d *jx.Decoder) error { + return d.ObjBytes(func(d *jx.Decoder, key []byte) error { + if found { + return d.Skip() + } + switch string(key) { + case "type": + typ, err := d.Str() + if err != nil { + return err + } + switch typ { + case "PayoutToYooMoneyDestinationData": + s.Type = PayoutToYooMoneyDestinationDataPayoutRequestPayoutDestinationData + found = true + case "PayoutToBankCardDestinationData": + s.Type = PayoutToBankCardDestinationDataPayoutRequestPayoutDestinationData + found = true + case "PayoutToSbpDestinationData": + s.Type = PayoutToSbpDestinationDataPayoutRequestPayoutDestinationData + found = true + default: + return errors.Errorf("unknown type %s", typ) + } + return nil + } + return d.Skip() + }) + }); err != nil { + return errors.Wrap(err, "capture") + } + if !found { + return errors.New("unable to detect sum type variant") + } + switch s.Type { + case PayoutToYooMoneyDestinationDataPayoutRequestPayoutDestinationData: + if err := s.PayoutToYooMoneyDestinationData.Decode(d); err != nil { + return err + } + case PayoutToBankCardDestinationDataPayoutRequestPayoutDestinationData: + if err := s.PayoutToBankCardDestinationData.Decode(d); err != nil { + return err + } + case PayoutToSbpDestinationDataPayoutRequestPayoutDestinationData: + if err := s.PayoutToSbpDestinationData.Decode(d); err != nil { + return err + } + default: + return errors.Errorf("inferred invalid type: %s", s.Type) + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s PayoutRequestPayoutDestinationData) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PayoutRequestPayoutDestinationData) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *PayoutSelfEmployed) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *PayoutSelfEmployed) encodeFields(e *jx.Encoder) { + { + e.FieldStart("id") + s.ID.Encode(e) + } +} + +var jsonFieldsNameOfPayoutSelfEmployed = [1]string{ + 0: "id", +} + +// Decode decodes PayoutSelfEmployed from json. +func (s *PayoutSelfEmployed) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PayoutSelfEmployed to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "id": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + if err := s.ID.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"id\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode PayoutSelfEmployed") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000001, + } { + 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(jsonFieldsNameOfPayoutSelfEmployed) { + name = jsonFieldsNameOfPayoutSelfEmployed[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 *PayoutSelfEmployed) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PayoutSelfEmployed) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *PayoutStatementRecipientPersonalDataRequest) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *PayoutStatementRecipientPersonalDataRequest) encodeFields(e *jx.Encoder) { + { + e.FieldStart("type") + s.Type.Encode(e) + } + { + if s.Metadata.Set { + e.FieldStart("metadata") + s.Metadata.Encode(e) + } + } + { + e.FieldStart("last_name") + s.LastName.Encode(e) + } + { + e.FieldStart("first_name") + s.FirstName.Encode(e) + } + { + if s.MiddleName.Set { + e.FieldStart("middle_name") + s.MiddleName.Encode(e) + } + } + { + e.FieldStart("birthdate") + json.EncodeDate(e, s.Birthdate) + } +} + +var jsonFieldsNameOfPayoutStatementRecipientPersonalDataRequest = [6]string{ + 0: "type", + 1: "metadata", + 2: "last_name", + 3: "first_name", + 4: "middle_name", + 5: "birthdate", +} + +// Decode decodes PayoutStatementRecipientPersonalDataRequest from json. +func (s *PayoutStatementRecipientPersonalDataRequest) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PayoutStatementRecipientPersonalDataRequest to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "type": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + if err := s.Type.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"type\"") + } + case "metadata": + if err := func() error { + s.Metadata.Reset() + if err := s.Metadata.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"metadata\"") + } + case "last_name": + requiredBitSet[0] |= 1 << 2 + if err := func() error { + if err := s.LastName.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"last_name\"") + } + case "first_name": + requiredBitSet[0] |= 1 << 3 + if err := func() error { + if err := s.FirstName.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"first_name\"") + } + case "middle_name": + if err := func() error { + s.MiddleName.Reset() + if err := s.MiddleName.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"middle_name\"") + } + case "birthdate": + requiredBitSet[0] |= 1 << 5 + if err := func() error { + v, err := json.DecodeDate(d) + s.Birthdate = v + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"birthdate\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode PayoutStatementRecipientPersonalDataRequest") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00101101, + } { + 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(jsonFieldsNameOfPayoutStatementRecipientPersonalDataRequest) { + name = jsonFieldsNameOfPayoutStatementRecipientPersonalDataRequest[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 *PayoutStatementRecipientPersonalDataRequest) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PayoutStatementRecipientPersonalDataRequest) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PayoutStatus as json. +func (s PayoutStatus) Encode(e *jx.Encoder) { + e.Str(string(s)) +} + +// Decode decodes PayoutStatus from json. +func (s *PayoutStatus) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PayoutStatus to nil") + } + v, err := d.StrBytes() + if err != nil { + return err + } + // Try to use constant string. + switch PayoutStatus(v) { + case PayoutStatusPending: + *s = PayoutStatusPending + case PayoutStatusSucceeded: + *s = PayoutStatusSucceeded + case PayoutStatusCanceled: + *s = PayoutStatusCanceled + default: + *s = PayoutStatus(v) + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s PayoutStatus) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PayoutStatus) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *PayoutToBankCardDestinationData) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *PayoutToBankCardDestinationData) encodeFields(e *jx.Encoder) { + { + e.FieldStart("type") + s.Type.Encode(e) + } + { + e.FieldStart("card") + s.Card.Encode(e) + } +} + +var jsonFieldsNameOfPayoutToBankCardDestinationData = [2]string{ + 0: "type", + 1: "card", +} + +// Decode decodes PayoutToBankCardDestinationData from json. +func (s *PayoutToBankCardDestinationData) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PayoutToBankCardDestinationData to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "type": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + if err := s.Type.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"type\"") + } + case "card": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + if err := s.Card.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"card\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode PayoutToBankCardDestinationData") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000011, + } { + 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(jsonFieldsNameOfPayoutToBankCardDestinationData) { + name = jsonFieldsNameOfPayoutToBankCardDestinationData[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 *PayoutToBankCardDestinationData) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PayoutToBankCardDestinationData) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *PayoutToCardDestination) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *PayoutToCardDestination) encodeFields(e *jx.Encoder) { + { + e.FieldStart("type") + s.Type.Encode(e) + } + { + if s.Card.Set { + e.FieldStart("card") + s.Card.Encode(e) + } + } +} + +var jsonFieldsNameOfPayoutToCardDestination = [2]string{ + 0: "type", + 1: "card", +} + +// Decode decodes PayoutToCardDestination from json. +func (s *PayoutToCardDestination) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PayoutToCardDestination to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "type": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + if err := s.Type.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"type\"") + } + case "card": + if err := func() error { + s.Card.Reset() + if err := s.Card.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"card\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode PayoutToCardDestination") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000001, + } { + 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(jsonFieldsNameOfPayoutToCardDestination) { + name = jsonFieldsNameOfPayoutToCardDestination[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 *PayoutToCardDestination) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PayoutToCardDestination) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *PayoutToSbpDestination) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *PayoutToSbpDestination) encodeFields(e *jx.Encoder) { + { + e.FieldStart("type") + s.Type.Encode(e) + } + { + e.FieldStart("phone") + e.Str(s.Phone) + } + { + e.FieldStart("bank_id") + e.Str(s.BankID) + } + { + e.FieldStart("recipient_checked") + e.Bool(s.RecipientChecked) + } +} + +var jsonFieldsNameOfPayoutToSbpDestination = [4]string{ + 0: "type", + 1: "phone", + 2: "bank_id", + 3: "recipient_checked", +} + +// Decode decodes PayoutToSbpDestination from json. +func (s *PayoutToSbpDestination) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PayoutToSbpDestination to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "type": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + if err := s.Type.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"type\"") + } + case "phone": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + v, err := d.Str() + s.Phone = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"phone\"") + } + case "bank_id": + requiredBitSet[0] |= 1 << 2 + if err := func() error { + v, err := d.Str() + s.BankID = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"bank_id\"") + } + case "recipient_checked": + requiredBitSet[0] |= 1 << 3 + if err := func() error { + v, err := d.Bool() + s.RecipientChecked = bool(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"recipient_checked\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode PayoutToSbpDestination") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00001111, + } { + 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(jsonFieldsNameOfPayoutToSbpDestination) { + name = jsonFieldsNameOfPayoutToSbpDestination[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 *PayoutToSbpDestination) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PayoutToSbpDestination) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *PayoutToSbpDestinationData) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *PayoutToSbpDestinationData) encodeFields(e *jx.Encoder) { + { + e.FieldStart("type") + s.Type.Encode(e) + } + { + e.FieldStart("phone") + e.Str(s.Phone) + } + { + e.FieldStart("bank_id") + e.Str(s.BankID) + } +} + +var jsonFieldsNameOfPayoutToSbpDestinationData = [3]string{ + 0: "type", + 1: "phone", + 2: "bank_id", +} + +// Decode decodes PayoutToSbpDestinationData from json. +func (s *PayoutToSbpDestinationData) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PayoutToSbpDestinationData to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "type": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + if err := s.Type.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"type\"") + } + case "phone": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + v, err := d.Str() + s.Phone = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"phone\"") + } + case "bank_id": + requiredBitSet[0] |= 1 << 2 + if err := func() error { + v, err := d.Str() + s.BankID = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"bank_id\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode PayoutToSbpDestinationData") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000111, + } { + 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(jsonFieldsNameOfPayoutToSbpDestinationData) { + name = jsonFieldsNameOfPayoutToSbpDestinationData[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 *PayoutToSbpDestinationData) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PayoutToSbpDestinationData) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *PayoutToYooMoneyDestination) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *PayoutToYooMoneyDestination) encodeFields(e *jx.Encoder) { + { + e.FieldStart("type") + s.Type.Encode(e) + } + { + e.FieldStart("account_number") + s.AccountNumber.Encode(e) + } +} + +var jsonFieldsNameOfPayoutToYooMoneyDestination = [2]string{ + 0: "type", + 1: "account_number", +} + +// Decode decodes PayoutToYooMoneyDestination from json. +func (s *PayoutToYooMoneyDestination) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PayoutToYooMoneyDestination to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "type": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + if err := s.Type.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"type\"") + } + case "account_number": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + if err := s.AccountNumber.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"account_number\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode PayoutToYooMoneyDestination") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000011, + } { + 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(jsonFieldsNameOfPayoutToYooMoneyDestination) { + name = jsonFieldsNameOfPayoutToYooMoneyDestination[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 *PayoutToYooMoneyDestination) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PayoutToYooMoneyDestination) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *PayoutToYooMoneyDestinationData) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *PayoutToYooMoneyDestinationData) encodeFields(e *jx.Encoder) { + { + e.FieldStart("type") + s.Type.Encode(e) + } + { + e.FieldStart("account_number") + e.Str(s.AccountNumber) + } +} + +var jsonFieldsNameOfPayoutToYooMoneyDestinationData = [2]string{ + 0: "type", + 1: "account_number", +} + +// Decode decodes PayoutToYooMoneyDestinationData from json. +func (s *PayoutToYooMoneyDestinationData) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PayoutToYooMoneyDestinationData to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "type": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + if err := s.Type.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"type\"") + } + case "account_number": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + v, err := d.Str() + s.AccountNumber = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"account_number\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode PayoutToYooMoneyDestinationData") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000011, + } { + 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(jsonFieldsNameOfPayoutToYooMoneyDestinationData) { + name = jsonFieldsNameOfPayoutToYooMoneyDestinationData[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 *PayoutToYooMoneyDestinationData) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PayoutToYooMoneyDestinationData) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PayoutsGetInternalServerError as json. +func (s *PayoutsGetInternalServerError) Encode(e *jx.Encoder) { + unwrapped := (*TooManyRequests)(s) + + unwrapped.Encode(e) +} + +// Decode decodes PayoutsGetInternalServerError from json. +func (s *PayoutsGetInternalServerError) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PayoutsGetInternalServerError to nil") + } + var unwrapped TooManyRequests + if err := func() error { + if err := unwrapped.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "alias") + } + *s = PayoutsGetInternalServerError(unwrapped) + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s *PayoutsGetInternalServerError) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PayoutsGetInternalServerError) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PayoutsGetTooManyRequests as json. +func (s *PayoutsGetTooManyRequests) Encode(e *jx.Encoder) { + unwrapped := (*TooManyRequests)(s) + + unwrapped.Encode(e) +} + +// Decode decodes PayoutsGetTooManyRequests from json. +func (s *PayoutsGetTooManyRequests) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PayoutsGetTooManyRequests to nil") + } + var unwrapped TooManyRequests + if err := func() error { + if err := unwrapped.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "alias") + } + *s = PayoutsGetTooManyRequests(unwrapped) + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s *PayoutsGetTooManyRequests) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PayoutsGetTooManyRequests) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *PayoutsList) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *PayoutsList) encodeFields(e *jx.Encoder) { + { + e.FieldStart("type") + s.Type.Encode(e) + } + { + e.FieldStart("items") + e.ArrStart() + for _, elem := range s.Items { + elem.Encode(e) + } + e.ArrEnd() + } + { + if s.NextCursor.Set { + e.FieldStart("next_cursor") + s.NextCursor.Encode(e) + } + } +} + +var jsonFieldsNameOfPayoutsList = [3]string{ + 0: "type", + 1: "items", + 2: "next_cursor", +} + +// Decode decodes PayoutsList from json. +func (s *PayoutsList) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PayoutsList to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "type": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + if err := s.Type.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"type\"") + } + case "items": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + s.Items = make([]Payout, 0) + if err := d.Arr(func(d *jx.Decoder) error { + var elem Payout + if err := elem.Decode(d); err != nil { + return err + } + s.Items = append(s.Items, elem) + return nil + }); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"items\"") + } + case "next_cursor": + if err := func() error { + s.NextCursor.Reset() + if err := s.NextCursor.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"next_cursor\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode PayoutsList") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000011, + } { + 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(jsonFieldsNameOfPayoutsList) { + name = jsonFieldsNameOfPayoutsList[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 *PayoutsList) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PayoutsList) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PayoutsListType as json. +func (s PayoutsListType) Encode(e *jx.Encoder) { + e.Str(string(s)) +} + +// Decode decodes PayoutsListType from json. +func (s *PayoutsListType) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PayoutsListType to nil") + } + v, err := d.StrBytes() + if err != nil { + return err + } + // Try to use constant string. + switch PayoutsListType(v) { + case PayoutsListTypeList: + *s = PayoutsListTypeList + default: + *s = PayoutsListType(v) + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s PayoutsListType) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PayoutsListType) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PayoutsPayoutIDGetInternalServerError as json. +func (s *PayoutsPayoutIDGetInternalServerError) Encode(e *jx.Encoder) { + unwrapped := (*TooManyRequests)(s) + + unwrapped.Encode(e) +} + +// Decode decodes PayoutsPayoutIDGetInternalServerError from json. +func (s *PayoutsPayoutIDGetInternalServerError) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PayoutsPayoutIDGetInternalServerError to nil") + } + var unwrapped TooManyRequests + if err := func() error { + if err := unwrapped.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "alias") + } + *s = PayoutsPayoutIDGetInternalServerError(unwrapped) + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s *PayoutsPayoutIDGetInternalServerError) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PayoutsPayoutIDGetInternalServerError) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PayoutsPayoutIDGetTooManyRequests as json. +func (s *PayoutsPayoutIDGetTooManyRequests) Encode(e *jx.Encoder) { + unwrapped := (*TooManyRequests)(s) + + unwrapped.Encode(e) +} + +// Decode decodes PayoutsPayoutIDGetTooManyRequests from json. +func (s *PayoutsPayoutIDGetTooManyRequests) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PayoutsPayoutIDGetTooManyRequests to nil") + } + var unwrapped TooManyRequests + if err := func() error { + if err := unwrapped.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "alias") + } + *s = PayoutsPayoutIDGetTooManyRequests(unwrapped) + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s *PayoutsPayoutIDGetTooManyRequests) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PayoutsPayoutIDGetTooManyRequests) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *PayoutsPersonalData) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *PayoutsPersonalData) encodeFields(e *jx.Encoder) { + { + e.FieldStart("id") + s.ID.Encode(e) + } +} + +var jsonFieldsNameOfPayoutsPersonalData = [1]string{ + 0: "id", +} + +// Decode decodes PayoutsPersonalData from json. +func (s *PayoutsPersonalData) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PayoutsPersonalData to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "id": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + if err := s.ID.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"id\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode PayoutsPersonalData") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000001, + } { + 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(jsonFieldsNameOfPayoutsPersonalData) { + name = jsonFieldsNameOfPayoutsPersonalData[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 *PayoutsPersonalData) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PayoutsPersonalData) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PayoutsPostInternalServerError as json. +func (s *PayoutsPostInternalServerError) Encode(e *jx.Encoder) { + unwrapped := (*TooManyRequests)(s) + + unwrapped.Encode(e) +} + +// Decode decodes PayoutsPostInternalServerError from json. +func (s *PayoutsPostInternalServerError) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PayoutsPostInternalServerError to nil") + } + var unwrapped TooManyRequests + if err := func() error { + if err := unwrapped.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "alias") + } + *s = PayoutsPostInternalServerError(unwrapped) + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s *PayoutsPostInternalServerError) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PayoutsPostInternalServerError) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PayoutsPostTooManyRequests as json. +func (s *PayoutsPostTooManyRequests) Encode(e *jx.Encoder) { + unwrapped := (*TooManyRequests)(s) + + unwrapped.Encode(e) +} + +// Decode decodes PayoutsPostTooManyRequests from json. +func (s *PayoutsPostTooManyRequests) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PayoutsPostTooManyRequests to nil") + } + var unwrapped TooManyRequests + if err := func() error { + if err := unwrapped.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "alias") + } + *s = PayoutsPostTooManyRequests(unwrapped) + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s *PayoutsPostTooManyRequests) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PayoutsPostTooManyRequests) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PayoutsSearchGetInternalServerError as json. +func (s *PayoutsSearchGetInternalServerError) Encode(e *jx.Encoder) { + unwrapped := (*TooManyRequests)(s) + + unwrapped.Encode(e) +} + +// Decode decodes PayoutsSearchGetInternalServerError from json. +func (s *PayoutsSearchGetInternalServerError) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PayoutsSearchGetInternalServerError to nil") + } + var unwrapped TooManyRequests + if err := func() error { + if err := unwrapped.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "alias") + } + *s = PayoutsSearchGetInternalServerError(unwrapped) + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s *PayoutsSearchGetInternalServerError) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PayoutsSearchGetInternalServerError) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PayoutsSearchGetTooManyRequests as json. +func (s *PayoutsSearchGetTooManyRequests) Encode(e *jx.Encoder) { + unwrapped := (*TooManyRequests)(s) + + unwrapped.Encode(e) +} + +// Decode decodes PayoutsSearchGetTooManyRequests from json. +func (s *PayoutsSearchGetTooManyRequests) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PayoutsSearchGetTooManyRequests to nil") + } + var unwrapped TooManyRequests + if err := func() error { + if err := unwrapped.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "alias") + } + *s = PayoutsSearchGetTooManyRequests(unwrapped) + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s *PayoutsSearchGetTooManyRequests) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PayoutsSearchGetTooManyRequests) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *PersonalData) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *PersonalData) encodeFields(e *jx.Encoder) { + { + e.FieldStart("id") + s.ID.Encode(e) + } + { + e.FieldStart("type") + s.Type.Encode(e) + } + { + e.FieldStart("status") + s.Status.Encode(e) + } + { + if s.CancellationDetails.Set { + e.FieldStart("cancellation_details") + s.CancellationDetails.Encode(e) + } + } + { + e.FieldStart("created_at") + json.EncodeDateTime(e, s.CreatedAt) + } + { + if s.ExpiresAt.Set { + e.FieldStart("expires_at") + s.ExpiresAt.Encode(e, json.EncodeDateTime) + } + } + { + if s.Metadata.Set { + e.FieldStart("metadata") + s.Metadata.Encode(e) + } + } +} + +var jsonFieldsNameOfPersonalData = [7]string{ + 0: "id", + 1: "type", + 2: "status", + 3: "cancellation_details", + 4: "created_at", + 5: "expires_at", + 6: "metadata", +} + +// Decode decodes PersonalData from json. +func (s *PersonalData) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PersonalData to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "id": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + if err := s.ID.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"id\"") + } + case "type": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + if err := s.Type.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"type\"") + } + case "status": + requiredBitSet[0] |= 1 << 2 + if err := func() error { + if err := s.Status.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"status\"") + } + case "cancellation_details": + if err := func() error { + s.CancellationDetails.Reset() + if err := s.CancellationDetails.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"cancellation_details\"") + } + case "created_at": + requiredBitSet[0] |= 1 << 4 + if err := func() error { + v, err := json.DecodeDateTime(d) + s.CreatedAt = v + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"created_at\"") + } + case "expires_at": + if err := func() error { + s.ExpiresAt.Reset() + if err := s.ExpiresAt.Decode(d, json.DecodeDateTime); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"expires_at\"") + } + case "metadata": + if err := func() error { + s.Metadata.Reset() + if err := s.Metadata.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"metadata\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode PersonalData") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00010111, + } { + 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(jsonFieldsNameOfPersonalData) { + name = jsonFieldsNameOfPersonalData[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 *PersonalData) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PersonalData) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *PersonalDataCancellationDetails) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *PersonalDataCancellationDetails) encodeFields(e *jx.Encoder) { + { + e.FieldStart("party") + s.Party.Encode(e) + } + { + e.FieldStart("reason") + s.Reason.Encode(e) + } +} + +var jsonFieldsNameOfPersonalDataCancellationDetails = [2]string{ + 0: "party", + 1: "reason", +} + +// Decode decodes PersonalDataCancellationDetails from json. +func (s *PersonalDataCancellationDetails) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PersonalDataCancellationDetails to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "party": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + if err := s.Party.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"party\"") + } + case "reason": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + if err := s.Reason.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"reason\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode PersonalDataCancellationDetails") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000011, + } { + 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(jsonFieldsNameOfPersonalDataCancellationDetails) { + name = jsonFieldsNameOfPersonalDataCancellationDetails[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 *PersonalDataCancellationDetails) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PersonalDataCancellationDetails) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PersonalDataCancellationDetailsParty as json. +func (s PersonalDataCancellationDetailsParty) Encode(e *jx.Encoder) { + e.Str(string(s)) +} + +// Decode decodes PersonalDataCancellationDetailsParty from json. +func (s *PersonalDataCancellationDetailsParty) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PersonalDataCancellationDetailsParty to nil") + } + v, err := d.StrBytes() + if err != nil { + return err + } + // Try to use constant string. + switch PersonalDataCancellationDetailsParty(v) { + case PersonalDataCancellationDetailsPartyYooMoney: + *s = PersonalDataCancellationDetailsPartyYooMoney + default: + *s = PersonalDataCancellationDetailsParty(v) + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s PersonalDataCancellationDetailsParty) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PersonalDataCancellationDetailsParty) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PersonalDataCancellationDetailsReason as json. +func (s PersonalDataCancellationDetailsReason) Encode(e *jx.Encoder) { + e.Str(string(s)) +} + +// Decode decodes PersonalDataCancellationDetailsReason from json. +func (s *PersonalDataCancellationDetailsReason) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PersonalDataCancellationDetailsReason to nil") + } + v, err := d.StrBytes() + if err != nil { + return err + } + // Try to use constant string. + switch PersonalDataCancellationDetailsReason(v) { + case PersonalDataCancellationDetailsReasonExpiredByTimeout: + *s = PersonalDataCancellationDetailsReasonExpiredByTimeout + default: + *s = PersonalDataCancellationDetailsReason(v) + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s PersonalDataCancellationDetailsReason) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PersonalDataCancellationDetailsReason) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PersonalDataId as json. +func (s PersonalDataId) Encode(e *jx.Encoder) { + unwrapped := string(s) + + e.Str(unwrapped) +} + +// Decode decodes PersonalDataId from json. +func (s *PersonalDataId) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PersonalDataId to nil") + } + var unwrapped string + if err := func() error { + v, err := d.Str() + unwrapped = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "alias") + } + *s = PersonalDataId(unwrapped) + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s PersonalDataId) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PersonalDataId) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PersonalDataPersonalDataIDGetInternalServerError as json. +func (s *PersonalDataPersonalDataIDGetInternalServerError) Encode(e *jx.Encoder) { + unwrapped := (*TooManyRequests)(s) + + unwrapped.Encode(e) +} + +// Decode decodes PersonalDataPersonalDataIDGetInternalServerError from json. +func (s *PersonalDataPersonalDataIDGetInternalServerError) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PersonalDataPersonalDataIDGetInternalServerError to nil") + } + var unwrapped TooManyRequests + if err := func() error { + if err := unwrapped.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "alias") + } + *s = PersonalDataPersonalDataIDGetInternalServerError(unwrapped) + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s *PersonalDataPersonalDataIDGetInternalServerError) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PersonalDataPersonalDataIDGetInternalServerError) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PersonalDataPersonalDataIDGetTooManyRequests as json. +func (s *PersonalDataPersonalDataIDGetTooManyRequests) Encode(e *jx.Encoder) { + unwrapped := (*TooManyRequests)(s) + + unwrapped.Encode(e) +} + +// Decode decodes PersonalDataPersonalDataIDGetTooManyRequests from json. +func (s *PersonalDataPersonalDataIDGetTooManyRequests) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PersonalDataPersonalDataIDGetTooManyRequests to nil") + } + var unwrapped TooManyRequests + if err := func() error { + if err := unwrapped.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "alias") + } + *s = PersonalDataPersonalDataIDGetTooManyRequests(unwrapped) + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s *PersonalDataPersonalDataIDGetTooManyRequests) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PersonalDataPersonalDataIDGetTooManyRequests) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PersonalDataPostInternalServerError as json. +func (s *PersonalDataPostInternalServerError) Encode(e *jx.Encoder) { + unwrapped := (*TooManyRequests)(s) + + unwrapped.Encode(e) +} + +// Decode decodes PersonalDataPostInternalServerError from json. +func (s *PersonalDataPostInternalServerError) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PersonalDataPostInternalServerError to nil") + } + var unwrapped TooManyRequests + if err := func() error { + if err := unwrapped.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "alias") + } + *s = PersonalDataPostInternalServerError(unwrapped) + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s *PersonalDataPostInternalServerError) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PersonalDataPostInternalServerError) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PersonalDataPostReq as json. +func (s PersonalDataPostReq) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +func (s PersonalDataPostReq) encodeFields(e *jx.Encoder) { + switch s.Type { + case SbpPayoutRecipientPersonalDataRequestPersonalDataPostReq: + e.FieldStart("type") + e.Str("sbp_payout_recipient") + { + s := s.SbpPayoutRecipientPersonalDataRequest + { + if s.Metadata.Set { + e.FieldStart("metadata") + s.Metadata.Encode(e) + } + } + { + e.FieldStart("last_name") + s.LastName.Encode(e) + } + { + e.FieldStart("first_name") + s.FirstName.Encode(e) + } + { + if s.MiddleName.Set { + e.FieldStart("middle_name") + s.MiddleName.Encode(e) + } + } + } + case PayoutStatementRecipientPersonalDataRequestPersonalDataPostReq: + e.FieldStart("type") + e.Str("payout_statement_recipient") + { + s := s.PayoutStatementRecipientPersonalDataRequest + { + if s.Metadata.Set { + e.FieldStart("metadata") + s.Metadata.Encode(e) + } + } + { + e.FieldStart("last_name") + s.LastName.Encode(e) + } + { + e.FieldStart("first_name") + s.FirstName.Encode(e) + } + { + if s.MiddleName.Set { + e.FieldStart("middle_name") + s.MiddleName.Encode(e) + } + } + { + e.FieldStart("birthdate") + json.EncodeDate(e, s.Birthdate) + } + } + } +} + +// Decode decodes PersonalDataPostReq from json. +func (s *PersonalDataPostReq) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PersonalDataPostReq to nil") + } + // Sum type discriminator. + if typ := d.Next(); typ != jx.Object { + return errors.Errorf("unexpected json type %q", typ) + } + + var found bool + if err := d.Capture(func(d *jx.Decoder) error { + return d.ObjBytes(func(d *jx.Decoder, key []byte) error { + if found { + return d.Skip() + } + switch string(key) { + case "type": + typ, err := d.Str() + if err != nil { + return err + } + switch typ { + case "sbp_payout_recipient": + s.Type = SbpPayoutRecipientPersonalDataRequestPersonalDataPostReq + found = true + case "payout_statement_recipient": + s.Type = PayoutStatementRecipientPersonalDataRequestPersonalDataPostReq + found = true + default: + return errors.Errorf("unknown type %s", typ) + } + return nil + } + return d.Skip() + }) + }); err != nil { + return errors.Wrap(err, "capture") + } + if !found { + return errors.New("unable to detect sum type variant") + } + switch s.Type { + case SbpPayoutRecipientPersonalDataRequestPersonalDataPostReq: + if err := s.SbpPayoutRecipientPersonalDataRequest.Decode(d); err != nil { + return err + } + case PayoutStatementRecipientPersonalDataRequestPersonalDataPostReq: + if err := s.PayoutStatementRecipientPersonalDataRequest.Decode(d); err != nil { + return err + } + default: + return errors.Errorf("inferred invalid type: %s", s.Type) + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s PersonalDataPostReq) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PersonalDataPostReq) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PersonalDataPostTooManyRequests as json. +func (s *PersonalDataPostTooManyRequests) Encode(e *jx.Encoder) { + unwrapped := (*TooManyRequests)(s) + + unwrapped.Encode(e) +} + +// Decode decodes PersonalDataPostTooManyRequests from json. +func (s *PersonalDataPostTooManyRequests) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PersonalDataPostTooManyRequests to nil") + } + var unwrapped TooManyRequests + if err := func() error { + if err := unwrapped.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "alias") + } + *s = PersonalDataPostTooManyRequests(unwrapped) + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s *PersonalDataPostTooManyRequests) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PersonalDataPostTooManyRequests) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PersonalDataStatus as json. +func (s PersonalDataStatus) Encode(e *jx.Encoder) { + e.Str(string(s)) +} + +// Decode decodes PersonalDataStatus from json. +func (s *PersonalDataStatus) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PersonalDataStatus to nil") + } + v, err := d.StrBytes() + if err != nil { + return err + } + // Try to use constant string. + switch PersonalDataStatus(v) { + case PersonalDataStatusWaitingForOperation: + *s = PersonalDataStatusWaitingForOperation + case PersonalDataStatusActive: + *s = PersonalDataStatusActive + case PersonalDataStatusCanceled: + *s = PersonalDataStatusCanceled + default: + *s = PersonalDataStatus(v) + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s PersonalDataStatus) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PersonalDataStatus) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PersonalDataType as json. +func (s PersonalDataType) Encode(e *jx.Encoder) { + e.Str(string(s)) +} + +// Decode decodes PersonalDataType from json. +func (s *PersonalDataType) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PersonalDataType to nil") + } + v, err := d.StrBytes() + if err != nil { + return err + } + // Try to use constant string. + switch PersonalDataType(v) { + case PersonalDataTypePayoutStatementRecipient: + *s = PersonalDataTypePayoutStatementRecipient + case PersonalDataTypeSbpPayoutRecipient: + *s = PersonalDataTypeSbpPayoutRecipient + default: + *s = PersonalDataType(v) + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s PersonalDataType) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PersonalDataType) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes PostReceiptData as json. +func (s PostReceiptData) Encode(e *jx.Encoder) { + unwrapped := jx.Raw(s) + + if len(unwrapped) != 0 { + e.Raw(unwrapped) + } +} + +// Decode decodes PostReceiptData from json. +func (s *PostReceiptData) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode PostReceiptData to nil") + } + var unwrapped jx.Raw + if err := func() error { + v, err := d.RawAppend(nil) + unwrapped = jx.Raw(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "alias") + } + *s = PostReceiptData(unwrapped) + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s PostReceiptData) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *PostReceiptData) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *Receipt) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *Receipt) encodeFields(e *jx.Encoder) { + { + e.FieldStart("id") + s.ID.Encode(e) + } + { + e.FieldStart("type") + s.Type.Encode(e) + } + { + if s.PaymentID.Set { + e.FieldStart("payment_id") + s.PaymentID.Encode(e) + } + } + { + if s.RefundID.Set { + e.FieldStart("refund_id") + s.RefundID.Encode(e) + } + } + { + e.FieldStart("status") + s.Status.Encode(e) + } + { + if s.FiscalDocumentNumber.Set { + e.FieldStart("fiscal_document_number") + s.FiscalDocumentNumber.Encode(e) + } + } + { + if s.FiscalStorageNumber.Set { + e.FieldStart("fiscal_storage_number") + s.FiscalStorageNumber.Encode(e) + } + } + { + if s.FiscalAttribute.Set { + e.FieldStart("fiscal_attribute") + s.FiscalAttribute.Encode(e) + } + } + { + if s.RegisteredAt.Set { + e.FieldStart("registered_at") + s.RegisteredAt.Encode(e, json.EncodeDateTime) + } + } + { + if s.FiscalProviderID.Set { + e.FieldStart("fiscal_provider_id") + s.FiscalProviderID.Encode(e) + } + } + { + e.FieldStart("items") + e.ArrStart() + for _, elem := range s.Items { + elem.Encode(e) + } + e.ArrEnd() + } + { + if s.Internet.Set { + e.FieldStart("internet") + s.Internet.Encode(e) + } + } + { + if s.Settlements != nil { + e.FieldStart("settlements") + e.ArrStart() + for _, elem := range s.Settlements { + elem.Encode(e) + } + e.ArrEnd() + } + } + { + if s.OnBehalfOf.Set { + e.FieldStart("on_behalf_of") + s.OnBehalfOf.Encode(e) + } + } + { + if s.TaxSystemCode.Set { + e.FieldStart("tax_system_code") + s.TaxSystemCode.Encode(e) + } + } + { + if s.Timezone.Set { + e.FieldStart("timezone") + s.Timezone.Encode(e) + } + } + { + if s.ReceiptIndustryDetails != nil { + e.FieldStart("receipt_industry_details") + e.ArrStart() + for _, elem := range s.ReceiptIndustryDetails { + elem.Encode(e) + } + e.ArrEnd() + } + } + { + if s.ReceiptOperationalDetails.Set { + e.FieldStart("receipt_operational_details") + s.ReceiptOperationalDetails.Encode(e) + } + } +} + +var jsonFieldsNameOfReceipt = [18]string{ + 0: "id", + 1: "type", + 2: "payment_id", + 3: "refund_id", + 4: "status", + 5: "fiscal_document_number", + 6: "fiscal_storage_number", + 7: "fiscal_attribute", + 8: "registered_at", + 9: "fiscal_provider_id", + 10: "items", + 11: "internet", + 12: "settlements", + 13: "on_behalf_of", + 14: "tax_system_code", + 15: "timezone", + 16: "receipt_industry_details", + 17: "receipt_operational_details", +} + +// Decode decodes Receipt from json. +func (s *Receipt) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode Receipt to nil") + } + var requiredBitSet [3]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "id": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + if err := s.ID.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"id\"") + } + case "type": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + if err := s.Type.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"type\"") + } + case "payment_id": + if err := func() error { + s.PaymentID.Reset() + if err := s.PaymentID.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"payment_id\"") + } + case "refund_id": + if err := func() error { + s.RefundID.Reset() + if err := s.RefundID.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"refund_id\"") + } + case "status": + requiredBitSet[0] |= 1 << 4 + if err := func() error { + if err := s.Status.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"status\"") + } + case "fiscal_document_number": + if err := func() error { + s.FiscalDocumentNumber.Reset() + if err := s.FiscalDocumentNumber.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"fiscal_document_number\"") + } + case "fiscal_storage_number": + if err := func() error { + s.FiscalStorageNumber.Reset() + if err := s.FiscalStorageNumber.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"fiscal_storage_number\"") + } + case "fiscal_attribute": + if err := func() error { + s.FiscalAttribute.Reset() + if err := s.FiscalAttribute.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"fiscal_attribute\"") + } + case "registered_at": + if err := func() error { + s.RegisteredAt.Reset() + if err := s.RegisteredAt.Decode(d, json.DecodeDateTime); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"registered_at\"") + } + case "fiscal_provider_id": + if err := func() error { + s.FiscalProviderID.Reset() + if err := s.FiscalProviderID.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"fiscal_provider_id\"") + } + case "items": + requiredBitSet[1] |= 1 << 2 + if err := func() error { + s.Items = make([]ReceiptItem, 0) + if err := d.Arr(func(d *jx.Decoder) error { + var elem ReceiptItem + if err := elem.Decode(d); err != nil { + return err + } + s.Items = append(s.Items, elem) + return nil + }); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"items\"") + } + case "internet": + if err := func() error { + s.Internet.Reset() + if err := s.Internet.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"internet\"") + } + case "settlements": + if err := func() error { + s.Settlements = make([]Settlement, 0) + if err := d.Arr(func(d *jx.Decoder) error { + var elem Settlement + if err := elem.Decode(d); err != nil { + return err + } + s.Settlements = append(s.Settlements, elem) + return nil + }); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"settlements\"") + } + case "on_behalf_of": + if err := func() error { + s.OnBehalfOf.Reset() + if err := s.OnBehalfOf.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"on_behalf_of\"") + } + case "tax_system_code": + if err := func() error { + s.TaxSystemCode.Reset() + if err := s.TaxSystemCode.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"tax_system_code\"") + } + case "timezone": + if err := func() error { + s.Timezone.Reset() + if err := s.Timezone.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"timezone\"") + } + case "receipt_industry_details": + if err := func() error { + s.ReceiptIndustryDetails = make([]IndustryDetails, 0) + if err := d.Arr(func(d *jx.Decoder) error { + var elem IndustryDetails + if err := elem.Decode(d); err != nil { + return err + } + s.ReceiptIndustryDetails = append(s.ReceiptIndustryDetails, elem) + return nil + }); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"receipt_industry_details\"") + } + case "receipt_operational_details": + if err := func() error { + s.ReceiptOperationalDetails.Reset() + if err := s.ReceiptOperationalDetails.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"receipt_operational_details\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode Receipt") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [3]uint8{ + 0b00010011, + 0b00000100, + 0b00000000, + } { + 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(jsonFieldsNameOfReceipt) { + name = jsonFieldsNameOfReceipt[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 *Receipt) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *Receipt) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *ReceiptData) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *ReceiptData) encodeFields(e *jx.Encoder) { + { + if s.Customer.Set { + e.FieldStart("customer") + s.Customer.Encode(e) + } + } + { + e.FieldStart("items") + e.ArrStart() + for _, elem := range s.Items { + elem.Encode(e) + } + e.ArrEnd() + } + { + if s.Internet.Set { + e.FieldStart("internet") + s.Internet.Encode(e) + } + } + { + if s.TaxSystemCode.Set { + e.FieldStart("tax_system_code") + s.TaxSystemCode.Encode(e) + } + } + { + if s.Timezone.Set { + e.FieldStart("timezone") + s.Timezone.Encode(e) + } + } + { + if s.ReceiptIndustryDetails != nil { + e.FieldStart("receipt_industry_details") + e.ArrStart() + for _, elem := range s.ReceiptIndustryDetails { + elem.Encode(e) + } + e.ArrEnd() + } + } + { + if s.ReceiptOperationalDetails.Set { + e.FieldStart("receipt_operational_details") + s.ReceiptOperationalDetails.Encode(e) + } + } +} + +var jsonFieldsNameOfReceiptData = [7]string{ + 0: "customer", + 1: "items", + 2: "internet", + 3: "tax_system_code", + 4: "timezone", + 5: "receipt_industry_details", + 6: "receipt_operational_details", +} + +// Decode decodes ReceiptData from json. +func (s *ReceiptData) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode ReceiptData to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "customer": + if err := func() error { + s.Customer.Reset() + if err := s.Customer.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"customer\"") + } + case "items": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + s.Items = make([]ReceiptDataItem, 0) + if err := d.Arr(func(d *jx.Decoder) error { + var elem ReceiptDataItem + if err := elem.Decode(d); err != nil { + return err + } + s.Items = append(s.Items, elem) + return nil + }); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"items\"") + } + case "internet": + if err := func() error { + s.Internet.Reset() + if err := s.Internet.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"internet\"") + } + case "tax_system_code": + if err := func() error { + s.TaxSystemCode.Reset() + if err := s.TaxSystemCode.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"tax_system_code\"") + } + case "timezone": + if err := func() error { + s.Timezone.Reset() + if err := s.Timezone.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"timezone\"") + } + case "receipt_industry_details": + if err := func() error { + s.ReceiptIndustryDetails = make([]IndustryDetails, 0) + if err := d.Arr(func(d *jx.Decoder) error { + var elem IndustryDetails + if err := elem.Decode(d); err != nil { + return err + } + s.ReceiptIndustryDetails = append(s.ReceiptIndustryDetails, elem) + return nil + }); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"receipt_industry_details\"") + } + case "receipt_operational_details": + if err := func() error { + s.ReceiptOperationalDetails.Reset() + if err := s.ReceiptOperationalDetails.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"receipt_operational_details\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode ReceiptData") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000010, + } { + 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(jsonFieldsNameOfReceiptData) { + name = jsonFieldsNameOfReceiptData[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 *ReceiptData) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *ReceiptData) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *ReceiptDataCustomer) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *ReceiptDataCustomer) encodeFields(e *jx.Encoder) { + { + if s.FullName.Set { + e.FieldStart("full_name") + s.FullName.Encode(e) + } + } + { + if s.Inn.Set { + e.FieldStart("inn") + s.Inn.Encode(e) + } + } + { + if s.Email.Set { + e.FieldStart("email") + s.Email.Encode(e) + } + } + { + if s.Phone.Set { + e.FieldStart("phone") + s.Phone.Encode(e) + } + } +} + +var jsonFieldsNameOfReceiptDataCustomer = [4]string{ + 0: "full_name", + 1: "inn", + 2: "email", + 3: "phone", +} + +// Decode decodes ReceiptDataCustomer from json. +func (s *ReceiptDataCustomer) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode ReceiptDataCustomer to nil") + } + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "full_name": + if err := func() error { + s.FullName.Reset() + if err := s.FullName.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"full_name\"") + } + case "inn": + if err := func() error { + s.Inn.Reset() + if err := s.Inn.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"inn\"") + } + case "email": + if err := func() error { + s.Email.Reset() + if err := s.Email.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"email\"") + } + case "phone": + if err := func() error { + s.Phone.Reset() + if err := s.Phone.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"phone\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode ReceiptDataCustomer") + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s *ReceiptDataCustomer) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *ReceiptDataCustomer) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *ReceiptDataItem) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *ReceiptDataItem) encodeFields(e *jx.Encoder) { + { + e.FieldStart("description") + s.Description.Encode(e) + } + { + e.FieldStart("amount") + s.Amount.Encode(e) + } + { + e.FieldStart("vat_code") + s.VatCode.Encode(e) + } + { + e.FieldStart("quantity") + s.Quantity.Encode(e) + } + { + if s.Measure.Set { + e.FieldStart("measure") + s.Measure.Encode(e) + } + } + { + if s.MarkQuantity.Set { + e.FieldStart("mark_quantity") + s.MarkQuantity.Encode(e) + } + } + { + if s.PaymentSubject.Set { + e.FieldStart("payment_subject") + s.PaymentSubject.Encode(e) + } + } + { + if s.PaymentMode.Set { + e.FieldStart("payment_mode") + s.PaymentMode.Encode(e) + } + } + { + if s.CountryOfOriginCode.Set { + e.FieldStart("country_of_origin_code") + s.CountryOfOriginCode.Encode(e) + } + } + { + if s.CustomsDeclarationNumber.Set { + e.FieldStart("customs_declaration_number") + s.CustomsDeclarationNumber.Encode(e) + } + } + { + if s.Excise.Set { + e.FieldStart("excise") + s.Excise.Encode(e) + } + } + { + if s.ProductCode.Set { + e.FieldStart("product_code") + s.ProductCode.Encode(e) + } + } + { + if s.PlannedStatus.Set { + e.FieldStart("planned_status") + s.PlannedStatus.Encode(e) + } + } + { + if s.MarkCodeInfo.Set { + e.FieldStart("mark_code_info") + s.MarkCodeInfo.Encode(e) + } + } + { + if s.MarkMode.Set { + e.FieldStart("mark_mode") + s.MarkMode.Encode(e) + } + } + { + if s.PaymentSubjectIndustryDetails != nil { + e.FieldStart("payment_subject_industry_details") + s.PaymentSubjectIndustryDetails.Encode(e) + } + } +} + +var jsonFieldsNameOfReceiptDataItem = [16]string{ + 0: "description", + 1: "amount", + 2: "vat_code", + 3: "quantity", + 4: "measure", + 5: "mark_quantity", + 6: "payment_subject", + 7: "payment_mode", + 8: "country_of_origin_code", + 9: "customs_declaration_number", + 10: "excise", + 11: "product_code", + 12: "planned_status", + 13: "mark_code_info", + 14: "mark_mode", + 15: "payment_subject_industry_details", +} + +// Decode decodes ReceiptDataItem from json. +func (s *ReceiptDataItem) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode ReceiptDataItem to nil") + } + var requiredBitSet [2]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "description": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + if err := s.Description.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"description\"") + } + case "amount": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + if err := s.Amount.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"amount\"") + } + case "vat_code": + requiredBitSet[0] |= 1 << 2 + if err := func() error { + if err := s.VatCode.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"vat_code\"") + } + case "quantity": + requiredBitSet[0] |= 1 << 3 + if err := func() error { + if err := s.Quantity.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"quantity\"") + } + case "measure": + if err := func() error { + s.Measure.Reset() + if err := s.Measure.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"measure\"") + } + case "mark_quantity": + if err := func() error { + s.MarkQuantity.Reset() + if err := s.MarkQuantity.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"mark_quantity\"") + } + case "payment_subject": + if err := func() error { + s.PaymentSubject.Reset() + if err := s.PaymentSubject.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"payment_subject\"") + } + case "payment_mode": + if err := func() error { + s.PaymentMode.Reset() + if err := s.PaymentMode.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"payment_mode\"") + } + case "country_of_origin_code": + if err := func() error { + s.CountryOfOriginCode.Reset() + if err := s.CountryOfOriginCode.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"country_of_origin_code\"") + } + case "customs_declaration_number": + if err := func() error { + s.CustomsDeclarationNumber.Reset() + if err := s.CustomsDeclarationNumber.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"customs_declaration_number\"") + } + case "excise": + if err := func() error { + s.Excise.Reset() + if err := s.Excise.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"excise\"") + } + case "product_code": + if err := func() error { + s.ProductCode.Reset() + if err := s.ProductCode.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"product_code\"") + } + case "planned_status": + if err := func() error { + s.PlannedStatus.Reset() + if err := s.PlannedStatus.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"planned_status\"") + } + case "mark_code_info": + if err := func() error { + s.MarkCodeInfo.Reset() + if err := s.MarkCodeInfo.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"mark_code_info\"") + } + case "mark_mode": + if err := func() error { + s.MarkMode.Reset() + if err := s.MarkMode.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"mark_mode\"") + } + case "payment_subject_industry_details": + if err := func() error { + if err := s.PaymentSubjectIndustryDetails.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"payment_subject_industry_details\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode ReceiptDataItem") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [2]uint8{ + 0b00001111, + 0b00000000, + } { + 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(jsonFieldsNameOfReceiptDataItem) { + name = jsonFieldsNameOfReceiptDataItem[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 *ReceiptDataItem) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *ReceiptDataItem) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *ReceiptDataItemAmount) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *ReceiptDataItemAmount) encodeFields(e *jx.Encoder) { + { + e.FieldStart("value") + e.Str(s.Value) + } + { + e.FieldStart("currency") + s.Currency.Encode(e) + } +} + +var jsonFieldsNameOfReceiptDataItemAmount = [2]string{ + 0: "value", + 1: "currency", +} + +// Decode decodes ReceiptDataItemAmount from json. +func (s *ReceiptDataItemAmount) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode ReceiptDataItemAmount to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "value": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + v, err := d.Str() + s.Value = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"value\"") + } + case "currency": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + if err := s.Currency.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"currency\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode ReceiptDataItemAmount") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000011, + } { + 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(jsonFieldsNameOfReceiptDataItemAmount) { + name = jsonFieldsNameOfReceiptDataItemAmount[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 *ReceiptDataItemAmount) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *ReceiptDataItemAmount) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *ReceiptDataReceiptOperationalDetails) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *ReceiptDataReceiptOperationalDetails) encodeFields(e *jx.Encoder) { + { + e.FieldStart("operation_id") + e.Int(s.OperationID) + } + { + e.FieldStart("value") + e.Str(s.Value) + } + { + e.FieldStart("created_at") + json.EncodeDateTime(e, s.CreatedAt) + } +} + +var jsonFieldsNameOfReceiptDataReceiptOperationalDetails = [3]string{ + 0: "operation_id", + 1: "value", + 2: "created_at", +} + +// Decode decodes ReceiptDataReceiptOperationalDetails from json. +func (s *ReceiptDataReceiptOperationalDetails) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode ReceiptDataReceiptOperationalDetails to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "operation_id": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + v, err := d.Int() + s.OperationID = int(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"operation_id\"") + } + case "value": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + v, err := d.Str() + s.Value = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"value\"") + } + case "created_at": + requiredBitSet[0] |= 1 << 2 + if err := func() error { + v, err := json.DecodeDateTime(d) + s.CreatedAt = v + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"created_at\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode ReceiptDataReceiptOperationalDetails") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000111, + } { + 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(jsonFieldsNameOfReceiptDataReceiptOperationalDetails) { + name = jsonFieldsNameOfReceiptDataReceiptOperationalDetails[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 *ReceiptDataReceiptOperationalDetails) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *ReceiptDataReceiptOperationalDetails) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes ReceiptId as json. +func (s ReceiptId) Encode(e *jx.Encoder) { + unwrapped := string(s) + + e.Str(unwrapped) +} + +// Decode decodes ReceiptId from json. +func (s *ReceiptId) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode ReceiptId to nil") + } + var unwrapped string + if err := func() error { + v, err := d.Str() + unwrapped = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "alias") + } + *s = ReceiptId(unwrapped) + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s ReceiptId) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *ReceiptId) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *ReceiptItem) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *ReceiptItem) encodeFields(e *jx.Encoder) { + { + e.FieldStart("description") + e.Str(s.Description) + } + { + e.FieldStart("quantity") + e.Float64(s.Quantity) + } + { + e.FieldStart("amount") + s.Amount.Encode(e) + } + { + e.FieldStart("vat_code") + e.Int32(s.VatCode) + } + { + if s.PaymentSubject.Set { + e.FieldStart("payment_subject") + s.PaymentSubject.Encode(e) + } + } + { + if s.PaymentMode.Set { + e.FieldStart("payment_mode") + s.PaymentMode.Encode(e) + } + } + { + if s.CountryOfOriginCode.Set { + e.FieldStart("country_of_origin_code") + s.CountryOfOriginCode.Encode(e) + } + } + { + if s.CustomsDeclarationNumber.Set { + e.FieldStart("customs_declaration_number") + s.CustomsDeclarationNumber.Encode(e) + } + } + { + if s.Excise.Set { + e.FieldStart("excise") + s.Excise.Encode(e) + } + } + { + if s.Supplier.Set { + e.FieldStart("supplier") + s.Supplier.Encode(e) + } + } + { + if s.AgentType.Set { + e.FieldStart("agent_type") + s.AgentType.Encode(e) + } + } + { + if s.MarkCodeInfo.Set { + e.FieldStart("mark_code_info") + s.MarkCodeInfo.Encode(e) + } + } + { + if s.Measure.Set { + e.FieldStart("measure") + s.Measure.Encode(e) + } + } + { + if s.PaymentSubjectIndustryDetails != nil { + e.FieldStart("payment_subject_industry_details") + e.ArrStart() + for _, elem := range s.PaymentSubjectIndustryDetails { + elem.Encode(e) + } + e.ArrEnd() + } + } + { + if s.ProductCode.Set { + e.FieldStart("product_code") + s.ProductCode.Encode(e) + } + } + { + if s.PlannedStatus.Set { + e.FieldStart("planned_status") + s.PlannedStatus.Encode(e) + } + } + { + if s.MarkMode.Set { + e.FieldStart("mark_mode") + s.MarkMode.Encode(e) + } + } + { + if s.MarkQuantity.Set { + e.FieldStart("mark_quantity") + s.MarkQuantity.Encode(e) + } + } +} + +var jsonFieldsNameOfReceiptItem = [18]string{ + 0: "description", + 1: "quantity", + 2: "amount", + 3: "vat_code", + 4: "payment_subject", + 5: "payment_mode", + 6: "country_of_origin_code", + 7: "customs_declaration_number", + 8: "excise", + 9: "supplier", + 10: "agent_type", + 11: "mark_code_info", + 12: "measure", + 13: "payment_subject_industry_details", + 14: "product_code", + 15: "planned_status", + 16: "mark_mode", + 17: "mark_quantity", +} + +// Decode decodes ReceiptItem from json. +func (s *ReceiptItem) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode ReceiptItem to nil") + } + var requiredBitSet [3]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "description": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + v, err := d.Str() + s.Description = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"description\"") + } + case "quantity": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + v, err := d.Float64() + s.Quantity = float64(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"quantity\"") + } + case "amount": + requiredBitSet[0] |= 1 << 2 + if err := func() error { + if err := s.Amount.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"amount\"") + } + case "vat_code": + requiredBitSet[0] |= 1 << 3 + if err := func() error { + v, err := d.Int32() + s.VatCode = int32(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"vat_code\"") + } + case "payment_subject": + if err := func() error { + s.PaymentSubject.Reset() + if err := s.PaymentSubject.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"payment_subject\"") + } + case "payment_mode": + if err := func() error { + s.PaymentMode.Reset() + if err := s.PaymentMode.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"payment_mode\"") + } + case "country_of_origin_code": + if err := func() error { + s.CountryOfOriginCode.Reset() + if err := s.CountryOfOriginCode.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"country_of_origin_code\"") + } + case "customs_declaration_number": + if err := func() error { + s.CustomsDeclarationNumber.Reset() + if err := s.CustomsDeclarationNumber.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"customs_declaration_number\"") + } + case "excise": + if err := func() error { + s.Excise.Reset() + if err := s.Excise.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"excise\"") + } + case "supplier": + if err := func() error { + s.Supplier.Reset() + if err := s.Supplier.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"supplier\"") + } + case "agent_type": + if err := func() error { + s.AgentType.Reset() + if err := s.AgentType.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"agent_type\"") + } + case "mark_code_info": + if err := func() error { + s.MarkCodeInfo.Reset() + if err := s.MarkCodeInfo.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"mark_code_info\"") + } + case "measure": + if err := func() error { + s.Measure.Reset() + if err := s.Measure.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"measure\"") + } + case "payment_subject_industry_details": + if err := func() error { + s.PaymentSubjectIndustryDetails = make([]IndustryDetails, 0) + if err := d.Arr(func(d *jx.Decoder) error { + var elem IndustryDetails + if err := elem.Decode(d); err != nil { + return err + } + s.PaymentSubjectIndustryDetails = append(s.PaymentSubjectIndustryDetails, elem) + return nil + }); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"payment_subject_industry_details\"") + } + case "product_code": + if err := func() error { + s.ProductCode.Reset() + if err := s.ProductCode.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"product_code\"") + } + case "planned_status": + if err := func() error { + s.PlannedStatus.Reset() + if err := s.PlannedStatus.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"planned_status\"") + } + case "mark_mode": + if err := func() error { + s.MarkMode.Reset() + if err := s.MarkMode.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"mark_mode\"") + } + case "mark_quantity": + if err := func() error { + s.MarkQuantity.Reset() + if err := s.MarkQuantity.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"mark_quantity\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode ReceiptItem") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [3]uint8{ + 0b00001111, + 0b00000000, + 0b00000000, + } { + 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(jsonFieldsNameOfReceiptItem) { + name = jsonFieldsNameOfReceiptItem[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 *ReceiptItem) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *ReceiptItem) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes ReceiptItemAgentType as json. +func (s ReceiptItemAgentType) Encode(e *jx.Encoder) { + e.Str(string(s)) +} + +// Decode decodes ReceiptItemAgentType from json. +func (s *ReceiptItemAgentType) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode ReceiptItemAgentType to nil") + } + v, err := d.StrBytes() + if err != nil { + return err + } + // Try to use constant string. + switch ReceiptItemAgentType(v) { + case ReceiptItemAgentTypeBankingPaymentAgent: + *s = ReceiptItemAgentTypeBankingPaymentAgent + case ReceiptItemAgentTypeBankingPaymentSubagent: + *s = ReceiptItemAgentTypeBankingPaymentSubagent + case ReceiptItemAgentTypePaymentAgent: + *s = ReceiptItemAgentTypePaymentAgent + case ReceiptItemAgentTypePaymentSubagent: + *s = ReceiptItemAgentTypePaymentSubagent + case ReceiptItemAgentTypeAttorney: + *s = ReceiptItemAgentTypeAttorney + case ReceiptItemAgentTypeCommissioner: + *s = ReceiptItemAgentTypeCommissioner + case ReceiptItemAgentTypeAgent: + *s = ReceiptItemAgentTypeAgent + default: + *s = ReceiptItemAgentType(v) + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s ReceiptItemAgentType) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *ReceiptItemAgentType) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *ReceiptItemAmount) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *ReceiptItemAmount) encodeFields(e *jx.Encoder) { + { + e.FieldStart("value") + e.Str(s.Value) + } + { + e.FieldStart("currency") + s.Currency.Encode(e) + } +} + +var jsonFieldsNameOfReceiptItemAmount = [2]string{ + 0: "value", + 1: "currency", +} + +// Decode decodes ReceiptItemAmount from json. +func (s *ReceiptItemAmount) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode ReceiptItemAmount to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "value": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + v, err := d.Str() + s.Value = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"value\"") + } + case "currency": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + if err := s.Currency.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"currency\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode ReceiptItemAmount") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000011, + } { + 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(jsonFieldsNameOfReceiptItemAmount) { + name = jsonFieldsNameOfReceiptItemAmount[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 *ReceiptItemAmount) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *ReceiptItemAmount) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes ReceiptItemCountryOfOriginCode as json. +func (s ReceiptItemCountryOfOriginCode) Encode(e *jx.Encoder) { + unwrapped := string(s) + + e.Str(unwrapped) +} + +// Decode decodes ReceiptItemCountryOfOriginCode from json. +func (s *ReceiptItemCountryOfOriginCode) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode ReceiptItemCountryOfOriginCode to nil") + } + var unwrapped string + if err := func() error { + v, err := d.Str() + unwrapped = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "alias") + } + *s = ReceiptItemCountryOfOriginCode(unwrapped) + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s ReceiptItemCountryOfOriginCode) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *ReceiptItemCountryOfOriginCode) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes ReceiptItemCustomsDeclarationNumber as json. +func (s ReceiptItemCustomsDeclarationNumber) Encode(e *jx.Encoder) { + unwrapped := string(s) + + e.Str(unwrapped) +} + +// Decode decodes ReceiptItemCustomsDeclarationNumber from json. +func (s *ReceiptItemCustomsDeclarationNumber) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode ReceiptItemCustomsDeclarationNumber to nil") + } + var unwrapped string + if err := func() error { + v, err := d.Str() + unwrapped = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "alias") + } + *s = ReceiptItemCustomsDeclarationNumber(unwrapped) + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s ReceiptItemCustomsDeclarationNumber) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *ReceiptItemCustomsDeclarationNumber) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes ReceiptItemDescription as json. +func (s ReceiptItemDescription) Encode(e *jx.Encoder) { + unwrapped := string(s) + + e.Str(unwrapped) +} + +// Decode decodes ReceiptItemDescription from json. +func (s *ReceiptItemDescription) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode ReceiptItemDescription to nil") + } + var unwrapped string + if err := func() error { + v, err := d.Str() + unwrapped = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "alias") + } + *s = ReceiptItemDescription(unwrapped) + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s ReceiptItemDescription) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *ReceiptItemDescription) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes ReceiptItemExcise as json. +func (s ReceiptItemExcise) Encode(e *jx.Encoder) { + unwrapped := string(s) + + e.Str(unwrapped) +} + +// Decode decodes ReceiptItemExcise from json. +func (s *ReceiptItemExcise) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode ReceiptItemExcise to nil") + } + var unwrapped string + if err := func() error { + v, err := d.Str() + unwrapped = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "alias") + } + *s = ReceiptItemExcise(unwrapped) + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s ReceiptItemExcise) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *ReceiptItemExcise) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes ReceiptItemMeasure as json. +func (s ReceiptItemMeasure) Encode(e *jx.Encoder) { + e.Str(string(s)) +} + +// Decode decodes ReceiptItemMeasure from json. +func (s *ReceiptItemMeasure) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode ReceiptItemMeasure to nil") + } + v, err := d.StrBytes() + if err != nil { + return err + } + // Try to use constant string. + switch ReceiptItemMeasure(v) { + case ReceiptItemMeasurePiece: + *s = ReceiptItemMeasurePiece + case ReceiptItemMeasureGram: + *s = ReceiptItemMeasureGram + case ReceiptItemMeasureKilogram: + *s = ReceiptItemMeasureKilogram + case ReceiptItemMeasureTon: + *s = ReceiptItemMeasureTon + case ReceiptItemMeasureCentimeter: + *s = ReceiptItemMeasureCentimeter + case ReceiptItemMeasureDecimeter: + *s = ReceiptItemMeasureDecimeter + case ReceiptItemMeasureMeter: + *s = ReceiptItemMeasureMeter + case ReceiptItemMeasureSquareCentimeter: + *s = ReceiptItemMeasureSquareCentimeter + case ReceiptItemMeasureSquareDecimeter: + *s = ReceiptItemMeasureSquareDecimeter + case ReceiptItemMeasureSquareMeter: + *s = ReceiptItemMeasureSquareMeter + case ReceiptItemMeasureMilliliter: + *s = ReceiptItemMeasureMilliliter + case ReceiptItemMeasureLiter: + *s = ReceiptItemMeasureLiter + case ReceiptItemMeasureCubicMeter: + *s = ReceiptItemMeasureCubicMeter + case ReceiptItemMeasureKilowattHour: + *s = ReceiptItemMeasureKilowattHour + case ReceiptItemMeasureGigacalorie: + *s = ReceiptItemMeasureGigacalorie + case ReceiptItemMeasureDay: + *s = ReceiptItemMeasureDay + case ReceiptItemMeasureHour: + *s = ReceiptItemMeasureHour + case ReceiptItemMeasureMinute: + *s = ReceiptItemMeasureMinute + case ReceiptItemMeasureSecond: + *s = ReceiptItemMeasureSecond + case ReceiptItemMeasureKilobyte: + *s = ReceiptItemMeasureKilobyte + case ReceiptItemMeasureMegabyte: + *s = ReceiptItemMeasureMegabyte + case ReceiptItemMeasureGigabyte: + *s = ReceiptItemMeasureGigabyte + case ReceiptItemMeasureTerabyte: + *s = ReceiptItemMeasureTerabyte + case ReceiptItemMeasureAnother: + *s = ReceiptItemMeasureAnother + default: + *s = ReceiptItemMeasure(v) + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s ReceiptItemMeasure) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *ReceiptItemMeasure) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes ReceiptItemPaymentMode as json. +func (s ReceiptItemPaymentMode) Encode(e *jx.Encoder) { + e.Str(string(s)) +} + +// Decode decodes ReceiptItemPaymentMode from json. +func (s *ReceiptItemPaymentMode) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode ReceiptItemPaymentMode to nil") + } + v, err := d.StrBytes() + if err != nil { + return err + } + // Try to use constant string. + switch ReceiptItemPaymentMode(v) { + case ReceiptItemPaymentModeFullPrepayment: + *s = ReceiptItemPaymentModeFullPrepayment + case ReceiptItemPaymentModePartialPrepayment: + *s = ReceiptItemPaymentModePartialPrepayment + case ReceiptItemPaymentModeAdvance: + *s = ReceiptItemPaymentModeAdvance + case ReceiptItemPaymentModeFullPayment: + *s = ReceiptItemPaymentModeFullPayment + case ReceiptItemPaymentModePartialPayment: + *s = ReceiptItemPaymentModePartialPayment + case ReceiptItemPaymentModeCredit: + *s = ReceiptItemPaymentModeCredit + case ReceiptItemPaymentModeCreditPayment: + *s = ReceiptItemPaymentModeCreditPayment + default: + *s = ReceiptItemPaymentMode(v) + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s ReceiptItemPaymentMode) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *ReceiptItemPaymentMode) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes ReceiptItemPaymentSubject as json. +func (s ReceiptItemPaymentSubject) Encode(e *jx.Encoder) { + e.Str(string(s)) +} + +// Decode decodes ReceiptItemPaymentSubject from json. +func (s *ReceiptItemPaymentSubject) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode ReceiptItemPaymentSubject to nil") + } + v, err := d.StrBytes() + if err != nil { + return err + } + // Try to use constant string. + switch ReceiptItemPaymentSubject(v) { + case ReceiptItemPaymentSubjectCommodity: + *s = ReceiptItemPaymentSubjectCommodity + case ReceiptItemPaymentSubjectExcise: + *s = ReceiptItemPaymentSubjectExcise + case ReceiptItemPaymentSubjectJob: + *s = ReceiptItemPaymentSubjectJob + case ReceiptItemPaymentSubjectService: + *s = ReceiptItemPaymentSubjectService + case ReceiptItemPaymentSubjectGamblingBet: + *s = ReceiptItemPaymentSubjectGamblingBet + case ReceiptItemPaymentSubjectGamblingPrize: + *s = ReceiptItemPaymentSubjectGamblingPrize + case ReceiptItemPaymentSubjectLottery: + *s = ReceiptItemPaymentSubjectLottery + case ReceiptItemPaymentSubjectLotteryPrize: + *s = ReceiptItemPaymentSubjectLotteryPrize + case ReceiptItemPaymentSubjectIntellectualActivity: + *s = ReceiptItemPaymentSubjectIntellectualActivity + case ReceiptItemPaymentSubjectPayment: + *s = ReceiptItemPaymentSubjectPayment + case ReceiptItemPaymentSubjectAgentCommission: + *s = ReceiptItemPaymentSubjectAgentCommission + case ReceiptItemPaymentSubjectPropertyRight: + *s = ReceiptItemPaymentSubjectPropertyRight + case ReceiptItemPaymentSubjectNonOperatingGain: + *s = ReceiptItemPaymentSubjectNonOperatingGain + case ReceiptItemPaymentSubjectInsurancePremium: + *s = ReceiptItemPaymentSubjectInsurancePremium + case ReceiptItemPaymentSubjectSalesTax: + *s = ReceiptItemPaymentSubjectSalesTax + case ReceiptItemPaymentSubjectResortFee: + *s = ReceiptItemPaymentSubjectResortFee + case ReceiptItemPaymentSubjectComposite: + *s = ReceiptItemPaymentSubjectComposite + case ReceiptItemPaymentSubjectAnother: + *s = ReceiptItemPaymentSubjectAnother + case ReceiptItemPaymentSubjectFine: + *s = ReceiptItemPaymentSubjectFine + case ReceiptItemPaymentSubjectTax: + *s = ReceiptItemPaymentSubjectTax + case ReceiptItemPaymentSubjectLien: + *s = ReceiptItemPaymentSubjectLien + case ReceiptItemPaymentSubjectCost: + *s = ReceiptItemPaymentSubjectCost + case ReceiptItemPaymentSubjectPensionInsuranceWithoutPayouts: + *s = ReceiptItemPaymentSubjectPensionInsuranceWithoutPayouts + case ReceiptItemPaymentSubjectPensionInsuranceWithPayouts: + *s = ReceiptItemPaymentSubjectPensionInsuranceWithPayouts + case ReceiptItemPaymentSubjectHealthInsuranceWithoutPayouts: + *s = ReceiptItemPaymentSubjectHealthInsuranceWithoutPayouts + case ReceiptItemPaymentSubjectHealthInsuranceWithPayouts: + *s = ReceiptItemPaymentSubjectHealthInsuranceWithPayouts + case ReceiptItemPaymentSubjectHealthInsurance: + *s = ReceiptItemPaymentSubjectHealthInsurance + case ReceiptItemPaymentSubjectCasino: + *s = ReceiptItemPaymentSubjectCasino + case ReceiptItemPaymentSubjectAgentWithdrawals: + *s = ReceiptItemPaymentSubjectAgentWithdrawals + case ReceiptItemPaymentSubjectNonMarkedExcise: + *s = ReceiptItemPaymentSubjectNonMarkedExcise + case ReceiptItemPaymentSubjectMarkedExcise: + *s = ReceiptItemPaymentSubjectMarkedExcise + case ReceiptItemPaymentSubjectMarked: + *s = ReceiptItemPaymentSubjectMarked + case ReceiptItemPaymentSubjectNonMarked: + *s = ReceiptItemPaymentSubjectNonMarked + default: + *s = ReceiptItemPaymentSubject(v) + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s ReceiptItemPaymentSubject) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *ReceiptItemPaymentSubject) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes ReceiptItemPaymentSubjectIndustryDetails as json. +func (s ReceiptItemPaymentSubjectIndustryDetails) Encode(e *jx.Encoder) { + unwrapped := []IndustryDetails(s) + if unwrapped == nil { + e.ArrEmpty() + return + } + if unwrapped != nil { + e.ArrStart() + for _, elem := range unwrapped { + elem.Encode(e) + } + e.ArrEnd() + } +} + +// Decode decodes ReceiptItemPaymentSubjectIndustryDetails from json. +func (s *ReceiptItemPaymentSubjectIndustryDetails) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode ReceiptItemPaymentSubjectIndustryDetails to nil") + } + var unwrapped []IndustryDetails + if err := func() error { + unwrapped = make([]IndustryDetails, 0) + if err := d.Arr(func(d *jx.Decoder) error { + var elem IndustryDetails + if err := elem.Decode(d); err != nil { + return err + } + unwrapped = append(unwrapped, elem) + return nil + }); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "alias") + } + *s = ReceiptItemPaymentSubjectIndustryDetails(unwrapped) + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s ReceiptItemPaymentSubjectIndustryDetails) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *ReceiptItemPaymentSubjectIndustryDetails) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes ReceiptItemPlannedStatus as json. +func (s ReceiptItemPlannedStatus) Encode(e *jx.Encoder) { + unwrapped := int32(s) + + e.Int32(unwrapped) +} + +// Decode decodes ReceiptItemPlannedStatus from json. +func (s *ReceiptItemPlannedStatus) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode ReceiptItemPlannedStatus to nil") + } + var unwrapped int32 + if err := func() error { + v, err := d.Int32() + unwrapped = int32(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "alias") + } + *s = ReceiptItemPlannedStatus(unwrapped) + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s ReceiptItemPlannedStatus) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *ReceiptItemPlannedStatus) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes ReceiptItemProductCode as json. +func (s ReceiptItemProductCode) Encode(e *jx.Encoder) { + unwrapped := string(s) + + e.Str(unwrapped) +} + +// Decode decodes ReceiptItemProductCode from json. +func (s *ReceiptItemProductCode) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode ReceiptItemProductCode to nil") + } + var unwrapped string + if err := func() error { + v, err := d.Str() + unwrapped = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "alias") + } + *s = ReceiptItemProductCode(unwrapped) + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s ReceiptItemProductCode) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *ReceiptItemProductCode) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes ReceiptItemQuantity as json. +func (s ReceiptItemQuantity) Encode(e *jx.Encoder) { + unwrapped := float64(s) + + e.Float64(unwrapped) +} + +// Decode decodes ReceiptItemQuantity from json. +func (s *ReceiptItemQuantity) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode ReceiptItemQuantity to nil") + } + var unwrapped float64 + if err := func() error { + v, err := d.Float64() + unwrapped = float64(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "alias") + } + *s = ReceiptItemQuantity(unwrapped) + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s ReceiptItemQuantity) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *ReceiptItemQuantity) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *ReceiptItemSupplierWithInn) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *ReceiptItemSupplierWithInn) encodeFields(e *jx.Encoder) { + { + if s.Name.Set { + e.FieldStart("name") + s.Name.Encode(e) + } + } + { + if s.Phone.Set { + e.FieldStart("phone") + s.Phone.Encode(e) + } + } + { + if s.Inn.Set { + e.FieldStart("inn") + s.Inn.Encode(e) + } + } +} + +var jsonFieldsNameOfReceiptItemSupplierWithInn = [3]string{ + 0: "name", + 1: "phone", + 2: "inn", +} + +// Decode decodes ReceiptItemSupplierWithInn from json. +func (s *ReceiptItemSupplierWithInn) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode ReceiptItemSupplierWithInn to nil") + } + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "name": + if err := func() error { + s.Name.Reset() + if err := s.Name.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"name\"") + } + case "phone": + if err := func() error { + s.Phone.Reset() + if err := s.Phone.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"phone\"") + } + case "inn": + if err := func() error { + s.Inn.Reset() + if err := s.Inn.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"inn\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode ReceiptItemSupplierWithInn") + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s *ReceiptItemSupplierWithInn) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *ReceiptItemSupplierWithInn) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes ReceiptItemVatCode as json. +func (s ReceiptItemVatCode) Encode(e *jx.Encoder) { + unwrapped := int32(s) + + e.Int32(unwrapped) +} + +// Decode decodes ReceiptItemVatCode from json. +func (s *ReceiptItemVatCode) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode ReceiptItemVatCode to nil") + } + var unwrapped int32 + if err := func() error { + v, err := d.Int32() + unwrapped = int32(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "alias") + } + *s = ReceiptItemVatCode(unwrapped) + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s ReceiptItemVatCode) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *ReceiptItemVatCode) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *ReceiptReceiptOperationalDetails) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *ReceiptReceiptOperationalDetails) encodeFields(e *jx.Encoder) { + { + e.FieldStart("operation_id") + e.Int(s.OperationID) + } + { + e.FieldStart("value") + e.Str(s.Value) + } + { + e.FieldStart("created_at") + json.EncodeDateTime(e, s.CreatedAt) + } +} + +var jsonFieldsNameOfReceiptReceiptOperationalDetails = [3]string{ + 0: "operation_id", + 1: "value", + 2: "created_at", +} + +// Decode decodes ReceiptReceiptOperationalDetails from json. +func (s *ReceiptReceiptOperationalDetails) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode ReceiptReceiptOperationalDetails to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "operation_id": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + v, err := d.Int() + s.OperationID = int(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"operation_id\"") + } + case "value": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + v, err := d.Str() + s.Value = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"value\"") + } + case "created_at": + requiredBitSet[0] |= 1 << 2 + if err := func() error { + v, err := json.DecodeDateTime(d) + s.CreatedAt = v + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"created_at\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode ReceiptReceiptOperationalDetails") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000111, + } { + 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(jsonFieldsNameOfReceiptReceiptOperationalDetails) { + name = jsonFieldsNameOfReceiptReceiptOperationalDetails[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 *ReceiptReceiptOperationalDetails) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *ReceiptReceiptOperationalDetails) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes ReceiptStatus as json. +func (s ReceiptStatus) Encode(e *jx.Encoder) { + e.Str(string(s)) +} + +// Decode decodes ReceiptStatus from json. +func (s *ReceiptStatus) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode ReceiptStatus to nil") + } + v, err := d.StrBytes() + if err != nil { + return err + } + // Try to use constant string. + switch ReceiptStatus(v) { + case ReceiptStatusPending: + *s = ReceiptStatusPending + case ReceiptStatusSucceeded: + *s = ReceiptStatusSucceeded + case ReceiptStatusCanceled: + *s = ReceiptStatusCanceled + default: + *s = ReceiptStatus(v) + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s ReceiptStatus) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *ReceiptStatus) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes ReceiptType as json. +func (s ReceiptType) Encode(e *jx.Encoder) { + e.Str(string(s)) +} + +// Decode decodes ReceiptType from json. +func (s *ReceiptType) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode ReceiptType to nil") + } + v, err := d.StrBytes() + if err != nil { + return err + } + // Try to use constant string. + switch ReceiptType(v) { + case ReceiptTypePayment: + *s = ReceiptTypePayment + case ReceiptTypeRefund: + *s = ReceiptTypeRefund + default: + *s = ReceiptType(v) + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s ReceiptType) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *ReceiptType) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *ReceiptsGetOK) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *ReceiptsGetOK) encodeFields(e *jx.Encoder) { + { + e.FieldStart("type") + s.Type.Encode(e) + } + { + e.FieldStart("items") + e.ArrStart() + for _, elem := range s.Items { + elem.Encode(e) + } + e.ArrEnd() + } + { + if s.NextCursor.Set { + e.FieldStart("next_cursor") + s.NextCursor.Encode(e) + } + } +} + +var jsonFieldsNameOfReceiptsGetOK = [3]string{ + 0: "type", + 1: "items", + 2: "next_cursor", +} + +// Decode decodes ReceiptsGetOK from json. +func (s *ReceiptsGetOK) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode ReceiptsGetOK to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "type": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + if err := s.Type.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"type\"") + } + case "items": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + s.Items = make([]Receipt, 0) + if err := d.Arr(func(d *jx.Decoder) error { + var elem Receipt + if err := elem.Decode(d); err != nil { + return err + } + s.Items = append(s.Items, elem) + return nil + }); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"items\"") + } + case "next_cursor": + if err := func() error { + s.NextCursor.Reset() + if err := s.NextCursor.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"next_cursor\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode ReceiptsGetOK") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000011, + } { + 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(jsonFieldsNameOfReceiptsGetOK) { + name = jsonFieldsNameOfReceiptsGetOK[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 *ReceiptsGetOK) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *ReceiptsGetOK) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes ReceiptsGetOKType as json. +func (s ReceiptsGetOKType) Encode(e *jx.Encoder) { + e.Str(string(s)) +} + +// Decode decodes ReceiptsGetOKType from json. +func (s *ReceiptsGetOKType) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode ReceiptsGetOKType to nil") + } + v, err := d.StrBytes() + if err != nil { + return err + } + // Try to use constant string. + switch ReceiptsGetOKType(v) { + case ReceiptsGetOKTypeList: + *s = ReceiptsGetOKTypeList + default: + *s = ReceiptsGetOKType(v) + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s ReceiptsGetOKType) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *ReceiptsGetOKType) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *ReceiverBankAccount) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *ReceiverBankAccount) encodeFields(e *jx.Encoder) { + { + e.FieldStart("type") + s.Type.Encode(e) + } + { + e.FieldStart("account_number") + e.Str(s.AccountNumber) + } + { + e.FieldStart("bic") + e.Str(s.Bic) + } +} + +var jsonFieldsNameOfReceiverBankAccount = [3]string{ + 0: "type", + 1: "account_number", + 2: "bic", +} + +// Decode decodes ReceiverBankAccount from json. +func (s *ReceiverBankAccount) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode ReceiverBankAccount to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "type": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + if err := s.Type.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"type\"") + } + case "account_number": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + v, err := d.Str() + s.AccountNumber = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"account_number\"") + } + case "bic": + requiredBitSet[0] |= 1 << 2 + if err := func() error { + v, err := d.Str() + s.Bic = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"bic\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode ReceiverBankAccount") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000111, + } { + 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(jsonFieldsNameOfReceiverBankAccount) { + name = jsonFieldsNameOfReceiverBankAccount[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 *ReceiverBankAccount) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *ReceiverBankAccount) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *ReceiverDigitalWallet) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *ReceiverDigitalWallet) encodeFields(e *jx.Encoder) { + { + e.FieldStart("type") + s.Type.Encode(e) + } + { + e.FieldStart("account_number") + e.Str(s.AccountNumber) + } +} + +var jsonFieldsNameOfReceiverDigitalWallet = [2]string{ + 0: "type", + 1: "account_number", +} + +// Decode decodes ReceiverDigitalWallet from json. +func (s *ReceiverDigitalWallet) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode ReceiverDigitalWallet to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "type": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + if err := s.Type.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"type\"") + } + case "account_number": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + v, err := d.Str() + s.AccountNumber = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"account_number\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode ReceiverDigitalWallet") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000011, + } { + 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(jsonFieldsNameOfReceiverDigitalWallet) { + name = jsonFieldsNameOfReceiverDigitalWallet[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 *ReceiverDigitalWallet) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *ReceiverDigitalWallet) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *ReceiverMobileBalance) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *ReceiverMobileBalance) encodeFields(e *jx.Encoder) { + { + e.FieldStart("type") + s.Type.Encode(e) + } + { + e.FieldStart("phone") + e.Str(s.Phone) + } +} + +var jsonFieldsNameOfReceiverMobileBalance = [2]string{ + 0: "type", + 1: "phone", +} + +// Decode decodes ReceiverMobileBalance from json. +func (s *ReceiverMobileBalance) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode ReceiverMobileBalance to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "type": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + if err := s.Type.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"type\"") + } + case "phone": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + v, err := d.Str() + s.Phone = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"phone\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode ReceiverMobileBalance") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000011, + } { + 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(jsonFieldsNameOfReceiverMobileBalance) { + name = jsonFieldsNameOfReceiverMobileBalance[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 *ReceiverMobileBalance) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *ReceiverMobileBalance) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes ReceiverType as json. +func (s ReceiverType) Encode(e *jx.Encoder) { + e.Str(string(s)) +} + +// Decode decodes ReceiverType from json. +func (s *ReceiverType) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode ReceiverType to nil") + } + v, err := d.StrBytes() + if err != nil { + return err + } + // Try to use constant string. + switch ReceiverType(v) { + case ReceiverTypeMobileBalance: + *s = ReceiverTypeMobileBalance + case ReceiverTypeDigitalWallet: + *s = ReceiverTypeDigitalWallet + case ReceiverTypeBankAccount: + *s = ReceiverTypeBankAccount + default: + *s = ReceiverType(v) + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s ReceiverType) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *ReceiverType) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *Recipient) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *Recipient) encodeFields(e *jx.Encoder) { + { + e.FieldStart("gateway_id") + s.GatewayID.Encode(e) + } +} + +var jsonFieldsNameOfRecipient = [1]string{ + 0: "gateway_id", +} + +// Decode decodes Recipient from json. +func (s *Recipient) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode Recipient to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "gateway_id": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + if err := s.GatewayID.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"gateway_id\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode Recipient") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000001, + } { + 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(jsonFieldsNameOfRecipient) { + name = jsonFieldsNameOfRecipient[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 *Recipient) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *Recipient) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *Refund) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *Refund) encodeFields(e *jx.Encoder) { + { + e.FieldStart("id") + s.ID.Encode(e) + } + { + e.FieldStart("payment_id") + s.PaymentID.Encode(e) + } + { + e.FieldStart("status") + s.Status.Encode(e) + } + { + if s.CancellationDetails.Set { + e.FieldStart("cancellation_details") + s.CancellationDetails.Encode(e) + } + } + { + if s.ReceiptRegistration.Set { + e.FieldStart("receipt_registration") + s.ReceiptRegistration.Encode(e) + } + } + { + e.FieldStart("created_at") + json.EncodeDateTime(e, s.CreatedAt) + } + { + e.FieldStart("amount") + s.Amount.Encode(e) + } + { + if s.Description.Set { + e.FieldStart("description") + s.Description.Encode(e) + } + } + { + if s.Sources != nil { + e.FieldStart("sources") + e.ArrStart() + for _, elem := range s.Sources { + elem.Encode(e) + } + e.ArrEnd() + } + } + { + if s.Deal.Set { + e.FieldStart("deal") + s.Deal.Encode(e) + } + } + { + if s.RefundMethod.Set { + e.FieldStart("refund_method") + s.RefundMethod.Encode(e) + } + } + { + if s.RefundAuthorizationDetails.Set { + e.FieldStart("refund_authorization_details") + s.RefundAuthorizationDetails.Encode(e) + } + } + { + if s.Metadata.Set { + e.FieldStart("metadata") + s.Metadata.Encode(e) + } + } +} + +var jsonFieldsNameOfRefund = [13]string{ + 0: "id", + 1: "payment_id", + 2: "status", + 3: "cancellation_details", + 4: "receipt_registration", + 5: "created_at", + 6: "amount", + 7: "description", + 8: "sources", + 9: "deal", + 10: "refund_method", + 11: "refund_authorization_details", + 12: "metadata", +} + +// Decode decodes Refund from json. +func (s *Refund) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode Refund to nil") + } + var requiredBitSet [2]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "id": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + if err := s.ID.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"id\"") + } + case "payment_id": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + if err := s.PaymentID.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"payment_id\"") + } + case "status": + requiredBitSet[0] |= 1 << 2 + if err := func() error { + if err := s.Status.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"status\"") + } + case "cancellation_details": + if err := func() error { + s.CancellationDetails.Reset() + if err := s.CancellationDetails.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"cancellation_details\"") + } + case "receipt_registration": + if err := func() error { + s.ReceiptRegistration.Reset() + if err := s.ReceiptRegistration.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"receipt_registration\"") + } + case "created_at": + requiredBitSet[0] |= 1 << 5 + if err := func() error { + v, err := json.DecodeDateTime(d) + s.CreatedAt = v + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"created_at\"") + } + case "amount": + requiredBitSet[0] |= 1 << 6 + if err := func() error { + if err := s.Amount.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"amount\"") + } + case "description": + if err := func() error { + s.Description.Reset() + if err := s.Description.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"description\"") + } + case "sources": + if err := func() error { + s.Sources = make([]RefundSourcesData, 0) + if err := d.Arr(func(d *jx.Decoder) error { + var elem RefundSourcesData + if err := elem.Decode(d); err != nil { + return err + } + s.Sources = append(s.Sources, elem) + return nil + }); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"sources\"") + } + case "deal": + if err := func() error { + s.Deal.Reset() + if err := s.Deal.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"deal\"") + } + case "refund_method": + if err := func() error { + s.RefundMethod.Reset() + if err := s.RefundMethod.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"refund_method\"") + } + case "refund_authorization_details": + if err := func() error { + s.RefundAuthorizationDetails.Reset() + if err := s.RefundAuthorizationDetails.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"refund_authorization_details\"") + } + case "metadata": + if err := func() error { + s.Metadata.Reset() + if err := s.Metadata.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"metadata\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode Refund") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [2]uint8{ + 0b01100111, + 0b00000000, + } { + 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(jsonFieldsNameOfRefund) { + name = jsonFieldsNameOfRefund[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 *Refund) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *Refund) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *RefundAmount) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *RefundAmount) encodeFields(e *jx.Encoder) { + { + e.FieldStart("value") + e.Str(s.Value) + } + { + e.FieldStart("currency") + s.Currency.Encode(e) + } +} + +var jsonFieldsNameOfRefundAmount = [2]string{ + 0: "value", + 1: "currency", +} + +// Decode decodes RefundAmount from json. +func (s *RefundAmount) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode RefundAmount to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "value": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + v, err := d.Str() + s.Value = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"value\"") + } + case "currency": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + if err := s.Currency.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"currency\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode RefundAmount") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000011, + } { + 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(jsonFieldsNameOfRefundAmount) { + name = jsonFieldsNameOfRefundAmount[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 *RefundAmount) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *RefundAmount) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *RefundAuthorizationDetails) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *RefundAuthorizationDetails) encodeFields(e *jx.Encoder) { + { + if s.Rrn.Set { + e.FieldStart("rrn") + s.Rrn.Encode(e) + } + } +} + +var jsonFieldsNameOfRefundAuthorizationDetails = [1]string{ + 0: "rrn", +} + +// Decode decodes RefundAuthorizationDetails from json. +func (s *RefundAuthorizationDetails) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode RefundAuthorizationDetails to nil") + } + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "rrn": + if err := func() error { + s.Rrn.Reset() + if err := s.Rrn.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"rrn\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode RefundAuthorizationDetails") + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s *RefundAuthorizationDetails) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *RefundAuthorizationDetails) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *RefundCancellationDetails) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *RefundCancellationDetails) encodeFields(e *jx.Encoder) { + { + e.FieldStart("party") + s.Party.Encode(e) + } + { + e.FieldStart("reason") + s.Reason.Encode(e) + } +} + +var jsonFieldsNameOfRefundCancellationDetails = [2]string{ + 0: "party", + 1: "reason", +} + +// Decode decodes RefundCancellationDetails from json. +func (s *RefundCancellationDetails) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode RefundCancellationDetails to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "party": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + if err := s.Party.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"party\"") + } + case "reason": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + if err := s.Reason.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"reason\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode RefundCancellationDetails") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000011, + } { + 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(jsonFieldsNameOfRefundCancellationDetails) { + name = jsonFieldsNameOfRefundCancellationDetails[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 *RefundCancellationDetails) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *RefundCancellationDetails) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes RefundCancellationDetailsParty as json. +func (s RefundCancellationDetailsParty) Encode(e *jx.Encoder) { + e.Str(string(s)) +} + +// Decode decodes RefundCancellationDetailsParty from json. +func (s *RefundCancellationDetailsParty) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode RefundCancellationDetailsParty to nil") + } + v, err := d.StrBytes() + if err != nil { + return err + } + // Try to use constant string. + switch RefundCancellationDetailsParty(v) { + case RefundCancellationDetailsPartyYooMoney: + *s = RefundCancellationDetailsPartyYooMoney + case RefundCancellationDetailsPartyRefundNetwork: + *s = RefundCancellationDetailsPartyRefundNetwork + default: + *s = RefundCancellationDetailsParty(v) + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s RefundCancellationDetailsParty) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *RefundCancellationDetailsParty) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes RefundCancellationDetailsReason as json. +func (s RefundCancellationDetailsReason) Encode(e *jx.Encoder) { + e.Str(string(s)) +} + +// Decode decodes RefundCancellationDetailsReason from json. +func (s *RefundCancellationDetailsReason) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode RefundCancellationDetailsReason to nil") + } + v, err := d.StrBytes() + if err != nil { + return err + } + // Try to use constant string. + switch RefundCancellationDetailsReason(v) { + case RefundCancellationDetailsReasonYooMoneyAccountClosed: + *s = RefundCancellationDetailsReasonYooMoneyAccountClosed + case RefundCancellationDetailsReasonInsufficientFunds: + *s = RefundCancellationDetailsReasonInsufficientFunds + case RefundCancellationDetailsReasonGeneralDecline: + *s = RefundCancellationDetailsReasonGeneralDecline + case RefundCancellationDetailsReasonRejectedByPayee: + *s = RefundCancellationDetailsReasonRejectedByPayee + case RefundCancellationDetailsReasonRejectedByTimeout: + *s = RefundCancellationDetailsReasonRejectedByTimeout + case RefundCancellationDetailsReasonPaymentBasketIDNotFound: + *s = RefundCancellationDetailsReasonPaymentBasketIDNotFound + case RefundCancellationDetailsReasonPaymentArticleNumberNotFound: + *s = RefundCancellationDetailsReasonPaymentArticleNumberNotFound + case RefundCancellationDetailsReasonPaymentTruCodeNotFound: + *s = RefundCancellationDetailsReasonPaymentTruCodeNotFound + case RefundCancellationDetailsReasonTooManyRefundingArticles: + *s = RefundCancellationDetailsReasonTooManyRefundingArticles + case RefundCancellationDetailsReasonSomeArticlesAlreadyRefunded: + *s = RefundCancellationDetailsReasonSomeArticlesAlreadyRefunded + default: + *s = RefundCancellationDetailsReason(v) + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s RefundCancellationDetailsReason) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *RefundCancellationDetailsReason) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *RefundDealData) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *RefundDealData) encodeFields(e *jx.Encoder) { + { + e.FieldStart("refund_settlements") + s.RefundSettlements.Encode(e) + } +} + +var jsonFieldsNameOfRefundDealData = [1]string{ + 0: "refund_settlements", +} + +// Decode decodes RefundDealData from json. +func (s *RefundDealData) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode RefundDealData to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "refund_settlements": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + if err := s.RefundSettlements.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"refund_settlements\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode RefundDealData") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000001, + } { + 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(jsonFieldsNameOfRefundDealData) { + name = jsonFieldsNameOfRefundDealData[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 *RefundDealData) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *RefundDealData) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *RefundDealInfo) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *RefundDealInfo) encodeFields(e *jx.Encoder) { + { + e.FieldStart("id") + e.Str(s.ID) + } + { + e.FieldStart("refund_settlements") + s.RefundSettlements.Encode(e) + } +} + +var jsonFieldsNameOfRefundDealInfo = [2]string{ + 0: "id", + 1: "refund_settlements", +} + +// Decode decodes RefundDealInfo from json. +func (s *RefundDealInfo) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode RefundDealInfo to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "id": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + v, err := d.Str() + s.ID = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"id\"") + } + case "refund_settlements": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + if err := s.RefundSettlements.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"refund_settlements\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode RefundDealInfo") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000011, + } { + 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(jsonFieldsNameOfRefundDealInfo) { + name = jsonFieldsNameOfRefundDealInfo[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 *RefundDealInfo) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *RefundDealInfo) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes RefundId as json. +func (s RefundId) Encode(e *jx.Encoder) { + unwrapped := string(s) + + e.Str(unwrapped) +} + +// Decode decodes RefundId from json. +func (s *RefundId) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode RefundId to nil") + } + var unwrapped string + if err := func() error { + v, err := d.Str() + unwrapped = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "alias") + } + *s = RefundId(unwrapped) + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s RefundId) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *RefundId) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *RefundList) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *RefundList) encodeFields(e *jx.Encoder) { + { + e.FieldStart("type") + s.Type.Encode(e) + } + { + e.FieldStart("items") + e.ArrStart() + for _, elem := range s.Items { + elem.Encode(e) + } + e.ArrEnd() + } + { + if s.NextCursor.Set { + e.FieldStart("next_cursor") + s.NextCursor.Encode(e) + } + } +} + +var jsonFieldsNameOfRefundList = [3]string{ + 0: "type", + 1: "items", + 2: "next_cursor", +} + +// Decode decodes RefundList from json. +func (s *RefundList) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode RefundList to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "type": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + if err := s.Type.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"type\"") + } + case "items": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + s.Items = make([]Refund, 0) + if err := d.Arr(func(d *jx.Decoder) error { + var elem Refund + if err := elem.Decode(d); err != nil { + return err + } + s.Items = append(s.Items, elem) + return nil + }); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"items\"") + } + case "next_cursor": + if err := func() error { + s.NextCursor.Reset() + if err := s.NextCursor.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"next_cursor\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode RefundList") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000011, + } { + 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(jsonFieldsNameOfRefundList) { + name = jsonFieldsNameOfRefundList[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 *RefundList) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *RefundList) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes RefundListType as json. +func (s RefundListType) Encode(e *jx.Encoder) { + e.Str(string(s)) +} + +// Decode decodes RefundListType from json. +func (s *RefundListType) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode RefundListType to nil") + } + v, err := d.StrBytes() + if err != nil { + return err + } + // Try to use constant string. + switch RefundListType(v) { + case RefundListTypeList: + *s = RefundListTypeList + default: + *s = RefundListType(v) + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s RefundListType) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *RefundListType) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes RefundMethodType as json. +func (s RefundMethodType) Encode(e *jx.Encoder) { + e.Str(string(s)) +} + +// Decode decodes RefundMethodType from json. +func (s *RefundMethodType) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode RefundMethodType to nil") + } + v, err := d.StrBytes() + if err != nil { + return err + } + // Try to use constant string. + switch RefundMethodType(v) { + case RefundMethodTypeSbp: + *s = RefundMethodTypeSbp + case RefundMethodTypeElectronicCertificate: + *s = RefundMethodTypeElectronicCertificate + default: + *s = RefundMethodType(v) + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s RefundMethodType) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *RefundMethodType) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes RefundReceiptRegistration as json. +func (s RefundReceiptRegistration) Encode(e *jx.Encoder) { + e.Str(string(s)) +} + +// Decode decodes RefundReceiptRegistration from json. +func (s *RefundReceiptRegistration) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode RefundReceiptRegistration to nil") + } + v, err := d.StrBytes() + if err != nil { + return err + } + // Try to use constant string. + switch RefundReceiptRegistration(v) { + case RefundReceiptRegistrationPending: + *s = RefundReceiptRegistrationPending + case RefundReceiptRegistrationSucceeded: + *s = RefundReceiptRegistrationSucceeded + case RefundReceiptRegistrationCanceled: + *s = RefundReceiptRegistrationCanceled + default: + *s = RefundReceiptRegistration(v) + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s RefundReceiptRegistration) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *RefundReceiptRegistration) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes RefundRefundMethod as json. +func (s RefundRefundMethod) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +func (s RefundRefundMethod) encodeFields(e *jx.Encoder) { + switch s.Type { + case SbpRefundMethodRefundRefundMethod: + e.FieldStart("type") + e.Str("SbpRefundMethod") + { + s := s.SbpRefundMethod + { + if s.SbpOperationID.Set { + e.FieldStart("sbp_operation_id") + s.SbpOperationID.Encode(e) + } + } + } + case ElectronicCertificateRefundMethodRefundRefundMethod: + e.FieldStart("type") + e.Str("ElectronicCertificateRefundMethod") + { + s := s.ElectronicCertificateRefundMethod + { + if s.ElectronicCertificate.Set { + e.FieldStart("electronic_certificate") + s.ElectronicCertificate.Encode(e) + } + } + { + if s.Articles != nil { + e.FieldStart("articles") + e.ArrStart() + for _, elem := range s.Articles { + elem.Encode(e) + } + e.ArrEnd() + } + } + } + } +} + +// Decode decodes RefundRefundMethod from json. +func (s *RefundRefundMethod) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode RefundRefundMethod to nil") + } + // Sum type discriminator. + if typ := d.Next(); typ != jx.Object { + return errors.Errorf("unexpected json type %q", typ) + } + + var found bool + if err := d.Capture(func(d *jx.Decoder) error { + return d.ObjBytes(func(d *jx.Decoder, key []byte) error { + if found { + return d.Skip() + } + switch string(key) { + case "type": + typ, err := d.Str() + if err != nil { + return err + } + switch typ { + case "SbpRefundMethod": + s.Type = SbpRefundMethodRefundRefundMethod + found = true + case "ElectronicCertificateRefundMethod": + s.Type = ElectronicCertificateRefundMethodRefundRefundMethod + found = true + default: + return errors.Errorf("unknown type %s", typ) + } + return nil + } + return d.Skip() + }) + }); err != nil { + return errors.Wrap(err, "capture") + } + if !found { + return errors.New("unable to detect sum type variant") + } + switch s.Type { + case SbpRefundMethodRefundRefundMethod: + if err := s.SbpRefundMethod.Decode(d); err != nil { + return err + } + case ElectronicCertificateRefundMethodRefundRefundMethod: + if err := s.ElectronicCertificateRefundMethod.Decode(d); err != nil { + return err + } + default: + return errors.Errorf("inferred invalid type: %s", s.Type) + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s RefundRefundMethod) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *RefundRefundMethod) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *RefundSourcesData) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *RefundSourcesData) encodeFields(e *jx.Encoder) { + { + e.FieldStart("account_id") + e.Str(s.AccountID) + } + { + e.FieldStart("amount") + s.Amount.Encode(e) + } + { + if s.PlatformFeeAmount.Set { + e.FieldStart("platform_fee_amount") + s.PlatformFeeAmount.Encode(e) + } + } +} + +var jsonFieldsNameOfRefundSourcesData = [3]string{ + 0: "account_id", + 1: "amount", + 2: "platform_fee_amount", +} + +// Decode decodes RefundSourcesData from json. +func (s *RefundSourcesData) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode RefundSourcesData to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "account_id": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + v, err := d.Str() + s.AccountID = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"account_id\"") + } + case "amount": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + if err := s.Amount.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"amount\"") + } + case "platform_fee_amount": + if err := func() error { + s.PlatformFeeAmount.Reset() + if err := s.PlatformFeeAmount.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"platform_fee_amount\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode RefundSourcesData") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000011, + } { + 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(jsonFieldsNameOfRefundSourcesData) { + name = jsonFieldsNameOfRefundSourcesData[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 *RefundSourcesData) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *RefundSourcesData) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *RefundSourcesDataAmount) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *RefundSourcesDataAmount) encodeFields(e *jx.Encoder) { + { + e.FieldStart("value") + e.Str(s.Value) + } + { + e.FieldStart("currency") + s.Currency.Encode(e) + } +} + +var jsonFieldsNameOfRefundSourcesDataAmount = [2]string{ + 0: "value", + 1: "currency", +} + +// Decode decodes RefundSourcesDataAmount from json. +func (s *RefundSourcesDataAmount) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode RefundSourcesDataAmount to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "value": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + v, err := d.Str() + s.Value = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"value\"") + } + case "currency": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + if err := s.Currency.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"currency\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode RefundSourcesDataAmount") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000011, + } { + 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(jsonFieldsNameOfRefundSourcesDataAmount) { + name = jsonFieldsNameOfRefundSourcesDataAmount[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 *RefundSourcesDataAmount) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *RefundSourcesDataAmount) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *RefundSourcesDataPlatformFeeAmount) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *RefundSourcesDataPlatformFeeAmount) encodeFields(e *jx.Encoder) { + { + e.FieldStart("value") + e.Str(s.Value) + } + { + e.FieldStart("currency") + s.Currency.Encode(e) + } +} + +var jsonFieldsNameOfRefundSourcesDataPlatformFeeAmount = [2]string{ + 0: "value", + 1: "currency", +} + +// Decode decodes RefundSourcesDataPlatformFeeAmount from json. +func (s *RefundSourcesDataPlatformFeeAmount) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode RefundSourcesDataPlatformFeeAmount to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "value": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + v, err := d.Str() + s.Value = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"value\"") + } + case "currency": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + if err := s.Currency.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"currency\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode RefundSourcesDataPlatformFeeAmount") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000011, + } { + 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(jsonFieldsNameOfRefundSourcesDataPlatformFeeAmount) { + name = jsonFieldsNameOfRefundSourcesDataPlatformFeeAmount[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 *RefundSourcesDataPlatformFeeAmount) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *RefundSourcesDataPlatformFeeAmount) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes RefundStatus as json. +func (s RefundStatus) Encode(e *jx.Encoder) { + e.Str(string(s)) +} + +// Decode decodes RefundStatus from json. +func (s *RefundStatus) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode RefundStatus to nil") + } + v, err := d.StrBytes() + if err != nil { + return err + } + // Try to use constant string. + switch RefundStatus(v) { + case RefundStatusPending: + *s = RefundStatusPending + case RefundStatusSucceeded: + *s = RefundStatusSucceeded + case RefundStatusCanceled: + *s = RefundStatusCanceled + default: + *s = RefundStatus(v) + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s RefundStatus) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *RefundStatus) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *RefundsPostReq) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *RefundsPostReq) encodeFields(e *jx.Encoder) { + { + e.FieldStart("payment_id") + s.PaymentID.Encode(e) + } + { + e.FieldStart("amount") + s.Amount.Encode(e) + } + { + if s.Description.Set { + e.FieldStart("description") + s.Description.Encode(e) + } + } + { + if s.Receipt.Set { + e.FieldStart("receipt") + s.Receipt.Encode(e) + } + } + { + if s.Sources != nil { + e.FieldStart("sources") + e.ArrStart() + for _, elem := range s.Sources { + elem.Encode(e) + } + e.ArrEnd() + } + } + { + if s.Deal.Set { + e.FieldStart("deal") + s.Deal.Encode(e) + } + } + { + if s.RefundMethodData.Set { + e.FieldStart("refund_method_data") + s.RefundMethodData.Encode(e) + } + } + { + if s.Metadata.Set { + e.FieldStart("metadata") + s.Metadata.Encode(e) + } + } +} + +var jsonFieldsNameOfRefundsPostReq = [8]string{ + 0: "payment_id", + 1: "amount", + 2: "description", + 3: "receipt", + 4: "sources", + 5: "deal", + 6: "refund_method_data", + 7: "metadata", +} + +// Decode decodes RefundsPostReq from json. +func (s *RefundsPostReq) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode RefundsPostReq to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "payment_id": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + if err := s.PaymentID.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"payment_id\"") + } + case "amount": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + if err := s.Amount.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"amount\"") + } + case "description": + if err := func() error { + s.Description.Reset() + if err := s.Description.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"description\"") + } + case "receipt": + if err := func() error { + s.Receipt.Reset() + if err := s.Receipt.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"receipt\"") + } + case "sources": + if err := func() error { + s.Sources = make([]RefundSourcesData, 0) + if err := d.Arr(func(d *jx.Decoder) error { + var elem RefundSourcesData + if err := elem.Decode(d); err != nil { + return err + } + s.Sources = append(s.Sources, elem) + return nil + }); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"sources\"") + } + case "deal": + if err := func() error { + s.Deal.Reset() + if err := s.Deal.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"deal\"") + } + case "refund_method_data": + if err := func() error { + s.RefundMethodData.Reset() + if err := s.RefundMethodData.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"refund_method_data\"") + } + case "metadata": + if err := func() error { + s.Metadata.Reset() + if err := s.Metadata.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"metadata\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode RefundsPostReq") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000011, + } { + 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(jsonFieldsNameOfRefundsPostReq) { + name = jsonFieldsNameOfRefundsPostReq[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 *RefundsPostReq) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *RefundsPostReq) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *RefundsPostReqAmount) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *RefundsPostReqAmount) encodeFields(e *jx.Encoder) { + { + e.FieldStart("value") + e.Str(s.Value) + } + { + e.FieldStart("currency") + s.Currency.Encode(e) + } +} + +var jsonFieldsNameOfRefundsPostReqAmount = [2]string{ + 0: "value", + 1: "currency", +} + +// Decode decodes RefundsPostReqAmount from json. +func (s *RefundsPostReqAmount) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode RefundsPostReqAmount to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "value": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + v, err := d.Str() + s.Value = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"value\"") + } + case "currency": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + if err := s.Currency.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"currency\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode RefundsPostReqAmount") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000011, + } { + 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(jsonFieldsNameOfRefundsPostReqAmount) { + name = jsonFieldsNameOfRefundsPostReqAmount[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 *RefundsPostReqAmount) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *RefundsPostReqAmount) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes RefundsPostReqRefundMethodData as json. +func (s RefundsPostReqRefundMethodData) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +func (s RefundsPostReqRefundMethodData) encodeFields(e *jx.Encoder) { + switch s.Type { + case ElectronicCertificateRefundMethodDataRefundsPostReqRefundMethodData: + e.FieldStart("type") + e.Str("ElectronicCertificateRefundMethodData") + { + s := s.ElectronicCertificateRefundMethodData + { + if s.ElectronicCertificate.Set { + e.FieldStart("electronic_certificate") + s.ElectronicCertificate.Encode(e) + } + } + { + if s.Articles != nil { + e.FieldStart("articles") + e.ArrStart() + for _, elem := range s.Articles { + elem.Encode(e) + } + e.ArrEnd() + } + } + } + } +} + +// Decode decodes RefundsPostReqRefundMethodData from json. +func (s *RefundsPostReqRefundMethodData) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode RefundsPostReqRefundMethodData to nil") + } + // Sum type discriminator. + if typ := d.Next(); typ != jx.Object { + return errors.Errorf("unexpected json type %q", typ) + } + + var found bool + if err := d.Capture(func(d *jx.Decoder) error { + return d.ObjBytes(func(d *jx.Decoder, key []byte) error { + if found { + return d.Skip() + } + switch string(key) { + case "type": + typ, err := d.Str() + if err != nil { + return err + } + switch typ { + case "ElectronicCertificateRefundMethodData": + s.Type = ElectronicCertificateRefundMethodDataRefundsPostReqRefundMethodData + found = true + default: + return errors.Errorf("unknown type %s", typ) + } + return nil + } + return d.Skip() + }) + }); err != nil { + return errors.Wrap(err, "capture") + } + if !found { + return errors.New("unable to detect sum type variant") + } + switch s.Type { + case ElectronicCertificateRefundMethodDataRefundsPostReqRefundMethodData: + if err := s.ElectronicCertificateRefundMethodData.Decode(d); err != nil { + return err + } + default: + return errors.Errorf("inferred invalid type: %s", s.Type) + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s RefundsPostReqRefundMethodData) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *RefundsPostReqRefundMethodData) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes ReturnUrl as json. +func (s ReturnUrl) Encode(e *jx.Encoder) { + unwrapped := string(s) + + e.Str(unwrapped) +} + +// Decode decodes ReturnUrl from json. +func (s *ReturnUrl) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode ReturnUrl to nil") + } + var unwrapped string + if err := func() error { + v, err := d.Str() + unwrapped = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "alias") + } + *s = ReturnUrl(unwrapped) + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s ReturnUrl) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *ReturnUrl) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes Rrn as json. +func (s Rrn) Encode(e *jx.Encoder) { + unwrapped := string(s) + + e.Str(unwrapped) +} + +// Decode decodes Rrn from json. +func (s *Rrn) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode Rrn to nil") + } + var unwrapped string + if err := func() error { + v, err := d.Str() + unwrapped = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "alias") + } + *s = Rrn(unwrapped) + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s Rrn) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *Rrn) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *SafeDeal) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *SafeDeal) encodeFields(e *jx.Encoder) { + { + e.FieldStart("type") + s.Type.Encode(e) + } + { + e.FieldStart("id") + s.ID.Encode(e) + } + { + e.FieldStart("fee_moment") + s.FeeMoment.Encode(e) + } + { + if s.Description.Set { + e.FieldStart("description") + s.Description.Encode(e) + } + } + { + e.FieldStart("balance") + s.Balance.Encode(e) + } + { + e.FieldStart("payout_balance") + s.PayoutBalance.Encode(e) + } + { + e.FieldStart("status") + s.Status.Encode(e) + } + { + e.FieldStart("created_at") + json.EncodeDateTime(e, s.CreatedAt) + } + { + e.FieldStart("expires_at") + json.EncodeDateTime(e, s.ExpiresAt) + } + { + if s.Metadata.Set { + e.FieldStart("metadata") + s.Metadata.Encode(e) + } + } + { + e.FieldStart("test") + s.Test.Encode(e) + } +} + +var jsonFieldsNameOfSafeDeal = [11]string{ + 0: "type", + 1: "id", + 2: "fee_moment", + 3: "description", + 4: "balance", + 5: "payout_balance", + 6: "status", + 7: "created_at", + 8: "expires_at", + 9: "metadata", + 10: "test", +} + +// Decode decodes SafeDeal from json. +func (s *SafeDeal) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode SafeDeal to nil") + } + var requiredBitSet [2]uint8 + s.setDefaults() + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "type": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + if err := s.Type.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"type\"") + } + case "id": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + if err := s.ID.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"id\"") + } + case "fee_moment": + requiredBitSet[0] |= 1 << 2 + if err := func() error { + if err := s.FeeMoment.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"fee_moment\"") + } + case "description": + if err := func() error { + s.Description.Reset() + if err := s.Description.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"description\"") + } + case "balance": + requiredBitSet[0] |= 1 << 4 + if err := func() error { + if err := s.Balance.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"balance\"") + } + case "payout_balance": + requiredBitSet[0] |= 1 << 5 + if err := func() error { + if err := s.PayoutBalance.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"payout_balance\"") + } + case "status": + requiredBitSet[0] |= 1 << 6 + if err := func() error { + if err := s.Status.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"status\"") + } + case "created_at": + requiredBitSet[0] |= 1 << 7 + if err := func() error { + v, err := json.DecodeDateTime(d) + s.CreatedAt = v + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"created_at\"") + } + case "expires_at": + requiredBitSet[1] |= 1 << 0 + if err := func() error { + v, err := json.DecodeDateTime(d) + s.ExpiresAt = v + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"expires_at\"") + } + case "metadata": + if err := func() error { + s.Metadata.Reset() + if err := s.Metadata.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"metadata\"") + } + case "test": + requiredBitSet[1] |= 1 << 2 + if err := func() error { + if err := s.Test.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"test\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode SafeDeal") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [2]uint8{ + 0b11110111, + 0b00000101, + } { + 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(jsonFieldsNameOfSafeDeal) { + name = jsonFieldsNameOfSafeDeal[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 *SafeDeal) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *SafeDeal) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *SafeDealBalance) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *SafeDealBalance) encodeFields(e *jx.Encoder) { + { + e.FieldStart("value") + e.Str(s.Value) + } + { + e.FieldStart("currency") + s.Currency.Encode(e) + } +} + +var jsonFieldsNameOfSafeDealBalance = [2]string{ + 0: "value", + 1: "currency", +} + +// Decode decodes SafeDealBalance from json. +func (s *SafeDealBalance) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode SafeDealBalance to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "value": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + v, err := d.Str() + s.Value = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"value\"") + } + case "currency": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + if err := s.Currency.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"currency\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode SafeDealBalance") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000011, + } { + 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(jsonFieldsNameOfSafeDealBalance) { + name = jsonFieldsNameOfSafeDealBalance[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 *SafeDealBalance) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *SafeDealBalance) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *SafeDealPayoutBalance) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *SafeDealPayoutBalance) encodeFields(e *jx.Encoder) { + { + e.FieldStart("value") + e.Str(s.Value) + } + { + e.FieldStart("currency") + s.Currency.Encode(e) + } +} + +var jsonFieldsNameOfSafeDealPayoutBalance = [2]string{ + 0: "value", + 1: "currency", +} + +// Decode decodes SafeDealPayoutBalance from json. +func (s *SafeDealPayoutBalance) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode SafeDealPayoutBalance to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "value": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + v, err := d.Str() + s.Value = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"value\"") + } + case "currency": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + if err := s.Currency.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"currency\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode SafeDealPayoutBalance") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000011, + } { + 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(jsonFieldsNameOfSafeDealPayoutBalance) { + name = jsonFieldsNameOfSafeDealPayoutBalance[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 *SafeDealPayoutBalance) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *SafeDealPayoutBalance) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *SafeDealRequest) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *SafeDealRequest) encodeFields(e *jx.Encoder) { + { + e.FieldStart("type") + s.Type.Encode(e) + } + { + e.FieldStart("fee_moment") + s.FeeMoment.Encode(e) + } + { + if s.Metadata.Set { + e.FieldStart("metadata") + s.Metadata.Encode(e) + } + } + { + if s.Description.Set { + e.FieldStart("description") + s.Description.Encode(e) + } + } +} + +var jsonFieldsNameOfSafeDealRequest = [4]string{ + 0: "type", + 1: "fee_moment", + 2: "metadata", + 3: "description", +} + +// Decode decodes SafeDealRequest from json. +func (s *SafeDealRequest) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode SafeDealRequest to nil") + } + var requiredBitSet [1]uint8 + s.setDefaults() + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "type": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + if err := s.Type.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"type\"") + } + case "fee_moment": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + if err := s.FeeMoment.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"fee_moment\"") + } + case "metadata": + if err := func() error { + s.Metadata.Reset() + if err := s.Metadata.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"metadata\"") + } + case "description": + if err := func() error { + s.Description.Reset() + if err := s.Description.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"description\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode SafeDealRequest") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000011, + } { + 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(jsonFieldsNameOfSafeDealRequest) { + name = jsonFieldsNameOfSafeDealRequest[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 *SafeDealRequest) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *SafeDealRequest) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes SavePaymentMethodAttribute as json. +func (s SavePaymentMethodAttribute) Encode(e *jx.Encoder) { + unwrapped := bool(s) + + e.Bool(unwrapped) +} + +// Decode decodes SavePaymentMethodAttribute from json. +func (s *SavePaymentMethodAttribute) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode SavePaymentMethodAttribute to nil") + } + var unwrapped bool + if err := func() error { + v, err := d.Bool() + unwrapped = bool(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "alias") + } + *s = SavePaymentMethodAttribute(unwrapped) + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s SavePaymentMethodAttribute) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *SavePaymentMethodAttribute) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *SavePaymentMethodBankCard) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *SavePaymentMethodBankCard) encodeFields(e *jx.Encoder) { + { + e.FieldStart("type") + s.Type.Encode(e) + } + { + e.FieldStart("id") + e.Str(s.ID) + } + { + e.FieldStart("saved") + e.Bool(s.Saved) + } + { + e.FieldStart("status") + s.Status.Encode(e) + } + { + e.FieldStart("holder") + s.Holder.Encode(e) + } + { + if s.Title.Set { + e.FieldStart("title") + s.Title.Encode(e) + } + } + { + if s.Confirmation.Set { + e.FieldStart("confirmation") + s.Confirmation.Encode(e) + } + } + { + if s.Card.Set { + e.FieldStart("card") + s.Card.Encode(e) + } + } +} + +var jsonFieldsNameOfSavePaymentMethodBankCard = [8]string{ + 0: "type", + 1: "id", + 2: "saved", + 3: "status", + 4: "holder", + 5: "title", + 6: "confirmation", + 7: "card", +} + +// Decode decodes SavePaymentMethodBankCard from json. +func (s *SavePaymentMethodBankCard) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode SavePaymentMethodBankCard to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "type": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + if err := s.Type.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"type\"") + } + case "id": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + v, err := d.Str() + s.ID = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"id\"") + } + case "saved": + requiredBitSet[0] |= 1 << 2 + if err := func() error { + v, err := d.Bool() + s.Saved = bool(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"saved\"") + } + case "status": + requiredBitSet[0] |= 1 << 3 + if err := func() error { + if err := s.Status.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"status\"") + } + case "holder": + requiredBitSet[0] |= 1 << 4 + if err := func() error { + if err := s.Holder.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"holder\"") + } + case "title": + if err := func() error { + s.Title.Reset() + if err := s.Title.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"title\"") + } + case "confirmation": + if err := func() error { + s.Confirmation.Reset() + if err := s.Confirmation.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"confirmation\"") + } + case "card": + if err := func() error { + s.Card.Reset() + if err := s.Card.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"card\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode SavePaymentMethodBankCard") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00011111, + } { + 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(jsonFieldsNameOfSavePaymentMethodBankCard) { + name = jsonFieldsNameOfSavePaymentMethodBankCard[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 *SavePaymentMethodBankCard) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *SavePaymentMethodBankCard) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes SavePaymentMethodBankCardConfirmation as json. +func (s SavePaymentMethodBankCardConfirmation) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +func (s SavePaymentMethodBankCardConfirmation) encodeFields(e *jx.Encoder) { + switch s.Type { + case PaymentMethodsConfirmationRedirectSavePaymentMethodBankCardConfirmation: + e.FieldStart("type") + e.Str("redirect") + { + s := s.PaymentMethodsConfirmationRedirect + { + e.FieldStart("confirmation_url") + e.Str(s.ConfirmationURL) + } + { + if s.Enforce.Set { + e.FieldStart("enforce") + s.Enforce.Encode(e) + } + } + { + if s.ReturnURL.Set { + e.FieldStart("return_url") + s.ReturnURL.Encode(e) + } + } + } + } +} + +// Decode decodes SavePaymentMethodBankCardConfirmation from json. +func (s *SavePaymentMethodBankCardConfirmation) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode SavePaymentMethodBankCardConfirmation to nil") + } + // Sum type discriminator. + if typ := d.Next(); typ != jx.Object { + return errors.Errorf("unexpected json type %q", typ) + } + + var found bool + if err := d.Capture(func(d *jx.Decoder) error { + return d.ObjBytes(func(d *jx.Decoder, key []byte) error { + if found { + return d.Skip() + } + switch string(key) { + case "type": + typ, err := d.Str() + if err != nil { + return err + } + switch typ { + case "redirect": + s.Type = PaymentMethodsConfirmationRedirectSavePaymentMethodBankCardConfirmation + found = true + default: + return errors.Errorf("unknown type %s", typ) + } + return nil + } + return d.Skip() + }) + }); err != nil { + return errors.Wrap(err, "capture") + } + if !found { + return errors.New("unable to detect sum type variant") + } + switch s.Type { + case PaymentMethodsConfirmationRedirectSavePaymentMethodBankCardConfirmation: + if err := s.PaymentMethodsConfirmationRedirect.Decode(d); err != nil { + return err + } + default: + return errors.Errorf("inferred invalid type: %s", s.Type) + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s SavePaymentMethodBankCardConfirmation) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *SavePaymentMethodBankCardConfirmation) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *SavePaymentMethodBankCardHolder) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *SavePaymentMethodBankCardHolder) encodeFields(e *jx.Encoder) { + { + e.FieldStart("account_id") + s.AccountID.Encode(e) + } + { + if s.GatewayID.Set { + e.FieldStart("gateway_id") + s.GatewayID.Encode(e) + } + } +} + +var jsonFieldsNameOfSavePaymentMethodBankCardHolder = [2]string{ + 0: "account_id", + 1: "gateway_id", +} + +// Decode decodes SavePaymentMethodBankCardHolder from json. +func (s *SavePaymentMethodBankCardHolder) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode SavePaymentMethodBankCardHolder to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "account_id": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + if err := s.AccountID.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"account_id\"") + } + case "gateway_id": + if err := func() error { + s.GatewayID.Reset() + if err := s.GatewayID.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"gateway_id\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode SavePaymentMethodBankCardHolder") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000001, + } { + 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(jsonFieldsNameOfSavePaymentMethodBankCardHolder) { + name = jsonFieldsNameOfSavePaymentMethodBankCardHolder[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 *SavePaymentMethodBankCardHolder) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *SavePaymentMethodBankCardHolder) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *SavePaymentMethodDataBankCard) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *SavePaymentMethodDataBankCard) encodeFields(e *jx.Encoder) { + { + e.FieldStart("type") + s.Type.Encode(e) + } + { + if s.Holder.Set { + e.FieldStart("holder") + s.Holder.Encode(e) + } + } + { + if s.ClientIP.Set { + e.FieldStart("client_ip") + s.ClientIP.Encode(e) + } + } + { + if s.Confirmation.Set { + e.FieldStart("confirmation") + s.Confirmation.Encode(e) + } + } + { + if s.Card.Set { + e.FieldStart("card") + s.Card.Encode(e) + } + } +} + +var jsonFieldsNameOfSavePaymentMethodDataBankCard = [5]string{ + 0: "type", + 1: "holder", + 2: "client_ip", + 3: "confirmation", + 4: "card", +} + +// Decode decodes SavePaymentMethodDataBankCard from json. +func (s *SavePaymentMethodDataBankCard) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode SavePaymentMethodDataBankCard to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "type": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + if err := s.Type.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"type\"") + } + case "holder": + if err := func() error { + s.Holder.Reset() + if err := s.Holder.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"holder\"") + } + case "client_ip": + if err := func() error { + s.ClientIP.Reset() + if err := s.ClientIP.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"client_ip\"") + } + case "confirmation": + if err := func() error { + s.Confirmation.Reset() + if err := s.Confirmation.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"confirmation\"") + } + case "card": + if err := func() error { + s.Card.Reset() + if err := s.Card.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"card\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode SavePaymentMethodDataBankCard") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000001, + } { + 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(jsonFieldsNameOfSavePaymentMethodDataBankCard) { + name = jsonFieldsNameOfSavePaymentMethodDataBankCard[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 *SavePaymentMethodDataBankCard) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *SavePaymentMethodDataBankCard) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *SavePaymentMethodDataBankCardHolder) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *SavePaymentMethodDataBankCardHolder) encodeFields(e *jx.Encoder) { + { + e.FieldStart("gateway_id") + s.GatewayID.Encode(e) + } +} + +var jsonFieldsNameOfSavePaymentMethodDataBankCardHolder = [1]string{ + 0: "gateway_id", +} + +// Decode decodes SavePaymentMethodDataBankCardHolder from json. +func (s *SavePaymentMethodDataBankCardHolder) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode SavePaymentMethodDataBankCardHolder to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "gateway_id": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + if err := s.GatewayID.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"gateway_id\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode SavePaymentMethodDataBankCardHolder") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000001, + } { + 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(jsonFieldsNameOfSavePaymentMethodDataBankCardHolder) { + name = jsonFieldsNameOfSavePaymentMethodDataBankCardHolder[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 *SavePaymentMethodDataBankCardHolder) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *SavePaymentMethodDataBankCardHolder) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes SavePaymentMethodDataBankCardType as json. +func (s SavePaymentMethodDataBankCardType) Encode(e *jx.Encoder) { + e.Str(string(s)) +} + +// Decode decodes SavePaymentMethodDataBankCardType from json. +func (s *SavePaymentMethodDataBankCardType) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode SavePaymentMethodDataBankCardType to nil") + } + v, err := d.StrBytes() + if err != nil { + return err + } + // Try to use constant string. + switch SavePaymentMethodDataBankCardType(v) { + case SavePaymentMethodDataBankCardTypeBankCard: + *s = SavePaymentMethodDataBankCardTypeBankCard + default: + *s = SavePaymentMethodDataBankCardType(v) + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s SavePaymentMethodDataBankCardType) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *SavePaymentMethodDataBankCardType) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes SavePaymentMethodType as json. +func (s SavePaymentMethodType) Encode(e *jx.Encoder) { + e.Str(string(s)) +} + +// Decode decodes SavePaymentMethodType from json. +func (s *SavePaymentMethodType) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode SavePaymentMethodType to nil") + } + v, err := d.StrBytes() + if err != nil { + return err + } + // Try to use constant string. + switch SavePaymentMethodType(v) { + case SavePaymentMethodTypeBankCard: + *s = SavePaymentMethodTypeBankCard + default: + *s = SavePaymentMethodType(v) + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s SavePaymentMethodType) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *SavePaymentMethodType) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes SbpBankBic as json. +func (s SbpBankBic) Encode(e *jx.Encoder) { + unwrapped := string(s) + + e.Str(unwrapped) +} + +// Decode decodes SbpBankBic from json. +func (s *SbpBankBic) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode SbpBankBic to nil") + } + var unwrapped string + if err := func() error { + v, err := d.Str() + unwrapped = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "alias") + } + *s = SbpBankBic(unwrapped) + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s SbpBankBic) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *SbpBankBic) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes SbpBankId as json. +func (s SbpBankId) Encode(e *jx.Encoder) { + unwrapped := string(s) + + e.Str(unwrapped) +} + +// Decode decodes SbpBankId from json. +func (s *SbpBankId) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode SbpBankId to nil") + } + var unwrapped string + if err := func() error { + v, err := d.Str() + unwrapped = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "alias") + } + *s = SbpBankId(unwrapped) + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s SbpBankId) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *SbpBankId) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes SbpBanksGetInternalServerError as json. +func (s *SbpBanksGetInternalServerError) Encode(e *jx.Encoder) { + unwrapped := (*TooManyRequests)(s) + + unwrapped.Encode(e) +} + +// Decode decodes SbpBanksGetInternalServerError from json. +func (s *SbpBanksGetInternalServerError) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode SbpBanksGetInternalServerError to nil") + } + var unwrapped TooManyRequests + if err := func() error { + if err := unwrapped.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "alias") + } + *s = SbpBanksGetInternalServerError(unwrapped) + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s *SbpBanksGetInternalServerError) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *SbpBanksGetInternalServerError) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *SbpBanksGetOK) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *SbpBanksGetOK) encodeFields(e *jx.Encoder) { + { + e.FieldStart("type") + s.Type.Encode(e) + } + { + e.FieldStart("items") + e.ArrStart() + for _, elem := range s.Items { + elem.Encode(e) + } + e.ArrEnd() + } +} + +var jsonFieldsNameOfSbpBanksGetOK = [2]string{ + 0: "type", + 1: "items", +} + +// Decode decodes SbpBanksGetOK from json. +func (s *SbpBanksGetOK) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode SbpBanksGetOK to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "type": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + if err := s.Type.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"type\"") + } + case "items": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + s.Items = make([]SbpParticipantBank, 0) + if err := d.Arr(func(d *jx.Decoder) error { + var elem SbpParticipantBank + if err := elem.Decode(d); err != nil { + return err + } + s.Items = append(s.Items, elem) + return nil + }); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"items\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode SbpBanksGetOK") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000011, + } { + 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(jsonFieldsNameOfSbpBanksGetOK) { + name = jsonFieldsNameOfSbpBanksGetOK[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 *SbpBanksGetOK) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *SbpBanksGetOK) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes SbpBanksGetOKType as json. +func (s SbpBanksGetOKType) Encode(e *jx.Encoder) { + e.Str(string(s)) +} + +// Decode decodes SbpBanksGetOKType from json. +func (s *SbpBanksGetOKType) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode SbpBanksGetOKType to nil") + } + v, err := d.StrBytes() + if err != nil { + return err + } + // Try to use constant string. + switch SbpBanksGetOKType(v) { + case SbpBanksGetOKTypeList: + *s = SbpBanksGetOKTypeList + default: + *s = SbpBanksGetOKType(v) + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s SbpBanksGetOKType) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *SbpBanksGetOKType) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes SbpBanksGetTooManyRequests as json. +func (s *SbpBanksGetTooManyRequests) Encode(e *jx.Encoder) { + unwrapped := (*TooManyRequests)(s) + + unwrapped.Encode(e) +} + +// Decode decodes SbpBanksGetTooManyRequests from json. +func (s *SbpBanksGetTooManyRequests) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode SbpBanksGetTooManyRequests to nil") + } + var unwrapped TooManyRequests + if err := func() error { + if err := unwrapped.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "alias") + } + *s = SbpBanksGetTooManyRequests(unwrapped) + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s *SbpBanksGetTooManyRequests) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *SbpBanksGetTooManyRequests) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *SbpParticipantBank) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *SbpParticipantBank) encodeFields(e *jx.Encoder) { + { + e.FieldStart("bank_id") + s.BankID.Encode(e) + } + { + e.FieldStart("name") + e.Str(s.Name) + } + { + e.FieldStart("bic") + s.Bic.Encode(e) + } +} + +var jsonFieldsNameOfSbpParticipantBank = [3]string{ + 0: "bank_id", + 1: "name", + 2: "bic", +} + +// Decode decodes SbpParticipantBank from json. +func (s *SbpParticipantBank) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode SbpParticipantBank to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "bank_id": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + if err := s.BankID.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"bank_id\"") + } + case "name": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + v, err := d.Str() + s.Name = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"name\"") + } + case "bic": + requiredBitSet[0] |= 1 << 2 + if err := func() error { + if err := s.Bic.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"bic\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode SbpParticipantBank") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000111, + } { + 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(jsonFieldsNameOfSbpParticipantBank) { + name = jsonFieldsNameOfSbpParticipantBank[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 *SbpParticipantBank) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *SbpParticipantBank) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *SbpPayerBankDetails) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *SbpPayerBankDetails) encodeFields(e *jx.Encoder) { + { + e.FieldStart("bank_id") + s.BankID.Encode(e) + } + { + e.FieldStart("bic") + e.Str(s.Bic) + } +} + +var jsonFieldsNameOfSbpPayerBankDetails = [2]string{ + 0: "bank_id", + 1: "bic", +} + +// Decode decodes SbpPayerBankDetails from json. +func (s *SbpPayerBankDetails) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode SbpPayerBankDetails to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "bank_id": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + if err := s.BankID.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"bank_id\"") + } + case "bic": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + v, err := d.Str() + s.Bic = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"bic\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode SbpPayerBankDetails") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000011, + } { + 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(jsonFieldsNameOfSbpPayerBankDetails) { + name = jsonFieldsNameOfSbpPayerBankDetails[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 *SbpPayerBankDetails) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *SbpPayerBankDetails) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *SbpPayoutRecipientPersonalDataRequest) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *SbpPayoutRecipientPersonalDataRequest) encodeFields(e *jx.Encoder) { + { + e.FieldStart("type") + s.Type.Encode(e) + } + { + if s.Metadata.Set { + e.FieldStart("metadata") + s.Metadata.Encode(e) + } + } + { + e.FieldStart("last_name") + s.LastName.Encode(e) + } + { + e.FieldStart("first_name") + s.FirstName.Encode(e) + } + { + if s.MiddleName.Set { + e.FieldStart("middle_name") + s.MiddleName.Encode(e) + } + } +} + +var jsonFieldsNameOfSbpPayoutRecipientPersonalDataRequest = [5]string{ + 0: "type", + 1: "metadata", + 2: "last_name", + 3: "first_name", + 4: "middle_name", +} + +// Decode decodes SbpPayoutRecipientPersonalDataRequest from json. +func (s *SbpPayoutRecipientPersonalDataRequest) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode SbpPayoutRecipientPersonalDataRequest to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "type": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + if err := s.Type.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"type\"") + } + case "metadata": + if err := func() error { + s.Metadata.Reset() + if err := s.Metadata.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"metadata\"") + } + case "last_name": + requiredBitSet[0] |= 1 << 2 + if err := func() error { + if err := s.LastName.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"last_name\"") + } + case "first_name": + requiredBitSet[0] |= 1 << 3 + if err := func() error { + if err := s.FirstName.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"first_name\"") + } + case "middle_name": + if err := func() error { + s.MiddleName.Reset() + if err := s.MiddleName.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"middle_name\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode SbpPayoutRecipientPersonalDataRequest") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00001101, + } { + 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(jsonFieldsNameOfSbpPayoutRecipientPersonalDataRequest) { + name = jsonFieldsNameOfSbpPayoutRecipientPersonalDataRequest[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 *SbpPayoutRecipientPersonalDataRequest) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *SbpPayoutRecipientPersonalDataRequest) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *SbpRefundMethod) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *SbpRefundMethod) encodeFields(e *jx.Encoder) { + { + e.FieldStart("type") + s.Type.Encode(e) + } + { + if s.SbpOperationID.Set { + e.FieldStart("sbp_operation_id") + s.SbpOperationID.Encode(e) + } + } +} + +var jsonFieldsNameOfSbpRefundMethod = [2]string{ + 0: "type", + 1: "sbp_operation_id", +} + +// Decode decodes SbpRefundMethod from json. +func (s *SbpRefundMethod) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode SbpRefundMethod to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "type": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + if err := s.Type.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"type\"") + } + case "sbp_operation_id": + if err := func() error { + s.SbpOperationID.Reset() + if err := s.SbpOperationID.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"sbp_operation_id\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode SbpRefundMethod") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000001, + } { + 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(jsonFieldsNameOfSbpRefundMethod) { + name = jsonFieldsNameOfSbpRefundMethod[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 *SbpRefundMethod) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *SbpRefundMethod) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes SelfEmployedId as json. +func (s SelfEmployedId) Encode(e *jx.Encoder) { + unwrapped := string(s) + + e.Str(unwrapped) +} + +// Decode decodes SelfEmployedId from json. +func (s *SelfEmployedId) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode SelfEmployedId to nil") + } + var unwrapped string + if err := func() error { + v, err := d.Str() + unwrapped = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "alias") + } + *s = SelfEmployedId(unwrapped) + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s SelfEmployedId) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *SelfEmployedId) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *Settlement) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *Settlement) encodeFields(e *jx.Encoder) { + { + e.FieldStart("type") + s.Type.Encode(e) + } + { + e.FieldStart("amount") + s.Amount.Encode(e) + } +} + +var jsonFieldsNameOfSettlement = [2]string{ + 0: "type", + 1: "amount", +} + +// Decode decodes Settlement from json. +func (s *Settlement) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode Settlement to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "type": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + if err := s.Type.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"type\"") + } + case "amount": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + if err := s.Amount.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"amount\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode Settlement") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000011, + } { + 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(jsonFieldsNameOfSettlement) { + name = jsonFieldsNameOfSettlement[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 *Settlement) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *Settlement) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *SettlementAmount) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *SettlementAmount) encodeFields(e *jx.Encoder) { + { + e.FieldStart("value") + e.Str(s.Value) + } + { + e.FieldStart("currency") + s.Currency.Encode(e) + } +} + +var jsonFieldsNameOfSettlementAmount = [2]string{ + 0: "value", + 1: "currency", +} + +// Decode decodes SettlementAmount from json. +func (s *SettlementAmount) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode SettlementAmount to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "value": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + v, err := d.Str() + s.Value = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"value\"") + } + case "currency": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + if err := s.Currency.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"currency\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode SettlementAmount") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000011, + } { + 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(jsonFieldsNameOfSettlementAmount) { + name = jsonFieldsNameOfSettlementAmount[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 *SettlementAmount) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *SettlementAmount) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes SettlementItemType as json. +func (s SettlementItemType) Encode(e *jx.Encoder) { + e.Str(string(s)) +} + +// Decode decodes SettlementItemType from json. +func (s *SettlementItemType) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode SettlementItemType to nil") + } + v, err := d.StrBytes() + if err != nil { + return err + } + // Try to use constant string. + switch SettlementItemType(v) { + case SettlementItemTypePayout: + *s = SettlementItemTypePayout + default: + *s = SettlementItemType(v) + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s SettlementItemType) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *SettlementItemType) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes SettlementPaymentArray as json. +func (s SettlementPaymentArray) Encode(e *jx.Encoder) { + unwrapped := []SettlementPaymentArrayItem(s) + + e.ArrStart() + for _, elem := range unwrapped { + elem.Encode(e) + } + e.ArrEnd() +} + +// Decode decodes SettlementPaymentArray from json. +func (s *SettlementPaymentArray) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode SettlementPaymentArray to nil") + } + var unwrapped []SettlementPaymentArrayItem + if err := func() error { + unwrapped = make([]SettlementPaymentArrayItem, 0) + if err := d.Arr(func(d *jx.Decoder) error { + var elem SettlementPaymentArrayItem + if err := elem.Decode(d); err != nil { + return err + } + unwrapped = append(unwrapped, elem) + return nil + }); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "alias") + } + *s = SettlementPaymentArray(unwrapped) + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s SettlementPaymentArray) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *SettlementPaymentArray) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes SettlementPaymentArrayItem as json. +func (s SettlementPaymentArrayItem) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +func (s SettlementPaymentArrayItem) encodeFields(e *jx.Encoder) { + switch s.Type { + case SettlementPayoutPaymentSettlementPaymentArrayItem: + e.FieldStart("type") + e.Str("SettlementPayoutPayment") + { + s := s.SettlementPayoutPayment + { + e.FieldStart("amount") + s.Amount.Encode(e) + } + } + } +} + +// Decode decodes SettlementPaymentArrayItem from json. +func (s *SettlementPaymentArrayItem) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode SettlementPaymentArrayItem to nil") + } + // Sum type discriminator. + if typ := d.Next(); typ != jx.Object { + return errors.Errorf("unexpected json type %q", typ) + } + + var found bool + if err := d.Capture(func(d *jx.Decoder) error { + return d.ObjBytes(func(d *jx.Decoder, key []byte) error { + if found { + return d.Skip() + } + switch string(key) { + case "type": + typ, err := d.Str() + if err != nil { + return err + } + switch typ { + case "SettlementPayoutPayment": + s.Type = SettlementPayoutPaymentSettlementPaymentArrayItem + found = true + default: + return errors.Errorf("unknown type %s", typ) + } + return nil + } + return d.Skip() + }) + }); err != nil { + return errors.Wrap(err, "capture") + } + if !found { + return errors.New("unable to detect sum type variant") + } + switch s.Type { + case SettlementPayoutPaymentSettlementPaymentArrayItem: + if err := s.SettlementPayoutPayment.Decode(d); err != nil { + return err + } + default: + return errors.Errorf("inferred invalid type: %s", s.Type) + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s SettlementPaymentArrayItem) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *SettlementPaymentArrayItem) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *SettlementPayoutPayment) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *SettlementPayoutPayment) encodeFields(e *jx.Encoder) { + { + e.FieldStart("type") + s.Type.Encode(e) + } + { + e.FieldStart("amount") + s.Amount.Encode(e) + } +} + +var jsonFieldsNameOfSettlementPayoutPayment = [2]string{ + 0: "type", + 1: "amount", +} + +// Decode decodes SettlementPayoutPayment from json. +func (s *SettlementPayoutPayment) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode SettlementPayoutPayment to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "type": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + if err := s.Type.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"type\"") + } + case "amount": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + if err := s.Amount.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"amount\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode SettlementPayoutPayment") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000011, + } { + 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(jsonFieldsNameOfSettlementPayoutPayment) { + name = jsonFieldsNameOfSettlementPayoutPayment[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 *SettlementPayoutPayment) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *SettlementPayoutPayment) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *SettlementPayoutPaymentAmount) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *SettlementPayoutPaymentAmount) encodeFields(e *jx.Encoder) { + { + e.FieldStart("value") + e.Str(s.Value) + } + { + e.FieldStart("currency") + s.Currency.Encode(e) + } +} + +var jsonFieldsNameOfSettlementPayoutPaymentAmount = [2]string{ + 0: "value", + 1: "currency", +} + +// Decode decodes SettlementPayoutPaymentAmount from json. +func (s *SettlementPayoutPaymentAmount) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode SettlementPayoutPaymentAmount to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "value": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + v, err := d.Str() + s.Value = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"value\"") + } + case "currency": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + if err := s.Currency.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"currency\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode SettlementPayoutPaymentAmount") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000011, + } { + 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(jsonFieldsNameOfSettlementPayoutPaymentAmount) { + name = jsonFieldsNameOfSettlementPayoutPaymentAmount[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 *SettlementPayoutPaymentAmount) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *SettlementPayoutPaymentAmount) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *SettlementPayoutRefund) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *SettlementPayoutRefund) encodeFields(e *jx.Encoder) { + { + e.FieldStart("type") + s.Type.Encode(e) + } + { + e.FieldStart("amount") + s.Amount.Encode(e) + } +} + +var jsonFieldsNameOfSettlementPayoutRefund = [2]string{ + 0: "type", + 1: "amount", +} + +// Decode decodes SettlementPayoutRefund from json. +func (s *SettlementPayoutRefund) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode SettlementPayoutRefund to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "type": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + if err := s.Type.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"type\"") + } + case "amount": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + if err := s.Amount.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"amount\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode SettlementPayoutRefund") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000011, + } { + 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(jsonFieldsNameOfSettlementPayoutRefund) { + name = jsonFieldsNameOfSettlementPayoutRefund[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 *SettlementPayoutRefund) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *SettlementPayoutRefund) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *SettlementPayoutRefundAmount) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *SettlementPayoutRefundAmount) encodeFields(e *jx.Encoder) { + { + e.FieldStart("value") + e.Str(s.Value) + } + { + e.FieldStart("currency") + s.Currency.Encode(e) + } +} + +var jsonFieldsNameOfSettlementPayoutRefundAmount = [2]string{ + 0: "value", + 1: "currency", +} + +// Decode decodes SettlementPayoutRefundAmount from json. +func (s *SettlementPayoutRefundAmount) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode SettlementPayoutRefundAmount to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "value": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + v, err := d.Str() + s.Value = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"value\"") + } + case "currency": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + if err := s.Currency.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"currency\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode SettlementPayoutRefundAmount") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000011, + } { + 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(jsonFieldsNameOfSettlementPayoutRefundAmount) { + name = jsonFieldsNameOfSettlementPayoutRefundAmount[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 *SettlementPayoutRefundAmount) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *SettlementPayoutRefundAmount) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes SettlementRefundArray as json. +func (s SettlementRefundArray) Encode(e *jx.Encoder) { + unwrapped := []SettlementRefundArrayItem(s) + + e.ArrStart() + for _, elem := range unwrapped { + elem.Encode(e) + } + e.ArrEnd() +} + +// Decode decodes SettlementRefundArray from json. +func (s *SettlementRefundArray) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode SettlementRefundArray to nil") + } + var unwrapped []SettlementRefundArrayItem + if err := func() error { + unwrapped = make([]SettlementRefundArrayItem, 0) + if err := d.Arr(func(d *jx.Decoder) error { + var elem SettlementRefundArrayItem + if err := elem.Decode(d); err != nil { + return err + } + unwrapped = append(unwrapped, elem) + return nil + }); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "alias") + } + *s = SettlementRefundArray(unwrapped) + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s SettlementRefundArray) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *SettlementRefundArray) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes SettlementRefundArrayItem as json. +func (s SettlementRefundArrayItem) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +func (s SettlementRefundArrayItem) encodeFields(e *jx.Encoder) { + switch s.Type { + case SettlementPayoutRefundSettlementRefundArrayItem: + e.FieldStart("type") + e.Str("SettlementPayoutRefund") + { + s := s.SettlementPayoutRefund + { + e.FieldStart("amount") + s.Amount.Encode(e) + } + } + } +} + +// Decode decodes SettlementRefundArrayItem from json. +func (s *SettlementRefundArrayItem) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode SettlementRefundArrayItem to nil") + } + // Sum type discriminator. + if typ := d.Next(); typ != jx.Object { + return errors.Errorf("unexpected json type %q", typ) + } + + var found bool + if err := d.Capture(func(d *jx.Decoder) error { + return d.ObjBytes(func(d *jx.Decoder, key []byte) error { + if found { + return d.Skip() + } + switch string(key) { + case "type": + typ, err := d.Str() + if err != nil { + return err + } + switch typ { + case "SettlementPayoutRefund": + s.Type = SettlementPayoutRefundSettlementRefundArrayItem + found = true + default: + return errors.Errorf("unknown type %s", typ) + } + return nil + } + return d.Skip() + }) + }); err != nil { + return errors.Wrap(err, "capture") + } + if !found { + return errors.New("unable to detect sum type variant") + } + switch s.Type { + case SettlementPayoutRefundSettlementRefundArrayItem: + if err := s.SettlementPayoutRefund.Decode(d); err != nil { + return err + } + default: + return errors.Errorf("inferred invalid type: %s", s.Type) + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s SettlementRefundArrayItem) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *SettlementRefundArrayItem) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes SettlementType as json. +func (s SettlementType) Encode(e *jx.Encoder) { + e.Str(string(s)) +} + +// Decode decodes SettlementType from json. +func (s *SettlementType) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode SettlementType to nil") + } + v, err := d.StrBytes() + if err != nil { + return err + } + // Try to use constant string. + switch SettlementType(v) { + case SettlementTypeCashless: + *s = SettlementTypeCashless + case SettlementTypePrepayment: + *s = SettlementTypePrepayment + case SettlementTypePostpayment: + *s = SettlementTypePostpayment + case SettlementTypeConsideration: + *s = SettlementTypeConsideration + default: + *s = SettlementType(v) + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s SettlementType) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *SettlementType) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes TaxSystemCode as json. +func (s TaxSystemCode) Encode(e *jx.Encoder) { + unwrapped := int32(s) + + e.Int32(unwrapped) +} + +// Decode decodes TaxSystemCode from json. +func (s *TaxSystemCode) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode TaxSystemCode to nil") + } + var unwrapped int32 + if err := func() error { + v, err := d.Int32() + unwrapped = int32(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "alias") + } + *s = TaxSystemCode(unwrapped) + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s TaxSystemCode) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *TaxSystemCode) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes Test as json. +func (s Test) Encode(e *jx.Encoder) { + unwrapped := bool(s) + + e.Bool(unwrapped) +} + +// Decode decodes Test from json. +func (s *Test) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode Test to nil") + } + var unwrapped bool + if err := func() error { + v, err := d.Bool() + unwrapped = bool(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "alias") + } + *s = Test(unwrapped) + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s Test) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *Test) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *ThreeDSecureDetails) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *ThreeDSecureDetails) encodeFields(e *jx.Encoder) { + { + e.FieldStart("applied") + e.Bool(s.Applied) + } +} + +var jsonFieldsNameOfThreeDSecureDetails = [1]string{ + 0: "applied", +} + +// Decode decodes ThreeDSecureDetails from json. +func (s *ThreeDSecureDetails) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode ThreeDSecureDetails to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "applied": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + v, err := d.Bool() + s.Applied = bool(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"applied\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode ThreeDSecureDetails") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000001, + } { + 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(jsonFieldsNameOfThreeDSecureDetails) { + name = jsonFieldsNameOfThreeDSecureDetails[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 *ThreeDSecureDetails) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *ThreeDSecureDetails) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *TooManyRequests) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *TooManyRequests) encodeFields(e *jx.Encoder) { + { + if s.Type.Set { + e.FieldStart("type") + s.Type.Encode(e) + } + } + { + if s.ID.Set { + e.FieldStart("id") + s.ID.Encode(e) + } + } + { + if s.Description.Set { + e.FieldStart("description") + s.Description.Encode(e) + } + } + { + if s.Parameter.Set { + e.FieldStart("parameter") + s.Parameter.Encode(e) + } + } + { + if s.RetryAfter.Set { + e.FieldStart("retry_after") + s.RetryAfter.Encode(e) + } + } + { + if s.Code.Set { + e.FieldStart("code") + s.Code.Encode(e) + } + } +} + +var jsonFieldsNameOfTooManyRequests = [6]string{ + 0: "type", + 1: "id", + 2: "description", + 3: "parameter", + 4: "retry_after", + 5: "code", +} + +// Decode decodes TooManyRequests from json. +func (s *TooManyRequests) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode TooManyRequests to nil") + } + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "type": + if err := func() error { + s.Type.Reset() + if err := s.Type.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"type\"") + } + case "id": + if err := func() error { + s.ID.Reset() + if err := s.ID.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"id\"") + } + case "description": + if err := func() error { + s.Description.Reset() + if err := s.Description.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"description\"") + } + case "parameter": + if err := func() error { + s.Parameter.Reset() + if err := s.Parameter.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"parameter\"") + } + case "retry_after": + if err := func() error { + s.RetryAfter.Reset() + if err := s.RetryAfter.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"retry_after\"") + } + case "code": + if err := func() error { + s.Code.Reset() + if err := s.Code.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"code\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode TooManyRequests") + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s *TooManyRequests) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *TooManyRequests) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes TooManyRequestsCode as json. +func (s TooManyRequestsCode) Encode(e *jx.Encoder) { + e.Str(string(s)) +} + +// Decode decodes TooManyRequestsCode from json. +func (s *TooManyRequestsCode) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode TooManyRequestsCode to nil") + } + v, err := d.StrBytes() + if err != nil { + return err + } + // Try to use constant string. + switch TooManyRequestsCode(v) { + case TooManyRequestsCodeTooManyRequests: + *s = TooManyRequestsCodeTooManyRequests + default: + *s = TooManyRequestsCode(v) + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s TooManyRequestsCode) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *TooManyRequestsCode) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes TooManyRequestsType as json. +func (s TooManyRequestsType) Encode(e *jx.Encoder) { + e.Str(string(s)) +} + +// Decode decodes TooManyRequestsType from json. +func (s *TooManyRequestsType) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode TooManyRequestsType to nil") + } + v, err := d.StrBytes() + if err != nil { + return err + } + // Try to use constant string. + switch TooManyRequestsType(v) { + case TooManyRequestsTypeError: + *s = TooManyRequestsTypeError + default: + *s = TooManyRequestsType(v) + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s TooManyRequestsType) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *TooManyRequestsType) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *Transfer) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *Transfer) encodeFields(e *jx.Encoder) { + { + e.FieldStart("account_id") + e.Str(s.AccountID) + } + { + e.FieldStart("amount") + s.Amount.Encode(e) + } + { + e.FieldStart("status") + s.Status.Encode(e) + } + { + if s.PlatformFeeAmount.Set { + e.FieldStart("platform_fee_amount") + s.PlatformFeeAmount.Encode(e) + } + } + { + if s.Description.Set { + e.FieldStart("description") + s.Description.Encode(e) + } + } + { + if s.Metadata.Set { + e.FieldStart("metadata") + s.Metadata.Encode(e) + } + } +} + +var jsonFieldsNameOfTransfer = [6]string{ + 0: "account_id", + 1: "amount", + 2: "status", + 3: "platform_fee_amount", + 4: "description", + 5: "metadata", +} + +// Decode decodes Transfer from json. +func (s *Transfer) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode Transfer to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "account_id": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + v, err := d.Str() + s.AccountID = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"account_id\"") + } + case "amount": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + if err := s.Amount.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"amount\"") + } + case "status": + requiredBitSet[0] |= 1 << 2 + if err := func() error { + if err := s.Status.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"status\"") + } + case "platform_fee_amount": + if err := func() error { + s.PlatformFeeAmount.Reset() + if err := s.PlatformFeeAmount.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"platform_fee_amount\"") + } + case "description": + if err := func() error { + s.Description.Reset() + if err := s.Description.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"description\"") + } + case "metadata": + if err := func() error { + s.Metadata.Reset() + if err := s.Metadata.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"metadata\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode Transfer") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000111, + } { + 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(jsonFieldsNameOfTransfer) { + name = jsonFieldsNameOfTransfer[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 *Transfer) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *Transfer) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *TransferAmount) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *TransferAmount) encodeFields(e *jx.Encoder) { + { + e.FieldStart("value") + e.Str(s.Value) + } + { + e.FieldStart("currency") + s.Currency.Encode(e) + } +} + +var jsonFieldsNameOfTransferAmount = [2]string{ + 0: "value", + 1: "currency", +} + +// Decode decodes TransferAmount from json. +func (s *TransferAmount) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode TransferAmount to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "value": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + v, err := d.Str() + s.Value = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"value\"") + } + case "currency": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + if err := s.Currency.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"currency\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode TransferAmount") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000011, + } { + 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(jsonFieldsNameOfTransferAmount) { + name = jsonFieldsNameOfTransferAmount[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 *TransferAmount) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *TransferAmount) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *TransferData) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *TransferData) encodeFields(e *jx.Encoder) { + { + e.FieldStart("account_id") + e.Str(s.AccountID) + } + { + e.FieldStart("amount") + s.Amount.Encode(e) + } + { + if s.PlatformFeeAmount.Set { + e.FieldStart("platform_fee_amount") + s.PlatformFeeAmount.Encode(e) + } + } +} + +var jsonFieldsNameOfTransferData = [3]string{ + 0: "account_id", + 1: "amount", + 2: "platform_fee_amount", +} + +// Decode decodes TransferData from json. +func (s *TransferData) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode TransferData to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "account_id": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + v, err := d.Str() + s.AccountID = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"account_id\"") + } + case "amount": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + if err := s.Amount.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"amount\"") + } + case "platform_fee_amount": + if err := func() error { + s.PlatformFeeAmount.Reset() + if err := s.PlatformFeeAmount.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"platform_fee_amount\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode TransferData") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000011, + } { + 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(jsonFieldsNameOfTransferData) { + name = jsonFieldsNameOfTransferData[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 *TransferData) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *TransferData) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *TransferDataAmount) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *TransferDataAmount) encodeFields(e *jx.Encoder) { + { + e.FieldStart("value") + e.Str(s.Value) + } + { + e.FieldStart("currency") + s.Currency.Encode(e) + } +} + +var jsonFieldsNameOfTransferDataAmount = [2]string{ + 0: "value", + 1: "currency", +} + +// Decode decodes TransferDataAmount from json. +func (s *TransferDataAmount) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode TransferDataAmount to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "value": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + v, err := d.Str() + s.Value = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"value\"") + } + case "currency": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + if err := s.Currency.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"currency\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode TransferDataAmount") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000011, + } { + 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(jsonFieldsNameOfTransferDataAmount) { + name = jsonFieldsNameOfTransferDataAmount[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 *TransferDataAmount) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *TransferDataAmount) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *TransferDataPayment) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *TransferDataPayment) encodeFields(e *jx.Encoder) { + { + e.FieldStart("account_id") + e.Str(s.AccountID) + } + { + e.FieldStart("amount") + s.Amount.Encode(e) + } + { + if s.PlatformFeeAmount.Set { + e.FieldStart("platform_fee_amount") + s.PlatformFeeAmount.Encode(e) + } + } + { + if s.Description.Set { + e.FieldStart("description") + s.Description.Encode(e) + } + } + { + if s.Metadata.Set { + e.FieldStart("metadata") + s.Metadata.Encode(e) + } + } +} + +var jsonFieldsNameOfTransferDataPayment = [5]string{ + 0: "account_id", + 1: "amount", + 2: "platform_fee_amount", + 3: "description", + 4: "metadata", +} + +// Decode decodes TransferDataPayment from json. +func (s *TransferDataPayment) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode TransferDataPayment to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "account_id": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + v, err := d.Str() + s.AccountID = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"account_id\"") + } + case "amount": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + if err := s.Amount.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"amount\"") + } + case "platform_fee_amount": + if err := func() error { + s.PlatformFeeAmount.Reset() + if err := s.PlatformFeeAmount.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"platform_fee_amount\"") + } + case "description": + if err := func() error { + s.Description.Reset() + if err := s.Description.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"description\"") + } + case "metadata": + if err := func() error { + s.Metadata.Reset() + if err := s.Metadata.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"metadata\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode TransferDataPayment") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000011, + } { + 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(jsonFieldsNameOfTransferDataPayment) { + name = jsonFieldsNameOfTransferDataPayment[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 *TransferDataPayment) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *TransferDataPayment) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *TransferDataPaymentAmount) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *TransferDataPaymentAmount) encodeFields(e *jx.Encoder) { + { + e.FieldStart("value") + e.Str(s.Value) + } + { + e.FieldStart("currency") + s.Currency.Encode(e) + } +} + +var jsonFieldsNameOfTransferDataPaymentAmount = [2]string{ + 0: "value", + 1: "currency", +} + +// Decode decodes TransferDataPaymentAmount from json. +func (s *TransferDataPaymentAmount) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode TransferDataPaymentAmount to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "value": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + v, err := d.Str() + s.Value = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"value\"") + } + case "currency": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + if err := s.Currency.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"currency\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode TransferDataPaymentAmount") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000011, + } { + 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(jsonFieldsNameOfTransferDataPaymentAmount) { + name = jsonFieldsNameOfTransferDataPaymentAmount[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 *TransferDataPaymentAmount) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *TransferDataPaymentAmount) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *TransferDataPaymentPlatformFeeAmount) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *TransferDataPaymentPlatformFeeAmount) encodeFields(e *jx.Encoder) { + { + e.FieldStart("value") + e.Str(s.Value) + } + { + e.FieldStart("currency") + s.Currency.Encode(e) + } +} + +var jsonFieldsNameOfTransferDataPaymentPlatformFeeAmount = [2]string{ + 0: "value", + 1: "currency", +} + +// Decode decodes TransferDataPaymentPlatformFeeAmount from json. +func (s *TransferDataPaymentPlatformFeeAmount) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode TransferDataPaymentPlatformFeeAmount to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "value": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + v, err := d.Str() + s.Value = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"value\"") + } + case "currency": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + if err := s.Currency.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"currency\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode TransferDataPaymentPlatformFeeAmount") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000011, + } { + 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(jsonFieldsNameOfTransferDataPaymentPlatformFeeAmount) { + name = jsonFieldsNameOfTransferDataPaymentPlatformFeeAmount[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 *TransferDataPaymentPlatformFeeAmount) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *TransferDataPaymentPlatformFeeAmount) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *TransferDataPlatformFeeAmount) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *TransferDataPlatformFeeAmount) encodeFields(e *jx.Encoder) { + { + e.FieldStart("value") + e.Str(s.Value) + } + { + e.FieldStart("currency") + s.Currency.Encode(e) + } +} + +var jsonFieldsNameOfTransferDataPlatformFeeAmount = [2]string{ + 0: "value", + 1: "currency", +} + +// Decode decodes TransferDataPlatformFeeAmount from json. +func (s *TransferDataPlatformFeeAmount) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode TransferDataPlatformFeeAmount to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "value": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + v, err := d.Str() + s.Value = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"value\"") + } + case "currency": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + if err := s.Currency.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"currency\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode TransferDataPlatformFeeAmount") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000011, + } { + 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(jsonFieldsNameOfTransferDataPlatformFeeAmount) { + name = jsonFieldsNameOfTransferDataPlatformFeeAmount[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 *TransferDataPlatformFeeAmount) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *TransferDataPlatformFeeAmount) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *TransferPlatformFeeAmount) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *TransferPlatformFeeAmount) encodeFields(e *jx.Encoder) { + { + e.FieldStart("value") + e.Str(s.Value) + } + { + e.FieldStart("currency") + s.Currency.Encode(e) + } +} + +var jsonFieldsNameOfTransferPlatformFeeAmount = [2]string{ + 0: "value", + 1: "currency", +} + +// Decode decodes TransferPlatformFeeAmount from json. +func (s *TransferPlatformFeeAmount) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode TransferPlatformFeeAmount to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "value": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + v, err := d.Str() + s.Value = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"value\"") + } + case "currency": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + if err := s.Currency.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"currency\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode TransferPlatformFeeAmount") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000011, + } { + 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(jsonFieldsNameOfTransferPlatformFeeAmount) { + name = jsonFieldsNameOfTransferPlatformFeeAmount[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 *TransferPlatformFeeAmount) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *TransferPlatformFeeAmount) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes TransferStatus as json. +func (s TransferStatus) Encode(e *jx.Encoder) { + e.Str(string(s)) +} + +// Decode decodes TransferStatus from json. +func (s *TransferStatus) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode TransferStatus to nil") + } + v, err := d.StrBytes() + if err != nil { + return err + } + // Try to use constant string. + switch TransferStatus(v) { + case TransferStatusPending: + *s = TransferStatusPending + case TransferStatusWaitingForCapture: + *s = TransferStatusWaitingForCapture + case TransferStatusSucceeded: + *s = TransferStatusSucceeded + case TransferStatusCanceled: + *s = TransferStatusCanceled + default: + *s = TransferStatus(v) + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s TransferStatus) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *TransferStatus) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *Webhook) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *Webhook) encodeFields(e *jx.Encoder) { + { + e.FieldStart("id") + e.Str(s.ID) + } + { + e.FieldStart("event") + s.Event.Encode(e) + } + { + e.FieldStart("url") + e.Str(s.URL) + } +} + +var jsonFieldsNameOfWebhook = [3]string{ + 0: "id", + 1: "event", + 2: "url", +} + +// Decode decodes Webhook from json. +func (s *Webhook) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode Webhook to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "id": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + v, err := d.Str() + s.ID = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"id\"") + } + case "event": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + if err := s.Event.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"event\"") + } + case "url": + requiredBitSet[0] |= 1 << 2 + if err := func() error { + v, err := d.Str() + s.URL = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"url\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode Webhook") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000111, + } { + 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(jsonFieldsNameOfWebhook) { + name = jsonFieldsNameOfWebhook[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 *Webhook) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *Webhook) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes WebhookEvent as json. +func (s WebhookEvent) Encode(e *jx.Encoder) { + e.Str(string(s)) +} + +// Decode decodes WebhookEvent from json. +func (s *WebhookEvent) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode WebhookEvent to nil") + } + v, err := d.StrBytes() + if err != nil { + return err + } + // Try to use constant string. + switch WebhookEvent(v) { + case WebhookEventPaymentWaitingForCapture: + *s = WebhookEventPaymentWaitingForCapture + case WebhookEventPaymentSucceeded: + *s = WebhookEventPaymentSucceeded + case WebhookEventPaymentCanceled: + *s = WebhookEventPaymentCanceled + case WebhookEventRefundSucceeded: + *s = WebhookEventRefundSucceeded + default: + *s = WebhookEvent(v) + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s WebhookEvent) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *WebhookEvent) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *WebhookList) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *WebhookList) encodeFields(e *jx.Encoder) { + { + e.FieldStart("type") + s.Type.Encode(e) + } + { + e.FieldStart("items") + e.ArrStart() + for _, elem := range s.Items { + elem.Encode(e) + } + e.ArrEnd() + } +} + +var jsonFieldsNameOfWebhookList = [2]string{ + 0: "type", + 1: "items", +} + +// Decode decodes WebhookList from json. +func (s *WebhookList) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode WebhookList to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "type": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + if err := s.Type.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"type\"") + } + case "items": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + s.Items = make([]Webhook, 0) + if err := d.Arr(func(d *jx.Decoder) error { + var elem Webhook + if err := elem.Decode(d); err != nil { + return err + } + s.Items = append(s.Items, elem) + return nil + }); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"items\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode WebhookList") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000011, + } { + 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(jsonFieldsNameOfWebhookList) { + name = jsonFieldsNameOfWebhookList[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 *WebhookList) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *WebhookList) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes WebhookListType as json. +func (s WebhookListType) Encode(e *jx.Encoder) { + e.Str(string(s)) +} + +// Decode decodes WebhookListType from json. +func (s *WebhookListType) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode WebhookListType to nil") + } + v, err := d.StrBytes() + if err != nil { + return err + } + // Try to use constant string. + switch WebhookListType(v) { + case WebhookListTypeList: + *s = WebhookListTypeList + default: + *s = WebhookListType(v) + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s WebhookListType) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *WebhookListType) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *WebhooksPostReq) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *WebhooksPostReq) encodeFields(e *jx.Encoder) { + { + e.FieldStart("event") + s.Event.Encode(e) + } + { + e.FieldStart("url") + e.Str(s.URL) + } +} + +var jsonFieldsNameOfWebhooksPostReq = [2]string{ + 0: "event", + 1: "url", +} + +// Decode decodes WebhooksPostReq from json. +func (s *WebhooksPostReq) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode WebhooksPostReq to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "event": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + if err := s.Event.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"event\"") + } + case "url": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + v, err := d.Str() + s.URL = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"url\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode WebhooksPostReq") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000011, + } { + 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(jsonFieldsNameOfWebhooksPostReq) { + name = jsonFieldsNameOfWebhooksPostReq[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 *WebhooksPostReq) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *WebhooksPostReq) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes WebhooksPostReqEvent as json. +func (s WebhooksPostReqEvent) Encode(e *jx.Encoder) { + e.Str(string(s)) +} + +// Decode decodes WebhooksPostReqEvent from json. +func (s *WebhooksPostReqEvent) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode WebhooksPostReqEvent to nil") + } + v, err := d.StrBytes() + if err != nil { + return err + } + // Try to use constant string. + switch WebhooksPostReqEvent(v) { + case WebhooksPostReqEventPaymentWaitingForCapture: + *s = WebhooksPostReqEventPaymentWaitingForCapture + case WebhooksPostReqEventPaymentSucceeded: + *s = WebhooksPostReqEventPaymentSucceeded + case WebhooksPostReqEventPaymentCanceled: + *s = WebhooksPostReqEventPaymentCanceled + case WebhooksPostReqEventRefundSucceeded: + *s = WebhooksPostReqEventRefundSucceeded + default: + *s = WebhooksPostReqEvent(v) + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s WebhooksPostReqEvent) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *WebhooksPostReqEvent) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *WebhooksWebhookIDDeleteOK) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *WebhooksWebhookIDDeleteOK) encodeFields(e *jx.Encoder) { +} + +var jsonFieldsNameOfWebhooksWebhookIDDeleteOK = [0]string{} + +// Decode decodes WebhooksWebhookIDDeleteOK from json. +func (s *WebhooksWebhookIDDeleteOK) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode WebhooksWebhookIDDeleteOK to nil") + } + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + default: + return d.Skip() + } + }); err != nil { + return errors.Wrap(err, "decode WebhooksWebhookIDDeleteOK") + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s *WebhooksWebhookIDDeleteOK) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *WebhooksWebhookIDDeleteOK) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes YooMoneyAccountNumber as json. +func (s YooMoneyAccountNumber) Encode(e *jx.Encoder) { + unwrapped := string(s) + + e.Str(unwrapped) +} + +// Decode decodes YooMoneyAccountNumber from json. +func (s *YooMoneyAccountNumber) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode YooMoneyAccountNumber to nil") + } + var unwrapped string + if err := func() error { + v, err := d.Str() + unwrapped = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "alias") + } + *s = YooMoneyAccountNumber(unwrapped) + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s YooMoneyAccountNumber) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *YooMoneyAccountNumber) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} diff --git a/internal/service/yookassa/gen/oas_labeler_gen.go b/internal/service/yookassa/gen/oas_labeler_gen.go new file mode 100644 index 0000000..c341287 --- /dev/null +++ b/internal/service/yookassa/gen/oas_labeler_gen.go @@ -0,0 +1,42 @@ +// Code generated by ogen, DO NOT EDIT. + +package gen + +import ( + "context" + + "go.opentelemetry.io/otel/attribute" +) + +// Labeler is used to allow adding custom attributes to the server request metrics. +type Labeler struct { + attrs []attribute.KeyValue +} + +// Add attributes to the Labeler. +func (l *Labeler) Add(attrs ...attribute.KeyValue) { + l.attrs = append(l.attrs, attrs...) +} + +// AttributeSet returns the attributes added to the Labeler as an attribute.Set. +func (l *Labeler) AttributeSet() attribute.Set { + return attribute.NewSet(l.attrs...) +} + +type labelerContextKey struct{} + +// LabelerFromContext retrieves the Labeler from the provided context, if present. +// +// If no Labeler was found in the provided context a new, empty Labeler is returned and the second +// return value is false. In this case it is safe to use the Labeler but any attributes added to +// it will not be used. +func LabelerFromContext(ctx context.Context) (*Labeler, bool) { + if l, ok := ctx.Value(labelerContextKey{}).(*Labeler); ok { + return l, true + } + return &Labeler{}, false +} + +func contextWithLabeler(ctx context.Context, l *Labeler) context.Context { + return context.WithValue(ctx, labelerContextKey{}, l) +} diff --git a/internal/service/yookassa/gen/oas_middleware_gen.go b/internal/service/yookassa/gen/oas_middleware_gen.go new file mode 100644 index 0000000..a922f7b --- /dev/null +++ b/internal/service/yookassa/gen/oas_middleware_gen.go @@ -0,0 +1,10 @@ +// Code generated by ogen, DO NOT EDIT. + +package gen + +import ( + "github.com/ogen-go/ogen/middleware" +) + +// Middleware is middleware type. +type Middleware = middleware.Middleware diff --git a/internal/service/yookassa/gen/oas_operations_gen.go b/internal/service/yookassa/gen/oas_operations_gen.go new file mode 100644 index 0000000..730f72e --- /dev/null +++ b/internal/service/yookassa/gen/oas_operations_gen.go @@ -0,0 +1,36 @@ +// Code generated by ogen, DO NOT EDIT. + +package gen + +// OperationName is the ogen operation name +type OperationName = string + +const ( + DealsDealIDGetOperation OperationName = "DealsDealIDGet" + DealsGetOperation OperationName = "DealsGet" + DealsPostOperation OperationName = "DealsPost" + MeGetOperation OperationName = "MeGet" + PaymentMethodsPaymentMethodIDGetOperation OperationName = "PaymentMethodsPaymentMethodIDGet" + PaymentMethodsPostOperation OperationName = "PaymentMethodsPost" + PaymentsGetOperation OperationName = "PaymentsGet" + PaymentsPaymentIDCancelPostOperation OperationName = "PaymentsPaymentIDCancelPost" + PaymentsPaymentIDCapturePostOperation OperationName = "PaymentsPaymentIDCapturePost" + PaymentsPaymentIDGetOperation OperationName = "PaymentsPaymentIDGet" + PaymentsPostOperation OperationName = "PaymentsPost" + PayoutsGetOperation OperationName = "PayoutsGet" + PayoutsPayoutIDGetOperation OperationName = "PayoutsPayoutIDGet" + PayoutsPostOperation OperationName = "PayoutsPost" + PayoutsSearchGetOperation OperationName = "PayoutsSearchGet" + PersonalDataPersonalDataIDGetOperation OperationName = "PersonalDataPersonalDataIDGet" + PersonalDataPostOperation OperationName = "PersonalDataPost" + ReceiptsGetOperation OperationName = "ReceiptsGet" + ReceiptsPostOperation OperationName = "ReceiptsPost" + ReceiptsReceiptIDGetOperation OperationName = "ReceiptsReceiptIDGet" + RefundsGetOperation OperationName = "RefundsGet" + RefundsPostOperation OperationName = "RefundsPost" + RefundsRefundIDGetOperation OperationName = "RefundsRefundIDGet" + SbpBanksGetOperation OperationName = "SbpBanksGet" + WebhooksGetOperation OperationName = "WebhooksGet" + WebhooksPostOperation OperationName = "WebhooksPost" + WebhooksWebhookIDDeleteOperation OperationName = "WebhooksWebhookIDDelete" +) diff --git a/internal/service/yookassa/gen/oas_parameters_gen.go b/internal/service/yookassa/gen/oas_parameters_gen.go new file mode 100644 index 0000000..3f1bdd2 --- /dev/null +++ b/internal/service/yookassa/gen/oas_parameters_gen.go @@ -0,0 +1,5237 @@ +// Code generated by ogen, DO NOT EDIT. + +package gen + +import ( + "net/http" + "net/url" + "time" + + "github.com/go-faster/errors" + "github.com/ogen-go/ogen/conv" + "github.com/ogen-go/ogen/middleware" + "github.com/ogen-go/ogen/ogenerrors" + "github.com/ogen-go/ogen/uri" + "github.com/ogen-go/ogen/validate" +) + +// DealsDealIDGetParams is parameters of GET /deals/{deal_id} operation. +type DealsDealIDGetParams struct { + DealID DealId +} + +func unpackDealsDealIDGetParams(packed middleware.Parameters) (params DealsDealIDGetParams) { + { + key := middleware.ParameterKey{ + Name: "deal_id", + In: "path", + } + params.DealID = packed[key].(DealId) + } + return params +} + +func decodeDealsDealIDGetParams(args [1]string, argsEscaped bool, r *http.Request) (params DealsDealIDGetParams, _ error) { + // Decode path: deal_id. + 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: "deal_id", + Value: param, + Style: uri.PathStyleSimple, + Explode: false, + }) + + if err := func() error { + var paramsDotDealIDVal string + if err := func() error { + val, err := d.DecodeValue() + if err != nil { + return err + } + + c, err := conv.ToString(val) + if err != nil { + return err + } + + paramsDotDealIDVal = c + return nil + }(); err != nil { + return err + } + params.DealID = DealId(paramsDotDealIDVal) + return nil + }(); err != nil { + return err + } + if err := func() error { + if err := params.DealID.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } else { + return validate.ErrFieldRequired + } + return nil + }(); err != nil { + return params, &ogenerrors.DecodeParamError{ + Name: "deal_id", + In: "path", + Err: err, + } + } + return params, nil +} + +// DealsGetParams is parameters of GET /deals operation. +type DealsGetParams struct { + // Фильтр по времени создания: время должно быть больше + // указанного значения или равно ему («с такого-то + // момента включительно»). Указывается в формате ISO 8601: + // https://en.wikipedia.org/wiki/ISO_8601. Пример: created_at.gte=2018-07-18T10:51:18.139Z. + CreatedAtGte OptDateTime `json:",omitempty,omitzero"` + // Фильтр по времени создания: время должно быть больше + // указанного значения («с такого-то момента, не включая + // его»). Указывается в формате ISO 8601: https://en.wikipedia. + // org/wiki/ISO_8601. Пример: created_at.gt=2018-07-18T10:51:18.139Z. + CreatedAtGt OptDateTime `json:",omitempty,omitzero"` + // Фильтр по времени создания: время должно быть меньше + // указанного значения или равно ему («по такой-то + // момент включительно»). Указывается в формате ISO 8601: + // https://en.wikipedia.org/wiki/ISO_8601. Пример: created_at.lte=2018-07-18T10:51:18.139Z. + CreatedAtLte OptDateTime `json:",omitempty,omitzero"` + // Фильтр по времени создания: время должно быть меньше + // указанного значения («по такой-то момент, не включая + // его»). Указывается в формате ISO 8601: https://en.wikipedia. + // org/wiki/ISO_8601. Пример: created_at.lt=2018-07-18T10:51:18.139Z. + CreatedAtLt OptDateTime `json:",omitempty,omitzero"` + // Фильтр по времени автоматического закрытия сделки: + // время должно быть больше указанного значения или + // равно ему («с такого-то момента включительно»). + // Указывается в формате ISO 8601: https://en.wikipedia.org/wiki/ISO_8601. + // Пример: expires_at.gte=2018-07-18T10:51:18.139Z. + ExpiresAtGte OptDateTime `json:",omitempty,omitzero"` + // Фильтр по времени автоматического закрытия сделки: + // время должно быть больше указанного значения («с + // такого-то момента, не включая его»). Указывается в + // формате ISO 8601: https://en.wikipedia.org/wiki/ISO_8601. Пример: expires_at. + // gt=2018-07-18T10:51:18.139Z. + ExpiresAtGt OptDateTime `json:",omitempty,omitzero"` + // Фильтр по времени автоматического закрытия сделки: + // время должно быть меньше указанного значения или + // равно ему («по такой-то момент включительно»). + // Указывается в формате ISO 8601: https://en.wikipedia.org/wiki/ISO_8601. + // Пример: expires_at.lte=2018-07-18T10:51:18.139Z. + ExpiresAtLte OptDateTime `json:",omitempty,omitzero"` + // Фильтр по времени автоматического закрытия сделки: + // время должно быть меньше указанного значения («по + // такой-то момент, не включая его»). Указывается в + // формате ISO 8601: https://en.wikipedia.org/wiki/ISO_8601. Пример: expires_at. + // lt=2018-07-18T10:51:18.139Z. + ExpiresAtLt OptDateTime `json:",omitempty,omitzero"` + // Фильтр по статусу сделки. Пример: status=closed. + Status OptDealStatus `json:",omitempty,omitzero"` + // Фильтр по описанию сделки — параметру description + // (например, идентификатор сделки на стороне вашей + // интернет-площадки в ЮKassa, идентификатор покупателя + // или продавца). От 4 до 128 символов. Пример: 123554642-2432FF344R. + FullTextSearch OptString `json:",omitempty,omitzero"` + // Размер выдачи результатов запроса — количество + // объектов, передаваемых в ответе. Возможные значения: + // от 1 до 100. Пример: limit=50 Значение по умолчанию: 10. + Limit OptInt `json:",omitempty,omitzero"` + // Указатель на следующий фрагмент списка. Пример: + // cursor=37a5c87d-3984-51e8-a7f3-8de646d39ec15 В качестве указателя + // необходимо использовать значение параметра next_cursor, + // полученное в ответе на предыдущий запрос. + // Используется, если в списке больше объектов, чем + // может поместиться в выдаче (limit), и конец выдачи не + // достигнут. Пример использования: https://yookassa. + // ru/developers/using-api/lists#pagination. + Cursor OptString `json:",omitempty,omitzero"` +} + +func unpackDealsGetParams(packed middleware.Parameters) (params DealsGetParams) { + { + key := middleware.ParameterKey{ + Name: "created_at.gte", + In: "query", + } + if v, ok := packed[key]; ok { + params.CreatedAtGte = v.(OptDateTime) + } + } + { + key := middleware.ParameterKey{ + Name: "created_at.gt", + In: "query", + } + if v, ok := packed[key]; ok { + params.CreatedAtGt = v.(OptDateTime) + } + } + { + key := middleware.ParameterKey{ + Name: "created_at.lte", + In: "query", + } + if v, ok := packed[key]; ok { + params.CreatedAtLte = v.(OptDateTime) + } + } + { + key := middleware.ParameterKey{ + Name: "created_at.lt", + In: "query", + } + if v, ok := packed[key]; ok { + params.CreatedAtLt = v.(OptDateTime) + } + } + { + key := middleware.ParameterKey{ + Name: "expires_at.gte", + In: "query", + } + if v, ok := packed[key]; ok { + params.ExpiresAtGte = v.(OptDateTime) + } + } + { + key := middleware.ParameterKey{ + Name: "expires_at.gt", + In: "query", + } + if v, ok := packed[key]; ok { + params.ExpiresAtGt = v.(OptDateTime) + } + } + { + key := middleware.ParameterKey{ + Name: "expires_at.lte", + In: "query", + } + if v, ok := packed[key]; ok { + params.ExpiresAtLte = v.(OptDateTime) + } + } + { + key := middleware.ParameterKey{ + Name: "expires_at.lt", + In: "query", + } + if v, ok := packed[key]; ok { + params.ExpiresAtLt = v.(OptDateTime) + } + } + { + key := middleware.ParameterKey{ + Name: "status", + In: "query", + } + if v, ok := packed[key]; ok { + params.Status = v.(OptDealStatus) + } + } + { + key := middleware.ParameterKey{ + Name: "full_text_search", + In: "query", + } + if v, ok := packed[key]; ok { + params.FullTextSearch = v.(OptString) + } + } + { + key := middleware.ParameterKey{ + Name: "limit", + In: "query", + } + if v, ok := packed[key]; ok { + params.Limit = v.(OptInt) + } + } + { + key := middleware.ParameterKey{ + Name: "cursor", + In: "query", + } + if v, ok := packed[key]; ok { + params.Cursor = v.(OptString) + } + } + return params +} + +func decodeDealsGetParams(args [0]string, argsEscaped bool, r *http.Request) (params DealsGetParams, _ error) { + q := uri.NewQueryDecoder(r.URL.Query()) + // Decode query: created_at.gte. + if err := func() error { + cfg := uri.QueryParameterDecodingConfig{ + Name: "created_at.gte", + Style: uri.QueryStyleForm, + Explode: true, + } + + if err := q.HasParam(cfg); err == nil { + if err := q.DecodeParam(cfg, func(d uri.Decoder) error { + var paramsDotCreatedAtGteVal time.Time + if err := func() error { + val, err := d.DecodeValue() + if err != nil { + return err + } + + c, err := conv.ToDateTime(val) + if err != nil { + return err + } + + paramsDotCreatedAtGteVal = c + return nil + }(); err != nil { + return err + } + params.CreatedAtGte.SetTo(paramsDotCreatedAtGteVal) + return nil + }); err != nil { + return err + } + } + return nil + }(); err != nil { + return params, &ogenerrors.DecodeParamError{ + Name: "created_at.gte", + In: "query", + Err: err, + } + } + // Decode query: created_at.gt. + if err := func() error { + cfg := uri.QueryParameterDecodingConfig{ + Name: "created_at.gt", + Style: uri.QueryStyleForm, + Explode: true, + } + + if err := q.HasParam(cfg); err == nil { + if err := q.DecodeParam(cfg, func(d uri.Decoder) error { + var paramsDotCreatedAtGtVal time.Time + if err := func() error { + val, err := d.DecodeValue() + if err != nil { + return err + } + + c, err := conv.ToDateTime(val) + if err != nil { + return err + } + + paramsDotCreatedAtGtVal = c + return nil + }(); err != nil { + return err + } + params.CreatedAtGt.SetTo(paramsDotCreatedAtGtVal) + return nil + }); err != nil { + return err + } + } + return nil + }(); err != nil { + return params, &ogenerrors.DecodeParamError{ + Name: "created_at.gt", + In: "query", + Err: err, + } + } + // Decode query: created_at.lte. + if err := func() error { + cfg := uri.QueryParameterDecodingConfig{ + Name: "created_at.lte", + Style: uri.QueryStyleForm, + Explode: true, + } + + if err := q.HasParam(cfg); err == nil { + if err := q.DecodeParam(cfg, func(d uri.Decoder) error { + var paramsDotCreatedAtLteVal time.Time + if err := func() error { + val, err := d.DecodeValue() + if err != nil { + return err + } + + c, err := conv.ToDateTime(val) + if err != nil { + return err + } + + paramsDotCreatedAtLteVal = c + return nil + }(); err != nil { + return err + } + params.CreatedAtLte.SetTo(paramsDotCreatedAtLteVal) + return nil + }); err != nil { + return err + } + } + return nil + }(); err != nil { + return params, &ogenerrors.DecodeParamError{ + Name: "created_at.lte", + In: "query", + Err: err, + } + } + // Decode query: created_at.lt. + if err := func() error { + cfg := uri.QueryParameterDecodingConfig{ + Name: "created_at.lt", + Style: uri.QueryStyleForm, + Explode: true, + } + + if err := q.HasParam(cfg); err == nil { + if err := q.DecodeParam(cfg, func(d uri.Decoder) error { + var paramsDotCreatedAtLtVal time.Time + if err := func() error { + val, err := d.DecodeValue() + if err != nil { + return err + } + + c, err := conv.ToDateTime(val) + if err != nil { + return err + } + + paramsDotCreatedAtLtVal = c + return nil + }(); err != nil { + return err + } + params.CreatedAtLt.SetTo(paramsDotCreatedAtLtVal) + return nil + }); err != nil { + return err + } + } + return nil + }(); err != nil { + return params, &ogenerrors.DecodeParamError{ + Name: "created_at.lt", + In: "query", + Err: err, + } + } + // Decode query: expires_at.gte. + if err := func() error { + cfg := uri.QueryParameterDecodingConfig{ + Name: "expires_at.gte", + Style: uri.QueryStyleForm, + Explode: true, + } + + if err := q.HasParam(cfg); err == nil { + if err := q.DecodeParam(cfg, func(d uri.Decoder) error { + var paramsDotExpiresAtGteVal time.Time + if err := func() error { + val, err := d.DecodeValue() + if err != nil { + return err + } + + c, err := conv.ToDateTime(val) + if err != nil { + return err + } + + paramsDotExpiresAtGteVal = c + return nil + }(); err != nil { + return err + } + params.ExpiresAtGte.SetTo(paramsDotExpiresAtGteVal) + return nil + }); err != nil { + return err + } + } + return nil + }(); err != nil { + return params, &ogenerrors.DecodeParamError{ + Name: "expires_at.gte", + In: "query", + Err: err, + } + } + // Decode query: expires_at.gt. + if err := func() error { + cfg := uri.QueryParameterDecodingConfig{ + Name: "expires_at.gt", + Style: uri.QueryStyleForm, + Explode: true, + } + + if err := q.HasParam(cfg); err == nil { + if err := q.DecodeParam(cfg, func(d uri.Decoder) error { + var paramsDotExpiresAtGtVal time.Time + if err := func() error { + val, err := d.DecodeValue() + if err != nil { + return err + } + + c, err := conv.ToDateTime(val) + if err != nil { + return err + } + + paramsDotExpiresAtGtVal = c + return nil + }(); err != nil { + return err + } + params.ExpiresAtGt.SetTo(paramsDotExpiresAtGtVal) + return nil + }); err != nil { + return err + } + } + return nil + }(); err != nil { + return params, &ogenerrors.DecodeParamError{ + Name: "expires_at.gt", + In: "query", + Err: err, + } + } + // Decode query: expires_at.lte. + if err := func() error { + cfg := uri.QueryParameterDecodingConfig{ + Name: "expires_at.lte", + Style: uri.QueryStyleForm, + Explode: true, + } + + if err := q.HasParam(cfg); err == nil { + if err := q.DecodeParam(cfg, func(d uri.Decoder) error { + var paramsDotExpiresAtLteVal time.Time + if err := func() error { + val, err := d.DecodeValue() + if err != nil { + return err + } + + c, err := conv.ToDateTime(val) + if err != nil { + return err + } + + paramsDotExpiresAtLteVal = c + return nil + }(); err != nil { + return err + } + params.ExpiresAtLte.SetTo(paramsDotExpiresAtLteVal) + return nil + }); err != nil { + return err + } + } + return nil + }(); err != nil { + return params, &ogenerrors.DecodeParamError{ + Name: "expires_at.lte", + In: "query", + Err: err, + } + } + // Decode query: expires_at.lt. + if err := func() error { + cfg := uri.QueryParameterDecodingConfig{ + Name: "expires_at.lt", + Style: uri.QueryStyleForm, + Explode: true, + } + + if err := q.HasParam(cfg); err == nil { + if err := q.DecodeParam(cfg, func(d uri.Decoder) error { + var paramsDotExpiresAtLtVal time.Time + if err := func() error { + val, err := d.DecodeValue() + if err != nil { + return err + } + + c, err := conv.ToDateTime(val) + if err != nil { + return err + } + + paramsDotExpiresAtLtVal = c + return nil + }(); err != nil { + return err + } + params.ExpiresAtLt.SetTo(paramsDotExpiresAtLtVal) + return nil + }); err != nil { + return err + } + } + return nil + }(); err != nil { + return params, &ogenerrors.DecodeParamError{ + Name: "expires_at.lt", + In: "query", + Err: err, + } + } + // Decode query: status. + if err := func() error { + cfg := uri.QueryParameterDecodingConfig{ + Name: "status", + Style: uri.QueryStyleForm, + Explode: true, + } + + if err := q.HasParam(cfg); err == nil { + if err := q.DecodeParam(cfg, func(d uri.Decoder) error { + var paramsDotStatusVal DealStatus + if err := func() error { + val, err := d.DecodeValue() + if err != nil { + return err + } + + c, err := conv.ToString(val) + if err != nil { + return err + } + + paramsDotStatusVal = DealStatus(c) + return nil + }(); err != nil { + return err + } + params.Status.SetTo(paramsDotStatusVal) + return nil + }); err != nil { + return err + } + if err := func() error { + if value, ok := params.Status.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + return params, &ogenerrors.DecodeParamError{ + Name: "status", + In: "query", + Err: err, + } + } + // Decode query: full_text_search. + if err := func() error { + cfg := uri.QueryParameterDecodingConfig{ + Name: "full_text_search", + Style: uri.QueryStyleForm, + Explode: true, + } + + if err := q.HasParam(cfg); err == nil { + if err := q.DecodeParam(cfg, func(d uri.Decoder) error { + var paramsDotFullTextSearchVal string + if err := func() error { + val, err := d.DecodeValue() + if err != nil { + return err + } + + c, err := conv.ToString(val) + if err != nil { + return err + } + + paramsDotFullTextSearchVal = c + return nil + }(); err != nil { + return err + } + params.FullTextSearch.SetTo(paramsDotFullTextSearchVal) + return nil + }); err != nil { + return err + } + if err := func() error { + if value, ok := params.FullTextSearch.Get(); ok { + if err := func() error { + if err := (validate.String{ + MinLength: 4, + MinLengthSet: true, + MaxLength: 128, + MaxLengthSet: true, + Email: false, + Hostname: false, + Regex: nil, + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(value)); err != nil { + return errors.Wrap(err, "string") + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + return params, &ogenerrors.DecodeParamError{ + Name: "full_text_search", + In: "query", + Err: err, + } + } + // Set default value for query: limit. + { + val := int(10) + params.Limit.SetTo(val) + } + // Decode query: limit. + if err := func() error { + cfg := uri.QueryParameterDecodingConfig{ + Name: "limit", + Style: uri.QueryStyleForm, + Explode: true, + } + + if err := q.HasParam(cfg); err == nil { + if err := q.DecodeParam(cfg, func(d uri.Decoder) error { + var paramsDotLimitVal int + if err := func() error { + val, err := d.DecodeValue() + if err != nil { + return err + } + + c, err := conv.ToInt(val) + if err != nil { + return err + } + + paramsDotLimitVal = c + return nil + }(); err != nil { + return err + } + params.Limit.SetTo(paramsDotLimitVal) + return nil + }); err != nil { + return err + } + if err := func() error { + if value, ok := params.Limit.Get(); ok { + if err := func() error { + if err := (validate.Int{ + MinSet: true, + Min: 1, + MaxSet: true, + Max: 100, + MinExclusive: false, + MaxExclusive: false, + MultipleOfSet: false, + MultipleOf: 0, + Pattern: nil, + }).Validate(int64(value)); err != nil { + return errors.Wrap(err, "int") + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + return params, &ogenerrors.DecodeParamError{ + Name: "limit", + In: "query", + Err: err, + } + } + // Decode query: cursor. + if err := func() error { + cfg := uri.QueryParameterDecodingConfig{ + Name: "cursor", + Style: uri.QueryStyleForm, + Explode: true, + } + + if err := q.HasParam(cfg); err == nil { + if err := q.DecodeParam(cfg, func(d uri.Decoder) error { + var paramsDotCursorVal string + if err := func() error { + val, err := d.DecodeValue() + if err != nil { + return err + } + + c, err := conv.ToString(val) + if err != nil { + return err + } + + paramsDotCursorVal = c + return nil + }(); err != nil { + return err + } + params.Cursor.SetTo(paramsDotCursorVal) + return nil + }); err != nil { + return err + } + } + return nil + }(); err != nil { + return params, &ogenerrors.DecodeParamError{ + Name: "cursor", + In: "query", + Err: err, + } + } + return params, nil +} + +// DealsPostParams is parameters of POST /deals operation. +type DealsPostParams struct { + IdempotenceKey string +} + +func unpackDealsPostParams(packed middleware.Parameters) (params DealsPostParams) { + { + key := middleware.ParameterKey{ + Name: "Idempotence-Key", + In: "header", + } + params.IdempotenceKey = packed[key].(string) + } + return params +} + +func decodeDealsPostParams(args [0]string, argsEscaped bool, r *http.Request) (params DealsPostParams, _ error) { + h := uri.NewHeaderDecoder(r.Header) + // Set default value for header: Idempotence-Key. + { + val := string("2e1da982-1bb1-41f0-b9cf-758cc8bcf069") + params.IdempotenceKey = val + } + // Decode header: Idempotence-Key. + if err := func() error { + cfg := uri.HeaderParameterDecodingConfig{ + Name: "Idempotence-Key", + Explode: false, + } + if err := h.HasParam(cfg); err == nil { + if err := h.DecodeParam(cfg, func(d uri.Decoder) error { + val, err := d.DecodeValue() + if err != nil { + return err + } + + c, err := conv.ToString(val) + if err != nil { + return err + } + + params.IdempotenceKey = c + return nil + }); err != nil { + return err + } + if err := func() error { + if err := (validate.String{ + MinLength: 0, + MinLengthSet: false, + MaxLength: 64, + MaxLengthSet: true, + Email: false, + Hostname: false, + Regex: regexMap["[0-9a-zA-Z+-_.]{1,64}"], + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(params.IdempotenceKey)); err != nil { + return errors.Wrap(err, "string") + } + return nil + }(); err != nil { + return err + } + } else { + return err + } + return nil + }(); err != nil { + return params, &ogenerrors.DecodeParamError{ + Name: "Idempotence-Key", + In: "header", + Err: err, + } + } + return params, nil +} + +// MeGetParams is parameters of GET /me operation. +type MeGetParams struct { + // Только для тех, кто использует Сплитование платежей: + // https://yookassa.ru/developers/solutions-for-platforms/split-payments/basics. + // Идентификатор магазина продавца, подключенного к + // вашей платформе, информацию о котором вы хотите + // узнать. + OnBehalfOf OptAccountId `json:",omitempty,omitzero"` +} + +func unpackMeGetParams(packed middleware.Parameters) (params MeGetParams) { + { + key := middleware.ParameterKey{ + Name: "on_behalf_of", + In: "query", + } + if v, ok := packed[key]; ok { + params.OnBehalfOf = v.(OptAccountId) + } + } + return params +} + +func decodeMeGetParams(args [0]string, argsEscaped bool, r *http.Request) (params MeGetParams, _ error) { + q := uri.NewQueryDecoder(r.URL.Query()) + // Decode query: on_behalf_of. + if err := func() error { + cfg := uri.QueryParameterDecodingConfig{ + Name: "on_behalf_of", + Style: uri.QueryStyleForm, + Explode: true, + } + + if err := q.HasParam(cfg); err == nil { + if err := q.DecodeParam(cfg, func(d uri.Decoder) error { + var paramsDotOnBehalfOfVal AccountId + if err := func() error { + var paramsDotOnBehalfOfValVal string + if err := func() error { + val, err := d.DecodeValue() + if err != nil { + return err + } + + c, err := conv.ToString(val) + if err != nil { + return err + } + + paramsDotOnBehalfOfValVal = c + return nil + }(); err != nil { + return err + } + paramsDotOnBehalfOfVal = AccountId(paramsDotOnBehalfOfValVal) + return nil + }(); err != nil { + return err + } + params.OnBehalfOf.SetTo(paramsDotOnBehalfOfVal) + return nil + }); err != nil { + return err + } + } + return nil + }(); err != nil { + return params, &ogenerrors.DecodeParamError{ + Name: "on_behalf_of", + In: "query", + Err: err, + } + } + return params, nil +} + +// PaymentMethodsPaymentMethodIDGetParams is parameters of GET /payment_methods/{payment_method_id} operation. +type PaymentMethodsPaymentMethodIDGetParams struct { + // Идентификатор сохраненного способа оплаты. + PaymentMethodID PaymentMethodId +} + +func unpackPaymentMethodsPaymentMethodIDGetParams(packed middleware.Parameters) (params PaymentMethodsPaymentMethodIDGetParams) { + { + key := middleware.ParameterKey{ + Name: "payment_method_id", + In: "path", + } + params.PaymentMethodID = packed[key].(PaymentMethodId) + } + return params +} + +func decodePaymentMethodsPaymentMethodIDGetParams(args [1]string, argsEscaped bool, r *http.Request) (params PaymentMethodsPaymentMethodIDGetParams, _ error) { + // Decode path: payment_method_id. + 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: "payment_method_id", + Value: param, + Style: uri.PathStyleSimple, + Explode: false, + }) + + if err := func() error { + var paramsDotPaymentMethodIDVal string + if err := func() error { + val, err := d.DecodeValue() + if err != nil { + return err + } + + c, err := conv.ToString(val) + if err != nil { + return err + } + + paramsDotPaymentMethodIDVal = c + return nil + }(); err != nil { + return err + } + params.PaymentMethodID = PaymentMethodId(paramsDotPaymentMethodIDVal) + return nil + }(); err != nil { + return err + } + } else { + return validate.ErrFieldRequired + } + return nil + }(); err != nil { + return params, &ogenerrors.DecodeParamError{ + Name: "payment_method_id", + In: "path", + Err: err, + } + } + return params, nil +} + +// PaymentMethodsPostParams is parameters of POST /payment_methods operation. +type PaymentMethodsPostParams struct { + IdempotenceKey string +} + +func unpackPaymentMethodsPostParams(packed middleware.Parameters) (params PaymentMethodsPostParams) { + { + key := middleware.ParameterKey{ + Name: "Idempotence-Key", + In: "header", + } + params.IdempotenceKey = packed[key].(string) + } + return params +} + +func decodePaymentMethodsPostParams(args [0]string, argsEscaped bool, r *http.Request) (params PaymentMethodsPostParams, _ error) { + h := uri.NewHeaderDecoder(r.Header) + // Set default value for header: Idempotence-Key. + { + val := string("2e1da982-1bb1-41f0-b9cf-758cc8bcf069") + params.IdempotenceKey = val + } + // Decode header: Idempotence-Key. + if err := func() error { + cfg := uri.HeaderParameterDecodingConfig{ + Name: "Idempotence-Key", + Explode: false, + } + if err := h.HasParam(cfg); err == nil { + if err := h.DecodeParam(cfg, func(d uri.Decoder) error { + val, err := d.DecodeValue() + if err != nil { + return err + } + + c, err := conv.ToString(val) + if err != nil { + return err + } + + params.IdempotenceKey = c + return nil + }); err != nil { + return err + } + if err := func() error { + if err := (validate.String{ + MinLength: 0, + MinLengthSet: false, + MaxLength: 64, + MaxLengthSet: true, + Email: false, + Hostname: false, + Regex: regexMap["[0-9a-zA-Z+-_.]{1,64}"], + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(params.IdempotenceKey)); err != nil { + return errors.Wrap(err, "string") + } + return nil + }(); err != nil { + return err + } + } else { + return err + } + return nil + }(); err != nil { + return params, &ogenerrors.DecodeParamError{ + Name: "Idempotence-Key", + In: "header", + Err: err, + } + } + return params, nil +} + +// PaymentsGetParams is parameters of GET /payments operation. +type PaymentsGetParams struct { + // Фильтр по времени создания: время должно быть больше + // указанного значения или равно ему («с такого-то + // момента включительно»). Указывается в формате ISO 8601: + // https://en.wikipedia.org/wiki/ISO_8601. Пример: created_at.gte=2018-07-18T10:51:18.139Z. + CreatedAtGte OptDateTime `json:",omitempty,omitzero"` + // Фильтр по времени создания: время должно быть больше + // указанного значения («с такого-то момента, не включая + // его»). Указывается в формате ISO 8601: https://en.wikipedia. + // org/wiki/ISO_8601. Пример: created_at.gt=2018-07-18T10:51:18.139Z. + CreatedAtGt OptDateTime `json:",omitempty,omitzero"` + // Фильтр по времени создания: время должно быть меньше + // указанного значения или равно ему («по такой-то + // момент включительно»). Указывается в формате ISO 8601: + // https://en.wikipedia.org/wiki/ISO_8601. Пример: created_at.lte=2018-07-18T10:51:18.139Z. + CreatedAtLte OptDateTime `json:",omitempty,omitzero"` + // Фильтр по времени создания: время должно быть меньше + // указанного значения («по такой-то момент, не включая + // его»). Указывается в формате ISO 8601: https://en.wikipedia. + // org/wiki/ISO_8601. Пример: created_at.lt=2018-07-18T10:51:18.139Z. + CreatedAtLt OptDateTime `json:",omitempty,omitzero"` + // Filter by time of payment capture: time must be greater than the specified value or equal ("from a + // certain moment inclusive"). Specified in the ISO 8601: https://en.wikipedia.org/wiki/ISO_8601 + // format. Example: captured_at.gte=2018-07-18T10:51:18.139Z. + CapturedAtGte OptDateTime `json:",omitempty,omitzero"` + // Filter by time of payment capture: time must be greater than the specified value ("from a certain + // moment exclusive"). Specified in the ISO 8601: https://en.wikipedia.org/wiki/ISO_8601 format. + // Example: captured_at.gt=2018-07-18T10:51:18.139Z. + CapturedAtGt OptDateTime `json:",omitempty,omitzero"` + // Filter by time of payment capture: time must be less than the specified value or equal ("until a + // certain moment inclusive"). Specified in the ISO 8601: https://en.wikipedia.org/wiki/ISO_8601 + // format. Example: captured_at.lte=2018-07-18T10:51:18.139Z. + CapturedAtLte OptDateTime `json:",omitempty,omitzero"` + // Filter by time of payment capture: time must be less than the specified value ("until a certain + // moment exclusive") Specified in the ISO 8601: https://en.wikipedia.org/wiki/ISO_8601 format. + // Example: captured_at.lt=2018-07-18T10:51:18.139Z. + CapturedAtLt OptDateTime `json:",omitempty,omitzero"` + // Filter by payment method: https://yookassa. + // ru/developers/payment-acceptance/getting-started/payment-methods#all code. Example: + // payment_method=bank_card. + PaymentMethod OptPaymentMethodType `json:",omitempty,omitzero"` + // Filter by payment status: https://yookassa. + // ru/developers/payment-acceptance/getting-started/payment-process#lifecycle. Example: + // status=succeeded. + Status OptPaymentStatus `json:",omitempty,omitzero"` + // Размер выдачи результатов запроса — количество + // объектов, передаваемых в ответе. Возможные значения: + // от 1 до 100. Пример: limit=50 Значение по умолчанию: 10. + Limit OptInt `json:",omitempty,omitzero"` + // Указатель на следующий фрагмент списка. Пример: + // cursor=37a5c87d-3984-51e8-a7f3-8de646d39ec15 В качестве указателя + // необходимо использовать значение параметра next_cursor, + // полученное в ответе на предыдущий запрос. + // Используется, если в списке больше объектов, чем + // может поместиться в выдаче (limit), и конец выдачи не + // достигнут. Пример использования: https://yookassa. + // ru/developers/using-api/lists#pagination. + Cursor OptString `json:",omitempty,omitzero"` +} + +func unpackPaymentsGetParams(packed middleware.Parameters) (params PaymentsGetParams) { + { + key := middleware.ParameterKey{ + Name: "created_at.gte", + In: "query", + } + if v, ok := packed[key]; ok { + params.CreatedAtGte = v.(OptDateTime) + } + } + { + key := middleware.ParameterKey{ + Name: "created_at.gt", + In: "query", + } + if v, ok := packed[key]; ok { + params.CreatedAtGt = v.(OptDateTime) + } + } + { + key := middleware.ParameterKey{ + Name: "created_at.lte", + In: "query", + } + if v, ok := packed[key]; ok { + params.CreatedAtLte = v.(OptDateTime) + } + } + { + key := middleware.ParameterKey{ + Name: "created_at.lt", + In: "query", + } + if v, ok := packed[key]; ok { + params.CreatedAtLt = v.(OptDateTime) + } + } + { + key := middleware.ParameterKey{ + Name: "captured_at.gte", + In: "query", + } + if v, ok := packed[key]; ok { + params.CapturedAtGte = v.(OptDateTime) + } + } + { + key := middleware.ParameterKey{ + Name: "captured_at.gt", + In: "query", + } + if v, ok := packed[key]; ok { + params.CapturedAtGt = v.(OptDateTime) + } + } + { + key := middleware.ParameterKey{ + Name: "captured_at.lte", + In: "query", + } + if v, ok := packed[key]; ok { + params.CapturedAtLte = v.(OptDateTime) + } + } + { + key := middleware.ParameterKey{ + Name: "captured_at.lt", + In: "query", + } + if v, ok := packed[key]; ok { + params.CapturedAtLt = v.(OptDateTime) + } + } + { + key := middleware.ParameterKey{ + Name: "payment_method", + In: "query", + } + if v, ok := packed[key]; ok { + params.PaymentMethod = v.(OptPaymentMethodType) + } + } + { + key := middleware.ParameterKey{ + Name: "status", + In: "query", + } + if v, ok := packed[key]; ok { + params.Status = v.(OptPaymentStatus) + } + } + { + key := middleware.ParameterKey{ + Name: "limit", + In: "query", + } + if v, ok := packed[key]; ok { + params.Limit = v.(OptInt) + } + } + { + key := middleware.ParameterKey{ + Name: "cursor", + In: "query", + } + if v, ok := packed[key]; ok { + params.Cursor = v.(OptString) + } + } + return params +} + +func decodePaymentsGetParams(args [0]string, argsEscaped bool, r *http.Request) (params PaymentsGetParams, _ error) { + q := uri.NewQueryDecoder(r.URL.Query()) + // Decode query: created_at.gte. + if err := func() error { + cfg := uri.QueryParameterDecodingConfig{ + Name: "created_at.gte", + Style: uri.QueryStyleForm, + Explode: true, + } + + if err := q.HasParam(cfg); err == nil { + if err := q.DecodeParam(cfg, func(d uri.Decoder) error { + var paramsDotCreatedAtGteVal time.Time + if err := func() error { + val, err := d.DecodeValue() + if err != nil { + return err + } + + c, err := conv.ToDateTime(val) + if err != nil { + return err + } + + paramsDotCreatedAtGteVal = c + return nil + }(); err != nil { + return err + } + params.CreatedAtGte.SetTo(paramsDotCreatedAtGteVal) + return nil + }); err != nil { + return err + } + } + return nil + }(); err != nil { + return params, &ogenerrors.DecodeParamError{ + Name: "created_at.gte", + In: "query", + Err: err, + } + } + // Decode query: created_at.gt. + if err := func() error { + cfg := uri.QueryParameterDecodingConfig{ + Name: "created_at.gt", + Style: uri.QueryStyleForm, + Explode: true, + } + + if err := q.HasParam(cfg); err == nil { + if err := q.DecodeParam(cfg, func(d uri.Decoder) error { + var paramsDotCreatedAtGtVal time.Time + if err := func() error { + val, err := d.DecodeValue() + if err != nil { + return err + } + + c, err := conv.ToDateTime(val) + if err != nil { + return err + } + + paramsDotCreatedAtGtVal = c + return nil + }(); err != nil { + return err + } + params.CreatedAtGt.SetTo(paramsDotCreatedAtGtVal) + return nil + }); err != nil { + return err + } + } + return nil + }(); err != nil { + return params, &ogenerrors.DecodeParamError{ + Name: "created_at.gt", + In: "query", + Err: err, + } + } + // Decode query: created_at.lte. + if err := func() error { + cfg := uri.QueryParameterDecodingConfig{ + Name: "created_at.lte", + Style: uri.QueryStyleForm, + Explode: true, + } + + if err := q.HasParam(cfg); err == nil { + if err := q.DecodeParam(cfg, func(d uri.Decoder) error { + var paramsDotCreatedAtLteVal time.Time + if err := func() error { + val, err := d.DecodeValue() + if err != nil { + return err + } + + c, err := conv.ToDateTime(val) + if err != nil { + return err + } + + paramsDotCreatedAtLteVal = c + return nil + }(); err != nil { + return err + } + params.CreatedAtLte.SetTo(paramsDotCreatedAtLteVal) + return nil + }); err != nil { + return err + } + } + return nil + }(); err != nil { + return params, &ogenerrors.DecodeParamError{ + Name: "created_at.lte", + In: "query", + Err: err, + } + } + // Decode query: created_at.lt. + if err := func() error { + cfg := uri.QueryParameterDecodingConfig{ + Name: "created_at.lt", + Style: uri.QueryStyleForm, + Explode: true, + } + + if err := q.HasParam(cfg); err == nil { + if err := q.DecodeParam(cfg, func(d uri.Decoder) error { + var paramsDotCreatedAtLtVal time.Time + if err := func() error { + val, err := d.DecodeValue() + if err != nil { + return err + } + + c, err := conv.ToDateTime(val) + if err != nil { + return err + } + + paramsDotCreatedAtLtVal = c + return nil + }(); err != nil { + return err + } + params.CreatedAtLt.SetTo(paramsDotCreatedAtLtVal) + return nil + }); err != nil { + return err + } + } + return nil + }(); err != nil { + return params, &ogenerrors.DecodeParamError{ + Name: "created_at.lt", + In: "query", + Err: err, + } + } + // Decode query: captured_at.gte. + if err := func() error { + cfg := uri.QueryParameterDecodingConfig{ + Name: "captured_at.gte", + Style: uri.QueryStyleForm, + Explode: true, + } + + if err := q.HasParam(cfg); err == nil { + if err := q.DecodeParam(cfg, func(d uri.Decoder) error { + var paramsDotCapturedAtGteVal time.Time + if err := func() error { + val, err := d.DecodeValue() + if err != nil { + return err + } + + c, err := conv.ToDateTime(val) + if err != nil { + return err + } + + paramsDotCapturedAtGteVal = c + return nil + }(); err != nil { + return err + } + params.CapturedAtGte.SetTo(paramsDotCapturedAtGteVal) + return nil + }); err != nil { + return err + } + } + return nil + }(); err != nil { + return params, &ogenerrors.DecodeParamError{ + Name: "captured_at.gte", + In: "query", + Err: err, + } + } + // Decode query: captured_at.gt. + if err := func() error { + cfg := uri.QueryParameterDecodingConfig{ + Name: "captured_at.gt", + Style: uri.QueryStyleForm, + Explode: true, + } + + if err := q.HasParam(cfg); err == nil { + if err := q.DecodeParam(cfg, func(d uri.Decoder) error { + var paramsDotCapturedAtGtVal time.Time + if err := func() error { + val, err := d.DecodeValue() + if err != nil { + return err + } + + c, err := conv.ToDateTime(val) + if err != nil { + return err + } + + paramsDotCapturedAtGtVal = c + return nil + }(); err != nil { + return err + } + params.CapturedAtGt.SetTo(paramsDotCapturedAtGtVal) + return nil + }); err != nil { + return err + } + } + return nil + }(); err != nil { + return params, &ogenerrors.DecodeParamError{ + Name: "captured_at.gt", + In: "query", + Err: err, + } + } + // Decode query: captured_at.lte. + if err := func() error { + cfg := uri.QueryParameterDecodingConfig{ + Name: "captured_at.lte", + Style: uri.QueryStyleForm, + Explode: true, + } + + if err := q.HasParam(cfg); err == nil { + if err := q.DecodeParam(cfg, func(d uri.Decoder) error { + var paramsDotCapturedAtLteVal time.Time + if err := func() error { + val, err := d.DecodeValue() + if err != nil { + return err + } + + c, err := conv.ToDateTime(val) + if err != nil { + return err + } + + paramsDotCapturedAtLteVal = c + return nil + }(); err != nil { + return err + } + params.CapturedAtLte.SetTo(paramsDotCapturedAtLteVal) + return nil + }); err != nil { + return err + } + } + return nil + }(); err != nil { + return params, &ogenerrors.DecodeParamError{ + Name: "captured_at.lte", + In: "query", + Err: err, + } + } + // Decode query: captured_at.lt. + if err := func() error { + cfg := uri.QueryParameterDecodingConfig{ + Name: "captured_at.lt", + Style: uri.QueryStyleForm, + Explode: true, + } + + if err := q.HasParam(cfg); err == nil { + if err := q.DecodeParam(cfg, func(d uri.Decoder) error { + var paramsDotCapturedAtLtVal time.Time + if err := func() error { + val, err := d.DecodeValue() + if err != nil { + return err + } + + c, err := conv.ToDateTime(val) + if err != nil { + return err + } + + paramsDotCapturedAtLtVal = c + return nil + }(); err != nil { + return err + } + params.CapturedAtLt.SetTo(paramsDotCapturedAtLtVal) + return nil + }); err != nil { + return err + } + } + return nil + }(); err != nil { + return params, &ogenerrors.DecodeParamError{ + Name: "captured_at.lt", + In: "query", + Err: err, + } + } + // Decode query: payment_method. + if err := func() error { + cfg := uri.QueryParameterDecodingConfig{ + Name: "payment_method", + Style: uri.QueryStyleForm, + Explode: true, + } + + if err := q.HasParam(cfg); err == nil { + if err := q.DecodeParam(cfg, func(d uri.Decoder) error { + var paramsDotPaymentMethodVal PaymentMethodType + if err := func() error { + val, err := d.DecodeValue() + if err != nil { + return err + } + + c, err := conv.ToString(val) + if err != nil { + return err + } + + paramsDotPaymentMethodVal = PaymentMethodType(c) + return nil + }(); err != nil { + return err + } + params.PaymentMethod.SetTo(paramsDotPaymentMethodVal) + return nil + }); err != nil { + return err + } + if err := func() error { + if value, ok := params.PaymentMethod.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + return params, &ogenerrors.DecodeParamError{ + Name: "payment_method", + In: "query", + Err: err, + } + } + // Decode query: status. + if err := func() error { + cfg := uri.QueryParameterDecodingConfig{ + Name: "status", + Style: uri.QueryStyleForm, + Explode: true, + } + + if err := q.HasParam(cfg); err == nil { + if err := q.DecodeParam(cfg, func(d uri.Decoder) error { + var paramsDotStatusVal PaymentStatus + if err := func() error { + val, err := d.DecodeValue() + if err != nil { + return err + } + + c, err := conv.ToString(val) + if err != nil { + return err + } + + paramsDotStatusVal = PaymentStatus(c) + return nil + }(); err != nil { + return err + } + params.Status.SetTo(paramsDotStatusVal) + return nil + }); err != nil { + return err + } + if err := func() error { + if value, ok := params.Status.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + return params, &ogenerrors.DecodeParamError{ + Name: "status", + In: "query", + Err: err, + } + } + // Set default value for query: limit. + { + val := int(10) + params.Limit.SetTo(val) + } + // Decode query: limit. + if err := func() error { + cfg := uri.QueryParameterDecodingConfig{ + Name: "limit", + Style: uri.QueryStyleForm, + Explode: true, + } + + if err := q.HasParam(cfg); err == nil { + if err := q.DecodeParam(cfg, func(d uri.Decoder) error { + var paramsDotLimitVal int + if err := func() error { + val, err := d.DecodeValue() + if err != nil { + return err + } + + c, err := conv.ToInt(val) + if err != nil { + return err + } + + paramsDotLimitVal = c + return nil + }(); err != nil { + return err + } + params.Limit.SetTo(paramsDotLimitVal) + return nil + }); err != nil { + return err + } + if err := func() error { + if value, ok := params.Limit.Get(); ok { + if err := func() error { + if err := (validate.Int{ + MinSet: true, + Min: 1, + MaxSet: true, + Max: 100, + MinExclusive: false, + MaxExclusive: false, + MultipleOfSet: false, + MultipleOf: 0, + Pattern: nil, + }).Validate(int64(value)); err != nil { + return errors.Wrap(err, "int") + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + return params, &ogenerrors.DecodeParamError{ + Name: "limit", + In: "query", + Err: err, + } + } + // Decode query: cursor. + if err := func() error { + cfg := uri.QueryParameterDecodingConfig{ + Name: "cursor", + Style: uri.QueryStyleForm, + Explode: true, + } + + if err := q.HasParam(cfg); err == nil { + if err := q.DecodeParam(cfg, func(d uri.Decoder) error { + var paramsDotCursorVal string + if err := func() error { + val, err := d.DecodeValue() + if err != nil { + return err + } + + c, err := conv.ToString(val) + if err != nil { + return err + } + + paramsDotCursorVal = c + return nil + }(); err != nil { + return err + } + params.Cursor.SetTo(paramsDotCursorVal) + return nil + }); err != nil { + return err + } + } + return nil + }(); err != nil { + return params, &ogenerrors.DecodeParamError{ + Name: "cursor", + In: "query", + Err: err, + } + } + return params, nil +} + +// PaymentsPaymentIDCancelPostParams is parameters of POST /payments/{payment_id}/cancel operation. +type PaymentsPaymentIDCancelPostParams struct { + // Идентификатор платежа. + PaymentID PaymentId + IdempotenceKey string +} + +func unpackPaymentsPaymentIDCancelPostParams(packed middleware.Parameters) (params PaymentsPaymentIDCancelPostParams) { + { + key := middleware.ParameterKey{ + Name: "payment_id", + In: "path", + } + params.PaymentID = packed[key].(PaymentId) + } + { + key := middleware.ParameterKey{ + Name: "Idempotence-Key", + In: "header", + } + params.IdempotenceKey = packed[key].(string) + } + return params +} + +func decodePaymentsPaymentIDCancelPostParams(args [1]string, argsEscaped bool, r *http.Request) (params PaymentsPaymentIDCancelPostParams, _ error) { + h := uri.NewHeaderDecoder(r.Header) + // Decode path: payment_id. + 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: "payment_id", + Value: param, + Style: uri.PathStyleSimple, + Explode: false, + }) + + if err := func() error { + var paramsDotPaymentIDVal string + if err := func() error { + val, err := d.DecodeValue() + if err != nil { + return err + } + + c, err := conv.ToString(val) + if err != nil { + return err + } + + paramsDotPaymentIDVal = c + return nil + }(); err != nil { + return err + } + params.PaymentID = PaymentId(paramsDotPaymentIDVal) + return nil + }(); err != nil { + return err + } + if err := func() error { + if err := params.PaymentID.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } else { + return validate.ErrFieldRequired + } + return nil + }(); err != nil { + return params, &ogenerrors.DecodeParamError{ + Name: "payment_id", + In: "path", + Err: err, + } + } + // Set default value for header: Idempotence-Key. + { + val := string("2e1da982-1bb1-41f0-b9cf-758cc8bcf069") + params.IdempotenceKey = val + } + // Decode header: Idempotence-Key. + if err := func() error { + cfg := uri.HeaderParameterDecodingConfig{ + Name: "Idempotence-Key", + Explode: false, + } + if err := h.HasParam(cfg); err == nil { + if err := h.DecodeParam(cfg, func(d uri.Decoder) error { + val, err := d.DecodeValue() + if err != nil { + return err + } + + c, err := conv.ToString(val) + if err != nil { + return err + } + + params.IdempotenceKey = c + return nil + }); err != nil { + return err + } + if err := func() error { + if err := (validate.String{ + MinLength: 0, + MinLengthSet: false, + MaxLength: 64, + MaxLengthSet: true, + Email: false, + Hostname: false, + Regex: regexMap["[0-9a-zA-Z+-_.]{1,64}"], + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(params.IdempotenceKey)); err != nil { + return errors.Wrap(err, "string") + } + return nil + }(); err != nil { + return err + } + } else { + return err + } + return nil + }(); err != nil { + return params, &ogenerrors.DecodeParamError{ + Name: "Idempotence-Key", + In: "header", + Err: err, + } + } + return params, nil +} + +// PaymentsPaymentIDCapturePostParams is parameters of POST /payments/{payment_id}/capture operation. +type PaymentsPaymentIDCapturePostParams struct { + // Идентификатор платежа. + PaymentID PaymentId + IdempotenceKey string +} + +func unpackPaymentsPaymentIDCapturePostParams(packed middleware.Parameters) (params PaymentsPaymentIDCapturePostParams) { + { + key := middleware.ParameterKey{ + Name: "payment_id", + In: "path", + } + params.PaymentID = packed[key].(PaymentId) + } + { + key := middleware.ParameterKey{ + Name: "Idempotence-Key", + In: "header", + } + params.IdempotenceKey = packed[key].(string) + } + return params +} + +func decodePaymentsPaymentIDCapturePostParams(args [1]string, argsEscaped bool, r *http.Request) (params PaymentsPaymentIDCapturePostParams, _ error) { + h := uri.NewHeaderDecoder(r.Header) + // Decode path: payment_id. + 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: "payment_id", + Value: param, + Style: uri.PathStyleSimple, + Explode: false, + }) + + if err := func() error { + var paramsDotPaymentIDVal string + if err := func() error { + val, err := d.DecodeValue() + if err != nil { + return err + } + + c, err := conv.ToString(val) + if err != nil { + return err + } + + paramsDotPaymentIDVal = c + return nil + }(); err != nil { + return err + } + params.PaymentID = PaymentId(paramsDotPaymentIDVal) + return nil + }(); err != nil { + return err + } + if err := func() error { + if err := params.PaymentID.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } else { + return validate.ErrFieldRequired + } + return nil + }(); err != nil { + return params, &ogenerrors.DecodeParamError{ + Name: "payment_id", + In: "path", + Err: err, + } + } + // Set default value for header: Idempotence-Key. + { + val := string("2e1da982-1bb1-41f0-b9cf-758cc8bcf069") + params.IdempotenceKey = val + } + // Decode header: Idempotence-Key. + if err := func() error { + cfg := uri.HeaderParameterDecodingConfig{ + Name: "Idempotence-Key", + Explode: false, + } + if err := h.HasParam(cfg); err == nil { + if err := h.DecodeParam(cfg, func(d uri.Decoder) error { + val, err := d.DecodeValue() + if err != nil { + return err + } + + c, err := conv.ToString(val) + if err != nil { + return err + } + + params.IdempotenceKey = c + return nil + }); err != nil { + return err + } + if err := func() error { + if err := (validate.String{ + MinLength: 0, + MinLengthSet: false, + MaxLength: 64, + MaxLengthSet: true, + Email: false, + Hostname: false, + Regex: regexMap["[0-9a-zA-Z+-_.]{1,64}"], + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(params.IdempotenceKey)); err != nil { + return errors.Wrap(err, "string") + } + return nil + }(); err != nil { + return err + } + } else { + return err + } + return nil + }(); err != nil { + return params, &ogenerrors.DecodeParamError{ + Name: "Idempotence-Key", + In: "header", + Err: err, + } + } + return params, nil +} + +// PaymentsPaymentIDGetParams is parameters of GET /payments/{payment_id} operation. +type PaymentsPaymentIDGetParams struct { + // Идентификатор платежа. + PaymentID PaymentId +} + +func unpackPaymentsPaymentIDGetParams(packed middleware.Parameters) (params PaymentsPaymentIDGetParams) { + { + key := middleware.ParameterKey{ + Name: "payment_id", + In: "path", + } + params.PaymentID = packed[key].(PaymentId) + } + return params +} + +func decodePaymentsPaymentIDGetParams(args [1]string, argsEscaped bool, r *http.Request) (params PaymentsPaymentIDGetParams, _ error) { + // Decode path: payment_id. + 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: "payment_id", + Value: param, + Style: uri.PathStyleSimple, + Explode: false, + }) + + if err := func() error { + var paramsDotPaymentIDVal string + if err := func() error { + val, err := d.DecodeValue() + if err != nil { + return err + } + + c, err := conv.ToString(val) + if err != nil { + return err + } + + paramsDotPaymentIDVal = c + return nil + }(); err != nil { + return err + } + params.PaymentID = PaymentId(paramsDotPaymentIDVal) + return nil + }(); err != nil { + return err + } + if err := func() error { + if err := params.PaymentID.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } else { + return validate.ErrFieldRequired + } + return nil + }(); err != nil { + return params, &ogenerrors.DecodeParamError{ + Name: "payment_id", + In: "path", + Err: err, + } + } + return params, nil +} + +// PaymentsPostParams is parameters of POST /payments operation. +type PaymentsPostParams struct { + IdempotenceKey string +} + +func unpackPaymentsPostParams(packed middleware.Parameters) (params PaymentsPostParams) { + { + key := middleware.ParameterKey{ + Name: "Idempotence-Key", + In: "header", + } + params.IdempotenceKey = packed[key].(string) + } + return params +} + +func decodePaymentsPostParams(args [0]string, argsEscaped bool, r *http.Request) (params PaymentsPostParams, _ error) { + h := uri.NewHeaderDecoder(r.Header) + // Set default value for header: Idempotence-Key. + { + val := string("2e1da982-1bb1-41f0-b9cf-758cc8bcf069") + params.IdempotenceKey = val + } + // Decode header: Idempotence-Key. + if err := func() error { + cfg := uri.HeaderParameterDecodingConfig{ + Name: "Idempotence-Key", + Explode: false, + } + if err := h.HasParam(cfg); err == nil { + if err := h.DecodeParam(cfg, func(d uri.Decoder) error { + val, err := d.DecodeValue() + if err != nil { + return err + } + + c, err := conv.ToString(val) + if err != nil { + return err + } + + params.IdempotenceKey = c + return nil + }); err != nil { + return err + } + if err := func() error { + if err := (validate.String{ + MinLength: 0, + MinLengthSet: false, + MaxLength: 64, + MaxLengthSet: true, + Email: false, + Hostname: false, + Regex: regexMap["[0-9a-zA-Z+-_.]{1,64}"], + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(params.IdempotenceKey)); err != nil { + return errors.Wrap(err, "string") + } + return nil + }(); err != nil { + return err + } + } else { + return err + } + return nil + }(); err != nil { + return params, &ogenerrors.DecodeParamError{ + Name: "Idempotence-Key", + In: "header", + Err: err, + } + } + return params, nil +} + +// PayoutsGetParams is parameters of GET /payouts operation. +type PayoutsGetParams struct { + // Фильтр по времени создания: время должно быть больше + // указанного значения или равно ему («с такого-то + // момента включительно»). Указывается в формате ISO 8601: + // https://en.wikipedia.org/wiki/ISO_8601. Пример: created_at.gte=2018-07-18T10:51:18.139Z. + CreatedAtGte OptDateTime `json:",omitempty,omitzero"` + // Фильтр по времени создания: время должно быть больше + // указанного значения («с такого-то момента, не включая + // его»). Указывается в формате ISO 8601: https://en.wikipedia. + // org/wiki/ISO_8601. Пример: created_at.gt=2018-07-18T10:51:18.139Z. + CreatedAtGt OptDateTime `json:",omitempty,omitzero"` + // Фильтр по времени создания: время должно быть меньше + // указанного значения или равно ему («по такой-то + // момент включительно»). Указывается в формате ISO 8601: + // https://en.wikipedia.org/wiki/ISO_8601. Пример: created_at.lte=2018-07-18T10:51:18.139Z. + CreatedAtLte OptDateTime `json:",omitempty,omitzero"` + // Фильтр по времени создания: время должно быть меньше + // указанного значения («по такой-то момент, не включая + // его»). Указывается в формате ISO 8601: https://en.wikipedia. + // org/wiki/ISO_8601. Пример: created_at.lt=2018-07-18T10:51:18.139Z. + CreatedAtLt OptDateTime `json:",omitempty,omitzero"` + // Filter by the method of receiving the payout: https://yookassa. + // ru/developers/payouts/getting-started/payout-types-and-limits#types-destination code. Example: + // payout_destination.type=bank_card. + PayoutDestinationType OptPayoutDestinationDataType `json:",omitempty,omitzero"` + // Filter by payout status: https://yookassa.ru/developers/api#payout_object_status. Example: + // status=succeeded. + Status OptPayoutStatus `json:",omitempty,omitzero"` + // Размер выдачи результатов запроса — количество + // объектов, передаваемых в ответе. Возможные значения: + // от 1 до 100. Пример: limit=50 Значение по умолчанию: 10. + Limit OptInt `json:",omitempty,omitzero"` + // Указатель на следующий фрагмент списка. Пример: + // cursor=37a5c87d-3984-51e8-a7f3-8de646d39ec15 В качестве указателя + // необходимо использовать значение параметра next_cursor, + // полученное в ответе на предыдущий запрос. + // Используется, если в списке больше объектов, чем + // может поместиться в выдаче (limit), и конец выдачи не + // достигнут. Пример использования: https://yookassa. + // ru/developers/using-api/lists#pagination. + Cursor OptString `json:",omitempty,omitzero"` +} + +func unpackPayoutsGetParams(packed middleware.Parameters) (params PayoutsGetParams) { + { + key := middleware.ParameterKey{ + Name: "created_at.gte", + In: "query", + } + if v, ok := packed[key]; ok { + params.CreatedAtGte = v.(OptDateTime) + } + } + { + key := middleware.ParameterKey{ + Name: "created_at.gt", + In: "query", + } + if v, ok := packed[key]; ok { + params.CreatedAtGt = v.(OptDateTime) + } + } + { + key := middleware.ParameterKey{ + Name: "created_at.lte", + In: "query", + } + if v, ok := packed[key]; ok { + params.CreatedAtLte = v.(OptDateTime) + } + } + { + key := middleware.ParameterKey{ + Name: "created_at.lt", + In: "query", + } + if v, ok := packed[key]; ok { + params.CreatedAtLt = v.(OptDateTime) + } + } + { + key := middleware.ParameterKey{ + Name: "payout_destination.type", + In: "query", + } + if v, ok := packed[key]; ok { + params.PayoutDestinationType = v.(OptPayoutDestinationDataType) + } + } + { + key := middleware.ParameterKey{ + Name: "status", + In: "query", + } + if v, ok := packed[key]; ok { + params.Status = v.(OptPayoutStatus) + } + } + { + key := middleware.ParameterKey{ + Name: "limit", + In: "query", + } + if v, ok := packed[key]; ok { + params.Limit = v.(OptInt) + } + } + { + key := middleware.ParameterKey{ + Name: "cursor", + In: "query", + } + if v, ok := packed[key]; ok { + params.Cursor = v.(OptString) + } + } + return params +} + +func decodePayoutsGetParams(args [0]string, argsEscaped bool, r *http.Request) (params PayoutsGetParams, _ error) { + q := uri.NewQueryDecoder(r.URL.Query()) + // Decode query: created_at.gte. + if err := func() error { + cfg := uri.QueryParameterDecodingConfig{ + Name: "created_at.gte", + Style: uri.QueryStyleForm, + Explode: true, + } + + if err := q.HasParam(cfg); err == nil { + if err := q.DecodeParam(cfg, func(d uri.Decoder) error { + var paramsDotCreatedAtGteVal time.Time + if err := func() error { + val, err := d.DecodeValue() + if err != nil { + return err + } + + c, err := conv.ToDateTime(val) + if err != nil { + return err + } + + paramsDotCreatedAtGteVal = c + return nil + }(); err != nil { + return err + } + params.CreatedAtGte.SetTo(paramsDotCreatedAtGteVal) + return nil + }); err != nil { + return err + } + } + return nil + }(); err != nil { + return params, &ogenerrors.DecodeParamError{ + Name: "created_at.gte", + In: "query", + Err: err, + } + } + // Decode query: created_at.gt. + if err := func() error { + cfg := uri.QueryParameterDecodingConfig{ + Name: "created_at.gt", + Style: uri.QueryStyleForm, + Explode: true, + } + + if err := q.HasParam(cfg); err == nil { + if err := q.DecodeParam(cfg, func(d uri.Decoder) error { + var paramsDotCreatedAtGtVal time.Time + if err := func() error { + val, err := d.DecodeValue() + if err != nil { + return err + } + + c, err := conv.ToDateTime(val) + if err != nil { + return err + } + + paramsDotCreatedAtGtVal = c + return nil + }(); err != nil { + return err + } + params.CreatedAtGt.SetTo(paramsDotCreatedAtGtVal) + return nil + }); err != nil { + return err + } + } + return nil + }(); err != nil { + return params, &ogenerrors.DecodeParamError{ + Name: "created_at.gt", + In: "query", + Err: err, + } + } + // Decode query: created_at.lte. + if err := func() error { + cfg := uri.QueryParameterDecodingConfig{ + Name: "created_at.lte", + Style: uri.QueryStyleForm, + Explode: true, + } + + if err := q.HasParam(cfg); err == nil { + if err := q.DecodeParam(cfg, func(d uri.Decoder) error { + var paramsDotCreatedAtLteVal time.Time + if err := func() error { + val, err := d.DecodeValue() + if err != nil { + return err + } + + c, err := conv.ToDateTime(val) + if err != nil { + return err + } + + paramsDotCreatedAtLteVal = c + return nil + }(); err != nil { + return err + } + params.CreatedAtLte.SetTo(paramsDotCreatedAtLteVal) + return nil + }); err != nil { + return err + } + } + return nil + }(); err != nil { + return params, &ogenerrors.DecodeParamError{ + Name: "created_at.lte", + In: "query", + Err: err, + } + } + // Decode query: created_at.lt. + if err := func() error { + cfg := uri.QueryParameterDecodingConfig{ + Name: "created_at.lt", + Style: uri.QueryStyleForm, + Explode: true, + } + + if err := q.HasParam(cfg); err == nil { + if err := q.DecodeParam(cfg, func(d uri.Decoder) error { + var paramsDotCreatedAtLtVal time.Time + if err := func() error { + val, err := d.DecodeValue() + if err != nil { + return err + } + + c, err := conv.ToDateTime(val) + if err != nil { + return err + } + + paramsDotCreatedAtLtVal = c + return nil + }(); err != nil { + return err + } + params.CreatedAtLt.SetTo(paramsDotCreatedAtLtVal) + return nil + }); err != nil { + return err + } + } + return nil + }(); err != nil { + return params, &ogenerrors.DecodeParamError{ + Name: "created_at.lt", + In: "query", + Err: err, + } + } + // Decode query: payout_destination.type. + if err := func() error { + cfg := uri.QueryParameterDecodingConfig{ + Name: "payout_destination.type", + Style: uri.QueryStyleForm, + Explode: true, + } + + if err := q.HasParam(cfg); err == nil { + if err := q.DecodeParam(cfg, func(d uri.Decoder) error { + var paramsDotPayoutDestinationTypeVal PayoutDestinationDataType + if err := func() error { + val, err := d.DecodeValue() + if err != nil { + return err + } + + c, err := conv.ToString(val) + if err != nil { + return err + } + + paramsDotPayoutDestinationTypeVal = PayoutDestinationDataType(c) + return nil + }(); err != nil { + return err + } + params.PayoutDestinationType.SetTo(paramsDotPayoutDestinationTypeVal) + return nil + }); err != nil { + return err + } + if err := func() error { + if value, ok := params.PayoutDestinationType.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + return params, &ogenerrors.DecodeParamError{ + Name: "payout_destination.type", + In: "query", + Err: err, + } + } + // Decode query: status. + if err := func() error { + cfg := uri.QueryParameterDecodingConfig{ + Name: "status", + Style: uri.QueryStyleForm, + Explode: true, + } + + if err := q.HasParam(cfg); err == nil { + if err := q.DecodeParam(cfg, func(d uri.Decoder) error { + var paramsDotStatusVal PayoutStatus + if err := func() error { + val, err := d.DecodeValue() + if err != nil { + return err + } + + c, err := conv.ToString(val) + if err != nil { + return err + } + + paramsDotStatusVal = PayoutStatus(c) + return nil + }(); err != nil { + return err + } + params.Status.SetTo(paramsDotStatusVal) + return nil + }); err != nil { + return err + } + if err := func() error { + if value, ok := params.Status.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + return params, &ogenerrors.DecodeParamError{ + Name: "status", + In: "query", + Err: err, + } + } + // Set default value for query: limit. + { + val := int(10) + params.Limit.SetTo(val) + } + // Decode query: limit. + if err := func() error { + cfg := uri.QueryParameterDecodingConfig{ + Name: "limit", + Style: uri.QueryStyleForm, + Explode: true, + } + + if err := q.HasParam(cfg); err == nil { + if err := q.DecodeParam(cfg, func(d uri.Decoder) error { + var paramsDotLimitVal int + if err := func() error { + val, err := d.DecodeValue() + if err != nil { + return err + } + + c, err := conv.ToInt(val) + if err != nil { + return err + } + + paramsDotLimitVal = c + return nil + }(); err != nil { + return err + } + params.Limit.SetTo(paramsDotLimitVal) + return nil + }); err != nil { + return err + } + if err := func() error { + if value, ok := params.Limit.Get(); ok { + if err := func() error { + if err := (validate.Int{ + MinSet: true, + Min: 1, + MaxSet: true, + Max: 100, + MinExclusive: false, + MaxExclusive: false, + MultipleOfSet: false, + MultipleOf: 0, + Pattern: nil, + }).Validate(int64(value)); err != nil { + return errors.Wrap(err, "int") + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + return params, &ogenerrors.DecodeParamError{ + Name: "limit", + In: "query", + Err: err, + } + } + // Decode query: cursor. + if err := func() error { + cfg := uri.QueryParameterDecodingConfig{ + Name: "cursor", + Style: uri.QueryStyleForm, + Explode: true, + } + + if err := q.HasParam(cfg); err == nil { + if err := q.DecodeParam(cfg, func(d uri.Decoder) error { + var paramsDotCursorVal string + if err := func() error { + val, err := d.DecodeValue() + if err != nil { + return err + } + + c, err := conv.ToString(val) + if err != nil { + return err + } + + paramsDotCursorVal = c + return nil + }(); err != nil { + return err + } + params.Cursor.SetTo(paramsDotCursorVal) + return nil + }); err != nil { + return err + } + } + return nil + }(); err != nil { + return params, &ogenerrors.DecodeParamError{ + Name: "cursor", + In: "query", + Err: err, + } + } + return params, nil +} + +// PayoutsPayoutIDGetParams is parameters of GET /payouts/{payout_id} operation. +type PayoutsPayoutIDGetParams struct { + PayoutID PayoutId +} + +func unpackPayoutsPayoutIDGetParams(packed middleware.Parameters) (params PayoutsPayoutIDGetParams) { + { + key := middleware.ParameterKey{ + Name: "payout_id", + In: "path", + } + params.PayoutID = packed[key].(PayoutId) + } + return params +} + +func decodePayoutsPayoutIDGetParams(args [1]string, argsEscaped bool, r *http.Request) (params PayoutsPayoutIDGetParams, _ error) { + // Decode path: payout_id. + 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: "payout_id", + Value: param, + Style: uri.PathStyleSimple, + Explode: false, + }) + + if err := func() error { + var paramsDotPayoutIDVal string + if err := func() error { + val, err := d.DecodeValue() + if err != nil { + return err + } + + c, err := conv.ToString(val) + if err != nil { + return err + } + + paramsDotPayoutIDVal = c + return nil + }(); err != nil { + return err + } + params.PayoutID = PayoutId(paramsDotPayoutIDVal) + return nil + }(); err != nil { + return err + } + if err := func() error { + if err := params.PayoutID.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } else { + return validate.ErrFieldRequired + } + return nil + }(); err != nil { + return params, &ogenerrors.DecodeParamError{ + Name: "payout_id", + In: "path", + Err: err, + } + } + return params, nil +} + +// PayoutsPostParams is parameters of POST /payouts operation. +type PayoutsPostParams struct { + IdempotenceKey string +} + +func unpackPayoutsPostParams(packed middleware.Parameters) (params PayoutsPostParams) { + { + key := middleware.ParameterKey{ + Name: "Idempotence-Key", + In: "header", + } + params.IdempotenceKey = packed[key].(string) + } + return params +} + +func decodePayoutsPostParams(args [0]string, argsEscaped bool, r *http.Request) (params PayoutsPostParams, _ error) { + h := uri.NewHeaderDecoder(r.Header) + // Set default value for header: Idempotence-Key. + { + val := string("2e1da982-1bb1-41f0-b9cf-758cc8bcf069") + params.IdempotenceKey = val + } + // Decode header: Idempotence-Key. + if err := func() error { + cfg := uri.HeaderParameterDecodingConfig{ + Name: "Idempotence-Key", + Explode: false, + } + if err := h.HasParam(cfg); err == nil { + if err := h.DecodeParam(cfg, func(d uri.Decoder) error { + val, err := d.DecodeValue() + if err != nil { + return err + } + + c, err := conv.ToString(val) + if err != nil { + return err + } + + params.IdempotenceKey = c + return nil + }); err != nil { + return err + } + if err := func() error { + if err := (validate.String{ + MinLength: 0, + MinLengthSet: false, + MaxLength: 64, + MaxLengthSet: true, + Email: false, + Hostname: false, + Regex: regexMap["[0-9a-zA-Z+-_.]{1,64}"], + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(params.IdempotenceKey)); err != nil { + return errors.Wrap(err, "string") + } + return nil + }(); err != nil { + return err + } + } else { + return err + } + return nil + }(); err != nil { + return params, &ogenerrors.DecodeParamError{ + Name: "Idempotence-Key", + In: "header", + Err: err, + } + } + return params, nil +} + +// PayoutsSearchGetParams is parameters of GET /payouts/search operation. +type PayoutsSearchGetParams struct { + // Фильтр по времени создания: время должно быть больше + // указанного значения или равно ему («с такого-то + // момента включительно»). Указывается в формате ISO 8601: + // https://en.wikipedia.org/wiki/ISO_8601. Пример: created_at.gte=2018-07-18T10:51:18.139Z. + CreatedAtGte OptDateTime `json:",omitempty,omitzero"` + // Фильтр по времени создания: время должно быть больше + // указанного значения («с такого-то момента, не включая + // его»). Указывается в формате ISO 8601: https://en.wikipedia. + // org/wiki/ISO_8601. Пример: created_at.gt=2018-07-18T10:51:18.139Z. + CreatedAtGt OptDateTime `json:",omitempty,omitzero"` + // Фильтр по времени создания: время должно быть меньше + // указанного значения или равно ему («по такой-то + // момент включительно»). Указывается в формате ISO 8601: + // https://en.wikipedia.org/wiki/ISO_8601. Пример: created_at.lte=2018-07-18T10:51:18.139Z. + CreatedAtLte OptDateTime `json:",omitempty,omitzero"` + // Фильтр по времени создания: время должно быть меньше + // указанного значения («по такой-то момент, не включая + // его»). Указывается в формате ISO 8601: https://en.wikipedia. + // org/wiki/ISO_8601. Пример: created_at.lt=2018-07-18T10:51:18.139Z. + CreatedAtLt OptDateTime `json:",omitempty,omitzero"` + // Filter by the metadata object. Strict "key-value" pair search: objects that have an exact key and + // value match in metadata are returned. Restrictions: you can specify a maximum of one "key-value" + // pair, the key name must not be longer than 32 characters, the key value must not be longer than + // 512 characters, and the data type is a string in UTF-8 format in URL-encoded form. Template: + // metadata[key]=value Example: metadata%5Boperation_id%5D=e2ab2e1c-776d-4376-aba8-d2099243d1f6. + Metadata OptMetadataInQueryParameter `json:",omitempty,omitzero"` + // Размер выдачи результатов запроса — количество + // объектов, передаваемых в ответе. Возможные значения: + // от 1 до 100. Пример: limit=50 Значение по умолчанию: 10. + Limit OptInt `json:",omitempty,omitzero"` + // Указатель на следующий фрагмент списка. Пример: + // cursor=37a5c87d-3984-51e8-a7f3-8de646d39ec15 В качестве указателя + // необходимо использовать значение параметра next_cursor, + // полученное в ответе на предыдущий запрос. + // Используется, если в списке больше объектов, чем + // может поместиться в выдаче (limit), и конец выдачи не + // достигнут. Пример использования: https://yookassa. + // ru/developers/using-api/lists#pagination. + Cursor OptString `json:",omitempty,omitzero"` +} + +func unpackPayoutsSearchGetParams(packed middleware.Parameters) (params PayoutsSearchGetParams) { + { + key := middleware.ParameterKey{ + Name: "created_at.gte", + In: "query", + } + if v, ok := packed[key]; ok { + params.CreatedAtGte = v.(OptDateTime) + } + } + { + key := middleware.ParameterKey{ + Name: "created_at.gt", + In: "query", + } + if v, ok := packed[key]; ok { + params.CreatedAtGt = v.(OptDateTime) + } + } + { + key := middleware.ParameterKey{ + Name: "created_at.lte", + In: "query", + } + if v, ok := packed[key]; ok { + params.CreatedAtLte = v.(OptDateTime) + } + } + { + key := middleware.ParameterKey{ + Name: "created_at.lt", + In: "query", + } + if v, ok := packed[key]; ok { + params.CreatedAtLt = v.(OptDateTime) + } + } + { + key := middleware.ParameterKey{ + Name: "metadata", + In: "query", + } + if v, ok := packed[key]; ok { + params.Metadata = v.(OptMetadataInQueryParameter) + } + } + { + key := middleware.ParameterKey{ + Name: "limit", + In: "query", + } + if v, ok := packed[key]; ok { + params.Limit = v.(OptInt) + } + } + { + key := middleware.ParameterKey{ + Name: "cursor", + In: "query", + } + if v, ok := packed[key]; ok { + params.Cursor = v.(OptString) + } + } + return params +} + +func decodePayoutsSearchGetParams(args [0]string, argsEscaped bool, r *http.Request) (params PayoutsSearchGetParams, _ error) { + q := uri.NewQueryDecoder(r.URL.Query()) + // Decode query: created_at.gte. + if err := func() error { + cfg := uri.QueryParameterDecodingConfig{ + Name: "created_at.gte", + Style: uri.QueryStyleForm, + Explode: true, + } + + if err := q.HasParam(cfg); err == nil { + if err := q.DecodeParam(cfg, func(d uri.Decoder) error { + var paramsDotCreatedAtGteVal time.Time + if err := func() error { + val, err := d.DecodeValue() + if err != nil { + return err + } + + c, err := conv.ToDateTime(val) + if err != nil { + return err + } + + paramsDotCreatedAtGteVal = c + return nil + }(); err != nil { + return err + } + params.CreatedAtGte.SetTo(paramsDotCreatedAtGteVal) + return nil + }); err != nil { + return err + } + } + return nil + }(); err != nil { + return params, &ogenerrors.DecodeParamError{ + Name: "created_at.gte", + In: "query", + Err: err, + } + } + // Decode query: created_at.gt. + if err := func() error { + cfg := uri.QueryParameterDecodingConfig{ + Name: "created_at.gt", + Style: uri.QueryStyleForm, + Explode: true, + } + + if err := q.HasParam(cfg); err == nil { + if err := q.DecodeParam(cfg, func(d uri.Decoder) error { + var paramsDotCreatedAtGtVal time.Time + if err := func() error { + val, err := d.DecodeValue() + if err != nil { + return err + } + + c, err := conv.ToDateTime(val) + if err != nil { + return err + } + + paramsDotCreatedAtGtVal = c + return nil + }(); err != nil { + return err + } + params.CreatedAtGt.SetTo(paramsDotCreatedAtGtVal) + return nil + }); err != nil { + return err + } + } + return nil + }(); err != nil { + return params, &ogenerrors.DecodeParamError{ + Name: "created_at.gt", + In: "query", + Err: err, + } + } + // Decode query: created_at.lte. + if err := func() error { + cfg := uri.QueryParameterDecodingConfig{ + Name: "created_at.lte", + Style: uri.QueryStyleForm, + Explode: true, + } + + if err := q.HasParam(cfg); err == nil { + if err := q.DecodeParam(cfg, func(d uri.Decoder) error { + var paramsDotCreatedAtLteVal time.Time + if err := func() error { + val, err := d.DecodeValue() + if err != nil { + return err + } + + c, err := conv.ToDateTime(val) + if err != nil { + return err + } + + paramsDotCreatedAtLteVal = c + return nil + }(); err != nil { + return err + } + params.CreatedAtLte.SetTo(paramsDotCreatedAtLteVal) + return nil + }); err != nil { + return err + } + } + return nil + }(); err != nil { + return params, &ogenerrors.DecodeParamError{ + Name: "created_at.lte", + In: "query", + Err: err, + } + } + // Decode query: created_at.lt. + if err := func() error { + cfg := uri.QueryParameterDecodingConfig{ + Name: "created_at.lt", + Style: uri.QueryStyleForm, + Explode: true, + } + + if err := q.HasParam(cfg); err == nil { + if err := q.DecodeParam(cfg, func(d uri.Decoder) error { + var paramsDotCreatedAtLtVal time.Time + if err := func() error { + val, err := d.DecodeValue() + if err != nil { + return err + } + + c, err := conv.ToDateTime(val) + if err != nil { + return err + } + + paramsDotCreatedAtLtVal = c + return nil + }(); err != nil { + return err + } + params.CreatedAtLt.SetTo(paramsDotCreatedAtLtVal) + return nil + }); err != nil { + return err + } + } + return nil + }(); err != nil { + return params, &ogenerrors.DecodeParamError{ + Name: "created_at.lt", + In: "query", + Err: err, + } + } + // Decode query: metadata. + if err := func() error { + cfg := uri.QueryParameterDecodingConfig{ + Name: "metadata", + Style: uri.QueryStyleDeepObject, + Explode: true, + } + + if err := q.HasParam(cfg); err == nil { + if err := q.DecodeParam(cfg, func(d uri.Decoder) error { + var paramsDotMetadataVal MetadataInQueryParameter + if err := func() error { + return paramsDotMetadataVal.DecodeURI(d) + }(); err != nil { + return err + } + params.Metadata.SetTo(paramsDotMetadataVal) + return nil + }); err != nil { + return err + } + if err := func() error { + if value, ok := params.Metadata.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + return params, &ogenerrors.DecodeParamError{ + Name: "metadata", + In: "query", + Err: err, + } + } + // Set default value for query: limit. + { + val := int(10) + params.Limit.SetTo(val) + } + // Decode query: limit. + if err := func() error { + cfg := uri.QueryParameterDecodingConfig{ + Name: "limit", + Style: uri.QueryStyleForm, + Explode: true, + } + + if err := q.HasParam(cfg); err == nil { + if err := q.DecodeParam(cfg, func(d uri.Decoder) error { + var paramsDotLimitVal int + if err := func() error { + val, err := d.DecodeValue() + if err != nil { + return err + } + + c, err := conv.ToInt(val) + if err != nil { + return err + } + + paramsDotLimitVal = c + return nil + }(); err != nil { + return err + } + params.Limit.SetTo(paramsDotLimitVal) + return nil + }); err != nil { + return err + } + if err := func() error { + if value, ok := params.Limit.Get(); ok { + if err := func() error { + if err := (validate.Int{ + MinSet: true, + Min: 1, + MaxSet: true, + Max: 100, + MinExclusive: false, + MaxExclusive: false, + MultipleOfSet: false, + MultipleOf: 0, + Pattern: nil, + }).Validate(int64(value)); err != nil { + return errors.Wrap(err, "int") + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + return params, &ogenerrors.DecodeParamError{ + Name: "limit", + In: "query", + Err: err, + } + } + // Decode query: cursor. + if err := func() error { + cfg := uri.QueryParameterDecodingConfig{ + Name: "cursor", + Style: uri.QueryStyleForm, + Explode: true, + } + + if err := q.HasParam(cfg); err == nil { + if err := q.DecodeParam(cfg, func(d uri.Decoder) error { + var paramsDotCursorVal string + if err := func() error { + val, err := d.DecodeValue() + if err != nil { + return err + } + + c, err := conv.ToString(val) + if err != nil { + return err + } + + paramsDotCursorVal = c + return nil + }(); err != nil { + return err + } + params.Cursor.SetTo(paramsDotCursorVal) + return nil + }); err != nil { + return err + } + } + return nil + }(); err != nil { + return params, &ogenerrors.DecodeParamError{ + Name: "cursor", + In: "query", + Err: err, + } + } + return params, nil +} + +// PersonalDataPersonalDataIDGetParams is parameters of GET /personal_data/{personal_data_id} operation. +type PersonalDataPersonalDataIDGetParams struct { + PersonalDataID PersonalDataId +} + +func unpackPersonalDataPersonalDataIDGetParams(packed middleware.Parameters) (params PersonalDataPersonalDataIDGetParams) { + { + key := middleware.ParameterKey{ + Name: "personal_data_id", + In: "path", + } + params.PersonalDataID = packed[key].(PersonalDataId) + } + return params +} + +func decodePersonalDataPersonalDataIDGetParams(args [1]string, argsEscaped bool, r *http.Request) (params PersonalDataPersonalDataIDGetParams, _ error) { + // Decode path: personal_data_id. + 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: "personal_data_id", + Value: param, + Style: uri.PathStyleSimple, + Explode: false, + }) + + if err := func() error { + var paramsDotPersonalDataIDVal string + if err := func() error { + val, err := d.DecodeValue() + if err != nil { + return err + } + + c, err := conv.ToString(val) + if err != nil { + return err + } + + paramsDotPersonalDataIDVal = c + return nil + }(); err != nil { + return err + } + params.PersonalDataID = PersonalDataId(paramsDotPersonalDataIDVal) + return nil + }(); err != nil { + return err + } + if err := func() error { + if err := params.PersonalDataID.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } else { + return validate.ErrFieldRequired + } + return nil + }(); err != nil { + return params, &ogenerrors.DecodeParamError{ + Name: "personal_data_id", + In: "path", + Err: err, + } + } + return params, nil +} + +// PersonalDataPostParams is parameters of POST /personal_data operation. +type PersonalDataPostParams struct { + IdempotenceKey string +} + +func unpackPersonalDataPostParams(packed middleware.Parameters) (params PersonalDataPostParams) { + { + key := middleware.ParameterKey{ + Name: "Idempotence-Key", + In: "header", + } + params.IdempotenceKey = packed[key].(string) + } + return params +} + +func decodePersonalDataPostParams(args [0]string, argsEscaped bool, r *http.Request) (params PersonalDataPostParams, _ error) { + h := uri.NewHeaderDecoder(r.Header) + // Set default value for header: Idempotence-Key. + { + val := string("2e1da982-1bb1-41f0-b9cf-758cc8bcf069") + params.IdempotenceKey = val + } + // Decode header: Idempotence-Key. + if err := func() error { + cfg := uri.HeaderParameterDecodingConfig{ + Name: "Idempotence-Key", + Explode: false, + } + if err := h.HasParam(cfg); err == nil { + if err := h.DecodeParam(cfg, func(d uri.Decoder) error { + val, err := d.DecodeValue() + if err != nil { + return err + } + + c, err := conv.ToString(val) + if err != nil { + return err + } + + params.IdempotenceKey = c + return nil + }); err != nil { + return err + } + if err := func() error { + if err := (validate.String{ + MinLength: 0, + MinLengthSet: false, + MaxLength: 64, + MaxLengthSet: true, + Email: false, + Hostname: false, + Regex: regexMap["[0-9a-zA-Z+-_.]{1,64}"], + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(params.IdempotenceKey)); err != nil { + return errors.Wrap(err, "string") + } + return nil + }(); err != nil { + return err + } + } else { + return err + } + return nil + }(); err != nil { + return params, &ogenerrors.DecodeParamError{ + Name: "Idempotence-Key", + In: "header", + Err: err, + } + } + return params, nil +} + +// ReceiptsGetParams is parameters of GET /receipts operation. +type ReceiptsGetParams struct { + // Фильтр по времени создания: время должно быть больше + // указанного значения или равно ему («с такого-то + // момента включительно»). Указывается в формате ISO 8601: + // https://en.wikipedia.org/wiki/ISO_8601. Пример: created_at.gte=2018-07-18T10:51:18.139Z. + CreatedAtGte OptDateTime `json:",omitempty,omitzero"` + // Фильтр по времени создания: время должно быть больше + // указанного значения («с такого-то момента, не включая + // его»). Указывается в формате ISO 8601: https://en.wikipedia. + // org/wiki/ISO_8601. Пример: created_at.gt=2018-07-18T10:51:18.139Z. + CreatedAtGt OptDateTime `json:",omitempty,omitzero"` + // Фильтр по времени создания: время должно быть меньше + // указанного значения или равно ему («по такой-то + // момент включительно»). Указывается в формате ISO 8601: + // https://en.wikipedia.org/wiki/ISO_8601. Пример: created_at.lte=2018-07-18T10:51:18.139Z. + CreatedAtLte OptDateTime `json:",omitempty,omitzero"` + // Фильтр по времени создания: время должно быть меньше + // указанного значения («по такой-то момент, не включая + // его»). Указывается в формате ISO 8601: https://en.wikipedia. + // org/wiki/ISO_8601. Пример: created_at.lt=2018-07-18T10:51:18.139Z. + CreatedAtLt OptDateTime `json:",omitempty,omitzero"` + // Фильтр по статусу чека. Возможные значения: pending — в + // обработке, succeeded — успешно зарегистрирован, canceled — + // отменен. Пример: status=succeeded. + Status OptReceiptRegistrationStatus `json:",omitempty,omitzero"` + // Фильтр по идентификатору платежа: https://yookassa. + // ru/developers/api#payment_object_id (получить все чеки для указанного + // платежа). Пример: payment_id=1da5c87d-0984-50e8-a7f3-8de646dd9ec9 В запросе + // можно передать только что-то одно: или идентификатор + // платежа, или идентификатор возврата. + PaymentID OptPaymentId `json:",omitempty,omitzero"` + // Фильтр по идентификатору возврата: https://yookassa. + // ru/developers/api#refund_object_id (получить все чеки для указанного + // возврата). Пример: refund_id=1da5c87d-0984-50e8-a7f3-8de646dd9ec9 В запросе + // можно передать только что-то одно: или идентификатор + // платежа, или идентификатор возврата. + RefundID OptRefundId `json:",omitempty,omitzero"` + // Размер выдачи результатов запроса — количество + // объектов, передаваемых в ответе. Возможные значения: + // от 1 до 100. Пример: limit=50 Значение по умолчанию: 10. + Limit OptInt `json:",omitempty,omitzero"` + // Указатель на следующий фрагмент списка. Пример: + // cursor=37a5c87d-3984-51e8-a7f3-8de646d39ec15 В качестве указателя + // необходимо использовать значение параметра next_cursor, + // полученное в ответе на предыдущий запрос. + // Используется, если в списке больше объектов, чем + // может поместиться в выдаче (limit), и конец выдачи не + // достигнут. Пример использования: https://yookassa. + // ru/developers/using-api/lists#pagination. + Cursor OptString `json:",omitempty,omitzero"` +} + +func unpackReceiptsGetParams(packed middleware.Parameters) (params ReceiptsGetParams) { + { + key := middleware.ParameterKey{ + Name: "created_at.gte", + In: "query", + } + if v, ok := packed[key]; ok { + params.CreatedAtGte = v.(OptDateTime) + } + } + { + key := middleware.ParameterKey{ + Name: "created_at.gt", + In: "query", + } + if v, ok := packed[key]; ok { + params.CreatedAtGt = v.(OptDateTime) + } + } + { + key := middleware.ParameterKey{ + Name: "created_at.lte", + In: "query", + } + if v, ok := packed[key]; ok { + params.CreatedAtLte = v.(OptDateTime) + } + } + { + key := middleware.ParameterKey{ + Name: "created_at.lt", + In: "query", + } + if v, ok := packed[key]; ok { + params.CreatedAtLt = v.(OptDateTime) + } + } + { + key := middleware.ParameterKey{ + Name: "status", + In: "query", + } + if v, ok := packed[key]; ok { + params.Status = v.(OptReceiptRegistrationStatus) + } + } + { + key := middleware.ParameterKey{ + Name: "payment_id", + In: "query", + } + if v, ok := packed[key]; ok { + params.PaymentID = v.(OptPaymentId) + } + } + { + key := middleware.ParameterKey{ + Name: "refund_id", + In: "query", + } + if v, ok := packed[key]; ok { + params.RefundID = v.(OptRefundId) + } + } + { + key := middleware.ParameterKey{ + Name: "limit", + In: "query", + } + if v, ok := packed[key]; ok { + params.Limit = v.(OptInt) + } + } + { + key := middleware.ParameterKey{ + Name: "cursor", + In: "query", + } + if v, ok := packed[key]; ok { + params.Cursor = v.(OptString) + } + } + return params +} + +func decodeReceiptsGetParams(args [0]string, argsEscaped bool, r *http.Request) (params ReceiptsGetParams, _ error) { + q := uri.NewQueryDecoder(r.URL.Query()) + // Decode query: created_at.gte. + if err := func() error { + cfg := uri.QueryParameterDecodingConfig{ + Name: "created_at.gte", + Style: uri.QueryStyleForm, + Explode: true, + } + + if err := q.HasParam(cfg); err == nil { + if err := q.DecodeParam(cfg, func(d uri.Decoder) error { + var paramsDotCreatedAtGteVal time.Time + if err := func() error { + val, err := d.DecodeValue() + if err != nil { + return err + } + + c, err := conv.ToDateTime(val) + if err != nil { + return err + } + + paramsDotCreatedAtGteVal = c + return nil + }(); err != nil { + return err + } + params.CreatedAtGte.SetTo(paramsDotCreatedAtGteVal) + return nil + }); err != nil { + return err + } + } + return nil + }(); err != nil { + return params, &ogenerrors.DecodeParamError{ + Name: "created_at.gte", + In: "query", + Err: err, + } + } + // Decode query: created_at.gt. + if err := func() error { + cfg := uri.QueryParameterDecodingConfig{ + Name: "created_at.gt", + Style: uri.QueryStyleForm, + Explode: true, + } + + if err := q.HasParam(cfg); err == nil { + if err := q.DecodeParam(cfg, func(d uri.Decoder) error { + var paramsDotCreatedAtGtVal time.Time + if err := func() error { + val, err := d.DecodeValue() + if err != nil { + return err + } + + c, err := conv.ToDateTime(val) + if err != nil { + return err + } + + paramsDotCreatedAtGtVal = c + return nil + }(); err != nil { + return err + } + params.CreatedAtGt.SetTo(paramsDotCreatedAtGtVal) + return nil + }); err != nil { + return err + } + } + return nil + }(); err != nil { + return params, &ogenerrors.DecodeParamError{ + Name: "created_at.gt", + In: "query", + Err: err, + } + } + // Decode query: created_at.lte. + if err := func() error { + cfg := uri.QueryParameterDecodingConfig{ + Name: "created_at.lte", + Style: uri.QueryStyleForm, + Explode: true, + } + + if err := q.HasParam(cfg); err == nil { + if err := q.DecodeParam(cfg, func(d uri.Decoder) error { + var paramsDotCreatedAtLteVal time.Time + if err := func() error { + val, err := d.DecodeValue() + if err != nil { + return err + } + + c, err := conv.ToDateTime(val) + if err != nil { + return err + } + + paramsDotCreatedAtLteVal = c + return nil + }(); err != nil { + return err + } + params.CreatedAtLte.SetTo(paramsDotCreatedAtLteVal) + return nil + }); err != nil { + return err + } + } + return nil + }(); err != nil { + return params, &ogenerrors.DecodeParamError{ + Name: "created_at.lte", + In: "query", + Err: err, + } + } + // Decode query: created_at.lt. + if err := func() error { + cfg := uri.QueryParameterDecodingConfig{ + Name: "created_at.lt", + Style: uri.QueryStyleForm, + Explode: true, + } + + if err := q.HasParam(cfg); err == nil { + if err := q.DecodeParam(cfg, func(d uri.Decoder) error { + var paramsDotCreatedAtLtVal time.Time + if err := func() error { + val, err := d.DecodeValue() + if err != nil { + return err + } + + c, err := conv.ToDateTime(val) + if err != nil { + return err + } + + paramsDotCreatedAtLtVal = c + return nil + }(); err != nil { + return err + } + params.CreatedAtLt.SetTo(paramsDotCreatedAtLtVal) + return nil + }); err != nil { + return err + } + } + return nil + }(); err != nil { + return params, &ogenerrors.DecodeParamError{ + Name: "created_at.lt", + In: "query", + Err: err, + } + } + // Decode query: status. + if err := func() error { + cfg := uri.QueryParameterDecodingConfig{ + Name: "status", + Style: uri.QueryStyleForm, + Explode: true, + } + + if err := q.HasParam(cfg); err == nil { + if err := q.DecodeParam(cfg, func(d uri.Decoder) error { + var paramsDotStatusVal ReceiptRegistrationStatus + if err := func() error { + val, err := d.DecodeValue() + if err != nil { + return err + } + + c, err := conv.ToString(val) + if err != nil { + return err + } + + paramsDotStatusVal = ReceiptRegistrationStatus(c) + return nil + }(); err != nil { + return err + } + params.Status.SetTo(paramsDotStatusVal) + return nil + }); err != nil { + return err + } + if err := func() error { + if value, ok := params.Status.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + return params, &ogenerrors.DecodeParamError{ + Name: "status", + In: "query", + Err: err, + } + } + // Decode query: payment_id. + if err := func() error { + cfg := uri.QueryParameterDecodingConfig{ + Name: "payment_id", + Style: uri.QueryStyleForm, + Explode: true, + } + + if err := q.HasParam(cfg); err == nil { + if err := q.DecodeParam(cfg, func(d uri.Decoder) error { + var paramsDotPaymentIDVal PaymentId + if err := func() error { + var paramsDotPaymentIDValVal string + if err := func() error { + val, err := d.DecodeValue() + if err != nil { + return err + } + + c, err := conv.ToString(val) + if err != nil { + return err + } + + paramsDotPaymentIDValVal = c + return nil + }(); err != nil { + return err + } + paramsDotPaymentIDVal = PaymentId(paramsDotPaymentIDValVal) + return nil + }(); err != nil { + return err + } + params.PaymentID.SetTo(paramsDotPaymentIDVal) + return nil + }); err != nil { + return err + } + if err := func() error { + if value, ok := params.PaymentID.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + return params, &ogenerrors.DecodeParamError{ + Name: "payment_id", + In: "query", + Err: err, + } + } + // Decode query: refund_id. + if err := func() error { + cfg := uri.QueryParameterDecodingConfig{ + Name: "refund_id", + Style: uri.QueryStyleForm, + Explode: true, + } + + if err := q.HasParam(cfg); err == nil { + if err := q.DecodeParam(cfg, func(d uri.Decoder) error { + var paramsDotRefundIDVal RefundId + if err := func() error { + var paramsDotRefundIDValVal string + if err := func() error { + val, err := d.DecodeValue() + if err != nil { + return err + } + + c, err := conv.ToString(val) + if err != nil { + return err + } + + paramsDotRefundIDValVal = c + return nil + }(); err != nil { + return err + } + paramsDotRefundIDVal = RefundId(paramsDotRefundIDValVal) + return nil + }(); err != nil { + return err + } + params.RefundID.SetTo(paramsDotRefundIDVal) + return nil + }); err != nil { + return err + } + if err := func() error { + if value, ok := params.RefundID.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + return params, &ogenerrors.DecodeParamError{ + Name: "refund_id", + In: "query", + Err: err, + } + } + // Set default value for query: limit. + { + val := int(10) + params.Limit.SetTo(val) + } + // Decode query: limit. + if err := func() error { + cfg := uri.QueryParameterDecodingConfig{ + Name: "limit", + Style: uri.QueryStyleForm, + Explode: true, + } + + if err := q.HasParam(cfg); err == nil { + if err := q.DecodeParam(cfg, func(d uri.Decoder) error { + var paramsDotLimitVal int + if err := func() error { + val, err := d.DecodeValue() + if err != nil { + return err + } + + c, err := conv.ToInt(val) + if err != nil { + return err + } + + paramsDotLimitVal = c + return nil + }(); err != nil { + return err + } + params.Limit.SetTo(paramsDotLimitVal) + return nil + }); err != nil { + return err + } + if err := func() error { + if value, ok := params.Limit.Get(); ok { + if err := func() error { + if err := (validate.Int{ + MinSet: true, + Min: 1, + MaxSet: true, + Max: 100, + MinExclusive: false, + MaxExclusive: false, + MultipleOfSet: false, + MultipleOf: 0, + Pattern: nil, + }).Validate(int64(value)); err != nil { + return errors.Wrap(err, "int") + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + return params, &ogenerrors.DecodeParamError{ + Name: "limit", + In: "query", + Err: err, + } + } + // Decode query: cursor. + if err := func() error { + cfg := uri.QueryParameterDecodingConfig{ + Name: "cursor", + Style: uri.QueryStyleForm, + Explode: true, + } + + if err := q.HasParam(cfg); err == nil { + if err := q.DecodeParam(cfg, func(d uri.Decoder) error { + var paramsDotCursorVal string + if err := func() error { + val, err := d.DecodeValue() + if err != nil { + return err + } + + c, err := conv.ToString(val) + if err != nil { + return err + } + + paramsDotCursorVal = c + return nil + }(); err != nil { + return err + } + params.Cursor.SetTo(paramsDotCursorVal) + return nil + }); err != nil { + return err + } + } + return nil + }(); err != nil { + return params, &ogenerrors.DecodeParamError{ + Name: "cursor", + In: "query", + Err: err, + } + } + return params, nil +} + +// ReceiptsPostParams is parameters of POST /receipts operation. +type ReceiptsPostParams struct { + IdempotenceKey string +} + +func unpackReceiptsPostParams(packed middleware.Parameters) (params ReceiptsPostParams) { + { + key := middleware.ParameterKey{ + Name: "Idempotence-Key", + In: "header", + } + params.IdempotenceKey = packed[key].(string) + } + return params +} + +func decodeReceiptsPostParams(args [0]string, argsEscaped bool, r *http.Request) (params ReceiptsPostParams, _ error) { + h := uri.NewHeaderDecoder(r.Header) + // Set default value for header: Idempotence-Key. + { + val := string("2e1da982-1bb1-41f0-b9cf-758cc8bcf069") + params.IdempotenceKey = val + } + // Decode header: Idempotence-Key. + if err := func() error { + cfg := uri.HeaderParameterDecodingConfig{ + Name: "Idempotence-Key", + Explode: false, + } + if err := h.HasParam(cfg); err == nil { + if err := h.DecodeParam(cfg, func(d uri.Decoder) error { + val, err := d.DecodeValue() + if err != nil { + return err + } + + c, err := conv.ToString(val) + if err != nil { + return err + } + + params.IdempotenceKey = c + return nil + }); err != nil { + return err + } + if err := func() error { + if err := (validate.String{ + MinLength: 0, + MinLengthSet: false, + MaxLength: 64, + MaxLengthSet: true, + Email: false, + Hostname: false, + Regex: regexMap["[0-9a-zA-Z+-_.]{1,64}"], + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(params.IdempotenceKey)); err != nil { + return errors.Wrap(err, "string") + } + return nil + }(); err != nil { + return err + } + } else { + return err + } + return nil + }(); err != nil { + return params, &ogenerrors.DecodeParamError{ + Name: "Idempotence-Key", + In: "header", + Err: err, + } + } + return params, nil +} + +// ReceiptsReceiptIDGetParams is parameters of GET /receipts/{receipt_id} operation. +type ReceiptsReceiptIDGetParams struct { + // Идентификатор чека. + ReceiptID ReceiptId +} + +func unpackReceiptsReceiptIDGetParams(packed middleware.Parameters) (params ReceiptsReceiptIDGetParams) { + { + key := middleware.ParameterKey{ + Name: "receipt_id", + In: "path", + } + params.ReceiptID = packed[key].(ReceiptId) + } + return params +} + +func decodeReceiptsReceiptIDGetParams(args [1]string, argsEscaped bool, r *http.Request) (params ReceiptsReceiptIDGetParams, _ error) { + // Decode path: receipt_id. + 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: "receipt_id", + Value: param, + Style: uri.PathStyleSimple, + Explode: false, + }) + + if err := func() error { + var paramsDotReceiptIDVal string + if err := func() error { + val, err := d.DecodeValue() + if err != nil { + return err + } + + c, err := conv.ToString(val) + if err != nil { + return err + } + + paramsDotReceiptIDVal = c + return nil + }(); err != nil { + return err + } + params.ReceiptID = ReceiptId(paramsDotReceiptIDVal) + return nil + }(); err != nil { + return err + } + if err := func() error { + if err := params.ReceiptID.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } else { + return validate.ErrFieldRequired + } + return nil + }(); err != nil { + return params, &ogenerrors.DecodeParamError{ + Name: "receipt_id", + In: "path", + Err: err, + } + } + return params, nil +} + +// RefundsGetParams is parameters of GET /refunds operation. +type RefundsGetParams struct { + // Фильтр по времени создания: время должно быть больше + // указанного значения или равно ему («с такого-то + // момента включительно»). Указывается в формате ISO 8601: + // https://en.wikipedia.org/wiki/ISO_8601. Пример: created_at.gte=2018-07-18T10:51:18.139Z. + CreatedAtGte OptDateTime `json:",omitempty,omitzero"` + // Фильтр по времени создания: время должно быть больше + // указанного значения («с такого-то момента, не включая + // его»). Указывается в формате ISO 8601: https://en.wikipedia. + // org/wiki/ISO_8601. Пример: created_at.gt=2018-07-18T10:51:18.139Z. + CreatedAtGt OptDateTime `json:",omitempty,omitzero"` + // Фильтр по времени создания: время должно быть меньше + // указанного значения или равно ему («по такой-то + // момент включительно»). Указывается в формате ISO 8601: + // https://en.wikipedia.org/wiki/ISO_8601. Пример: created_at.lte=2018-07-18T10:51:18.139Z. + CreatedAtLte OptDateTime `json:",omitempty,omitzero"` + // Фильтр по времени создания: время должно быть меньше + // указанного значения («по такой-то момент, не включая + // его»). Указывается в формате ISO 8601: https://en.wikipedia. + // org/wiki/ISO_8601. Пример: created_at.lt=2018-07-18T10:51:18.139Z. + CreatedAtLt OptDateTime `json:",omitempty,omitzero"` + // Фильтр по идентификатору платежа: https://yookassa. + // ru/developers/api#payment_object_id (получить все возвраты по платежу). + // Пример: payment_id=1da5c87d-0984-50e8-a7f3-8de646dd9ec9. + PaymentID OptPaymentId `json:",omitempty,omitzero"` + // Фильтр по статусу возврата. Возможные значения: pending + // — в обработке, succeeded — успешно выполнен, canceled — + // отменен. Пример: status=succeeded. + Status OptRefundStatus `json:",omitempty,omitzero"` + // Размер выдачи результатов запроса — количество + // объектов, передаваемых в ответе. Возможные значения: + // от 1 до 100. Пример: limit=50 Значение по умолчанию: 10. + Limit OptInt `json:",omitempty,omitzero"` + // Указатель на следующий фрагмент списка. Пример: + // cursor=37a5c87d-3984-51e8-a7f3-8de646d39ec15 В качестве указателя + // необходимо использовать значение параметра next_cursor, + // полученное в ответе на предыдущий запрос. + // Используется, если в списке больше объектов, чем + // может поместиться в выдаче (limit), и конец выдачи не + // достигнут. Пример использования: https://yookassa. + // ru/developers/using-api/lists#pagination. + Cursor OptString `json:",omitempty,omitzero"` +} + +func unpackRefundsGetParams(packed middleware.Parameters) (params RefundsGetParams) { + { + key := middleware.ParameterKey{ + Name: "created_at.gte", + In: "query", + } + if v, ok := packed[key]; ok { + params.CreatedAtGte = v.(OptDateTime) + } + } + { + key := middleware.ParameterKey{ + Name: "created_at.gt", + In: "query", + } + if v, ok := packed[key]; ok { + params.CreatedAtGt = v.(OptDateTime) + } + } + { + key := middleware.ParameterKey{ + Name: "created_at.lte", + In: "query", + } + if v, ok := packed[key]; ok { + params.CreatedAtLte = v.(OptDateTime) + } + } + { + key := middleware.ParameterKey{ + Name: "created_at.lt", + In: "query", + } + if v, ok := packed[key]; ok { + params.CreatedAtLt = v.(OptDateTime) + } + } + { + key := middleware.ParameterKey{ + Name: "payment_id", + In: "query", + } + if v, ok := packed[key]; ok { + params.PaymentID = v.(OptPaymentId) + } + } + { + key := middleware.ParameterKey{ + Name: "status", + In: "query", + } + if v, ok := packed[key]; ok { + params.Status = v.(OptRefundStatus) + } + } + { + key := middleware.ParameterKey{ + Name: "limit", + In: "query", + } + if v, ok := packed[key]; ok { + params.Limit = v.(OptInt) + } + } + { + key := middleware.ParameterKey{ + Name: "cursor", + In: "query", + } + if v, ok := packed[key]; ok { + params.Cursor = v.(OptString) + } + } + return params +} + +func decodeRefundsGetParams(args [0]string, argsEscaped bool, r *http.Request) (params RefundsGetParams, _ error) { + q := uri.NewQueryDecoder(r.URL.Query()) + // Decode query: created_at.gte. + if err := func() error { + cfg := uri.QueryParameterDecodingConfig{ + Name: "created_at.gte", + Style: uri.QueryStyleForm, + Explode: true, + } + + if err := q.HasParam(cfg); err == nil { + if err := q.DecodeParam(cfg, func(d uri.Decoder) error { + var paramsDotCreatedAtGteVal time.Time + if err := func() error { + val, err := d.DecodeValue() + if err != nil { + return err + } + + c, err := conv.ToDateTime(val) + if err != nil { + return err + } + + paramsDotCreatedAtGteVal = c + return nil + }(); err != nil { + return err + } + params.CreatedAtGte.SetTo(paramsDotCreatedAtGteVal) + return nil + }); err != nil { + return err + } + } + return nil + }(); err != nil { + return params, &ogenerrors.DecodeParamError{ + Name: "created_at.gte", + In: "query", + Err: err, + } + } + // Decode query: created_at.gt. + if err := func() error { + cfg := uri.QueryParameterDecodingConfig{ + Name: "created_at.gt", + Style: uri.QueryStyleForm, + Explode: true, + } + + if err := q.HasParam(cfg); err == nil { + if err := q.DecodeParam(cfg, func(d uri.Decoder) error { + var paramsDotCreatedAtGtVal time.Time + if err := func() error { + val, err := d.DecodeValue() + if err != nil { + return err + } + + c, err := conv.ToDateTime(val) + if err != nil { + return err + } + + paramsDotCreatedAtGtVal = c + return nil + }(); err != nil { + return err + } + params.CreatedAtGt.SetTo(paramsDotCreatedAtGtVal) + return nil + }); err != nil { + return err + } + } + return nil + }(); err != nil { + return params, &ogenerrors.DecodeParamError{ + Name: "created_at.gt", + In: "query", + Err: err, + } + } + // Decode query: created_at.lte. + if err := func() error { + cfg := uri.QueryParameterDecodingConfig{ + Name: "created_at.lte", + Style: uri.QueryStyleForm, + Explode: true, + } + + if err := q.HasParam(cfg); err == nil { + if err := q.DecodeParam(cfg, func(d uri.Decoder) error { + var paramsDotCreatedAtLteVal time.Time + if err := func() error { + val, err := d.DecodeValue() + if err != nil { + return err + } + + c, err := conv.ToDateTime(val) + if err != nil { + return err + } + + paramsDotCreatedAtLteVal = c + return nil + }(); err != nil { + return err + } + params.CreatedAtLte.SetTo(paramsDotCreatedAtLteVal) + return nil + }); err != nil { + return err + } + } + return nil + }(); err != nil { + return params, &ogenerrors.DecodeParamError{ + Name: "created_at.lte", + In: "query", + Err: err, + } + } + // Decode query: created_at.lt. + if err := func() error { + cfg := uri.QueryParameterDecodingConfig{ + Name: "created_at.lt", + Style: uri.QueryStyleForm, + Explode: true, + } + + if err := q.HasParam(cfg); err == nil { + if err := q.DecodeParam(cfg, func(d uri.Decoder) error { + var paramsDotCreatedAtLtVal time.Time + if err := func() error { + val, err := d.DecodeValue() + if err != nil { + return err + } + + c, err := conv.ToDateTime(val) + if err != nil { + return err + } + + paramsDotCreatedAtLtVal = c + return nil + }(); err != nil { + return err + } + params.CreatedAtLt.SetTo(paramsDotCreatedAtLtVal) + return nil + }); err != nil { + return err + } + } + return nil + }(); err != nil { + return params, &ogenerrors.DecodeParamError{ + Name: "created_at.lt", + In: "query", + Err: err, + } + } + // Decode query: payment_id. + if err := func() error { + cfg := uri.QueryParameterDecodingConfig{ + Name: "payment_id", + Style: uri.QueryStyleForm, + Explode: true, + } + + if err := q.HasParam(cfg); err == nil { + if err := q.DecodeParam(cfg, func(d uri.Decoder) error { + var paramsDotPaymentIDVal PaymentId + if err := func() error { + var paramsDotPaymentIDValVal string + if err := func() error { + val, err := d.DecodeValue() + if err != nil { + return err + } + + c, err := conv.ToString(val) + if err != nil { + return err + } + + paramsDotPaymentIDValVal = c + return nil + }(); err != nil { + return err + } + paramsDotPaymentIDVal = PaymentId(paramsDotPaymentIDValVal) + return nil + }(); err != nil { + return err + } + params.PaymentID.SetTo(paramsDotPaymentIDVal) + return nil + }); err != nil { + return err + } + if err := func() error { + if value, ok := params.PaymentID.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + return params, &ogenerrors.DecodeParamError{ + Name: "payment_id", + In: "query", + Err: err, + } + } + // Decode query: status. + if err := func() error { + cfg := uri.QueryParameterDecodingConfig{ + Name: "status", + Style: uri.QueryStyleForm, + Explode: true, + } + + if err := q.HasParam(cfg); err == nil { + if err := q.DecodeParam(cfg, func(d uri.Decoder) error { + var paramsDotStatusVal RefundStatus + if err := func() error { + val, err := d.DecodeValue() + if err != nil { + return err + } + + c, err := conv.ToString(val) + if err != nil { + return err + } + + paramsDotStatusVal = RefundStatus(c) + return nil + }(); err != nil { + return err + } + params.Status.SetTo(paramsDotStatusVal) + return nil + }); err != nil { + return err + } + if err := func() error { + if value, ok := params.Status.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + return params, &ogenerrors.DecodeParamError{ + Name: "status", + In: "query", + Err: err, + } + } + // Set default value for query: limit. + { + val := int(10) + params.Limit.SetTo(val) + } + // Decode query: limit. + if err := func() error { + cfg := uri.QueryParameterDecodingConfig{ + Name: "limit", + Style: uri.QueryStyleForm, + Explode: true, + } + + if err := q.HasParam(cfg); err == nil { + if err := q.DecodeParam(cfg, func(d uri.Decoder) error { + var paramsDotLimitVal int + if err := func() error { + val, err := d.DecodeValue() + if err != nil { + return err + } + + c, err := conv.ToInt(val) + if err != nil { + return err + } + + paramsDotLimitVal = c + return nil + }(); err != nil { + return err + } + params.Limit.SetTo(paramsDotLimitVal) + return nil + }); err != nil { + return err + } + if err := func() error { + if value, ok := params.Limit.Get(); ok { + if err := func() error { + if err := (validate.Int{ + MinSet: true, + Min: 1, + MaxSet: true, + Max: 100, + MinExclusive: false, + MaxExclusive: false, + MultipleOfSet: false, + MultipleOf: 0, + Pattern: nil, + }).Validate(int64(value)); err != nil { + return errors.Wrap(err, "int") + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + return params, &ogenerrors.DecodeParamError{ + Name: "limit", + In: "query", + Err: err, + } + } + // Decode query: cursor. + if err := func() error { + cfg := uri.QueryParameterDecodingConfig{ + Name: "cursor", + Style: uri.QueryStyleForm, + Explode: true, + } + + if err := q.HasParam(cfg); err == nil { + if err := q.DecodeParam(cfg, func(d uri.Decoder) error { + var paramsDotCursorVal string + if err := func() error { + val, err := d.DecodeValue() + if err != nil { + return err + } + + c, err := conv.ToString(val) + if err != nil { + return err + } + + paramsDotCursorVal = c + return nil + }(); err != nil { + return err + } + params.Cursor.SetTo(paramsDotCursorVal) + return nil + }); err != nil { + return err + } + } + return nil + }(); err != nil { + return params, &ogenerrors.DecodeParamError{ + Name: "cursor", + In: "query", + Err: err, + } + } + return params, nil +} + +// RefundsPostParams is parameters of POST /refunds operation. +type RefundsPostParams struct { + IdempotenceKey string +} + +func unpackRefundsPostParams(packed middleware.Parameters) (params RefundsPostParams) { + { + key := middleware.ParameterKey{ + Name: "Idempotence-Key", + In: "header", + } + params.IdempotenceKey = packed[key].(string) + } + return params +} + +func decodeRefundsPostParams(args [0]string, argsEscaped bool, r *http.Request) (params RefundsPostParams, _ error) { + h := uri.NewHeaderDecoder(r.Header) + // Set default value for header: Idempotence-Key. + { + val := string("2e1da982-1bb1-41f0-b9cf-758cc8bcf069") + params.IdempotenceKey = val + } + // Decode header: Idempotence-Key. + if err := func() error { + cfg := uri.HeaderParameterDecodingConfig{ + Name: "Idempotence-Key", + Explode: false, + } + if err := h.HasParam(cfg); err == nil { + if err := h.DecodeParam(cfg, func(d uri.Decoder) error { + val, err := d.DecodeValue() + if err != nil { + return err + } + + c, err := conv.ToString(val) + if err != nil { + return err + } + + params.IdempotenceKey = c + return nil + }); err != nil { + return err + } + if err := func() error { + if err := (validate.String{ + MinLength: 0, + MinLengthSet: false, + MaxLength: 64, + MaxLengthSet: true, + Email: false, + Hostname: false, + Regex: regexMap["[0-9a-zA-Z+-_.]{1,64}"], + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(params.IdempotenceKey)); err != nil { + return errors.Wrap(err, "string") + } + return nil + }(); err != nil { + return err + } + } else { + return err + } + return nil + }(); err != nil { + return params, &ogenerrors.DecodeParamError{ + Name: "Idempotence-Key", + In: "header", + Err: err, + } + } + return params, nil +} + +// RefundsRefundIDGetParams is parameters of GET /refunds/{refund_id} operation. +type RefundsRefundIDGetParams struct { + // Идентификатор возврата. + RefundID string +} + +func unpackRefundsRefundIDGetParams(packed middleware.Parameters) (params RefundsRefundIDGetParams) { + { + key := middleware.ParameterKey{ + Name: "refund_id", + In: "path", + } + params.RefundID = packed[key].(string) + } + return params +} + +func decodeRefundsRefundIDGetParams(args [1]string, argsEscaped bool, r *http.Request) (params RefundsRefundIDGetParams, _ error) { + // Set default value for path: refund_id. + { + val := string("cae993f2-eb15-45f5-91c5-efb87107ae10") + params.RefundID = val + } + // Decode path: refund_id. + 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: "refund_id", + Value: param, + Style: uri.PathStyleSimple, + Explode: false, + }) + + if err := func() error { + val, err := d.DecodeValue() + if err != nil { + return err + } + + c, err := conv.ToString(val) + if err != nil { + return err + } + + params.RefundID = c + return nil + }(); err != nil { + return err + } + if err := func() error { + if err := (validate.String{ + MinLength: 36, + MinLengthSet: true, + MaxLength: 36, + MaxLengthSet: true, + Email: false, + Hostname: false, + Regex: nil, + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(params.RefundID)); err != nil { + return errors.Wrap(err, "string") + } + return nil + }(); err != nil { + return err + } + } else { + return validate.ErrFieldRequired + } + return nil + }(); err != nil { + return params, &ogenerrors.DecodeParamError{ + Name: "refund_id", + In: "path", + Err: err, + } + } + return params, nil +} + +// WebhooksPostParams is parameters of POST /webhooks operation. +type WebhooksPostParams struct { + IdempotenceKey string +} + +func unpackWebhooksPostParams(packed middleware.Parameters) (params WebhooksPostParams) { + { + key := middleware.ParameterKey{ + Name: "Idempotence-Key", + In: "header", + } + params.IdempotenceKey = packed[key].(string) + } + return params +} + +func decodeWebhooksPostParams(args [0]string, argsEscaped bool, r *http.Request) (params WebhooksPostParams, _ error) { + h := uri.NewHeaderDecoder(r.Header) + // Set default value for header: Idempotence-Key. + { + val := string("2e1da982-1bb1-41f0-b9cf-758cc8bcf069") + params.IdempotenceKey = val + } + // Decode header: Idempotence-Key. + if err := func() error { + cfg := uri.HeaderParameterDecodingConfig{ + Name: "Idempotence-Key", + Explode: false, + } + if err := h.HasParam(cfg); err == nil { + if err := h.DecodeParam(cfg, func(d uri.Decoder) error { + val, err := d.DecodeValue() + if err != nil { + return err + } + + c, err := conv.ToString(val) + if err != nil { + return err + } + + params.IdempotenceKey = c + return nil + }); err != nil { + return err + } + if err := func() error { + if err := (validate.String{ + MinLength: 0, + MinLengthSet: false, + MaxLength: 64, + MaxLengthSet: true, + Email: false, + Hostname: false, + Regex: regexMap["[0-9a-zA-Z+-_.]{1,64}"], + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(params.IdempotenceKey)); err != nil { + return errors.Wrap(err, "string") + } + return nil + }(); err != nil { + return err + } + } else { + return err + } + return nil + }(); err != nil { + return params, &ogenerrors.DecodeParamError{ + Name: "Idempotence-Key", + In: "header", + Err: err, + } + } + return params, nil +} + +// WebhooksWebhookIDDeleteParams is parameters of DELETE /webhooks/{webhook_id} operation. +type WebhooksWebhookIDDeleteParams struct { + // Идентификатор webhook-a. + WebhookID string +} + +func unpackWebhooksWebhookIDDeleteParams(packed middleware.Parameters) (params WebhooksWebhookIDDeleteParams) { + { + key := middleware.ParameterKey{ + Name: "webhook_id", + In: "path", + } + params.WebhookID = packed[key].(string) + } + return params +} + +func decodeWebhooksWebhookIDDeleteParams(args [1]string, argsEscaped bool, r *http.Request) (params WebhooksWebhookIDDeleteParams, _ error) { + // Set default value for path: webhook_id. + { + val := string("1da5c87d-0984-50e8-a7f3-8de646dd9ec9") + params.WebhookID = val + } + // Decode path: webhook_id. + 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: "webhook_id", + Value: param, + Style: uri.PathStyleSimple, + Explode: false, + }) + + if err := func() error { + val, err := d.DecodeValue() + if err != nil { + return err + } + + c, err := conv.ToString(val) + if err != nil { + return err + } + + params.WebhookID = c + return nil + }(); err != nil { + return err + } + if err := func() error { + if err := (validate.String{ + MinLength: 36, + MinLengthSet: true, + MaxLength: 36, + MaxLengthSet: true, + Email: false, + Hostname: false, + Regex: nil, + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(params.WebhookID)); err != nil { + return errors.Wrap(err, "string") + } + return nil + }(); err != nil { + return err + } + } else { + return validate.ErrFieldRequired + } + return nil + }(); err != nil { + return params, &ogenerrors.DecodeParamError{ + Name: "webhook_id", + In: "path", + Err: err, + } + } + return params, nil +} diff --git a/internal/service/yookassa/gen/oas_request_decoders_gen.go b/internal/service/yookassa/gen/oas_request_decoders_gen.go new file mode 100644 index 0000000..3e29f3d --- /dev/null +++ b/internal/service/yookassa/gen/oas_request_decoders_gen.go @@ -0,0 +1,718 @@ +// Code generated by ogen, DO NOT EDIT. + +package gen + +import ( + "bytes" + "io" + "mime" + "net/http" + + "github.com/go-faster/errors" + "github.com/go-faster/jx" + "github.com/ogen-go/ogen/ogenerrors" + "github.com/ogen-go/ogen/validate" +) + +func (s *Server) decodeDealsPostRequest(r *http.Request) ( + req *SafeDealRequest, + rawBody []byte, + close func() error, + rerr error, +) { + var closers []func() error + close = func() error { + var merr error + // Close in reverse order, to match defer behavior. + for i := len(closers) - 1; i >= 0; i-- { + c := closers[i] + merr = errors.Join(merr, c()) + } + return merr + } + defer func() { + if rerr != nil { + rerr = errors.Join(rerr, close()) + } + }() + ct, _, err := mime.ParseMediaType(r.Header.Get("Content-Type")) + if err != nil { + return req, rawBody, close, errors.Wrap(err, "parse media type") + } + switch { + case ct == "application/json": + if r.ContentLength == 0 { + return req, rawBody, close, validate.ErrBodyRequired + } + buf, err := io.ReadAll(r.Body) + defer func() { + _ = r.Body.Close() + }() + if err != nil { + return req, rawBody, close, err + } + + // Reset the body to allow for downstream reading. + r.Body = io.NopCloser(bytes.NewBuffer(buf)) + + if len(buf) == 0 { + return req, rawBody, close, validate.ErrBodyRequired + } + + rawBody = append(rawBody, buf...) + d := jx.DecodeBytes(buf) + + var request SafeDealRequest + if err := func() error { + if err := request.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 req, rawBody, close, err + } + if err := func() error { + if err := request.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return req, rawBody, close, errors.Wrap(err, "validate") + } + return &request, rawBody, close, nil + default: + return req, rawBody, close, validate.InvalidContentType(ct) + } +} + +func (s *Server) decodePaymentMethodsPostRequest(r *http.Request) ( + req PaymentMethodsPostReq, + rawBody []byte, + close func() error, + rerr error, +) { + var closers []func() error + close = func() error { + var merr error + // Close in reverse order, to match defer behavior. + for i := len(closers) - 1; i >= 0; i-- { + c := closers[i] + merr = errors.Join(merr, c()) + } + return merr + } + defer func() { + if rerr != nil { + rerr = errors.Join(rerr, close()) + } + }() + ct, _, err := mime.ParseMediaType(r.Header.Get("Content-Type")) + if err != nil { + return req, rawBody, close, errors.Wrap(err, "parse media type") + } + switch { + case ct == "application/json": + if r.ContentLength == 0 { + return req, rawBody, close, validate.ErrBodyRequired + } + buf, err := io.ReadAll(r.Body) + defer func() { + _ = r.Body.Close() + }() + if err != nil { + return req, rawBody, close, err + } + + // Reset the body to allow for downstream reading. + r.Body = io.NopCloser(bytes.NewBuffer(buf)) + + if len(buf) == 0 { + return req, rawBody, close, validate.ErrBodyRequired + } + + rawBody = append(rawBody, buf...) + d := jx.DecodeBytes(buf) + + var request PaymentMethodsPostReq + if err := func() error { + if err := request.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 req, rawBody, close, err + } + if err := func() error { + if err := request.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return req, rawBody, close, errors.Wrap(err, "validate") + } + return request, rawBody, close, nil + default: + return req, rawBody, close, validate.InvalidContentType(ct) + } +} + +func (s *Server) decodePaymentsPaymentIDCapturePostRequest(r *http.Request) ( + req *PaymentsPaymentIDCapturePostReq, + rawBody []byte, + close func() error, + rerr error, +) { + var closers []func() error + close = func() error { + var merr error + // Close in reverse order, to match defer behavior. + for i := len(closers) - 1; i >= 0; i-- { + c := closers[i] + merr = errors.Join(merr, c()) + } + return merr + } + defer func() { + if rerr != nil { + rerr = errors.Join(rerr, close()) + } + }() + ct, _, err := mime.ParseMediaType(r.Header.Get("Content-Type")) + if err != nil { + return req, rawBody, close, errors.Wrap(err, "parse media type") + } + switch { + case ct == "application/json": + if r.ContentLength == 0 { + return req, rawBody, close, validate.ErrBodyRequired + } + buf, err := io.ReadAll(r.Body) + defer func() { + _ = r.Body.Close() + }() + if err != nil { + return req, rawBody, close, err + } + + // Reset the body to allow for downstream reading. + r.Body = io.NopCloser(bytes.NewBuffer(buf)) + + if len(buf) == 0 { + return req, rawBody, close, validate.ErrBodyRequired + } + + rawBody = append(rawBody, buf...) + d := jx.DecodeBytes(buf) + + var request PaymentsPaymentIDCapturePostReq + if err := func() error { + if err := request.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 req, rawBody, close, err + } + if err := func() error { + if err := request.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return req, rawBody, close, errors.Wrap(err, "validate") + } + return &request, rawBody, close, nil + default: + return req, rawBody, close, validate.InvalidContentType(ct) + } +} + +func (s *Server) decodePaymentsPostRequest(r *http.Request) ( + req *PaymentsPostReq, + rawBody []byte, + close func() error, + rerr error, +) { + var closers []func() error + close = func() error { + var merr error + // Close in reverse order, to match defer behavior. + for i := len(closers) - 1; i >= 0; i-- { + c := closers[i] + merr = errors.Join(merr, c()) + } + return merr + } + defer func() { + if rerr != nil { + rerr = errors.Join(rerr, close()) + } + }() + ct, _, err := mime.ParseMediaType(r.Header.Get("Content-Type")) + if err != nil { + return req, rawBody, close, errors.Wrap(err, "parse media type") + } + switch { + case ct == "application/json": + if r.ContentLength == 0 { + return req, rawBody, close, validate.ErrBodyRequired + } + buf, err := io.ReadAll(r.Body) + defer func() { + _ = r.Body.Close() + }() + if err != nil { + return req, rawBody, close, err + } + + // Reset the body to allow for downstream reading. + r.Body = io.NopCloser(bytes.NewBuffer(buf)) + + if len(buf) == 0 { + return req, rawBody, close, validate.ErrBodyRequired + } + + rawBody = append(rawBody, buf...) + d := jx.DecodeBytes(buf) + + var request PaymentsPostReq + if err := func() error { + if err := request.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 req, rawBody, close, err + } + if err := func() error { + if err := request.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return req, rawBody, close, errors.Wrap(err, "validate") + } + return &request, rawBody, close, nil + default: + return req, rawBody, close, validate.InvalidContentType(ct) + } +} + +func (s *Server) decodePayoutsPostRequest(r *http.Request) ( + req *PayoutRequest, + rawBody []byte, + close func() error, + rerr error, +) { + var closers []func() error + close = func() error { + var merr error + // Close in reverse order, to match defer behavior. + for i := len(closers) - 1; i >= 0; i-- { + c := closers[i] + merr = errors.Join(merr, c()) + } + return merr + } + defer func() { + if rerr != nil { + rerr = errors.Join(rerr, close()) + } + }() + ct, _, err := mime.ParseMediaType(r.Header.Get("Content-Type")) + if err != nil { + return req, rawBody, close, errors.Wrap(err, "parse media type") + } + switch { + case ct == "application/json": + if r.ContentLength == 0 { + return req, rawBody, close, validate.ErrBodyRequired + } + buf, err := io.ReadAll(r.Body) + defer func() { + _ = r.Body.Close() + }() + if err != nil { + return req, rawBody, close, err + } + + // Reset the body to allow for downstream reading. + r.Body = io.NopCloser(bytes.NewBuffer(buf)) + + if len(buf) == 0 { + return req, rawBody, close, validate.ErrBodyRequired + } + + rawBody = append(rawBody, buf...) + d := jx.DecodeBytes(buf) + + var request PayoutRequest + if err := func() error { + if err := request.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 req, rawBody, close, err + } + if err := func() error { + if err := request.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return req, rawBody, close, errors.Wrap(err, "validate") + } + return &request, rawBody, close, nil + default: + return req, rawBody, close, validate.InvalidContentType(ct) + } +} + +func (s *Server) decodePersonalDataPostRequest(r *http.Request) ( + req PersonalDataPostReq, + rawBody []byte, + close func() error, + rerr error, +) { + var closers []func() error + close = func() error { + var merr error + // Close in reverse order, to match defer behavior. + for i := len(closers) - 1; i >= 0; i-- { + c := closers[i] + merr = errors.Join(merr, c()) + } + return merr + } + defer func() { + if rerr != nil { + rerr = errors.Join(rerr, close()) + } + }() + ct, _, err := mime.ParseMediaType(r.Header.Get("Content-Type")) + if err != nil { + return req, rawBody, close, errors.Wrap(err, "parse media type") + } + switch { + case ct == "application/json": + if r.ContentLength == 0 { + return req, rawBody, close, validate.ErrBodyRequired + } + buf, err := io.ReadAll(r.Body) + defer func() { + _ = r.Body.Close() + }() + if err != nil { + return req, rawBody, close, err + } + + // Reset the body to allow for downstream reading. + r.Body = io.NopCloser(bytes.NewBuffer(buf)) + + if len(buf) == 0 { + return req, rawBody, close, validate.ErrBodyRequired + } + + rawBody = append(rawBody, buf...) + d := jx.DecodeBytes(buf) + + var request PersonalDataPostReq + if err := func() error { + if err := request.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 req, rawBody, close, err + } + if err := func() error { + if err := request.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return req, rawBody, close, errors.Wrap(err, "validate") + } + return request, rawBody, close, nil + default: + return req, rawBody, close, validate.InvalidContentType(ct) + } +} + +func (s *Server) decodeReceiptsPostRequest(r *http.Request) ( + req PostReceiptData, + rawBody []byte, + close func() error, + rerr error, +) { + var closers []func() error + close = func() error { + var merr error + // Close in reverse order, to match defer behavior. + for i := len(closers) - 1; i >= 0; i-- { + c := closers[i] + merr = errors.Join(merr, c()) + } + return merr + } + defer func() { + if rerr != nil { + rerr = errors.Join(rerr, close()) + } + }() + ct, _, err := mime.ParseMediaType(r.Header.Get("Content-Type")) + if err != nil { + return req, rawBody, close, errors.Wrap(err, "parse media type") + } + switch { + case ct == "application/json": + if r.ContentLength == 0 { + return req, rawBody, close, validate.ErrBodyRequired + } + buf, err := io.ReadAll(r.Body) + defer func() { + _ = r.Body.Close() + }() + if err != nil { + return req, rawBody, close, err + } + + // Reset the body to allow for downstream reading. + r.Body = io.NopCloser(bytes.NewBuffer(buf)) + + if len(buf) == 0 { + return req, rawBody, close, validate.ErrBodyRequired + } + + rawBody = append(rawBody, buf...) + d := jx.DecodeBytes(buf) + + var request PostReceiptData + if err := func() error { + if err := request.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 req, rawBody, close, err + } + return request, rawBody, close, nil + default: + return req, rawBody, close, validate.InvalidContentType(ct) + } +} + +func (s *Server) decodeRefundsPostRequest(r *http.Request) ( + req *RefundsPostReq, + rawBody []byte, + close func() error, + rerr error, +) { + var closers []func() error + close = func() error { + var merr error + // Close in reverse order, to match defer behavior. + for i := len(closers) - 1; i >= 0; i-- { + c := closers[i] + merr = errors.Join(merr, c()) + } + return merr + } + defer func() { + if rerr != nil { + rerr = errors.Join(rerr, close()) + } + }() + ct, _, err := mime.ParseMediaType(r.Header.Get("Content-Type")) + if err != nil { + return req, rawBody, close, errors.Wrap(err, "parse media type") + } + switch { + case ct == "application/json": + if r.ContentLength == 0 { + return req, rawBody, close, validate.ErrBodyRequired + } + buf, err := io.ReadAll(r.Body) + defer func() { + _ = r.Body.Close() + }() + if err != nil { + return req, rawBody, close, err + } + + // Reset the body to allow for downstream reading. + r.Body = io.NopCloser(bytes.NewBuffer(buf)) + + if len(buf) == 0 { + return req, rawBody, close, validate.ErrBodyRequired + } + + rawBody = append(rawBody, buf...) + d := jx.DecodeBytes(buf) + + var request RefundsPostReq + if err := func() error { + if err := request.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 req, rawBody, close, err + } + if err := func() error { + if err := request.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return req, rawBody, close, errors.Wrap(err, "validate") + } + return &request, rawBody, close, nil + default: + return req, rawBody, close, validate.InvalidContentType(ct) + } +} + +func (s *Server) decodeWebhooksPostRequest(r *http.Request) ( + req *WebhooksPostReq, + rawBody []byte, + close func() error, + rerr error, +) { + var closers []func() error + close = func() error { + var merr error + // Close in reverse order, to match defer behavior. + for i := len(closers) - 1; i >= 0; i-- { + c := closers[i] + merr = errors.Join(merr, c()) + } + return merr + } + defer func() { + if rerr != nil { + rerr = errors.Join(rerr, close()) + } + }() + ct, _, err := mime.ParseMediaType(r.Header.Get("Content-Type")) + if err != nil { + return req, rawBody, close, errors.Wrap(err, "parse media type") + } + switch { + case ct == "application/json": + if r.ContentLength == 0 { + return req, rawBody, close, validate.ErrBodyRequired + } + buf, err := io.ReadAll(r.Body) + defer func() { + _ = r.Body.Close() + }() + if err != nil { + return req, rawBody, close, err + } + + // Reset the body to allow for downstream reading. + r.Body = io.NopCloser(bytes.NewBuffer(buf)) + + if len(buf) == 0 { + return req, rawBody, close, validate.ErrBodyRequired + } + + rawBody = append(rawBody, buf...) + d := jx.DecodeBytes(buf) + + var request WebhooksPostReq + if err := func() error { + if err := request.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 req, rawBody, close, err + } + if err := func() error { + if err := request.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return req, rawBody, close, errors.Wrap(err, "validate") + } + return &request, rawBody, close, nil + default: + return req, rawBody, close, validate.InvalidContentType(ct) + } +} diff --git a/internal/service/yookassa/gen/oas_request_encoders_gen.go b/internal/service/yookassa/gen/oas_request_encoders_gen.go new file mode 100644 index 0000000..13ad936 --- /dev/null +++ b/internal/service/yookassa/gen/oas_request_encoders_gen.go @@ -0,0 +1,137 @@ +// Code generated by ogen, DO NOT EDIT. + +package gen + +import ( + "bytes" + "net/http" + + "github.com/go-faster/jx" + ht "github.com/ogen-go/ogen/http" +) + +func encodeDealsPostRequest( + req *SafeDealRequest, + r *http.Request, +) error { + const contentType = "application/json" + e := new(jx.Encoder) + { + req.Encode(e) + } + encoded := e.Bytes() + ht.SetBody(r, bytes.NewReader(encoded), contentType) + return nil +} + +func encodePaymentMethodsPostRequest( + req PaymentMethodsPostReq, + r *http.Request, +) error { + const contentType = "application/json" + e := new(jx.Encoder) + { + req.Encode(e) + } + encoded := e.Bytes() + ht.SetBody(r, bytes.NewReader(encoded), contentType) + return nil +} + +func encodePaymentsPaymentIDCapturePostRequest( + req *PaymentsPaymentIDCapturePostReq, + r *http.Request, +) error { + const contentType = "application/json" + e := new(jx.Encoder) + { + req.Encode(e) + } + encoded := e.Bytes() + ht.SetBody(r, bytes.NewReader(encoded), contentType) + return nil +} + +func encodePaymentsPostRequest( + req *PaymentsPostReq, + r *http.Request, +) error { + const contentType = "application/json" + e := new(jx.Encoder) + { + req.Encode(e) + } + encoded := e.Bytes() + ht.SetBody(r, bytes.NewReader(encoded), contentType) + return nil +} + +func encodePayoutsPostRequest( + req *PayoutRequest, + r *http.Request, +) error { + const contentType = "application/json" + e := new(jx.Encoder) + { + req.Encode(e) + } + encoded := e.Bytes() + ht.SetBody(r, bytes.NewReader(encoded), contentType) + return nil +} + +func encodePersonalDataPostRequest( + req PersonalDataPostReq, + r *http.Request, +) error { + const contentType = "application/json" + e := new(jx.Encoder) + { + req.Encode(e) + } + encoded := e.Bytes() + ht.SetBody(r, bytes.NewReader(encoded), contentType) + return nil +} + +func encodeReceiptsPostRequest( + req PostReceiptData, + r *http.Request, +) error { + const contentType = "application/json" + e := new(jx.Encoder) + { + req.Encode(e) + } + encoded := e.Bytes() + ht.SetBody(r, bytes.NewReader(encoded), contentType) + return nil +} + +func encodeRefundsPostRequest( + req *RefundsPostReq, + r *http.Request, +) error { + const contentType = "application/json" + e := new(jx.Encoder) + { + req.Encode(e) + } + encoded := e.Bytes() + ht.SetBody(r, bytes.NewReader(encoded), contentType) + return nil +} + +func encodeWebhooksPostRequest( + req *WebhooksPostReq, + r *http.Request, +) error { + const contentType = "application/json" + e := new(jx.Encoder) + { + req.Encode(e) + } + encoded := e.Bytes() + ht.SetBody(r, bytes.NewReader(encoded), contentType) + return nil +} diff --git a/internal/service/yookassa/gen/oas_response_decoders_gen.go b/internal/service/yookassa/gen/oas_response_decoders_gen.go new file mode 100644 index 0000000..0dcc5d4 --- /dev/null +++ b/internal/service/yookassa/gen/oas_response_decoders_gen.go @@ -0,0 +1,7031 @@ +// Code generated by ogen, DO NOT EDIT. + +package gen + +import ( + "io" + "mime" + "net/http" + + "github.com/go-faster/errors" + "github.com/go-faster/jx" + "github.com/ogen-go/ogen/ogenerrors" + "github.com/ogen-go/ogen/validate" +) + +func decodeDealsDealIDGetResponse(resp *http.Response) (res DealsDealIDGetRes, _ 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 SafeDeal + 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) + } + case 400: + // Code 400. + 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 BadRequest + 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) + } + case 401: + // Code 401. + 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 InvalidCredentials + 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) + } + case 403: + // Code 403. + 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 Forbidden + 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) + } + case 404: + // Code 404. + 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 NotFound + 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) + } + case 429: + // Code 429. + 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 DealsDealIDGetTooManyRequests + 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) + } + case 500: + // Code 500. + 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 DealsDealIDGetInternalServerError + 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) + } + } + return res, validate.UnexpectedStatusCodeWithResponse(resp) +} + +func decodeDealsGetResponse(resp *http.Response) (res DealsGetRes, _ 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 DealsGetOK + 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) + } + case 400: + // Code 400. + 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 BadRequest + 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) + } + case 401: + // Code 401. + 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 InvalidCredentials + 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) + } + case 403: + // Code 403. + 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 Forbidden + 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) + } + case 404: + // Code 404. + 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 NotFound + 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) + } + case 429: + // Code 429. + 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 DealsGetTooManyRequests + 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) + } + case 500: + // Code 500. + 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 DealsGetInternalServerError + 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) + } + } + return res, validate.UnexpectedStatusCodeWithResponse(resp) +} + +func decodeDealsPostResponse(resp *http.Response) (res DealsPostRes, _ 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 SafeDeal + 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) + } + case 400: + // Code 400. + 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 BadRequest + 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) + } + case 401: + // Code 401. + 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 InvalidCredentials + 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) + } + case 403: + // Code 403. + 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 Forbidden + 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) + } + case 429: + // Code 429. + 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 DealsPostTooManyRequests + 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) + } + case 500: + // Code 500. + 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 DealsPostInternalServerError + 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) + } + } + return res, validate.UnexpectedStatusCodeWithResponse(resp) +} + +func decodeMeGetResponse(resp *http.Response) (res MeGetRes, _ 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 Me + 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) + } + case 400: + // Code 400. + 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 BadRequest + 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) + } + case 401: + // Code 401. + 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 InvalidCredentials + 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) + } + case 403: + // Code 403. + 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 Forbidden + 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) + } + case 500: + // Code 500. + 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 TooManyRequests + 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) + } + } + return res, validate.UnexpectedStatusCodeWithResponse(resp) +} + +func decodePaymentMethodsPaymentMethodIDGetResponse(resp *http.Response) (res PaymentMethodsPaymentMethodIDGetRes, _ 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 PaymentMethodsPaymentMethodIDGetOK + 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) + } + case 400: + // Code 400. + 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 BadRequest + 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) + } + case 401: + // Code 401. + 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 InvalidCredentials + 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) + } + case 403: + // Code 403. + 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 Forbidden + 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) + } + case 404: + // Code 404. + 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 NotFound + 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) + } + case 429: + // Code 429. + 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 PaymentMethodsPaymentMethodIDGetTooManyRequests + 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) + } + case 500: + // Code 500. + 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 PaymentMethodsPaymentMethodIDGetInternalServerError + 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) + } + } + return res, validate.UnexpectedStatusCodeWithResponse(resp) +} + +func decodePaymentMethodsPostResponse(resp *http.Response) (res PaymentMethodsPostRes, _ 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 PaymentMethodsPostOK + 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) + } + case 400: + // Code 400. + 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 BadRequest + 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) + } + case 401: + // Code 401. + 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 InvalidCredentials + 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) + } + case 403: + // Code 403. + 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 Forbidden + 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) + } + case 429: + // Code 429. + 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 PaymentMethodsPostTooManyRequests + 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) + } + case 500: + // Code 500. + 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 PaymentMethodsPostInternalServerError + 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) + } + } + return res, validate.UnexpectedStatusCodeWithResponse(resp) +} + +func decodePaymentsGetResponse(resp *http.Response) (res PaymentsGetRes, _ 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 PaymentList + 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) + } + case 400: + // Code 400. + 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 BadRequest + 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) + } + case 401: + // Code 401. + 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 InvalidCredentials + 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) + } + case 403: + // Code 403. + 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 Forbidden + 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) + } + case 500: + // Code 500. + 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 TooManyRequests + 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) + } + } + return res, validate.UnexpectedStatusCodeWithResponse(resp) +} + +func decodePaymentsPaymentIDCancelPostResponse(resp *http.Response) (res PaymentsPaymentIDCancelPostRes, _ 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 Payment + 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) + } + case 400: + // Code 400. + 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 BadRequest + 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) + } + case 401: + // Code 401. + 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 InvalidCredentials + 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) + } + case 403: + // Code 403. + 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 Forbidden + 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) + } + case 500: + // Code 500. + 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 TooManyRequests + 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) + } + } + return res, validate.UnexpectedStatusCodeWithResponse(resp) +} + +func decodePaymentsPaymentIDCapturePostResponse(resp *http.Response) (res PaymentsPaymentIDCapturePostRes, _ 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 Payment + 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) + } + case 400: + // Code 400. + 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 BadRequest + 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) + } + case 401: + // Code 401. + 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 InvalidCredentials + 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) + } + case 403: + // Code 403. + 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 Forbidden + 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) + } + case 500: + // Code 500. + 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 TooManyRequests + 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) + } + } + return res, validate.UnexpectedStatusCodeWithResponse(resp) +} + +func decodePaymentsPaymentIDGetResponse(resp *http.Response) (res PaymentsPaymentIDGetRes, _ 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 Payment + 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) + } + case 400: + // Code 400. + 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 BadRequest + 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) + } + case 401: + // Code 401. + 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 InvalidCredentials + 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) + } + case 403: + // Code 403. + 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 Forbidden + 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) + } + case 404: + // Code 404. + 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 NotFound + 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) + } + case 500: + // Code 500. + 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 TooManyRequests + 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) + } + } + return res, validate.UnexpectedStatusCodeWithResponse(resp) +} + +func decodePaymentsPostResponse(resp *http.Response) (res PaymentsPostRes, _ 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 Payment + 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) + } + case 400: + // Code 400. + 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 BadRequest + 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) + } + case 401: + // Code 401. + 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 InvalidCredentials + 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) + } + case 403: + // Code 403. + 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 Forbidden + 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) + } + case 500: + // Code 500. + 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 TooManyRequests + 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) + } + } + return res, validate.UnexpectedStatusCodeWithResponse(resp) +} + +func decodePayoutsGetResponse(resp *http.Response) (res PayoutsGetRes, _ 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 PayoutsList + 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) + } + case 400: + // Code 400. + 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 BadRequest + 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) + } + case 401: + // Code 401. + 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 InvalidCredentials + 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) + } + case 403: + // Code 403. + 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 Forbidden + 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) + } + case 404: + // Code 404. + 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 NotFound + 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) + } + case 429: + // Code 429. + 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 PayoutsGetTooManyRequests + 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) + } + case 500: + // Code 500. + 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 PayoutsGetInternalServerError + 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) + } + } + return res, validate.UnexpectedStatusCodeWithResponse(resp) +} + +func decodePayoutsPayoutIDGetResponse(resp *http.Response) (res PayoutsPayoutIDGetRes, _ 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 Payout + 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) + } + case 400: + // Code 400. + 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 BadRequest + 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) + } + case 401: + // Code 401. + 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 InvalidCredentials + 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) + } + case 403: + // Code 403. + 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 Forbidden + 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) + } + case 404: + // Code 404. + 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 NotFound + 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) + } + case 429: + // Code 429. + 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 PayoutsPayoutIDGetTooManyRequests + 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) + } + case 500: + // Code 500. + 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 PayoutsPayoutIDGetInternalServerError + 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) + } + } + return res, validate.UnexpectedStatusCodeWithResponse(resp) +} + +func decodePayoutsPostResponse(resp *http.Response) (res PayoutsPostRes, _ 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 Payout + 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) + } + case 400: + // Code 400. + 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 BadRequest + 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) + } + case 401: + // Code 401. + 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 InvalidCredentials + 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) + } + case 403: + // Code 403. + 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 Forbidden + 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) + } + case 429: + // Code 429. + 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 PayoutsPostTooManyRequests + 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) + } + case 500: + // Code 500. + 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 PayoutsPostInternalServerError + 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) + } + } + return res, validate.UnexpectedStatusCodeWithResponse(resp) +} + +func decodePayoutsSearchGetResponse(resp *http.Response) (res PayoutsSearchGetRes, _ 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 PayoutsList + 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) + } + case 400: + // Code 400. + 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 BadRequest + 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) + } + case 401: + // Code 401. + 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 InvalidCredentials + 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) + } + case 403: + // Code 403. + 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 Forbidden + 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) + } + case 404: + // Code 404. + 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 NotFound + 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) + } + case 429: + // Code 429. + 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 PayoutsSearchGetTooManyRequests + 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) + } + case 500: + // Code 500. + 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 PayoutsSearchGetInternalServerError + 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) + } + } + return res, validate.UnexpectedStatusCodeWithResponse(resp) +} + +func decodePersonalDataPersonalDataIDGetResponse(resp *http.Response) (res PersonalDataPersonalDataIDGetRes, _ 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 PersonalData + 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) + } + case 400: + // Code 400. + 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 BadRequest + 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) + } + case 401: + // Code 401. + 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 InvalidCredentials + 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) + } + case 403: + // Code 403. + 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 Forbidden + 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) + } + case 404: + // Code 404. + 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 NotFound + 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) + } + case 429: + // Code 429. + 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 PersonalDataPersonalDataIDGetTooManyRequests + 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) + } + case 500: + // Code 500. + 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 PersonalDataPersonalDataIDGetInternalServerError + 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) + } + } + return res, validate.UnexpectedStatusCodeWithResponse(resp) +} + +func decodePersonalDataPostResponse(resp *http.Response) (res PersonalDataPostRes, _ 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 PersonalData + 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) + } + case 400: + // Code 400. + 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 BadRequest + 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) + } + case 401: + // Code 401. + 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 InvalidCredentials + 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) + } + case 403: + // Code 403. + 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 Forbidden + 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) + } + case 429: + // Code 429. + 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 PersonalDataPostTooManyRequests + 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) + } + case 500: + // Code 500. + 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 PersonalDataPostInternalServerError + 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) + } + } + return res, validate.UnexpectedStatusCodeWithResponse(resp) +} + +func decodeReceiptsGetResponse(resp *http.Response) (res ReceiptsGetRes, _ 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 ReceiptsGetOK + 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) + } + case 400: + // Code 400. + 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 BadRequest + 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) + } + case 401: + // Code 401. + 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 InvalidCredentials + 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) + } + case 403: + // Code 403. + 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 Forbidden + 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) + } + case 500: + // Code 500. + 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 TooManyRequests + 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) + } + } + return res, validate.UnexpectedStatusCodeWithResponse(resp) +} + +func decodeReceiptsPostResponse(resp *http.Response) (res ReceiptsPostRes, _ 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 Receipt + 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) + } + case 400: + // Code 400. + 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 BadRequest + 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) + } + case 401: + // Code 401. + 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 InvalidCredentials + 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) + } + case 403: + // Code 403. + 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 Forbidden + 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) + } + case 500: + // Code 500. + 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 TooManyRequests + 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) + } + } + return res, validate.UnexpectedStatusCodeWithResponse(resp) +} + +func decodeReceiptsReceiptIDGetResponse(resp *http.Response) (res ReceiptsReceiptIDGetRes, _ 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 Receipt + 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) + } + case 400: + // Code 400. + 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 BadRequest + 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) + } + case 401: + // Code 401. + 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 InvalidCredentials + 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) + } + case 403: + // Code 403. + 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 Forbidden + 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) + } + case 500: + // Code 500. + 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 TooManyRequests + 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) + } + } + return res, validate.UnexpectedStatusCodeWithResponse(resp) +} + +func decodeRefundsGetResponse(resp *http.Response) (res RefundsGetRes, _ 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 RefundList + 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) + } + case 400: + // Code 400. + 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 BadRequest + 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) + } + case 401: + // Code 401. + 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 InvalidCredentials + 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) + } + case 403: + // Code 403. + 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 Forbidden + 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) + } + case 500: + // Code 500. + 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 TooManyRequests + 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) + } + } + return res, validate.UnexpectedStatusCodeWithResponse(resp) +} + +func decodeRefundsPostResponse(resp *http.Response) (res RefundsPostRes, _ 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 Refund + 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) + } + case 400: + // Code 400. + 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 BadRequest + 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) + } + case 401: + // Code 401. + 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 InvalidCredentials + 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) + } + case 403: + // Code 403. + 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 Forbidden + 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) + } + case 500: + // Code 500. + 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 TooManyRequests + 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) + } + } + return res, validate.UnexpectedStatusCodeWithResponse(resp) +} + +func decodeRefundsRefundIDGetResponse(resp *http.Response) (res RefundsRefundIDGetRes, _ 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 Refund + 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) + } + case 400: + // Code 400. + 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 BadRequest + 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) + } + case 401: + // Code 401. + 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 InvalidCredentials + 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) + } + case 403: + // Code 403. + 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 Forbidden + 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) + } + case 404: + // Code 404. + 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 NotFound + 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) + } + case 500: + // Code 500. + 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 TooManyRequests + 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) + } + } + return res, validate.UnexpectedStatusCodeWithResponse(resp) +} + +func decodeSbpBanksGetResponse(resp *http.Response) (res SbpBanksGetRes, _ 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 SbpBanksGetOK + 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) + } + case 400: + // Code 400. + 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 BadRequest + 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) + } + case 401: + // Code 401. + 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 InvalidCredentials + 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) + } + case 403: + // Code 403. + 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 Forbidden + 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) + } + case 404: + // Code 404. + 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 NotFound + 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) + } + case 429: + // Code 429. + 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 SbpBanksGetTooManyRequests + 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) + } + case 500: + // Code 500. + 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 SbpBanksGetInternalServerError + 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) + } + } + return res, validate.UnexpectedStatusCodeWithResponse(resp) +} + +func decodeWebhooksGetResponse(resp *http.Response) (res WebhooksGetRes, _ 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 WebhookList + 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) + } + case 401: + // Code 401. + 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 InvalidCredentials + 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) + } + case 403: + // Code 403. + 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 Forbidden + 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) + } + case 500: + // Code 500. + 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 TooManyRequests + 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) + } + } + return res, validate.UnexpectedStatusCodeWithResponse(resp) +} + +func decodeWebhooksPostResponse(resp *http.Response) (res WebhooksPostRes, _ 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 Webhook + 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) + } + case 400: + // Code 400. + 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 BadRequest + 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) + } + case 401: + // Code 401. + 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 InvalidCredentials + 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) + } + case 403: + // Code 403. + 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 Forbidden + 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) + } + case 500: + // Code 500. + 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 TooManyRequests + 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) + } + } + return res, validate.UnexpectedStatusCodeWithResponse(resp) +} + +func decodeWebhooksWebhookIDDeleteResponse(resp *http.Response) (res WebhooksWebhookIDDeleteRes, _ 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 WebhooksWebhookIDDeleteOK + 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 &response, nil + default: + return res, validate.InvalidContentType(ct) + } + case 400: + // Code 400. + 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 BadRequest + 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) + } + case 401: + // Code 401. + 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 InvalidCredentials + 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) + } + case 403: + // Code 403. + 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 Forbidden + 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) + } + case 500: + // Code 500. + 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 TooManyRequests + 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) + } + } + return res, validate.UnexpectedStatusCodeWithResponse(resp) +} diff --git a/internal/service/yookassa/gen/oas_response_encoders_gen.go b/internal/service/yookassa/gen/oas_response_encoders_gen.go new file mode 100644 index 0000000..fe3b71d --- /dev/null +++ b/internal/service/yookassa/gen/oas_response_encoders_gen.go @@ -0,0 +1,2229 @@ +// Code generated by ogen, DO NOT EDIT. + +package gen + +import ( + "net/http" + + "github.com/go-faster/errors" + "github.com/go-faster/jx" + "go.opentelemetry.io/otel/codes" + "go.opentelemetry.io/otel/trace" +) + +func encodeDealsDealIDGetResponse(response DealsDealIDGetRes, w http.ResponseWriter, span trace.Span) error { + switch response := response.(type) { + case *SafeDeal: + 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 + + case *BadRequest: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(400) + span.SetStatus(codes.Error, http.StatusText(400)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + case *InvalidCredentials: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(401) + span.SetStatus(codes.Error, http.StatusText(401)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + case *Forbidden: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(403) + span.SetStatus(codes.Error, http.StatusText(403)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + case *NotFound: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(404) + span.SetStatus(codes.Error, http.StatusText(404)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + case *DealsDealIDGetTooManyRequests: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(429) + span.SetStatus(codes.Error, http.StatusText(429)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + case *DealsDealIDGetInternalServerError: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(500) + span.SetStatus(codes.Error, http.StatusText(500)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + default: + return errors.Errorf("unexpected response type: %T", response) + } +} + +func encodeDealsGetResponse(response DealsGetRes, w http.ResponseWriter, span trace.Span) error { + switch response := response.(type) { + case *DealsGetOK: + 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 + + case *BadRequest: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(400) + span.SetStatus(codes.Error, http.StatusText(400)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + case *InvalidCredentials: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(401) + span.SetStatus(codes.Error, http.StatusText(401)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + case *Forbidden: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(403) + span.SetStatus(codes.Error, http.StatusText(403)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + case *NotFound: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(404) + span.SetStatus(codes.Error, http.StatusText(404)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + case *DealsGetTooManyRequests: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(429) + span.SetStatus(codes.Error, http.StatusText(429)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + case *DealsGetInternalServerError: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(500) + span.SetStatus(codes.Error, http.StatusText(500)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + default: + return errors.Errorf("unexpected response type: %T", response) + } +} + +func encodeDealsPostResponse(response DealsPostRes, w http.ResponseWriter, span trace.Span) error { + switch response := response.(type) { + case *SafeDeal: + 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 + + case *BadRequest: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(400) + span.SetStatus(codes.Error, http.StatusText(400)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + case *InvalidCredentials: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(401) + span.SetStatus(codes.Error, http.StatusText(401)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + case *Forbidden: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(403) + span.SetStatus(codes.Error, http.StatusText(403)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + case *DealsPostTooManyRequests: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(429) + span.SetStatus(codes.Error, http.StatusText(429)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + case *DealsPostInternalServerError: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(500) + span.SetStatus(codes.Error, http.StatusText(500)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + default: + return errors.Errorf("unexpected response type: %T", response) + } +} + +func encodeMeGetResponse(response MeGetRes, w http.ResponseWriter, span trace.Span) error { + switch response := response.(type) { + case *Me: + 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 + + case *BadRequest: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(400) + span.SetStatus(codes.Error, http.StatusText(400)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + case *InvalidCredentials: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(401) + span.SetStatus(codes.Error, http.StatusText(401)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + case *Forbidden: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(403) + span.SetStatus(codes.Error, http.StatusText(403)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + case *TooManyRequests: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(500) + span.SetStatus(codes.Error, http.StatusText(500)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + default: + return errors.Errorf("unexpected response type: %T", response) + } +} + +func encodePaymentMethodsPaymentMethodIDGetResponse(response PaymentMethodsPaymentMethodIDGetRes, w http.ResponseWriter, span trace.Span) error { + switch response := response.(type) { + case *PaymentMethodsPaymentMethodIDGetOK: + 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 + + case *BadRequest: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(400) + span.SetStatus(codes.Error, http.StatusText(400)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + case *InvalidCredentials: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(401) + span.SetStatus(codes.Error, http.StatusText(401)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + case *Forbidden: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(403) + span.SetStatus(codes.Error, http.StatusText(403)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + case *NotFound: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(404) + span.SetStatus(codes.Error, http.StatusText(404)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + case *PaymentMethodsPaymentMethodIDGetTooManyRequests: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(429) + span.SetStatus(codes.Error, http.StatusText(429)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + case *PaymentMethodsPaymentMethodIDGetInternalServerError: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(500) + span.SetStatus(codes.Error, http.StatusText(500)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + default: + return errors.Errorf("unexpected response type: %T", response) + } +} + +func encodePaymentMethodsPostResponse(response PaymentMethodsPostRes, w http.ResponseWriter, span trace.Span) error { + switch response := response.(type) { + case *PaymentMethodsPostOK: + 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 + + case *BadRequest: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(400) + span.SetStatus(codes.Error, http.StatusText(400)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + case *InvalidCredentials: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(401) + span.SetStatus(codes.Error, http.StatusText(401)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + case *Forbidden: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(403) + span.SetStatus(codes.Error, http.StatusText(403)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + case *PaymentMethodsPostTooManyRequests: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(429) + span.SetStatus(codes.Error, http.StatusText(429)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + case *PaymentMethodsPostInternalServerError: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(500) + span.SetStatus(codes.Error, http.StatusText(500)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + default: + return errors.Errorf("unexpected response type: %T", response) + } +} + +func encodePaymentsGetResponse(response PaymentsGetRes, w http.ResponseWriter, span trace.Span) error { + switch response := response.(type) { + case *PaymentList: + 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 + + case *BadRequest: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(400) + span.SetStatus(codes.Error, http.StatusText(400)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + case *InvalidCredentials: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(401) + span.SetStatus(codes.Error, http.StatusText(401)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + case *Forbidden: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(403) + span.SetStatus(codes.Error, http.StatusText(403)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + case *TooManyRequests: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(500) + span.SetStatus(codes.Error, http.StatusText(500)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + default: + return errors.Errorf("unexpected response type: %T", response) + } +} + +func encodePaymentsPaymentIDCancelPostResponse(response PaymentsPaymentIDCancelPostRes, w http.ResponseWriter, span trace.Span) error { + switch response := response.(type) { + case *Payment: + 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 + + case *BadRequest: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(400) + span.SetStatus(codes.Error, http.StatusText(400)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + case *InvalidCredentials: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(401) + span.SetStatus(codes.Error, http.StatusText(401)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + case *Forbidden: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(403) + span.SetStatus(codes.Error, http.StatusText(403)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + case *TooManyRequests: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(500) + span.SetStatus(codes.Error, http.StatusText(500)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + default: + return errors.Errorf("unexpected response type: %T", response) + } +} + +func encodePaymentsPaymentIDCapturePostResponse(response PaymentsPaymentIDCapturePostRes, w http.ResponseWriter, span trace.Span) error { + switch response := response.(type) { + case *Payment: + 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 + + case *BadRequest: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(400) + span.SetStatus(codes.Error, http.StatusText(400)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + case *InvalidCredentials: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(401) + span.SetStatus(codes.Error, http.StatusText(401)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + case *Forbidden: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(403) + span.SetStatus(codes.Error, http.StatusText(403)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + case *TooManyRequests: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(500) + span.SetStatus(codes.Error, http.StatusText(500)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + default: + return errors.Errorf("unexpected response type: %T", response) + } +} + +func encodePaymentsPaymentIDGetResponse(response PaymentsPaymentIDGetRes, w http.ResponseWriter, span trace.Span) error { + switch response := response.(type) { + case *Payment: + 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 + + case *BadRequest: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(400) + span.SetStatus(codes.Error, http.StatusText(400)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + case *InvalidCredentials: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(401) + span.SetStatus(codes.Error, http.StatusText(401)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + case *Forbidden: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(403) + span.SetStatus(codes.Error, http.StatusText(403)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + case *NotFound: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(404) + span.SetStatus(codes.Error, http.StatusText(404)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + case *TooManyRequests: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(500) + span.SetStatus(codes.Error, http.StatusText(500)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + default: + return errors.Errorf("unexpected response type: %T", response) + } +} + +func encodePaymentsPostResponse(response PaymentsPostRes, w http.ResponseWriter, span trace.Span) error { + switch response := response.(type) { + case *Payment: + 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 + + case *BadRequest: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(400) + span.SetStatus(codes.Error, http.StatusText(400)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + case *InvalidCredentials: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(401) + span.SetStatus(codes.Error, http.StatusText(401)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + case *Forbidden: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(403) + span.SetStatus(codes.Error, http.StatusText(403)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + case *TooManyRequests: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(500) + span.SetStatus(codes.Error, http.StatusText(500)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + default: + return errors.Errorf("unexpected response type: %T", response) + } +} + +func encodePayoutsGetResponse(response PayoutsGetRes, w http.ResponseWriter, span trace.Span) error { + switch response := response.(type) { + case *PayoutsList: + 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 + + case *BadRequest: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(400) + span.SetStatus(codes.Error, http.StatusText(400)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + case *InvalidCredentials: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(401) + span.SetStatus(codes.Error, http.StatusText(401)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + case *Forbidden: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(403) + span.SetStatus(codes.Error, http.StatusText(403)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + case *NotFound: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(404) + span.SetStatus(codes.Error, http.StatusText(404)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + case *PayoutsGetTooManyRequests: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(429) + span.SetStatus(codes.Error, http.StatusText(429)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + case *PayoutsGetInternalServerError: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(500) + span.SetStatus(codes.Error, http.StatusText(500)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + default: + return errors.Errorf("unexpected response type: %T", response) + } +} + +func encodePayoutsPayoutIDGetResponse(response PayoutsPayoutIDGetRes, w http.ResponseWriter, span trace.Span) error { + switch response := response.(type) { + case *Payout: + 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 + + case *BadRequest: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(400) + span.SetStatus(codes.Error, http.StatusText(400)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + case *InvalidCredentials: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(401) + span.SetStatus(codes.Error, http.StatusText(401)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + case *Forbidden: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(403) + span.SetStatus(codes.Error, http.StatusText(403)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + case *NotFound: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(404) + span.SetStatus(codes.Error, http.StatusText(404)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + case *PayoutsPayoutIDGetTooManyRequests: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(429) + span.SetStatus(codes.Error, http.StatusText(429)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + case *PayoutsPayoutIDGetInternalServerError: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(500) + span.SetStatus(codes.Error, http.StatusText(500)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + default: + return errors.Errorf("unexpected response type: %T", response) + } +} + +func encodePayoutsPostResponse(response PayoutsPostRes, w http.ResponseWriter, span trace.Span) error { + switch response := response.(type) { + case *Payout: + 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 + + case *BadRequest: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(400) + span.SetStatus(codes.Error, http.StatusText(400)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + case *InvalidCredentials: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(401) + span.SetStatus(codes.Error, http.StatusText(401)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + case *Forbidden: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(403) + span.SetStatus(codes.Error, http.StatusText(403)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + case *PayoutsPostTooManyRequests: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(429) + span.SetStatus(codes.Error, http.StatusText(429)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + case *PayoutsPostInternalServerError: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(500) + span.SetStatus(codes.Error, http.StatusText(500)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + default: + return errors.Errorf("unexpected response type: %T", response) + } +} + +func encodePayoutsSearchGetResponse(response PayoutsSearchGetRes, w http.ResponseWriter, span trace.Span) error { + switch response := response.(type) { + case *PayoutsList: + 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 + + case *BadRequest: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(400) + span.SetStatus(codes.Error, http.StatusText(400)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + case *InvalidCredentials: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(401) + span.SetStatus(codes.Error, http.StatusText(401)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + case *Forbidden: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(403) + span.SetStatus(codes.Error, http.StatusText(403)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + case *NotFound: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(404) + span.SetStatus(codes.Error, http.StatusText(404)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + case *PayoutsSearchGetTooManyRequests: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(429) + span.SetStatus(codes.Error, http.StatusText(429)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + case *PayoutsSearchGetInternalServerError: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(500) + span.SetStatus(codes.Error, http.StatusText(500)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + default: + return errors.Errorf("unexpected response type: %T", response) + } +} + +func encodePersonalDataPersonalDataIDGetResponse(response PersonalDataPersonalDataIDGetRes, w http.ResponseWriter, span trace.Span) error { + switch response := response.(type) { + case *PersonalData: + 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 + + case *BadRequest: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(400) + span.SetStatus(codes.Error, http.StatusText(400)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + case *InvalidCredentials: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(401) + span.SetStatus(codes.Error, http.StatusText(401)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + case *Forbidden: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(403) + span.SetStatus(codes.Error, http.StatusText(403)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + case *NotFound: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(404) + span.SetStatus(codes.Error, http.StatusText(404)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + case *PersonalDataPersonalDataIDGetTooManyRequests: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(429) + span.SetStatus(codes.Error, http.StatusText(429)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + case *PersonalDataPersonalDataIDGetInternalServerError: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(500) + span.SetStatus(codes.Error, http.StatusText(500)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + default: + return errors.Errorf("unexpected response type: %T", response) + } +} + +func encodePersonalDataPostResponse(response PersonalDataPostRes, w http.ResponseWriter, span trace.Span) error { + switch response := response.(type) { + case *PersonalData: + 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 + + case *BadRequest: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(400) + span.SetStatus(codes.Error, http.StatusText(400)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + case *InvalidCredentials: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(401) + span.SetStatus(codes.Error, http.StatusText(401)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + case *Forbidden: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(403) + span.SetStatus(codes.Error, http.StatusText(403)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + case *PersonalDataPostTooManyRequests: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(429) + span.SetStatus(codes.Error, http.StatusText(429)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + case *PersonalDataPostInternalServerError: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(500) + span.SetStatus(codes.Error, http.StatusText(500)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + default: + return errors.Errorf("unexpected response type: %T", response) + } +} + +func encodeReceiptsGetResponse(response ReceiptsGetRes, w http.ResponseWriter, span trace.Span) error { + switch response := response.(type) { + case *ReceiptsGetOK: + 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 + + case *BadRequest: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(400) + span.SetStatus(codes.Error, http.StatusText(400)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + case *InvalidCredentials: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(401) + span.SetStatus(codes.Error, http.StatusText(401)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + case *Forbidden: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(403) + span.SetStatus(codes.Error, http.StatusText(403)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + case *TooManyRequests: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(500) + span.SetStatus(codes.Error, http.StatusText(500)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + default: + return errors.Errorf("unexpected response type: %T", response) + } +} + +func encodeReceiptsPostResponse(response ReceiptsPostRes, w http.ResponseWriter, span trace.Span) error { + switch response := response.(type) { + case *Receipt: + 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 + + case *BadRequest: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(400) + span.SetStatus(codes.Error, http.StatusText(400)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + case *InvalidCredentials: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(401) + span.SetStatus(codes.Error, http.StatusText(401)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + case *Forbidden: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(403) + span.SetStatus(codes.Error, http.StatusText(403)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + case *TooManyRequests: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(500) + span.SetStatus(codes.Error, http.StatusText(500)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + default: + return errors.Errorf("unexpected response type: %T", response) + } +} + +func encodeReceiptsReceiptIDGetResponse(response ReceiptsReceiptIDGetRes, w http.ResponseWriter, span trace.Span) error { + switch response := response.(type) { + case *Receipt: + 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 + + case *BadRequest: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(400) + span.SetStatus(codes.Error, http.StatusText(400)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + case *InvalidCredentials: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(401) + span.SetStatus(codes.Error, http.StatusText(401)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + case *Forbidden: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(403) + span.SetStatus(codes.Error, http.StatusText(403)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + case *TooManyRequests: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(500) + span.SetStatus(codes.Error, http.StatusText(500)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + default: + return errors.Errorf("unexpected response type: %T", response) + } +} + +func encodeRefundsGetResponse(response RefundsGetRes, w http.ResponseWriter, span trace.Span) error { + switch response := response.(type) { + case *RefundList: + 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 + + case *BadRequest: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(400) + span.SetStatus(codes.Error, http.StatusText(400)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + case *InvalidCredentials: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(401) + span.SetStatus(codes.Error, http.StatusText(401)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + case *Forbidden: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(403) + span.SetStatus(codes.Error, http.StatusText(403)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + case *TooManyRequests: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(500) + span.SetStatus(codes.Error, http.StatusText(500)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + default: + return errors.Errorf("unexpected response type: %T", response) + } +} + +func encodeRefundsPostResponse(response RefundsPostRes, w http.ResponseWriter, span trace.Span) error { + switch response := response.(type) { + case *Refund: + 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 + + case *BadRequest: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(400) + span.SetStatus(codes.Error, http.StatusText(400)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + case *InvalidCredentials: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(401) + span.SetStatus(codes.Error, http.StatusText(401)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + case *Forbidden: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(403) + span.SetStatus(codes.Error, http.StatusText(403)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + case *TooManyRequests: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(500) + span.SetStatus(codes.Error, http.StatusText(500)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + default: + return errors.Errorf("unexpected response type: %T", response) + } +} + +func encodeRefundsRefundIDGetResponse(response RefundsRefundIDGetRes, w http.ResponseWriter, span trace.Span) error { + switch response := response.(type) { + case *Refund: + 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 + + case *BadRequest: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(400) + span.SetStatus(codes.Error, http.StatusText(400)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + case *InvalidCredentials: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(401) + span.SetStatus(codes.Error, http.StatusText(401)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + case *Forbidden: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(403) + span.SetStatus(codes.Error, http.StatusText(403)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + case *NotFound: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(404) + span.SetStatus(codes.Error, http.StatusText(404)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + case *TooManyRequests: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(500) + span.SetStatus(codes.Error, http.StatusText(500)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + default: + return errors.Errorf("unexpected response type: %T", response) + } +} + +func encodeSbpBanksGetResponse(response SbpBanksGetRes, w http.ResponseWriter, span trace.Span) error { + switch response := response.(type) { + case *SbpBanksGetOK: + 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 + + case *BadRequest: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(400) + span.SetStatus(codes.Error, http.StatusText(400)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + case *InvalidCredentials: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(401) + span.SetStatus(codes.Error, http.StatusText(401)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + case *Forbidden: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(403) + span.SetStatus(codes.Error, http.StatusText(403)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + case *NotFound: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(404) + span.SetStatus(codes.Error, http.StatusText(404)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + case *SbpBanksGetTooManyRequests: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(429) + span.SetStatus(codes.Error, http.StatusText(429)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + case *SbpBanksGetInternalServerError: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(500) + span.SetStatus(codes.Error, http.StatusText(500)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + default: + return errors.Errorf("unexpected response type: %T", response) + } +} + +func encodeWebhooksGetResponse(response WebhooksGetRes, w http.ResponseWriter, span trace.Span) error { + switch response := response.(type) { + case *WebhookList: + 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 + + case *InvalidCredentials: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(401) + span.SetStatus(codes.Error, http.StatusText(401)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + case *Forbidden: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(403) + span.SetStatus(codes.Error, http.StatusText(403)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + case *TooManyRequests: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(500) + span.SetStatus(codes.Error, http.StatusText(500)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + default: + return errors.Errorf("unexpected response type: %T", response) + } +} + +func encodeWebhooksPostResponse(response WebhooksPostRes, w http.ResponseWriter, span trace.Span) error { + switch response := response.(type) { + case *Webhook: + 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 + + case *BadRequest: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(400) + span.SetStatus(codes.Error, http.StatusText(400)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + case *InvalidCredentials: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(401) + span.SetStatus(codes.Error, http.StatusText(401)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + case *Forbidden: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(403) + span.SetStatus(codes.Error, http.StatusText(403)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + case *TooManyRequests: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(500) + span.SetStatus(codes.Error, http.StatusText(500)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + default: + return errors.Errorf("unexpected response type: %T", response) + } +} + +func encodeWebhooksWebhookIDDeleteResponse(response WebhooksWebhookIDDeleteRes, w http.ResponseWriter, span trace.Span) error { + switch response := response.(type) { + case *WebhooksWebhookIDDeleteOK: + 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 + + case *BadRequest: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(400) + span.SetStatus(codes.Error, http.StatusText(400)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + case *InvalidCredentials: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(401) + span.SetStatus(codes.Error, http.StatusText(401)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + case *Forbidden: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(403) + span.SetStatus(codes.Error, http.StatusText(403)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + case *TooManyRequests: + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(500) + span.SetStatus(codes.Error, http.StatusText(500)) + + e := new(jx.Encoder) + response.Encode(e) + if _, err := e.WriteTo(w); err != nil { + return errors.Wrap(err, "write") + } + + return nil + + default: + return errors.Errorf("unexpected response type: %T", response) + } +} diff --git a/internal/service/yookassa/gen/oas_router_gen.go b/internal/service/yookassa/gen/oas_router_gen.go new file mode 100644 index 0000000..8670d6d --- /dev/null +++ b/internal/service/yookassa/gen/oas_router_gen.go @@ -0,0 +1,1691 @@ +// Code generated by ogen, DO NOT EDIT. + +package gen + +import ( + "net/http" + "net/url" + "strings" + + "github.com/ogen-go/ogen/uri" +) + +var ( + rn3AllowedHeaders = map[string]string{ + "GET": "Authorization", + "POST": "Authorization,Content-Type,Idempotence-Key", + } + rn2AllowedHeaders = map[string]string{ + "GET": "Authorization", + } + rn5AllowedHeaders = map[string]string{ + "GET": "Authorization", + } + rn8AllowedHeaders = map[string]string{ + "POST": "Authorization,Content-Type,Idempotence-Key", + } + rn7AllowedHeaders = map[string]string{ + "GET": "Authorization", + } + rn10AllowedHeaders = map[string]string{ + "GET": "Authorization", + "POST": "Authorization,Content-Type,Idempotence-Key", + } + rn12AllowedHeaders = map[string]string{ + "GET": "Authorization", + } + rn13AllowedHeaders = map[string]string{ + "POST": "Authorization,Idempotence-Key", + } + rn15AllowedHeaders = map[string]string{ + "POST": "Authorization,Content-Type,Idempotence-Key", + } + rn17AllowedHeaders = map[string]string{ + "GET": "Authorization", + "POST": "Authorization,Content-Type,Idempotence-Key", + } + rn20AllowedHeaders = map[string]string{ + "GET": "Authorization", + } + rn19AllowedHeaders = map[string]string{ + "GET": "Authorization", + } + rn24AllowedHeaders = map[string]string{ + "POST": "Authorization,Content-Type,Idempotence-Key", + } + rn23AllowedHeaders = map[string]string{ + "GET": "Authorization", + } + rn25AllowedHeaders = map[string]string{ + "GET": "Authorization", + "POST": "Authorization,Content-Type,Idempotence-Key", + } + rn27AllowedHeaders = map[string]string{ + "GET": "Authorization", + } + rn29AllowedHeaders = map[string]string{ + "GET": "Authorization", + "POST": "Authorization,Content-Type,Idempotence-Key", + } + rn31AllowedHeaders = map[string]string{ + "GET": "Authorization", + } + rn32AllowedHeaders = map[string]string{ + "GET": "Authorization", + } + rn33AllowedHeaders = map[string]string{ + "GET": "Authorization", + "POST": "Authorization,Content-Type,Idempotence-Key", + } + rn35AllowedHeaders = map[string]string{ + "DELETE": "Authorization", + } +) + +func (s *Server) cutPrefix(path string) (string, bool) { + prefix := s.cfg.Prefix + if prefix == "" { + return path, true + } + if !strings.HasPrefix(path, prefix) { + // Prefix doesn't match. + return "", false + } + // Cut prefix from the path. + return strings.TrimPrefix(path, prefix), true +} + +// ServeHTTP serves http request as defined by OpenAPI v3 specification, +// calling handler that matches the path or returning not found error. +func (s *Server) ServeHTTP(w http.ResponseWriter, r *http.Request) { + elem := r.URL.Path + elemIsEscaped := false + if rawPath := r.URL.RawPath; rawPath != "" { + if normalized, ok := uri.NormalizeEscapedPath(rawPath); ok { + elem = normalized + elemIsEscaped = strings.ContainsRune(elem, '%') + } + } + + elem, ok := s.cutPrefix(elem) + if !ok || len(elem) == 0 { + s.notFound(w, r) + return + } + args := [1]string{} + + // Static code generated router with unwrapped path search. + switch { + default: + if len(elem) == 0 { + break + } + switch elem[0] { + case '/': // Prefix: "/" + + if l := len("/"); len(elem) >= l && elem[0:l] == "/" { + elem = elem[l:] + } else { + break + } + + if len(elem) == 0 { + break + } + switch elem[0] { + case 'd': // Prefix: "deals" + + if l := len("deals"); len(elem) >= l && elem[0:l] == "deals" { + elem = elem[l:] + } else { + break + } + + if len(elem) == 0 { + switch r.Method { + case "GET": + s.handleDealsGetRequest([0]string{}, elemIsEscaped, w, r) + case "POST": + s.handleDealsPostRequest([0]string{}, elemIsEscaped, w, r) + default: + s.notAllowed(w, r, notAllowedParams{ + allowedMethods: "GET,POST", + allowedHeaders: rn3AllowedHeaders, + acceptPost: "application/json", + acceptPatch: "", + }) + } + + return + } + switch elem[0] { + case '/': // Prefix: "/" + + if l := len("/"); len(elem) >= l && elem[0:l] == "/" { + elem = elem[l:] + } else { + break + } + + // Param: "deal_id" + // 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.handleDealsDealIDGetRequest([1]string{ + args[0], + }, elemIsEscaped, w, r) + default: + s.notAllowed(w, r, notAllowedParams{ + allowedMethods: "GET", + allowedHeaders: rn2AllowedHeaders, + acceptPost: "", + acceptPatch: "", + }) + } + + return + } + + } + + case 'm': // Prefix: "me" + + if l := len("me"); len(elem) >= l && elem[0:l] == "me" { + elem = elem[l:] + } else { + break + } + + if len(elem) == 0 { + // Leaf node. + switch r.Method { + case "GET": + s.handleMeGetRequest([0]string{}, elemIsEscaped, w, r) + default: + s.notAllowed(w, r, notAllowedParams{ + allowedMethods: "GET", + allowedHeaders: rn5AllowedHeaders, + acceptPost: "", + acceptPatch: "", + }) + } + + return + } + + case 'p': // Prefix: "p" + + if l := len("p"); len(elem) >= l && elem[0:l] == "p" { + elem = elem[l:] + } else { + break + } + + if len(elem) == 0 { + break + } + switch elem[0] { + case 'a': // Prefix: "ay" + + if l := len("ay"); len(elem) >= l && elem[0:l] == "ay" { + elem = elem[l:] + } else { + break + } + + if len(elem) == 0 { + break + } + switch elem[0] { + case 'm': // Prefix: "ment" + + if l := len("ment"); len(elem) >= l && elem[0:l] == "ment" { + elem = elem[l:] + } else { + break + } + + if len(elem) == 0 { + break + } + switch elem[0] { + case '_': // Prefix: "_methods" + + if l := len("_methods"); len(elem) >= l && elem[0:l] == "_methods" { + elem = elem[l:] + } else { + break + } + + if len(elem) == 0 { + switch r.Method { + case "POST": + s.handlePaymentMethodsPostRequest([0]string{}, elemIsEscaped, w, r) + default: + s.notAllowed(w, r, notAllowedParams{ + allowedMethods: "POST", + allowedHeaders: rn8AllowedHeaders, + acceptPost: "application/json", + acceptPatch: "", + }) + } + + return + } + switch elem[0] { + case '/': // Prefix: "/" + + if l := len("/"); len(elem) >= l && elem[0:l] == "/" { + elem = elem[l:] + } else { + break + } + + // Param: "payment_method_id" + // 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.handlePaymentMethodsPaymentMethodIDGetRequest([1]string{ + args[0], + }, elemIsEscaped, w, r) + default: + s.notAllowed(w, r, notAllowedParams{ + allowedMethods: "GET", + allowedHeaders: rn7AllowedHeaders, + acceptPost: "", + acceptPatch: "", + }) + } + + return + } + + } + + case 's': // Prefix: "s" + + if l := len("s"); len(elem) >= l && elem[0:l] == "s" { + elem = elem[l:] + } else { + break + } + + if len(elem) == 0 { + switch r.Method { + case "GET": + s.handlePaymentsGetRequest([0]string{}, elemIsEscaped, w, r) + case "POST": + s.handlePaymentsPostRequest([0]string{}, elemIsEscaped, w, r) + default: + s.notAllowed(w, r, notAllowedParams{ + allowedMethods: "GET,POST", + allowedHeaders: rn10AllowedHeaders, + acceptPost: "application/json", + acceptPatch: "", + }) + } + + return + } + switch elem[0] { + case '/': // Prefix: "/" + + if l := len("/"); len(elem) >= l && elem[0:l] == "/" { + elem = elem[l:] + } else { + break + } + + // Param: "payment_id" + // Match until "/" + idx := strings.IndexByte(elem, '/') + if idx < 0 { + idx = len(elem) + } + args[0] = elem[:idx] + elem = elem[idx:] + + if len(elem) == 0 { + switch r.Method { + case "GET": + s.handlePaymentsPaymentIDGetRequest([1]string{ + args[0], + }, elemIsEscaped, w, r) + default: + s.notAllowed(w, r, notAllowedParams{ + allowedMethods: "GET", + allowedHeaders: rn12AllowedHeaders, + acceptPost: "", + acceptPatch: "", + }) + } + + return + } + switch elem[0] { + case '/': // Prefix: "/ca" + + if l := len("/ca"); len(elem) >= l && elem[0:l] == "/ca" { + elem = elem[l:] + } else { + break + } + + if len(elem) == 0 { + break + } + switch elem[0] { + case 'n': // Prefix: "ncel" + + if l := len("ncel"); len(elem) >= l && elem[0:l] == "ncel" { + elem = elem[l:] + } else { + break + } + + if len(elem) == 0 { + // Leaf node. + switch r.Method { + case "POST": + s.handlePaymentsPaymentIDCancelPostRequest([1]string{ + args[0], + }, elemIsEscaped, w, r) + default: + s.notAllowed(w, r, notAllowedParams{ + allowedMethods: "POST", + allowedHeaders: rn13AllowedHeaders, + acceptPost: "", + acceptPatch: "", + }) + } + + return + } + + case 'p': // Prefix: "pture" + + if l := len("pture"); len(elem) >= l && elem[0:l] == "pture" { + elem = elem[l:] + } else { + break + } + + if len(elem) == 0 { + // Leaf node. + switch r.Method { + case "POST": + s.handlePaymentsPaymentIDCapturePostRequest([1]string{ + args[0], + }, elemIsEscaped, w, r) + default: + s.notAllowed(w, r, notAllowedParams{ + allowedMethods: "POST", + allowedHeaders: rn15AllowedHeaders, + acceptPost: "application/json", + acceptPatch: "", + }) + } + + return + } + + } + + } + + } + + } + + case 'o': // Prefix: "outs" + + if l := len("outs"); len(elem) >= l && elem[0:l] == "outs" { + elem = elem[l:] + } else { + break + } + + if len(elem) == 0 { + switch r.Method { + case "GET": + s.handlePayoutsGetRequest([0]string{}, elemIsEscaped, w, r) + case "POST": + s.handlePayoutsPostRequest([0]string{}, elemIsEscaped, w, r) + default: + s.notAllowed(w, r, notAllowedParams{ + allowedMethods: "GET,POST", + allowedHeaders: rn17AllowedHeaders, + acceptPost: "application/json", + acceptPatch: "", + }) + } + + return + } + switch elem[0] { + case '/': // Prefix: "/" + + if l := len("/"); len(elem) >= l && elem[0:l] == "/" { + elem = elem[l:] + } else { + break + } + + if len(elem) == 0 { + break + } + switch elem[0] { + case 's': // Prefix: "search" + origElem := elem + if l := len("search"); len(elem) >= l && elem[0:l] == "search" { + elem = elem[l:] + } else { + break + } + + if len(elem) == 0 { + // Leaf node. + switch r.Method { + case "GET": + s.handlePayoutsSearchGetRequest([0]string{}, elemIsEscaped, w, r) + default: + s.notAllowed(w, r, notAllowedParams{ + allowedMethods: "GET", + allowedHeaders: rn20AllowedHeaders, + acceptPost: "", + acceptPatch: "", + }) + } + + return + } + + elem = origElem + } + // Param: "payout_id" + // 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.handlePayoutsPayoutIDGetRequest([1]string{ + args[0], + }, elemIsEscaped, w, r) + default: + s.notAllowed(w, r, notAllowedParams{ + allowedMethods: "GET", + allowedHeaders: rn19AllowedHeaders, + acceptPost: "", + acceptPatch: "", + }) + } + + return + } + + } + + } + + case 'e': // Prefix: "ersonal_data" + + if l := len("ersonal_data"); len(elem) >= l && elem[0:l] == "ersonal_data" { + elem = elem[l:] + } else { + break + } + + if len(elem) == 0 { + switch r.Method { + case "POST": + s.handlePersonalDataPostRequest([0]string{}, elemIsEscaped, w, r) + default: + s.notAllowed(w, r, notAllowedParams{ + allowedMethods: "POST", + allowedHeaders: rn24AllowedHeaders, + acceptPost: "application/json", + acceptPatch: "", + }) + } + + return + } + switch elem[0] { + case '/': // Prefix: "/" + + if l := len("/"); len(elem) >= l && elem[0:l] == "/" { + elem = elem[l:] + } else { + break + } + + // Param: "personal_data_id" + // 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.handlePersonalDataPersonalDataIDGetRequest([1]string{ + args[0], + }, elemIsEscaped, w, r) + default: + s.notAllowed(w, r, notAllowedParams{ + allowedMethods: "GET", + allowedHeaders: rn23AllowedHeaders, + acceptPost: "", + acceptPatch: "", + }) + } + + return + } + + } + + } + + case 'r': // Prefix: "re" + + if l := len("re"); len(elem) >= l && elem[0:l] == "re" { + elem = elem[l:] + } else { + break + } + + if len(elem) == 0 { + break + } + switch elem[0] { + case 'c': // Prefix: "ceipts" + + if l := len("ceipts"); len(elem) >= l && elem[0:l] == "ceipts" { + elem = elem[l:] + } else { + break + } + + if len(elem) == 0 { + switch r.Method { + case "GET": + s.handleReceiptsGetRequest([0]string{}, elemIsEscaped, w, r) + case "POST": + s.handleReceiptsPostRequest([0]string{}, elemIsEscaped, w, r) + default: + s.notAllowed(w, r, notAllowedParams{ + allowedMethods: "GET,POST", + allowedHeaders: rn25AllowedHeaders, + acceptPost: "application/json", + acceptPatch: "", + }) + } + + return + } + switch elem[0] { + case '/': // Prefix: "/" + + if l := len("/"); len(elem) >= l && elem[0:l] == "/" { + elem = elem[l:] + } else { + break + } + + // Param: "receipt_id" + // 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.handleReceiptsReceiptIDGetRequest([1]string{ + args[0], + }, elemIsEscaped, w, r) + default: + s.notAllowed(w, r, notAllowedParams{ + allowedMethods: "GET", + allowedHeaders: rn27AllowedHeaders, + acceptPost: "", + acceptPatch: "", + }) + } + + return + } + + } + + case 'f': // Prefix: "funds" + + if l := len("funds"); len(elem) >= l && elem[0:l] == "funds" { + elem = elem[l:] + } else { + break + } + + if len(elem) == 0 { + switch r.Method { + case "GET": + s.handleRefundsGetRequest([0]string{}, elemIsEscaped, w, r) + case "POST": + s.handleRefundsPostRequest([0]string{}, elemIsEscaped, w, r) + default: + s.notAllowed(w, r, notAllowedParams{ + allowedMethods: "GET,POST", + allowedHeaders: rn29AllowedHeaders, + acceptPost: "application/json", + acceptPatch: "", + }) + } + + return + } + switch elem[0] { + case '/': // Prefix: "/" + + if l := len("/"); len(elem) >= l && elem[0:l] == "/" { + elem = elem[l:] + } else { + break + } + + // Param: "refund_id" + // 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.handleRefundsRefundIDGetRequest([1]string{ + args[0], + }, elemIsEscaped, w, r) + default: + s.notAllowed(w, r, notAllowedParams{ + allowedMethods: "GET", + allowedHeaders: rn31AllowedHeaders, + acceptPost: "", + acceptPatch: "", + }) + } + + return + } + + } + + } + + case 's': // Prefix: "sbp_banks" + + if l := len("sbp_banks"); len(elem) >= l && elem[0:l] == "sbp_banks" { + elem = elem[l:] + } else { + break + } + + if len(elem) == 0 { + // Leaf node. + switch r.Method { + case "GET": + s.handleSbpBanksGetRequest([0]string{}, elemIsEscaped, w, r) + default: + s.notAllowed(w, r, notAllowedParams{ + allowedMethods: "GET", + allowedHeaders: rn32AllowedHeaders, + acceptPost: "", + acceptPatch: "", + }) + } + + return + } + + case 'w': // Prefix: "webhooks" + + if l := len("webhooks"); len(elem) >= l && elem[0:l] == "webhooks" { + elem = elem[l:] + } else { + break + } + + if len(elem) == 0 { + switch r.Method { + case "GET": + s.handleWebhooksGetRequest([0]string{}, elemIsEscaped, w, r) + case "POST": + s.handleWebhooksPostRequest([0]string{}, elemIsEscaped, w, r) + default: + s.notAllowed(w, r, notAllowedParams{ + allowedMethods: "GET,POST", + allowedHeaders: rn33AllowedHeaders, + acceptPost: "application/json", + acceptPatch: "", + }) + } + + return + } + switch elem[0] { + case '/': // Prefix: "/" + + if l := len("/"); len(elem) >= l && elem[0:l] == "/" { + elem = elem[l:] + } else { + break + } + + // Param: "webhook_id" + // 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 "DELETE": + s.handleWebhooksWebhookIDDeleteRequest([1]string{ + args[0], + }, elemIsEscaped, w, r) + default: + s.notAllowed(w, r, notAllowedParams{ + allowedMethods: "DELETE", + allowedHeaders: rn35AllowedHeaders, + acceptPost: "", + acceptPatch: "", + }) + } + + return + } + + } + + } + + } + } + s.notFound(w, r) +} + +// Route is route object. +type Route struct { + name string + summary string + operationID string + operationGroup string + pathPattern string + count int + args [1]string +} + +// Name returns ogen operation name. +// +// It is guaranteed to be unique and not empty. +func (r Route) Name() string { + return r.name +} + +// Summary returns OpenAPI summary. +func (r Route) Summary() string { + return r.summary +} + +// OperationID returns OpenAPI operationId. +func (r Route) OperationID() string { + return r.operationID +} + +// OperationGroup returns the x-ogen-operation-group value. +func (r Route) OperationGroup() string { + return r.operationGroup +} + +// PathPattern returns OpenAPI path. +func (r Route) PathPattern() string { + return r.pathPattern +} + +// Args returns parsed arguments. +func (r Route) Args() []string { + return r.args[:r.count] +} + +// FindRoute finds Route for given method and path. +// +// Note: this method does not unescape path or handle reserved characters in path properly. Use FindPath instead. +func (s *Server) FindRoute(method, path string) (Route, bool) { + return s.FindPath(method, &url.URL{Path: path}) +} + +// FindPath finds Route for given method and URL. +func (s *Server) FindPath(method string, u *url.URL) (r Route, _ bool) { + var ( + elem = u.Path + args = r.args + ) + if rawPath := u.RawPath; rawPath != "" { + if normalized, ok := uri.NormalizeEscapedPath(rawPath); ok { + elem = normalized + } + defer func() { + for i, arg := range r.args[:r.count] { + if unescaped, err := url.PathUnescape(arg); err == nil { + r.args[i] = unescaped + } + } + }() + } + + elem, ok := s.cutPrefix(elem) + if !ok { + return r, false + } + + // Static code generated router with unwrapped path search. + switch { + default: + if len(elem) == 0 { + break + } + switch elem[0] { + case '/': // Prefix: "/" + + if l := len("/"); len(elem) >= l && elem[0:l] == "/" { + elem = elem[l:] + } else { + break + } + + if len(elem) == 0 { + break + } + switch elem[0] { + case 'd': // Prefix: "deals" + + if l := len("deals"); len(elem) >= l && elem[0:l] == "deals" { + elem = elem[l:] + } else { + break + } + + if len(elem) == 0 { + switch method { + case "GET": + r.name = DealsGetOperation + r.summary = "Список сделок" + r.operationID = "" + r.operationGroup = "" + r.pathPattern = "/deals" + r.args = args + r.count = 0 + return r, true + case "POST": + r.name = DealsPostOperation + r.summary = "Создание сделки" + r.operationID = "" + r.operationGroup = "" + r.pathPattern = "/deals" + r.args = args + r.count = 0 + return r, true + default: + return + } + } + switch elem[0] { + case '/': // Prefix: "/" + + if l := len("/"); len(elem) >= l && elem[0:l] == "/" { + elem = elem[l:] + } else { + break + } + + // Param: "deal_id" + // 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 = DealsDealIDGetOperation + r.summary = "Информация о сделке" + r.operationID = "" + r.operationGroup = "" + r.pathPattern = "/deals/{deal_id}" + r.args = args + r.count = 1 + return r, true + default: + return + } + } + + } + + case 'm': // Prefix: "me" + + if l := len("me"); len(elem) >= l && elem[0:l] == "me" { + elem = elem[l:] + } else { + break + } + + if len(elem) == 0 { + // Leaf node. + switch method { + case "GET": + r.name = MeGetOperation + r.summary = "Информация о настройках магазина или шлюза" + r.operationID = "" + r.operationGroup = "" + r.pathPattern = "/me" + r.args = args + r.count = 0 + return r, true + default: + return + } + } + + case 'p': // Prefix: "p" + + if l := len("p"); len(elem) >= l && elem[0:l] == "p" { + elem = elem[l:] + } else { + break + } + + if len(elem) == 0 { + break + } + switch elem[0] { + case 'a': // Prefix: "ay" + + if l := len("ay"); len(elem) >= l && elem[0:l] == "ay" { + elem = elem[l:] + } else { + break + } + + if len(elem) == 0 { + break + } + switch elem[0] { + case 'm': // Prefix: "ment" + + if l := len("ment"); len(elem) >= l && elem[0:l] == "ment" { + elem = elem[l:] + } else { + break + } + + if len(elem) == 0 { + break + } + switch elem[0] { + case '_': // Prefix: "_methods" + + if l := len("_methods"); len(elem) >= l && elem[0:l] == "_methods" { + elem = elem[l:] + } else { + break + } + + if len(elem) == 0 { + switch method { + case "POST": + r.name = PaymentMethodsPostOperation + r.summary = "Создание способа оплаты" + r.operationID = "" + r.operationGroup = "" + r.pathPattern = "/payment_methods" + r.args = args + r.count = 0 + return r, true + default: + return + } + } + switch elem[0] { + case '/': // Prefix: "/" + + if l := len("/"); len(elem) >= l && elem[0:l] == "/" { + elem = elem[l:] + } else { + break + } + + // Param: "payment_method_id" + // 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 = PaymentMethodsPaymentMethodIDGetOperation + r.summary = "Информация о способе оплаты" + r.operationID = "" + r.operationGroup = "" + r.pathPattern = "/payment_methods/{payment_method_id}" + r.args = args + r.count = 1 + return r, true + default: + return + } + } + + } + + case 's': // Prefix: "s" + + if l := len("s"); len(elem) >= l && elem[0:l] == "s" { + elem = elem[l:] + } else { + break + } + + if len(elem) == 0 { + switch method { + case "GET": + r.name = PaymentsGetOperation + r.summary = "List payments" + r.operationID = "" + r.operationGroup = "" + r.pathPattern = "/payments" + r.args = args + r.count = 0 + return r, true + case "POST": + r.name = PaymentsPostOperation + r.summary = "Create a payment" + r.operationID = "" + r.operationGroup = "" + r.pathPattern = "/payments" + r.args = args + r.count = 0 + return r, true + default: + return + } + } + switch elem[0] { + case '/': // Prefix: "/" + + if l := len("/"); len(elem) >= l && elem[0:l] == "/" { + elem = elem[l:] + } else { + break + } + + // Param: "payment_id" + // Match until "/" + idx := strings.IndexByte(elem, '/') + if idx < 0 { + idx = len(elem) + } + args[0] = elem[:idx] + elem = elem[idx:] + + if len(elem) == 0 { + switch method { + case "GET": + r.name = PaymentsPaymentIDGetOperation + r.summary = "Get payment information" + r.operationID = "" + r.operationGroup = "" + r.pathPattern = "/payments/{payment_id}" + r.args = args + r.count = 1 + return r, true + default: + return + } + } + switch elem[0] { + case '/': // Prefix: "/ca" + + if l := len("/ca"); len(elem) >= l && elem[0:l] == "/ca" { + elem = elem[l:] + } else { + break + } + + if len(elem) == 0 { + break + } + switch elem[0] { + case 'n': // Prefix: "ncel" + + if l := len("ncel"); len(elem) >= l && elem[0:l] == "ncel" { + elem = elem[l:] + } else { + break + } + + if len(elem) == 0 { + // Leaf node. + switch method { + case "POST": + r.name = PaymentsPaymentIDCancelPostOperation + r.summary = "Cancel a payment" + r.operationID = "" + r.operationGroup = "" + r.pathPattern = "/payments/{payment_id}/cancel" + r.args = args + r.count = 1 + return r, true + default: + return + } + } + + case 'p': // Prefix: "pture" + + if l := len("pture"); len(elem) >= l && elem[0:l] == "pture" { + elem = elem[l:] + } else { + break + } + + if len(elem) == 0 { + // Leaf node. + switch method { + case "POST": + r.name = PaymentsPaymentIDCapturePostOperation + r.summary = "Capture a payment" + r.operationID = "" + r.operationGroup = "" + r.pathPattern = "/payments/{payment_id}/capture" + r.args = args + r.count = 1 + return r, true + default: + return + } + } + + } + + } + + } + + } + + case 'o': // Prefix: "outs" + + if l := len("outs"); len(elem) >= l && elem[0:l] == "outs" { + elem = elem[l:] + } else { + break + } + + if len(elem) == 0 { + switch method { + case "GET": + r.name = PayoutsGetOperation + r.summary = "List of payouts" + r.operationID = "" + r.operationGroup = "" + r.pathPattern = "/payouts" + r.args = args + r.count = 0 + return r, true + case "POST": + r.name = PayoutsPostOperation + r.summary = "Создание выплаты" + r.operationID = "" + r.operationGroup = "" + r.pathPattern = "/payouts" + r.args = args + r.count = 0 + return r, true + default: + return + } + } + switch elem[0] { + case '/': // Prefix: "/" + + if l := len("/"); len(elem) >= l && elem[0:l] == "/" { + elem = elem[l:] + } else { + break + } + + if len(elem) == 0 { + break + } + switch elem[0] { + case 's': // Prefix: "search" + origElem := elem + if l := len("search"); len(elem) >= l && elem[0:l] == "search" { + elem = elem[l:] + } else { + break + } + + if len(elem) == 0 { + // Leaf node. + switch method { + case "GET": + r.name = PayoutsSearchGetOperation + r.summary = "Search for payouts" + r.operationID = "" + r.operationGroup = "" + r.pathPattern = "/payouts/search" + r.args = args + r.count = 0 + return r, true + default: + return + } + } + + elem = origElem + } + // Param: "payout_id" + // 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 = PayoutsPayoutIDGetOperation + r.summary = "Информация о выплате" + r.operationID = "" + r.operationGroup = "" + r.pathPattern = "/payouts/{payout_id}" + r.args = args + r.count = 1 + return r, true + default: + return + } + } + + } + + } + + case 'e': // Prefix: "ersonal_data" + + if l := len("ersonal_data"); len(elem) >= l && elem[0:l] == "ersonal_data" { + elem = elem[l:] + } else { + break + } + + if len(elem) == 0 { + switch method { + case "POST": + r.name = PersonalDataPostOperation + r.summary = "Создание персональных данных" + r.operationID = "" + r.operationGroup = "" + r.pathPattern = "/personal_data" + r.args = args + r.count = 0 + return r, true + default: + return + } + } + switch elem[0] { + case '/': // Prefix: "/" + + if l := len("/"); len(elem) >= l && elem[0:l] == "/" { + elem = elem[l:] + } else { + break + } + + // Param: "personal_data_id" + // 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 = PersonalDataPersonalDataIDGetOperation + r.summary = "Информация о персональных данных" + r.operationID = "" + r.operationGroup = "" + r.pathPattern = "/personal_data/{personal_data_id}" + r.args = args + r.count = 1 + return r, true + default: + return + } + } + + } + + } + + case 'r': // Prefix: "re" + + if l := len("re"); len(elem) >= l && elem[0:l] == "re" { + elem = elem[l:] + } else { + break + } + + if len(elem) == 0 { + break + } + switch elem[0] { + case 'c': // Prefix: "ceipts" + + if l := len("ceipts"); len(elem) >= l && elem[0:l] == "ceipts" { + elem = elem[l:] + } else { + break + } + + if len(elem) == 0 { + switch method { + case "GET": + r.name = ReceiptsGetOperation + r.summary = "Список чеков" + r.operationID = "" + r.operationGroup = "" + r.pathPattern = "/receipts" + r.args = args + r.count = 0 + return r, true + case "POST": + r.name = ReceiptsPostOperation + r.summary = "Создание чека" + r.operationID = "" + r.operationGroup = "" + r.pathPattern = "/receipts" + r.args = args + r.count = 0 + return r, true + default: + return + } + } + switch elem[0] { + case '/': // Prefix: "/" + + if l := len("/"); len(elem) >= l && elem[0:l] == "/" { + elem = elem[l:] + } else { + break + } + + // Param: "receipt_id" + // 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 = ReceiptsReceiptIDGetOperation + r.summary = "Информация о чеке" + r.operationID = "" + r.operationGroup = "" + r.pathPattern = "/receipts/{receipt_id}" + r.args = args + r.count = 1 + return r, true + default: + return + } + } + + } + + case 'f': // Prefix: "funds" + + if l := len("funds"); len(elem) >= l && elem[0:l] == "funds" { + elem = elem[l:] + } else { + break + } + + if len(elem) == 0 { + switch method { + case "GET": + r.name = RefundsGetOperation + r.summary = "Список возвратов" + r.operationID = "" + r.operationGroup = "" + r.pathPattern = "/refunds" + r.args = args + r.count = 0 + return r, true + case "POST": + r.name = RefundsPostOperation + r.summary = "Создание возврата" + r.operationID = "" + r.operationGroup = "" + r.pathPattern = "/refunds" + r.args = args + r.count = 0 + return r, true + default: + return + } + } + switch elem[0] { + case '/': // Prefix: "/" + + if l := len("/"); len(elem) >= l && elem[0:l] == "/" { + elem = elem[l:] + } else { + break + } + + // Param: "refund_id" + // 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 = RefundsRefundIDGetOperation + r.summary = "Информация о возврате" + r.operationID = "" + r.operationGroup = "" + r.pathPattern = "/refunds/{refund_id}" + r.args = args + r.count = 1 + return r, true + default: + return + } + } + + } + + } + + case 's': // Prefix: "sbp_banks" + + if l := len("sbp_banks"); len(elem) >= l && elem[0:l] == "sbp_banks" { + elem = elem[l:] + } else { + break + } + + if len(elem) == 0 { + // Leaf node. + switch method { + case "GET": + r.name = SbpBanksGetOperation + r.summary = "Список участников СБП" + r.operationID = "" + r.operationGroup = "" + r.pathPattern = "/sbp_banks" + r.args = args + r.count = 0 + return r, true + default: + return + } + } + + case 'w': // Prefix: "webhooks" + + if l := len("webhooks"); len(elem) >= l && elem[0:l] == "webhooks" { + elem = elem[l:] + } else { + break + } + + if len(elem) == 0 { + switch method { + case "GET": + r.name = WebhooksGetOperation + r.summary = "Список созданных webhook" + r.operationID = "" + r.operationGroup = "" + r.pathPattern = "/webhooks" + r.args = args + r.count = 0 + return r, true + case "POST": + r.name = WebhooksPostOperation + r.summary = "Создание webhook" + r.operationID = "" + r.operationGroup = "" + r.pathPattern = "/webhooks" + r.args = args + r.count = 0 + return r, true + default: + return + } + } + switch elem[0] { + case '/': // Prefix: "/" + + if l := len("/"); len(elem) >= l && elem[0:l] == "/" { + elem = elem[l:] + } else { + break + } + + // Param: "webhook_id" + // 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 "DELETE": + r.name = WebhooksWebhookIDDeleteOperation + r.summary = "Удаление webhook" + r.operationID = "" + r.operationGroup = "" + r.pathPattern = "/webhooks/{webhook_id}" + r.args = args + r.count = 1 + return r, true + default: + return + } + } + + } + + } + + } + } + return r, false +} diff --git a/internal/service/yookassa/gen/oas_schemas_gen.go b/internal/service/yookassa/gen/oas_schemas_gen.go new file mode 100644 index 0000000..1fdd7d1 --- /dev/null +++ b/internal/service/yookassa/gen/oas_schemas_gen.go @@ -0,0 +1,24790 @@ +// Code generated by ogen, DO NOT EDIT. + +package gen + +import ( + "time" + + "github.com/go-faster/errors" + "github.com/go-faster/jx" +) + +type AccountId string + +// Информация о перелете. +// Ref: #/components/schemas/AirlineLeg +type AirlineLeg struct { + // Code of the departure airport according to IATA: https://www.iata. + // org/publications/Pages/code-search.aspx, for example, LED. + DepartureAirport string `json:"departure_airport"` + // Code of the arrival airport according to IATA: https://www.iata.org/publications/Pages/code-search. + // aspx, for example, AMS. + DestinationAirport string `json:"destination_airport"` + // Departure date in the YYYY-MM-DD ISO 8601:2004: http://www.iso. + // org/iso/catalogue_detail?csnumber=40874 format. + DepartureDate time.Time `json:"departure_date"` + // Airline code according to IATA: https://www.iata.org/publications/Pages/code-search.aspx. + CarrierCode OptString `json:"carrier_code"` +} + +// GetDepartureAirport returns the value of DepartureAirport. +func (s *AirlineLeg) GetDepartureAirport() string { + return s.DepartureAirport +} + +// GetDestinationAirport returns the value of DestinationAirport. +func (s *AirlineLeg) GetDestinationAirport() string { + return s.DestinationAirport +} + +// GetDepartureDate returns the value of DepartureDate. +func (s *AirlineLeg) GetDepartureDate() time.Time { + return s.DepartureDate +} + +// GetCarrierCode returns the value of CarrierCode. +func (s *AirlineLeg) GetCarrierCode() OptString { + return s.CarrierCode +} + +// SetDepartureAirport sets the value of DepartureAirport. +func (s *AirlineLeg) SetDepartureAirport(val string) { + s.DepartureAirport = val +} + +// SetDestinationAirport sets the value of DestinationAirport. +func (s *AirlineLeg) SetDestinationAirport(val string) { + s.DestinationAirport = val +} + +// SetDepartureDate sets the value of DepartureDate. +func (s *AirlineLeg) SetDepartureDate(val time.Time) { + s.DepartureDate = val +} + +// SetCarrierCode sets the value of CarrierCode. +func (s *AirlineLeg) SetCarrierCode(val OptString) { + s.CarrierCode = val +} + +// Информация о пассажире. +// Ref: #/components/schemas/AirlinePassenger +type AirlinePassenger struct { + // Passenger's first name. Only use Latin characters, for example, SERGEI. + FirstName string `json:"first_name"` + // Passenger's last name. Only use Latin characters, for example, IVANOV. + LastName string `json:"last_name"` +} + +// GetFirstName returns the value of FirstName. +func (s *AirlinePassenger) GetFirstName() string { + return s.FirstName +} + +// GetLastName returns the value of LastName. +func (s *AirlinePassenger) GetLastName() string { + return s.LastName +} + +// SetFirstName sets the value of FirstName. +func (s *AirlinePassenger) SetFirstName(val string) { + s.FirstName = val +} + +// SetLastName sets the value of LastName. +func (s *AirlinePassenger) SetLastName(val string) { + s.LastName = val +} + +// Payment authorization details when paying by a bank card. Available only for following payment +// methods: bank card, Mir Pay, SberPay, T-Pay. +// Ref: #/components/schemas/AuthorizationDetails +type AuthorizationDetails struct { + Rrn OptRrn `json:"rrn"` + // Authorization code. Provided by the issuer to confirm authorization. + AuthCode OptString `json:"auth_code"` + ThreeDSecure ThreeDSecureDetails `json:"three_d_secure"` +} + +// GetRrn returns the value of Rrn. +func (s *AuthorizationDetails) GetRrn() OptRrn { + return s.Rrn +} + +// GetAuthCode returns the value of AuthCode. +func (s *AuthorizationDetails) GetAuthCode() OptString { + return s.AuthCode +} + +// GetThreeDSecure returns the value of ThreeDSecure. +func (s *AuthorizationDetails) GetThreeDSecure() ThreeDSecureDetails { + return s.ThreeDSecure +} + +// SetRrn sets the value of Rrn. +func (s *AuthorizationDetails) SetRrn(val OptRrn) { + s.Rrn = val +} + +// SetAuthCode sets the value of AuthCode. +func (s *AuthorizationDetails) SetAuthCode(val OptString) { + s.AuthCode = val +} + +// SetThreeDSecure sets the value of ThreeDSecure. +func (s *AuthorizationDetails) SetThreeDSecure(val ThreeDSecureDetails) { + s.ThreeDSecure = val +} + +// Merged schema. +// Ref: #/components/schemas/B2bSberbankCalculatedVatData +type B2bSberbankCalculatedVatData struct { + Type B2bSberbankVatDataType `json:"type"` + // Tax rate (in percentage). Possible values: 5, 7, 10, 20 and 22. Starting January 1, 2026, the 22% + // VAT rate applies instead of the 20% rate. + Rate B2bSberbankCalculatedVatDataRate `json:"rate"` + Amount B2bSberbankCalculatedVatDataAmount `json:"amount"` +} + +// GetType returns the value of Type. +func (s *B2bSberbankCalculatedVatData) GetType() B2bSberbankVatDataType { + return s.Type +} + +// GetRate returns the value of Rate. +func (s *B2bSberbankCalculatedVatData) GetRate() B2bSberbankCalculatedVatDataRate { + return s.Rate +} + +// GetAmount returns the value of Amount. +func (s *B2bSberbankCalculatedVatData) GetAmount() B2bSberbankCalculatedVatDataAmount { + return s.Amount +} + +// SetType sets the value of Type. +func (s *B2bSberbankCalculatedVatData) SetType(val B2bSberbankVatDataType) { + s.Type = val +} + +// SetRate sets the value of Rate. +func (s *B2bSberbankCalculatedVatData) SetRate(val B2bSberbankCalculatedVatDataRate) { + s.Rate = val +} + +// SetAmount sets the value of Amount. +func (s *B2bSberbankCalculatedVatData) SetAmount(val B2bSberbankCalculatedVatDataAmount) { + s.Amount = val +} + +// Сумма в выбранной валюте. +type B2bSberbankCalculatedVatDataAmount struct { + // Сумма в выбранной валюте. Всегда дробное значение. + // Разделитель дробной части — точка, разделитель тысяч + // отсутствует. Количество знаков после точки зависит + // от выбранной валюты. Пример: 1000.00. + Value string `json:"value"` + Currency CurrencyCode `json:"currency"` +} + +// GetValue returns the value of Value. +func (s *B2bSberbankCalculatedVatDataAmount) GetValue() string { + return s.Value +} + +// GetCurrency returns the value of Currency. +func (s *B2bSberbankCalculatedVatDataAmount) GetCurrency() CurrencyCode { + return s.Currency +} + +// SetValue sets the value of Value. +func (s *B2bSberbankCalculatedVatDataAmount) SetValue(val string) { + s.Value = val +} + +// SetCurrency sets the value of Currency. +func (s *B2bSberbankCalculatedVatDataAmount) SetCurrency(val CurrencyCode) { + s.Currency = val +} + +// Tax rate (in percentage). Possible values: 5, 7, 10, 20 and 22. Starting January 1, 2026, the 22% +// VAT rate applies instead of the 20% rate. +type B2bSberbankCalculatedVatDataRate string + +const ( + B2bSberbankCalculatedVatDataRate5 B2bSberbankCalculatedVatDataRate = "5" + B2bSberbankCalculatedVatDataRate7 B2bSberbankCalculatedVatDataRate = "7" + B2bSberbankCalculatedVatDataRate10 B2bSberbankCalculatedVatDataRate = "10" + B2bSberbankCalculatedVatDataRate20 B2bSberbankCalculatedVatDataRate = "20" + B2bSberbankCalculatedVatDataRate22 B2bSberbankCalculatedVatDataRate = "22" +) + +// AllValues returns all B2bSberbankCalculatedVatDataRate values. +func (B2bSberbankCalculatedVatDataRate) AllValues() []B2bSberbankCalculatedVatDataRate { + return []B2bSberbankCalculatedVatDataRate{ + B2bSberbankCalculatedVatDataRate5, + B2bSberbankCalculatedVatDataRate7, + B2bSberbankCalculatedVatDataRate10, + B2bSberbankCalculatedVatDataRate20, + B2bSberbankCalculatedVatDataRate22, + } +} + +// MarshalText implements encoding.TextMarshaler. +func (s B2bSberbankCalculatedVatDataRate) MarshalText() ([]byte, error) { + switch s { + case B2bSberbankCalculatedVatDataRate5: + return []byte(s), nil + case B2bSberbankCalculatedVatDataRate7: + return []byte(s), nil + case B2bSberbankCalculatedVatDataRate10: + return []byte(s), nil + case B2bSberbankCalculatedVatDataRate20: + return []byte(s), nil + case B2bSberbankCalculatedVatDataRate22: + return []byte(s), nil + default: + return nil, errors.Errorf("invalid value: %q", s) + } +} + +// UnmarshalText implements encoding.TextUnmarshaler. +func (s *B2bSberbankCalculatedVatDataRate) UnmarshalText(data []byte) error { + switch B2bSberbankCalculatedVatDataRate(data) { + case B2bSberbankCalculatedVatDataRate5: + *s = B2bSberbankCalculatedVatDataRate5 + return nil + case B2bSberbankCalculatedVatDataRate7: + *s = B2bSberbankCalculatedVatDataRate7 + return nil + case B2bSberbankCalculatedVatDataRate10: + *s = B2bSberbankCalculatedVatDataRate10 + return nil + case B2bSberbankCalculatedVatDataRate20: + *s = B2bSberbankCalculatedVatDataRate20 + return nil + case B2bSberbankCalculatedVatDataRate22: + *s = B2bSberbankCalculatedVatDataRate22 + return nil + default: + return errors.Errorf("invalid value: %q", data) + } +} + +// Merged schema. +// Ref: #/components/schemas/B2bSberbankMixedVatData +type B2bSberbankMixedVatData struct { + Type B2bSberbankVatDataType `json:"type"` + Amount B2bSberbankMixedVatDataAmount `json:"amount"` +} + +// GetType returns the value of Type. +func (s *B2bSberbankMixedVatData) GetType() B2bSberbankVatDataType { + return s.Type +} + +// GetAmount returns the value of Amount. +func (s *B2bSberbankMixedVatData) GetAmount() B2bSberbankMixedVatDataAmount { + return s.Amount +} + +// SetType sets the value of Type. +func (s *B2bSberbankMixedVatData) SetType(val B2bSberbankVatDataType) { + s.Type = val +} + +// SetAmount sets the value of Amount. +func (s *B2bSberbankMixedVatData) SetAmount(val B2bSberbankMixedVatDataAmount) { + s.Amount = val +} + +// Сумма в выбранной валюте. +type B2bSberbankMixedVatDataAmount struct { + // Сумма в выбранной валюте. Всегда дробное значение. + // Разделитель дробной части — точка, разделитель тысяч + // отсутствует. Количество знаков после точки зависит + // от выбранной валюты. Пример: 1000.00. + Value string `json:"value"` + Currency CurrencyCode `json:"currency"` +} + +// GetValue returns the value of Value. +func (s *B2bSberbankMixedVatDataAmount) GetValue() string { + return s.Value +} + +// GetCurrency returns the value of Currency. +func (s *B2bSberbankMixedVatDataAmount) GetCurrency() CurrencyCode { + return s.Currency +} + +// SetValue sets the value of Value. +func (s *B2bSberbankMixedVatDataAmount) SetValue(val string) { + s.Value = val +} + +// SetCurrency sets the value of Currency. +func (s *B2bSberbankMixedVatDataAmount) SetCurrency(val CurrencyCode) { + s.Currency = val +} + +// Банковские реквизиты плательщика (юридического лица +// или ИП). +// Ref: #/components/schemas/B2bSberbankPayerBankDetails +type B2bSberbankPayerBankDetails struct { + // Полное наименование организации. + FullName string `json:"full_name"` + // Сокращенное наименование организации. + ShortName string `json:"short_name"` + // Адрес организации. + Address string `json:"address"` + // Индивидуальный налоговый номер (ИНН) организации. + Inn string `json:"inn"` + // Наименование банка организации. + BankName string `json:"bank_name"` + // Отделение банка организации. + BankBranch string `json:"bank_branch"` + // Банковский идентификационный код (БИК) банка + // организации. + BankBik string `json:"bank_bik"` + // Номер счета организации. + Account string `json:"account"` + // Код причины постановки на учет (КПП) организации. + Kpp OptString `json:"kpp"` +} + +// GetFullName returns the value of FullName. +func (s *B2bSberbankPayerBankDetails) GetFullName() string { + return s.FullName +} + +// GetShortName returns the value of ShortName. +func (s *B2bSberbankPayerBankDetails) GetShortName() string { + return s.ShortName +} + +// GetAddress returns the value of Address. +func (s *B2bSberbankPayerBankDetails) GetAddress() string { + return s.Address +} + +// GetInn returns the value of Inn. +func (s *B2bSberbankPayerBankDetails) GetInn() string { + return s.Inn +} + +// GetBankName returns the value of BankName. +func (s *B2bSberbankPayerBankDetails) GetBankName() string { + return s.BankName +} + +// GetBankBranch returns the value of BankBranch. +func (s *B2bSberbankPayerBankDetails) GetBankBranch() string { + return s.BankBranch +} + +// GetBankBik returns the value of BankBik. +func (s *B2bSberbankPayerBankDetails) GetBankBik() string { + return s.BankBik +} + +// GetAccount returns the value of Account. +func (s *B2bSberbankPayerBankDetails) GetAccount() string { + return s.Account +} + +// GetKpp returns the value of Kpp. +func (s *B2bSberbankPayerBankDetails) GetKpp() OptString { + return s.Kpp +} + +// SetFullName sets the value of FullName. +func (s *B2bSberbankPayerBankDetails) SetFullName(val string) { + s.FullName = val +} + +// SetShortName sets the value of ShortName. +func (s *B2bSberbankPayerBankDetails) SetShortName(val string) { + s.ShortName = val +} + +// SetAddress sets the value of Address. +func (s *B2bSberbankPayerBankDetails) SetAddress(val string) { + s.Address = val +} + +// SetInn sets the value of Inn. +func (s *B2bSberbankPayerBankDetails) SetInn(val string) { + s.Inn = val +} + +// SetBankName sets the value of BankName. +func (s *B2bSberbankPayerBankDetails) SetBankName(val string) { + s.BankName = val +} + +// SetBankBranch sets the value of BankBranch. +func (s *B2bSberbankPayerBankDetails) SetBankBranch(val string) { + s.BankBranch = val +} + +// SetBankBik sets the value of BankBik. +func (s *B2bSberbankPayerBankDetails) SetBankBik(val string) { + s.BankBik = val +} + +// SetAccount sets the value of Account. +func (s *B2bSberbankPayerBankDetails) SetAccount(val string) { + s.Account = val +} + +// SetKpp sets the value of Kpp. +func (s *B2bSberbankPayerBankDetails) SetKpp(val OptString) { + s.Kpp = val +} + +// Merged schema. +// Ref: #/components/schemas/B2bSberbankUntaxedVatData +type B2bSberbankUntaxedVatData struct { + Type B2bSberbankVatDataType `json:"type"` +} + +// GetType returns the value of Type. +func (s *B2bSberbankUntaxedVatData) GetType() B2bSberbankVatDataType { + return s.Type +} + +// SetType sets the value of Type. +func (s *B2bSberbankUntaxedVatData) SetType(val B2bSberbankVatDataType) { + s.Type = val +} + +// Тип способа расчета НДС. +// Ref: #/components/schemas/B2bSberbankVatDataType +type B2bSberbankVatDataType string + +const ( + B2bSberbankVatDataTypeCalculated B2bSberbankVatDataType = "calculated" + B2bSberbankVatDataTypeUntaxed B2bSberbankVatDataType = "untaxed" + B2bSberbankVatDataTypeMixed B2bSberbankVatDataType = "mixed" +) + +// AllValues returns all B2bSberbankVatDataType values. +func (B2bSberbankVatDataType) AllValues() []B2bSberbankVatDataType { + return []B2bSberbankVatDataType{ + B2bSberbankVatDataTypeCalculated, + B2bSberbankVatDataTypeUntaxed, + B2bSberbankVatDataTypeMixed, + } +} + +// MarshalText implements encoding.TextMarshaler. +func (s B2bSberbankVatDataType) MarshalText() ([]byte, error) { + switch s { + case B2bSberbankVatDataTypeCalculated: + return []byte(s), nil + case B2bSberbankVatDataTypeUntaxed: + return []byte(s), nil + case B2bSberbankVatDataTypeMixed: + return []byte(s), nil + default: + return nil, errors.Errorf("invalid value: %q", s) + } +} + +// UnmarshalText implements encoding.TextUnmarshaler. +func (s *B2bSberbankVatDataType) UnmarshalText(data []byte) error { + switch B2bSberbankVatDataType(data) { + case B2bSberbankVatDataTypeCalculated: + *s = B2bSberbankVatDataTypeCalculated + return nil + case B2bSberbankVatDataTypeUntaxed: + *s = B2bSberbankVatDataTypeUntaxed + return nil + case B2bSberbankVatDataTypeMixed: + *s = B2bSberbankVatDataTypeMixed + return nil + default: + return errors.Errorf("invalid value: %q", data) + } +} + +// Merged schema. +// Ref: #/components/schemas/BadRequest +type BadRequest struct { + // Тип объекта. + Type OptBadRequestType `json:"type"` + // Идентификатор ошибки. Используйте его, если возникла + // необходимость обратиться в техническую поддержку. + ID OptString `json:"id"` + // Подробное описание ошибки. + Description OptString `json:"description"` + // Название параметра, из-за которого произошла ошибка. + Parameter OptString `json:"parameter"` + // Рекомендуемое количество миллисекунд, спустя + // которое следует повторить запрос. + RetryAfter OptInt `json:"retry_after"` + // Код ошибки. + Code OptBadRequestCode `json:"code"` +} + +// GetType returns the value of Type. +func (s *BadRequest) GetType() OptBadRequestType { + return s.Type +} + +// GetID returns the value of ID. +func (s *BadRequest) GetID() OptString { + return s.ID +} + +// GetDescription returns the value of Description. +func (s *BadRequest) GetDescription() OptString { + return s.Description +} + +// GetParameter returns the value of Parameter. +func (s *BadRequest) GetParameter() OptString { + return s.Parameter +} + +// GetRetryAfter returns the value of RetryAfter. +func (s *BadRequest) GetRetryAfter() OptInt { + return s.RetryAfter +} + +// GetCode returns the value of Code. +func (s *BadRequest) GetCode() OptBadRequestCode { + return s.Code +} + +// SetType sets the value of Type. +func (s *BadRequest) SetType(val OptBadRequestType) { + s.Type = val +} + +// SetID sets the value of ID. +func (s *BadRequest) SetID(val OptString) { + s.ID = val +} + +// SetDescription sets the value of Description. +func (s *BadRequest) SetDescription(val OptString) { + s.Description = val +} + +// SetParameter sets the value of Parameter. +func (s *BadRequest) SetParameter(val OptString) { + s.Parameter = val +} + +// SetRetryAfter sets the value of RetryAfter. +func (s *BadRequest) SetRetryAfter(val OptInt) { + s.RetryAfter = val +} + +// SetCode sets the value of Code. +func (s *BadRequest) SetCode(val OptBadRequestCode) { + s.Code = val +} + +func (*BadRequest) dealsDealIDGetRes() {} +func (*BadRequest) dealsGetRes() {} +func (*BadRequest) dealsPostRes() {} +func (*BadRequest) meGetRes() {} +func (*BadRequest) paymentMethodsPaymentMethodIDGetRes() {} +func (*BadRequest) paymentMethodsPostRes() {} +func (*BadRequest) paymentsGetRes() {} +func (*BadRequest) paymentsPaymentIDCancelPostRes() {} +func (*BadRequest) paymentsPaymentIDCapturePostRes() {} +func (*BadRequest) paymentsPaymentIDGetRes() {} +func (*BadRequest) paymentsPostRes() {} +func (*BadRequest) payoutsGetRes() {} +func (*BadRequest) payoutsPayoutIDGetRes() {} +func (*BadRequest) payoutsPostRes() {} +func (*BadRequest) payoutsSearchGetRes() {} +func (*BadRequest) personalDataPersonalDataIDGetRes() {} +func (*BadRequest) personalDataPostRes() {} +func (*BadRequest) receiptsGetRes() {} +func (*BadRequest) receiptsPostRes() {} +func (*BadRequest) receiptsReceiptIDGetRes() {} +func (*BadRequest) refundsGetRes() {} +func (*BadRequest) refundsPostRes() {} +func (*BadRequest) refundsRefundIDGetRes() {} +func (*BadRequest) sbpBanksGetRes() {} +func (*BadRequest) webhooksPostRes() {} +func (*BadRequest) webhooksWebhookIDDeleteRes() {} + +// Код ошибки. +type BadRequestCode string + +const ( + BadRequestCodeInvalidRequest BadRequestCode = "invalid_request" +) + +// AllValues returns all BadRequestCode values. +func (BadRequestCode) AllValues() []BadRequestCode { + return []BadRequestCode{ + BadRequestCodeInvalidRequest, + } +} + +// MarshalText implements encoding.TextMarshaler. +func (s BadRequestCode) MarshalText() ([]byte, error) { + switch s { + case BadRequestCodeInvalidRequest: + return []byte(s), nil + default: + return nil, errors.Errorf("invalid value: %q", s) + } +} + +// UnmarshalText implements encoding.TextUnmarshaler. +func (s *BadRequestCode) UnmarshalText(data []byte) error { + switch BadRequestCode(data) { + case BadRequestCodeInvalidRequest: + *s = BadRequestCodeInvalidRequest + return nil + default: + return errors.Errorf("invalid value: %q", data) + } +} + +// Тип объекта. +type BadRequestType string + +const ( + BadRequestTypeError BadRequestType = "error" +) + +// AllValues returns all BadRequestType values. +func (BadRequestType) AllValues() []BadRequestType { + return []BadRequestType{ + BadRequestTypeError, + } +} + +// MarshalText implements encoding.TextMarshaler. +func (s BadRequestType) MarshalText() ([]byte, error) { + switch s { + case BadRequestTypeError: + return []byte(s), nil + default: + return nil, errors.Errorf("invalid value: %q", s) + } +} + +// UnmarshalText implements encoding.TextUnmarshaler. +func (s *BadRequestType) UnmarshalText(data []byte) error { + switch BadRequestType(data) { + case BadRequestTypeError: + *s = BadRequestTypeError + return nil + default: + return errors.Errorf("invalid value: %q", data) + } +} + +// Данные банковской карты. +// Ref: #/components/schemas/BankCardData +type BankCardData struct { + First6 OptBankCardFirst6 `json:"first6"` + Last4 BankCardLast4 `json:"last4"` + ExpiryYear BankCardExpiryYear `json:"expiry_year"` + ExpiryMonth BankCardExpiryMonth `json:"expiry_month"` + CardType BankCardType `json:"card_type"` + CardProduct OptBankCardProduct `json:"card_product"` + IssuerCountry OptBankCardIssuerCountry `json:"issuer_country"` + IssuerName OptBankCardIssuerName `json:"issuer_name"` + Source OptBankCardDataSource `json:"source"` +} + +// GetFirst6 returns the value of First6. +func (s *BankCardData) GetFirst6() OptBankCardFirst6 { + return s.First6 +} + +// GetLast4 returns the value of Last4. +func (s *BankCardData) GetLast4() BankCardLast4 { + return s.Last4 +} + +// GetExpiryYear returns the value of ExpiryYear. +func (s *BankCardData) GetExpiryYear() BankCardExpiryYear { + return s.ExpiryYear +} + +// GetExpiryMonth returns the value of ExpiryMonth. +func (s *BankCardData) GetExpiryMonth() BankCardExpiryMonth { + return s.ExpiryMonth +} + +// GetCardType returns the value of CardType. +func (s *BankCardData) GetCardType() BankCardType { + return s.CardType +} + +// GetCardProduct returns the value of CardProduct. +func (s *BankCardData) GetCardProduct() OptBankCardProduct { + return s.CardProduct +} + +// GetIssuerCountry returns the value of IssuerCountry. +func (s *BankCardData) GetIssuerCountry() OptBankCardIssuerCountry { + return s.IssuerCountry +} + +// GetIssuerName returns the value of IssuerName. +func (s *BankCardData) GetIssuerName() OptBankCardIssuerName { + return s.IssuerName +} + +// GetSource returns the value of Source. +func (s *BankCardData) GetSource() OptBankCardDataSource { + return s.Source +} + +// SetFirst6 sets the value of First6. +func (s *BankCardData) SetFirst6(val OptBankCardFirst6) { + s.First6 = val +} + +// SetLast4 sets the value of Last4. +func (s *BankCardData) SetLast4(val BankCardLast4) { + s.Last4 = val +} + +// SetExpiryYear sets the value of ExpiryYear. +func (s *BankCardData) SetExpiryYear(val BankCardExpiryYear) { + s.ExpiryYear = val +} + +// SetExpiryMonth sets the value of ExpiryMonth. +func (s *BankCardData) SetExpiryMonth(val BankCardExpiryMonth) { + s.ExpiryMonth = val +} + +// SetCardType sets the value of CardType. +func (s *BankCardData) SetCardType(val BankCardType) { + s.CardType = val +} + +// SetCardProduct sets the value of CardProduct. +func (s *BankCardData) SetCardProduct(val OptBankCardProduct) { + s.CardProduct = val +} + +// SetIssuerCountry sets the value of IssuerCountry. +func (s *BankCardData) SetIssuerCountry(val OptBankCardIssuerCountry) { + s.IssuerCountry = val +} + +// SetIssuerName sets the value of IssuerName. +func (s *BankCardData) SetIssuerName(val OptBankCardIssuerName) { + s.IssuerName = val +} + +// SetSource sets the value of Source. +func (s *BankCardData) SetSource(val OptBankCardDataSource) { + s.Source = val +} + +// Источник данных банковской карты. Возможные +// значения: mir_pay, apple_pay, google_pay. Присутствует, если +// пользователь при оплате выбрал карту, сохраненную в +// Mir Pay, Apple Pay или Google Pay. +// Ref: #/components/schemas/BankCardDataSource +type BankCardDataSource string + +const ( + BankCardDataSourceApplePay BankCardDataSource = "apple_pay" + BankCardDataSourceGooglePay BankCardDataSource = "google_pay" + BankCardDataSourceMirPay BankCardDataSource = "mir_pay" +) + +// AllValues returns all BankCardDataSource values. +func (BankCardDataSource) AllValues() []BankCardDataSource { + return []BankCardDataSource{ + BankCardDataSourceApplePay, + BankCardDataSourceGooglePay, + BankCardDataSourceMirPay, + } +} + +// MarshalText implements encoding.TextMarshaler. +func (s BankCardDataSource) MarshalText() ([]byte, error) { + switch s { + case BankCardDataSourceApplePay: + return []byte(s), nil + case BankCardDataSourceGooglePay: + return []byte(s), nil + case BankCardDataSourceMirPay: + return []byte(s), nil + default: + return nil, errors.Errorf("invalid value: %q", s) + } +} + +// UnmarshalText implements encoding.TextUnmarshaler. +func (s *BankCardDataSource) UnmarshalText(data []byte) error { + switch BankCardDataSource(data) { + case BankCardDataSourceApplePay: + *s = BankCardDataSourceApplePay + return nil + case BankCardDataSourceGooglePay: + *s = BankCardDataSourceGooglePay + return nil + case BankCardDataSourceMirPay: + *s = BankCardDataSourceMirPay + return nil + default: + return errors.Errorf("invalid value: %q", data) + } +} + +type BankCardExpiryMonth string + +type BankCardExpiryYear string + +type BankCardFirst6 string + +type BankCardHolderName string + +type BankCardIssuerCountry string + +type BankCardIssuerName string + +type BankCardLast4 string + +// Карточный продукт платежной системы, с которым +// ассоциирована банковская карта. Например, карточные +// продукты платежной системы Мир: Mir Classic, Mir Classic Credit, MIR +// Privilege Plus и другие. +// Ref: #/components/schemas/BankCardProduct +type BankCardProduct struct { + // Код карточного продукта. Пример: MCP. + Code string `json:"code"` + // Название карточного продукта. Пример: MIR Privilege. + Name OptString `json:"name"` +} + +// GetCode returns the value of Code. +func (s *BankCardProduct) GetCode() string { + return s.Code +} + +// GetName returns the value of Name. +func (s *BankCardProduct) GetName() OptString { + return s.Name +} + +// SetCode sets the value of Code. +func (s *BankCardProduct) SetCode(val string) { + s.Code = val +} + +// SetName sets the value of Name. +func (s *BankCardProduct) SetName(val OptString) { + s.Name = val +} + +// Тип банковской карты. Возможные значения: MasterCard (для +// карт Mastercard и Maestro), Visa (для карт Visa и Visa Electron), Mir, UnionPay, JCB, +// AmericanExpress, DinersClub, DiscoverCard, InstaPayment, InstaPaymentTM, Laser, Dankort, Solo, +// Switch и Unknown. +// Ref: #/components/schemas/BankCardType +type BankCardType string + +const ( + BankCardTypeMasterCard BankCardType = "MasterCard" + BankCardTypeVisa BankCardType = "Visa" + BankCardTypeMir BankCardType = "Mir" + BankCardTypeUnionPay BankCardType = "UnionPay" + BankCardTypeJCB BankCardType = "JCB" + BankCardTypeAmericanExpress BankCardType = "AmericanExpress" + BankCardTypeDinersClub BankCardType = "DinersClub" + BankCardTypeDiscoverCard BankCardType = "DiscoverCard" + BankCardTypeInstaPayment BankCardType = "InstaPayment" + BankCardTypeInstaPaymentTM BankCardType = "InstaPaymentTM" + BankCardTypeLaser BankCardType = "Laser" + BankCardTypeDankort BankCardType = "Dankort" + BankCardTypeSolo BankCardType = "Solo" + BankCardTypeSwitch BankCardType = "Switch" + BankCardTypeUnknown BankCardType = "Unknown" +) + +// AllValues returns all BankCardType values. +func (BankCardType) AllValues() []BankCardType { + return []BankCardType{ + BankCardTypeMasterCard, + BankCardTypeVisa, + BankCardTypeMir, + BankCardTypeUnionPay, + BankCardTypeJCB, + BankCardTypeAmericanExpress, + BankCardTypeDinersClub, + BankCardTypeDiscoverCard, + BankCardTypeInstaPayment, + BankCardTypeInstaPaymentTM, + BankCardTypeLaser, + BankCardTypeDankort, + BankCardTypeSolo, + BankCardTypeSwitch, + BankCardTypeUnknown, + } +} + +// MarshalText implements encoding.TextMarshaler. +func (s BankCardType) MarshalText() ([]byte, error) { + switch s { + case BankCardTypeMasterCard: + return []byte(s), nil + case BankCardTypeVisa: + return []byte(s), nil + case BankCardTypeMir: + return []byte(s), nil + case BankCardTypeUnionPay: + return []byte(s), nil + case BankCardTypeJCB: + return []byte(s), nil + case BankCardTypeAmericanExpress: + return []byte(s), nil + case BankCardTypeDinersClub: + return []byte(s), nil + case BankCardTypeDiscoverCard: + return []byte(s), nil + case BankCardTypeInstaPayment: + return []byte(s), nil + case BankCardTypeInstaPaymentTM: + return []byte(s), nil + case BankCardTypeLaser: + return []byte(s), nil + case BankCardTypeDankort: + return []byte(s), nil + case BankCardTypeSolo: + return []byte(s), nil + case BankCardTypeSwitch: + return []byte(s), nil + case BankCardTypeUnknown: + return []byte(s), nil + default: + return nil, errors.Errorf("invalid value: %q", s) + } +} + +// UnmarshalText implements encoding.TextUnmarshaler. +func (s *BankCardType) UnmarshalText(data []byte) error { + switch BankCardType(data) { + case BankCardTypeMasterCard: + *s = BankCardTypeMasterCard + return nil + case BankCardTypeVisa: + *s = BankCardTypeVisa + return nil + case BankCardTypeMir: + *s = BankCardTypeMir + return nil + case BankCardTypeUnionPay: + *s = BankCardTypeUnionPay + return nil + case BankCardTypeJCB: + *s = BankCardTypeJCB + return nil + case BankCardTypeAmericanExpress: + *s = BankCardTypeAmericanExpress + return nil + case BankCardTypeDinersClub: + *s = BankCardTypeDinersClub + return nil + case BankCardTypeDiscoverCard: + *s = BankCardTypeDiscoverCard + return nil + case BankCardTypeInstaPayment: + *s = BankCardTypeInstaPayment + return nil + case BankCardTypeInstaPaymentTM: + *s = BankCardTypeInstaPaymentTM + return nil + case BankCardTypeLaser: + *s = BankCardTypeLaser + return nil + case BankCardTypeDankort: + *s = BankCardTypeDankort + return nil + case BankCardTypeSolo: + *s = BankCardTypeSolo + return nil + case BankCardTypeSwitch: + *s = BankCardTypeSwitch + return nil + case BankCardTypeUnknown: + *s = BankCardTypeUnknown + return nil + default: + return errors.Errorf("invalid value: %q", data) + } +} + +type BasicAuth struct { + Username string + Password string + Roles []string +} + +// GetUsername returns the value of Username. +func (s *BasicAuth) GetUsername() string { + return s.Username +} + +// GetPassword returns the value of Password. +func (s *BasicAuth) GetPassword() string { + return s.Password +} + +// GetRoles returns the value of Roles. +func (s *BasicAuth) GetRoles() []string { + return s.Roles +} + +// SetUsername sets the value of Username. +func (s *BasicAuth) SetUsername(val string) { + s.Username = val +} + +// SetPassword sets the value of Password. +func (s *BasicAuth) SetPassword(val string) { + s.Password = val +} + +// SetRoles sets the value of Roles. +func (s *BasicAuth) SetRoles(val []string) { + s.Roles = val +} + +type Capture bool + +// Данные банковской карты для выплаты. +// Ref: #/components/schemas/CardDataForPayoutDestination +type CardDataForPayoutDestination struct { + // Номер банковской карты. Формат: только цифры, без + // пробелов. Пример: 5555555555554477. + Number string `json:"number"` +} + +// GetNumber returns the value of Number. +func (s *CardDataForPayoutDestination) GetNumber() string { + return s.Number +} + +// SetNumber sets the value of Number. +func (s *CardDataForPayoutDestination) SetNumber(val string) { + s.Number = val +} + +// Данные банковской карты (необходимы, если вы +// собираете данные карты пользователей на своей +// стороне). +// Ref: #/components/schemas/CardRequestData +type CardRequestData struct { + // Номер банковской карты. + Number string `json:"number"` + // Срок действия, год, YYYY. + ExpiryYear string `json:"expiry_year"` + // Срок действия, месяц, MM. + ExpiryMonth string `json:"expiry_month"` + Cardholder OptBankCardHolderName `json:"cardholder"` +} + +// GetNumber returns the value of Number. +func (s *CardRequestData) GetNumber() string { + return s.Number +} + +// GetExpiryYear returns the value of ExpiryYear. +func (s *CardRequestData) GetExpiryYear() string { + return s.ExpiryYear +} + +// GetExpiryMonth returns the value of ExpiryMonth. +func (s *CardRequestData) GetExpiryMonth() string { + return s.ExpiryMonth +} + +// GetCardholder returns the value of Cardholder. +func (s *CardRequestData) GetCardholder() OptBankCardHolderName { + return s.Cardholder +} + +// SetNumber sets the value of Number. +func (s *CardRequestData) SetNumber(val string) { + s.Number = val +} + +// SetExpiryYear sets the value of ExpiryYear. +func (s *CardRequestData) SetExpiryYear(val string) { + s.ExpiryYear = val +} + +// SetExpiryMonth sets the value of ExpiryMonth. +func (s *CardRequestData) SetExpiryMonth(val string) { + s.ExpiryMonth = val +} + +// SetCardholder sets the value of Cardholder. +func (s *CardRequestData) SetCardholder(val OptBankCardHolderName) { + s.Cardholder = val +} + +type ClientIp string + +// Selected payment confirmation scenario. For payments requiring confirmation from the user. More +// about confirmation scenarios: https://yookassa. +// ru/developers/payment-acceptance/getting-started/payment-process#user-confirmation. +// Ref: #/components/schemas/Confirmation +type Confirmation struct { + Type ConfirmationType `json:"type"` +} + +// GetType returns the value of Type. +func (s *Confirmation) GetType() ConfirmationType { + return s.Type +} + +// SetType sets the value of Type. +func (s *Confirmation) SetType(val ConfirmationType) { + s.Type = val +} + +// Merged schema. +// Ref: #/components/schemas/ConfirmationDataEmbedded +type ConfirmationDataEmbedded struct { + Type ConfirmationDataType `json:"type"` + Locale OptLocale `json:"locale"` +} + +// GetType returns the value of Type. +func (s *ConfirmationDataEmbedded) GetType() ConfirmationDataType { + return s.Type +} + +// GetLocale returns the value of Locale. +func (s *ConfirmationDataEmbedded) GetLocale() OptLocale { + return s.Locale +} + +// SetType sets the value of Type. +func (s *ConfirmationDataEmbedded) SetType(val ConfirmationDataType) { + s.Type = val +} + +// SetLocale sets the value of Locale. +func (s *ConfirmationDataEmbedded) SetLocale(val OptLocale) { + s.Locale = val +} + +// Merged schema. +// Ref: #/components/schemas/ConfirmationDataExternal +type ConfirmationDataExternal struct { + Type ConfirmationDataType `json:"type"` + Locale OptLocale `json:"locale"` +} + +// GetType returns the value of Type. +func (s *ConfirmationDataExternal) GetType() ConfirmationDataType { + return s.Type +} + +// GetLocale returns the value of Locale. +func (s *ConfirmationDataExternal) GetLocale() OptLocale { + return s.Locale +} + +// SetType sets the value of Type. +func (s *ConfirmationDataExternal) SetType(val ConfirmationDataType) { + s.Type = val +} + +// SetLocale sets the value of Locale. +func (s *ConfirmationDataExternal) SetLocale(val OptLocale) { + s.Locale = val +} + +// Merged schema. +// Ref: #/components/schemas/ConfirmationDataMobileApplication +type ConfirmationDataMobileApplication struct { + Type ConfirmationDataType `json:"type"` + Locale OptLocale `json:"locale"` + ReturnURL string `json:"return_url"` +} + +// GetType returns the value of Type. +func (s *ConfirmationDataMobileApplication) GetType() ConfirmationDataType { + return s.Type +} + +// GetLocale returns the value of Locale. +func (s *ConfirmationDataMobileApplication) GetLocale() OptLocale { + return s.Locale +} + +// GetReturnURL returns the value of ReturnURL. +func (s *ConfirmationDataMobileApplication) GetReturnURL() string { + return s.ReturnURL +} + +// SetType sets the value of Type. +func (s *ConfirmationDataMobileApplication) SetType(val ConfirmationDataType) { + s.Type = val +} + +// SetLocale sets the value of Locale. +func (s *ConfirmationDataMobileApplication) SetLocale(val OptLocale) { + s.Locale = val +} + +// SetReturnURL sets the value of ReturnURL. +func (s *ConfirmationDataMobileApplication) SetReturnURL(val string) { + s.ReturnURL = val +} + +// Merged schema. +// Ref: #/components/schemas/ConfirmationDataQr +type ConfirmationDataQr struct { + Type ConfirmationDataType `json:"type"` + Locale OptLocale `json:"locale"` + ReturnURL OptString `json:"return_url"` +} + +// GetType returns the value of Type. +func (s *ConfirmationDataQr) GetType() ConfirmationDataType { + return s.Type +} + +// GetLocale returns the value of Locale. +func (s *ConfirmationDataQr) GetLocale() OptLocale { + return s.Locale +} + +// GetReturnURL returns the value of ReturnURL. +func (s *ConfirmationDataQr) GetReturnURL() OptString { + return s.ReturnURL +} + +// SetType sets the value of Type. +func (s *ConfirmationDataQr) SetType(val ConfirmationDataType) { + s.Type = val +} + +// SetLocale sets the value of Locale. +func (s *ConfirmationDataQr) SetLocale(val OptLocale) { + s.Locale = val +} + +// SetReturnURL sets the value of ReturnURL. +func (s *ConfirmationDataQr) SetReturnURL(val OptString) { + s.ReturnURL = val +} + +// Merged schema. +// Ref: #/components/schemas/ConfirmationDataRedirect +type ConfirmationDataRedirect struct { + Type ConfirmationDataType `json:"type"` + Locale OptLocale `json:"locale"` + Enforce OptEnforce `json:"enforce"` + ReturnURL ReturnUrl `json:"return_url"` +} + +// GetType returns the value of Type. +func (s *ConfirmationDataRedirect) GetType() ConfirmationDataType { + return s.Type +} + +// GetLocale returns the value of Locale. +func (s *ConfirmationDataRedirect) GetLocale() OptLocale { + return s.Locale +} + +// GetEnforce returns the value of Enforce. +func (s *ConfirmationDataRedirect) GetEnforce() OptEnforce { + return s.Enforce +} + +// GetReturnURL returns the value of ReturnURL. +func (s *ConfirmationDataRedirect) GetReturnURL() ReturnUrl { + return s.ReturnURL +} + +// SetType sets the value of Type. +func (s *ConfirmationDataRedirect) SetType(val ConfirmationDataType) { + s.Type = val +} + +// SetLocale sets the value of Locale. +func (s *ConfirmationDataRedirect) SetLocale(val OptLocale) { + s.Locale = val +} + +// SetEnforce sets the value of Enforce. +func (s *ConfirmationDataRedirect) SetEnforce(val OptEnforce) { + s.Enforce = val +} + +// SetReturnURL sets the value of ReturnURL. +func (s *ConfirmationDataRedirect) SetReturnURL(val ReturnUrl) { + s.ReturnURL = val +} + +// Type of payment confirmation scenario by the user. Possible values: redirect - redirecting the +// user to a ready-made YooMoney page or a partner's page; external - waiting for the user to confirm +// the payment independently; qr - generating a QR and displaying it on the payment page so that the +// user can confirm the payment; embedded - displaying the YooMoney payment widget; +// mobile_application - redirecting the user to the partner's payment app. +// Ref: #/components/schemas/ConfirmationDataType +type ConfirmationDataType string + +const ( + ConfirmationDataTypeRedirect ConfirmationDataType = "redirect" + ConfirmationDataTypeExternal ConfirmationDataType = "external" + ConfirmationDataTypeQr ConfirmationDataType = "qr" + ConfirmationDataTypeEmbedded ConfirmationDataType = "embedded" + ConfirmationDataTypeMobileApplication ConfirmationDataType = "mobile_application" +) + +// AllValues returns all ConfirmationDataType values. +func (ConfirmationDataType) AllValues() []ConfirmationDataType { + return []ConfirmationDataType{ + ConfirmationDataTypeRedirect, + ConfirmationDataTypeExternal, + ConfirmationDataTypeQr, + ConfirmationDataTypeEmbedded, + ConfirmationDataTypeMobileApplication, + } +} + +// MarshalText implements encoding.TextMarshaler. +func (s ConfirmationDataType) MarshalText() ([]byte, error) { + switch s { + case ConfirmationDataTypeRedirect: + return []byte(s), nil + case ConfirmationDataTypeExternal: + return []byte(s), nil + case ConfirmationDataTypeQr: + return []byte(s), nil + case ConfirmationDataTypeEmbedded: + return []byte(s), nil + case ConfirmationDataTypeMobileApplication: + return []byte(s), nil + default: + return nil, errors.Errorf("invalid value: %q", s) + } +} + +// UnmarshalText implements encoding.TextUnmarshaler. +func (s *ConfirmationDataType) UnmarshalText(data []byte) error { + switch ConfirmationDataType(data) { + case ConfirmationDataTypeRedirect: + *s = ConfirmationDataTypeRedirect + return nil + case ConfirmationDataTypeExternal: + *s = ConfirmationDataTypeExternal + return nil + case ConfirmationDataTypeQr: + *s = ConfirmationDataTypeQr + return nil + case ConfirmationDataTypeEmbedded: + *s = ConfirmationDataTypeEmbedded + return nil + case ConfirmationDataTypeMobileApplication: + *s = ConfirmationDataTypeMobileApplication + return nil + default: + return errors.Errorf("invalid value: %q", data) + } +} + +// Merged schema. +// Ref: #/components/schemas/ConfirmationEmbedded +type ConfirmationEmbedded struct { + Type ConfirmationType `json:"type"` + // Токен для инициализации платежного виджета ЮKassa: + // https://yookassa.ru/developers/payment-acceptance/integration-scenarios/widget/basics. + ConfirmationToken string `json:"confirmation_token"` +} + +// GetType returns the value of Type. +func (s *ConfirmationEmbedded) GetType() ConfirmationType { + return s.Type +} + +// GetConfirmationToken returns the value of ConfirmationToken. +func (s *ConfirmationEmbedded) GetConfirmationToken() string { + return s.ConfirmationToken +} + +// SetType sets the value of Type. +func (s *ConfirmationEmbedded) SetType(val ConfirmationType) { + s.Type = val +} + +// SetConfirmationToken sets the value of ConfirmationToken. +func (s *ConfirmationEmbedded) SetConfirmationToken(val string) { + s.ConfirmationToken = val +} + +// Merged schema. +// Ref: #/components/schemas/ConfirmationMobileApplication +type ConfirmationMobileApplication struct { + Type ConfirmationType `json:"type"` + ConfirmationURL string `json:"confirmation_url"` +} + +// GetType returns the value of Type. +func (s *ConfirmationMobileApplication) GetType() ConfirmationType { + return s.Type +} + +// GetConfirmationURL returns the value of ConfirmationURL. +func (s *ConfirmationMobileApplication) GetConfirmationURL() string { + return s.ConfirmationURL +} + +// SetType sets the value of Type. +func (s *ConfirmationMobileApplication) SetType(val ConfirmationType) { + s.Type = val +} + +// SetConfirmationURL sets the value of ConfirmationURL. +func (s *ConfirmationMobileApplication) SetConfirmationURL(val string) { + s.ConfirmationURL = val +} + +// Merged schema. +// Ref: #/components/schemas/ConfirmationQr +type ConfirmationQr struct { + Type ConfirmationType `json:"type"` + // Данные для генерации QR-кода. + ConfirmationData string `json:"confirmation_data"` +} + +// GetType returns the value of Type. +func (s *ConfirmationQr) GetType() ConfirmationType { + return s.Type +} + +// GetConfirmationData returns the value of ConfirmationData. +func (s *ConfirmationQr) GetConfirmationData() string { + return s.ConfirmationData +} + +// SetType sets the value of Type. +func (s *ConfirmationQr) SetType(val ConfirmationType) { + s.Type = val +} + +// SetConfirmationData sets the value of ConfirmationData. +func (s *ConfirmationQr) SetConfirmationData(val string) { + s.ConfirmationData = val +} + +// Merged schema. +// Ref: #/components/schemas/ConfirmationRedirect +type ConfirmationRedirect struct { + Type ConfirmationType `json:"type"` + Enforce OptEnforce `json:"enforce"` + ReturnURL OptReturnUrl `json:"return_url"` + ConfirmationURL ConfirmationUrl `json:"confirmation_url"` +} + +// GetType returns the value of Type. +func (s *ConfirmationRedirect) GetType() ConfirmationType { + return s.Type +} + +// GetEnforce returns the value of Enforce. +func (s *ConfirmationRedirect) GetEnforce() OptEnforce { + return s.Enforce +} + +// GetReturnURL returns the value of ReturnURL. +func (s *ConfirmationRedirect) GetReturnURL() OptReturnUrl { + return s.ReturnURL +} + +// GetConfirmationURL returns the value of ConfirmationURL. +func (s *ConfirmationRedirect) GetConfirmationURL() ConfirmationUrl { + return s.ConfirmationURL +} + +// SetType sets the value of Type. +func (s *ConfirmationRedirect) SetType(val ConfirmationType) { + s.Type = val +} + +// SetEnforce sets the value of Enforce. +func (s *ConfirmationRedirect) SetEnforce(val OptEnforce) { + s.Enforce = val +} + +// SetReturnURL sets the value of ReturnURL. +func (s *ConfirmationRedirect) SetReturnURL(val OptReturnUrl) { + s.ReturnURL = val +} + +// SetConfirmationURL sets the value of ConfirmationURL. +func (s *ConfirmationRedirect) SetConfirmationURL(val ConfirmationUrl) { + s.ConfirmationURL = val +} + +// Тип пользовательского процесса подтверждения +// платежа | - redirect - необходимо направить пользователя +// на страницу партнера; - external - необходимо подождать, +// пока пользователь самостоятельно подтвердит платеж; +// - qr - необходимо сгенерировать QR-код и отобразить его +// на странице оплаты, чтобы пользователь смог +// подтвердить платеж; - embedded - необходимо отобразить +// платежный виджет ЮKassa; - mobile_application - необходимо +// перенаправить пользователя в приложение партнера +// для оплаты. +// Ref: #/components/schemas/ConfirmationType +type ConfirmationType string + +const ( + ConfirmationTypeRedirect ConfirmationType = "redirect" + ConfirmationTypeExternal ConfirmationType = "external" + ConfirmationTypeQr ConfirmationType = "qr" + ConfirmationTypeEmbedded ConfirmationType = "embedded" + ConfirmationTypeMobileApplication ConfirmationType = "mobile_application" +) + +// AllValues returns all ConfirmationType values. +func (ConfirmationType) AllValues() []ConfirmationType { + return []ConfirmationType{ + ConfirmationTypeRedirect, + ConfirmationTypeExternal, + ConfirmationTypeQr, + ConfirmationTypeEmbedded, + ConfirmationTypeMobileApplication, + } +} + +// MarshalText implements encoding.TextMarshaler. +func (s ConfirmationType) MarshalText() ([]byte, error) { + switch s { + case ConfirmationTypeRedirect: + return []byte(s), nil + case ConfirmationTypeExternal: + return []byte(s), nil + case ConfirmationTypeQr: + return []byte(s), nil + case ConfirmationTypeEmbedded: + return []byte(s), nil + case ConfirmationTypeMobileApplication: + return []byte(s), nil + default: + return nil, errors.Errorf("invalid value: %q", s) + } +} + +// UnmarshalText implements encoding.TextUnmarshaler. +func (s *ConfirmationType) UnmarshalText(data []byte) error { + switch ConfirmationType(data) { + case ConfirmationTypeRedirect: + *s = ConfirmationTypeRedirect + return nil + case ConfirmationTypeExternal: + *s = ConfirmationTypeExternal + return nil + case ConfirmationTypeQr: + *s = ConfirmationTypeQr + return nil + case ConfirmationTypeEmbedded: + *s = ConfirmationTypeEmbedded + return nil + case ConfirmationTypeMobileApplication: + *s = ConfirmationTypeMobileApplication + return nil + default: + return errors.Errorf("invalid value: %q", data) + } +} + +type ConfirmationUrl string + +// Трехбуквенный код валюты в формате ISO-4217: https://www.iso. +// org/iso-4217-currency-codes.html. Пример: RUB. Должен соответствовать +// валюте субаккаунта (recipient.gateway_id), если вы разделяете +// потоки платежей, и валюте аккаунта (shopId в личном +// кабинете: https://yookassa.ru/my), если не разделяете. +// Ref: #/components/schemas/CurrencyCode +type CurrencyCode string + +const ( + CurrencyCodeRUB CurrencyCode = "RUB" + CurrencyCodeEUR CurrencyCode = "EUR" + CurrencyCodeUSD CurrencyCode = "USD" + CurrencyCodeKZT CurrencyCode = "KZT" + CurrencyCodeBYN CurrencyCode = "BYN" + CurrencyCodeUAH CurrencyCode = "UAH" + CurrencyCodeUZS CurrencyCode = "UZS" + CurrencyCodeTRY CurrencyCode = "TRY" + CurrencyCodeINR CurrencyCode = "INR" + CurrencyCodeMDL CurrencyCode = "MDL" + CurrencyCodeAZN CurrencyCode = "AZN" + CurrencyCodeAMD CurrencyCode = "AMD" +) + +// AllValues returns all CurrencyCode values. +func (CurrencyCode) AllValues() []CurrencyCode { + return []CurrencyCode{ + CurrencyCodeRUB, + CurrencyCodeEUR, + CurrencyCodeUSD, + CurrencyCodeKZT, + CurrencyCodeBYN, + CurrencyCodeUAH, + CurrencyCodeUZS, + CurrencyCodeTRY, + CurrencyCodeINR, + CurrencyCodeMDL, + CurrencyCodeAZN, + CurrencyCodeAMD, + } +} + +// MarshalText implements encoding.TextMarshaler. +func (s CurrencyCode) MarshalText() ([]byte, error) { + switch s { + case CurrencyCodeRUB: + return []byte(s), nil + case CurrencyCodeEUR: + return []byte(s), nil + case CurrencyCodeUSD: + return []byte(s), nil + case CurrencyCodeKZT: + return []byte(s), nil + case CurrencyCodeBYN: + return []byte(s), nil + case CurrencyCodeUAH: + return []byte(s), nil + case CurrencyCodeUZS: + return []byte(s), nil + case CurrencyCodeTRY: + return []byte(s), nil + case CurrencyCodeINR: + return []byte(s), nil + case CurrencyCodeMDL: + return []byte(s), nil + case CurrencyCodeAZN: + return []byte(s), nil + case CurrencyCodeAMD: + return []byte(s), nil + default: + return nil, errors.Errorf("invalid value: %q", s) + } +} + +// UnmarshalText implements encoding.TextUnmarshaler. +func (s *CurrencyCode) UnmarshalText(data []byte) error { + switch CurrencyCode(data) { + case CurrencyCodeRUB: + *s = CurrencyCodeRUB + return nil + case CurrencyCodeEUR: + *s = CurrencyCodeEUR + return nil + case CurrencyCodeUSD: + *s = CurrencyCodeUSD + return nil + case CurrencyCodeKZT: + *s = CurrencyCodeKZT + return nil + case CurrencyCodeBYN: + *s = CurrencyCodeBYN + return nil + case CurrencyCodeUAH: + *s = CurrencyCodeUAH + return nil + case CurrencyCodeUZS: + *s = CurrencyCodeUZS + return nil + case CurrencyCodeTRY: + *s = CurrencyCodeTRY + return nil + case CurrencyCodeINR: + *s = CurrencyCodeINR + return nil + case CurrencyCodeMDL: + *s = CurrencyCodeMDL + return nil + case CurrencyCodeAZN: + *s = CurrencyCodeAZN + return nil + case CurrencyCodeAMD: + *s = CurrencyCodeAMD + return nil + default: + return errors.Errorf("invalid value: %q", data) + } +} + +type DealId string + +// Статус сделки. Возможные значения: * opened — сделка +// открыта; можно выполнять платежи, возвраты и выплаты +// в составе сделки; * closed — сделка закрыта — +// вознаграждение перечислено продавцу и платформе или +// оплата возвращена покупателю; нельзя выполнять +// платежи, возвраты и выплаты в составе сделки. +// Ref: #/components/schemas/DealStatus +type DealStatus string + +const ( + DealStatusOpened DealStatus = "opened" + DealStatusClosed DealStatus = "closed" +) + +// AllValues returns all DealStatus values. +func (DealStatus) AllValues() []DealStatus { + return []DealStatus{ + DealStatusOpened, + DealStatusClosed, + } +} + +// MarshalText implements encoding.TextMarshaler. +func (s DealStatus) MarshalText() ([]byte, error) { + switch s { + case DealStatusOpened: + return []byte(s), nil + case DealStatusClosed: + return []byte(s), nil + default: + return nil, errors.Errorf("invalid value: %q", s) + } +} + +// UnmarshalText implements encoding.TextUnmarshaler. +func (s *DealStatus) UnmarshalText(data []byte) error { + switch DealStatus(data) { + case DealStatusOpened: + *s = DealStatusOpened + return nil + case DealStatusClosed: + *s = DealStatusClosed + return nil + default: + return errors.Errorf("invalid value: %q", data) + } +} + +// Тип сделки. Фиксированное значение: safe_deal — +// Безопасная сделка. +// Ref: #/components/schemas/DealType +type DealType string + +const ( + DealTypeSafeDeal DealType = "safe_deal" +) + +// AllValues returns all DealType values. +func (DealType) AllValues() []DealType { + return []DealType{ + DealTypeSafeDeal, + } +} + +// MarshalText implements encoding.TextMarshaler. +func (s DealType) MarshalText() ([]byte, error) { + switch s { + case DealTypeSafeDeal: + return []byte(s), nil + default: + return nil, errors.Errorf("invalid value: %q", s) + } +} + +// UnmarshalText implements encoding.TextUnmarshaler. +func (s *DealType) UnmarshalText(data []byte) error { + switch DealType(data) { + case DealTypeSafeDeal: + *s = DealTypeSafeDeal + return nil + default: + return errors.Errorf("invalid value: %q", data) + } +} + +type DealsDealIDGetInternalServerError TooManyRequests + +func (*DealsDealIDGetInternalServerError) dealsDealIDGetRes() {} + +type DealsDealIDGetTooManyRequests TooManyRequests + +func (*DealsDealIDGetTooManyRequests) dealsDealIDGetRes() {} + +type DealsGetInternalServerError TooManyRequests + +func (*DealsGetInternalServerError) dealsGetRes() {} + +// Список сделок, созданных за последние три года. +// Сделки отсортированы по времени создания в порядке +// убывания (от новых к старым). Если результатов больше, +// чем задано в limit, список будет выводиться фрагментами. +// В этом случае в ответе на запрос вернется фрагмент +// списка и параметр next_cursor с указателем на следующий +// фрагмент. +type DealsGetOK struct { + // Формат выдачи результатов запроса. Возможное + // значение: list (список). + Type DealsGetOKType `json:"type"` + Items []SafeDeal `json:"items"` + NextCursor OptNextCursor `json:"next_cursor"` +} + +// GetType returns the value of Type. +func (s *DealsGetOK) GetType() DealsGetOKType { + return s.Type +} + +// GetItems returns the value of Items. +func (s *DealsGetOK) GetItems() []SafeDeal { + return s.Items +} + +// GetNextCursor returns the value of NextCursor. +func (s *DealsGetOK) GetNextCursor() OptNextCursor { + return s.NextCursor +} + +// SetType sets the value of Type. +func (s *DealsGetOK) SetType(val DealsGetOKType) { + s.Type = val +} + +// SetItems sets the value of Items. +func (s *DealsGetOK) SetItems(val []SafeDeal) { + s.Items = val +} + +// SetNextCursor sets the value of NextCursor. +func (s *DealsGetOK) SetNextCursor(val OptNextCursor) { + s.NextCursor = val +} + +func (*DealsGetOK) dealsGetRes() {} + +// Формат выдачи результатов запроса. Возможное +// значение: list (список). +type DealsGetOKType string + +const ( + DealsGetOKTypeList DealsGetOKType = "list" +) + +// AllValues returns all DealsGetOKType values. +func (DealsGetOKType) AllValues() []DealsGetOKType { + return []DealsGetOKType{ + DealsGetOKTypeList, + } +} + +// MarshalText implements encoding.TextMarshaler. +func (s DealsGetOKType) MarshalText() ([]byte, error) { + switch s { + case DealsGetOKTypeList: + return []byte(s), nil + default: + return nil, errors.Errorf("invalid value: %q", s) + } +} + +// UnmarshalText implements encoding.TextUnmarshaler. +func (s *DealsGetOKType) UnmarshalText(data []byte) error { + switch DealsGetOKType(data) { + case DealsGetOKTypeList: + *s = DealsGetOKTypeList + return nil + default: + return errors.Errorf("invalid value: %q", data) + } +} + +type DealsGetTooManyRequests TooManyRequests + +func (*DealsGetTooManyRequests) dealsGetRes() {} + +type DealsPostInternalServerError TooManyRequests + +func (*DealsPostInternalServerError) dealsPostRes() {} + +type DealsPostTooManyRequests TooManyRequests + +func (*DealsPostTooManyRequests) dealsPostRes() {} + +// Описание используемого электронного сертификата. +// Ref: #/components/schemas/ElectronicCertificate +type ElectronicCertificate struct { + // Идентификатор сертификата. От 20 до 30 символов. + CertificateID string `json:"certificate_id"` + // Количество единиц товара, которое одобрили для + // оплаты по этому электронному сертификату. + TruQuantity int `json:"tru_quantity"` + AvailableCompensation ElectronicCertificateAvailableCompensation `json:"available_compensation"` + AppliedCompensation ElectronicCertificateAppliedCompensation `json:"applied_compensation"` +} + +// GetCertificateID returns the value of CertificateID. +func (s *ElectronicCertificate) GetCertificateID() string { + return s.CertificateID +} + +// GetTruQuantity returns the value of TruQuantity. +func (s *ElectronicCertificate) GetTruQuantity() int { + return s.TruQuantity +} + +// GetAvailableCompensation returns the value of AvailableCompensation. +func (s *ElectronicCertificate) GetAvailableCompensation() ElectronicCertificateAvailableCompensation { + return s.AvailableCompensation +} + +// GetAppliedCompensation returns the value of AppliedCompensation. +func (s *ElectronicCertificate) GetAppliedCompensation() ElectronicCertificateAppliedCompensation { + return s.AppliedCompensation +} + +// SetCertificateID sets the value of CertificateID. +func (s *ElectronicCertificate) SetCertificateID(val string) { + s.CertificateID = val +} + +// SetTruQuantity sets the value of TruQuantity. +func (s *ElectronicCertificate) SetTruQuantity(val int) { + s.TruQuantity = val +} + +// SetAvailableCompensation sets the value of AvailableCompensation. +func (s *ElectronicCertificate) SetAvailableCompensation(val ElectronicCertificateAvailableCompensation) { + s.AvailableCompensation = val +} + +// SetAppliedCompensation sets the value of AppliedCompensation. +func (s *ElectronicCertificate) SetAppliedCompensation(val ElectronicCertificateAppliedCompensation) { + s.AppliedCompensation = val +} + +// Сумма в выбранной валюте. +type ElectronicCertificateAppliedCompensation struct { + // Сумма в выбранной валюте. Всегда дробное значение. + // Разделитель дробной части — точка, разделитель тысяч + // отсутствует. Количество знаков после точки зависит + // от выбранной валюты. Пример: 1000.00. + Value string `json:"value"` + Currency CurrencyCode `json:"currency"` +} + +// GetValue returns the value of Value. +func (s *ElectronicCertificateAppliedCompensation) GetValue() string { + return s.Value +} + +// GetCurrency returns the value of Currency. +func (s *ElectronicCertificateAppliedCompensation) GetCurrency() CurrencyCode { + return s.Currency +} + +// SetValue sets the value of Value. +func (s *ElectronicCertificateAppliedCompensation) SetValue(val string) { + s.Value = val +} + +// SetCurrency sets the value of Currency. +func (s *ElectronicCertificateAppliedCompensation) SetCurrency(val CurrencyCode) { + s.Currency = val +} + +// Товарная позиция в одобренной корзине покупки при +// оплате по электронному сертификату. +// Ref: #/components/schemas/ElectronicCertificateApprovedPaymentArticle +type ElectronicCertificateApprovedPaymentArticle struct { + ArticleNumber ElectronicCertificateArticleNumber `json:"article_number"` + TruCode ElectronicCertificateTruCode `json:"tru_code"` + ArticleCode OptElectronicCertificateArticleCode `json:"article_code"` + // Список электронных сертификатов, которые + // используются для оплаты покупки. + Certificates []ElectronicCertificate `json:"certificates"` +} + +// GetArticleNumber returns the value of ArticleNumber. +func (s *ElectronicCertificateApprovedPaymentArticle) GetArticleNumber() ElectronicCertificateArticleNumber { + return s.ArticleNumber +} + +// GetTruCode returns the value of TruCode. +func (s *ElectronicCertificateApprovedPaymentArticle) GetTruCode() ElectronicCertificateTruCode { + return s.TruCode +} + +// GetArticleCode returns the value of ArticleCode. +func (s *ElectronicCertificateApprovedPaymentArticle) GetArticleCode() OptElectronicCertificateArticleCode { + return s.ArticleCode +} + +// GetCertificates returns the value of Certificates. +func (s *ElectronicCertificateApprovedPaymentArticle) GetCertificates() []ElectronicCertificate { + return s.Certificates +} + +// SetArticleNumber sets the value of ArticleNumber. +func (s *ElectronicCertificateApprovedPaymentArticle) SetArticleNumber(val ElectronicCertificateArticleNumber) { + s.ArticleNumber = val +} + +// SetTruCode sets the value of TruCode. +func (s *ElectronicCertificateApprovedPaymentArticle) SetTruCode(val ElectronicCertificateTruCode) { + s.TruCode = val +} + +// SetArticleCode sets the value of ArticleCode. +func (s *ElectronicCertificateApprovedPaymentArticle) SetArticleCode(val OptElectronicCertificateArticleCode) { + s.ArticleCode = val +} + +// SetCertificates sets the value of Certificates. +func (s *ElectronicCertificateApprovedPaymentArticle) SetCertificates(val []ElectronicCertificate) { + s.Certificates = val +} + +// Товарная позиция в корзине покупки при оплате по +// электронному сертификату. +// Ref: #/components/schemas/ElectronicCertificateArticle +type ElectronicCertificateArticle struct { + ArticleNumber ElectronicCertificateArticleNumber `json:"article_number"` + TruCode ElectronicCertificateTruCode `json:"tru_code"` + ArticleCode OptElectronicCertificateArticleCode `json:"article_code"` + // Название товара в вашей системе. Отображается на + // готовой платежной форме ЮKassa. Максимум 128 символов. + ArticleName string `json:"article_name"` + Quantity ElectronicCertificateArticleQuantity `json:"quantity"` + Price ElectronicCertificateArticlePrice `json:"price"` + Metadata OptMetadata `json:"metadata"` +} + +// GetArticleNumber returns the value of ArticleNumber. +func (s *ElectronicCertificateArticle) GetArticleNumber() ElectronicCertificateArticleNumber { + return s.ArticleNumber +} + +// GetTruCode returns the value of TruCode. +func (s *ElectronicCertificateArticle) GetTruCode() ElectronicCertificateTruCode { + return s.TruCode +} + +// GetArticleCode returns the value of ArticleCode. +func (s *ElectronicCertificateArticle) GetArticleCode() OptElectronicCertificateArticleCode { + return s.ArticleCode +} + +// GetArticleName returns the value of ArticleName. +func (s *ElectronicCertificateArticle) GetArticleName() string { + return s.ArticleName +} + +// GetQuantity returns the value of Quantity. +func (s *ElectronicCertificateArticle) GetQuantity() ElectronicCertificateArticleQuantity { + return s.Quantity +} + +// GetPrice returns the value of Price. +func (s *ElectronicCertificateArticle) GetPrice() ElectronicCertificateArticlePrice { + return s.Price +} + +// GetMetadata returns the value of Metadata. +func (s *ElectronicCertificateArticle) GetMetadata() OptMetadata { + return s.Metadata +} + +// SetArticleNumber sets the value of ArticleNumber. +func (s *ElectronicCertificateArticle) SetArticleNumber(val ElectronicCertificateArticleNumber) { + s.ArticleNumber = val +} + +// SetTruCode sets the value of TruCode. +func (s *ElectronicCertificateArticle) SetTruCode(val ElectronicCertificateTruCode) { + s.TruCode = val +} + +// SetArticleCode sets the value of ArticleCode. +func (s *ElectronicCertificateArticle) SetArticleCode(val OptElectronicCertificateArticleCode) { + s.ArticleCode = val +} + +// SetArticleName sets the value of ArticleName. +func (s *ElectronicCertificateArticle) SetArticleName(val string) { + s.ArticleName = val +} + +// SetQuantity sets the value of Quantity. +func (s *ElectronicCertificateArticle) SetQuantity(val ElectronicCertificateArticleQuantity) { + s.Quantity = val +} + +// SetPrice sets the value of Price. +func (s *ElectronicCertificateArticle) SetPrice(val ElectronicCertificateArticlePrice) { + s.Price = val +} + +// SetMetadata sets the value of Metadata. +func (s *ElectronicCertificateArticle) SetMetadata(val OptMetadata) { + s.Metadata = val +} + +type ElectronicCertificateArticleCode string + +type ElectronicCertificateArticleNumber int32 + +// Сумма в выбранной валюте. +type ElectronicCertificateArticlePrice struct { + // Сумма в выбранной валюте. Всегда дробное значение. + // Разделитель дробной части — точка, разделитель тысяч + // отсутствует. Количество знаков после точки зависит + // от выбранной валюты. Пример: 1000.00. + Value string `json:"value"` + Currency CurrencyCode `json:"currency"` +} + +// GetValue returns the value of Value. +func (s *ElectronicCertificateArticlePrice) GetValue() string { + return s.Value +} + +// GetCurrency returns the value of Currency. +func (s *ElectronicCertificateArticlePrice) GetCurrency() CurrencyCode { + return s.Currency +} + +// SetValue sets the value of Value. +func (s *ElectronicCertificateArticlePrice) SetValue(val string) { + s.Value = val +} + +// SetCurrency sets the value of Currency. +func (s *ElectronicCertificateArticlePrice) SetCurrency(val CurrencyCode) { + s.Currency = val +} + +type ElectronicCertificateArticleQuantity int32 + +// Сумма в выбранной валюте. +type ElectronicCertificateAvailableCompensation struct { + // Сумма в выбранной валюте. Всегда дробное значение. + // Разделитель дробной части — точка, разделитель тысяч + // отсутствует. Количество знаков после точки зависит + // от выбранной валюты. Пример: 1000.00. + Value string `json:"value"` + Currency CurrencyCode `json:"currency"` +} + +// GetValue returns the value of Value. +func (s *ElectronicCertificateAvailableCompensation) GetValue() string { + return s.Value +} + +// GetCurrency returns the value of Currency. +func (s *ElectronicCertificateAvailableCompensation) GetCurrency() CurrencyCode { + return s.Currency +} + +// SetValue sets the value of Value. +func (s *ElectronicCertificateAvailableCompensation) SetValue(val string) { + s.Value = val +} + +// SetCurrency sets the value of Currency. +func (s *ElectronicCertificateAvailableCompensation) SetCurrency(val CurrencyCode) { + s.Currency = val +} + +// Данные от ФЭС НСПК для оплаты по электронному +// сертификату. +// Ref: #/components/schemas/ElectronicCertificatePayment +type ElectronicCertificatePayment struct { + Amount ElectronicCertificatePaymentAmount `json:"amount"` + BasketID string `json:"basket_id"` +} + +// GetAmount returns the value of Amount. +func (s *ElectronicCertificatePayment) GetAmount() ElectronicCertificatePaymentAmount { + return s.Amount +} + +// GetBasketID returns the value of BasketID. +func (s *ElectronicCertificatePayment) GetBasketID() string { + return s.BasketID +} + +// SetAmount sets the value of Amount. +func (s *ElectronicCertificatePayment) SetAmount(val ElectronicCertificatePaymentAmount) { + s.Amount = val +} + +// SetBasketID sets the value of BasketID. +func (s *ElectronicCertificatePayment) SetBasketID(val string) { + s.BasketID = val +} + +// Сумма в выбранной валюте. +type ElectronicCertificatePaymentAmount struct { + // Сумма в выбранной валюте. Всегда дробное значение. + // Разделитель дробной части — точка, разделитель тысяч + // отсутствует. Количество знаков после точки зависит + // от выбранной валюты. Пример: 1000.00. + Value string `json:"value"` + Currency CurrencyCode `json:"currency"` +} + +// GetValue returns the value of Value. +func (s *ElectronicCertificatePaymentAmount) GetValue() string { + return s.Value +} + +// GetCurrency returns the value of Currency. +func (s *ElectronicCertificatePaymentAmount) GetCurrency() CurrencyCode { + return s.Currency +} + +// SetValue sets the value of Value. +func (s *ElectronicCertificatePaymentAmount) SetValue(val string) { + s.Value = val +} + +// SetCurrency sets the value of Currency. +func (s *ElectronicCertificatePaymentAmount) SetCurrency(val CurrencyCode) { + s.Currency = val +} + +// Данные от ФЭС НСПК для оплаты по электронному +// сертификату. Неоходимо передавать только при оплате +// со сбором данных на вашей стороне: https://yookassa. +// ru/developers/payment-acceptance/integration-scenarios/manual-integration/other/electronic-certificate/merchant-payment-form. +// Ref: #/components/schemas/ElectronicCertificatePaymentData +type ElectronicCertificatePaymentData struct { + Amount ElectronicCertificatePaymentDataAmount `json:"amount"` + BasketID string `json:"basket_id"` +} + +// GetAmount returns the value of Amount. +func (s *ElectronicCertificatePaymentData) GetAmount() ElectronicCertificatePaymentDataAmount { + return s.Amount +} + +// GetBasketID returns the value of BasketID. +func (s *ElectronicCertificatePaymentData) GetBasketID() string { + return s.BasketID +} + +// SetAmount sets the value of Amount. +func (s *ElectronicCertificatePaymentData) SetAmount(val ElectronicCertificatePaymentDataAmount) { + s.Amount = val +} + +// SetBasketID sets the value of BasketID. +func (s *ElectronicCertificatePaymentData) SetBasketID(val string) { + s.BasketID = val +} + +// Сумма в выбранной валюте. +type ElectronicCertificatePaymentDataAmount struct { + // Сумма в выбранной валюте. Всегда дробное значение. + // Разделитель дробной части — точка, разделитель тысяч + // отсутствует. Количество знаков после точки зависит + // от выбранной валюты. Пример: 1000.00. + Value string `json:"value"` + Currency CurrencyCode `json:"currency"` +} + +// GetValue returns the value of Value. +func (s *ElectronicCertificatePaymentDataAmount) GetValue() string { + return s.Value +} + +// GetCurrency returns the value of Currency. +func (s *ElectronicCertificatePaymentDataAmount) GetCurrency() CurrencyCode { + return s.Currency +} + +// SetValue sets the value of Value. +func (s *ElectronicCertificatePaymentDataAmount) SetValue(val string) { + s.Value = val +} + +// SetCurrency sets the value of Currency. +func (s *ElectronicCertificatePaymentDataAmount) SetCurrency(val CurrencyCode) { + s.Currency = val +} + +// Товарная позиция в корзине возврата при возврате на +// электронный сертификат. +// Ref: #/components/schemas/ElectronicCertificateRefundArticle +type ElectronicCertificateRefundArticle struct { + ArticleNumber int32 `json:"article_number"` + PaymentArticleNumber int32 `json:"payment_article_number"` + TruCode ElectronicCertificateTruCode `json:"tru_code"` + // Количество возвращаемых единиц товара. Формат: целое + // положительное число. + Quantity int32 `json:"quantity"` +} + +// GetArticleNumber returns the value of ArticleNumber. +func (s *ElectronicCertificateRefundArticle) GetArticleNumber() int32 { + return s.ArticleNumber +} + +// GetPaymentArticleNumber returns the value of PaymentArticleNumber. +func (s *ElectronicCertificateRefundArticle) GetPaymentArticleNumber() int32 { + return s.PaymentArticleNumber +} + +// GetTruCode returns the value of TruCode. +func (s *ElectronicCertificateRefundArticle) GetTruCode() ElectronicCertificateTruCode { + return s.TruCode +} + +// GetQuantity returns the value of Quantity. +func (s *ElectronicCertificateRefundArticle) GetQuantity() int32 { + return s.Quantity +} + +// SetArticleNumber sets the value of ArticleNumber. +func (s *ElectronicCertificateRefundArticle) SetArticleNumber(val int32) { + s.ArticleNumber = val +} + +// SetPaymentArticleNumber sets the value of PaymentArticleNumber. +func (s *ElectronicCertificateRefundArticle) SetPaymentArticleNumber(val int32) { + s.PaymentArticleNumber = val +} + +// SetTruCode sets the value of TruCode. +func (s *ElectronicCertificateRefundArticle) SetTruCode(val ElectronicCertificateTruCode) { + s.TruCode = val +} + +// SetQuantity sets the value of Quantity. +func (s *ElectronicCertificateRefundArticle) SetQuantity(val int32) { + s.Quantity = val +} + +// Данные от ФЭС НСПК для возврата на электронный +// сертификат. Неоходимо передавать только при оплате +// со сбором данных на вашей стороне: https://yookassa. +// ru/developers/payment-acceptance/integration-scenarios/manual-integration/other/electronic-certificate/merchant-payment-form. +// Ref: #/components/schemas/ElectronicCertificateRefundDataRequest +type ElectronicCertificateRefundDataRequest struct { + Amount ElectronicCertificateRefundDataRequestAmount `json:"amount"` + BasketID string `json:"basket_id"` +} + +// GetAmount returns the value of Amount. +func (s *ElectronicCertificateRefundDataRequest) GetAmount() ElectronicCertificateRefundDataRequestAmount { + return s.Amount +} + +// GetBasketID returns the value of BasketID. +func (s *ElectronicCertificateRefundDataRequest) GetBasketID() string { + return s.BasketID +} + +// SetAmount sets the value of Amount. +func (s *ElectronicCertificateRefundDataRequest) SetAmount(val ElectronicCertificateRefundDataRequestAmount) { + s.Amount = val +} + +// SetBasketID sets the value of BasketID. +func (s *ElectronicCertificateRefundDataRequest) SetBasketID(val string) { + s.BasketID = val +} + +// Сумма в выбранной валюте. +type ElectronicCertificateRefundDataRequestAmount struct { + // Сумма в выбранной валюте. Всегда дробное значение. + // Разделитель дробной части — точка, разделитель тысяч + // отсутствует. Количество знаков после точки зависит + // от выбранной валюты. Пример: 1000.00. + Value string `json:"value"` + Currency CurrencyCode `json:"currency"` +} + +// GetValue returns the value of Value. +func (s *ElectronicCertificateRefundDataRequestAmount) GetValue() string { + return s.Value +} + +// GetCurrency returns the value of Currency. +func (s *ElectronicCertificateRefundDataRequestAmount) GetCurrency() CurrencyCode { + return s.Currency +} + +// SetValue sets the value of Value. +func (s *ElectronicCertificateRefundDataRequestAmount) SetValue(val string) { + s.Value = val +} + +// SetCurrency sets the value of Currency. +func (s *ElectronicCertificateRefundDataRequestAmount) SetCurrency(val CurrencyCode) { + s.Currency = val +} + +// Данные от ФЭС НСПК для возврата на электронный +// сертификат. +// Ref: #/components/schemas/ElectronicCertificateRefundDataResponse +type ElectronicCertificateRefundDataResponse struct { + BasketID string `json:"basket_id"` + Amount ElectronicCertificateRefundDataResponseAmount `json:"amount"` +} + +// GetBasketID returns the value of BasketID. +func (s *ElectronicCertificateRefundDataResponse) GetBasketID() string { + return s.BasketID +} + +// GetAmount returns the value of Amount. +func (s *ElectronicCertificateRefundDataResponse) GetAmount() ElectronicCertificateRefundDataResponseAmount { + return s.Amount +} + +// SetBasketID sets the value of BasketID. +func (s *ElectronicCertificateRefundDataResponse) SetBasketID(val string) { + s.BasketID = val +} + +// SetAmount sets the value of Amount. +func (s *ElectronicCertificateRefundDataResponse) SetAmount(val ElectronicCertificateRefundDataResponseAmount) { + s.Amount = val +} + +// Сумма в выбранной валюте. +type ElectronicCertificateRefundDataResponseAmount struct { + // Сумма в выбранной валюте. Всегда дробное значение. + // Разделитель дробной части — точка, разделитель тысяч + // отсутствует. Количество знаков после точки зависит + // от выбранной валюты. Пример: 1000.00. + Value string `json:"value"` + Currency CurrencyCode `json:"currency"` +} + +// GetValue returns the value of Value. +func (s *ElectronicCertificateRefundDataResponseAmount) GetValue() string { + return s.Value +} + +// GetCurrency returns the value of Currency. +func (s *ElectronicCertificateRefundDataResponseAmount) GetCurrency() CurrencyCode { + return s.Currency +} + +// SetValue sets the value of Value. +func (s *ElectronicCertificateRefundDataResponseAmount) SetValue(val string) { + s.Value = val +} + +// SetCurrency sets the value of Currency. +func (s *ElectronicCertificateRefundDataResponseAmount) SetCurrency(val CurrencyCode) { + s.Currency = val +} + +// Merged schema. +// Ref: #/components/schemas/ElectronicCertificateRefundMethod +type ElectronicCertificateRefundMethod struct { + Type RefundMethodType `json:"type"` + ElectronicCertificate OptElectronicCertificateRefundDataResponse `json:"electronic_certificate"` + // Корзина возврата — список возвращаемых товаров, для + // оплаты которых использовался электронный сертификат. + // Присутствует, если оплата была на готовой странице + // ЮKassa: https://yookassa. + // ru/developers/payment-acceptance/integration-scenarios/manual-integration/other/electronic-certificate/ready-made-payment-form. + Articles []ElectronicCertificateRefundArticle `json:"articles"` +} + +// GetType returns the value of Type. +func (s *ElectronicCertificateRefundMethod) GetType() RefundMethodType { + return s.Type +} + +// GetElectronicCertificate returns the value of ElectronicCertificate. +func (s *ElectronicCertificateRefundMethod) GetElectronicCertificate() OptElectronicCertificateRefundDataResponse { + return s.ElectronicCertificate +} + +// GetArticles returns the value of Articles. +func (s *ElectronicCertificateRefundMethod) GetArticles() []ElectronicCertificateRefundArticle { + return s.Articles +} + +// SetType sets the value of Type. +func (s *ElectronicCertificateRefundMethod) SetType(val RefundMethodType) { + s.Type = val +} + +// SetElectronicCertificate sets the value of ElectronicCertificate. +func (s *ElectronicCertificateRefundMethod) SetElectronicCertificate(val OptElectronicCertificateRefundDataResponse) { + s.ElectronicCertificate = val +} + +// SetArticles sets the value of Articles. +func (s *ElectronicCertificateRefundMethod) SetArticles(val []ElectronicCertificateRefundArticle) { + s.Articles = val +} + +// Merged schema. +// Ref: #/components/schemas/ElectronicCertificateRefundMethodData +type ElectronicCertificateRefundMethodData struct { + Type RefundMethodType `json:"type"` + ElectronicCertificate OptElectronicCertificateRefundDataRequest `json:"electronic_certificate"` + // Корзина возврата (в терминах НСПК) — список + // возвращаемых товаров, для оплаты которых + // использовался электронный сертификат. Данные должны + // соответствовать товарам из одобренной корзины + // покупки (articles в объекте платежа: https://yookassa. + // ru/developers/api#payment_object). Необходимо передавать только при + // оплате на готовой странице ЮKassa: https://yookassa. + // ru/developers/payment-acceptance/integration-scenarios/manual-integration/other/electronic-certificate/ready-made-payment-form. + Articles []ElectronicCertificateRefundArticle `json:"articles"` +} + +// GetType returns the value of Type. +func (s *ElectronicCertificateRefundMethodData) GetType() RefundMethodType { + return s.Type +} + +// GetElectronicCertificate returns the value of ElectronicCertificate. +func (s *ElectronicCertificateRefundMethodData) GetElectronicCertificate() OptElectronicCertificateRefundDataRequest { + return s.ElectronicCertificate +} + +// GetArticles returns the value of Articles. +func (s *ElectronicCertificateRefundMethodData) GetArticles() []ElectronicCertificateRefundArticle { + return s.Articles +} + +// SetType sets the value of Type. +func (s *ElectronicCertificateRefundMethodData) SetType(val RefundMethodType) { + s.Type = val +} + +// SetElectronicCertificate sets the value of ElectronicCertificate. +func (s *ElectronicCertificateRefundMethodData) SetElectronicCertificate(val OptElectronicCertificateRefundDataRequest) { + s.ElectronicCertificate = val +} + +// SetArticles sets the value of Articles. +func (s *ElectronicCertificateRefundMethodData) SetArticles(val []ElectronicCertificateRefundArticle) { + s.Articles = val +} + +type ElectronicCertificateTruCode string + +type Enforce bool + +// Момент перечисления вам вознаграждения платформы. +// Возможные значения: payment_succeeded — после успешной +// оплаты; deal_closed — при закрытии сделки после успешной +// выплаты. +// Ref: #/components/schemas/FeeMoment +type FeeMoment string + +const ( + FeeMomentPaymentSucceeded FeeMoment = "payment_succeeded" + FeeMomentDealClosed FeeMoment = "deal_closed" +) + +// AllValues returns all FeeMoment values. +func (FeeMoment) AllValues() []FeeMoment { + return []FeeMoment{ + FeeMomentPaymentSucceeded, + FeeMomentDealClosed, + } +} + +// MarshalText implements encoding.TextMarshaler. +func (s FeeMoment) MarshalText() ([]byte, error) { + switch s { + case FeeMomentPaymentSucceeded: + return []byte(s), nil + case FeeMomentDealClosed: + return []byte(s), nil + default: + return nil, errors.Errorf("invalid value: %q", s) + } +} + +// UnmarshalText implements encoding.TextUnmarshaler. +func (s *FeeMoment) UnmarshalText(data []byte) error { + switch FeeMoment(data) { + case FeeMomentPaymentSucceeded: + *s = FeeMomentPaymentSucceeded + return nil + case FeeMomentDealClosed: + *s = FeeMomentDealClosed + return nil + default: + return errors.Errorf("invalid value: %q", data) + } +} + +type FirstName string + +// Настройки магазина для отправки чеков в налоговую: +// https://yookassa.ru/developers/payment-acceptance/receipts/basics. Присутствует, +// если вы запрашивали настройки магазина и этот +// магазин использует решения ЮKassa для отправки чеков. +// Отсутствует, если магазин еще не включал отправку +// чеков через ЮKassa. +// Ref: #/components/schemas/FiscalizationData +type FiscalizationData struct { + // В настройках магазина включена отправка чеков. + // Возможные значения: * true — магазин отправляет данные + // для чеков через ЮKassa; * false — магазин выключил отправку + // чеков через ЮKassa. + Enabled bool `json:"enabled"` + Provider FiscalizationProvider `json:"provider"` +} + +// GetEnabled returns the value of Enabled. +func (s *FiscalizationData) GetEnabled() bool { + return s.Enabled +} + +// GetProvider returns the value of Provider. +func (s *FiscalizationData) GetProvider() FiscalizationProvider { + return s.Provider +} + +// SetEnabled sets the value of Enabled. +func (s *FiscalizationData) SetEnabled(val bool) { + s.Enabled = val +} + +// SetProvider sets the value of Provider. +func (s *FiscalizationData) SetProvider(val FiscalizationProvider) { + s.Provider = val +} + +// The YooMoney’s solution that the store uses to send receipts. Possible values: 54-FZ: Receipts +// from YooMoney: https://yookassa.ru/developers/payment-acceptance/receipts/54fz/yoomoney/basics: +// avanpost; 54-FZ: a third-party online sales register: https://yookassa. +// ru/developers/payment-acceptance/receipts/54fz/other-services/basics (name of an online sales +// register): a_qsi (aQsi online), atol (ATOL online), business_ru (Business.Ru), digital_kassa +// (digitalkassa), evotor (Evotor), first_ofd (1-OFD), kit_invest (Kit Invest), komtet (KOMTET Kassa), +// +// life_pay (LIFE PAY), mertrade (Mertrade), modul_kassa (ModulKassa), rocket (RocketR), shtrih_m +// +// (Orange Data). +// Ref: #/components/schemas/FiscalizationProvider +type FiscalizationProvider string + +const ( + FiscalizationProviderAtol FiscalizationProvider = "atol" + FiscalizationProviderAvanpost FiscalizationProvider = "avanpost" + FiscalizationProviderAQsi FiscalizationProvider = "a_qsi" + FiscalizationProviderBusinessRu FiscalizationProvider = "business_ru" + FiscalizationProviderDigitalKassa FiscalizationProvider = "digital_kassa" + FiscalizationProviderEvotor FiscalizationProvider = "evotor" + FiscalizationProviderFirstOfd FiscalizationProvider = "first_ofd" + FiscalizationProviderKitInvest FiscalizationProvider = "kit_invest" + FiscalizationProviderKomtet FiscalizationProvider = "komtet" + FiscalizationProviderLifePay FiscalizationProvider = "life_pay" + FiscalizationProviderMertrade FiscalizationProvider = "mertrade" + FiscalizationProviderModulKassa FiscalizationProvider = "modul_kassa" + FiscalizationProviderRocket FiscalizationProvider = "rocket" + FiscalizationProviderShtrihM FiscalizationProvider = "shtrih_m" +) + +// AllValues returns all FiscalizationProvider values. +func (FiscalizationProvider) AllValues() []FiscalizationProvider { + return []FiscalizationProvider{ + FiscalizationProviderAtol, + FiscalizationProviderAvanpost, + FiscalizationProviderAQsi, + FiscalizationProviderBusinessRu, + FiscalizationProviderDigitalKassa, + FiscalizationProviderEvotor, + FiscalizationProviderFirstOfd, + FiscalizationProviderKitInvest, + FiscalizationProviderKomtet, + FiscalizationProviderLifePay, + FiscalizationProviderMertrade, + FiscalizationProviderModulKassa, + FiscalizationProviderRocket, + FiscalizationProviderShtrihM, + } +} + +// MarshalText implements encoding.TextMarshaler. +func (s FiscalizationProvider) MarshalText() ([]byte, error) { + switch s { + case FiscalizationProviderAtol: + return []byte(s), nil + case FiscalizationProviderAvanpost: + return []byte(s), nil + case FiscalizationProviderAQsi: + return []byte(s), nil + case FiscalizationProviderBusinessRu: + return []byte(s), nil + case FiscalizationProviderDigitalKassa: + return []byte(s), nil + case FiscalizationProviderEvotor: + return []byte(s), nil + case FiscalizationProviderFirstOfd: + return []byte(s), nil + case FiscalizationProviderKitInvest: + return []byte(s), nil + case FiscalizationProviderKomtet: + return []byte(s), nil + case FiscalizationProviderLifePay: + return []byte(s), nil + case FiscalizationProviderMertrade: + return []byte(s), nil + case FiscalizationProviderModulKassa: + return []byte(s), nil + case FiscalizationProviderRocket: + return []byte(s), nil + case FiscalizationProviderShtrihM: + return []byte(s), nil + default: + return nil, errors.Errorf("invalid value: %q", s) + } +} + +// UnmarshalText implements encoding.TextUnmarshaler. +func (s *FiscalizationProvider) UnmarshalText(data []byte) error { + switch FiscalizationProvider(data) { + case FiscalizationProviderAtol: + *s = FiscalizationProviderAtol + return nil + case FiscalizationProviderAvanpost: + *s = FiscalizationProviderAvanpost + return nil + case FiscalizationProviderAQsi: + *s = FiscalizationProviderAQsi + return nil + case FiscalizationProviderBusinessRu: + *s = FiscalizationProviderBusinessRu + return nil + case FiscalizationProviderDigitalKassa: + *s = FiscalizationProviderDigitalKassa + return nil + case FiscalizationProviderEvotor: + *s = FiscalizationProviderEvotor + return nil + case FiscalizationProviderFirstOfd: + *s = FiscalizationProviderFirstOfd + return nil + case FiscalizationProviderKitInvest: + *s = FiscalizationProviderKitInvest + return nil + case FiscalizationProviderKomtet: + *s = FiscalizationProviderKomtet + return nil + case FiscalizationProviderLifePay: + *s = FiscalizationProviderLifePay + return nil + case FiscalizationProviderMertrade: + *s = FiscalizationProviderMertrade + return nil + case FiscalizationProviderModulKassa: + *s = FiscalizationProviderModulKassa + return nil + case FiscalizationProviderRocket: + *s = FiscalizationProviderRocket + return nil + case FiscalizationProviderShtrihM: + *s = FiscalizationProviderShtrihM + return nil + default: + return errors.Errorf("invalid value: %q", data) + } +} + +// Merged schema. +// Ref: #/components/schemas/Forbidden +type Forbidden struct { + // Тип объекта. + Type OptForbiddenType `json:"type"` + // Идентификатор ошибки. Используйте его, если возникла + // необходимость обратиться в техническую поддержку. + ID OptString `json:"id"` + // Подробное описание ошибки. + Description OptString `json:"description"` + // Название параметра, из-за которого произошла ошибка. + Parameter OptString `json:"parameter"` + // Рекомендуемое количество миллисекунд, спустя + // которое следует повторить запрос. + RetryAfter OptInt `json:"retry_after"` + // Код ошибки. + Code OptForbiddenCode `json:"code"` +} + +// GetType returns the value of Type. +func (s *Forbidden) GetType() OptForbiddenType { + return s.Type +} + +// GetID returns the value of ID. +func (s *Forbidden) GetID() OptString { + return s.ID +} + +// GetDescription returns the value of Description. +func (s *Forbidden) GetDescription() OptString { + return s.Description +} + +// GetParameter returns the value of Parameter. +func (s *Forbidden) GetParameter() OptString { + return s.Parameter +} + +// GetRetryAfter returns the value of RetryAfter. +func (s *Forbidden) GetRetryAfter() OptInt { + return s.RetryAfter +} + +// GetCode returns the value of Code. +func (s *Forbidden) GetCode() OptForbiddenCode { + return s.Code +} + +// SetType sets the value of Type. +func (s *Forbidden) SetType(val OptForbiddenType) { + s.Type = val +} + +// SetID sets the value of ID. +func (s *Forbidden) SetID(val OptString) { + s.ID = val +} + +// SetDescription sets the value of Description. +func (s *Forbidden) SetDescription(val OptString) { + s.Description = val +} + +// SetParameter sets the value of Parameter. +func (s *Forbidden) SetParameter(val OptString) { + s.Parameter = val +} + +// SetRetryAfter sets the value of RetryAfter. +func (s *Forbidden) SetRetryAfter(val OptInt) { + s.RetryAfter = val +} + +// SetCode sets the value of Code. +func (s *Forbidden) SetCode(val OptForbiddenCode) { + s.Code = val +} + +func (*Forbidden) dealsDealIDGetRes() {} +func (*Forbidden) dealsGetRes() {} +func (*Forbidden) dealsPostRes() {} +func (*Forbidden) meGetRes() {} +func (*Forbidden) paymentMethodsPaymentMethodIDGetRes() {} +func (*Forbidden) paymentMethodsPostRes() {} +func (*Forbidden) paymentsGetRes() {} +func (*Forbidden) paymentsPaymentIDCancelPostRes() {} +func (*Forbidden) paymentsPaymentIDCapturePostRes() {} +func (*Forbidden) paymentsPaymentIDGetRes() {} +func (*Forbidden) paymentsPostRes() {} +func (*Forbidden) payoutsGetRes() {} +func (*Forbidden) payoutsPayoutIDGetRes() {} +func (*Forbidden) payoutsPostRes() {} +func (*Forbidden) payoutsSearchGetRes() {} +func (*Forbidden) personalDataPersonalDataIDGetRes() {} +func (*Forbidden) personalDataPostRes() {} +func (*Forbidden) receiptsGetRes() {} +func (*Forbidden) receiptsPostRes() {} +func (*Forbidden) receiptsReceiptIDGetRes() {} +func (*Forbidden) refundsGetRes() {} +func (*Forbidden) refundsPostRes() {} +func (*Forbidden) refundsRefundIDGetRes() {} +func (*Forbidden) sbpBanksGetRes() {} +func (*Forbidden) webhooksGetRes() {} +func (*Forbidden) webhooksPostRes() {} +func (*Forbidden) webhooksWebhookIDDeleteRes() {} + +// Код ошибки. +type ForbiddenCode string + +const ( + ForbiddenCodeForbidden ForbiddenCode = "forbidden" +) + +// AllValues returns all ForbiddenCode values. +func (ForbiddenCode) AllValues() []ForbiddenCode { + return []ForbiddenCode{ + ForbiddenCodeForbidden, + } +} + +// MarshalText implements encoding.TextMarshaler. +func (s ForbiddenCode) MarshalText() ([]byte, error) { + switch s { + case ForbiddenCodeForbidden: + return []byte(s), nil + default: + return nil, errors.Errorf("invalid value: %q", s) + } +} + +// UnmarshalText implements encoding.TextUnmarshaler. +func (s *ForbiddenCode) UnmarshalText(data []byte) error { + switch ForbiddenCode(data) { + case ForbiddenCodeForbidden: + *s = ForbiddenCodeForbidden + return nil + default: + return errors.Errorf("invalid value: %q", data) + } +} + +// Тип объекта. +type ForbiddenType string + +const ( + ForbiddenTypeError ForbiddenType = "error" +) + +// AllValues returns all ForbiddenType values. +func (ForbiddenType) AllValues() []ForbiddenType { + return []ForbiddenType{ + ForbiddenTypeError, + } +} + +// MarshalText implements encoding.TextMarshaler. +func (s ForbiddenType) MarshalText() ([]byte, error) { + switch s { + case ForbiddenTypeError: + return []byte(s), nil + default: + return nil, errors.Errorf("invalid value: %q", s) + } +} + +// UnmarshalText implements encoding.TextUnmarshaler. +func (s *ForbiddenType) UnmarshalText(data []byte) error { + switch ForbiddenType(data) { + case ForbiddenTypeError: + *s = ForbiddenTypeError + return nil + default: + return errors.Errorf("invalid value: %q", data) + } +} + +type GatewayId string + +// Details of the receipt recorded at the Tax Service. Deprecated parameter. It was previously +// returned when making payouts to self-employed individuals. This option is currently unavailable. +// The parameter is kept for backward compatibility and may be removed in future API versions. +// Ref: #/components/schemas/IncomeReceipt +type IncomeReceipt struct { + ServiceName IncomeReceiptServiceName `json:"service_name"` + NpdReceiptID OptNpdIncomeReceiptId `json:"npd_receipt_id"` + URL OptIncomeReceiptUrl `json:"url"` + Amount OptIncomeReceiptAmount `json:"amount"` +} + +// GetServiceName returns the value of ServiceName. +func (s *IncomeReceipt) GetServiceName() IncomeReceiptServiceName { + return s.ServiceName +} + +// GetNpdReceiptID returns the value of NpdReceiptID. +func (s *IncomeReceipt) GetNpdReceiptID() OptNpdIncomeReceiptId { + return s.NpdReceiptID +} + +// GetURL returns the value of URL. +func (s *IncomeReceipt) GetURL() OptIncomeReceiptUrl { + return s.URL +} + +// GetAmount returns the value of Amount. +func (s *IncomeReceipt) GetAmount() OptIncomeReceiptAmount { + return s.Amount +} + +// SetServiceName sets the value of ServiceName. +func (s *IncomeReceipt) SetServiceName(val IncomeReceiptServiceName) { + s.ServiceName = val +} + +// SetNpdReceiptID sets the value of NpdReceiptID. +func (s *IncomeReceipt) SetNpdReceiptID(val OptNpdIncomeReceiptId) { + s.NpdReceiptID = val +} + +// SetURL sets the value of URL. +func (s *IncomeReceipt) SetURL(val OptIncomeReceiptUrl) { + s.URL = val +} + +// SetAmount sets the value of Amount. +func (s *IncomeReceipt) SetAmount(val OptIncomeReceiptAmount) { + s.Amount = val +} + +// Сумма в выбранной валюте. +type IncomeReceiptAmount struct { + // Сумма в выбранной валюте. Всегда дробное значение. + // Разделитель дробной части — точка, разделитель тысяч + // отсутствует. Количество знаков после точки зависит + // от выбранной валюты. Пример: 1000.00. + Value string `json:"value"` + Currency CurrencyCode `json:"currency"` +} + +// GetValue returns the value of Value. +func (s *IncomeReceiptAmount) GetValue() string { + return s.Value +} + +// GetCurrency returns the value of Currency. +func (s *IncomeReceiptAmount) GetCurrency() CurrencyCode { + return s.Currency +} + +// SetValue sets the value of Value. +func (s *IncomeReceiptAmount) SetValue(val string) { + s.Value = val +} + +// SetCurrency sets the value of Currency. +func (s *IncomeReceiptAmount) SetCurrency(val CurrencyCode) { + s.Currency = val +} + +type IncomeReceiptServiceName string + +type IncomeReceiptUrl string + +// Данные отраслевого реквизита. +// Ref: #/components/schemas/IndustryDetails +type IndustryDetails struct { + // Идентификатор федерального органа исполнительной + // власти (тег в 54 ФЗ — 1262). + FederalID string `json:"federal_id"` + // Дата документа основания (тег в 54 ФЗ — 1263). Передается + // в формате ISO 8601: https://en.wikipedia.org/wiki/ISO_8601. + DocumentDate time.Time `json:"document_date"` + // Номер нормативного акта федерального органа + // исполнительной власти, регламентирующего порядок + // заполнения реквизита «значение отраслевого + // реквизита» (тег в 54 ФЗ — 1264). + DocumentNumber string `json:"document_number"` + // Значение отраслевого реквизита (тег в 54 ФЗ — 1265). + Value string `json:"value"` +} + +// GetFederalID returns the value of FederalID. +func (s *IndustryDetails) GetFederalID() string { + return s.FederalID +} + +// GetDocumentDate returns the value of DocumentDate. +func (s *IndustryDetails) GetDocumentDate() time.Time { + return s.DocumentDate +} + +// GetDocumentNumber returns the value of DocumentNumber. +func (s *IndustryDetails) GetDocumentNumber() string { + return s.DocumentNumber +} + +// GetValue returns the value of Value. +func (s *IndustryDetails) GetValue() string { + return s.Value +} + +// SetFederalID sets the value of FederalID. +func (s *IndustryDetails) SetFederalID(val string) { + s.FederalID = val +} + +// SetDocumentDate sets the value of DocumentDate. +func (s *IndustryDetails) SetDocumentDate(val time.Time) { + s.DocumentDate = val +} + +// SetDocumentNumber sets the value of DocumentNumber. +func (s *IndustryDetails) SetDocumentNumber(val string) { + s.DocumentNumber = val +} + +// SetValue sets the value of Value. +func (s *IndustryDetails) SetValue(val string) { + s.Value = val +} + +// Merged schema. +// Ref: #/components/schemas/InvalidCredentials +type InvalidCredentials struct { + // Тип объекта. + Type OptInvalidCredentialsType `json:"type"` + // Идентификатор ошибки. Используйте его, если возникла + // необходимость обратиться в техническую поддержку. + ID OptString `json:"id"` + // Подробное описание ошибки. + Description OptString `json:"description"` + // Название параметра, из-за которого произошла ошибка. + Parameter OptString `json:"parameter"` + // Рекомендуемое количество миллисекунд, спустя + // которое следует повторить запрос. + RetryAfter OptInt `json:"retry_after"` + // Код ошибки. + Code OptInvalidCredentialsCode `json:"code"` +} + +// GetType returns the value of Type. +func (s *InvalidCredentials) GetType() OptInvalidCredentialsType { + return s.Type +} + +// GetID returns the value of ID. +func (s *InvalidCredentials) GetID() OptString { + return s.ID +} + +// GetDescription returns the value of Description. +func (s *InvalidCredentials) GetDescription() OptString { + return s.Description +} + +// GetParameter returns the value of Parameter. +func (s *InvalidCredentials) GetParameter() OptString { + return s.Parameter +} + +// GetRetryAfter returns the value of RetryAfter. +func (s *InvalidCredentials) GetRetryAfter() OptInt { + return s.RetryAfter +} + +// GetCode returns the value of Code. +func (s *InvalidCredentials) GetCode() OptInvalidCredentialsCode { + return s.Code +} + +// SetType sets the value of Type. +func (s *InvalidCredentials) SetType(val OptInvalidCredentialsType) { + s.Type = val +} + +// SetID sets the value of ID. +func (s *InvalidCredentials) SetID(val OptString) { + s.ID = val +} + +// SetDescription sets the value of Description. +func (s *InvalidCredentials) SetDescription(val OptString) { + s.Description = val +} + +// SetParameter sets the value of Parameter. +func (s *InvalidCredentials) SetParameter(val OptString) { + s.Parameter = val +} + +// SetRetryAfter sets the value of RetryAfter. +func (s *InvalidCredentials) SetRetryAfter(val OptInt) { + s.RetryAfter = val +} + +// SetCode sets the value of Code. +func (s *InvalidCredentials) SetCode(val OptInvalidCredentialsCode) { + s.Code = val +} + +func (*InvalidCredentials) dealsDealIDGetRes() {} +func (*InvalidCredentials) dealsGetRes() {} +func (*InvalidCredentials) dealsPostRes() {} +func (*InvalidCredentials) meGetRes() {} +func (*InvalidCredentials) paymentMethodsPaymentMethodIDGetRes() {} +func (*InvalidCredentials) paymentMethodsPostRes() {} +func (*InvalidCredentials) paymentsGetRes() {} +func (*InvalidCredentials) paymentsPaymentIDCancelPostRes() {} +func (*InvalidCredentials) paymentsPaymentIDCapturePostRes() {} +func (*InvalidCredentials) paymentsPaymentIDGetRes() {} +func (*InvalidCredentials) paymentsPostRes() {} +func (*InvalidCredentials) payoutsGetRes() {} +func (*InvalidCredentials) payoutsPayoutIDGetRes() {} +func (*InvalidCredentials) payoutsPostRes() {} +func (*InvalidCredentials) payoutsSearchGetRes() {} +func (*InvalidCredentials) personalDataPersonalDataIDGetRes() {} +func (*InvalidCredentials) personalDataPostRes() {} +func (*InvalidCredentials) receiptsGetRes() {} +func (*InvalidCredentials) receiptsPostRes() {} +func (*InvalidCredentials) receiptsReceiptIDGetRes() {} +func (*InvalidCredentials) refundsGetRes() {} +func (*InvalidCredentials) refundsPostRes() {} +func (*InvalidCredentials) refundsRefundIDGetRes() {} +func (*InvalidCredentials) sbpBanksGetRes() {} +func (*InvalidCredentials) webhooksGetRes() {} +func (*InvalidCredentials) webhooksPostRes() {} +func (*InvalidCredentials) webhooksWebhookIDDeleteRes() {} + +// Код ошибки. +type InvalidCredentialsCode string + +const ( + InvalidCredentialsCodeInvalidCredentials InvalidCredentialsCode = "invalid_credentials" +) + +// AllValues returns all InvalidCredentialsCode values. +func (InvalidCredentialsCode) AllValues() []InvalidCredentialsCode { + return []InvalidCredentialsCode{ + InvalidCredentialsCodeInvalidCredentials, + } +} + +// MarshalText implements encoding.TextMarshaler. +func (s InvalidCredentialsCode) MarshalText() ([]byte, error) { + switch s { + case InvalidCredentialsCodeInvalidCredentials: + return []byte(s), nil + default: + return nil, errors.Errorf("invalid value: %q", s) + } +} + +// UnmarshalText implements encoding.TextUnmarshaler. +func (s *InvalidCredentialsCode) UnmarshalText(data []byte) error { + switch InvalidCredentialsCode(data) { + case InvalidCredentialsCodeInvalidCredentials: + *s = InvalidCredentialsCodeInvalidCredentials + return nil + default: + return errors.Errorf("invalid value: %q", data) + } +} + +// Тип объекта. +type InvalidCredentialsType string + +const ( + InvalidCredentialsTypeError InvalidCredentialsType = "error" +) + +// AllValues returns all InvalidCredentialsType values. +func (InvalidCredentialsType) AllValues() []InvalidCredentialsType { + return []InvalidCredentialsType{ + InvalidCredentialsTypeError, + } +} + +// MarshalText implements encoding.TextMarshaler. +func (s InvalidCredentialsType) MarshalText() ([]byte, error) { + switch s { + case InvalidCredentialsTypeError: + return []byte(s), nil + default: + return nil, errors.Errorf("invalid value: %q", s) + } +} + +// UnmarshalText implements encoding.TextUnmarshaler. +func (s *InvalidCredentialsType) UnmarshalText(data []byte) error { + switch InvalidCredentialsType(data) { + case InvalidCredentialsTypeError: + *s = InvalidCredentialsTypeError + return nil + default: + return errors.Errorf("invalid value: %q", data) + } +} + +type InvoiceId string + +// Данные банковской карты. +// Ref: #/components/schemas/InvoicingBankCardData +type InvoicingBankCardData struct { + First6 string `json:"first6"` + Last4 BankCardLast4 `json:"last4"` + ExpiryYear BankCardExpiryYear `json:"expiry_year"` + ExpiryMonth BankCardExpiryMonth `json:"expiry_month"` + CardType BankCardType `json:"card_type"` +} + +// GetFirst6 returns the value of First6. +func (s *InvoicingBankCardData) GetFirst6() string { + return s.First6 +} + +// GetLast4 returns the value of Last4. +func (s *InvoicingBankCardData) GetLast4() BankCardLast4 { + return s.Last4 +} + +// GetExpiryYear returns the value of ExpiryYear. +func (s *InvoicingBankCardData) GetExpiryYear() BankCardExpiryYear { + return s.ExpiryYear +} + +// GetExpiryMonth returns the value of ExpiryMonth. +func (s *InvoicingBankCardData) GetExpiryMonth() BankCardExpiryMonth { + return s.ExpiryMonth +} + +// GetCardType returns the value of CardType. +func (s *InvoicingBankCardData) GetCardType() BankCardType { + return s.CardType +} + +// SetFirst6 sets the value of First6. +func (s *InvoicingBankCardData) SetFirst6(val string) { + s.First6 = val +} + +// SetLast4 sets the value of Last4. +func (s *InvoicingBankCardData) SetLast4(val BankCardLast4) { + s.Last4 = val +} + +// SetExpiryYear sets the value of ExpiryYear. +func (s *InvoicingBankCardData) SetExpiryYear(val BankCardExpiryYear) { + s.ExpiryYear = val +} + +// SetExpiryMonth sets the value of ExpiryMonth. +func (s *InvoicingBankCardData) SetExpiryMonth(val BankCardExpiryMonth) { + s.ExpiryMonth = val +} + +// SetCardType sets the value of CardType. +func (s *InvoicingBankCardData) SetCardType(val BankCardType) { + s.CardType = val +} + +type Kbk string + +type LastName string + +// Язык интерфейса, писем и смс, которые будет видеть или +// получать пользователь. Формат соответствует ISO/IEC 15897: +// https://en.wikipedia.org/wiki/Locale_(computer_software). Возможные значения: +// ru_RU, en_US. Регистр важен. +// Ref: #/components/schemas/Locale +type Locale string + +const ( + LocaleRuRU Locale = "ru_RU" + LocaleEnUS Locale = "en_US" +) + +// AllValues returns all Locale values. +func (Locale) AllValues() []Locale { + return []Locale{ + LocaleRuRU, + LocaleEnUS, + } +} + +// MarshalText implements encoding.TextMarshaler. +func (s Locale) MarshalText() ([]byte, error) { + switch s { + case LocaleRuRU: + return []byte(s), nil + case LocaleEnUS: + return []byte(s), nil + default: + return nil, errors.Errorf("invalid value: %q", s) + } +} + +// UnmarshalText implements encoding.TextUnmarshaler. +func (s *Locale) UnmarshalText(data []byte) error { + switch Locale(data) { + case LocaleRuRU: + *s = LocaleRuRU + return nil + case LocaleEnUS: + *s = LocaleEnUS + return nil + default: + return errors.Errorf("invalid value: %q", data) + } +} + +// Код товара (тег в 54 ФЗ — 1163). Обязательный параметр, +// если одновременно выполняются эти условия: * вы +// используете Чеки от ЮKassa или онлайн-кассу, +// обновленную до ФФД 1.2; * товар нужно маркировать: +// http://docs.cntd.ru/document/902192509. Должно быть заполнено хотя бы +// одно поле. +// Ref: #/components/schemas/MarkCodeInfo +type MarkCodeInfo struct { + // Код товара в том виде, в котором он был прочитан + // сканером (тег в 54 ФЗ — 2000). Нужно передавать, если + // используете онлайн-кассу Orange Data. Пример: + // 010460406000590021N4N57RTCBUZTQ\u001d2403054002410161218\u001d1424010191ffd0\u001g92tIAF/YVpU4roQS3M/m4z78yFq0nc/WsSmLeX6QkF/YVWwy5IMYAeiQ91Xa2m/fFSJcOkb2N+uUUtfr4n0mOX0Q==. + MarkCodeRaw OptString `json:"mark_code_raw"` + // Нераспознанный код товара (тег в 54 ФЗ — 1300). + Unknown OptString `json:"unknown"` + // Код товара в формате EAN-8 (тег в 54 ФЗ — 1301). + Ean8 OptString `json:"ean_8"` + // Код товара в формате EAN-13 (тег в 54 ФЗ — 1302). + Ean13 OptString `json:"ean_13"` + // Код товара в формате ITF-14 (тег в 54 ФЗ — 1303). + Itf14 OptString `json:"itf_14"` + // Код товара в формате GS1.0 (тег в 54 ФЗ — 1304). Можно + // передавать, если используете онлайн-кассу Orange Data, aQsi, + // Кит Инвест, АТОЛ Онлайн. + Gs10 OptString `json:"gs_10"` + // Код товара в формате GS1.M (тег в 54 ФЗ — 1305). + Gs1m OptString `json:"gs_1m"` + // Код товара в формате короткого кода маркировки (тег в + // 54 ФЗ — 1306). + Short OptString `json:"short"` + // Контрольно-идентификационный знак мехового изделия + // (тег в 54 ФЗ — 1307). + Fur OptString `json:"fur"` + // Код товара в формате ЕГАИС-2.0 (тег в 54 ФЗ — 1308). + Egais20 OptString `json:"egais_20"` + // Код товара в формате ЕГАИС-3.0 (тег в 54 ФЗ — 1309). + Egais30 OptString `json:"egais_30"` +} + +// GetMarkCodeRaw returns the value of MarkCodeRaw. +func (s *MarkCodeInfo) GetMarkCodeRaw() OptString { + return s.MarkCodeRaw +} + +// GetUnknown returns the value of Unknown. +func (s *MarkCodeInfo) GetUnknown() OptString { + return s.Unknown +} + +// GetEan8 returns the value of Ean8. +func (s *MarkCodeInfo) GetEan8() OptString { + return s.Ean8 +} + +// GetEan13 returns the value of Ean13. +func (s *MarkCodeInfo) GetEan13() OptString { + return s.Ean13 +} + +// GetItf14 returns the value of Itf14. +func (s *MarkCodeInfo) GetItf14() OptString { + return s.Itf14 +} + +// GetGs10 returns the value of Gs10. +func (s *MarkCodeInfo) GetGs10() OptString { + return s.Gs10 +} + +// GetGs1m returns the value of Gs1m. +func (s *MarkCodeInfo) GetGs1m() OptString { + return s.Gs1m +} + +// GetShort returns the value of Short. +func (s *MarkCodeInfo) GetShort() OptString { + return s.Short +} + +// GetFur returns the value of Fur. +func (s *MarkCodeInfo) GetFur() OptString { + return s.Fur +} + +// GetEgais20 returns the value of Egais20. +func (s *MarkCodeInfo) GetEgais20() OptString { + return s.Egais20 +} + +// GetEgais30 returns the value of Egais30. +func (s *MarkCodeInfo) GetEgais30() OptString { + return s.Egais30 +} + +// SetMarkCodeRaw sets the value of MarkCodeRaw. +func (s *MarkCodeInfo) SetMarkCodeRaw(val OptString) { + s.MarkCodeRaw = val +} + +// SetUnknown sets the value of Unknown. +func (s *MarkCodeInfo) SetUnknown(val OptString) { + s.Unknown = val +} + +// SetEan8 sets the value of Ean8. +func (s *MarkCodeInfo) SetEan8(val OptString) { + s.Ean8 = val +} + +// SetEan13 sets the value of Ean13. +func (s *MarkCodeInfo) SetEan13(val OptString) { + s.Ean13 = val +} + +// SetItf14 sets the value of Itf14. +func (s *MarkCodeInfo) SetItf14(val OptString) { + s.Itf14 = val +} + +// SetGs10 sets the value of Gs10. +func (s *MarkCodeInfo) SetGs10(val OptString) { + s.Gs10 = val +} + +// SetGs1m sets the value of Gs1m. +func (s *MarkCodeInfo) SetGs1m(val OptString) { + s.Gs1m = val +} + +// SetShort sets the value of Short. +func (s *MarkCodeInfo) SetShort(val OptString) { + s.Short = val +} + +// SetFur sets the value of Fur. +func (s *MarkCodeInfo) SetFur(val OptString) { + s.Fur = val +} + +// SetEgais20 sets the value of Egais20. +func (s *MarkCodeInfo) SetEgais20(val OptString) { + s.Egais20 = val +} + +// SetEgais30 sets the value of Egais30. +func (s *MarkCodeInfo) SetEgais30(val OptString) { + s.Egais30 = val +} + +type MarkMode string + +// Дробное количество маркированного товара (тег в 54 ФЗ +// — 1291). Обязательный параметр, если одновременно +// выполняются эти условия: * вы используете Чеки от ЮKassa +// или онлайн-кассу, обновленную до ФФД 1.2; * товар нужно +// маркировать: http://docs.cntd.ru/document/902192509; * поле measure имеет +// значение piece. Пример: вы продаете поштучно карандаши. +// Они поставляются пачками по 100 штук с одним кодом +// маркировки. При продаже одного карандаша нужно в +// numerator передать 1, а в denominator — 100. +// Ref: #/components/schemas/MarkQuantity +type MarkQuantity struct { + // Числитель — количество продаваемых товаров из одной + // потребительской упаковки (тег в 54 ФЗ — 1293). Не может + // превышать denominator. + Numerator int `json:"numerator"` + // Знаменатель — общее количество товаров в + // потребительской упаковке (тег в 54 ФЗ — 1294). + Denominator int `json:"denominator"` +} + +// GetNumerator returns the value of Numerator. +func (s *MarkQuantity) GetNumerator() int { + return s.Numerator +} + +// GetDenominator returns the value of Denominator. +func (s *MarkQuantity) GetDenominator() int { + return s.Denominator +} + +// SetNumerator sets the value of Numerator. +func (s *MarkQuantity) SetNumerator(val int) { + s.Numerator = val +} + +// SetDenominator sets the value of Denominator. +func (s *MarkQuantity) SetDenominator(val int) { + s.Denominator = val +} + +// Store or gateway settings object (Me) contains all the relevant information about the settings of +// a store or gateway. +// Ref: #/components/schemas/Me +type Me struct { + AccountID string `json:"account_id"` + // Статус магазина или шлюза. Возможные значения: * enabled + // — подключен к ЮKassa, может проводить платежи или + // выплаты; * disabled — не может проводить платежи или + // выплаты (еще не подключен, закрыт или временно не + // работает). + Status MeStatus `json:"status"` + // Это тестовый магазин или шлюз. + Test bool `json:"test"` + Fiscalization OptFiscalizationData `json:"fiscalization"` + // Устаревший параметр, который раньше использовался + // для определения настроек отправки чеков в налоговую. + // Сохранен для поддержки обратной совместимости, в + // новых версиях API может быть удален. Используйте + // объект fiscalization, чтобы определить, какие у магазина + // настройки отправки чеков. + FiscalizationEnabled OptBool `json:"fiscalization_enabled"` + // Список способов оплаты: https://yookassa. + // ru/developers/payment-acceptance/getting-started/payment-methods#all, доступных + // магазину. Присутствует, если вы запрашивали + // настройки магазина. + PaymentMethods []PaymentMethodType `json:"payment_methods"` + Itn OptString `json:"itn"` + // Список способов получения выплат, доступных шлюзу. + // Возможные значения: * bank_card — выплаты на банковские + // карты; * yoo_money — выплаты на кошельки ЮMoney; * sbp — выплаты + // через СБП. Присутствует, если вы запрашивали + // настройки шлюза. + PayoutMethods []PayoutMethodType `json:"payout_methods"` + // Название шлюза, которое отображается в личном + // кабинете ЮKassa. Присутствует, если вы запрашивали + // настройки шлюза. + Name OptString `json:"name"` + PayoutBalance OptMePayoutBalance `json:"payout_balance"` +} + +// GetAccountID returns the value of AccountID. +func (s *Me) GetAccountID() string { + return s.AccountID +} + +// GetStatus returns the value of Status. +func (s *Me) GetStatus() MeStatus { + return s.Status +} + +// GetTest returns the value of Test. +func (s *Me) GetTest() bool { + return s.Test +} + +// GetFiscalization returns the value of Fiscalization. +func (s *Me) GetFiscalization() OptFiscalizationData { + return s.Fiscalization +} + +// GetFiscalizationEnabled returns the value of FiscalizationEnabled. +func (s *Me) GetFiscalizationEnabled() OptBool { + return s.FiscalizationEnabled +} + +// GetPaymentMethods returns the value of PaymentMethods. +func (s *Me) GetPaymentMethods() []PaymentMethodType { + return s.PaymentMethods +} + +// GetItn returns the value of Itn. +func (s *Me) GetItn() OptString { + return s.Itn +} + +// GetPayoutMethods returns the value of PayoutMethods. +func (s *Me) GetPayoutMethods() []PayoutMethodType { + return s.PayoutMethods +} + +// GetName returns the value of Name. +func (s *Me) GetName() OptString { + return s.Name +} + +// GetPayoutBalance returns the value of PayoutBalance. +func (s *Me) GetPayoutBalance() OptMePayoutBalance { + return s.PayoutBalance +} + +// SetAccountID sets the value of AccountID. +func (s *Me) SetAccountID(val string) { + s.AccountID = val +} + +// SetStatus sets the value of Status. +func (s *Me) SetStatus(val MeStatus) { + s.Status = val +} + +// SetTest sets the value of Test. +func (s *Me) SetTest(val bool) { + s.Test = val +} + +// SetFiscalization sets the value of Fiscalization. +func (s *Me) SetFiscalization(val OptFiscalizationData) { + s.Fiscalization = val +} + +// SetFiscalizationEnabled sets the value of FiscalizationEnabled. +func (s *Me) SetFiscalizationEnabled(val OptBool) { + s.FiscalizationEnabled = val +} + +// SetPaymentMethods sets the value of PaymentMethods. +func (s *Me) SetPaymentMethods(val []PaymentMethodType) { + s.PaymentMethods = val +} + +// SetItn sets the value of Itn. +func (s *Me) SetItn(val OptString) { + s.Itn = val +} + +// SetPayoutMethods sets the value of PayoutMethods. +func (s *Me) SetPayoutMethods(val []PayoutMethodType) { + s.PayoutMethods = val +} + +// SetName sets the value of Name. +func (s *Me) SetName(val OptString) { + s.Name = val +} + +// SetPayoutBalance sets the value of PayoutBalance. +func (s *Me) SetPayoutBalance(val OptMePayoutBalance) { + s.PayoutBalance = val +} + +func (*Me) meGetRes() {} + +// Сумма в выбранной валюте. +type MePayoutBalance struct { + // Сумма в выбранной валюте. Всегда дробное значение. + // Разделитель дробной части — точка, разделитель тысяч + // отсутствует. Количество знаков после точки зависит + // от выбранной валюты. Пример: 1000.00. + Value string `json:"value"` + Currency CurrencyCode `json:"currency"` +} + +// GetValue returns the value of Value. +func (s *MePayoutBalance) GetValue() string { + return s.Value +} + +// GetCurrency returns the value of Currency. +func (s *MePayoutBalance) GetCurrency() CurrencyCode { + return s.Currency +} + +// SetValue sets the value of Value. +func (s *MePayoutBalance) SetValue(val string) { + s.Value = val +} + +// SetCurrency sets the value of Currency. +func (s *MePayoutBalance) SetCurrency(val CurrencyCode) { + s.Currency = val +} + +// Статус магазина или шлюза. Возможные значения: * enabled +// — подключен к ЮKassa, может проводить платежи или +// выплаты; * disabled — не может проводить платежи или +// выплаты (еще не подключен, закрыт или временно не +// работает). +type MeStatus string + +const ( + MeStatusEnabled MeStatus = "enabled" + MeStatusDisabled MeStatus = "disabled" +) + +// AllValues returns all MeStatus values. +func (MeStatus) AllValues() []MeStatus { + return []MeStatus{ + MeStatusEnabled, + MeStatusDisabled, + } +} + +// MarshalText implements encoding.TextMarshaler. +func (s MeStatus) MarshalText() ([]byte, error) { + switch s { + case MeStatusEnabled: + return []byte(s), nil + case MeStatusDisabled: + return []byte(s), nil + default: + return nil, errors.Errorf("invalid value: %q", s) + } +} + +// UnmarshalText implements encoding.TextUnmarshaler. +func (s *MeStatus) UnmarshalText(data []byte) error { + switch MeStatus(data) { + case MeStatusEnabled: + *s = MeStatusEnabled + return nil + case MeStatusDisabled: + *s = MeStatusDisabled + return nil + default: + return errors.Errorf("invalid value: %q", data) + } +} + +// Любые дополнительные данные, которые нужны вам для +// работы (например, ваш внутренний идентификатор +// заказа). Передаются в виде набора пар «ключ-значение» +// и возвращаются в ответе от ЮKassa. Ограничения: максимум +// 16 ключей, имя ключа не больше 32 символов, значение +// ключа не больше 512 символов, тип данных — строка в +// формате UTF-8. +// Ref: #/components/schemas/Metadata +type Metadata map[string]NilString + +func (s *Metadata) init() Metadata { + m := *s + if m == nil { + m = map[string]NilString{} + *s = m + } + return m +} + +type MetadataInQueryParameter map[string]string + +func (s *MetadataInQueryParameter) init() MetadataInQueryParameter { + m := *s + if m == nil { + m = map[string]string{} + *s = m + } + return m +} + +type MiddleName string + +type NextCursor string + +// NewNilString returns new NilString with value set to v. +func NewNilString(v string) NilString { + return NilString{ + Value: v, + } +} + +// NilString is nullable string. +type NilString struct { + Value string + Null bool +} + +// SetTo sets value to v. +func (o *NilString) SetTo(v string) { + o.Null = false + o.Value = v +} + +// IsNull returns true if value is Null. +func (o NilString) IsNull() bool { return o.Null } + +// SetToNull sets value to null. +func (o *NilString) SetToNull() { + o.Null = true + var v string + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o NilString) Get() (v string, ok bool) { + if o.Null { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o NilString) Or(d string) string { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// Merged schema. +// Ref: #/components/schemas/NotFound +type NotFound struct { + // Тип объекта. + Type OptNotFoundType `json:"type"` + // Идентификатор ошибки. Используйте его, если возникла + // необходимость обратиться в техническую поддержку. + ID OptString `json:"id"` + // Подробное описание ошибки. + Description OptString `json:"description"` + // Название параметра, из-за которого произошла ошибка. + Parameter OptString `json:"parameter"` + // Рекомендуемое количество миллисекунд, спустя + // которое следует повторить запрос. + RetryAfter OptInt `json:"retry_after"` + // Код ошибки. + Code OptNotFoundCode `json:"code"` +} + +// GetType returns the value of Type. +func (s *NotFound) GetType() OptNotFoundType { + return s.Type +} + +// GetID returns the value of ID. +func (s *NotFound) GetID() OptString { + return s.ID +} + +// GetDescription returns the value of Description. +func (s *NotFound) GetDescription() OptString { + return s.Description +} + +// GetParameter returns the value of Parameter. +func (s *NotFound) GetParameter() OptString { + return s.Parameter +} + +// GetRetryAfter returns the value of RetryAfter. +func (s *NotFound) GetRetryAfter() OptInt { + return s.RetryAfter +} + +// GetCode returns the value of Code. +func (s *NotFound) GetCode() OptNotFoundCode { + return s.Code +} + +// SetType sets the value of Type. +func (s *NotFound) SetType(val OptNotFoundType) { + s.Type = val +} + +// SetID sets the value of ID. +func (s *NotFound) SetID(val OptString) { + s.ID = val +} + +// SetDescription sets the value of Description. +func (s *NotFound) SetDescription(val OptString) { + s.Description = val +} + +// SetParameter sets the value of Parameter. +func (s *NotFound) SetParameter(val OptString) { + s.Parameter = val +} + +// SetRetryAfter sets the value of RetryAfter. +func (s *NotFound) SetRetryAfter(val OptInt) { + s.RetryAfter = val +} + +// SetCode sets the value of Code. +func (s *NotFound) SetCode(val OptNotFoundCode) { + s.Code = val +} + +func (*NotFound) dealsDealIDGetRes() {} +func (*NotFound) dealsGetRes() {} +func (*NotFound) paymentMethodsPaymentMethodIDGetRes() {} +func (*NotFound) paymentsPaymentIDGetRes() {} +func (*NotFound) payoutsGetRes() {} +func (*NotFound) payoutsPayoutIDGetRes() {} +func (*NotFound) payoutsSearchGetRes() {} +func (*NotFound) personalDataPersonalDataIDGetRes() {} +func (*NotFound) refundsRefundIDGetRes() {} +func (*NotFound) sbpBanksGetRes() {} + +// Код ошибки. +type NotFoundCode string + +const ( + NotFoundCodeNotFound NotFoundCode = "not_found" +) + +// AllValues returns all NotFoundCode values. +func (NotFoundCode) AllValues() []NotFoundCode { + return []NotFoundCode{ + NotFoundCodeNotFound, + } +} + +// MarshalText implements encoding.TextMarshaler. +func (s NotFoundCode) MarshalText() ([]byte, error) { + switch s { + case NotFoundCodeNotFound: + return []byte(s), nil + default: + return nil, errors.Errorf("invalid value: %q", s) + } +} + +// UnmarshalText implements encoding.TextUnmarshaler. +func (s *NotFoundCode) UnmarshalText(data []byte) error { + switch NotFoundCode(data) { + case NotFoundCodeNotFound: + *s = NotFoundCodeNotFound + return nil + default: + return errors.Errorf("invalid value: %q", data) + } +} + +// Тип объекта. +type NotFoundType string + +const ( + NotFoundTypeError NotFoundType = "error" +) + +// AllValues returns all NotFoundType values. +func (NotFoundType) AllValues() []NotFoundType { + return []NotFoundType{ + NotFoundTypeError, + } +} + +// MarshalText implements encoding.TextMarshaler. +func (s NotFoundType) MarshalText() ([]byte, error) { + switch s { + case NotFoundTypeError: + return []byte(s), nil + default: + return nil, errors.Errorf("invalid value: %q", s) + } +} + +// UnmarshalText implements encoding.TextUnmarshaler. +func (s *NotFoundType) UnmarshalText(data []byte) error { + switch NotFoundType(data) { + case NotFoundTypeError: + *s = NotFoundTypeError + return nil + default: + return errors.Errorf("invalid value: %q", data) + } +} + +type NpdIncomeReceiptId string + +type OAuth2 struct { + Token string + Scopes []string +} + +// GetToken returns the value of Token. +func (s *OAuth2) GetToken() string { + return s.Token +} + +// GetScopes returns the value of Scopes. +func (s *OAuth2) GetScopes() []string { + return s.Scopes +} + +// SetToken sets the value of Token. +func (s *OAuth2) SetToken(val string) { + s.Token = val +} + +// SetScopes sets the value of Scopes. +func (s *OAuth2) SetScopes(val []string) { + s.Scopes = val +} + +type Oktmo string + +// NewOptAccountId returns new OptAccountId with value set to v. +func NewOptAccountId(v AccountId) OptAccountId { + return OptAccountId{ + Value: v, + Set: true, + } +} + +// OptAccountId is optional AccountId. +type OptAccountId struct { + Value AccountId + Set bool +} + +// IsSet returns true if OptAccountId was set. +func (o OptAccountId) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptAccountId) Reset() { + var v AccountId + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptAccountId) SetTo(v AccountId) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptAccountId) Get() (v AccountId, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptAccountId) Or(d AccountId) AccountId { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptAuthorizationDetails returns new OptAuthorizationDetails with value set to v. +func NewOptAuthorizationDetails(v AuthorizationDetails) OptAuthorizationDetails { + return OptAuthorizationDetails{ + Value: v, + Set: true, + } +} + +// OptAuthorizationDetails is optional AuthorizationDetails. +type OptAuthorizationDetails struct { + Value AuthorizationDetails + Set bool +} + +// IsSet returns true if OptAuthorizationDetails was set. +func (o OptAuthorizationDetails) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptAuthorizationDetails) Reset() { + var v AuthorizationDetails + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptAuthorizationDetails) SetTo(v AuthorizationDetails) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptAuthorizationDetails) Get() (v AuthorizationDetails, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptAuthorizationDetails) Or(d AuthorizationDetails) AuthorizationDetails { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptB2bSberbankPayerBankDetails returns new OptB2bSberbankPayerBankDetails with value set to v. +func NewOptB2bSberbankPayerBankDetails(v B2bSberbankPayerBankDetails) OptB2bSberbankPayerBankDetails { + return OptB2bSberbankPayerBankDetails{ + Value: v, + Set: true, + } +} + +// OptB2bSberbankPayerBankDetails is optional B2bSberbankPayerBankDetails. +type OptB2bSberbankPayerBankDetails struct { + Value B2bSberbankPayerBankDetails + Set bool +} + +// IsSet returns true if OptB2bSberbankPayerBankDetails was set. +func (o OptB2bSberbankPayerBankDetails) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptB2bSberbankPayerBankDetails) Reset() { + var v B2bSberbankPayerBankDetails + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptB2bSberbankPayerBankDetails) SetTo(v B2bSberbankPayerBankDetails) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptB2bSberbankPayerBankDetails) Get() (v B2bSberbankPayerBankDetails, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptB2bSberbankPayerBankDetails) Or(d B2bSberbankPayerBankDetails) B2bSberbankPayerBankDetails { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptBadRequestCode returns new OptBadRequestCode with value set to v. +func NewOptBadRequestCode(v BadRequestCode) OptBadRequestCode { + return OptBadRequestCode{ + Value: v, + Set: true, + } +} + +// OptBadRequestCode is optional BadRequestCode. +type OptBadRequestCode struct { + Value BadRequestCode + Set bool +} + +// IsSet returns true if OptBadRequestCode was set. +func (o OptBadRequestCode) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptBadRequestCode) Reset() { + var v BadRequestCode + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptBadRequestCode) SetTo(v BadRequestCode) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptBadRequestCode) Get() (v BadRequestCode, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptBadRequestCode) Or(d BadRequestCode) BadRequestCode { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptBadRequestType returns new OptBadRequestType with value set to v. +func NewOptBadRequestType(v BadRequestType) OptBadRequestType { + return OptBadRequestType{ + Value: v, + Set: true, + } +} + +// OptBadRequestType is optional BadRequestType. +type OptBadRequestType struct { + Value BadRequestType + Set bool +} + +// IsSet returns true if OptBadRequestType was set. +func (o OptBadRequestType) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptBadRequestType) Reset() { + var v BadRequestType + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptBadRequestType) SetTo(v BadRequestType) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptBadRequestType) Get() (v BadRequestType, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptBadRequestType) Or(d BadRequestType) BadRequestType { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptBankCardData returns new OptBankCardData with value set to v. +func NewOptBankCardData(v BankCardData) OptBankCardData { + return OptBankCardData{ + Value: v, + Set: true, + } +} + +// OptBankCardData is optional BankCardData. +type OptBankCardData struct { + Value BankCardData + Set bool +} + +// IsSet returns true if OptBankCardData was set. +func (o OptBankCardData) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptBankCardData) Reset() { + var v BankCardData + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptBankCardData) SetTo(v BankCardData) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptBankCardData) Get() (v BankCardData, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptBankCardData) Or(d BankCardData) BankCardData { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptBankCardDataSource returns new OptBankCardDataSource with value set to v. +func NewOptBankCardDataSource(v BankCardDataSource) OptBankCardDataSource { + return OptBankCardDataSource{ + Value: v, + Set: true, + } +} + +// OptBankCardDataSource is optional BankCardDataSource. +type OptBankCardDataSource struct { + Value BankCardDataSource + Set bool +} + +// IsSet returns true if OptBankCardDataSource was set. +func (o OptBankCardDataSource) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptBankCardDataSource) Reset() { + var v BankCardDataSource + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptBankCardDataSource) SetTo(v BankCardDataSource) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptBankCardDataSource) Get() (v BankCardDataSource, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptBankCardDataSource) Or(d BankCardDataSource) BankCardDataSource { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptBankCardFirst6 returns new OptBankCardFirst6 with value set to v. +func NewOptBankCardFirst6(v BankCardFirst6) OptBankCardFirst6 { + return OptBankCardFirst6{ + Value: v, + Set: true, + } +} + +// OptBankCardFirst6 is optional BankCardFirst6. +type OptBankCardFirst6 struct { + Value BankCardFirst6 + Set bool +} + +// IsSet returns true if OptBankCardFirst6 was set. +func (o OptBankCardFirst6) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptBankCardFirst6) Reset() { + var v BankCardFirst6 + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptBankCardFirst6) SetTo(v BankCardFirst6) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptBankCardFirst6) Get() (v BankCardFirst6, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptBankCardFirst6) Or(d BankCardFirst6) BankCardFirst6 { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptBankCardHolderName returns new OptBankCardHolderName with value set to v. +func NewOptBankCardHolderName(v BankCardHolderName) OptBankCardHolderName { + return OptBankCardHolderName{ + Value: v, + Set: true, + } +} + +// OptBankCardHolderName is optional BankCardHolderName. +type OptBankCardHolderName struct { + Value BankCardHolderName + Set bool +} + +// IsSet returns true if OptBankCardHolderName was set. +func (o OptBankCardHolderName) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptBankCardHolderName) Reset() { + var v BankCardHolderName + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptBankCardHolderName) SetTo(v BankCardHolderName) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptBankCardHolderName) Get() (v BankCardHolderName, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptBankCardHolderName) Or(d BankCardHolderName) BankCardHolderName { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptBankCardIssuerCountry returns new OptBankCardIssuerCountry with value set to v. +func NewOptBankCardIssuerCountry(v BankCardIssuerCountry) OptBankCardIssuerCountry { + return OptBankCardIssuerCountry{ + Value: v, + Set: true, + } +} + +// OptBankCardIssuerCountry is optional BankCardIssuerCountry. +type OptBankCardIssuerCountry struct { + Value BankCardIssuerCountry + Set bool +} + +// IsSet returns true if OptBankCardIssuerCountry was set. +func (o OptBankCardIssuerCountry) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptBankCardIssuerCountry) Reset() { + var v BankCardIssuerCountry + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptBankCardIssuerCountry) SetTo(v BankCardIssuerCountry) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptBankCardIssuerCountry) Get() (v BankCardIssuerCountry, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptBankCardIssuerCountry) Or(d BankCardIssuerCountry) BankCardIssuerCountry { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptBankCardIssuerName returns new OptBankCardIssuerName with value set to v. +func NewOptBankCardIssuerName(v BankCardIssuerName) OptBankCardIssuerName { + return OptBankCardIssuerName{ + Value: v, + Set: true, + } +} + +// OptBankCardIssuerName is optional BankCardIssuerName. +type OptBankCardIssuerName struct { + Value BankCardIssuerName + Set bool +} + +// IsSet returns true if OptBankCardIssuerName was set. +func (o OptBankCardIssuerName) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptBankCardIssuerName) Reset() { + var v BankCardIssuerName + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptBankCardIssuerName) SetTo(v BankCardIssuerName) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptBankCardIssuerName) Get() (v BankCardIssuerName, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptBankCardIssuerName) Or(d BankCardIssuerName) BankCardIssuerName { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptBankCardProduct returns new OptBankCardProduct with value set to v. +func NewOptBankCardProduct(v BankCardProduct) OptBankCardProduct { + return OptBankCardProduct{ + Value: v, + Set: true, + } +} + +// OptBankCardProduct is optional BankCardProduct. +type OptBankCardProduct struct { + Value BankCardProduct + Set bool +} + +// IsSet returns true if OptBankCardProduct was set. +func (o OptBankCardProduct) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptBankCardProduct) Reset() { + var v BankCardProduct + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptBankCardProduct) SetTo(v BankCardProduct) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptBankCardProduct) Get() (v BankCardProduct, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptBankCardProduct) Or(d BankCardProduct) BankCardProduct { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptBool returns new OptBool with value set to v. +func NewOptBool(v bool) OptBool { + return OptBool{ + Value: v, + Set: true, + } +} + +// OptBool is optional bool. +type OptBool struct { + Value bool + Set bool +} + +// IsSet returns true if OptBool was set. +func (o OptBool) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptBool) Reset() { + var v bool + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptBool) SetTo(v bool) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptBool) Get() (v bool, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptBool) Or(d bool) bool { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptCapture returns new OptCapture with value set to v. +func NewOptCapture(v Capture) OptCapture { + return OptCapture{ + Value: v, + Set: true, + } +} + +// OptCapture is optional Capture. +type OptCapture struct { + Value Capture + Set bool +} + +// IsSet returns true if OptCapture was set. +func (o OptCapture) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptCapture) Reset() { + var v Capture + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptCapture) SetTo(v Capture) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptCapture) Get() (v Capture, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptCapture) Or(d Capture) Capture { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptCardRequestData returns new OptCardRequestData with value set to v. +func NewOptCardRequestData(v CardRequestData) OptCardRequestData { + return OptCardRequestData{ + Value: v, + Set: true, + } +} + +// OptCardRequestData is optional CardRequestData. +type OptCardRequestData struct { + Value CardRequestData + Set bool +} + +// IsSet returns true if OptCardRequestData was set. +func (o OptCardRequestData) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptCardRequestData) Reset() { + var v CardRequestData + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptCardRequestData) SetTo(v CardRequestData) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptCardRequestData) Get() (v CardRequestData, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptCardRequestData) Or(d CardRequestData) CardRequestData { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptClientIp returns new OptClientIp with value set to v. +func NewOptClientIp(v ClientIp) OptClientIp { + return OptClientIp{ + Value: v, + Set: true, + } +} + +// OptClientIp is optional ClientIp. +type OptClientIp struct { + Value ClientIp + Set bool +} + +// IsSet returns true if OptClientIp was set. +func (o OptClientIp) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptClientIp) Reset() { + var v ClientIp + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptClientIp) SetTo(v ClientIp) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptClientIp) Get() (v ClientIp, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptClientIp) Or(d ClientIp) ClientIp { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptDateTime returns new OptDateTime with value set to v. +func NewOptDateTime(v time.Time) OptDateTime { + return OptDateTime{ + Value: v, + Set: true, + } +} + +// OptDateTime is optional time.Time. +type OptDateTime struct { + Value time.Time + Set bool +} + +// IsSet returns true if OptDateTime was set. +func (o OptDateTime) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptDateTime) Reset() { + var v time.Time + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptDateTime) SetTo(v time.Time) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptDateTime) Get() (v time.Time, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptDateTime) Or(d time.Time) time.Time { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptDealStatus returns new OptDealStatus with value set to v. +func NewOptDealStatus(v DealStatus) OptDealStatus { + return OptDealStatus{ + Value: v, + Set: true, + } +} + +// OptDealStatus is optional DealStatus. +type OptDealStatus struct { + Value DealStatus + Set bool +} + +// IsSet returns true if OptDealStatus was set. +func (o OptDealStatus) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptDealStatus) Reset() { + var v DealStatus + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptDealStatus) SetTo(v DealStatus) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptDealStatus) Get() (v DealStatus, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptDealStatus) Or(d DealStatus) DealStatus { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptElectronicCertificateArticleCode returns new OptElectronicCertificateArticleCode with value set to v. +func NewOptElectronicCertificateArticleCode(v ElectronicCertificateArticleCode) OptElectronicCertificateArticleCode { + return OptElectronicCertificateArticleCode{ + Value: v, + Set: true, + } +} + +// OptElectronicCertificateArticleCode is optional ElectronicCertificateArticleCode. +type OptElectronicCertificateArticleCode struct { + Value ElectronicCertificateArticleCode + Set bool +} + +// IsSet returns true if OptElectronicCertificateArticleCode was set. +func (o OptElectronicCertificateArticleCode) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptElectronicCertificateArticleCode) Reset() { + var v ElectronicCertificateArticleCode + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptElectronicCertificateArticleCode) SetTo(v ElectronicCertificateArticleCode) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptElectronicCertificateArticleCode) Get() (v ElectronicCertificateArticleCode, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptElectronicCertificateArticleCode) Or(d ElectronicCertificateArticleCode) ElectronicCertificateArticleCode { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptElectronicCertificatePayment returns new OptElectronicCertificatePayment with value set to v. +func NewOptElectronicCertificatePayment(v ElectronicCertificatePayment) OptElectronicCertificatePayment { + return OptElectronicCertificatePayment{ + Value: v, + Set: true, + } +} + +// OptElectronicCertificatePayment is optional ElectronicCertificatePayment. +type OptElectronicCertificatePayment struct { + Value ElectronicCertificatePayment + Set bool +} + +// IsSet returns true if OptElectronicCertificatePayment was set. +func (o OptElectronicCertificatePayment) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptElectronicCertificatePayment) Reset() { + var v ElectronicCertificatePayment + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptElectronicCertificatePayment) SetTo(v ElectronicCertificatePayment) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptElectronicCertificatePayment) Get() (v ElectronicCertificatePayment, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptElectronicCertificatePayment) Or(d ElectronicCertificatePayment) ElectronicCertificatePayment { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptElectronicCertificatePaymentData returns new OptElectronicCertificatePaymentData with value set to v. +func NewOptElectronicCertificatePaymentData(v ElectronicCertificatePaymentData) OptElectronicCertificatePaymentData { + return OptElectronicCertificatePaymentData{ + Value: v, + Set: true, + } +} + +// OptElectronicCertificatePaymentData is optional ElectronicCertificatePaymentData. +type OptElectronicCertificatePaymentData struct { + Value ElectronicCertificatePaymentData + Set bool +} + +// IsSet returns true if OptElectronicCertificatePaymentData was set. +func (o OptElectronicCertificatePaymentData) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptElectronicCertificatePaymentData) Reset() { + var v ElectronicCertificatePaymentData + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptElectronicCertificatePaymentData) SetTo(v ElectronicCertificatePaymentData) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptElectronicCertificatePaymentData) Get() (v ElectronicCertificatePaymentData, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptElectronicCertificatePaymentData) Or(d ElectronicCertificatePaymentData) ElectronicCertificatePaymentData { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptElectronicCertificateRefundDataRequest returns new OptElectronicCertificateRefundDataRequest with value set to v. +func NewOptElectronicCertificateRefundDataRequest(v ElectronicCertificateRefundDataRequest) OptElectronicCertificateRefundDataRequest { + return OptElectronicCertificateRefundDataRequest{ + Value: v, + Set: true, + } +} + +// OptElectronicCertificateRefundDataRequest is optional ElectronicCertificateRefundDataRequest. +type OptElectronicCertificateRefundDataRequest struct { + Value ElectronicCertificateRefundDataRequest + Set bool +} + +// IsSet returns true if OptElectronicCertificateRefundDataRequest was set. +func (o OptElectronicCertificateRefundDataRequest) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptElectronicCertificateRefundDataRequest) Reset() { + var v ElectronicCertificateRefundDataRequest + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptElectronicCertificateRefundDataRequest) SetTo(v ElectronicCertificateRefundDataRequest) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptElectronicCertificateRefundDataRequest) Get() (v ElectronicCertificateRefundDataRequest, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptElectronicCertificateRefundDataRequest) Or(d ElectronicCertificateRefundDataRequest) ElectronicCertificateRefundDataRequest { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptElectronicCertificateRefundDataResponse returns new OptElectronicCertificateRefundDataResponse with value set to v. +func NewOptElectronicCertificateRefundDataResponse(v ElectronicCertificateRefundDataResponse) OptElectronicCertificateRefundDataResponse { + return OptElectronicCertificateRefundDataResponse{ + Value: v, + Set: true, + } +} + +// OptElectronicCertificateRefundDataResponse is optional ElectronicCertificateRefundDataResponse. +type OptElectronicCertificateRefundDataResponse struct { + Value ElectronicCertificateRefundDataResponse + Set bool +} + +// IsSet returns true if OptElectronicCertificateRefundDataResponse was set. +func (o OptElectronicCertificateRefundDataResponse) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptElectronicCertificateRefundDataResponse) Reset() { + var v ElectronicCertificateRefundDataResponse + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptElectronicCertificateRefundDataResponse) SetTo(v ElectronicCertificateRefundDataResponse) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptElectronicCertificateRefundDataResponse) Get() (v ElectronicCertificateRefundDataResponse, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptElectronicCertificateRefundDataResponse) Or(d ElectronicCertificateRefundDataResponse) ElectronicCertificateRefundDataResponse { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptEnforce returns new OptEnforce with value set to v. +func NewOptEnforce(v Enforce) OptEnforce { + return OptEnforce{ + Value: v, + Set: true, + } +} + +// OptEnforce is optional Enforce. +type OptEnforce struct { + Value Enforce + Set bool +} + +// IsSet returns true if OptEnforce was set. +func (o OptEnforce) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptEnforce) Reset() { + var v Enforce + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptEnforce) SetTo(v Enforce) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptEnforce) Get() (v Enforce, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptEnforce) Or(d Enforce) Enforce { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptFiscalizationData returns new OptFiscalizationData with value set to v. +func NewOptFiscalizationData(v FiscalizationData) OptFiscalizationData { + return OptFiscalizationData{ + Value: v, + Set: true, + } +} + +// OptFiscalizationData is optional FiscalizationData. +type OptFiscalizationData struct { + Value FiscalizationData + Set bool +} + +// IsSet returns true if OptFiscalizationData was set. +func (o OptFiscalizationData) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptFiscalizationData) Reset() { + var v FiscalizationData + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptFiscalizationData) SetTo(v FiscalizationData) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptFiscalizationData) Get() (v FiscalizationData, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptFiscalizationData) Or(d FiscalizationData) FiscalizationData { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptForbiddenCode returns new OptForbiddenCode with value set to v. +func NewOptForbiddenCode(v ForbiddenCode) OptForbiddenCode { + return OptForbiddenCode{ + Value: v, + Set: true, + } +} + +// OptForbiddenCode is optional ForbiddenCode. +type OptForbiddenCode struct { + Value ForbiddenCode + Set bool +} + +// IsSet returns true if OptForbiddenCode was set. +func (o OptForbiddenCode) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptForbiddenCode) Reset() { + var v ForbiddenCode + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptForbiddenCode) SetTo(v ForbiddenCode) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptForbiddenCode) Get() (v ForbiddenCode, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptForbiddenCode) Or(d ForbiddenCode) ForbiddenCode { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptForbiddenType returns new OptForbiddenType with value set to v. +func NewOptForbiddenType(v ForbiddenType) OptForbiddenType { + return OptForbiddenType{ + Value: v, + Set: true, + } +} + +// OptForbiddenType is optional ForbiddenType. +type OptForbiddenType struct { + Value ForbiddenType + Set bool +} + +// IsSet returns true if OptForbiddenType was set. +func (o OptForbiddenType) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptForbiddenType) Reset() { + var v ForbiddenType + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptForbiddenType) SetTo(v ForbiddenType) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptForbiddenType) Get() (v ForbiddenType, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptForbiddenType) Or(d ForbiddenType) ForbiddenType { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptGatewayId returns new OptGatewayId with value set to v. +func NewOptGatewayId(v GatewayId) OptGatewayId { + return OptGatewayId{ + Value: v, + Set: true, + } +} + +// OptGatewayId is optional GatewayId. +type OptGatewayId struct { + Value GatewayId + Set bool +} + +// IsSet returns true if OptGatewayId was set. +func (o OptGatewayId) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptGatewayId) Reset() { + var v GatewayId + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptGatewayId) SetTo(v GatewayId) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptGatewayId) Get() (v GatewayId, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptGatewayId) Or(d GatewayId) GatewayId { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptIncomeReceipt returns new OptIncomeReceipt with value set to v. +func NewOptIncomeReceipt(v IncomeReceipt) OptIncomeReceipt { + return OptIncomeReceipt{ + Value: v, + Set: true, + } +} + +// OptIncomeReceipt is optional IncomeReceipt. +type OptIncomeReceipt struct { + Value IncomeReceipt + Set bool +} + +// IsSet returns true if OptIncomeReceipt was set. +func (o OptIncomeReceipt) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptIncomeReceipt) Reset() { + var v IncomeReceipt + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptIncomeReceipt) SetTo(v IncomeReceipt) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptIncomeReceipt) Get() (v IncomeReceipt, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptIncomeReceipt) Or(d IncomeReceipt) IncomeReceipt { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptIncomeReceiptAmount returns new OptIncomeReceiptAmount with value set to v. +func NewOptIncomeReceiptAmount(v IncomeReceiptAmount) OptIncomeReceiptAmount { + return OptIncomeReceiptAmount{ + Value: v, + Set: true, + } +} + +// OptIncomeReceiptAmount is optional IncomeReceiptAmount. +type OptIncomeReceiptAmount struct { + Value IncomeReceiptAmount + Set bool +} + +// IsSet returns true if OptIncomeReceiptAmount was set. +func (o OptIncomeReceiptAmount) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptIncomeReceiptAmount) Reset() { + var v IncomeReceiptAmount + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptIncomeReceiptAmount) SetTo(v IncomeReceiptAmount) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptIncomeReceiptAmount) Get() (v IncomeReceiptAmount, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptIncomeReceiptAmount) Or(d IncomeReceiptAmount) IncomeReceiptAmount { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptIncomeReceiptUrl returns new OptIncomeReceiptUrl with value set to v. +func NewOptIncomeReceiptUrl(v IncomeReceiptUrl) OptIncomeReceiptUrl { + return OptIncomeReceiptUrl{ + Value: v, + Set: true, + } +} + +// OptIncomeReceiptUrl is optional IncomeReceiptUrl. +type OptIncomeReceiptUrl struct { + Value IncomeReceiptUrl + Set bool +} + +// IsSet returns true if OptIncomeReceiptUrl was set. +func (o OptIncomeReceiptUrl) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptIncomeReceiptUrl) Reset() { + var v IncomeReceiptUrl + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptIncomeReceiptUrl) SetTo(v IncomeReceiptUrl) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptIncomeReceiptUrl) Get() (v IncomeReceiptUrl, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptIncomeReceiptUrl) Or(d IncomeReceiptUrl) IncomeReceiptUrl { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptInt returns new OptInt with value set to v. +func NewOptInt(v int) OptInt { + return OptInt{ + Value: v, + Set: true, + } +} + +// OptInt is optional int. +type OptInt struct { + Value int + Set bool +} + +// IsSet returns true if OptInt was set. +func (o OptInt) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptInt) Reset() { + var v int + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptInt) SetTo(v int) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptInt) Get() (v int, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptInt) Or(d int) int { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptInt32 returns new OptInt32 with value set to v. +func NewOptInt32(v int32) OptInt32 { + return OptInt32{ + Value: v, + Set: true, + } +} + +// OptInt32 is optional int32. +type OptInt32 struct { + Value int32 + Set bool +} + +// IsSet returns true if OptInt32 was set. +func (o OptInt32) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptInt32) Reset() { + var v int32 + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptInt32) SetTo(v int32) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptInt32) Get() (v int32, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptInt32) Or(d int32) int32 { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptInvalidCredentialsCode returns new OptInvalidCredentialsCode with value set to v. +func NewOptInvalidCredentialsCode(v InvalidCredentialsCode) OptInvalidCredentialsCode { + return OptInvalidCredentialsCode{ + Value: v, + Set: true, + } +} + +// OptInvalidCredentialsCode is optional InvalidCredentialsCode. +type OptInvalidCredentialsCode struct { + Value InvalidCredentialsCode + Set bool +} + +// IsSet returns true if OptInvalidCredentialsCode was set. +func (o OptInvalidCredentialsCode) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptInvalidCredentialsCode) Reset() { + var v InvalidCredentialsCode + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptInvalidCredentialsCode) SetTo(v InvalidCredentialsCode) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptInvalidCredentialsCode) Get() (v InvalidCredentialsCode, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptInvalidCredentialsCode) Or(d InvalidCredentialsCode) InvalidCredentialsCode { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptInvalidCredentialsType returns new OptInvalidCredentialsType with value set to v. +func NewOptInvalidCredentialsType(v InvalidCredentialsType) OptInvalidCredentialsType { + return OptInvalidCredentialsType{ + Value: v, + Set: true, + } +} + +// OptInvalidCredentialsType is optional InvalidCredentialsType. +type OptInvalidCredentialsType struct { + Value InvalidCredentialsType + Set bool +} + +// IsSet returns true if OptInvalidCredentialsType was set. +func (o OptInvalidCredentialsType) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptInvalidCredentialsType) Reset() { + var v InvalidCredentialsType + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptInvalidCredentialsType) SetTo(v InvalidCredentialsType) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptInvalidCredentialsType) Get() (v InvalidCredentialsType, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptInvalidCredentialsType) Or(d InvalidCredentialsType) InvalidCredentialsType { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptInvoiceId returns new OptInvoiceId with value set to v. +func NewOptInvoiceId(v InvoiceId) OptInvoiceId { + return OptInvoiceId{ + Value: v, + Set: true, + } +} + +// OptInvoiceId is optional InvoiceId. +type OptInvoiceId struct { + Value InvoiceId + Set bool +} + +// IsSet returns true if OptInvoiceId was set. +func (o OptInvoiceId) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptInvoiceId) Reset() { + var v InvoiceId + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptInvoiceId) SetTo(v InvoiceId) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptInvoiceId) Get() (v InvoiceId, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptInvoiceId) Or(d InvoiceId) InvoiceId { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptInvoicingBankCardData returns new OptInvoicingBankCardData with value set to v. +func NewOptInvoicingBankCardData(v InvoicingBankCardData) OptInvoicingBankCardData { + return OptInvoicingBankCardData{ + Value: v, + Set: true, + } +} + +// OptInvoicingBankCardData is optional InvoicingBankCardData. +type OptInvoicingBankCardData struct { + Value InvoicingBankCardData + Set bool +} + +// IsSet returns true if OptInvoicingBankCardData was set. +func (o OptInvoicingBankCardData) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptInvoicingBankCardData) Reset() { + var v InvoicingBankCardData + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptInvoicingBankCardData) SetTo(v InvoicingBankCardData) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptInvoicingBankCardData) Get() (v InvoicingBankCardData, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptInvoicingBankCardData) Or(d InvoicingBankCardData) InvoicingBankCardData { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptKbk returns new OptKbk with value set to v. +func NewOptKbk(v Kbk) OptKbk { + return OptKbk{ + Value: v, + Set: true, + } +} + +// OptKbk is optional Kbk. +type OptKbk struct { + Value Kbk + Set bool +} + +// IsSet returns true if OptKbk was set. +func (o OptKbk) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptKbk) Reset() { + var v Kbk + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptKbk) SetTo(v Kbk) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptKbk) Get() (v Kbk, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptKbk) Or(d Kbk) Kbk { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptLocale returns new OptLocale with value set to v. +func NewOptLocale(v Locale) OptLocale { + return OptLocale{ + Value: v, + Set: true, + } +} + +// OptLocale is optional Locale. +type OptLocale struct { + Value Locale + Set bool +} + +// IsSet returns true if OptLocale was set. +func (o OptLocale) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptLocale) Reset() { + var v Locale + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptLocale) SetTo(v Locale) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptLocale) Get() (v Locale, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptLocale) Or(d Locale) Locale { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptMarkCodeInfo returns new OptMarkCodeInfo with value set to v. +func NewOptMarkCodeInfo(v MarkCodeInfo) OptMarkCodeInfo { + return OptMarkCodeInfo{ + Value: v, + Set: true, + } +} + +// OptMarkCodeInfo is optional MarkCodeInfo. +type OptMarkCodeInfo struct { + Value MarkCodeInfo + Set bool +} + +// IsSet returns true if OptMarkCodeInfo was set. +func (o OptMarkCodeInfo) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptMarkCodeInfo) Reset() { + var v MarkCodeInfo + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptMarkCodeInfo) SetTo(v MarkCodeInfo) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptMarkCodeInfo) Get() (v MarkCodeInfo, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptMarkCodeInfo) Or(d MarkCodeInfo) MarkCodeInfo { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptMarkMode returns new OptMarkMode with value set to v. +func NewOptMarkMode(v MarkMode) OptMarkMode { + return OptMarkMode{ + Value: v, + Set: true, + } +} + +// OptMarkMode is optional MarkMode. +type OptMarkMode struct { + Value MarkMode + Set bool +} + +// IsSet returns true if OptMarkMode was set. +func (o OptMarkMode) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptMarkMode) Reset() { + var v MarkMode + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptMarkMode) SetTo(v MarkMode) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptMarkMode) Get() (v MarkMode, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptMarkMode) Or(d MarkMode) MarkMode { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptMarkQuantity returns new OptMarkQuantity with value set to v. +func NewOptMarkQuantity(v MarkQuantity) OptMarkQuantity { + return OptMarkQuantity{ + Value: v, + Set: true, + } +} + +// OptMarkQuantity is optional MarkQuantity. +type OptMarkQuantity struct { + Value MarkQuantity + Set bool +} + +// IsSet returns true if OptMarkQuantity was set. +func (o OptMarkQuantity) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptMarkQuantity) Reset() { + var v MarkQuantity + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptMarkQuantity) SetTo(v MarkQuantity) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptMarkQuantity) Get() (v MarkQuantity, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptMarkQuantity) Or(d MarkQuantity) MarkQuantity { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptMePayoutBalance returns new OptMePayoutBalance with value set to v. +func NewOptMePayoutBalance(v MePayoutBalance) OptMePayoutBalance { + return OptMePayoutBalance{ + Value: v, + Set: true, + } +} + +// OptMePayoutBalance is optional MePayoutBalance. +type OptMePayoutBalance struct { + Value MePayoutBalance + Set bool +} + +// IsSet returns true if OptMePayoutBalance was set. +func (o OptMePayoutBalance) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptMePayoutBalance) Reset() { + var v MePayoutBalance + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptMePayoutBalance) SetTo(v MePayoutBalance) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptMePayoutBalance) Get() (v MePayoutBalance, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptMePayoutBalance) Or(d MePayoutBalance) MePayoutBalance { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptMetadata returns new OptMetadata with value set to v. +func NewOptMetadata(v Metadata) OptMetadata { + return OptMetadata{ + Value: v, + Set: true, + } +} + +// OptMetadata is optional Metadata. +type OptMetadata struct { + Value Metadata + Set bool +} + +// IsSet returns true if OptMetadata was set. +func (o OptMetadata) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptMetadata) Reset() { + var v Metadata + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptMetadata) SetTo(v Metadata) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptMetadata) Get() (v Metadata, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptMetadata) Or(d Metadata) Metadata { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptMetadataInQueryParameter returns new OptMetadataInQueryParameter with value set to v. +func NewOptMetadataInQueryParameter(v MetadataInQueryParameter) OptMetadataInQueryParameter { + return OptMetadataInQueryParameter{ + Value: v, + Set: true, + } +} + +// OptMetadataInQueryParameter is optional MetadataInQueryParameter. +type OptMetadataInQueryParameter struct { + Value MetadataInQueryParameter + Set bool +} + +// IsSet returns true if OptMetadataInQueryParameter was set. +func (o OptMetadataInQueryParameter) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptMetadataInQueryParameter) Reset() { + var v MetadataInQueryParameter + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptMetadataInQueryParameter) SetTo(v MetadataInQueryParameter) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptMetadataInQueryParameter) Get() (v MetadataInQueryParameter, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptMetadataInQueryParameter) Or(d MetadataInQueryParameter) MetadataInQueryParameter { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptMiddleName returns new OptMiddleName with value set to v. +func NewOptMiddleName(v MiddleName) OptMiddleName { + return OptMiddleName{ + Value: v, + Set: true, + } +} + +// OptMiddleName is optional MiddleName. +type OptMiddleName struct { + Value MiddleName + Set bool +} + +// IsSet returns true if OptMiddleName was set. +func (o OptMiddleName) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptMiddleName) Reset() { + var v MiddleName + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptMiddleName) SetTo(v MiddleName) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptMiddleName) Get() (v MiddleName, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptMiddleName) Or(d MiddleName) MiddleName { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptNextCursor returns new OptNextCursor with value set to v. +func NewOptNextCursor(v NextCursor) OptNextCursor { + return OptNextCursor{ + Value: v, + Set: true, + } +} + +// OptNextCursor is optional NextCursor. +type OptNextCursor struct { + Value NextCursor + Set bool +} + +// IsSet returns true if OptNextCursor was set. +func (o OptNextCursor) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptNextCursor) Reset() { + var v NextCursor + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptNextCursor) SetTo(v NextCursor) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptNextCursor) Get() (v NextCursor, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptNextCursor) Or(d NextCursor) NextCursor { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptNotFoundCode returns new OptNotFoundCode with value set to v. +func NewOptNotFoundCode(v NotFoundCode) OptNotFoundCode { + return OptNotFoundCode{ + Value: v, + Set: true, + } +} + +// OptNotFoundCode is optional NotFoundCode. +type OptNotFoundCode struct { + Value NotFoundCode + Set bool +} + +// IsSet returns true if OptNotFoundCode was set. +func (o OptNotFoundCode) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptNotFoundCode) Reset() { + var v NotFoundCode + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptNotFoundCode) SetTo(v NotFoundCode) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptNotFoundCode) Get() (v NotFoundCode, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptNotFoundCode) Or(d NotFoundCode) NotFoundCode { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptNotFoundType returns new OptNotFoundType with value set to v. +func NewOptNotFoundType(v NotFoundType) OptNotFoundType { + return OptNotFoundType{ + Value: v, + Set: true, + } +} + +// OptNotFoundType is optional NotFoundType. +type OptNotFoundType struct { + Value NotFoundType + Set bool +} + +// IsSet returns true if OptNotFoundType was set. +func (o OptNotFoundType) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptNotFoundType) Reset() { + var v NotFoundType + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptNotFoundType) SetTo(v NotFoundType) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptNotFoundType) Get() (v NotFoundType, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptNotFoundType) Or(d NotFoundType) NotFoundType { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptNpdIncomeReceiptId returns new OptNpdIncomeReceiptId with value set to v. +func NewOptNpdIncomeReceiptId(v NpdIncomeReceiptId) OptNpdIncomeReceiptId { + return OptNpdIncomeReceiptId{ + Value: v, + Set: true, + } +} + +// OptNpdIncomeReceiptId is optional NpdIncomeReceiptId. +type OptNpdIncomeReceiptId struct { + Value NpdIncomeReceiptId + Set bool +} + +// IsSet returns true if OptNpdIncomeReceiptId was set. +func (o OptNpdIncomeReceiptId) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptNpdIncomeReceiptId) Reset() { + var v NpdIncomeReceiptId + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptNpdIncomeReceiptId) SetTo(v NpdIncomeReceiptId) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptNpdIncomeReceiptId) Get() (v NpdIncomeReceiptId, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptNpdIncomeReceiptId) Or(d NpdIncomeReceiptId) NpdIncomeReceiptId { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptOktmo returns new OptOktmo with value set to v. +func NewOptOktmo(v Oktmo) OptOktmo { + return OptOktmo{ + Value: v, + Set: true, + } +} + +// OptOktmo is optional Oktmo. +type OptOktmo struct { + Value Oktmo + Set bool +} + +// IsSet returns true if OptOktmo was set. +func (o OptOktmo) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptOktmo) Reset() { + var v Oktmo + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptOktmo) SetTo(v Oktmo) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptOktmo) Get() (v Oktmo, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptOktmo) Or(d Oktmo) Oktmo { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptPaymentCancellationDetails returns new OptPaymentCancellationDetails with value set to v. +func NewOptPaymentCancellationDetails(v PaymentCancellationDetails) OptPaymentCancellationDetails { + return OptPaymentCancellationDetails{ + Value: v, + Set: true, + } +} + +// OptPaymentCancellationDetails is optional PaymentCancellationDetails. +type OptPaymentCancellationDetails struct { + Value PaymentCancellationDetails + Set bool +} + +// IsSet returns true if OptPaymentCancellationDetails was set. +func (o OptPaymentCancellationDetails) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptPaymentCancellationDetails) Reset() { + var v PaymentCancellationDetails + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptPaymentCancellationDetails) SetTo(v PaymentCancellationDetails) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptPaymentCancellationDetails) Get() (v PaymentCancellationDetails, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptPaymentCancellationDetails) Or(d PaymentCancellationDetails) PaymentCancellationDetails { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptPaymentConfirmation returns new OptPaymentConfirmation with value set to v. +func NewOptPaymentConfirmation(v PaymentConfirmation) OptPaymentConfirmation { + return OptPaymentConfirmation{ + Value: v, + Set: true, + } +} + +// OptPaymentConfirmation is optional PaymentConfirmation. +type OptPaymentConfirmation struct { + Value PaymentConfirmation + Set bool +} + +// IsSet returns true if OptPaymentConfirmation was set. +func (o OptPaymentConfirmation) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptPaymentConfirmation) Reset() { + var v PaymentConfirmation + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptPaymentConfirmation) SetTo(v PaymentConfirmation) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptPaymentConfirmation) Get() (v PaymentConfirmation, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptPaymentConfirmation) Or(d PaymentConfirmation) PaymentConfirmation { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptPaymentDeal returns new OptPaymentDeal with value set to v. +func NewOptPaymentDeal(v PaymentDeal) OptPaymentDeal { + return OptPaymentDeal{ + Value: v, + Set: true, + } +} + +// OptPaymentDeal is optional PaymentDeal. +type OptPaymentDeal struct { + Value PaymentDeal + Set bool +} + +// IsSet returns true if OptPaymentDeal was set. +func (o OptPaymentDeal) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptPaymentDeal) Reset() { + var v PaymentDeal + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptPaymentDeal) SetTo(v PaymentDeal) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptPaymentDeal) Get() (v PaymentDeal, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptPaymentDeal) Or(d PaymentDeal) PaymentDeal { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptPaymentId returns new OptPaymentId with value set to v. +func NewOptPaymentId(v PaymentId) OptPaymentId { + return OptPaymentId{ + Value: v, + Set: true, + } +} + +// OptPaymentId is optional PaymentId. +type OptPaymentId struct { + Value PaymentId + Set bool +} + +// IsSet returns true if OptPaymentId was set. +func (o OptPaymentId) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptPaymentId) Reset() { + var v PaymentId + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptPaymentId) SetTo(v PaymentId) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptPaymentId) Get() (v PaymentId, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptPaymentId) Or(d PaymentId) PaymentId { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptPaymentIncomeAmount returns new OptPaymentIncomeAmount with value set to v. +func NewOptPaymentIncomeAmount(v PaymentIncomeAmount) OptPaymentIncomeAmount { + return OptPaymentIncomeAmount{ + Value: v, + Set: true, + } +} + +// OptPaymentIncomeAmount is optional PaymentIncomeAmount. +type OptPaymentIncomeAmount struct { + Value PaymentIncomeAmount + Set bool +} + +// IsSet returns true if OptPaymentIncomeAmount was set. +func (o OptPaymentIncomeAmount) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptPaymentIncomeAmount) Reset() { + var v PaymentIncomeAmount + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptPaymentIncomeAmount) SetTo(v PaymentIncomeAmount) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptPaymentIncomeAmount) Get() (v PaymentIncomeAmount, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptPaymentIncomeAmount) Or(d PaymentIncomeAmount) PaymentIncomeAmount { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptPaymentInvoiceDetails returns new OptPaymentInvoiceDetails with value set to v. +func NewOptPaymentInvoiceDetails(v PaymentInvoiceDetails) OptPaymentInvoiceDetails { + return OptPaymentInvoiceDetails{ + Value: v, + Set: true, + } +} + +// OptPaymentInvoiceDetails is optional PaymentInvoiceDetails. +type OptPaymentInvoiceDetails struct { + Value PaymentInvoiceDetails + Set bool +} + +// IsSet returns true if OptPaymentInvoiceDetails was set. +func (o OptPaymentInvoiceDetails) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptPaymentInvoiceDetails) Reset() { + var v PaymentInvoiceDetails + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptPaymentInvoiceDetails) SetTo(v PaymentInvoiceDetails) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptPaymentInvoiceDetails) Get() (v PaymentInvoiceDetails, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptPaymentInvoiceDetails) Or(d PaymentInvoiceDetails) PaymentInvoiceDetails { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptPaymentMethodElectronicCertificateCard returns new OptPaymentMethodElectronicCertificateCard with value set to v. +func NewOptPaymentMethodElectronicCertificateCard(v PaymentMethodElectronicCertificateCard) OptPaymentMethodElectronicCertificateCard { + return OptPaymentMethodElectronicCertificateCard{ + Value: v, + Set: true, + } +} + +// OptPaymentMethodElectronicCertificateCard is optional PaymentMethodElectronicCertificateCard. +type OptPaymentMethodElectronicCertificateCard struct { + Value PaymentMethodElectronicCertificateCard + Set bool +} + +// IsSet returns true if OptPaymentMethodElectronicCertificateCard was set. +func (o OptPaymentMethodElectronicCertificateCard) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptPaymentMethodElectronicCertificateCard) Reset() { + var v PaymentMethodElectronicCertificateCard + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptPaymentMethodElectronicCertificateCard) SetTo(v PaymentMethodElectronicCertificateCard) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptPaymentMethodElectronicCertificateCard) Get() (v PaymentMethodElectronicCertificateCard, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptPaymentMethodElectronicCertificateCard) Or(d PaymentMethodElectronicCertificateCard) PaymentMethodElectronicCertificateCard { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptPaymentMethodId returns new OptPaymentMethodId with value set to v. +func NewOptPaymentMethodId(v PaymentMethodId) OptPaymentMethodId { + return OptPaymentMethodId{ + Value: v, + Set: true, + } +} + +// OptPaymentMethodId is optional PaymentMethodId. +type OptPaymentMethodId struct { + Value PaymentMethodId + Set bool +} + +// IsSet returns true if OptPaymentMethodId was set. +func (o OptPaymentMethodId) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptPaymentMethodId) Reset() { + var v PaymentMethodId + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptPaymentMethodId) SetTo(v PaymentMethodId) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptPaymentMethodId) Get() (v PaymentMethodId, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptPaymentMethodId) Or(d PaymentMethodId) PaymentMethodId { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptPaymentMethodSberLoanDiscountAmount returns new OptPaymentMethodSberLoanDiscountAmount with value set to v. +func NewOptPaymentMethodSberLoanDiscountAmount(v PaymentMethodSberLoanDiscountAmount) OptPaymentMethodSberLoanDiscountAmount { + return OptPaymentMethodSberLoanDiscountAmount{ + Value: v, + Set: true, + } +} + +// OptPaymentMethodSberLoanDiscountAmount is optional PaymentMethodSberLoanDiscountAmount. +type OptPaymentMethodSberLoanDiscountAmount struct { + Value PaymentMethodSberLoanDiscountAmount + Set bool +} + +// IsSet returns true if OptPaymentMethodSberLoanDiscountAmount was set. +func (o OptPaymentMethodSberLoanDiscountAmount) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptPaymentMethodSberLoanDiscountAmount) Reset() { + var v PaymentMethodSberLoanDiscountAmount + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptPaymentMethodSberLoanDiscountAmount) SetTo(v PaymentMethodSberLoanDiscountAmount) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptPaymentMethodSberLoanDiscountAmount) Get() (v PaymentMethodSberLoanDiscountAmount, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptPaymentMethodSberLoanDiscountAmount) Or(d PaymentMethodSberLoanDiscountAmount) PaymentMethodSberLoanDiscountAmount { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptPaymentMethodTitle returns new OptPaymentMethodTitle with value set to v. +func NewOptPaymentMethodTitle(v PaymentMethodTitle) OptPaymentMethodTitle { + return OptPaymentMethodTitle{ + Value: v, + Set: true, + } +} + +// OptPaymentMethodTitle is optional PaymentMethodTitle. +type OptPaymentMethodTitle struct { + Value PaymentMethodTitle + Set bool +} + +// IsSet returns true if OptPaymentMethodTitle was set. +func (o OptPaymentMethodTitle) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptPaymentMethodTitle) Reset() { + var v PaymentMethodTitle + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptPaymentMethodTitle) SetTo(v PaymentMethodTitle) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptPaymentMethodTitle) Get() (v PaymentMethodTitle, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptPaymentMethodTitle) Or(d PaymentMethodTitle) PaymentMethodTitle { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptPaymentMethodType returns new OptPaymentMethodType with value set to v. +func NewOptPaymentMethodType(v PaymentMethodType) OptPaymentMethodType { + return OptPaymentMethodType{ + Value: v, + Set: true, + } +} + +// OptPaymentMethodType is optional PaymentMethodType. +type OptPaymentMethodType struct { + Value PaymentMethodType + Set bool +} + +// IsSet returns true if OptPaymentMethodType was set. +func (o OptPaymentMethodType) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptPaymentMethodType) Reset() { + var v PaymentMethodType + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptPaymentMethodType) SetTo(v PaymentMethodType) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptPaymentMethodType) Get() (v PaymentMethodType, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptPaymentMethodType) Or(d PaymentMethodType) PaymentMethodType { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptPaymentMethodsConfirmationDataRedirect returns new OptPaymentMethodsConfirmationDataRedirect with value set to v. +func NewOptPaymentMethodsConfirmationDataRedirect(v PaymentMethodsConfirmationDataRedirect) OptPaymentMethodsConfirmationDataRedirect { + return OptPaymentMethodsConfirmationDataRedirect{ + Value: v, + Set: true, + } +} + +// OptPaymentMethodsConfirmationDataRedirect is optional PaymentMethodsConfirmationDataRedirect. +type OptPaymentMethodsConfirmationDataRedirect struct { + Value PaymentMethodsConfirmationDataRedirect + Set bool +} + +// IsSet returns true if OptPaymentMethodsConfirmationDataRedirect was set. +func (o OptPaymentMethodsConfirmationDataRedirect) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptPaymentMethodsConfirmationDataRedirect) Reset() { + var v PaymentMethodsConfirmationDataRedirect + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptPaymentMethodsConfirmationDataRedirect) SetTo(v PaymentMethodsConfirmationDataRedirect) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptPaymentMethodsConfirmationDataRedirect) Get() (v PaymentMethodsConfirmationDataRedirect, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptPaymentMethodsConfirmationDataRedirect) Or(d PaymentMethodsConfirmationDataRedirect) PaymentMethodsConfirmationDataRedirect { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptPaymentPaymentMethod returns new OptPaymentPaymentMethod with value set to v. +func NewOptPaymentPaymentMethod(v PaymentPaymentMethod) OptPaymentPaymentMethod { + return OptPaymentPaymentMethod{ + Value: v, + Set: true, + } +} + +// OptPaymentPaymentMethod is optional PaymentPaymentMethod. +type OptPaymentPaymentMethod struct { + Value PaymentPaymentMethod + Set bool +} + +// IsSet returns true if OptPaymentPaymentMethod was set. +func (o OptPaymentPaymentMethod) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptPaymentPaymentMethod) Reset() { + var v PaymentPaymentMethod + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptPaymentPaymentMethod) SetTo(v PaymentPaymentMethod) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptPaymentPaymentMethod) Get() (v PaymentPaymentMethod, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptPaymentPaymentMethod) Or(d PaymentPaymentMethod) PaymentPaymentMethod { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptPaymentPeriod returns new OptPaymentPeriod with value set to v. +func NewOptPaymentPeriod(v PaymentPeriod) OptPaymentPeriod { + return OptPaymentPeriod{ + Value: v, + Set: true, + } +} + +// OptPaymentPeriod is optional PaymentPeriod. +type OptPaymentPeriod struct { + Value PaymentPeriod + Set bool +} + +// IsSet returns true if OptPaymentPeriod was set. +func (o OptPaymentPeriod) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptPaymentPeriod) Reset() { + var v PaymentPeriod + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptPaymentPeriod) SetTo(v PaymentPeriod) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptPaymentPeriod) Get() (v PaymentPeriod, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptPaymentPeriod) Or(d PaymentPeriod) PaymentPeriod { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptPaymentReceiptRegistration returns new OptPaymentReceiptRegistration with value set to v. +func NewOptPaymentReceiptRegistration(v PaymentReceiptRegistration) OptPaymentReceiptRegistration { + return OptPaymentReceiptRegistration{ + Value: v, + Set: true, + } +} + +// OptPaymentReceiptRegistration is optional PaymentReceiptRegistration. +type OptPaymentReceiptRegistration struct { + Value PaymentReceiptRegistration + Set bool +} + +// IsSet returns true if OptPaymentReceiptRegistration was set. +func (o OptPaymentReceiptRegistration) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptPaymentReceiptRegistration) Reset() { + var v PaymentReceiptRegistration + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptPaymentReceiptRegistration) SetTo(v PaymentReceiptRegistration) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptPaymentReceiptRegistration) Get() (v PaymentReceiptRegistration, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptPaymentReceiptRegistration) Or(d PaymentReceiptRegistration) PaymentReceiptRegistration { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptPaymentRefundedAmount returns new OptPaymentRefundedAmount with value set to v. +func NewOptPaymentRefundedAmount(v PaymentRefundedAmount) OptPaymentRefundedAmount { + return OptPaymentRefundedAmount{ + Value: v, + Set: true, + } +} + +// OptPaymentRefundedAmount is optional PaymentRefundedAmount. +type OptPaymentRefundedAmount struct { + Value PaymentRefundedAmount + Set bool +} + +// IsSet returns true if OptPaymentRefundedAmount was set. +func (o OptPaymentRefundedAmount) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptPaymentRefundedAmount) Reset() { + var v PaymentRefundedAmount + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptPaymentRefundedAmount) SetTo(v PaymentRefundedAmount) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptPaymentRefundedAmount) Get() (v PaymentRefundedAmount, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptPaymentRefundedAmount) Or(d PaymentRefundedAmount) PaymentRefundedAmount { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptPaymentStatus returns new OptPaymentStatus with value set to v. +func NewOptPaymentStatus(v PaymentStatus) OptPaymentStatus { + return OptPaymentStatus{ + Value: v, + Set: true, + } +} + +// OptPaymentStatus is optional PaymentStatus. +type OptPaymentStatus struct { + Value PaymentStatus + Set bool +} + +// IsSet returns true if OptPaymentStatus was set. +func (o OptPaymentStatus) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptPaymentStatus) Reset() { + var v PaymentStatus + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptPaymentStatus) SetTo(v PaymentStatus) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptPaymentStatus) Get() (v PaymentStatus, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptPaymentStatus) Or(d PaymentStatus) PaymentStatus { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptPaymentToken returns new OptPaymentToken with value set to v. +func NewOptPaymentToken(v PaymentToken) OptPaymentToken { + return OptPaymentToken{ + Value: v, + Set: true, + } +} + +// OptPaymentToken is optional PaymentToken. +type OptPaymentToken struct { + Value PaymentToken + Set bool +} + +// IsSet returns true if OptPaymentToken was set. +func (o OptPaymentToken) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptPaymentToken) Reset() { + var v PaymentToken + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptPaymentToken) SetTo(v PaymentToken) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptPaymentToken) Get() (v PaymentToken, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptPaymentToken) Or(d PaymentToken) PaymentToken { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptPaymentsPaymentIDCapturePostReqAirline returns new OptPaymentsPaymentIDCapturePostReqAirline with value set to v. +func NewOptPaymentsPaymentIDCapturePostReqAirline(v PaymentsPaymentIDCapturePostReqAirline) OptPaymentsPaymentIDCapturePostReqAirline { + return OptPaymentsPaymentIDCapturePostReqAirline{ + Value: v, + Set: true, + } +} + +// OptPaymentsPaymentIDCapturePostReqAirline is optional PaymentsPaymentIDCapturePostReqAirline. +type OptPaymentsPaymentIDCapturePostReqAirline struct { + Value PaymentsPaymentIDCapturePostReqAirline + Set bool +} + +// IsSet returns true if OptPaymentsPaymentIDCapturePostReqAirline was set. +func (o OptPaymentsPaymentIDCapturePostReqAirline) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptPaymentsPaymentIDCapturePostReqAirline) Reset() { + var v PaymentsPaymentIDCapturePostReqAirline + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptPaymentsPaymentIDCapturePostReqAirline) SetTo(v PaymentsPaymentIDCapturePostReqAirline) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptPaymentsPaymentIDCapturePostReqAirline) Get() (v PaymentsPaymentIDCapturePostReqAirline, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptPaymentsPaymentIDCapturePostReqAirline) Or(d PaymentsPaymentIDCapturePostReqAirline) PaymentsPaymentIDCapturePostReqAirline { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptPaymentsPaymentIDCapturePostReqAmount returns new OptPaymentsPaymentIDCapturePostReqAmount with value set to v. +func NewOptPaymentsPaymentIDCapturePostReqAmount(v PaymentsPaymentIDCapturePostReqAmount) OptPaymentsPaymentIDCapturePostReqAmount { + return OptPaymentsPaymentIDCapturePostReqAmount{ + Value: v, + Set: true, + } +} + +// OptPaymentsPaymentIDCapturePostReqAmount is optional PaymentsPaymentIDCapturePostReqAmount. +type OptPaymentsPaymentIDCapturePostReqAmount struct { + Value PaymentsPaymentIDCapturePostReqAmount + Set bool +} + +// IsSet returns true if OptPaymentsPaymentIDCapturePostReqAmount was set. +func (o OptPaymentsPaymentIDCapturePostReqAmount) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptPaymentsPaymentIDCapturePostReqAmount) Reset() { + var v PaymentsPaymentIDCapturePostReqAmount + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptPaymentsPaymentIDCapturePostReqAmount) SetTo(v PaymentsPaymentIDCapturePostReqAmount) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptPaymentsPaymentIDCapturePostReqAmount) Get() (v PaymentsPaymentIDCapturePostReqAmount, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptPaymentsPaymentIDCapturePostReqAmount) Or(d PaymentsPaymentIDCapturePostReqAmount) PaymentsPaymentIDCapturePostReqAmount { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptPaymentsPaymentIDCapturePostReqDeal returns new OptPaymentsPaymentIDCapturePostReqDeal with value set to v. +func NewOptPaymentsPaymentIDCapturePostReqDeal(v PaymentsPaymentIDCapturePostReqDeal) OptPaymentsPaymentIDCapturePostReqDeal { + return OptPaymentsPaymentIDCapturePostReqDeal{ + Value: v, + Set: true, + } +} + +// OptPaymentsPaymentIDCapturePostReqDeal is optional PaymentsPaymentIDCapturePostReqDeal. +type OptPaymentsPaymentIDCapturePostReqDeal struct { + Value PaymentsPaymentIDCapturePostReqDeal + Set bool +} + +// IsSet returns true if OptPaymentsPaymentIDCapturePostReqDeal was set. +func (o OptPaymentsPaymentIDCapturePostReqDeal) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptPaymentsPaymentIDCapturePostReqDeal) Reset() { + var v PaymentsPaymentIDCapturePostReqDeal + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptPaymentsPaymentIDCapturePostReqDeal) SetTo(v PaymentsPaymentIDCapturePostReqDeal) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptPaymentsPaymentIDCapturePostReqDeal) Get() (v PaymentsPaymentIDCapturePostReqDeal, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptPaymentsPaymentIDCapturePostReqDeal) Or(d PaymentsPaymentIDCapturePostReqDeal) PaymentsPaymentIDCapturePostReqDeal { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptPaymentsPostReqAirline returns new OptPaymentsPostReqAirline with value set to v. +func NewOptPaymentsPostReqAirline(v PaymentsPostReqAirline) OptPaymentsPostReqAirline { + return OptPaymentsPostReqAirline{ + Value: v, + Set: true, + } +} + +// OptPaymentsPostReqAirline is optional PaymentsPostReqAirline. +type OptPaymentsPostReqAirline struct { + Value PaymentsPostReqAirline + Set bool +} + +// IsSet returns true if OptPaymentsPostReqAirline was set. +func (o OptPaymentsPostReqAirline) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptPaymentsPostReqAirline) Reset() { + var v PaymentsPostReqAirline + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptPaymentsPostReqAirline) SetTo(v PaymentsPostReqAirline) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptPaymentsPostReqAirline) Get() (v PaymentsPostReqAirline, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptPaymentsPostReqAirline) Or(d PaymentsPostReqAirline) PaymentsPostReqAirline { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptPaymentsPostReqConfirmation returns new OptPaymentsPostReqConfirmation with value set to v. +func NewOptPaymentsPostReqConfirmation(v PaymentsPostReqConfirmation) OptPaymentsPostReqConfirmation { + return OptPaymentsPostReqConfirmation{ + Value: v, + Set: true, + } +} + +// OptPaymentsPostReqConfirmation is optional PaymentsPostReqConfirmation. +type OptPaymentsPostReqConfirmation struct { + Value PaymentsPostReqConfirmation + Set bool +} + +// IsSet returns true if OptPaymentsPostReqConfirmation was set. +func (o OptPaymentsPostReqConfirmation) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptPaymentsPostReqConfirmation) Reset() { + var v PaymentsPostReqConfirmation + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptPaymentsPostReqConfirmation) SetTo(v PaymentsPostReqConfirmation) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptPaymentsPostReqConfirmation) Get() (v PaymentsPostReqConfirmation, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptPaymentsPostReqConfirmation) Or(d PaymentsPostReqConfirmation) PaymentsPostReqConfirmation { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptPaymentsPostReqDeal returns new OptPaymentsPostReqDeal with value set to v. +func NewOptPaymentsPostReqDeal(v PaymentsPostReqDeal) OptPaymentsPostReqDeal { + return OptPaymentsPostReqDeal{ + Value: v, + Set: true, + } +} + +// OptPaymentsPostReqDeal is optional PaymentsPostReqDeal. +type OptPaymentsPostReqDeal struct { + Value PaymentsPostReqDeal + Set bool +} + +// IsSet returns true if OptPaymentsPostReqDeal was set. +func (o OptPaymentsPostReqDeal) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptPaymentsPostReqDeal) Reset() { + var v PaymentsPostReqDeal + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptPaymentsPostReqDeal) SetTo(v PaymentsPostReqDeal) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptPaymentsPostReqDeal) Get() (v PaymentsPostReqDeal, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptPaymentsPostReqDeal) Or(d PaymentsPostReqDeal) PaymentsPostReqDeal { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptPaymentsPostReqPaymentMethodData returns new OptPaymentsPostReqPaymentMethodData with value set to v. +func NewOptPaymentsPostReqPaymentMethodData(v PaymentsPostReqPaymentMethodData) OptPaymentsPostReqPaymentMethodData { + return OptPaymentsPostReqPaymentMethodData{ + Value: v, + Set: true, + } +} + +// OptPaymentsPostReqPaymentMethodData is optional PaymentsPostReqPaymentMethodData. +type OptPaymentsPostReqPaymentMethodData struct { + Value PaymentsPostReqPaymentMethodData + Set bool +} + +// IsSet returns true if OptPaymentsPostReqPaymentMethodData was set. +func (o OptPaymentsPostReqPaymentMethodData) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptPaymentsPostReqPaymentMethodData) Reset() { + var v PaymentsPostReqPaymentMethodData + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptPaymentsPostReqPaymentMethodData) SetTo(v PaymentsPostReqPaymentMethodData) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptPaymentsPostReqPaymentMethodData) Get() (v PaymentsPostReqPaymentMethodData, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptPaymentsPostReqPaymentMethodData) Or(d PaymentsPostReqPaymentMethodData) PaymentsPostReqPaymentMethodData { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptPaymentsPostReqPaymentOrder returns new OptPaymentsPostReqPaymentOrder with value set to v. +func NewOptPaymentsPostReqPaymentOrder(v PaymentsPostReqPaymentOrder) OptPaymentsPostReqPaymentOrder { + return OptPaymentsPostReqPaymentOrder{ + Value: v, + Set: true, + } +} + +// OptPaymentsPostReqPaymentOrder is optional PaymentsPostReqPaymentOrder. +type OptPaymentsPostReqPaymentOrder struct { + Value PaymentsPostReqPaymentOrder + Set bool +} + +// IsSet returns true if OptPaymentsPostReqPaymentOrder was set. +func (o OptPaymentsPostReqPaymentOrder) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptPaymentsPostReqPaymentOrder) Reset() { + var v PaymentsPostReqPaymentOrder + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptPaymentsPostReqPaymentOrder) SetTo(v PaymentsPostReqPaymentOrder) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptPaymentsPostReqPaymentOrder) Get() (v PaymentsPostReqPaymentOrder, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptPaymentsPostReqPaymentOrder) Or(d PaymentsPostReqPaymentOrder) PaymentsPostReqPaymentOrder { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptPaymentsPostReqReceiver returns new OptPaymentsPostReqReceiver with value set to v. +func NewOptPaymentsPostReqReceiver(v PaymentsPostReqReceiver) OptPaymentsPostReqReceiver { + return OptPaymentsPostReqReceiver{ + Value: v, + Set: true, + } +} + +// OptPaymentsPostReqReceiver is optional PaymentsPostReqReceiver. +type OptPaymentsPostReqReceiver struct { + Value PaymentsPostReqReceiver + Set bool +} + +// IsSet returns true if OptPaymentsPostReqReceiver was set. +func (o OptPaymentsPostReqReceiver) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptPaymentsPostReqReceiver) Reset() { + var v PaymentsPostReqReceiver + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptPaymentsPostReqReceiver) SetTo(v PaymentsPostReqReceiver) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptPaymentsPostReqReceiver) Get() (v PaymentsPostReqReceiver, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptPaymentsPostReqReceiver) Or(d PaymentsPostReqReceiver) PaymentsPostReqReceiver { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptPayoutCancellationDetails returns new OptPayoutCancellationDetails with value set to v. +func NewOptPayoutCancellationDetails(v PayoutCancellationDetails) OptPayoutCancellationDetails { + return OptPayoutCancellationDetails{ + Value: v, + Set: true, + } +} + +// OptPayoutCancellationDetails is optional PayoutCancellationDetails. +type OptPayoutCancellationDetails struct { + Value PayoutCancellationDetails + Set bool +} + +// IsSet returns true if OptPayoutCancellationDetails was set. +func (o OptPayoutCancellationDetails) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptPayoutCancellationDetails) Reset() { + var v PayoutCancellationDetails + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptPayoutCancellationDetails) SetTo(v PayoutCancellationDetails) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptPayoutCancellationDetails) Get() (v PayoutCancellationDetails, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptPayoutCancellationDetails) Or(d PayoutCancellationDetails) PayoutCancellationDetails { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptPayoutCardData returns new OptPayoutCardData with value set to v. +func NewOptPayoutCardData(v PayoutCardData) OptPayoutCardData { + return OptPayoutCardData{ + Value: v, + Set: true, + } +} + +// OptPayoutCardData is optional PayoutCardData. +type OptPayoutCardData struct { + Value PayoutCardData + Set bool +} + +// IsSet returns true if OptPayoutCardData was set. +func (o OptPayoutCardData) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptPayoutCardData) Reset() { + var v PayoutCardData + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptPayoutCardData) SetTo(v PayoutCardData) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptPayoutCardData) Get() (v PayoutCardData, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptPayoutCardData) Or(d PayoutCardData) PayoutCardData { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptPayoutDeal returns new OptPayoutDeal with value set to v. +func NewOptPayoutDeal(v PayoutDeal) OptPayoutDeal { + return OptPayoutDeal{ + Value: v, + Set: true, + } +} + +// OptPayoutDeal is optional PayoutDeal. +type OptPayoutDeal struct { + Value PayoutDeal + Set bool +} + +// IsSet returns true if OptPayoutDeal was set. +func (o OptPayoutDeal) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptPayoutDeal) Reset() { + var v PayoutDeal + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptPayoutDeal) SetTo(v PayoutDeal) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptPayoutDeal) Get() (v PayoutDeal, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptPayoutDeal) Or(d PayoutDeal) PayoutDeal { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptPayoutDealInfo returns new OptPayoutDealInfo with value set to v. +func NewOptPayoutDealInfo(v PayoutDealInfo) OptPayoutDealInfo { + return OptPayoutDealInfo{ + Value: v, + Set: true, + } +} + +// OptPayoutDealInfo is optional PayoutDealInfo. +type OptPayoutDealInfo struct { + Value PayoutDealInfo + Set bool +} + +// IsSet returns true if OptPayoutDealInfo was set. +func (o OptPayoutDealInfo) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptPayoutDealInfo) Reset() { + var v PayoutDealInfo + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptPayoutDealInfo) SetTo(v PayoutDealInfo) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptPayoutDealInfo) Get() (v PayoutDealInfo, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptPayoutDealInfo) Or(d PayoutDealInfo) PayoutDealInfo { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptPayoutDestinationDataType returns new OptPayoutDestinationDataType with value set to v. +func NewOptPayoutDestinationDataType(v PayoutDestinationDataType) OptPayoutDestinationDataType { + return OptPayoutDestinationDataType{ + Value: v, + Set: true, + } +} + +// OptPayoutDestinationDataType is optional PayoutDestinationDataType. +type OptPayoutDestinationDataType struct { + Value PayoutDestinationDataType + Set bool +} + +// IsSet returns true if OptPayoutDestinationDataType was set. +func (o OptPayoutDestinationDataType) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptPayoutDestinationDataType) Reset() { + var v PayoutDestinationDataType + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptPayoutDestinationDataType) SetTo(v PayoutDestinationDataType) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptPayoutDestinationDataType) Get() (v PayoutDestinationDataType, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptPayoutDestinationDataType) Or(d PayoutDestinationDataType) PayoutDestinationDataType { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptPayoutRequestPayoutDestinationData returns new OptPayoutRequestPayoutDestinationData with value set to v. +func NewOptPayoutRequestPayoutDestinationData(v PayoutRequestPayoutDestinationData) OptPayoutRequestPayoutDestinationData { + return OptPayoutRequestPayoutDestinationData{ + Value: v, + Set: true, + } +} + +// OptPayoutRequestPayoutDestinationData is optional PayoutRequestPayoutDestinationData. +type OptPayoutRequestPayoutDestinationData struct { + Value PayoutRequestPayoutDestinationData + Set bool +} + +// IsSet returns true if OptPayoutRequestPayoutDestinationData was set. +func (o OptPayoutRequestPayoutDestinationData) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptPayoutRequestPayoutDestinationData) Reset() { + var v PayoutRequestPayoutDestinationData + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptPayoutRequestPayoutDestinationData) SetTo(v PayoutRequestPayoutDestinationData) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptPayoutRequestPayoutDestinationData) Get() (v PayoutRequestPayoutDestinationData, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptPayoutRequestPayoutDestinationData) Or(d PayoutRequestPayoutDestinationData) PayoutRequestPayoutDestinationData { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptPayoutSelfEmployed returns new OptPayoutSelfEmployed with value set to v. +func NewOptPayoutSelfEmployed(v PayoutSelfEmployed) OptPayoutSelfEmployed { + return OptPayoutSelfEmployed{ + Value: v, + Set: true, + } +} + +// OptPayoutSelfEmployed is optional PayoutSelfEmployed. +type OptPayoutSelfEmployed struct { + Value PayoutSelfEmployed + Set bool +} + +// IsSet returns true if OptPayoutSelfEmployed was set. +func (o OptPayoutSelfEmployed) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptPayoutSelfEmployed) Reset() { + var v PayoutSelfEmployed + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptPayoutSelfEmployed) SetTo(v PayoutSelfEmployed) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptPayoutSelfEmployed) Get() (v PayoutSelfEmployed, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptPayoutSelfEmployed) Or(d PayoutSelfEmployed) PayoutSelfEmployed { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptPayoutStatus returns new OptPayoutStatus with value set to v. +func NewOptPayoutStatus(v PayoutStatus) OptPayoutStatus { + return OptPayoutStatus{ + Value: v, + Set: true, + } +} + +// OptPayoutStatus is optional PayoutStatus. +type OptPayoutStatus struct { + Value PayoutStatus + Set bool +} + +// IsSet returns true if OptPayoutStatus was set. +func (o OptPayoutStatus) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptPayoutStatus) Reset() { + var v PayoutStatus + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptPayoutStatus) SetTo(v PayoutStatus) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptPayoutStatus) Get() (v PayoutStatus, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptPayoutStatus) Or(d PayoutStatus) PayoutStatus { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptPersonalDataCancellationDetails returns new OptPersonalDataCancellationDetails with value set to v. +func NewOptPersonalDataCancellationDetails(v PersonalDataCancellationDetails) OptPersonalDataCancellationDetails { + return OptPersonalDataCancellationDetails{ + Value: v, + Set: true, + } +} + +// OptPersonalDataCancellationDetails is optional PersonalDataCancellationDetails. +type OptPersonalDataCancellationDetails struct { + Value PersonalDataCancellationDetails + Set bool +} + +// IsSet returns true if OptPersonalDataCancellationDetails was set. +func (o OptPersonalDataCancellationDetails) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptPersonalDataCancellationDetails) Reset() { + var v PersonalDataCancellationDetails + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptPersonalDataCancellationDetails) SetTo(v PersonalDataCancellationDetails) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptPersonalDataCancellationDetails) Get() (v PersonalDataCancellationDetails, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptPersonalDataCancellationDetails) Or(d PersonalDataCancellationDetails) PersonalDataCancellationDetails { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptReceiptData returns new OptReceiptData with value set to v. +func NewOptReceiptData(v ReceiptData) OptReceiptData { + return OptReceiptData{ + Value: v, + Set: true, + } +} + +// OptReceiptData is optional ReceiptData. +type OptReceiptData struct { + Value ReceiptData + Set bool +} + +// IsSet returns true if OptReceiptData was set. +func (o OptReceiptData) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptReceiptData) Reset() { + var v ReceiptData + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptReceiptData) SetTo(v ReceiptData) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptReceiptData) Get() (v ReceiptData, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptReceiptData) Or(d ReceiptData) ReceiptData { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptReceiptDataCustomer returns new OptReceiptDataCustomer with value set to v. +func NewOptReceiptDataCustomer(v ReceiptDataCustomer) OptReceiptDataCustomer { + return OptReceiptDataCustomer{ + Value: v, + Set: true, + } +} + +// OptReceiptDataCustomer is optional ReceiptDataCustomer. +type OptReceiptDataCustomer struct { + Value ReceiptDataCustomer + Set bool +} + +// IsSet returns true if OptReceiptDataCustomer was set. +func (o OptReceiptDataCustomer) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptReceiptDataCustomer) Reset() { + var v ReceiptDataCustomer + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptReceiptDataCustomer) SetTo(v ReceiptDataCustomer) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptReceiptDataCustomer) Get() (v ReceiptDataCustomer, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptReceiptDataCustomer) Or(d ReceiptDataCustomer) ReceiptDataCustomer { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptReceiptDataReceiptOperationalDetails returns new OptReceiptDataReceiptOperationalDetails with value set to v. +func NewOptReceiptDataReceiptOperationalDetails(v ReceiptDataReceiptOperationalDetails) OptReceiptDataReceiptOperationalDetails { + return OptReceiptDataReceiptOperationalDetails{ + Value: v, + Set: true, + } +} + +// OptReceiptDataReceiptOperationalDetails is optional ReceiptDataReceiptOperationalDetails. +type OptReceiptDataReceiptOperationalDetails struct { + Value ReceiptDataReceiptOperationalDetails + Set bool +} + +// IsSet returns true if OptReceiptDataReceiptOperationalDetails was set. +func (o OptReceiptDataReceiptOperationalDetails) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptReceiptDataReceiptOperationalDetails) Reset() { + var v ReceiptDataReceiptOperationalDetails + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptReceiptDataReceiptOperationalDetails) SetTo(v ReceiptDataReceiptOperationalDetails) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptReceiptDataReceiptOperationalDetails) Get() (v ReceiptDataReceiptOperationalDetails, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptReceiptDataReceiptOperationalDetails) Or(d ReceiptDataReceiptOperationalDetails) ReceiptDataReceiptOperationalDetails { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptReceiptItemAgentType returns new OptReceiptItemAgentType with value set to v. +func NewOptReceiptItemAgentType(v ReceiptItemAgentType) OptReceiptItemAgentType { + return OptReceiptItemAgentType{ + Value: v, + Set: true, + } +} + +// OptReceiptItemAgentType is optional ReceiptItemAgentType. +type OptReceiptItemAgentType struct { + Value ReceiptItemAgentType + Set bool +} + +// IsSet returns true if OptReceiptItemAgentType was set. +func (o OptReceiptItemAgentType) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptReceiptItemAgentType) Reset() { + var v ReceiptItemAgentType + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptReceiptItemAgentType) SetTo(v ReceiptItemAgentType) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptReceiptItemAgentType) Get() (v ReceiptItemAgentType, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptReceiptItemAgentType) Or(d ReceiptItemAgentType) ReceiptItemAgentType { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptReceiptItemCountryOfOriginCode returns new OptReceiptItemCountryOfOriginCode with value set to v. +func NewOptReceiptItemCountryOfOriginCode(v ReceiptItemCountryOfOriginCode) OptReceiptItemCountryOfOriginCode { + return OptReceiptItemCountryOfOriginCode{ + Value: v, + Set: true, + } +} + +// OptReceiptItemCountryOfOriginCode is optional ReceiptItemCountryOfOriginCode. +type OptReceiptItemCountryOfOriginCode struct { + Value ReceiptItemCountryOfOriginCode + Set bool +} + +// IsSet returns true if OptReceiptItemCountryOfOriginCode was set. +func (o OptReceiptItemCountryOfOriginCode) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptReceiptItemCountryOfOriginCode) Reset() { + var v ReceiptItemCountryOfOriginCode + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptReceiptItemCountryOfOriginCode) SetTo(v ReceiptItemCountryOfOriginCode) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptReceiptItemCountryOfOriginCode) Get() (v ReceiptItemCountryOfOriginCode, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptReceiptItemCountryOfOriginCode) Or(d ReceiptItemCountryOfOriginCode) ReceiptItemCountryOfOriginCode { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptReceiptItemCustomsDeclarationNumber returns new OptReceiptItemCustomsDeclarationNumber with value set to v. +func NewOptReceiptItemCustomsDeclarationNumber(v ReceiptItemCustomsDeclarationNumber) OptReceiptItemCustomsDeclarationNumber { + return OptReceiptItemCustomsDeclarationNumber{ + Value: v, + Set: true, + } +} + +// OptReceiptItemCustomsDeclarationNumber is optional ReceiptItemCustomsDeclarationNumber. +type OptReceiptItemCustomsDeclarationNumber struct { + Value ReceiptItemCustomsDeclarationNumber + Set bool +} + +// IsSet returns true if OptReceiptItemCustomsDeclarationNumber was set. +func (o OptReceiptItemCustomsDeclarationNumber) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptReceiptItemCustomsDeclarationNumber) Reset() { + var v ReceiptItemCustomsDeclarationNumber + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptReceiptItemCustomsDeclarationNumber) SetTo(v ReceiptItemCustomsDeclarationNumber) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptReceiptItemCustomsDeclarationNumber) Get() (v ReceiptItemCustomsDeclarationNumber, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptReceiptItemCustomsDeclarationNumber) Or(d ReceiptItemCustomsDeclarationNumber) ReceiptItemCustomsDeclarationNumber { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptReceiptItemExcise returns new OptReceiptItemExcise with value set to v. +func NewOptReceiptItemExcise(v ReceiptItemExcise) OptReceiptItemExcise { + return OptReceiptItemExcise{ + Value: v, + Set: true, + } +} + +// OptReceiptItemExcise is optional ReceiptItemExcise. +type OptReceiptItemExcise struct { + Value ReceiptItemExcise + Set bool +} + +// IsSet returns true if OptReceiptItemExcise was set. +func (o OptReceiptItemExcise) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptReceiptItemExcise) Reset() { + var v ReceiptItemExcise + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptReceiptItemExcise) SetTo(v ReceiptItemExcise) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptReceiptItemExcise) Get() (v ReceiptItemExcise, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptReceiptItemExcise) Or(d ReceiptItemExcise) ReceiptItemExcise { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptReceiptItemMeasure returns new OptReceiptItemMeasure with value set to v. +func NewOptReceiptItemMeasure(v ReceiptItemMeasure) OptReceiptItemMeasure { + return OptReceiptItemMeasure{ + Value: v, + Set: true, + } +} + +// OptReceiptItemMeasure is optional ReceiptItemMeasure. +type OptReceiptItemMeasure struct { + Value ReceiptItemMeasure + Set bool +} + +// IsSet returns true if OptReceiptItemMeasure was set. +func (o OptReceiptItemMeasure) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptReceiptItemMeasure) Reset() { + var v ReceiptItemMeasure + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptReceiptItemMeasure) SetTo(v ReceiptItemMeasure) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptReceiptItemMeasure) Get() (v ReceiptItemMeasure, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptReceiptItemMeasure) Or(d ReceiptItemMeasure) ReceiptItemMeasure { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptReceiptItemPaymentMode returns new OptReceiptItemPaymentMode with value set to v. +func NewOptReceiptItemPaymentMode(v ReceiptItemPaymentMode) OptReceiptItemPaymentMode { + return OptReceiptItemPaymentMode{ + Value: v, + Set: true, + } +} + +// OptReceiptItemPaymentMode is optional ReceiptItemPaymentMode. +type OptReceiptItemPaymentMode struct { + Value ReceiptItemPaymentMode + Set bool +} + +// IsSet returns true if OptReceiptItemPaymentMode was set. +func (o OptReceiptItemPaymentMode) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptReceiptItemPaymentMode) Reset() { + var v ReceiptItemPaymentMode + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptReceiptItemPaymentMode) SetTo(v ReceiptItemPaymentMode) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptReceiptItemPaymentMode) Get() (v ReceiptItemPaymentMode, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptReceiptItemPaymentMode) Or(d ReceiptItemPaymentMode) ReceiptItemPaymentMode { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptReceiptItemPaymentSubject returns new OptReceiptItemPaymentSubject with value set to v. +func NewOptReceiptItemPaymentSubject(v ReceiptItemPaymentSubject) OptReceiptItemPaymentSubject { + return OptReceiptItemPaymentSubject{ + Value: v, + Set: true, + } +} + +// OptReceiptItemPaymentSubject is optional ReceiptItemPaymentSubject. +type OptReceiptItemPaymentSubject struct { + Value ReceiptItemPaymentSubject + Set bool +} + +// IsSet returns true if OptReceiptItemPaymentSubject was set. +func (o OptReceiptItemPaymentSubject) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptReceiptItemPaymentSubject) Reset() { + var v ReceiptItemPaymentSubject + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptReceiptItemPaymentSubject) SetTo(v ReceiptItemPaymentSubject) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptReceiptItemPaymentSubject) Get() (v ReceiptItemPaymentSubject, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptReceiptItemPaymentSubject) Or(d ReceiptItemPaymentSubject) ReceiptItemPaymentSubject { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptReceiptItemPlannedStatus returns new OptReceiptItemPlannedStatus with value set to v. +func NewOptReceiptItemPlannedStatus(v ReceiptItemPlannedStatus) OptReceiptItemPlannedStatus { + return OptReceiptItemPlannedStatus{ + Value: v, + Set: true, + } +} + +// OptReceiptItemPlannedStatus is optional ReceiptItemPlannedStatus. +type OptReceiptItemPlannedStatus struct { + Value ReceiptItemPlannedStatus + Set bool +} + +// IsSet returns true if OptReceiptItemPlannedStatus was set. +func (o OptReceiptItemPlannedStatus) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptReceiptItemPlannedStatus) Reset() { + var v ReceiptItemPlannedStatus + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptReceiptItemPlannedStatus) SetTo(v ReceiptItemPlannedStatus) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptReceiptItemPlannedStatus) Get() (v ReceiptItemPlannedStatus, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptReceiptItemPlannedStatus) Or(d ReceiptItemPlannedStatus) ReceiptItemPlannedStatus { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptReceiptItemProductCode returns new OptReceiptItemProductCode with value set to v. +func NewOptReceiptItemProductCode(v ReceiptItemProductCode) OptReceiptItemProductCode { + return OptReceiptItemProductCode{ + Value: v, + Set: true, + } +} + +// OptReceiptItemProductCode is optional ReceiptItemProductCode. +type OptReceiptItemProductCode struct { + Value ReceiptItemProductCode + Set bool +} + +// IsSet returns true if OptReceiptItemProductCode was set. +func (o OptReceiptItemProductCode) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptReceiptItemProductCode) Reset() { + var v ReceiptItemProductCode + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptReceiptItemProductCode) SetTo(v ReceiptItemProductCode) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptReceiptItemProductCode) Get() (v ReceiptItemProductCode, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptReceiptItemProductCode) Or(d ReceiptItemProductCode) ReceiptItemProductCode { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptReceiptItemSupplierWithInn returns new OptReceiptItemSupplierWithInn with value set to v. +func NewOptReceiptItemSupplierWithInn(v ReceiptItemSupplierWithInn) OptReceiptItemSupplierWithInn { + return OptReceiptItemSupplierWithInn{ + Value: v, + Set: true, + } +} + +// OptReceiptItemSupplierWithInn is optional ReceiptItemSupplierWithInn. +type OptReceiptItemSupplierWithInn struct { + Value ReceiptItemSupplierWithInn + Set bool +} + +// IsSet returns true if OptReceiptItemSupplierWithInn was set. +func (o OptReceiptItemSupplierWithInn) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptReceiptItemSupplierWithInn) Reset() { + var v ReceiptItemSupplierWithInn + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptReceiptItemSupplierWithInn) SetTo(v ReceiptItemSupplierWithInn) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptReceiptItemSupplierWithInn) Get() (v ReceiptItemSupplierWithInn, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptReceiptItemSupplierWithInn) Or(d ReceiptItemSupplierWithInn) ReceiptItemSupplierWithInn { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptReceiptReceiptOperationalDetails returns new OptReceiptReceiptOperationalDetails with value set to v. +func NewOptReceiptReceiptOperationalDetails(v ReceiptReceiptOperationalDetails) OptReceiptReceiptOperationalDetails { + return OptReceiptReceiptOperationalDetails{ + Value: v, + Set: true, + } +} + +// OptReceiptReceiptOperationalDetails is optional ReceiptReceiptOperationalDetails. +type OptReceiptReceiptOperationalDetails struct { + Value ReceiptReceiptOperationalDetails + Set bool +} + +// IsSet returns true if OptReceiptReceiptOperationalDetails was set. +func (o OptReceiptReceiptOperationalDetails) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptReceiptReceiptOperationalDetails) Reset() { + var v ReceiptReceiptOperationalDetails + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptReceiptReceiptOperationalDetails) SetTo(v ReceiptReceiptOperationalDetails) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptReceiptReceiptOperationalDetails) Get() (v ReceiptReceiptOperationalDetails, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptReceiptReceiptOperationalDetails) Or(d ReceiptReceiptOperationalDetails) ReceiptReceiptOperationalDetails { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptReceiptRegistrationStatus returns new OptReceiptRegistrationStatus with value set to v. +func NewOptReceiptRegistrationStatus(v ReceiptRegistrationStatus) OptReceiptRegistrationStatus { + return OptReceiptRegistrationStatus{ + Value: v, + Set: true, + } +} + +// OptReceiptRegistrationStatus is optional ReceiptRegistrationStatus. +type OptReceiptRegistrationStatus struct { + Value ReceiptRegistrationStatus + Set bool +} + +// IsSet returns true if OptReceiptRegistrationStatus was set. +func (o OptReceiptRegistrationStatus) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptReceiptRegistrationStatus) Reset() { + var v ReceiptRegistrationStatus + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptReceiptRegistrationStatus) SetTo(v ReceiptRegistrationStatus) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptReceiptRegistrationStatus) Get() (v ReceiptRegistrationStatus, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptReceiptRegistrationStatus) Or(d ReceiptRegistrationStatus) ReceiptRegistrationStatus { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptRecipient returns new OptRecipient with value set to v. +func NewOptRecipient(v Recipient) OptRecipient { + return OptRecipient{ + Value: v, + Set: true, + } +} + +// OptRecipient is optional Recipient. +type OptRecipient struct { + Value Recipient + Set bool +} + +// IsSet returns true if OptRecipient was set. +func (o OptRecipient) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptRecipient) Reset() { + var v Recipient + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptRecipient) SetTo(v Recipient) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptRecipient) Get() (v Recipient, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptRecipient) Or(d Recipient) Recipient { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptRefundAuthorizationDetails returns new OptRefundAuthorizationDetails with value set to v. +func NewOptRefundAuthorizationDetails(v RefundAuthorizationDetails) OptRefundAuthorizationDetails { + return OptRefundAuthorizationDetails{ + Value: v, + Set: true, + } +} + +// OptRefundAuthorizationDetails is optional RefundAuthorizationDetails. +type OptRefundAuthorizationDetails struct { + Value RefundAuthorizationDetails + Set bool +} + +// IsSet returns true if OptRefundAuthorizationDetails was set. +func (o OptRefundAuthorizationDetails) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptRefundAuthorizationDetails) Reset() { + var v RefundAuthorizationDetails + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptRefundAuthorizationDetails) SetTo(v RefundAuthorizationDetails) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptRefundAuthorizationDetails) Get() (v RefundAuthorizationDetails, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptRefundAuthorizationDetails) Or(d RefundAuthorizationDetails) RefundAuthorizationDetails { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptRefundCancellationDetails returns new OptRefundCancellationDetails with value set to v. +func NewOptRefundCancellationDetails(v RefundCancellationDetails) OptRefundCancellationDetails { + return OptRefundCancellationDetails{ + Value: v, + Set: true, + } +} + +// OptRefundCancellationDetails is optional RefundCancellationDetails. +type OptRefundCancellationDetails struct { + Value RefundCancellationDetails + Set bool +} + +// IsSet returns true if OptRefundCancellationDetails was set. +func (o OptRefundCancellationDetails) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptRefundCancellationDetails) Reset() { + var v RefundCancellationDetails + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptRefundCancellationDetails) SetTo(v RefundCancellationDetails) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptRefundCancellationDetails) Get() (v RefundCancellationDetails, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptRefundCancellationDetails) Or(d RefundCancellationDetails) RefundCancellationDetails { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptRefundDealData returns new OptRefundDealData with value set to v. +func NewOptRefundDealData(v RefundDealData) OptRefundDealData { + return OptRefundDealData{ + Value: v, + Set: true, + } +} + +// OptRefundDealData is optional RefundDealData. +type OptRefundDealData struct { + Value RefundDealData + Set bool +} + +// IsSet returns true if OptRefundDealData was set. +func (o OptRefundDealData) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptRefundDealData) Reset() { + var v RefundDealData + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptRefundDealData) SetTo(v RefundDealData) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptRefundDealData) Get() (v RefundDealData, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptRefundDealData) Or(d RefundDealData) RefundDealData { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptRefundDealInfo returns new OptRefundDealInfo with value set to v. +func NewOptRefundDealInfo(v RefundDealInfo) OptRefundDealInfo { + return OptRefundDealInfo{ + Value: v, + Set: true, + } +} + +// OptRefundDealInfo is optional RefundDealInfo. +type OptRefundDealInfo struct { + Value RefundDealInfo + Set bool +} + +// IsSet returns true if OptRefundDealInfo was set. +func (o OptRefundDealInfo) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptRefundDealInfo) Reset() { + var v RefundDealInfo + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptRefundDealInfo) SetTo(v RefundDealInfo) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptRefundDealInfo) Get() (v RefundDealInfo, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptRefundDealInfo) Or(d RefundDealInfo) RefundDealInfo { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptRefundId returns new OptRefundId with value set to v. +func NewOptRefundId(v RefundId) OptRefundId { + return OptRefundId{ + Value: v, + Set: true, + } +} + +// OptRefundId is optional RefundId. +type OptRefundId struct { + Value RefundId + Set bool +} + +// IsSet returns true if OptRefundId was set. +func (o OptRefundId) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptRefundId) Reset() { + var v RefundId + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptRefundId) SetTo(v RefundId) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptRefundId) Get() (v RefundId, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptRefundId) Or(d RefundId) RefundId { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptRefundReceiptRegistration returns new OptRefundReceiptRegistration with value set to v. +func NewOptRefundReceiptRegistration(v RefundReceiptRegistration) OptRefundReceiptRegistration { + return OptRefundReceiptRegistration{ + Value: v, + Set: true, + } +} + +// OptRefundReceiptRegistration is optional RefundReceiptRegistration. +type OptRefundReceiptRegistration struct { + Value RefundReceiptRegistration + Set bool +} + +// IsSet returns true if OptRefundReceiptRegistration was set. +func (o OptRefundReceiptRegistration) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptRefundReceiptRegistration) Reset() { + var v RefundReceiptRegistration + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptRefundReceiptRegistration) SetTo(v RefundReceiptRegistration) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptRefundReceiptRegistration) Get() (v RefundReceiptRegistration, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptRefundReceiptRegistration) Or(d RefundReceiptRegistration) RefundReceiptRegistration { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptRefundRefundMethod returns new OptRefundRefundMethod with value set to v. +func NewOptRefundRefundMethod(v RefundRefundMethod) OptRefundRefundMethod { + return OptRefundRefundMethod{ + Value: v, + Set: true, + } +} + +// OptRefundRefundMethod is optional RefundRefundMethod. +type OptRefundRefundMethod struct { + Value RefundRefundMethod + Set bool +} + +// IsSet returns true if OptRefundRefundMethod was set. +func (o OptRefundRefundMethod) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptRefundRefundMethod) Reset() { + var v RefundRefundMethod + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptRefundRefundMethod) SetTo(v RefundRefundMethod) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptRefundRefundMethod) Get() (v RefundRefundMethod, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptRefundRefundMethod) Or(d RefundRefundMethod) RefundRefundMethod { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptRefundSourcesDataPlatformFeeAmount returns new OptRefundSourcesDataPlatformFeeAmount with value set to v. +func NewOptRefundSourcesDataPlatformFeeAmount(v RefundSourcesDataPlatformFeeAmount) OptRefundSourcesDataPlatformFeeAmount { + return OptRefundSourcesDataPlatformFeeAmount{ + Value: v, + Set: true, + } +} + +// OptRefundSourcesDataPlatformFeeAmount is optional RefundSourcesDataPlatformFeeAmount. +type OptRefundSourcesDataPlatformFeeAmount struct { + Value RefundSourcesDataPlatformFeeAmount + Set bool +} + +// IsSet returns true if OptRefundSourcesDataPlatformFeeAmount was set. +func (o OptRefundSourcesDataPlatformFeeAmount) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptRefundSourcesDataPlatformFeeAmount) Reset() { + var v RefundSourcesDataPlatformFeeAmount + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptRefundSourcesDataPlatformFeeAmount) SetTo(v RefundSourcesDataPlatformFeeAmount) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptRefundSourcesDataPlatformFeeAmount) Get() (v RefundSourcesDataPlatformFeeAmount, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptRefundSourcesDataPlatformFeeAmount) Or(d RefundSourcesDataPlatformFeeAmount) RefundSourcesDataPlatformFeeAmount { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptRefundStatus returns new OptRefundStatus with value set to v. +func NewOptRefundStatus(v RefundStatus) OptRefundStatus { + return OptRefundStatus{ + Value: v, + Set: true, + } +} + +// OptRefundStatus is optional RefundStatus. +type OptRefundStatus struct { + Value RefundStatus + Set bool +} + +// IsSet returns true if OptRefundStatus was set. +func (o OptRefundStatus) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptRefundStatus) Reset() { + var v RefundStatus + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptRefundStatus) SetTo(v RefundStatus) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptRefundStatus) Get() (v RefundStatus, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptRefundStatus) Or(d RefundStatus) RefundStatus { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptRefundsPostReqRefundMethodData returns new OptRefundsPostReqRefundMethodData with value set to v. +func NewOptRefundsPostReqRefundMethodData(v RefundsPostReqRefundMethodData) OptRefundsPostReqRefundMethodData { + return OptRefundsPostReqRefundMethodData{ + Value: v, + Set: true, + } +} + +// OptRefundsPostReqRefundMethodData is optional RefundsPostReqRefundMethodData. +type OptRefundsPostReqRefundMethodData struct { + Value RefundsPostReqRefundMethodData + Set bool +} + +// IsSet returns true if OptRefundsPostReqRefundMethodData was set. +func (o OptRefundsPostReqRefundMethodData) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptRefundsPostReqRefundMethodData) Reset() { + var v RefundsPostReqRefundMethodData + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptRefundsPostReqRefundMethodData) SetTo(v RefundsPostReqRefundMethodData) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptRefundsPostReqRefundMethodData) Get() (v RefundsPostReqRefundMethodData, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptRefundsPostReqRefundMethodData) Or(d RefundsPostReqRefundMethodData) RefundsPostReqRefundMethodData { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptReturnUrl returns new OptReturnUrl with value set to v. +func NewOptReturnUrl(v ReturnUrl) OptReturnUrl { + return OptReturnUrl{ + Value: v, + Set: true, + } +} + +// OptReturnUrl is optional ReturnUrl. +type OptReturnUrl struct { + Value ReturnUrl + Set bool +} + +// IsSet returns true if OptReturnUrl was set. +func (o OptReturnUrl) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptReturnUrl) Reset() { + var v ReturnUrl + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptReturnUrl) SetTo(v ReturnUrl) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptReturnUrl) Get() (v ReturnUrl, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptReturnUrl) Or(d ReturnUrl) ReturnUrl { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptRrn returns new OptRrn with value set to v. +func NewOptRrn(v Rrn) OptRrn { + return OptRrn{ + Value: v, + Set: true, + } +} + +// OptRrn is optional Rrn. +type OptRrn struct { + Value Rrn + Set bool +} + +// IsSet returns true if OptRrn was set. +func (o OptRrn) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptRrn) Reset() { + var v Rrn + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptRrn) SetTo(v Rrn) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptRrn) Get() (v Rrn, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptRrn) Or(d Rrn) Rrn { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptSavePaymentMethodAttribute returns new OptSavePaymentMethodAttribute with value set to v. +func NewOptSavePaymentMethodAttribute(v SavePaymentMethodAttribute) OptSavePaymentMethodAttribute { + return OptSavePaymentMethodAttribute{ + Value: v, + Set: true, + } +} + +// OptSavePaymentMethodAttribute is optional SavePaymentMethodAttribute. +type OptSavePaymentMethodAttribute struct { + Value SavePaymentMethodAttribute + Set bool +} + +// IsSet returns true if OptSavePaymentMethodAttribute was set. +func (o OptSavePaymentMethodAttribute) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptSavePaymentMethodAttribute) Reset() { + var v SavePaymentMethodAttribute + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptSavePaymentMethodAttribute) SetTo(v SavePaymentMethodAttribute) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptSavePaymentMethodAttribute) Get() (v SavePaymentMethodAttribute, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptSavePaymentMethodAttribute) Or(d SavePaymentMethodAttribute) SavePaymentMethodAttribute { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptSavePaymentMethodBankCardConfirmation returns new OptSavePaymentMethodBankCardConfirmation with value set to v. +func NewOptSavePaymentMethodBankCardConfirmation(v SavePaymentMethodBankCardConfirmation) OptSavePaymentMethodBankCardConfirmation { + return OptSavePaymentMethodBankCardConfirmation{ + Value: v, + Set: true, + } +} + +// OptSavePaymentMethodBankCardConfirmation is optional SavePaymentMethodBankCardConfirmation. +type OptSavePaymentMethodBankCardConfirmation struct { + Value SavePaymentMethodBankCardConfirmation + Set bool +} + +// IsSet returns true if OptSavePaymentMethodBankCardConfirmation was set. +func (o OptSavePaymentMethodBankCardConfirmation) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptSavePaymentMethodBankCardConfirmation) Reset() { + var v SavePaymentMethodBankCardConfirmation + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptSavePaymentMethodBankCardConfirmation) SetTo(v SavePaymentMethodBankCardConfirmation) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptSavePaymentMethodBankCardConfirmation) Get() (v SavePaymentMethodBankCardConfirmation, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptSavePaymentMethodBankCardConfirmation) Or(d SavePaymentMethodBankCardConfirmation) SavePaymentMethodBankCardConfirmation { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptSavePaymentMethodDataBankCardHolder returns new OptSavePaymentMethodDataBankCardHolder with value set to v. +func NewOptSavePaymentMethodDataBankCardHolder(v SavePaymentMethodDataBankCardHolder) OptSavePaymentMethodDataBankCardHolder { + return OptSavePaymentMethodDataBankCardHolder{ + Value: v, + Set: true, + } +} + +// OptSavePaymentMethodDataBankCardHolder is optional SavePaymentMethodDataBankCardHolder. +type OptSavePaymentMethodDataBankCardHolder struct { + Value SavePaymentMethodDataBankCardHolder + Set bool +} + +// IsSet returns true if OptSavePaymentMethodDataBankCardHolder was set. +func (o OptSavePaymentMethodDataBankCardHolder) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptSavePaymentMethodDataBankCardHolder) Reset() { + var v SavePaymentMethodDataBankCardHolder + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptSavePaymentMethodDataBankCardHolder) SetTo(v SavePaymentMethodDataBankCardHolder) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptSavePaymentMethodDataBankCardHolder) Get() (v SavePaymentMethodDataBankCardHolder, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptSavePaymentMethodDataBankCardHolder) Or(d SavePaymentMethodDataBankCardHolder) SavePaymentMethodDataBankCardHolder { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptSbpPayerBankDetails returns new OptSbpPayerBankDetails with value set to v. +func NewOptSbpPayerBankDetails(v SbpPayerBankDetails) OptSbpPayerBankDetails { + return OptSbpPayerBankDetails{ + Value: v, + Set: true, + } +} + +// OptSbpPayerBankDetails is optional SbpPayerBankDetails. +type OptSbpPayerBankDetails struct { + Value SbpPayerBankDetails + Set bool +} + +// IsSet returns true if OptSbpPayerBankDetails was set. +func (o OptSbpPayerBankDetails) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptSbpPayerBankDetails) Reset() { + var v SbpPayerBankDetails + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptSbpPayerBankDetails) SetTo(v SbpPayerBankDetails) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptSbpPayerBankDetails) Get() (v SbpPayerBankDetails, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptSbpPayerBankDetails) Or(d SbpPayerBankDetails) SbpPayerBankDetails { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptString returns new OptString with value set to v. +func NewOptString(v string) OptString { + return OptString{ + Value: v, + Set: true, + } +} + +// OptString is optional string. +type OptString struct { + Value string + Set bool +} + +// IsSet returns true if OptString was set. +func (o OptString) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptString) Reset() { + var v string + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptString) SetTo(v string) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptString) Get() (v string, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptString) Or(d string) string { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptTaxSystemCode returns new OptTaxSystemCode with value set to v. +func NewOptTaxSystemCode(v TaxSystemCode) OptTaxSystemCode { + return OptTaxSystemCode{ + Value: v, + Set: true, + } +} + +// OptTaxSystemCode is optional TaxSystemCode. +type OptTaxSystemCode struct { + Value TaxSystemCode + Set bool +} + +// IsSet returns true if OptTaxSystemCode was set. +func (o OptTaxSystemCode) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptTaxSystemCode) Reset() { + var v TaxSystemCode + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptTaxSystemCode) SetTo(v TaxSystemCode) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptTaxSystemCode) Get() (v TaxSystemCode, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptTaxSystemCode) Or(d TaxSystemCode) TaxSystemCode { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptTest returns new OptTest with value set to v. +func NewOptTest(v Test) OptTest { + return OptTest{ + Value: v, + Set: true, + } +} + +// OptTest is optional Test. +type OptTest struct { + Value Test + Set bool +} + +// IsSet returns true if OptTest was set. +func (o OptTest) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptTest) Reset() { + var v Test + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptTest) SetTo(v Test) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptTest) Get() (v Test, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptTest) Or(d Test) Test { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptTooManyRequestsCode returns new OptTooManyRequestsCode with value set to v. +func NewOptTooManyRequestsCode(v TooManyRequestsCode) OptTooManyRequestsCode { + return OptTooManyRequestsCode{ + Value: v, + Set: true, + } +} + +// OptTooManyRequestsCode is optional TooManyRequestsCode. +type OptTooManyRequestsCode struct { + Value TooManyRequestsCode + Set bool +} + +// IsSet returns true if OptTooManyRequestsCode was set. +func (o OptTooManyRequestsCode) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptTooManyRequestsCode) Reset() { + var v TooManyRequestsCode + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptTooManyRequestsCode) SetTo(v TooManyRequestsCode) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptTooManyRequestsCode) Get() (v TooManyRequestsCode, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptTooManyRequestsCode) Or(d TooManyRequestsCode) TooManyRequestsCode { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptTooManyRequestsType returns new OptTooManyRequestsType with value set to v. +func NewOptTooManyRequestsType(v TooManyRequestsType) OptTooManyRequestsType { + return OptTooManyRequestsType{ + Value: v, + Set: true, + } +} + +// OptTooManyRequestsType is optional TooManyRequestsType. +type OptTooManyRequestsType struct { + Value TooManyRequestsType + Set bool +} + +// IsSet returns true if OptTooManyRequestsType was set. +func (o OptTooManyRequestsType) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptTooManyRequestsType) Reset() { + var v TooManyRequestsType + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptTooManyRequestsType) SetTo(v TooManyRequestsType) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptTooManyRequestsType) Get() (v TooManyRequestsType, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptTooManyRequestsType) Or(d TooManyRequestsType) TooManyRequestsType { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptTransferDataPaymentPlatformFeeAmount returns new OptTransferDataPaymentPlatformFeeAmount with value set to v. +func NewOptTransferDataPaymentPlatformFeeAmount(v TransferDataPaymentPlatformFeeAmount) OptTransferDataPaymentPlatformFeeAmount { + return OptTransferDataPaymentPlatformFeeAmount{ + Value: v, + Set: true, + } +} + +// OptTransferDataPaymentPlatformFeeAmount is optional TransferDataPaymentPlatformFeeAmount. +type OptTransferDataPaymentPlatformFeeAmount struct { + Value TransferDataPaymentPlatformFeeAmount + Set bool +} + +// IsSet returns true if OptTransferDataPaymentPlatformFeeAmount was set. +func (o OptTransferDataPaymentPlatformFeeAmount) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptTransferDataPaymentPlatformFeeAmount) Reset() { + var v TransferDataPaymentPlatformFeeAmount + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptTransferDataPaymentPlatformFeeAmount) SetTo(v TransferDataPaymentPlatformFeeAmount) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptTransferDataPaymentPlatformFeeAmount) Get() (v TransferDataPaymentPlatformFeeAmount, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptTransferDataPaymentPlatformFeeAmount) Or(d TransferDataPaymentPlatformFeeAmount) TransferDataPaymentPlatformFeeAmount { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptTransferDataPlatformFeeAmount returns new OptTransferDataPlatformFeeAmount with value set to v. +func NewOptTransferDataPlatformFeeAmount(v TransferDataPlatformFeeAmount) OptTransferDataPlatformFeeAmount { + return OptTransferDataPlatformFeeAmount{ + Value: v, + Set: true, + } +} + +// OptTransferDataPlatformFeeAmount is optional TransferDataPlatformFeeAmount. +type OptTransferDataPlatformFeeAmount struct { + Value TransferDataPlatformFeeAmount + Set bool +} + +// IsSet returns true if OptTransferDataPlatformFeeAmount was set. +func (o OptTransferDataPlatformFeeAmount) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptTransferDataPlatformFeeAmount) Reset() { + var v TransferDataPlatformFeeAmount + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptTransferDataPlatformFeeAmount) SetTo(v TransferDataPlatformFeeAmount) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptTransferDataPlatformFeeAmount) Get() (v TransferDataPlatformFeeAmount, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptTransferDataPlatformFeeAmount) Or(d TransferDataPlatformFeeAmount) TransferDataPlatformFeeAmount { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptTransferPlatformFeeAmount returns new OptTransferPlatformFeeAmount with value set to v. +func NewOptTransferPlatformFeeAmount(v TransferPlatformFeeAmount) OptTransferPlatformFeeAmount { + return OptTransferPlatformFeeAmount{ + Value: v, + Set: true, + } +} + +// OptTransferPlatformFeeAmount is optional TransferPlatformFeeAmount. +type OptTransferPlatformFeeAmount struct { + Value TransferPlatformFeeAmount + Set bool +} + +// IsSet returns true if OptTransferPlatformFeeAmount was set. +func (o OptTransferPlatformFeeAmount) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptTransferPlatformFeeAmount) Reset() { + var v TransferPlatformFeeAmount + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptTransferPlatformFeeAmount) SetTo(v TransferPlatformFeeAmount) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptTransferPlatformFeeAmount) Get() (v TransferPlatformFeeAmount, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptTransferPlatformFeeAmount) Or(d TransferPlatformFeeAmount) TransferPlatformFeeAmount { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// Payment object (Payment) contains the relevant information about the payment. +// Ref: #/components/schemas/Payment +type Payment struct { + ID PaymentId `json:"id"` + Status PaymentStatus `json:"status"` + Amount PaymentAmount `json:"amount"` + IncomeAmount OptPaymentIncomeAmount `json:"income_amount"` + Description OptString `json:"description"` + // Payment recipient. + Recipient PaymentRecipient `json:"recipient"` + PaymentMethod OptPaymentPaymentMethod `json:"payment_method"` + // Time of payment capture, based on UTC: https://en.wikipedia.org/wiki/Coordinated_Universal_Time + // and specified in the ISO 8601: https://en.wikipedia.org/wiki/ISO_8601 format. + CapturedAt OptDateTime `json:"captured_at"` + // Time of order creation, based on UTC: https://en.wikipedia.org/wiki/Coordinated_Universal_Time and + // specified in the ISO 8601: https://en.wikipedia.org/wiki/ISO_8601 format. Example: + // 2017-11-03T11:52:31.827Z. + CreatedAt time.Time `json:"created_at"` + // The period during which you can cancel or capture a payment for free. The payment with the + // waiting_for_capture status will be automatically canceled at the specified time. Based on UTC: + // https://en.wikipedia.org/wiki/Coordinated_Universal_Time and specified in the ISO 8601: https://en. + // wikipedia.org/wiki/ISO_8601 format. Example: 2017-11-03T11:52:31.827Z. + ExpiresAt OptDateTime `json:"expires_at"` + Confirmation OptPaymentConfirmation `json:"confirmation"` + Test Test `json:"test"` + RefundedAmount OptPaymentRefundedAmount `json:"refunded_amount"` + // The attribute of a paid order. + Paid bool `json:"paid"` + // Availability of the option to make a refund via API. + Refundable bool `json:"refundable"` + ReceiptRegistration OptPaymentReceiptRegistration `json:"receipt_registration"` + Metadata OptMetadata `json:"metadata"` + CancellationDetails OptPaymentCancellationDetails `json:"cancellation_details"` + AuthorizationDetails OptAuthorizationDetails `json:"authorization_details"` + // Information about money distribution: the amounts of transfers and the stores to be transferred to. + // Specified if you use Split payments: https://yookassa. + // ru/developers/solutions-for-platforms/split-payments/basics. + Transfers []Transfer `json:"transfers"` + Deal OptPaymentDeal `json:"deal"` + MerchantCustomerID OptString `json:"merchant_customer_id"` + // Данные о выставленном счете, в рамках которого + // проведен платеж. + InvoiceDetails OptPaymentInvoiceDetails `json:"invoice_details"` +} + +// GetID returns the value of ID. +func (s *Payment) GetID() PaymentId { + return s.ID +} + +// GetStatus returns the value of Status. +func (s *Payment) GetStatus() PaymentStatus { + return s.Status +} + +// GetAmount returns the value of Amount. +func (s *Payment) GetAmount() PaymentAmount { + return s.Amount +} + +// GetIncomeAmount returns the value of IncomeAmount. +func (s *Payment) GetIncomeAmount() OptPaymentIncomeAmount { + return s.IncomeAmount +} + +// GetDescription returns the value of Description. +func (s *Payment) GetDescription() OptString { + return s.Description +} + +// GetRecipient returns the value of Recipient. +func (s *Payment) GetRecipient() PaymentRecipient { + return s.Recipient +} + +// GetPaymentMethod returns the value of PaymentMethod. +func (s *Payment) GetPaymentMethod() OptPaymentPaymentMethod { + return s.PaymentMethod +} + +// GetCapturedAt returns the value of CapturedAt. +func (s *Payment) GetCapturedAt() OptDateTime { + return s.CapturedAt +} + +// GetCreatedAt returns the value of CreatedAt. +func (s *Payment) GetCreatedAt() time.Time { + return s.CreatedAt +} + +// GetExpiresAt returns the value of ExpiresAt. +func (s *Payment) GetExpiresAt() OptDateTime { + return s.ExpiresAt +} + +// GetConfirmation returns the value of Confirmation. +func (s *Payment) GetConfirmation() OptPaymentConfirmation { + return s.Confirmation +} + +// GetTest returns the value of Test. +func (s *Payment) GetTest() Test { + return s.Test +} + +// GetRefundedAmount returns the value of RefundedAmount. +func (s *Payment) GetRefundedAmount() OptPaymentRefundedAmount { + return s.RefundedAmount +} + +// GetPaid returns the value of Paid. +func (s *Payment) GetPaid() bool { + return s.Paid +} + +// GetRefundable returns the value of Refundable. +func (s *Payment) GetRefundable() bool { + return s.Refundable +} + +// GetReceiptRegistration returns the value of ReceiptRegistration. +func (s *Payment) GetReceiptRegistration() OptPaymentReceiptRegistration { + return s.ReceiptRegistration +} + +// GetMetadata returns the value of Metadata. +func (s *Payment) GetMetadata() OptMetadata { + return s.Metadata +} + +// GetCancellationDetails returns the value of CancellationDetails. +func (s *Payment) GetCancellationDetails() OptPaymentCancellationDetails { + return s.CancellationDetails +} + +// GetAuthorizationDetails returns the value of AuthorizationDetails. +func (s *Payment) GetAuthorizationDetails() OptAuthorizationDetails { + return s.AuthorizationDetails +} + +// GetTransfers returns the value of Transfers. +func (s *Payment) GetTransfers() []Transfer { + return s.Transfers +} + +// GetDeal returns the value of Deal. +func (s *Payment) GetDeal() OptPaymentDeal { + return s.Deal +} + +// GetMerchantCustomerID returns the value of MerchantCustomerID. +func (s *Payment) GetMerchantCustomerID() OptString { + return s.MerchantCustomerID +} + +// GetInvoiceDetails returns the value of InvoiceDetails. +func (s *Payment) GetInvoiceDetails() OptPaymentInvoiceDetails { + return s.InvoiceDetails +} + +// SetID sets the value of ID. +func (s *Payment) SetID(val PaymentId) { + s.ID = val +} + +// SetStatus sets the value of Status. +func (s *Payment) SetStatus(val PaymentStatus) { + s.Status = val +} + +// SetAmount sets the value of Amount. +func (s *Payment) SetAmount(val PaymentAmount) { + s.Amount = val +} + +// SetIncomeAmount sets the value of IncomeAmount. +func (s *Payment) SetIncomeAmount(val OptPaymentIncomeAmount) { + s.IncomeAmount = val +} + +// SetDescription sets the value of Description. +func (s *Payment) SetDescription(val OptString) { + s.Description = val +} + +// SetRecipient sets the value of Recipient. +func (s *Payment) SetRecipient(val PaymentRecipient) { + s.Recipient = val +} + +// SetPaymentMethod sets the value of PaymentMethod. +func (s *Payment) SetPaymentMethod(val OptPaymentPaymentMethod) { + s.PaymentMethod = val +} + +// SetCapturedAt sets the value of CapturedAt. +func (s *Payment) SetCapturedAt(val OptDateTime) { + s.CapturedAt = val +} + +// SetCreatedAt sets the value of CreatedAt. +func (s *Payment) SetCreatedAt(val time.Time) { + s.CreatedAt = val +} + +// SetExpiresAt sets the value of ExpiresAt. +func (s *Payment) SetExpiresAt(val OptDateTime) { + s.ExpiresAt = val +} + +// SetConfirmation sets the value of Confirmation. +func (s *Payment) SetConfirmation(val OptPaymentConfirmation) { + s.Confirmation = val +} + +// SetTest sets the value of Test. +func (s *Payment) SetTest(val Test) { + s.Test = val +} + +// SetRefundedAmount sets the value of RefundedAmount. +func (s *Payment) SetRefundedAmount(val OptPaymentRefundedAmount) { + s.RefundedAmount = val +} + +// SetPaid sets the value of Paid. +func (s *Payment) SetPaid(val bool) { + s.Paid = val +} + +// SetRefundable sets the value of Refundable. +func (s *Payment) SetRefundable(val bool) { + s.Refundable = val +} + +// SetReceiptRegistration sets the value of ReceiptRegistration. +func (s *Payment) SetReceiptRegistration(val OptPaymentReceiptRegistration) { + s.ReceiptRegistration = val +} + +// SetMetadata sets the value of Metadata. +func (s *Payment) SetMetadata(val OptMetadata) { + s.Metadata = val +} + +// SetCancellationDetails sets the value of CancellationDetails. +func (s *Payment) SetCancellationDetails(val OptPaymentCancellationDetails) { + s.CancellationDetails = val +} + +// SetAuthorizationDetails sets the value of AuthorizationDetails. +func (s *Payment) SetAuthorizationDetails(val OptAuthorizationDetails) { + s.AuthorizationDetails = val +} + +// SetTransfers sets the value of Transfers. +func (s *Payment) SetTransfers(val []Transfer) { + s.Transfers = val +} + +// SetDeal sets the value of Deal. +func (s *Payment) SetDeal(val OptPaymentDeal) { + s.Deal = val +} + +// SetMerchantCustomerID sets the value of MerchantCustomerID. +func (s *Payment) SetMerchantCustomerID(val OptString) { + s.MerchantCustomerID = val +} + +// SetInvoiceDetails sets the value of InvoiceDetails. +func (s *Payment) SetInvoiceDetails(val OptPaymentInvoiceDetails) { + s.InvoiceDetails = val +} + +func (*Payment) paymentsPaymentIDCancelPostRes() {} +func (*Payment) paymentsPaymentIDCapturePostRes() {} +func (*Payment) paymentsPaymentIDGetRes() {} +func (*Payment) paymentsPostRes() {} + +// Сумма в выбранной валюте. +type PaymentAmount struct { + // Сумма в выбранной валюте. Всегда дробное значение. + // Разделитель дробной части — точка, разделитель тысяч + // отсутствует. Количество знаков после точки зависит + // от выбранной валюты. Пример: 1000.00. + Value string `json:"value"` + Currency CurrencyCode `json:"currency"` +} + +// GetValue returns the value of Value. +func (s *PaymentAmount) GetValue() string { + return s.Value +} + +// GetCurrency returns the value of Currency. +func (s *PaymentAmount) GetCurrency() CurrencyCode { + return s.Currency +} + +// SetValue sets the value of Value. +func (s *PaymentAmount) SetValue(val string) { + s.Value = val +} + +// SetCurrency sets the value of Currency. +func (s *PaymentAmount) SetCurrency(val CurrencyCode) { + s.Currency = val +} + +// Commentary to the canceled status: who and why canceled the payment. More about canceled payments: +// https://yookassa.ru/developers/payment-acceptance/after-the-payment/declined-payments. +// Ref: #/components/schemas/PaymentCancellationDetails +type PaymentCancellationDetails struct { + // The participant of the payment process that made the decision to cancel the payment. Possible + // values are yoo_money, payment_network, and merchant. More about initiators of payment cancelation: + // https://yookassa. + // ru/developers/payment-acceptance/after-the-payment/declined-payments#cancellation-details-party. + Party PaymentCancellationDetailsParty `json:"party"` + // Reason behind the cancelation. The list and descriptions of possible values: https://yookassa. + // ru/developers/payment-acceptance/after-the-payment/declined-payments#cancellation-details-reason. + Reason PaymentCancellationDetailsReason `json:"reason"` +} + +// GetParty returns the value of Party. +func (s *PaymentCancellationDetails) GetParty() PaymentCancellationDetailsParty { + return s.Party +} + +// GetReason returns the value of Reason. +func (s *PaymentCancellationDetails) GetReason() PaymentCancellationDetailsReason { + return s.Reason +} + +// SetParty sets the value of Party. +func (s *PaymentCancellationDetails) SetParty(val PaymentCancellationDetailsParty) { + s.Party = val +} + +// SetReason sets the value of Reason. +func (s *PaymentCancellationDetails) SetReason(val PaymentCancellationDetailsReason) { + s.Reason = val +} + +// The participant of the payment process that made the decision to cancel the payment. Possible +// values are yoo_money, payment_network, and merchant. More about initiators of payment cancelation: +// https://yookassa. +// ru/developers/payment-acceptance/after-the-payment/declined-payments#cancellation-details-party. +type PaymentCancellationDetailsParty string + +const ( + PaymentCancellationDetailsPartyYooMoney PaymentCancellationDetailsParty = "yoo_money" + PaymentCancellationDetailsPartyPaymentNetwork PaymentCancellationDetailsParty = "payment_network" + PaymentCancellationDetailsPartyMerchant PaymentCancellationDetailsParty = "merchant" +) + +// AllValues returns all PaymentCancellationDetailsParty values. +func (PaymentCancellationDetailsParty) AllValues() []PaymentCancellationDetailsParty { + return []PaymentCancellationDetailsParty{ + PaymentCancellationDetailsPartyYooMoney, + PaymentCancellationDetailsPartyPaymentNetwork, + PaymentCancellationDetailsPartyMerchant, + } +} + +// MarshalText implements encoding.TextMarshaler. +func (s PaymentCancellationDetailsParty) MarshalText() ([]byte, error) { + switch s { + case PaymentCancellationDetailsPartyYooMoney: + return []byte(s), nil + case PaymentCancellationDetailsPartyPaymentNetwork: + return []byte(s), nil + case PaymentCancellationDetailsPartyMerchant: + return []byte(s), nil + default: + return nil, errors.Errorf("invalid value: %q", s) + } +} + +// UnmarshalText implements encoding.TextUnmarshaler. +func (s *PaymentCancellationDetailsParty) UnmarshalText(data []byte) error { + switch PaymentCancellationDetailsParty(data) { + case PaymentCancellationDetailsPartyYooMoney: + *s = PaymentCancellationDetailsPartyYooMoney + return nil + case PaymentCancellationDetailsPartyPaymentNetwork: + *s = PaymentCancellationDetailsPartyPaymentNetwork + return nil + case PaymentCancellationDetailsPartyMerchant: + *s = PaymentCancellationDetailsPartyMerchant + return nil + default: + return errors.Errorf("invalid value: %q", data) + } +} + +// Reason behind the cancelation. The list and descriptions of possible values: https://yookassa. +// ru/developers/payment-acceptance/after-the-payment/declined-payments#cancellation-details-reason. +type PaymentCancellationDetailsReason string + +const ( + PaymentCancellationDetailsReason3dSecureFailed PaymentCancellationDetailsReason = "3d_secure_failed" + PaymentCancellationDetailsReasonCallIssuer PaymentCancellationDetailsReason = "call_issuer" + PaymentCancellationDetailsReasonCardExpired PaymentCancellationDetailsReason = "card_expired" + PaymentCancellationDetailsReasonPaymentMethodLimitExceeded PaymentCancellationDetailsReason = "payment_method_limit_exceeded" + PaymentCancellationDetailsReasonPaymentMethodRestricted PaymentCancellationDetailsReason = "payment_method_restricted" + PaymentCancellationDetailsReasonCountryForbidden PaymentCancellationDetailsReason = "country_forbidden" + PaymentCancellationDetailsReasonGeneralDecline PaymentCancellationDetailsReason = "general_decline" + PaymentCancellationDetailsReasonFraudSuspected PaymentCancellationDetailsReason = "fraud_suspected" + PaymentCancellationDetailsReasonIdentificationRequired PaymentCancellationDetailsReason = "identification_required" + PaymentCancellationDetailsReasonInsufficientFunds PaymentCancellationDetailsReason = "insufficient_funds" + PaymentCancellationDetailsReasonInvalidCardNumber PaymentCancellationDetailsReason = "invalid_card_number" + PaymentCancellationDetailsReasonInvalidCsc PaymentCancellationDetailsReason = "invalid_csc" + PaymentCancellationDetailsReasonIssuerUnavailable PaymentCancellationDetailsReason = "issuer_unavailable" + PaymentCancellationDetailsReasonCanceledByMerchant PaymentCancellationDetailsReason = "canceled_by_merchant" + PaymentCancellationDetailsReasonPermissionRevoked PaymentCancellationDetailsReason = "permission_revoked" + PaymentCancellationDetailsReasonInternalTimeout PaymentCancellationDetailsReason = "internal_timeout" + PaymentCancellationDetailsReasonExpiredOnConfirmation PaymentCancellationDetailsReason = "expired_on_confirmation" + PaymentCancellationDetailsReasonExpiredOnCapture PaymentCancellationDetailsReason = "expired_on_capture" + PaymentCancellationDetailsReasonUnsupportedMobileOperator PaymentCancellationDetailsReason = "unsupported_mobile_operator" + PaymentCancellationDetailsReasonDealExpired PaymentCancellationDetailsReason = "deal_expired" +) + +// AllValues returns all PaymentCancellationDetailsReason values. +func (PaymentCancellationDetailsReason) AllValues() []PaymentCancellationDetailsReason { + return []PaymentCancellationDetailsReason{ + PaymentCancellationDetailsReason3dSecureFailed, + PaymentCancellationDetailsReasonCallIssuer, + PaymentCancellationDetailsReasonCardExpired, + PaymentCancellationDetailsReasonPaymentMethodLimitExceeded, + PaymentCancellationDetailsReasonPaymentMethodRestricted, + PaymentCancellationDetailsReasonCountryForbidden, + PaymentCancellationDetailsReasonGeneralDecline, + PaymentCancellationDetailsReasonFraudSuspected, + PaymentCancellationDetailsReasonIdentificationRequired, + PaymentCancellationDetailsReasonInsufficientFunds, + PaymentCancellationDetailsReasonInvalidCardNumber, + PaymentCancellationDetailsReasonInvalidCsc, + PaymentCancellationDetailsReasonIssuerUnavailable, + PaymentCancellationDetailsReasonCanceledByMerchant, + PaymentCancellationDetailsReasonPermissionRevoked, + PaymentCancellationDetailsReasonInternalTimeout, + PaymentCancellationDetailsReasonExpiredOnConfirmation, + PaymentCancellationDetailsReasonExpiredOnCapture, + PaymentCancellationDetailsReasonUnsupportedMobileOperator, + PaymentCancellationDetailsReasonDealExpired, + } +} + +// MarshalText implements encoding.TextMarshaler. +func (s PaymentCancellationDetailsReason) MarshalText() ([]byte, error) { + switch s { + case PaymentCancellationDetailsReason3dSecureFailed: + return []byte(s), nil + case PaymentCancellationDetailsReasonCallIssuer: + return []byte(s), nil + case PaymentCancellationDetailsReasonCardExpired: + return []byte(s), nil + case PaymentCancellationDetailsReasonPaymentMethodLimitExceeded: + return []byte(s), nil + case PaymentCancellationDetailsReasonPaymentMethodRestricted: + return []byte(s), nil + case PaymentCancellationDetailsReasonCountryForbidden: + return []byte(s), nil + case PaymentCancellationDetailsReasonGeneralDecline: + return []byte(s), nil + case PaymentCancellationDetailsReasonFraudSuspected: + return []byte(s), nil + case PaymentCancellationDetailsReasonIdentificationRequired: + return []byte(s), nil + case PaymentCancellationDetailsReasonInsufficientFunds: + return []byte(s), nil + case PaymentCancellationDetailsReasonInvalidCardNumber: + return []byte(s), nil + case PaymentCancellationDetailsReasonInvalidCsc: + return []byte(s), nil + case PaymentCancellationDetailsReasonIssuerUnavailable: + return []byte(s), nil + case PaymentCancellationDetailsReasonCanceledByMerchant: + return []byte(s), nil + case PaymentCancellationDetailsReasonPermissionRevoked: + return []byte(s), nil + case PaymentCancellationDetailsReasonInternalTimeout: + return []byte(s), nil + case PaymentCancellationDetailsReasonExpiredOnConfirmation: + return []byte(s), nil + case PaymentCancellationDetailsReasonExpiredOnCapture: + return []byte(s), nil + case PaymentCancellationDetailsReasonUnsupportedMobileOperator: + return []byte(s), nil + case PaymentCancellationDetailsReasonDealExpired: + return []byte(s), nil + default: + return nil, errors.Errorf("invalid value: %q", s) + } +} + +// UnmarshalText implements encoding.TextUnmarshaler. +func (s *PaymentCancellationDetailsReason) UnmarshalText(data []byte) error { + switch PaymentCancellationDetailsReason(data) { + case PaymentCancellationDetailsReason3dSecureFailed: + *s = PaymentCancellationDetailsReason3dSecureFailed + return nil + case PaymentCancellationDetailsReasonCallIssuer: + *s = PaymentCancellationDetailsReasonCallIssuer + return nil + case PaymentCancellationDetailsReasonCardExpired: + *s = PaymentCancellationDetailsReasonCardExpired + return nil + case PaymentCancellationDetailsReasonPaymentMethodLimitExceeded: + *s = PaymentCancellationDetailsReasonPaymentMethodLimitExceeded + return nil + case PaymentCancellationDetailsReasonPaymentMethodRestricted: + *s = PaymentCancellationDetailsReasonPaymentMethodRestricted + return nil + case PaymentCancellationDetailsReasonCountryForbidden: + *s = PaymentCancellationDetailsReasonCountryForbidden + return nil + case PaymentCancellationDetailsReasonGeneralDecline: + *s = PaymentCancellationDetailsReasonGeneralDecline + return nil + case PaymentCancellationDetailsReasonFraudSuspected: + *s = PaymentCancellationDetailsReasonFraudSuspected + return nil + case PaymentCancellationDetailsReasonIdentificationRequired: + *s = PaymentCancellationDetailsReasonIdentificationRequired + return nil + case PaymentCancellationDetailsReasonInsufficientFunds: + *s = PaymentCancellationDetailsReasonInsufficientFunds + return nil + case PaymentCancellationDetailsReasonInvalidCardNumber: + *s = PaymentCancellationDetailsReasonInvalidCardNumber + return nil + case PaymentCancellationDetailsReasonInvalidCsc: + *s = PaymentCancellationDetailsReasonInvalidCsc + return nil + case PaymentCancellationDetailsReasonIssuerUnavailable: + *s = PaymentCancellationDetailsReasonIssuerUnavailable + return nil + case PaymentCancellationDetailsReasonCanceledByMerchant: + *s = PaymentCancellationDetailsReasonCanceledByMerchant + return nil + case PaymentCancellationDetailsReasonPermissionRevoked: + *s = PaymentCancellationDetailsReasonPermissionRevoked + return nil + case PaymentCancellationDetailsReasonInternalTimeout: + *s = PaymentCancellationDetailsReasonInternalTimeout + return nil + case PaymentCancellationDetailsReasonExpiredOnConfirmation: + *s = PaymentCancellationDetailsReasonExpiredOnConfirmation + return nil + case PaymentCancellationDetailsReasonExpiredOnCapture: + *s = PaymentCancellationDetailsReasonExpiredOnCapture + return nil + case PaymentCancellationDetailsReasonUnsupportedMobileOperator: + *s = PaymentCancellationDetailsReasonUnsupportedMobileOperator + return nil + case PaymentCancellationDetailsReasonDealExpired: + *s = PaymentCancellationDetailsReasonDealExpired + return nil + default: + return errors.Errorf("invalid value: %q", data) + } +} + +// PaymentConfirmation represents sum type. +type PaymentConfirmation struct { + Type PaymentConfirmationType // switch on this field + ConfirmationRedirect ConfirmationRedirect + Confirmation Confirmation + ConfirmationQr ConfirmationQr + ConfirmationEmbedded ConfirmationEmbedded + ConfirmationMobileApplication ConfirmationMobileApplication +} + +// PaymentConfirmationType is oneOf type of PaymentConfirmation. +type PaymentConfirmationType string + +// Possible values for PaymentConfirmationType. +const ( + ConfirmationRedirectPaymentConfirmation PaymentConfirmationType = "ConfirmationRedirect" + ConfirmationPaymentConfirmation PaymentConfirmationType = "Confirmation" + ConfirmationQrPaymentConfirmation PaymentConfirmationType = "ConfirmationQr" + ConfirmationEmbeddedPaymentConfirmation PaymentConfirmationType = "ConfirmationEmbedded" + ConfirmationMobileApplicationPaymentConfirmation PaymentConfirmationType = "ConfirmationMobileApplication" +) + +// IsConfirmationRedirect reports whether PaymentConfirmation is ConfirmationRedirect. +func (s PaymentConfirmation) IsConfirmationRedirect() bool { + return s.Type == ConfirmationRedirectPaymentConfirmation +} + +// IsConfirmation reports whether PaymentConfirmation is Confirmation. +func (s PaymentConfirmation) IsConfirmation() bool { return s.Type == ConfirmationPaymentConfirmation } + +// IsConfirmationQr reports whether PaymentConfirmation is ConfirmationQr. +func (s PaymentConfirmation) IsConfirmationQr() bool { + return s.Type == ConfirmationQrPaymentConfirmation +} + +// IsConfirmationEmbedded reports whether PaymentConfirmation is ConfirmationEmbedded. +func (s PaymentConfirmation) IsConfirmationEmbedded() bool { + return s.Type == ConfirmationEmbeddedPaymentConfirmation +} + +// IsConfirmationMobileApplication reports whether PaymentConfirmation is ConfirmationMobileApplication. +func (s PaymentConfirmation) IsConfirmationMobileApplication() bool { + return s.Type == ConfirmationMobileApplicationPaymentConfirmation +} + +// SetConfirmationRedirect sets PaymentConfirmation to ConfirmationRedirect. +func (s *PaymentConfirmation) SetConfirmationRedirect(v ConfirmationRedirect) { + s.Type = ConfirmationRedirectPaymentConfirmation + s.ConfirmationRedirect = v +} + +// GetConfirmationRedirect returns ConfirmationRedirect and true boolean if PaymentConfirmation is ConfirmationRedirect. +func (s PaymentConfirmation) GetConfirmationRedirect() (v ConfirmationRedirect, ok bool) { + if !s.IsConfirmationRedirect() { + return v, false + } + return s.ConfirmationRedirect, true +} + +// NewConfirmationRedirectPaymentConfirmation returns new PaymentConfirmation from ConfirmationRedirect. +func NewConfirmationRedirectPaymentConfirmation(v ConfirmationRedirect) PaymentConfirmation { + var s PaymentConfirmation + s.SetConfirmationRedirect(v) + return s +} + +// SetConfirmation sets PaymentConfirmation to Confirmation. +func (s *PaymentConfirmation) SetConfirmation(v Confirmation) { + s.Type = ConfirmationPaymentConfirmation + s.Confirmation = v +} + +// GetConfirmation returns Confirmation and true boolean if PaymentConfirmation is Confirmation. +func (s PaymentConfirmation) GetConfirmation() (v Confirmation, ok bool) { + if !s.IsConfirmation() { + return v, false + } + return s.Confirmation, true +} + +// NewConfirmationPaymentConfirmation returns new PaymentConfirmation from Confirmation. +func NewConfirmationPaymentConfirmation(v Confirmation) PaymentConfirmation { + var s PaymentConfirmation + s.SetConfirmation(v) + return s +} + +// SetConfirmationQr sets PaymentConfirmation to ConfirmationQr. +func (s *PaymentConfirmation) SetConfirmationQr(v ConfirmationQr) { + s.Type = ConfirmationQrPaymentConfirmation + s.ConfirmationQr = v +} + +// GetConfirmationQr returns ConfirmationQr and true boolean if PaymentConfirmation is ConfirmationQr. +func (s PaymentConfirmation) GetConfirmationQr() (v ConfirmationQr, ok bool) { + if !s.IsConfirmationQr() { + return v, false + } + return s.ConfirmationQr, true +} + +// NewConfirmationQrPaymentConfirmation returns new PaymentConfirmation from ConfirmationQr. +func NewConfirmationQrPaymentConfirmation(v ConfirmationQr) PaymentConfirmation { + var s PaymentConfirmation + s.SetConfirmationQr(v) + return s +} + +// SetConfirmationEmbedded sets PaymentConfirmation to ConfirmationEmbedded. +func (s *PaymentConfirmation) SetConfirmationEmbedded(v ConfirmationEmbedded) { + s.Type = ConfirmationEmbeddedPaymentConfirmation + s.ConfirmationEmbedded = v +} + +// GetConfirmationEmbedded returns ConfirmationEmbedded and true boolean if PaymentConfirmation is ConfirmationEmbedded. +func (s PaymentConfirmation) GetConfirmationEmbedded() (v ConfirmationEmbedded, ok bool) { + if !s.IsConfirmationEmbedded() { + return v, false + } + return s.ConfirmationEmbedded, true +} + +// NewConfirmationEmbeddedPaymentConfirmation returns new PaymentConfirmation from ConfirmationEmbedded. +func NewConfirmationEmbeddedPaymentConfirmation(v ConfirmationEmbedded) PaymentConfirmation { + var s PaymentConfirmation + s.SetConfirmationEmbedded(v) + return s +} + +// SetConfirmationMobileApplication sets PaymentConfirmation to ConfirmationMobileApplication. +func (s *PaymentConfirmation) SetConfirmationMobileApplication(v ConfirmationMobileApplication) { + s.Type = ConfirmationMobileApplicationPaymentConfirmation + s.ConfirmationMobileApplication = v +} + +// GetConfirmationMobileApplication returns ConfirmationMobileApplication and true boolean if PaymentConfirmation is ConfirmationMobileApplication. +func (s PaymentConfirmation) GetConfirmationMobileApplication() (v ConfirmationMobileApplication, ok bool) { + if !s.IsConfirmationMobileApplication() { + return v, false + } + return s.ConfirmationMobileApplication, true +} + +// NewConfirmationMobileApplicationPaymentConfirmation returns new PaymentConfirmation from ConfirmationMobileApplication. +func NewConfirmationMobileApplicationPaymentConfirmation(v ConfirmationMobileApplication) PaymentConfirmation { + var s PaymentConfirmation + s.SetConfirmationMobileApplication(v) + return s +} + +type PaymentDeal struct { + ID DealId `json:"id"` + Settlements SettlementPaymentArray `json:"settlements"` +} + +// GetID returns the value of ID. +func (s *PaymentDeal) GetID() DealId { + return s.ID +} + +// GetSettlements returns the value of Settlements. +func (s *PaymentDeal) GetSettlements() SettlementPaymentArray { + return s.Settlements +} + +// SetID sets the value of ID. +func (s *PaymentDeal) SetID(val DealId) { + s.ID = val +} + +// SetSettlements sets the value of Settlements. +func (s *PaymentDeal) SetSettlements(val SettlementPaymentArray) { + s.Settlements = val +} + +type PaymentId string + +// Сумма в выбранной валюте. +type PaymentIncomeAmount struct { + // Сумма в выбранной валюте. Всегда дробное значение. + // Разделитель дробной части — точка, разделитель тысяч + // отсутствует. Количество знаков после точки зависит + // от выбранной валюты. Пример: 1000.00. + Value string `json:"value"` + Currency CurrencyCode `json:"currency"` +} + +// GetValue returns the value of Value. +func (s *PaymentIncomeAmount) GetValue() string { + return s.Value +} + +// GetCurrency returns the value of Currency. +func (s *PaymentIncomeAmount) GetCurrency() CurrencyCode { + return s.Currency +} + +// SetValue sets the value of Value. +func (s *PaymentIncomeAmount) SetValue(val string) { + s.Value = val +} + +// SetCurrency sets the value of Currency. +func (s *PaymentIncomeAmount) SetCurrency(val CurrencyCode) { + s.Currency = val +} + +// Данные о выставленном счете, в рамках которого +// проведен платеж. +type PaymentInvoiceDetails struct { + ID OptInvoiceId `json:"id"` +} + +// GetID returns the value of ID. +func (s *PaymentInvoiceDetails) GetID() OptInvoiceId { + return s.ID +} + +// SetID sets the value of ID. +func (s *PaymentInvoiceDetails) SetID(val OptInvoiceId) { + s.ID = val +} + +// Список платежей. Платежи отсортированы по времени +// создания в порядке убывания (от новых к старым). Если +// результатов больше, чем задано в limit, список будет +// выводиться фрагментами. В этом случае в ответе на +// запрос вернется фрагмент списка и параметр next_cursor с +// указателем на следующий фрагмент. +// Ref: #/components/schemas/PaymentList +type PaymentList struct { + // Формат выдачи результатов запроса. Возможное + // значение: list (список). + Type PaymentListType `json:"type"` + Items []Payment `json:"items"` + NextCursor OptNextCursor `json:"next_cursor"` +} + +// GetType returns the value of Type. +func (s *PaymentList) GetType() PaymentListType { + return s.Type +} + +// GetItems returns the value of Items. +func (s *PaymentList) GetItems() []Payment { + return s.Items +} + +// GetNextCursor returns the value of NextCursor. +func (s *PaymentList) GetNextCursor() OptNextCursor { + return s.NextCursor +} + +// SetType sets the value of Type. +func (s *PaymentList) SetType(val PaymentListType) { + s.Type = val +} + +// SetItems sets the value of Items. +func (s *PaymentList) SetItems(val []Payment) { + s.Items = val +} + +// SetNextCursor sets the value of NextCursor. +func (s *PaymentList) SetNextCursor(val OptNextCursor) { + s.NextCursor = val +} + +func (*PaymentList) paymentsGetRes() {} + +// Формат выдачи результатов запроса. Возможное +// значение: list (список). +type PaymentListType string + +const ( + PaymentListTypeList PaymentListType = "list" +) + +// AllValues returns all PaymentListType values. +func (PaymentListType) AllValues() []PaymentListType { + return []PaymentListType{ + PaymentListTypeList, + } +} + +// MarshalText implements encoding.TextMarshaler. +func (s PaymentListType) MarshalText() ([]byte, error) { + switch s { + case PaymentListTypeList: + return []byte(s), nil + default: + return nil, errors.Errorf("invalid value: %q", s) + } +} + +// UnmarshalText implements encoding.TextUnmarshaler. +func (s *PaymentListType) UnmarshalText(data []byte) error { + switch PaymentListType(data) { + case PaymentListTypeList: + *s = PaymentListTypeList + return nil + default: + return errors.Errorf("invalid value: %q", data) + } +} + +// Merged schema. +// Ref: #/components/schemas/PaymentMethodAlfabank +type PaymentMethodAlfabank struct { + Type PaymentMethodType `json:"type"` + // Payment method ID. + ID string `json:"id"` + // Признак сохранения способа оплаты для автоплатежей: + // https://yookassa. + // ru/developers/payment-acceptance/scenario-extensions/recurring-payments/pay-with-saved. + // Возможные значения: * true — способ оплаты сохранен для + // автоплатежей и выплат; * false — способ оплаты не + // сохранен. + Saved bool `json:"saved"` + Status PaymentMethodAlfabankStatus `json:"status"` + Title OptPaymentMethodTitle `json:"title"` + // Логин пользователя в Альфа-Клике (привязанный + // телефон или дополнительный логин). + Login OptString `json:"login"` +} + +// GetType returns the value of Type. +func (s *PaymentMethodAlfabank) GetType() PaymentMethodType { + return s.Type +} + +// GetID returns the value of ID. +func (s *PaymentMethodAlfabank) GetID() string { + return s.ID +} + +// GetSaved returns the value of Saved. +func (s *PaymentMethodAlfabank) GetSaved() bool { + return s.Saved +} + +// GetStatus returns the value of Status. +func (s *PaymentMethodAlfabank) GetStatus() PaymentMethodAlfabankStatus { + return s.Status +} + +// GetTitle returns the value of Title. +func (s *PaymentMethodAlfabank) GetTitle() OptPaymentMethodTitle { + return s.Title +} + +// GetLogin returns the value of Login. +func (s *PaymentMethodAlfabank) GetLogin() OptString { + return s.Login +} + +// SetType sets the value of Type. +func (s *PaymentMethodAlfabank) SetType(val PaymentMethodType) { + s.Type = val +} + +// SetID sets the value of ID. +func (s *PaymentMethodAlfabank) SetID(val string) { + s.ID = val +} + +// SetSaved sets the value of Saved. +func (s *PaymentMethodAlfabank) SetSaved(val bool) { + s.Saved = val +} + +// SetStatus sets the value of Status. +func (s *PaymentMethodAlfabank) SetStatus(val PaymentMethodAlfabankStatus) { + s.Status = val +} + +// SetTitle sets the value of Title. +func (s *PaymentMethodAlfabank) SetTitle(val OptPaymentMethodTitle) { + s.Title = val +} + +// SetLogin sets the value of Login. +func (s *PaymentMethodAlfabank) SetLogin(val OptString) { + s.Login = val +} + +// Статус проверки и сохранения способа оплаты. +// Возможные значения: * pending — ожидает действий от +// пользователя; * active — способ оплаты сохранен, его +// можно использовать для автоплатежей или выплат; * +// inactive — способ оплаты не сохранен: пользователь не +// подтвердил привязку платежного средства или при +// сохранении способа оплаты возникла ошибка. Чтобы +// узнать подробности, обратитесь в техническую +// поддержку ЮKassa. +type PaymentMethodAlfabankStatus string + +const ( + PaymentMethodAlfabankStatusPending PaymentMethodAlfabankStatus = "pending" + PaymentMethodAlfabankStatusActive PaymentMethodAlfabankStatus = "active" + PaymentMethodAlfabankStatusInactive PaymentMethodAlfabankStatus = "inactive" +) + +// AllValues returns all PaymentMethodAlfabankStatus values. +func (PaymentMethodAlfabankStatus) AllValues() []PaymentMethodAlfabankStatus { + return []PaymentMethodAlfabankStatus{ + PaymentMethodAlfabankStatusPending, + PaymentMethodAlfabankStatusActive, + PaymentMethodAlfabankStatusInactive, + } +} + +// MarshalText implements encoding.TextMarshaler. +func (s PaymentMethodAlfabankStatus) MarshalText() ([]byte, error) { + switch s { + case PaymentMethodAlfabankStatusPending: + return []byte(s), nil + case PaymentMethodAlfabankStatusActive: + return []byte(s), nil + case PaymentMethodAlfabankStatusInactive: + return []byte(s), nil + default: + return nil, errors.Errorf("invalid value: %q", s) + } +} + +// UnmarshalText implements encoding.TextUnmarshaler. +func (s *PaymentMethodAlfabankStatus) UnmarshalText(data []byte) error { + switch PaymentMethodAlfabankStatus(data) { + case PaymentMethodAlfabankStatusPending: + *s = PaymentMethodAlfabankStatusPending + return nil + case PaymentMethodAlfabankStatusActive: + *s = PaymentMethodAlfabankStatusActive + return nil + case PaymentMethodAlfabankStatusInactive: + *s = PaymentMethodAlfabankStatusInactive + return nil + default: + return errors.Errorf("invalid value: %q", data) + } +} + +// Merged schema. +// Ref: #/components/schemas/PaymentMethodApplePay +type PaymentMethodApplePay struct { + Type PaymentMethodType `json:"type"` + // Payment method ID. + ID string `json:"id"` + // Признак сохранения способа оплаты для автоплатежей: + // https://yookassa. + // ru/developers/payment-acceptance/scenario-extensions/recurring-payments/pay-with-saved. + // Возможные значения: * true — способ оплаты сохранен для + // автоплатежей и выплат; * false — способ оплаты не + // сохранен. + Saved bool `json:"saved"` + Status PaymentMethodApplePayStatus `json:"status"` + Title OptPaymentMethodTitle `json:"title"` +} + +// GetType returns the value of Type. +func (s *PaymentMethodApplePay) GetType() PaymentMethodType { + return s.Type +} + +// GetID returns the value of ID. +func (s *PaymentMethodApplePay) GetID() string { + return s.ID +} + +// GetSaved returns the value of Saved. +func (s *PaymentMethodApplePay) GetSaved() bool { + return s.Saved +} + +// GetStatus returns the value of Status. +func (s *PaymentMethodApplePay) GetStatus() PaymentMethodApplePayStatus { + return s.Status +} + +// GetTitle returns the value of Title. +func (s *PaymentMethodApplePay) GetTitle() OptPaymentMethodTitle { + return s.Title +} + +// SetType sets the value of Type. +func (s *PaymentMethodApplePay) SetType(val PaymentMethodType) { + s.Type = val +} + +// SetID sets the value of ID. +func (s *PaymentMethodApplePay) SetID(val string) { + s.ID = val +} + +// SetSaved sets the value of Saved. +func (s *PaymentMethodApplePay) SetSaved(val bool) { + s.Saved = val +} + +// SetStatus sets the value of Status. +func (s *PaymentMethodApplePay) SetStatus(val PaymentMethodApplePayStatus) { + s.Status = val +} + +// SetTitle sets the value of Title. +func (s *PaymentMethodApplePay) SetTitle(val OptPaymentMethodTitle) { + s.Title = val +} + +// Статус проверки и сохранения способа оплаты. +// Возможные значения: * pending — ожидает действий от +// пользователя; * active — способ оплаты сохранен, его +// можно использовать для автоплатежей или выплат; * +// inactive — способ оплаты не сохранен: пользователь не +// подтвердил привязку платежного средства или при +// сохранении способа оплаты возникла ошибка. Чтобы +// узнать подробности, обратитесь в техническую +// поддержку ЮKassa. +type PaymentMethodApplePayStatus string + +const ( + PaymentMethodApplePayStatusPending PaymentMethodApplePayStatus = "pending" + PaymentMethodApplePayStatusActive PaymentMethodApplePayStatus = "active" + PaymentMethodApplePayStatusInactive PaymentMethodApplePayStatus = "inactive" +) + +// AllValues returns all PaymentMethodApplePayStatus values. +func (PaymentMethodApplePayStatus) AllValues() []PaymentMethodApplePayStatus { + return []PaymentMethodApplePayStatus{ + PaymentMethodApplePayStatusPending, + PaymentMethodApplePayStatusActive, + PaymentMethodApplePayStatusInactive, + } +} + +// MarshalText implements encoding.TextMarshaler. +func (s PaymentMethodApplePayStatus) MarshalText() ([]byte, error) { + switch s { + case PaymentMethodApplePayStatusPending: + return []byte(s), nil + case PaymentMethodApplePayStatusActive: + return []byte(s), nil + case PaymentMethodApplePayStatusInactive: + return []byte(s), nil + default: + return nil, errors.Errorf("invalid value: %q", s) + } +} + +// UnmarshalText implements encoding.TextUnmarshaler. +func (s *PaymentMethodApplePayStatus) UnmarshalText(data []byte) error { + switch PaymentMethodApplePayStatus(data) { + case PaymentMethodApplePayStatusPending: + *s = PaymentMethodApplePayStatusPending + return nil + case PaymentMethodApplePayStatusActive: + *s = PaymentMethodApplePayStatusActive + return nil + case PaymentMethodApplePayStatusInactive: + *s = PaymentMethodApplePayStatusInactive + return nil + default: + return errors.Errorf("invalid value: %q", data) + } +} + +// Merged schema. +// Ref: #/components/schemas/PaymentMethodB2bSberbank +type PaymentMethodB2bSberbank struct { + Type PaymentMethodType `json:"type"` + // Payment method ID. + ID string `json:"id"` + // Признак сохранения способа оплаты для автоплатежей: + // https://yookassa. + // ru/developers/payment-acceptance/scenario-extensions/recurring-payments/pay-with-saved. + // Возможные значения: * true — способ оплаты сохранен для + // автоплатежей и выплат; * false — способ оплаты не + // сохранен. + Saved bool `json:"saved"` + Status PaymentMethodB2bSberbankStatus `json:"status"` + Title OptPaymentMethodTitle `json:"title"` + PaymentPurpose PaymentPurpose `json:"payment_purpose"` + VatData PaymentMethodB2bSberbankVatData `json:"vat_data"` + PayerBankDetails OptB2bSberbankPayerBankDetails `json:"payer_bank_details"` +} + +// GetType returns the value of Type. +func (s *PaymentMethodB2bSberbank) GetType() PaymentMethodType { + return s.Type +} + +// GetID returns the value of ID. +func (s *PaymentMethodB2bSberbank) GetID() string { + return s.ID +} + +// GetSaved returns the value of Saved. +func (s *PaymentMethodB2bSberbank) GetSaved() bool { + return s.Saved +} + +// GetStatus returns the value of Status. +func (s *PaymentMethodB2bSberbank) GetStatus() PaymentMethodB2bSberbankStatus { + return s.Status +} + +// GetTitle returns the value of Title. +func (s *PaymentMethodB2bSberbank) GetTitle() OptPaymentMethodTitle { + return s.Title +} + +// GetPaymentPurpose returns the value of PaymentPurpose. +func (s *PaymentMethodB2bSberbank) GetPaymentPurpose() PaymentPurpose { + return s.PaymentPurpose +} + +// GetVatData returns the value of VatData. +func (s *PaymentMethodB2bSberbank) GetVatData() PaymentMethodB2bSberbankVatData { + return s.VatData +} + +// GetPayerBankDetails returns the value of PayerBankDetails. +func (s *PaymentMethodB2bSberbank) GetPayerBankDetails() OptB2bSberbankPayerBankDetails { + return s.PayerBankDetails +} + +// SetType sets the value of Type. +func (s *PaymentMethodB2bSberbank) SetType(val PaymentMethodType) { + s.Type = val +} + +// SetID sets the value of ID. +func (s *PaymentMethodB2bSberbank) SetID(val string) { + s.ID = val +} + +// SetSaved sets the value of Saved. +func (s *PaymentMethodB2bSberbank) SetSaved(val bool) { + s.Saved = val +} + +// SetStatus sets the value of Status. +func (s *PaymentMethodB2bSberbank) SetStatus(val PaymentMethodB2bSberbankStatus) { + s.Status = val +} + +// SetTitle sets the value of Title. +func (s *PaymentMethodB2bSberbank) SetTitle(val OptPaymentMethodTitle) { + s.Title = val +} + +// SetPaymentPurpose sets the value of PaymentPurpose. +func (s *PaymentMethodB2bSberbank) SetPaymentPurpose(val PaymentPurpose) { + s.PaymentPurpose = val +} + +// SetVatData sets the value of VatData. +func (s *PaymentMethodB2bSberbank) SetVatData(val PaymentMethodB2bSberbankVatData) { + s.VatData = val +} + +// SetPayerBankDetails sets the value of PayerBankDetails. +func (s *PaymentMethodB2bSberbank) SetPayerBankDetails(val OptB2bSberbankPayerBankDetails) { + s.PayerBankDetails = val +} + +// Статус проверки и сохранения способа оплаты. +// Возможные значения: * pending — ожидает действий от +// пользователя; * active — способ оплаты сохранен, его +// можно использовать для автоплатежей или выплат; * +// inactive — способ оплаты не сохранен: пользователь не +// подтвердил привязку платежного средства или при +// сохранении способа оплаты возникла ошибка. Чтобы +// узнать подробности, обратитесь в техническую +// поддержку ЮKassa. +type PaymentMethodB2bSberbankStatus string + +const ( + PaymentMethodB2bSberbankStatusPending PaymentMethodB2bSberbankStatus = "pending" + PaymentMethodB2bSberbankStatusActive PaymentMethodB2bSberbankStatus = "active" + PaymentMethodB2bSberbankStatusInactive PaymentMethodB2bSberbankStatus = "inactive" +) + +// AllValues returns all PaymentMethodB2bSberbankStatus values. +func (PaymentMethodB2bSberbankStatus) AllValues() []PaymentMethodB2bSberbankStatus { + return []PaymentMethodB2bSberbankStatus{ + PaymentMethodB2bSberbankStatusPending, + PaymentMethodB2bSberbankStatusActive, + PaymentMethodB2bSberbankStatusInactive, + } +} + +// MarshalText implements encoding.TextMarshaler. +func (s PaymentMethodB2bSberbankStatus) MarshalText() ([]byte, error) { + switch s { + case PaymentMethodB2bSberbankStatusPending: + return []byte(s), nil + case PaymentMethodB2bSberbankStatusActive: + return []byte(s), nil + case PaymentMethodB2bSberbankStatusInactive: + return []byte(s), nil + default: + return nil, errors.Errorf("invalid value: %q", s) + } +} + +// UnmarshalText implements encoding.TextUnmarshaler. +func (s *PaymentMethodB2bSberbankStatus) UnmarshalText(data []byte) error { + switch PaymentMethodB2bSberbankStatus(data) { + case PaymentMethodB2bSberbankStatusPending: + *s = PaymentMethodB2bSberbankStatusPending + return nil + case PaymentMethodB2bSberbankStatusActive: + *s = PaymentMethodB2bSberbankStatusActive + return nil + case PaymentMethodB2bSberbankStatusInactive: + *s = PaymentMethodB2bSberbankStatusInactive + return nil + default: + return errors.Errorf("invalid value: %q", data) + } +} + +// PaymentMethodB2bSberbankVatData represents sum type. +type PaymentMethodB2bSberbankVatData struct { + Type PaymentMethodB2bSberbankVatDataType // switch on this field + B2bSberbankCalculatedVatData B2bSberbankCalculatedVatData + B2bSberbankUntaxedVatData B2bSberbankUntaxedVatData + B2bSberbankMixedVatData B2bSberbankMixedVatData +} + +// PaymentMethodB2bSberbankVatDataType is oneOf type of PaymentMethodB2bSberbankVatData. +type PaymentMethodB2bSberbankVatDataType string + +// Possible values for PaymentMethodB2bSberbankVatDataType. +const ( + B2bSberbankCalculatedVatDataPaymentMethodB2bSberbankVatData PaymentMethodB2bSberbankVatDataType = "B2bSberbankCalculatedVatData" + B2bSberbankUntaxedVatDataPaymentMethodB2bSberbankVatData PaymentMethodB2bSberbankVatDataType = "B2bSberbankUntaxedVatData" + B2bSberbankMixedVatDataPaymentMethodB2bSberbankVatData PaymentMethodB2bSberbankVatDataType = "B2bSberbankMixedVatData" +) + +// IsB2bSberbankCalculatedVatData reports whether PaymentMethodB2bSberbankVatData is B2bSberbankCalculatedVatData. +func (s PaymentMethodB2bSberbankVatData) IsB2bSberbankCalculatedVatData() bool { + return s.Type == B2bSberbankCalculatedVatDataPaymentMethodB2bSberbankVatData +} + +// IsB2bSberbankUntaxedVatData reports whether PaymentMethodB2bSberbankVatData is B2bSberbankUntaxedVatData. +func (s PaymentMethodB2bSberbankVatData) IsB2bSberbankUntaxedVatData() bool { + return s.Type == B2bSberbankUntaxedVatDataPaymentMethodB2bSberbankVatData +} + +// IsB2bSberbankMixedVatData reports whether PaymentMethodB2bSberbankVatData is B2bSberbankMixedVatData. +func (s PaymentMethodB2bSberbankVatData) IsB2bSberbankMixedVatData() bool { + return s.Type == B2bSberbankMixedVatDataPaymentMethodB2bSberbankVatData +} + +// SetB2bSberbankCalculatedVatData sets PaymentMethodB2bSberbankVatData to B2bSberbankCalculatedVatData. +func (s *PaymentMethodB2bSberbankVatData) SetB2bSberbankCalculatedVatData(v B2bSberbankCalculatedVatData) { + s.Type = B2bSberbankCalculatedVatDataPaymentMethodB2bSberbankVatData + s.B2bSberbankCalculatedVatData = v +} + +// GetB2bSberbankCalculatedVatData returns B2bSberbankCalculatedVatData and true boolean if PaymentMethodB2bSberbankVatData is B2bSberbankCalculatedVatData. +func (s PaymentMethodB2bSberbankVatData) GetB2bSberbankCalculatedVatData() (v B2bSberbankCalculatedVatData, ok bool) { + if !s.IsB2bSberbankCalculatedVatData() { + return v, false + } + return s.B2bSberbankCalculatedVatData, true +} + +// NewB2bSberbankCalculatedVatDataPaymentMethodB2bSberbankVatData returns new PaymentMethodB2bSberbankVatData from B2bSberbankCalculatedVatData. +func NewB2bSberbankCalculatedVatDataPaymentMethodB2bSberbankVatData(v B2bSberbankCalculatedVatData) PaymentMethodB2bSberbankVatData { + var s PaymentMethodB2bSberbankVatData + s.SetB2bSberbankCalculatedVatData(v) + return s +} + +// SetB2bSberbankUntaxedVatData sets PaymentMethodB2bSberbankVatData to B2bSberbankUntaxedVatData. +func (s *PaymentMethodB2bSberbankVatData) SetB2bSberbankUntaxedVatData(v B2bSberbankUntaxedVatData) { + s.Type = B2bSberbankUntaxedVatDataPaymentMethodB2bSberbankVatData + s.B2bSberbankUntaxedVatData = v +} + +// GetB2bSberbankUntaxedVatData returns B2bSberbankUntaxedVatData and true boolean if PaymentMethodB2bSberbankVatData is B2bSberbankUntaxedVatData. +func (s PaymentMethodB2bSberbankVatData) GetB2bSberbankUntaxedVatData() (v B2bSberbankUntaxedVatData, ok bool) { + if !s.IsB2bSberbankUntaxedVatData() { + return v, false + } + return s.B2bSberbankUntaxedVatData, true +} + +// NewB2bSberbankUntaxedVatDataPaymentMethodB2bSberbankVatData returns new PaymentMethodB2bSberbankVatData from B2bSberbankUntaxedVatData. +func NewB2bSberbankUntaxedVatDataPaymentMethodB2bSberbankVatData(v B2bSberbankUntaxedVatData) PaymentMethodB2bSberbankVatData { + var s PaymentMethodB2bSberbankVatData + s.SetB2bSberbankUntaxedVatData(v) + return s +} + +// SetB2bSberbankMixedVatData sets PaymentMethodB2bSberbankVatData to B2bSberbankMixedVatData. +func (s *PaymentMethodB2bSberbankVatData) SetB2bSberbankMixedVatData(v B2bSberbankMixedVatData) { + s.Type = B2bSberbankMixedVatDataPaymentMethodB2bSberbankVatData + s.B2bSberbankMixedVatData = v +} + +// GetB2bSberbankMixedVatData returns B2bSberbankMixedVatData and true boolean if PaymentMethodB2bSberbankVatData is B2bSberbankMixedVatData. +func (s PaymentMethodB2bSberbankVatData) GetB2bSberbankMixedVatData() (v B2bSberbankMixedVatData, ok bool) { + if !s.IsB2bSberbankMixedVatData() { + return v, false + } + return s.B2bSberbankMixedVatData, true +} + +// NewB2bSberbankMixedVatDataPaymentMethodB2bSberbankVatData returns new PaymentMethodB2bSberbankVatData from B2bSberbankMixedVatData. +func NewB2bSberbankMixedVatDataPaymentMethodB2bSberbankVatData(v B2bSberbankMixedVatData) PaymentMethodB2bSberbankVatData { + var s PaymentMethodB2bSberbankVatData + s.SetB2bSberbankMixedVatData(v) + return s +} + +// Merged schema. +// Ref: #/components/schemas/PaymentMethodBankCard +type PaymentMethodBankCard struct { + Type PaymentMethodType `json:"type"` + // Payment method ID. + ID string `json:"id"` + // Признак сохранения способа оплаты для автоплатежей: + // https://yookassa. + // ru/developers/payment-acceptance/scenario-extensions/recurring-payments/pay-with-saved. + // Возможные значения: * true — способ оплаты сохранен для + // автоплатежей и выплат; * false — способ оплаты не + // сохранен. + Saved bool `json:"saved"` + Status PaymentMethodBankCardStatus `json:"status"` + Title OptPaymentMethodTitle `json:"title"` + Card OptBankCardData `json:"card"` +} + +// GetType returns the value of Type. +func (s *PaymentMethodBankCard) GetType() PaymentMethodType { + return s.Type +} + +// GetID returns the value of ID. +func (s *PaymentMethodBankCard) GetID() string { + return s.ID +} + +// GetSaved returns the value of Saved. +func (s *PaymentMethodBankCard) GetSaved() bool { + return s.Saved +} + +// GetStatus returns the value of Status. +func (s *PaymentMethodBankCard) GetStatus() PaymentMethodBankCardStatus { + return s.Status +} + +// GetTitle returns the value of Title. +func (s *PaymentMethodBankCard) GetTitle() OptPaymentMethodTitle { + return s.Title +} + +// GetCard returns the value of Card. +func (s *PaymentMethodBankCard) GetCard() OptBankCardData { + return s.Card +} + +// SetType sets the value of Type. +func (s *PaymentMethodBankCard) SetType(val PaymentMethodType) { + s.Type = val +} + +// SetID sets the value of ID. +func (s *PaymentMethodBankCard) SetID(val string) { + s.ID = val +} + +// SetSaved sets the value of Saved. +func (s *PaymentMethodBankCard) SetSaved(val bool) { + s.Saved = val +} + +// SetStatus sets the value of Status. +func (s *PaymentMethodBankCard) SetStatus(val PaymentMethodBankCardStatus) { + s.Status = val +} + +// SetTitle sets the value of Title. +func (s *PaymentMethodBankCard) SetTitle(val OptPaymentMethodTitle) { + s.Title = val +} + +// SetCard sets the value of Card. +func (s *PaymentMethodBankCard) SetCard(val OptBankCardData) { + s.Card = val +} + +// Статус проверки и сохранения способа оплаты. +// Возможные значения: * pending — ожидает действий от +// пользователя; * active — способ оплаты сохранен, его +// можно использовать для автоплатежей или выплат; * +// inactive — способ оплаты не сохранен: пользователь не +// подтвердил привязку платежного средства или при +// сохранении способа оплаты возникла ошибка. Чтобы +// узнать подробности, обратитесь в техническую +// поддержку ЮKassa. +type PaymentMethodBankCardStatus string + +const ( + PaymentMethodBankCardStatusPending PaymentMethodBankCardStatus = "pending" + PaymentMethodBankCardStatusActive PaymentMethodBankCardStatus = "active" + PaymentMethodBankCardStatusInactive PaymentMethodBankCardStatus = "inactive" +) + +// AllValues returns all PaymentMethodBankCardStatus values. +func (PaymentMethodBankCardStatus) AllValues() []PaymentMethodBankCardStatus { + return []PaymentMethodBankCardStatus{ + PaymentMethodBankCardStatusPending, + PaymentMethodBankCardStatusActive, + PaymentMethodBankCardStatusInactive, + } +} + +// MarshalText implements encoding.TextMarshaler. +func (s PaymentMethodBankCardStatus) MarshalText() ([]byte, error) { + switch s { + case PaymentMethodBankCardStatusPending: + return []byte(s), nil + case PaymentMethodBankCardStatusActive: + return []byte(s), nil + case PaymentMethodBankCardStatusInactive: + return []byte(s), nil + default: + return nil, errors.Errorf("invalid value: %q", s) + } +} + +// UnmarshalText implements encoding.TextUnmarshaler. +func (s *PaymentMethodBankCardStatus) UnmarshalText(data []byte) error { + switch PaymentMethodBankCardStatus(data) { + case PaymentMethodBankCardStatusPending: + *s = PaymentMethodBankCardStatusPending + return nil + case PaymentMethodBankCardStatusActive: + *s = PaymentMethodBankCardStatusActive + return nil + case PaymentMethodBankCardStatusInactive: + *s = PaymentMethodBankCardStatusInactive + return nil + default: + return errors.Errorf("invalid value: %q", data) + } +} + +// Merged schema. +// Ref: #/components/schemas/PaymentMethodCash +type PaymentMethodCash struct { + Type PaymentMethodType `json:"type"` + // Payment method ID. + ID string `json:"id"` + // Признак сохранения способа оплаты для автоплатежей: + // https://yookassa. + // ru/developers/payment-acceptance/scenario-extensions/recurring-payments/pay-with-saved. + // Возможные значения: * true — способ оплаты сохранен для + // автоплатежей и выплат; * false — способ оплаты не + // сохранен. + Saved bool `json:"saved"` + Status PaymentMethodCashStatus `json:"status"` + Title OptPaymentMethodTitle `json:"title"` +} + +// GetType returns the value of Type. +func (s *PaymentMethodCash) GetType() PaymentMethodType { + return s.Type +} + +// GetID returns the value of ID. +func (s *PaymentMethodCash) GetID() string { + return s.ID +} + +// GetSaved returns the value of Saved. +func (s *PaymentMethodCash) GetSaved() bool { + return s.Saved +} + +// GetStatus returns the value of Status. +func (s *PaymentMethodCash) GetStatus() PaymentMethodCashStatus { + return s.Status +} + +// GetTitle returns the value of Title. +func (s *PaymentMethodCash) GetTitle() OptPaymentMethodTitle { + return s.Title +} + +// SetType sets the value of Type. +func (s *PaymentMethodCash) SetType(val PaymentMethodType) { + s.Type = val +} + +// SetID sets the value of ID. +func (s *PaymentMethodCash) SetID(val string) { + s.ID = val +} + +// SetSaved sets the value of Saved. +func (s *PaymentMethodCash) SetSaved(val bool) { + s.Saved = val +} + +// SetStatus sets the value of Status. +func (s *PaymentMethodCash) SetStatus(val PaymentMethodCashStatus) { + s.Status = val +} + +// SetTitle sets the value of Title. +func (s *PaymentMethodCash) SetTitle(val OptPaymentMethodTitle) { + s.Title = val +} + +// Статус проверки и сохранения способа оплаты. +// Возможные значения: * pending — ожидает действий от +// пользователя; * active — способ оплаты сохранен, его +// можно использовать для автоплатежей или выплат; * +// inactive — способ оплаты не сохранен: пользователь не +// подтвердил привязку платежного средства или при +// сохранении способа оплаты возникла ошибка. Чтобы +// узнать подробности, обратитесь в техническую +// поддержку ЮKassa. +type PaymentMethodCashStatus string + +const ( + PaymentMethodCashStatusPending PaymentMethodCashStatus = "pending" + PaymentMethodCashStatusActive PaymentMethodCashStatus = "active" + PaymentMethodCashStatusInactive PaymentMethodCashStatus = "inactive" +) + +// AllValues returns all PaymentMethodCashStatus values. +func (PaymentMethodCashStatus) AllValues() []PaymentMethodCashStatus { + return []PaymentMethodCashStatus{ + PaymentMethodCashStatusPending, + PaymentMethodCashStatusActive, + PaymentMethodCashStatusInactive, + } +} + +// MarshalText implements encoding.TextMarshaler. +func (s PaymentMethodCashStatus) MarshalText() ([]byte, error) { + switch s { + case PaymentMethodCashStatusPending: + return []byte(s), nil + case PaymentMethodCashStatusActive: + return []byte(s), nil + case PaymentMethodCashStatusInactive: + return []byte(s), nil + default: + return nil, errors.Errorf("invalid value: %q", s) + } +} + +// UnmarshalText implements encoding.TextUnmarshaler. +func (s *PaymentMethodCashStatus) UnmarshalText(data []byte) error { + switch PaymentMethodCashStatus(data) { + case PaymentMethodCashStatusPending: + *s = PaymentMethodCashStatusPending + return nil + case PaymentMethodCashStatusActive: + *s = PaymentMethodCashStatusActive + return nil + case PaymentMethodCashStatusInactive: + *s = PaymentMethodCashStatusInactive + return nil + default: + return errors.Errorf("invalid value: %q", data) + } +} + +// Merged schema. +// Ref: #/components/schemas/PaymentMethodDataB2bSberbank +type PaymentMethodDataB2bSberbank struct { + Type PaymentMethodDataB2bSberbankType `json:"type"` + PaymentPurpose PaymentPurpose `json:"payment_purpose"` + VatData PaymentMethodDataB2bSberbankVatData `json:"vat_data"` +} + +// GetType returns the value of Type. +func (s *PaymentMethodDataB2bSberbank) GetType() PaymentMethodDataB2bSberbankType { + return s.Type +} + +// GetPaymentPurpose returns the value of PaymentPurpose. +func (s *PaymentMethodDataB2bSberbank) GetPaymentPurpose() PaymentPurpose { + return s.PaymentPurpose +} + +// GetVatData returns the value of VatData. +func (s *PaymentMethodDataB2bSberbank) GetVatData() PaymentMethodDataB2bSberbankVatData { + return s.VatData +} + +// SetType sets the value of Type. +func (s *PaymentMethodDataB2bSberbank) SetType(val PaymentMethodDataB2bSberbankType) { + s.Type = val +} + +// SetPaymentPurpose sets the value of PaymentPurpose. +func (s *PaymentMethodDataB2bSberbank) SetPaymentPurpose(val PaymentPurpose) { + s.PaymentPurpose = val +} + +// SetVatData sets the value of VatData. +func (s *PaymentMethodDataB2bSberbank) SetVatData(val PaymentMethodDataB2bSberbankVatData) { + s.VatData = val +} + +type PaymentMethodDataB2bSberbankType string + +const ( + PaymentMethodDataB2bSberbankTypeBankCard PaymentMethodDataB2bSberbankType = "bank_card" + PaymentMethodDataB2bSberbankTypeCash PaymentMethodDataB2bSberbankType = "cash" + PaymentMethodDataB2bSberbankTypeSberbank PaymentMethodDataB2bSberbankType = "sberbank" + PaymentMethodDataB2bSberbankTypeTinkoffBank PaymentMethodDataB2bSberbankType = "tinkoff_bank" + PaymentMethodDataB2bSberbankTypeYooMoney PaymentMethodDataB2bSberbankType = "yoo_money" + PaymentMethodDataB2bSberbankTypeMobileBalance PaymentMethodDataB2bSberbankType = "mobile_balance" + PaymentMethodDataB2bSberbankTypeB2bSberbank PaymentMethodDataB2bSberbankType = "b2b_sberbank" + PaymentMethodDataB2bSberbankTypeSbp PaymentMethodDataB2bSberbankType = "sbp" + PaymentMethodDataB2bSberbankTypeSberLoan PaymentMethodDataB2bSberbankType = "sber_loan" + PaymentMethodDataB2bSberbankTypeElectronicCertificate PaymentMethodDataB2bSberbankType = "electronic_certificate" + PaymentMethodDataB2bSberbankTypeSberBnpl PaymentMethodDataB2bSberbankType = "sber_bnpl" +) + +// AllValues returns all PaymentMethodDataB2bSberbankType values. +func (PaymentMethodDataB2bSberbankType) AllValues() []PaymentMethodDataB2bSberbankType { + return []PaymentMethodDataB2bSberbankType{ + PaymentMethodDataB2bSberbankTypeBankCard, + PaymentMethodDataB2bSberbankTypeCash, + PaymentMethodDataB2bSberbankTypeSberbank, + PaymentMethodDataB2bSberbankTypeTinkoffBank, + PaymentMethodDataB2bSberbankTypeYooMoney, + PaymentMethodDataB2bSberbankTypeMobileBalance, + PaymentMethodDataB2bSberbankTypeB2bSberbank, + PaymentMethodDataB2bSberbankTypeSbp, + PaymentMethodDataB2bSberbankTypeSberLoan, + PaymentMethodDataB2bSberbankTypeElectronicCertificate, + PaymentMethodDataB2bSberbankTypeSberBnpl, + } +} + +// MarshalText implements encoding.TextMarshaler. +func (s PaymentMethodDataB2bSberbankType) MarshalText() ([]byte, error) { + switch s { + case PaymentMethodDataB2bSberbankTypeBankCard: + return []byte(s), nil + case PaymentMethodDataB2bSberbankTypeCash: + return []byte(s), nil + case PaymentMethodDataB2bSberbankTypeSberbank: + return []byte(s), nil + case PaymentMethodDataB2bSberbankTypeTinkoffBank: + return []byte(s), nil + case PaymentMethodDataB2bSberbankTypeYooMoney: + return []byte(s), nil + case PaymentMethodDataB2bSberbankTypeMobileBalance: + return []byte(s), nil + case PaymentMethodDataB2bSberbankTypeB2bSberbank: + return []byte(s), nil + case PaymentMethodDataB2bSberbankTypeSbp: + return []byte(s), nil + case PaymentMethodDataB2bSberbankTypeSberLoan: + return []byte(s), nil + case PaymentMethodDataB2bSberbankTypeElectronicCertificate: + return []byte(s), nil + case PaymentMethodDataB2bSberbankTypeSberBnpl: + return []byte(s), nil + default: + return nil, errors.Errorf("invalid value: %q", s) + } +} + +// UnmarshalText implements encoding.TextUnmarshaler. +func (s *PaymentMethodDataB2bSberbankType) UnmarshalText(data []byte) error { + switch PaymentMethodDataB2bSberbankType(data) { + case PaymentMethodDataB2bSberbankTypeBankCard: + *s = PaymentMethodDataB2bSberbankTypeBankCard + return nil + case PaymentMethodDataB2bSberbankTypeCash: + *s = PaymentMethodDataB2bSberbankTypeCash + return nil + case PaymentMethodDataB2bSberbankTypeSberbank: + *s = PaymentMethodDataB2bSberbankTypeSberbank + return nil + case PaymentMethodDataB2bSberbankTypeTinkoffBank: + *s = PaymentMethodDataB2bSberbankTypeTinkoffBank + return nil + case PaymentMethodDataB2bSberbankTypeYooMoney: + *s = PaymentMethodDataB2bSberbankTypeYooMoney + return nil + case PaymentMethodDataB2bSberbankTypeMobileBalance: + *s = PaymentMethodDataB2bSberbankTypeMobileBalance + return nil + case PaymentMethodDataB2bSberbankTypeB2bSberbank: + *s = PaymentMethodDataB2bSberbankTypeB2bSberbank + return nil + case PaymentMethodDataB2bSberbankTypeSbp: + *s = PaymentMethodDataB2bSberbankTypeSbp + return nil + case PaymentMethodDataB2bSberbankTypeSberLoan: + *s = PaymentMethodDataB2bSberbankTypeSberLoan + return nil + case PaymentMethodDataB2bSberbankTypeElectronicCertificate: + *s = PaymentMethodDataB2bSberbankTypeElectronicCertificate + return nil + case PaymentMethodDataB2bSberbankTypeSberBnpl: + *s = PaymentMethodDataB2bSberbankTypeSberBnpl + return nil + default: + return errors.Errorf("invalid value: %q", data) + } +} + +// PaymentMethodDataB2bSberbankVatData represents sum type. +type PaymentMethodDataB2bSberbankVatData struct { + Type PaymentMethodDataB2bSberbankVatDataType // switch on this field + B2bSberbankCalculatedVatData B2bSberbankCalculatedVatData + B2bSberbankUntaxedVatData B2bSberbankUntaxedVatData + B2bSberbankMixedVatData B2bSberbankMixedVatData +} + +// PaymentMethodDataB2bSberbankVatDataType is oneOf type of PaymentMethodDataB2bSberbankVatData. +type PaymentMethodDataB2bSberbankVatDataType string + +// Possible values for PaymentMethodDataB2bSberbankVatDataType. +const ( + B2bSberbankCalculatedVatDataPaymentMethodDataB2bSberbankVatData PaymentMethodDataB2bSberbankVatDataType = "B2bSberbankCalculatedVatData" + B2bSberbankUntaxedVatDataPaymentMethodDataB2bSberbankVatData PaymentMethodDataB2bSberbankVatDataType = "B2bSberbankUntaxedVatData" + B2bSberbankMixedVatDataPaymentMethodDataB2bSberbankVatData PaymentMethodDataB2bSberbankVatDataType = "B2bSberbankMixedVatData" +) + +// IsB2bSberbankCalculatedVatData reports whether PaymentMethodDataB2bSberbankVatData is B2bSberbankCalculatedVatData. +func (s PaymentMethodDataB2bSberbankVatData) IsB2bSberbankCalculatedVatData() bool { + return s.Type == B2bSberbankCalculatedVatDataPaymentMethodDataB2bSberbankVatData +} + +// IsB2bSberbankUntaxedVatData reports whether PaymentMethodDataB2bSberbankVatData is B2bSberbankUntaxedVatData. +func (s PaymentMethodDataB2bSberbankVatData) IsB2bSberbankUntaxedVatData() bool { + return s.Type == B2bSberbankUntaxedVatDataPaymentMethodDataB2bSberbankVatData +} + +// IsB2bSberbankMixedVatData reports whether PaymentMethodDataB2bSberbankVatData is B2bSberbankMixedVatData. +func (s PaymentMethodDataB2bSberbankVatData) IsB2bSberbankMixedVatData() bool { + return s.Type == B2bSberbankMixedVatDataPaymentMethodDataB2bSberbankVatData +} + +// SetB2bSberbankCalculatedVatData sets PaymentMethodDataB2bSberbankVatData to B2bSberbankCalculatedVatData. +func (s *PaymentMethodDataB2bSberbankVatData) SetB2bSberbankCalculatedVatData(v B2bSberbankCalculatedVatData) { + s.Type = B2bSberbankCalculatedVatDataPaymentMethodDataB2bSberbankVatData + s.B2bSberbankCalculatedVatData = v +} + +// GetB2bSberbankCalculatedVatData returns B2bSberbankCalculatedVatData and true boolean if PaymentMethodDataB2bSberbankVatData is B2bSberbankCalculatedVatData. +func (s PaymentMethodDataB2bSberbankVatData) GetB2bSberbankCalculatedVatData() (v B2bSberbankCalculatedVatData, ok bool) { + if !s.IsB2bSberbankCalculatedVatData() { + return v, false + } + return s.B2bSberbankCalculatedVatData, true +} + +// NewB2bSberbankCalculatedVatDataPaymentMethodDataB2bSberbankVatData returns new PaymentMethodDataB2bSberbankVatData from B2bSberbankCalculatedVatData. +func NewB2bSberbankCalculatedVatDataPaymentMethodDataB2bSberbankVatData(v B2bSberbankCalculatedVatData) PaymentMethodDataB2bSberbankVatData { + var s PaymentMethodDataB2bSberbankVatData + s.SetB2bSberbankCalculatedVatData(v) + return s +} + +// SetB2bSberbankUntaxedVatData sets PaymentMethodDataB2bSberbankVatData to B2bSberbankUntaxedVatData. +func (s *PaymentMethodDataB2bSberbankVatData) SetB2bSberbankUntaxedVatData(v B2bSberbankUntaxedVatData) { + s.Type = B2bSberbankUntaxedVatDataPaymentMethodDataB2bSberbankVatData + s.B2bSberbankUntaxedVatData = v +} + +// GetB2bSberbankUntaxedVatData returns B2bSberbankUntaxedVatData and true boolean if PaymentMethodDataB2bSberbankVatData is B2bSberbankUntaxedVatData. +func (s PaymentMethodDataB2bSberbankVatData) GetB2bSberbankUntaxedVatData() (v B2bSberbankUntaxedVatData, ok bool) { + if !s.IsB2bSberbankUntaxedVatData() { + return v, false + } + return s.B2bSberbankUntaxedVatData, true +} + +// NewB2bSberbankUntaxedVatDataPaymentMethodDataB2bSberbankVatData returns new PaymentMethodDataB2bSberbankVatData from B2bSberbankUntaxedVatData. +func NewB2bSberbankUntaxedVatDataPaymentMethodDataB2bSberbankVatData(v B2bSberbankUntaxedVatData) PaymentMethodDataB2bSberbankVatData { + var s PaymentMethodDataB2bSberbankVatData + s.SetB2bSberbankUntaxedVatData(v) + return s +} + +// SetB2bSberbankMixedVatData sets PaymentMethodDataB2bSberbankVatData to B2bSberbankMixedVatData. +func (s *PaymentMethodDataB2bSberbankVatData) SetB2bSberbankMixedVatData(v B2bSberbankMixedVatData) { + s.Type = B2bSberbankMixedVatDataPaymentMethodDataB2bSberbankVatData + s.B2bSberbankMixedVatData = v +} + +// GetB2bSberbankMixedVatData returns B2bSberbankMixedVatData and true boolean if PaymentMethodDataB2bSberbankVatData is B2bSberbankMixedVatData. +func (s PaymentMethodDataB2bSberbankVatData) GetB2bSberbankMixedVatData() (v B2bSberbankMixedVatData, ok bool) { + if !s.IsB2bSberbankMixedVatData() { + return v, false + } + return s.B2bSberbankMixedVatData, true +} + +// NewB2bSberbankMixedVatDataPaymentMethodDataB2bSberbankVatData returns new PaymentMethodDataB2bSberbankVatData from B2bSberbankMixedVatData. +func NewB2bSberbankMixedVatDataPaymentMethodDataB2bSberbankVatData(v B2bSberbankMixedVatData) PaymentMethodDataB2bSberbankVatData { + var s PaymentMethodDataB2bSberbankVatData + s.SetB2bSberbankMixedVatData(v) + return s +} + +// Merged schema. +// Ref: #/components/schemas/PaymentMethodDataBankCard +type PaymentMethodDataBankCard struct { + Type PaymentMethodDataBankCardType `json:"type"` + Card OptCardRequestData `json:"card"` +} + +// GetType returns the value of Type. +func (s *PaymentMethodDataBankCard) GetType() PaymentMethodDataBankCardType { + return s.Type +} + +// GetCard returns the value of Card. +func (s *PaymentMethodDataBankCard) GetCard() OptCardRequestData { + return s.Card +} + +// SetType sets the value of Type. +func (s *PaymentMethodDataBankCard) SetType(val PaymentMethodDataBankCardType) { + s.Type = val +} + +// SetCard sets the value of Card. +func (s *PaymentMethodDataBankCard) SetCard(val OptCardRequestData) { + s.Card = val +} + +type PaymentMethodDataBankCardType string + +const ( + PaymentMethodDataBankCardTypeBankCard PaymentMethodDataBankCardType = "bank_card" + PaymentMethodDataBankCardTypeCash PaymentMethodDataBankCardType = "cash" + PaymentMethodDataBankCardTypeSberbank PaymentMethodDataBankCardType = "sberbank" + PaymentMethodDataBankCardTypeTinkoffBank PaymentMethodDataBankCardType = "tinkoff_bank" + PaymentMethodDataBankCardTypeYooMoney PaymentMethodDataBankCardType = "yoo_money" + PaymentMethodDataBankCardTypeMobileBalance PaymentMethodDataBankCardType = "mobile_balance" + PaymentMethodDataBankCardTypeB2bSberbank PaymentMethodDataBankCardType = "b2b_sberbank" + PaymentMethodDataBankCardTypeSbp PaymentMethodDataBankCardType = "sbp" + PaymentMethodDataBankCardTypeSberLoan PaymentMethodDataBankCardType = "sber_loan" + PaymentMethodDataBankCardTypeElectronicCertificate PaymentMethodDataBankCardType = "electronic_certificate" + PaymentMethodDataBankCardTypeSberBnpl PaymentMethodDataBankCardType = "sber_bnpl" +) + +// AllValues returns all PaymentMethodDataBankCardType values. +func (PaymentMethodDataBankCardType) AllValues() []PaymentMethodDataBankCardType { + return []PaymentMethodDataBankCardType{ + PaymentMethodDataBankCardTypeBankCard, + PaymentMethodDataBankCardTypeCash, + PaymentMethodDataBankCardTypeSberbank, + PaymentMethodDataBankCardTypeTinkoffBank, + PaymentMethodDataBankCardTypeYooMoney, + PaymentMethodDataBankCardTypeMobileBalance, + PaymentMethodDataBankCardTypeB2bSberbank, + PaymentMethodDataBankCardTypeSbp, + PaymentMethodDataBankCardTypeSberLoan, + PaymentMethodDataBankCardTypeElectronicCertificate, + PaymentMethodDataBankCardTypeSberBnpl, + } +} + +// MarshalText implements encoding.TextMarshaler. +func (s PaymentMethodDataBankCardType) MarshalText() ([]byte, error) { + switch s { + case PaymentMethodDataBankCardTypeBankCard: + return []byte(s), nil + case PaymentMethodDataBankCardTypeCash: + return []byte(s), nil + case PaymentMethodDataBankCardTypeSberbank: + return []byte(s), nil + case PaymentMethodDataBankCardTypeTinkoffBank: + return []byte(s), nil + case PaymentMethodDataBankCardTypeYooMoney: + return []byte(s), nil + case PaymentMethodDataBankCardTypeMobileBalance: + return []byte(s), nil + case PaymentMethodDataBankCardTypeB2bSberbank: + return []byte(s), nil + case PaymentMethodDataBankCardTypeSbp: + return []byte(s), nil + case PaymentMethodDataBankCardTypeSberLoan: + return []byte(s), nil + case PaymentMethodDataBankCardTypeElectronicCertificate: + return []byte(s), nil + case PaymentMethodDataBankCardTypeSberBnpl: + return []byte(s), nil + default: + return nil, errors.Errorf("invalid value: %q", s) + } +} + +// UnmarshalText implements encoding.TextUnmarshaler. +func (s *PaymentMethodDataBankCardType) UnmarshalText(data []byte) error { + switch PaymentMethodDataBankCardType(data) { + case PaymentMethodDataBankCardTypeBankCard: + *s = PaymentMethodDataBankCardTypeBankCard + return nil + case PaymentMethodDataBankCardTypeCash: + *s = PaymentMethodDataBankCardTypeCash + return nil + case PaymentMethodDataBankCardTypeSberbank: + *s = PaymentMethodDataBankCardTypeSberbank + return nil + case PaymentMethodDataBankCardTypeTinkoffBank: + *s = PaymentMethodDataBankCardTypeTinkoffBank + return nil + case PaymentMethodDataBankCardTypeYooMoney: + *s = PaymentMethodDataBankCardTypeYooMoney + return nil + case PaymentMethodDataBankCardTypeMobileBalance: + *s = PaymentMethodDataBankCardTypeMobileBalance + return nil + case PaymentMethodDataBankCardTypeB2bSberbank: + *s = PaymentMethodDataBankCardTypeB2bSberbank + return nil + case PaymentMethodDataBankCardTypeSbp: + *s = PaymentMethodDataBankCardTypeSbp + return nil + case PaymentMethodDataBankCardTypeSberLoan: + *s = PaymentMethodDataBankCardTypeSberLoan + return nil + case PaymentMethodDataBankCardTypeElectronicCertificate: + *s = PaymentMethodDataBankCardTypeElectronicCertificate + return nil + case PaymentMethodDataBankCardTypeSberBnpl: + *s = PaymentMethodDataBankCardTypeSberBnpl + return nil + default: + return errors.Errorf("invalid value: %q", data) + } +} + +// Merged schema. +// Ref: #/components/schemas/PaymentMethodDataCash +type PaymentMethodDataCash struct { + Type PaymentMethodDataCashType `json:"type"` + // Телефон пользователя, на который придет смс с кодом + // платежа (для внесения наличных). Указывается в + // формате ITU-T E.164: https://ru.wikipedia.org/wiki/E.164, например 79000000000. + // Поле можно оставить пустым: пользователь сможет + // заполнить его при оплате на стороне ЮKassa. + Phone OptString `json:"phone"` +} + +// GetType returns the value of Type. +func (s *PaymentMethodDataCash) GetType() PaymentMethodDataCashType { + return s.Type +} + +// GetPhone returns the value of Phone. +func (s *PaymentMethodDataCash) GetPhone() OptString { + return s.Phone +} + +// SetType sets the value of Type. +func (s *PaymentMethodDataCash) SetType(val PaymentMethodDataCashType) { + s.Type = val +} + +// SetPhone sets the value of Phone. +func (s *PaymentMethodDataCash) SetPhone(val OptString) { + s.Phone = val +} + +type PaymentMethodDataCashType string + +const ( + PaymentMethodDataCashTypeBankCard PaymentMethodDataCashType = "bank_card" + PaymentMethodDataCashTypeCash PaymentMethodDataCashType = "cash" + PaymentMethodDataCashTypeSberbank PaymentMethodDataCashType = "sberbank" + PaymentMethodDataCashTypeTinkoffBank PaymentMethodDataCashType = "tinkoff_bank" + PaymentMethodDataCashTypeYooMoney PaymentMethodDataCashType = "yoo_money" + PaymentMethodDataCashTypeMobileBalance PaymentMethodDataCashType = "mobile_balance" + PaymentMethodDataCashTypeB2bSberbank PaymentMethodDataCashType = "b2b_sberbank" + PaymentMethodDataCashTypeSbp PaymentMethodDataCashType = "sbp" + PaymentMethodDataCashTypeSberLoan PaymentMethodDataCashType = "sber_loan" + PaymentMethodDataCashTypeElectronicCertificate PaymentMethodDataCashType = "electronic_certificate" + PaymentMethodDataCashTypeSberBnpl PaymentMethodDataCashType = "sber_bnpl" +) + +// AllValues returns all PaymentMethodDataCashType values. +func (PaymentMethodDataCashType) AllValues() []PaymentMethodDataCashType { + return []PaymentMethodDataCashType{ + PaymentMethodDataCashTypeBankCard, + PaymentMethodDataCashTypeCash, + PaymentMethodDataCashTypeSberbank, + PaymentMethodDataCashTypeTinkoffBank, + PaymentMethodDataCashTypeYooMoney, + PaymentMethodDataCashTypeMobileBalance, + PaymentMethodDataCashTypeB2bSberbank, + PaymentMethodDataCashTypeSbp, + PaymentMethodDataCashTypeSberLoan, + PaymentMethodDataCashTypeElectronicCertificate, + PaymentMethodDataCashTypeSberBnpl, + } +} + +// MarshalText implements encoding.TextMarshaler. +func (s PaymentMethodDataCashType) MarshalText() ([]byte, error) { + switch s { + case PaymentMethodDataCashTypeBankCard: + return []byte(s), nil + case PaymentMethodDataCashTypeCash: + return []byte(s), nil + case PaymentMethodDataCashTypeSberbank: + return []byte(s), nil + case PaymentMethodDataCashTypeTinkoffBank: + return []byte(s), nil + case PaymentMethodDataCashTypeYooMoney: + return []byte(s), nil + case PaymentMethodDataCashTypeMobileBalance: + return []byte(s), nil + case PaymentMethodDataCashTypeB2bSberbank: + return []byte(s), nil + case PaymentMethodDataCashTypeSbp: + return []byte(s), nil + case PaymentMethodDataCashTypeSberLoan: + return []byte(s), nil + case PaymentMethodDataCashTypeElectronicCertificate: + return []byte(s), nil + case PaymentMethodDataCashTypeSberBnpl: + return []byte(s), nil + default: + return nil, errors.Errorf("invalid value: %q", s) + } +} + +// UnmarshalText implements encoding.TextUnmarshaler. +func (s *PaymentMethodDataCashType) UnmarshalText(data []byte) error { + switch PaymentMethodDataCashType(data) { + case PaymentMethodDataCashTypeBankCard: + *s = PaymentMethodDataCashTypeBankCard + return nil + case PaymentMethodDataCashTypeCash: + *s = PaymentMethodDataCashTypeCash + return nil + case PaymentMethodDataCashTypeSberbank: + *s = PaymentMethodDataCashTypeSberbank + return nil + case PaymentMethodDataCashTypeTinkoffBank: + *s = PaymentMethodDataCashTypeTinkoffBank + return nil + case PaymentMethodDataCashTypeYooMoney: + *s = PaymentMethodDataCashTypeYooMoney + return nil + case PaymentMethodDataCashTypeMobileBalance: + *s = PaymentMethodDataCashTypeMobileBalance + return nil + case PaymentMethodDataCashTypeB2bSberbank: + *s = PaymentMethodDataCashTypeB2bSberbank + return nil + case PaymentMethodDataCashTypeSbp: + *s = PaymentMethodDataCashTypeSbp + return nil + case PaymentMethodDataCashTypeSberLoan: + *s = PaymentMethodDataCashTypeSberLoan + return nil + case PaymentMethodDataCashTypeElectronicCertificate: + *s = PaymentMethodDataCashTypeElectronicCertificate + return nil + case PaymentMethodDataCashTypeSberBnpl: + *s = PaymentMethodDataCashTypeSberBnpl + return nil + default: + return errors.Errorf("invalid value: %q", data) + } +} + +// Merged schema. +// Ref: #/components/schemas/PaymentMethodDataElectronicCertificate +type PaymentMethodDataElectronicCertificate struct { + Type PaymentMethodDataElectronicCertificateType `json:"type"` + Card OptCardRequestData `json:"card"` + ElectronicCertificate OptElectronicCertificatePaymentData `json:"electronic_certificate"` + // Корзина покупки (в терминах НСПК) — список товаров, + // которые можно оплатить по сертификату. Необходимо + // передавать только при оплате на готовой странице + // ЮKassa: https://yookassa. + // ru/developers/payment-acceptance/integration-scenarios/manual-integration/other/electronic-certificate/ready-made-payment-form. + Articles []ElectronicCertificateArticle `json:"articles"` +} + +// GetType returns the value of Type. +func (s *PaymentMethodDataElectronicCertificate) GetType() PaymentMethodDataElectronicCertificateType { + return s.Type +} + +// GetCard returns the value of Card. +func (s *PaymentMethodDataElectronicCertificate) GetCard() OptCardRequestData { + return s.Card +} + +// GetElectronicCertificate returns the value of ElectronicCertificate. +func (s *PaymentMethodDataElectronicCertificate) GetElectronicCertificate() OptElectronicCertificatePaymentData { + return s.ElectronicCertificate +} + +// GetArticles returns the value of Articles. +func (s *PaymentMethodDataElectronicCertificate) GetArticles() []ElectronicCertificateArticle { + return s.Articles +} + +// SetType sets the value of Type. +func (s *PaymentMethodDataElectronicCertificate) SetType(val PaymentMethodDataElectronicCertificateType) { + s.Type = val +} + +// SetCard sets the value of Card. +func (s *PaymentMethodDataElectronicCertificate) SetCard(val OptCardRequestData) { + s.Card = val +} + +// SetElectronicCertificate sets the value of ElectronicCertificate. +func (s *PaymentMethodDataElectronicCertificate) SetElectronicCertificate(val OptElectronicCertificatePaymentData) { + s.ElectronicCertificate = val +} + +// SetArticles sets the value of Articles. +func (s *PaymentMethodDataElectronicCertificate) SetArticles(val []ElectronicCertificateArticle) { + s.Articles = val +} + +type PaymentMethodDataElectronicCertificateType string + +const ( + PaymentMethodDataElectronicCertificateTypeBankCard PaymentMethodDataElectronicCertificateType = "bank_card" + PaymentMethodDataElectronicCertificateTypeCash PaymentMethodDataElectronicCertificateType = "cash" + PaymentMethodDataElectronicCertificateTypeSberbank PaymentMethodDataElectronicCertificateType = "sberbank" + PaymentMethodDataElectronicCertificateTypeTinkoffBank PaymentMethodDataElectronicCertificateType = "tinkoff_bank" + PaymentMethodDataElectronicCertificateTypeYooMoney PaymentMethodDataElectronicCertificateType = "yoo_money" + PaymentMethodDataElectronicCertificateTypeMobileBalance PaymentMethodDataElectronicCertificateType = "mobile_balance" + PaymentMethodDataElectronicCertificateTypeB2bSberbank PaymentMethodDataElectronicCertificateType = "b2b_sberbank" + PaymentMethodDataElectronicCertificateTypeSbp PaymentMethodDataElectronicCertificateType = "sbp" + PaymentMethodDataElectronicCertificateTypeSberLoan PaymentMethodDataElectronicCertificateType = "sber_loan" + PaymentMethodDataElectronicCertificateTypeElectronicCertificate PaymentMethodDataElectronicCertificateType = "electronic_certificate" + PaymentMethodDataElectronicCertificateTypeSberBnpl PaymentMethodDataElectronicCertificateType = "sber_bnpl" +) + +// AllValues returns all PaymentMethodDataElectronicCertificateType values. +func (PaymentMethodDataElectronicCertificateType) AllValues() []PaymentMethodDataElectronicCertificateType { + return []PaymentMethodDataElectronicCertificateType{ + PaymentMethodDataElectronicCertificateTypeBankCard, + PaymentMethodDataElectronicCertificateTypeCash, + PaymentMethodDataElectronicCertificateTypeSberbank, + PaymentMethodDataElectronicCertificateTypeTinkoffBank, + PaymentMethodDataElectronicCertificateTypeYooMoney, + PaymentMethodDataElectronicCertificateTypeMobileBalance, + PaymentMethodDataElectronicCertificateTypeB2bSberbank, + PaymentMethodDataElectronicCertificateTypeSbp, + PaymentMethodDataElectronicCertificateTypeSberLoan, + PaymentMethodDataElectronicCertificateTypeElectronicCertificate, + PaymentMethodDataElectronicCertificateTypeSberBnpl, + } +} + +// MarshalText implements encoding.TextMarshaler. +func (s PaymentMethodDataElectronicCertificateType) MarshalText() ([]byte, error) { + switch s { + case PaymentMethodDataElectronicCertificateTypeBankCard: + return []byte(s), nil + case PaymentMethodDataElectronicCertificateTypeCash: + return []byte(s), nil + case PaymentMethodDataElectronicCertificateTypeSberbank: + return []byte(s), nil + case PaymentMethodDataElectronicCertificateTypeTinkoffBank: + return []byte(s), nil + case PaymentMethodDataElectronicCertificateTypeYooMoney: + return []byte(s), nil + case PaymentMethodDataElectronicCertificateTypeMobileBalance: + return []byte(s), nil + case PaymentMethodDataElectronicCertificateTypeB2bSberbank: + return []byte(s), nil + case PaymentMethodDataElectronicCertificateTypeSbp: + return []byte(s), nil + case PaymentMethodDataElectronicCertificateTypeSberLoan: + return []byte(s), nil + case PaymentMethodDataElectronicCertificateTypeElectronicCertificate: + return []byte(s), nil + case PaymentMethodDataElectronicCertificateTypeSberBnpl: + return []byte(s), nil + default: + return nil, errors.Errorf("invalid value: %q", s) + } +} + +// UnmarshalText implements encoding.TextUnmarshaler. +func (s *PaymentMethodDataElectronicCertificateType) UnmarshalText(data []byte) error { + switch PaymentMethodDataElectronicCertificateType(data) { + case PaymentMethodDataElectronicCertificateTypeBankCard: + *s = PaymentMethodDataElectronicCertificateTypeBankCard + return nil + case PaymentMethodDataElectronicCertificateTypeCash: + *s = PaymentMethodDataElectronicCertificateTypeCash + return nil + case PaymentMethodDataElectronicCertificateTypeSberbank: + *s = PaymentMethodDataElectronicCertificateTypeSberbank + return nil + case PaymentMethodDataElectronicCertificateTypeTinkoffBank: + *s = PaymentMethodDataElectronicCertificateTypeTinkoffBank + return nil + case PaymentMethodDataElectronicCertificateTypeYooMoney: + *s = PaymentMethodDataElectronicCertificateTypeYooMoney + return nil + case PaymentMethodDataElectronicCertificateTypeMobileBalance: + *s = PaymentMethodDataElectronicCertificateTypeMobileBalance + return nil + case PaymentMethodDataElectronicCertificateTypeB2bSberbank: + *s = PaymentMethodDataElectronicCertificateTypeB2bSberbank + return nil + case PaymentMethodDataElectronicCertificateTypeSbp: + *s = PaymentMethodDataElectronicCertificateTypeSbp + return nil + case PaymentMethodDataElectronicCertificateTypeSberLoan: + *s = PaymentMethodDataElectronicCertificateTypeSberLoan + return nil + case PaymentMethodDataElectronicCertificateTypeElectronicCertificate: + *s = PaymentMethodDataElectronicCertificateTypeElectronicCertificate + return nil + case PaymentMethodDataElectronicCertificateTypeSberBnpl: + *s = PaymentMethodDataElectronicCertificateTypeSberBnpl + return nil + default: + return errors.Errorf("invalid value: %q", data) + } +} + +// Merged schema. +// Ref: #/components/schemas/PaymentMethodDataMobileBalance +type PaymentMethodDataMobileBalance struct { + Type PaymentMethodDataMobileBalanceType `json:"type"` + // Телефон, с баланса которого осуществляется платеж. + // Указывается в формате ITU-T E.164: https://ru.wikipedia.org/wiki/E.164, + // например 79000000000. + Phone string `json:"phone"` +} + +// GetType returns the value of Type. +func (s *PaymentMethodDataMobileBalance) GetType() PaymentMethodDataMobileBalanceType { + return s.Type +} + +// GetPhone returns the value of Phone. +func (s *PaymentMethodDataMobileBalance) GetPhone() string { + return s.Phone +} + +// SetType sets the value of Type. +func (s *PaymentMethodDataMobileBalance) SetType(val PaymentMethodDataMobileBalanceType) { + s.Type = val +} + +// SetPhone sets the value of Phone. +func (s *PaymentMethodDataMobileBalance) SetPhone(val string) { + s.Phone = val +} + +type PaymentMethodDataMobileBalanceType string + +const ( + PaymentMethodDataMobileBalanceTypeBankCard PaymentMethodDataMobileBalanceType = "bank_card" + PaymentMethodDataMobileBalanceTypeCash PaymentMethodDataMobileBalanceType = "cash" + PaymentMethodDataMobileBalanceTypeSberbank PaymentMethodDataMobileBalanceType = "sberbank" + PaymentMethodDataMobileBalanceTypeTinkoffBank PaymentMethodDataMobileBalanceType = "tinkoff_bank" + PaymentMethodDataMobileBalanceTypeYooMoney PaymentMethodDataMobileBalanceType = "yoo_money" + PaymentMethodDataMobileBalanceTypeMobileBalance PaymentMethodDataMobileBalanceType = "mobile_balance" + PaymentMethodDataMobileBalanceTypeB2bSberbank PaymentMethodDataMobileBalanceType = "b2b_sberbank" + PaymentMethodDataMobileBalanceTypeSbp PaymentMethodDataMobileBalanceType = "sbp" + PaymentMethodDataMobileBalanceTypeSberLoan PaymentMethodDataMobileBalanceType = "sber_loan" + PaymentMethodDataMobileBalanceTypeElectronicCertificate PaymentMethodDataMobileBalanceType = "electronic_certificate" + PaymentMethodDataMobileBalanceTypeSberBnpl PaymentMethodDataMobileBalanceType = "sber_bnpl" +) + +// AllValues returns all PaymentMethodDataMobileBalanceType values. +func (PaymentMethodDataMobileBalanceType) AllValues() []PaymentMethodDataMobileBalanceType { + return []PaymentMethodDataMobileBalanceType{ + PaymentMethodDataMobileBalanceTypeBankCard, + PaymentMethodDataMobileBalanceTypeCash, + PaymentMethodDataMobileBalanceTypeSberbank, + PaymentMethodDataMobileBalanceTypeTinkoffBank, + PaymentMethodDataMobileBalanceTypeYooMoney, + PaymentMethodDataMobileBalanceTypeMobileBalance, + PaymentMethodDataMobileBalanceTypeB2bSberbank, + PaymentMethodDataMobileBalanceTypeSbp, + PaymentMethodDataMobileBalanceTypeSberLoan, + PaymentMethodDataMobileBalanceTypeElectronicCertificate, + PaymentMethodDataMobileBalanceTypeSberBnpl, + } +} + +// MarshalText implements encoding.TextMarshaler. +func (s PaymentMethodDataMobileBalanceType) MarshalText() ([]byte, error) { + switch s { + case PaymentMethodDataMobileBalanceTypeBankCard: + return []byte(s), nil + case PaymentMethodDataMobileBalanceTypeCash: + return []byte(s), nil + case PaymentMethodDataMobileBalanceTypeSberbank: + return []byte(s), nil + case PaymentMethodDataMobileBalanceTypeTinkoffBank: + return []byte(s), nil + case PaymentMethodDataMobileBalanceTypeYooMoney: + return []byte(s), nil + case PaymentMethodDataMobileBalanceTypeMobileBalance: + return []byte(s), nil + case PaymentMethodDataMobileBalanceTypeB2bSberbank: + return []byte(s), nil + case PaymentMethodDataMobileBalanceTypeSbp: + return []byte(s), nil + case PaymentMethodDataMobileBalanceTypeSberLoan: + return []byte(s), nil + case PaymentMethodDataMobileBalanceTypeElectronicCertificate: + return []byte(s), nil + case PaymentMethodDataMobileBalanceTypeSberBnpl: + return []byte(s), nil + default: + return nil, errors.Errorf("invalid value: %q", s) + } +} + +// UnmarshalText implements encoding.TextUnmarshaler. +func (s *PaymentMethodDataMobileBalanceType) UnmarshalText(data []byte) error { + switch PaymentMethodDataMobileBalanceType(data) { + case PaymentMethodDataMobileBalanceTypeBankCard: + *s = PaymentMethodDataMobileBalanceTypeBankCard + return nil + case PaymentMethodDataMobileBalanceTypeCash: + *s = PaymentMethodDataMobileBalanceTypeCash + return nil + case PaymentMethodDataMobileBalanceTypeSberbank: + *s = PaymentMethodDataMobileBalanceTypeSberbank + return nil + case PaymentMethodDataMobileBalanceTypeTinkoffBank: + *s = PaymentMethodDataMobileBalanceTypeTinkoffBank + return nil + case PaymentMethodDataMobileBalanceTypeYooMoney: + *s = PaymentMethodDataMobileBalanceTypeYooMoney + return nil + case PaymentMethodDataMobileBalanceTypeMobileBalance: + *s = PaymentMethodDataMobileBalanceTypeMobileBalance + return nil + case PaymentMethodDataMobileBalanceTypeB2bSberbank: + *s = PaymentMethodDataMobileBalanceTypeB2bSberbank + return nil + case PaymentMethodDataMobileBalanceTypeSbp: + *s = PaymentMethodDataMobileBalanceTypeSbp + return nil + case PaymentMethodDataMobileBalanceTypeSberLoan: + *s = PaymentMethodDataMobileBalanceTypeSberLoan + return nil + case PaymentMethodDataMobileBalanceTypeElectronicCertificate: + *s = PaymentMethodDataMobileBalanceTypeElectronicCertificate + return nil + case PaymentMethodDataMobileBalanceTypeSberBnpl: + *s = PaymentMethodDataMobileBalanceTypeSberBnpl + return nil + default: + return errors.Errorf("invalid value: %q", data) + } +} + +// Merged schema. +// Ref: #/components/schemas/PaymentMethodDataSberBnpl +type PaymentMethodDataSberBnpl struct { + Type PaymentMethodDataSberBnplType `json:"type"` + Phone OptString `json:"phone"` +} + +// GetType returns the value of Type. +func (s *PaymentMethodDataSberBnpl) GetType() PaymentMethodDataSberBnplType { + return s.Type +} + +// GetPhone returns the value of Phone. +func (s *PaymentMethodDataSberBnpl) GetPhone() OptString { + return s.Phone +} + +// SetType sets the value of Type. +func (s *PaymentMethodDataSberBnpl) SetType(val PaymentMethodDataSberBnplType) { + s.Type = val +} + +// SetPhone sets the value of Phone. +func (s *PaymentMethodDataSberBnpl) SetPhone(val OptString) { + s.Phone = val +} + +type PaymentMethodDataSberBnplType string + +const ( + PaymentMethodDataSberBnplTypeBankCard PaymentMethodDataSberBnplType = "bank_card" + PaymentMethodDataSberBnplTypeCash PaymentMethodDataSberBnplType = "cash" + PaymentMethodDataSberBnplTypeSberbank PaymentMethodDataSberBnplType = "sberbank" + PaymentMethodDataSberBnplTypeTinkoffBank PaymentMethodDataSberBnplType = "tinkoff_bank" + PaymentMethodDataSberBnplTypeYooMoney PaymentMethodDataSberBnplType = "yoo_money" + PaymentMethodDataSberBnplTypeMobileBalance PaymentMethodDataSberBnplType = "mobile_balance" + PaymentMethodDataSberBnplTypeB2bSberbank PaymentMethodDataSberBnplType = "b2b_sberbank" + PaymentMethodDataSberBnplTypeSbp PaymentMethodDataSberBnplType = "sbp" + PaymentMethodDataSberBnplTypeSberLoan PaymentMethodDataSberBnplType = "sber_loan" + PaymentMethodDataSberBnplTypeElectronicCertificate PaymentMethodDataSberBnplType = "electronic_certificate" + PaymentMethodDataSberBnplTypeSberBnpl PaymentMethodDataSberBnplType = "sber_bnpl" +) + +// AllValues returns all PaymentMethodDataSberBnplType values. +func (PaymentMethodDataSberBnplType) AllValues() []PaymentMethodDataSberBnplType { + return []PaymentMethodDataSberBnplType{ + PaymentMethodDataSberBnplTypeBankCard, + PaymentMethodDataSberBnplTypeCash, + PaymentMethodDataSberBnplTypeSberbank, + PaymentMethodDataSberBnplTypeTinkoffBank, + PaymentMethodDataSberBnplTypeYooMoney, + PaymentMethodDataSberBnplTypeMobileBalance, + PaymentMethodDataSberBnplTypeB2bSberbank, + PaymentMethodDataSberBnplTypeSbp, + PaymentMethodDataSberBnplTypeSberLoan, + PaymentMethodDataSberBnplTypeElectronicCertificate, + PaymentMethodDataSberBnplTypeSberBnpl, + } +} + +// MarshalText implements encoding.TextMarshaler. +func (s PaymentMethodDataSberBnplType) MarshalText() ([]byte, error) { + switch s { + case PaymentMethodDataSberBnplTypeBankCard: + return []byte(s), nil + case PaymentMethodDataSberBnplTypeCash: + return []byte(s), nil + case PaymentMethodDataSberBnplTypeSberbank: + return []byte(s), nil + case PaymentMethodDataSberBnplTypeTinkoffBank: + return []byte(s), nil + case PaymentMethodDataSberBnplTypeYooMoney: + return []byte(s), nil + case PaymentMethodDataSberBnplTypeMobileBalance: + return []byte(s), nil + case PaymentMethodDataSberBnplTypeB2bSberbank: + return []byte(s), nil + case PaymentMethodDataSberBnplTypeSbp: + return []byte(s), nil + case PaymentMethodDataSberBnplTypeSberLoan: + return []byte(s), nil + case PaymentMethodDataSberBnplTypeElectronicCertificate: + return []byte(s), nil + case PaymentMethodDataSberBnplTypeSberBnpl: + return []byte(s), nil + default: + return nil, errors.Errorf("invalid value: %q", s) + } +} + +// UnmarshalText implements encoding.TextUnmarshaler. +func (s *PaymentMethodDataSberBnplType) UnmarshalText(data []byte) error { + switch PaymentMethodDataSberBnplType(data) { + case PaymentMethodDataSberBnplTypeBankCard: + *s = PaymentMethodDataSberBnplTypeBankCard + return nil + case PaymentMethodDataSberBnplTypeCash: + *s = PaymentMethodDataSberBnplTypeCash + return nil + case PaymentMethodDataSberBnplTypeSberbank: + *s = PaymentMethodDataSberBnplTypeSberbank + return nil + case PaymentMethodDataSberBnplTypeTinkoffBank: + *s = PaymentMethodDataSberBnplTypeTinkoffBank + return nil + case PaymentMethodDataSberBnplTypeYooMoney: + *s = PaymentMethodDataSberBnplTypeYooMoney + return nil + case PaymentMethodDataSberBnplTypeMobileBalance: + *s = PaymentMethodDataSberBnplTypeMobileBalance + return nil + case PaymentMethodDataSberBnplTypeB2bSberbank: + *s = PaymentMethodDataSberBnplTypeB2bSberbank + return nil + case PaymentMethodDataSberBnplTypeSbp: + *s = PaymentMethodDataSberBnplTypeSbp + return nil + case PaymentMethodDataSberBnplTypeSberLoan: + *s = PaymentMethodDataSberBnplTypeSberLoan + return nil + case PaymentMethodDataSberBnplTypeElectronicCertificate: + *s = PaymentMethodDataSberBnplTypeElectronicCertificate + return nil + case PaymentMethodDataSberBnplTypeSberBnpl: + *s = PaymentMethodDataSberBnplTypeSberBnpl + return nil + default: + return errors.Errorf("invalid value: %q", data) + } +} + +// Merged schema. +// Ref: #/components/schemas/PaymentMethodDataSberLoan +type PaymentMethodDataSberLoan struct { + Type PaymentMethodDataSberLoanType `json:"type"` +} + +// GetType returns the value of Type. +func (s *PaymentMethodDataSberLoan) GetType() PaymentMethodDataSberLoanType { + return s.Type +} + +// SetType sets the value of Type. +func (s *PaymentMethodDataSberLoan) SetType(val PaymentMethodDataSberLoanType) { + s.Type = val +} + +type PaymentMethodDataSberLoanType string + +const ( + PaymentMethodDataSberLoanTypeBankCard PaymentMethodDataSberLoanType = "bank_card" + PaymentMethodDataSberLoanTypeCash PaymentMethodDataSberLoanType = "cash" + PaymentMethodDataSberLoanTypeSberbank PaymentMethodDataSberLoanType = "sberbank" + PaymentMethodDataSberLoanTypeTinkoffBank PaymentMethodDataSberLoanType = "tinkoff_bank" + PaymentMethodDataSberLoanTypeYooMoney PaymentMethodDataSberLoanType = "yoo_money" + PaymentMethodDataSberLoanTypeMobileBalance PaymentMethodDataSberLoanType = "mobile_balance" + PaymentMethodDataSberLoanTypeB2bSberbank PaymentMethodDataSberLoanType = "b2b_sberbank" + PaymentMethodDataSberLoanTypeSbp PaymentMethodDataSberLoanType = "sbp" + PaymentMethodDataSberLoanTypeSberLoan PaymentMethodDataSberLoanType = "sber_loan" + PaymentMethodDataSberLoanTypeElectronicCertificate PaymentMethodDataSberLoanType = "electronic_certificate" + PaymentMethodDataSberLoanTypeSberBnpl PaymentMethodDataSberLoanType = "sber_bnpl" +) + +// AllValues returns all PaymentMethodDataSberLoanType values. +func (PaymentMethodDataSberLoanType) AllValues() []PaymentMethodDataSberLoanType { + return []PaymentMethodDataSberLoanType{ + PaymentMethodDataSberLoanTypeBankCard, + PaymentMethodDataSberLoanTypeCash, + PaymentMethodDataSberLoanTypeSberbank, + PaymentMethodDataSberLoanTypeTinkoffBank, + PaymentMethodDataSberLoanTypeYooMoney, + PaymentMethodDataSberLoanTypeMobileBalance, + PaymentMethodDataSberLoanTypeB2bSberbank, + PaymentMethodDataSberLoanTypeSbp, + PaymentMethodDataSberLoanTypeSberLoan, + PaymentMethodDataSberLoanTypeElectronicCertificate, + PaymentMethodDataSberLoanTypeSberBnpl, + } +} + +// MarshalText implements encoding.TextMarshaler. +func (s PaymentMethodDataSberLoanType) MarshalText() ([]byte, error) { + switch s { + case PaymentMethodDataSberLoanTypeBankCard: + return []byte(s), nil + case PaymentMethodDataSberLoanTypeCash: + return []byte(s), nil + case PaymentMethodDataSberLoanTypeSberbank: + return []byte(s), nil + case PaymentMethodDataSberLoanTypeTinkoffBank: + return []byte(s), nil + case PaymentMethodDataSberLoanTypeYooMoney: + return []byte(s), nil + case PaymentMethodDataSberLoanTypeMobileBalance: + return []byte(s), nil + case PaymentMethodDataSberLoanTypeB2bSberbank: + return []byte(s), nil + case PaymentMethodDataSberLoanTypeSbp: + return []byte(s), nil + case PaymentMethodDataSberLoanTypeSberLoan: + return []byte(s), nil + case PaymentMethodDataSberLoanTypeElectronicCertificate: + return []byte(s), nil + case PaymentMethodDataSberLoanTypeSberBnpl: + return []byte(s), nil + default: + return nil, errors.Errorf("invalid value: %q", s) + } +} + +// UnmarshalText implements encoding.TextUnmarshaler. +func (s *PaymentMethodDataSberLoanType) UnmarshalText(data []byte) error { + switch PaymentMethodDataSberLoanType(data) { + case PaymentMethodDataSberLoanTypeBankCard: + *s = PaymentMethodDataSberLoanTypeBankCard + return nil + case PaymentMethodDataSberLoanTypeCash: + *s = PaymentMethodDataSberLoanTypeCash + return nil + case PaymentMethodDataSberLoanTypeSberbank: + *s = PaymentMethodDataSberLoanTypeSberbank + return nil + case PaymentMethodDataSberLoanTypeTinkoffBank: + *s = PaymentMethodDataSberLoanTypeTinkoffBank + return nil + case PaymentMethodDataSberLoanTypeYooMoney: + *s = PaymentMethodDataSberLoanTypeYooMoney + return nil + case PaymentMethodDataSberLoanTypeMobileBalance: + *s = PaymentMethodDataSberLoanTypeMobileBalance + return nil + case PaymentMethodDataSberLoanTypeB2bSberbank: + *s = PaymentMethodDataSberLoanTypeB2bSberbank + return nil + case PaymentMethodDataSberLoanTypeSbp: + *s = PaymentMethodDataSberLoanTypeSbp + return nil + case PaymentMethodDataSberLoanTypeSberLoan: + *s = PaymentMethodDataSberLoanTypeSberLoan + return nil + case PaymentMethodDataSberLoanTypeElectronicCertificate: + *s = PaymentMethodDataSberLoanTypeElectronicCertificate + return nil + case PaymentMethodDataSberLoanTypeSberBnpl: + *s = PaymentMethodDataSberLoanTypeSberBnpl + return nil + default: + return errors.Errorf("invalid value: %q", data) + } +} + +// Merged schema. +// Ref: #/components/schemas/PaymentMethodDataSberbank +type PaymentMethodDataSberbank struct { + Type PaymentMethodDataSberbankType `json:"type"` + // Телефон пользователя, на который зарегистрирован + // аккаунт в SberPay. Необходим для подтверждения оплаты по + // смс (сценарий подтверждения external). Указывается в + // формате ITU-T E.164: https://ru.wikipedia.org/wiki/E.164, например 79000000000. + Phone OptString `json:"phone"` +} + +// GetType returns the value of Type. +func (s *PaymentMethodDataSberbank) GetType() PaymentMethodDataSberbankType { + return s.Type +} + +// GetPhone returns the value of Phone. +func (s *PaymentMethodDataSberbank) GetPhone() OptString { + return s.Phone +} + +// SetType sets the value of Type. +func (s *PaymentMethodDataSberbank) SetType(val PaymentMethodDataSberbankType) { + s.Type = val +} + +// SetPhone sets the value of Phone. +func (s *PaymentMethodDataSberbank) SetPhone(val OptString) { + s.Phone = val +} + +type PaymentMethodDataSberbankType string + +const ( + PaymentMethodDataSberbankTypeBankCard PaymentMethodDataSberbankType = "bank_card" + PaymentMethodDataSberbankTypeCash PaymentMethodDataSberbankType = "cash" + PaymentMethodDataSberbankTypeSberbank PaymentMethodDataSberbankType = "sberbank" + PaymentMethodDataSberbankTypeTinkoffBank PaymentMethodDataSberbankType = "tinkoff_bank" + PaymentMethodDataSberbankTypeYooMoney PaymentMethodDataSberbankType = "yoo_money" + PaymentMethodDataSberbankTypeMobileBalance PaymentMethodDataSberbankType = "mobile_balance" + PaymentMethodDataSberbankTypeB2bSberbank PaymentMethodDataSberbankType = "b2b_sberbank" + PaymentMethodDataSberbankTypeSbp PaymentMethodDataSberbankType = "sbp" + PaymentMethodDataSberbankTypeSberLoan PaymentMethodDataSberbankType = "sber_loan" + PaymentMethodDataSberbankTypeElectronicCertificate PaymentMethodDataSberbankType = "electronic_certificate" + PaymentMethodDataSberbankTypeSberBnpl PaymentMethodDataSberbankType = "sber_bnpl" +) + +// AllValues returns all PaymentMethodDataSberbankType values. +func (PaymentMethodDataSberbankType) AllValues() []PaymentMethodDataSberbankType { + return []PaymentMethodDataSberbankType{ + PaymentMethodDataSberbankTypeBankCard, + PaymentMethodDataSberbankTypeCash, + PaymentMethodDataSberbankTypeSberbank, + PaymentMethodDataSberbankTypeTinkoffBank, + PaymentMethodDataSberbankTypeYooMoney, + PaymentMethodDataSberbankTypeMobileBalance, + PaymentMethodDataSberbankTypeB2bSberbank, + PaymentMethodDataSberbankTypeSbp, + PaymentMethodDataSberbankTypeSberLoan, + PaymentMethodDataSberbankTypeElectronicCertificate, + PaymentMethodDataSberbankTypeSberBnpl, + } +} + +// MarshalText implements encoding.TextMarshaler. +func (s PaymentMethodDataSberbankType) MarshalText() ([]byte, error) { + switch s { + case PaymentMethodDataSberbankTypeBankCard: + return []byte(s), nil + case PaymentMethodDataSberbankTypeCash: + return []byte(s), nil + case PaymentMethodDataSberbankTypeSberbank: + return []byte(s), nil + case PaymentMethodDataSberbankTypeTinkoffBank: + return []byte(s), nil + case PaymentMethodDataSberbankTypeYooMoney: + return []byte(s), nil + case PaymentMethodDataSberbankTypeMobileBalance: + return []byte(s), nil + case PaymentMethodDataSberbankTypeB2bSberbank: + return []byte(s), nil + case PaymentMethodDataSberbankTypeSbp: + return []byte(s), nil + case PaymentMethodDataSberbankTypeSberLoan: + return []byte(s), nil + case PaymentMethodDataSberbankTypeElectronicCertificate: + return []byte(s), nil + case PaymentMethodDataSberbankTypeSberBnpl: + return []byte(s), nil + default: + return nil, errors.Errorf("invalid value: %q", s) + } +} + +// UnmarshalText implements encoding.TextUnmarshaler. +func (s *PaymentMethodDataSberbankType) UnmarshalText(data []byte) error { + switch PaymentMethodDataSberbankType(data) { + case PaymentMethodDataSberbankTypeBankCard: + *s = PaymentMethodDataSberbankTypeBankCard + return nil + case PaymentMethodDataSberbankTypeCash: + *s = PaymentMethodDataSberbankTypeCash + return nil + case PaymentMethodDataSberbankTypeSberbank: + *s = PaymentMethodDataSberbankTypeSberbank + return nil + case PaymentMethodDataSberbankTypeTinkoffBank: + *s = PaymentMethodDataSberbankTypeTinkoffBank + return nil + case PaymentMethodDataSberbankTypeYooMoney: + *s = PaymentMethodDataSberbankTypeYooMoney + return nil + case PaymentMethodDataSberbankTypeMobileBalance: + *s = PaymentMethodDataSberbankTypeMobileBalance + return nil + case PaymentMethodDataSberbankTypeB2bSberbank: + *s = PaymentMethodDataSberbankTypeB2bSberbank + return nil + case PaymentMethodDataSberbankTypeSbp: + *s = PaymentMethodDataSberbankTypeSbp + return nil + case PaymentMethodDataSberbankTypeSberLoan: + *s = PaymentMethodDataSberbankTypeSberLoan + return nil + case PaymentMethodDataSberbankTypeElectronicCertificate: + *s = PaymentMethodDataSberbankTypeElectronicCertificate + return nil + case PaymentMethodDataSberbankTypeSberBnpl: + *s = PaymentMethodDataSberbankTypeSberBnpl + return nil + default: + return errors.Errorf("invalid value: %q", data) + } +} + +// Merged schema. +// Ref: #/components/schemas/PaymentMethodDataSbp +type PaymentMethodDataSbp struct { + Type PaymentMethodDataSbpType `json:"type"` +} + +// GetType returns the value of Type. +func (s *PaymentMethodDataSbp) GetType() PaymentMethodDataSbpType { + return s.Type +} + +// SetType sets the value of Type. +func (s *PaymentMethodDataSbp) SetType(val PaymentMethodDataSbpType) { + s.Type = val +} + +type PaymentMethodDataSbpType string + +const ( + PaymentMethodDataSbpTypeBankCard PaymentMethodDataSbpType = "bank_card" + PaymentMethodDataSbpTypeCash PaymentMethodDataSbpType = "cash" + PaymentMethodDataSbpTypeSberbank PaymentMethodDataSbpType = "sberbank" + PaymentMethodDataSbpTypeTinkoffBank PaymentMethodDataSbpType = "tinkoff_bank" + PaymentMethodDataSbpTypeYooMoney PaymentMethodDataSbpType = "yoo_money" + PaymentMethodDataSbpTypeMobileBalance PaymentMethodDataSbpType = "mobile_balance" + PaymentMethodDataSbpTypeB2bSberbank PaymentMethodDataSbpType = "b2b_sberbank" + PaymentMethodDataSbpTypeSbp PaymentMethodDataSbpType = "sbp" + PaymentMethodDataSbpTypeSberLoan PaymentMethodDataSbpType = "sber_loan" + PaymentMethodDataSbpTypeElectronicCertificate PaymentMethodDataSbpType = "electronic_certificate" + PaymentMethodDataSbpTypeSberBnpl PaymentMethodDataSbpType = "sber_bnpl" +) + +// AllValues returns all PaymentMethodDataSbpType values. +func (PaymentMethodDataSbpType) AllValues() []PaymentMethodDataSbpType { + return []PaymentMethodDataSbpType{ + PaymentMethodDataSbpTypeBankCard, + PaymentMethodDataSbpTypeCash, + PaymentMethodDataSbpTypeSberbank, + PaymentMethodDataSbpTypeTinkoffBank, + PaymentMethodDataSbpTypeYooMoney, + PaymentMethodDataSbpTypeMobileBalance, + PaymentMethodDataSbpTypeB2bSberbank, + PaymentMethodDataSbpTypeSbp, + PaymentMethodDataSbpTypeSberLoan, + PaymentMethodDataSbpTypeElectronicCertificate, + PaymentMethodDataSbpTypeSberBnpl, + } +} + +// MarshalText implements encoding.TextMarshaler. +func (s PaymentMethodDataSbpType) MarshalText() ([]byte, error) { + switch s { + case PaymentMethodDataSbpTypeBankCard: + return []byte(s), nil + case PaymentMethodDataSbpTypeCash: + return []byte(s), nil + case PaymentMethodDataSbpTypeSberbank: + return []byte(s), nil + case PaymentMethodDataSbpTypeTinkoffBank: + return []byte(s), nil + case PaymentMethodDataSbpTypeYooMoney: + return []byte(s), nil + case PaymentMethodDataSbpTypeMobileBalance: + return []byte(s), nil + case PaymentMethodDataSbpTypeB2bSberbank: + return []byte(s), nil + case PaymentMethodDataSbpTypeSbp: + return []byte(s), nil + case PaymentMethodDataSbpTypeSberLoan: + return []byte(s), nil + case PaymentMethodDataSbpTypeElectronicCertificate: + return []byte(s), nil + case PaymentMethodDataSbpTypeSberBnpl: + return []byte(s), nil + default: + return nil, errors.Errorf("invalid value: %q", s) + } +} + +// UnmarshalText implements encoding.TextUnmarshaler. +func (s *PaymentMethodDataSbpType) UnmarshalText(data []byte) error { + switch PaymentMethodDataSbpType(data) { + case PaymentMethodDataSbpTypeBankCard: + *s = PaymentMethodDataSbpTypeBankCard + return nil + case PaymentMethodDataSbpTypeCash: + *s = PaymentMethodDataSbpTypeCash + return nil + case PaymentMethodDataSbpTypeSberbank: + *s = PaymentMethodDataSbpTypeSberbank + return nil + case PaymentMethodDataSbpTypeTinkoffBank: + *s = PaymentMethodDataSbpTypeTinkoffBank + return nil + case PaymentMethodDataSbpTypeYooMoney: + *s = PaymentMethodDataSbpTypeYooMoney + return nil + case PaymentMethodDataSbpTypeMobileBalance: + *s = PaymentMethodDataSbpTypeMobileBalance + return nil + case PaymentMethodDataSbpTypeB2bSberbank: + *s = PaymentMethodDataSbpTypeB2bSberbank + return nil + case PaymentMethodDataSbpTypeSbp: + *s = PaymentMethodDataSbpTypeSbp + return nil + case PaymentMethodDataSbpTypeSberLoan: + *s = PaymentMethodDataSbpTypeSberLoan + return nil + case PaymentMethodDataSbpTypeElectronicCertificate: + *s = PaymentMethodDataSbpTypeElectronicCertificate + return nil + case PaymentMethodDataSbpTypeSberBnpl: + *s = PaymentMethodDataSbpTypeSberBnpl + return nil + default: + return errors.Errorf("invalid value: %q", data) + } +} + +// Merged schema. +// Ref: #/components/schemas/PaymentMethodDataTinkoffBank +type PaymentMethodDataTinkoffBank struct { + Type PaymentMethodDataTinkoffBankType `json:"type"` +} + +// GetType returns the value of Type. +func (s *PaymentMethodDataTinkoffBank) GetType() PaymentMethodDataTinkoffBankType { + return s.Type +} + +// SetType sets the value of Type. +func (s *PaymentMethodDataTinkoffBank) SetType(val PaymentMethodDataTinkoffBankType) { + s.Type = val +} + +type PaymentMethodDataTinkoffBankType string + +const ( + PaymentMethodDataTinkoffBankTypeBankCard PaymentMethodDataTinkoffBankType = "bank_card" + PaymentMethodDataTinkoffBankTypeCash PaymentMethodDataTinkoffBankType = "cash" + PaymentMethodDataTinkoffBankTypeSberbank PaymentMethodDataTinkoffBankType = "sberbank" + PaymentMethodDataTinkoffBankTypeTinkoffBank PaymentMethodDataTinkoffBankType = "tinkoff_bank" + PaymentMethodDataTinkoffBankTypeYooMoney PaymentMethodDataTinkoffBankType = "yoo_money" + PaymentMethodDataTinkoffBankTypeMobileBalance PaymentMethodDataTinkoffBankType = "mobile_balance" + PaymentMethodDataTinkoffBankTypeB2bSberbank PaymentMethodDataTinkoffBankType = "b2b_sberbank" + PaymentMethodDataTinkoffBankTypeSbp PaymentMethodDataTinkoffBankType = "sbp" + PaymentMethodDataTinkoffBankTypeSberLoan PaymentMethodDataTinkoffBankType = "sber_loan" + PaymentMethodDataTinkoffBankTypeElectronicCertificate PaymentMethodDataTinkoffBankType = "electronic_certificate" + PaymentMethodDataTinkoffBankTypeSberBnpl PaymentMethodDataTinkoffBankType = "sber_bnpl" +) + +// AllValues returns all PaymentMethodDataTinkoffBankType values. +func (PaymentMethodDataTinkoffBankType) AllValues() []PaymentMethodDataTinkoffBankType { + return []PaymentMethodDataTinkoffBankType{ + PaymentMethodDataTinkoffBankTypeBankCard, + PaymentMethodDataTinkoffBankTypeCash, + PaymentMethodDataTinkoffBankTypeSberbank, + PaymentMethodDataTinkoffBankTypeTinkoffBank, + PaymentMethodDataTinkoffBankTypeYooMoney, + PaymentMethodDataTinkoffBankTypeMobileBalance, + PaymentMethodDataTinkoffBankTypeB2bSberbank, + PaymentMethodDataTinkoffBankTypeSbp, + PaymentMethodDataTinkoffBankTypeSberLoan, + PaymentMethodDataTinkoffBankTypeElectronicCertificate, + PaymentMethodDataTinkoffBankTypeSberBnpl, + } +} + +// MarshalText implements encoding.TextMarshaler. +func (s PaymentMethodDataTinkoffBankType) MarshalText() ([]byte, error) { + switch s { + case PaymentMethodDataTinkoffBankTypeBankCard: + return []byte(s), nil + case PaymentMethodDataTinkoffBankTypeCash: + return []byte(s), nil + case PaymentMethodDataTinkoffBankTypeSberbank: + return []byte(s), nil + case PaymentMethodDataTinkoffBankTypeTinkoffBank: + return []byte(s), nil + case PaymentMethodDataTinkoffBankTypeYooMoney: + return []byte(s), nil + case PaymentMethodDataTinkoffBankTypeMobileBalance: + return []byte(s), nil + case PaymentMethodDataTinkoffBankTypeB2bSberbank: + return []byte(s), nil + case PaymentMethodDataTinkoffBankTypeSbp: + return []byte(s), nil + case PaymentMethodDataTinkoffBankTypeSberLoan: + return []byte(s), nil + case PaymentMethodDataTinkoffBankTypeElectronicCertificate: + return []byte(s), nil + case PaymentMethodDataTinkoffBankTypeSberBnpl: + return []byte(s), nil + default: + return nil, errors.Errorf("invalid value: %q", s) + } +} + +// UnmarshalText implements encoding.TextUnmarshaler. +func (s *PaymentMethodDataTinkoffBankType) UnmarshalText(data []byte) error { + switch PaymentMethodDataTinkoffBankType(data) { + case PaymentMethodDataTinkoffBankTypeBankCard: + *s = PaymentMethodDataTinkoffBankTypeBankCard + return nil + case PaymentMethodDataTinkoffBankTypeCash: + *s = PaymentMethodDataTinkoffBankTypeCash + return nil + case PaymentMethodDataTinkoffBankTypeSberbank: + *s = PaymentMethodDataTinkoffBankTypeSberbank + return nil + case PaymentMethodDataTinkoffBankTypeTinkoffBank: + *s = PaymentMethodDataTinkoffBankTypeTinkoffBank + return nil + case PaymentMethodDataTinkoffBankTypeYooMoney: + *s = PaymentMethodDataTinkoffBankTypeYooMoney + return nil + case PaymentMethodDataTinkoffBankTypeMobileBalance: + *s = PaymentMethodDataTinkoffBankTypeMobileBalance + return nil + case PaymentMethodDataTinkoffBankTypeB2bSberbank: + *s = PaymentMethodDataTinkoffBankTypeB2bSberbank + return nil + case PaymentMethodDataTinkoffBankTypeSbp: + *s = PaymentMethodDataTinkoffBankTypeSbp + return nil + case PaymentMethodDataTinkoffBankTypeSberLoan: + *s = PaymentMethodDataTinkoffBankTypeSberLoan + return nil + case PaymentMethodDataTinkoffBankTypeElectronicCertificate: + *s = PaymentMethodDataTinkoffBankTypeElectronicCertificate + return nil + case PaymentMethodDataTinkoffBankTypeSberBnpl: + *s = PaymentMethodDataTinkoffBankTypeSberBnpl + return nil + default: + return errors.Errorf("invalid value: %q", data) + } +} + +// Merged schema. +// Ref: #/components/schemas/PaymentMethodDataYooMoney +type PaymentMethodDataYooMoney struct { + Type PaymentMethodDataYooMoneyType `json:"type"` +} + +// GetType returns the value of Type. +func (s *PaymentMethodDataYooMoney) GetType() PaymentMethodDataYooMoneyType { + return s.Type +} + +// SetType sets the value of Type. +func (s *PaymentMethodDataYooMoney) SetType(val PaymentMethodDataYooMoneyType) { + s.Type = val +} + +type PaymentMethodDataYooMoneyType string + +const ( + PaymentMethodDataYooMoneyTypeBankCard PaymentMethodDataYooMoneyType = "bank_card" + PaymentMethodDataYooMoneyTypeCash PaymentMethodDataYooMoneyType = "cash" + PaymentMethodDataYooMoneyTypeSberbank PaymentMethodDataYooMoneyType = "sberbank" + PaymentMethodDataYooMoneyTypeTinkoffBank PaymentMethodDataYooMoneyType = "tinkoff_bank" + PaymentMethodDataYooMoneyTypeYooMoney PaymentMethodDataYooMoneyType = "yoo_money" + PaymentMethodDataYooMoneyTypeMobileBalance PaymentMethodDataYooMoneyType = "mobile_balance" + PaymentMethodDataYooMoneyTypeB2bSberbank PaymentMethodDataYooMoneyType = "b2b_sberbank" + PaymentMethodDataYooMoneyTypeSbp PaymentMethodDataYooMoneyType = "sbp" + PaymentMethodDataYooMoneyTypeSberLoan PaymentMethodDataYooMoneyType = "sber_loan" + PaymentMethodDataYooMoneyTypeElectronicCertificate PaymentMethodDataYooMoneyType = "electronic_certificate" + PaymentMethodDataYooMoneyTypeSberBnpl PaymentMethodDataYooMoneyType = "sber_bnpl" +) + +// AllValues returns all PaymentMethodDataYooMoneyType values. +func (PaymentMethodDataYooMoneyType) AllValues() []PaymentMethodDataYooMoneyType { + return []PaymentMethodDataYooMoneyType{ + PaymentMethodDataYooMoneyTypeBankCard, + PaymentMethodDataYooMoneyTypeCash, + PaymentMethodDataYooMoneyTypeSberbank, + PaymentMethodDataYooMoneyTypeTinkoffBank, + PaymentMethodDataYooMoneyTypeYooMoney, + PaymentMethodDataYooMoneyTypeMobileBalance, + PaymentMethodDataYooMoneyTypeB2bSberbank, + PaymentMethodDataYooMoneyTypeSbp, + PaymentMethodDataYooMoneyTypeSberLoan, + PaymentMethodDataYooMoneyTypeElectronicCertificate, + PaymentMethodDataYooMoneyTypeSberBnpl, + } +} + +// MarshalText implements encoding.TextMarshaler. +func (s PaymentMethodDataYooMoneyType) MarshalText() ([]byte, error) { + switch s { + case PaymentMethodDataYooMoneyTypeBankCard: + return []byte(s), nil + case PaymentMethodDataYooMoneyTypeCash: + return []byte(s), nil + case PaymentMethodDataYooMoneyTypeSberbank: + return []byte(s), nil + case PaymentMethodDataYooMoneyTypeTinkoffBank: + return []byte(s), nil + case PaymentMethodDataYooMoneyTypeYooMoney: + return []byte(s), nil + case PaymentMethodDataYooMoneyTypeMobileBalance: + return []byte(s), nil + case PaymentMethodDataYooMoneyTypeB2bSberbank: + return []byte(s), nil + case PaymentMethodDataYooMoneyTypeSbp: + return []byte(s), nil + case PaymentMethodDataYooMoneyTypeSberLoan: + return []byte(s), nil + case PaymentMethodDataYooMoneyTypeElectronicCertificate: + return []byte(s), nil + case PaymentMethodDataYooMoneyTypeSberBnpl: + return []byte(s), nil + default: + return nil, errors.Errorf("invalid value: %q", s) + } +} + +// UnmarshalText implements encoding.TextUnmarshaler. +func (s *PaymentMethodDataYooMoneyType) UnmarshalText(data []byte) error { + switch PaymentMethodDataYooMoneyType(data) { + case PaymentMethodDataYooMoneyTypeBankCard: + *s = PaymentMethodDataYooMoneyTypeBankCard + return nil + case PaymentMethodDataYooMoneyTypeCash: + *s = PaymentMethodDataYooMoneyTypeCash + return nil + case PaymentMethodDataYooMoneyTypeSberbank: + *s = PaymentMethodDataYooMoneyTypeSberbank + return nil + case PaymentMethodDataYooMoneyTypeTinkoffBank: + *s = PaymentMethodDataYooMoneyTypeTinkoffBank + return nil + case PaymentMethodDataYooMoneyTypeYooMoney: + *s = PaymentMethodDataYooMoneyTypeYooMoney + return nil + case PaymentMethodDataYooMoneyTypeMobileBalance: + *s = PaymentMethodDataYooMoneyTypeMobileBalance + return nil + case PaymentMethodDataYooMoneyTypeB2bSberbank: + *s = PaymentMethodDataYooMoneyTypeB2bSberbank + return nil + case PaymentMethodDataYooMoneyTypeSbp: + *s = PaymentMethodDataYooMoneyTypeSbp + return nil + case PaymentMethodDataYooMoneyTypeSberLoan: + *s = PaymentMethodDataYooMoneyTypeSberLoan + return nil + case PaymentMethodDataYooMoneyTypeElectronicCertificate: + *s = PaymentMethodDataYooMoneyTypeElectronicCertificate + return nil + case PaymentMethodDataYooMoneyTypeSberBnpl: + *s = PaymentMethodDataYooMoneyTypeSberBnpl + return nil + default: + return errors.Errorf("invalid value: %q", data) + } +} + +// Merged schema. +// Ref: #/components/schemas/PaymentMethodElectronicCertificate +type PaymentMethodElectronicCertificate struct { + Type PaymentMethodType `json:"type"` + // Payment method ID. + ID string `json:"id"` + // Признак сохранения способа оплаты для автоплатежей: + // https://yookassa. + // ru/developers/payment-acceptance/scenario-extensions/recurring-payments/pay-with-saved. + // Возможные значения: * true — способ оплаты сохранен для + // автоплатежей и выплат; * false — способ оплаты не + // сохранен. + Saved bool `json:"saved"` + Status PaymentMethodElectronicCertificateStatus `json:"status"` + Title OptPaymentMethodTitle `json:"title"` + Card OptPaymentMethodElectronicCertificateCard `json:"card"` + ElectronicCertificate OptElectronicCertificatePayment `json:"electronic_certificate"` + // Одобренная корзина покупки — список товаров, + // одобренных к оплате по электронному сертификату. + // Присутствует только при оплате на готовой странице + // ЮKassa: https://yookassa. + // ru/developers/payment-acceptance/integration-scenarios/manual-integration/other/electronic-certificate/ready-made-payment-form. + Articles []ElectronicCertificateApprovedPaymentArticle `json:"articles"` +} + +// GetType returns the value of Type. +func (s *PaymentMethodElectronicCertificate) GetType() PaymentMethodType { + return s.Type +} + +// GetID returns the value of ID. +func (s *PaymentMethodElectronicCertificate) GetID() string { + return s.ID +} + +// GetSaved returns the value of Saved. +func (s *PaymentMethodElectronicCertificate) GetSaved() bool { + return s.Saved +} + +// GetStatus returns the value of Status. +func (s *PaymentMethodElectronicCertificate) GetStatus() PaymentMethodElectronicCertificateStatus { + return s.Status +} + +// GetTitle returns the value of Title. +func (s *PaymentMethodElectronicCertificate) GetTitle() OptPaymentMethodTitle { + return s.Title +} + +// GetCard returns the value of Card. +func (s *PaymentMethodElectronicCertificate) GetCard() OptPaymentMethodElectronicCertificateCard { + return s.Card +} + +// GetElectronicCertificate returns the value of ElectronicCertificate. +func (s *PaymentMethodElectronicCertificate) GetElectronicCertificate() OptElectronicCertificatePayment { + return s.ElectronicCertificate +} + +// GetArticles returns the value of Articles. +func (s *PaymentMethodElectronicCertificate) GetArticles() []ElectronicCertificateApprovedPaymentArticle { + return s.Articles +} + +// SetType sets the value of Type. +func (s *PaymentMethodElectronicCertificate) SetType(val PaymentMethodType) { + s.Type = val +} + +// SetID sets the value of ID. +func (s *PaymentMethodElectronicCertificate) SetID(val string) { + s.ID = val +} + +// SetSaved sets the value of Saved. +func (s *PaymentMethodElectronicCertificate) SetSaved(val bool) { + s.Saved = val +} + +// SetStatus sets the value of Status. +func (s *PaymentMethodElectronicCertificate) SetStatus(val PaymentMethodElectronicCertificateStatus) { + s.Status = val +} + +// SetTitle sets the value of Title. +func (s *PaymentMethodElectronicCertificate) SetTitle(val OptPaymentMethodTitle) { + s.Title = val +} + +// SetCard sets the value of Card. +func (s *PaymentMethodElectronicCertificate) SetCard(val OptPaymentMethodElectronicCertificateCard) { + s.Card = val +} + +// SetElectronicCertificate sets the value of ElectronicCertificate. +func (s *PaymentMethodElectronicCertificate) SetElectronicCertificate(val OptElectronicCertificatePayment) { + s.ElectronicCertificate = val +} + +// SetArticles sets the value of Articles. +func (s *PaymentMethodElectronicCertificate) SetArticles(val []ElectronicCertificateApprovedPaymentArticle) { + s.Articles = val +} + +// Данные банковской карты. +type PaymentMethodElectronicCertificateCard struct { + First6 OptBankCardFirst6 `json:"first6"` + Last4 BankCardLast4 `json:"last4"` + ExpiryYear BankCardExpiryYear `json:"expiry_year"` + ExpiryMonth BankCardExpiryMonth `json:"expiry_month"` + CardType BankCardType `json:"card_type"` + CardProduct OptBankCardProduct `json:"card_product"` + IssuerCountry OptBankCardIssuerCountry `json:"issuer_country"` + IssuerName OptBankCardIssuerName `json:"issuer_name"` + Source OptBankCardDataSource `json:"source"` +} + +// GetFirst6 returns the value of First6. +func (s *PaymentMethodElectronicCertificateCard) GetFirst6() OptBankCardFirst6 { + return s.First6 +} + +// GetLast4 returns the value of Last4. +func (s *PaymentMethodElectronicCertificateCard) GetLast4() BankCardLast4 { + return s.Last4 +} + +// GetExpiryYear returns the value of ExpiryYear. +func (s *PaymentMethodElectronicCertificateCard) GetExpiryYear() BankCardExpiryYear { + return s.ExpiryYear +} + +// GetExpiryMonth returns the value of ExpiryMonth. +func (s *PaymentMethodElectronicCertificateCard) GetExpiryMonth() BankCardExpiryMonth { + return s.ExpiryMonth +} + +// GetCardType returns the value of CardType. +func (s *PaymentMethodElectronicCertificateCard) GetCardType() BankCardType { + return s.CardType +} + +// GetCardProduct returns the value of CardProduct. +func (s *PaymentMethodElectronicCertificateCard) GetCardProduct() OptBankCardProduct { + return s.CardProduct +} + +// GetIssuerCountry returns the value of IssuerCountry. +func (s *PaymentMethodElectronicCertificateCard) GetIssuerCountry() OptBankCardIssuerCountry { + return s.IssuerCountry +} + +// GetIssuerName returns the value of IssuerName. +func (s *PaymentMethodElectronicCertificateCard) GetIssuerName() OptBankCardIssuerName { + return s.IssuerName +} + +// GetSource returns the value of Source. +func (s *PaymentMethodElectronicCertificateCard) GetSource() OptBankCardDataSource { + return s.Source +} + +// SetFirst6 sets the value of First6. +func (s *PaymentMethodElectronicCertificateCard) SetFirst6(val OptBankCardFirst6) { + s.First6 = val +} + +// SetLast4 sets the value of Last4. +func (s *PaymentMethodElectronicCertificateCard) SetLast4(val BankCardLast4) { + s.Last4 = val +} + +// SetExpiryYear sets the value of ExpiryYear. +func (s *PaymentMethodElectronicCertificateCard) SetExpiryYear(val BankCardExpiryYear) { + s.ExpiryYear = val +} + +// SetExpiryMonth sets the value of ExpiryMonth. +func (s *PaymentMethodElectronicCertificateCard) SetExpiryMonth(val BankCardExpiryMonth) { + s.ExpiryMonth = val +} + +// SetCardType sets the value of CardType. +func (s *PaymentMethodElectronicCertificateCard) SetCardType(val BankCardType) { + s.CardType = val +} + +// SetCardProduct sets the value of CardProduct. +func (s *PaymentMethodElectronicCertificateCard) SetCardProduct(val OptBankCardProduct) { + s.CardProduct = val +} + +// SetIssuerCountry sets the value of IssuerCountry. +func (s *PaymentMethodElectronicCertificateCard) SetIssuerCountry(val OptBankCardIssuerCountry) { + s.IssuerCountry = val +} + +// SetIssuerName sets the value of IssuerName. +func (s *PaymentMethodElectronicCertificateCard) SetIssuerName(val OptBankCardIssuerName) { + s.IssuerName = val +} + +// SetSource sets the value of Source. +func (s *PaymentMethodElectronicCertificateCard) SetSource(val OptBankCardDataSource) { + s.Source = val +} + +// Статус проверки и сохранения способа оплаты. +// Возможные значения: * pending — ожидает действий от +// пользователя; * active — способ оплаты сохранен, его +// можно использовать для автоплатежей или выплат; * +// inactive — способ оплаты не сохранен: пользователь не +// подтвердил привязку платежного средства или при +// сохранении способа оплаты возникла ошибка. Чтобы +// узнать подробности, обратитесь в техническую +// поддержку ЮKassa. +type PaymentMethodElectronicCertificateStatus string + +const ( + PaymentMethodElectronicCertificateStatusPending PaymentMethodElectronicCertificateStatus = "pending" + PaymentMethodElectronicCertificateStatusActive PaymentMethodElectronicCertificateStatus = "active" + PaymentMethodElectronicCertificateStatusInactive PaymentMethodElectronicCertificateStatus = "inactive" +) + +// AllValues returns all PaymentMethodElectronicCertificateStatus values. +func (PaymentMethodElectronicCertificateStatus) AllValues() []PaymentMethodElectronicCertificateStatus { + return []PaymentMethodElectronicCertificateStatus{ + PaymentMethodElectronicCertificateStatusPending, + PaymentMethodElectronicCertificateStatusActive, + PaymentMethodElectronicCertificateStatusInactive, + } +} + +// MarshalText implements encoding.TextMarshaler. +func (s PaymentMethodElectronicCertificateStatus) MarshalText() ([]byte, error) { + switch s { + case PaymentMethodElectronicCertificateStatusPending: + return []byte(s), nil + case PaymentMethodElectronicCertificateStatusActive: + return []byte(s), nil + case PaymentMethodElectronicCertificateStatusInactive: + return []byte(s), nil + default: + return nil, errors.Errorf("invalid value: %q", s) + } +} + +// UnmarshalText implements encoding.TextUnmarshaler. +func (s *PaymentMethodElectronicCertificateStatus) UnmarshalText(data []byte) error { + switch PaymentMethodElectronicCertificateStatus(data) { + case PaymentMethodElectronicCertificateStatusPending: + *s = PaymentMethodElectronicCertificateStatusPending + return nil + case PaymentMethodElectronicCertificateStatusActive: + *s = PaymentMethodElectronicCertificateStatusActive + return nil + case PaymentMethodElectronicCertificateStatusInactive: + *s = PaymentMethodElectronicCertificateStatusInactive + return nil + default: + return errors.Errorf("invalid value: %q", data) + } +} + +// Merged schema. +// Ref: #/components/schemas/PaymentMethodGooglePay +type PaymentMethodGooglePay struct { + Type PaymentMethodType `json:"type"` + // Payment method ID. + ID string `json:"id"` + // Признак сохранения способа оплаты для автоплатежей: + // https://yookassa. + // ru/developers/payment-acceptance/scenario-extensions/recurring-payments/pay-with-saved. + // Возможные значения: * true — способ оплаты сохранен для + // автоплатежей и выплат; * false — способ оплаты не + // сохранен. + Saved bool `json:"saved"` + Status PaymentMethodGooglePayStatus `json:"status"` + Title OptPaymentMethodTitle `json:"title"` +} + +// GetType returns the value of Type. +func (s *PaymentMethodGooglePay) GetType() PaymentMethodType { + return s.Type +} + +// GetID returns the value of ID. +func (s *PaymentMethodGooglePay) GetID() string { + return s.ID +} + +// GetSaved returns the value of Saved. +func (s *PaymentMethodGooglePay) GetSaved() bool { + return s.Saved +} + +// GetStatus returns the value of Status. +func (s *PaymentMethodGooglePay) GetStatus() PaymentMethodGooglePayStatus { + return s.Status +} + +// GetTitle returns the value of Title. +func (s *PaymentMethodGooglePay) GetTitle() OptPaymentMethodTitle { + return s.Title +} + +// SetType sets the value of Type. +func (s *PaymentMethodGooglePay) SetType(val PaymentMethodType) { + s.Type = val +} + +// SetID sets the value of ID. +func (s *PaymentMethodGooglePay) SetID(val string) { + s.ID = val +} + +// SetSaved sets the value of Saved. +func (s *PaymentMethodGooglePay) SetSaved(val bool) { + s.Saved = val +} + +// SetStatus sets the value of Status. +func (s *PaymentMethodGooglePay) SetStatus(val PaymentMethodGooglePayStatus) { + s.Status = val +} + +// SetTitle sets the value of Title. +func (s *PaymentMethodGooglePay) SetTitle(val OptPaymentMethodTitle) { + s.Title = val +} + +// Статус проверки и сохранения способа оплаты. +// Возможные значения: * pending — ожидает действий от +// пользователя; * active — способ оплаты сохранен, его +// можно использовать для автоплатежей или выплат; * +// inactive — способ оплаты не сохранен: пользователь не +// подтвердил привязку платежного средства или при +// сохранении способа оплаты возникла ошибка. Чтобы +// узнать подробности, обратитесь в техническую +// поддержку ЮKassa. +type PaymentMethodGooglePayStatus string + +const ( + PaymentMethodGooglePayStatusPending PaymentMethodGooglePayStatus = "pending" + PaymentMethodGooglePayStatusActive PaymentMethodGooglePayStatus = "active" + PaymentMethodGooglePayStatusInactive PaymentMethodGooglePayStatus = "inactive" +) + +// AllValues returns all PaymentMethodGooglePayStatus values. +func (PaymentMethodGooglePayStatus) AllValues() []PaymentMethodGooglePayStatus { + return []PaymentMethodGooglePayStatus{ + PaymentMethodGooglePayStatusPending, + PaymentMethodGooglePayStatusActive, + PaymentMethodGooglePayStatusInactive, + } +} + +// MarshalText implements encoding.TextMarshaler. +func (s PaymentMethodGooglePayStatus) MarshalText() ([]byte, error) { + switch s { + case PaymentMethodGooglePayStatusPending: + return []byte(s), nil + case PaymentMethodGooglePayStatusActive: + return []byte(s), nil + case PaymentMethodGooglePayStatusInactive: + return []byte(s), nil + default: + return nil, errors.Errorf("invalid value: %q", s) + } +} + +// UnmarshalText implements encoding.TextUnmarshaler. +func (s *PaymentMethodGooglePayStatus) UnmarshalText(data []byte) error { + switch PaymentMethodGooglePayStatus(data) { + case PaymentMethodGooglePayStatusPending: + *s = PaymentMethodGooglePayStatusPending + return nil + case PaymentMethodGooglePayStatusActive: + *s = PaymentMethodGooglePayStatusActive + return nil + case PaymentMethodGooglePayStatusInactive: + *s = PaymentMethodGooglePayStatusInactive + return nil + default: + return errors.Errorf("invalid value: %q", data) + } +} + +type PaymentMethodId string + +// Merged schema. +// Ref: #/components/schemas/PaymentMethodInstallments +type PaymentMethodInstallments struct { + Type PaymentMethodType `json:"type"` + // Payment method ID. + ID string `json:"id"` + // Признак сохранения способа оплаты для автоплатежей: + // https://yookassa. + // ru/developers/payment-acceptance/scenario-extensions/recurring-payments/pay-with-saved. + // Возможные значения: * true — способ оплаты сохранен для + // автоплатежей и выплат; * false — способ оплаты не + // сохранен. + Saved bool `json:"saved"` + Status PaymentMethodInstallmentsStatus `json:"status"` + Title OptPaymentMethodTitle `json:"title"` +} + +// GetType returns the value of Type. +func (s *PaymentMethodInstallments) GetType() PaymentMethodType { + return s.Type +} + +// GetID returns the value of ID. +func (s *PaymentMethodInstallments) GetID() string { + return s.ID +} + +// GetSaved returns the value of Saved. +func (s *PaymentMethodInstallments) GetSaved() bool { + return s.Saved +} + +// GetStatus returns the value of Status. +func (s *PaymentMethodInstallments) GetStatus() PaymentMethodInstallmentsStatus { + return s.Status +} + +// GetTitle returns the value of Title. +func (s *PaymentMethodInstallments) GetTitle() OptPaymentMethodTitle { + return s.Title +} + +// SetType sets the value of Type. +func (s *PaymentMethodInstallments) SetType(val PaymentMethodType) { + s.Type = val +} + +// SetID sets the value of ID. +func (s *PaymentMethodInstallments) SetID(val string) { + s.ID = val +} + +// SetSaved sets the value of Saved. +func (s *PaymentMethodInstallments) SetSaved(val bool) { + s.Saved = val +} + +// SetStatus sets the value of Status. +func (s *PaymentMethodInstallments) SetStatus(val PaymentMethodInstallmentsStatus) { + s.Status = val +} + +// SetTitle sets the value of Title. +func (s *PaymentMethodInstallments) SetTitle(val OptPaymentMethodTitle) { + s.Title = val +} + +// Статус проверки и сохранения способа оплаты. +// Возможные значения: * pending — ожидает действий от +// пользователя; * active — способ оплаты сохранен, его +// можно использовать для автоплатежей или выплат; * +// inactive — способ оплаты не сохранен: пользователь не +// подтвердил привязку платежного средства или при +// сохранении способа оплаты возникла ошибка. Чтобы +// узнать подробности, обратитесь в техническую +// поддержку ЮKassa. +type PaymentMethodInstallmentsStatus string + +const ( + PaymentMethodInstallmentsStatusPending PaymentMethodInstallmentsStatus = "pending" + PaymentMethodInstallmentsStatusActive PaymentMethodInstallmentsStatus = "active" + PaymentMethodInstallmentsStatusInactive PaymentMethodInstallmentsStatus = "inactive" +) + +// AllValues returns all PaymentMethodInstallmentsStatus values. +func (PaymentMethodInstallmentsStatus) AllValues() []PaymentMethodInstallmentsStatus { + return []PaymentMethodInstallmentsStatus{ + PaymentMethodInstallmentsStatusPending, + PaymentMethodInstallmentsStatusActive, + PaymentMethodInstallmentsStatusInactive, + } +} + +// MarshalText implements encoding.TextMarshaler. +func (s PaymentMethodInstallmentsStatus) MarshalText() ([]byte, error) { + switch s { + case PaymentMethodInstallmentsStatusPending: + return []byte(s), nil + case PaymentMethodInstallmentsStatusActive: + return []byte(s), nil + case PaymentMethodInstallmentsStatusInactive: + return []byte(s), nil + default: + return nil, errors.Errorf("invalid value: %q", s) + } +} + +// UnmarshalText implements encoding.TextUnmarshaler. +func (s *PaymentMethodInstallmentsStatus) UnmarshalText(data []byte) error { + switch PaymentMethodInstallmentsStatus(data) { + case PaymentMethodInstallmentsStatusPending: + *s = PaymentMethodInstallmentsStatusPending + return nil + case PaymentMethodInstallmentsStatusActive: + *s = PaymentMethodInstallmentsStatusActive + return nil + case PaymentMethodInstallmentsStatusInactive: + *s = PaymentMethodInstallmentsStatusInactive + return nil + default: + return errors.Errorf("invalid value: %q", data) + } +} + +// Merged schema. +// Ref: #/components/schemas/PaymentMethodMobileBalance +type PaymentMethodMobileBalance struct { + Type PaymentMethodType `json:"type"` + // Payment method ID. + ID string `json:"id"` + // Признак сохранения способа оплаты для автоплатежей: + // https://yookassa. + // ru/developers/payment-acceptance/scenario-extensions/recurring-payments/pay-with-saved. + // Возможные значения: * true — способ оплаты сохранен для + // автоплатежей и выплат; * false — способ оплаты не + // сохранен. + Saved bool `json:"saved"` + Status PaymentMethodMobileBalanceStatus `json:"status"` + Title OptPaymentMethodTitle `json:"title"` +} + +// GetType returns the value of Type. +func (s *PaymentMethodMobileBalance) GetType() PaymentMethodType { + return s.Type +} + +// GetID returns the value of ID. +func (s *PaymentMethodMobileBalance) GetID() string { + return s.ID +} + +// GetSaved returns the value of Saved. +func (s *PaymentMethodMobileBalance) GetSaved() bool { + return s.Saved +} + +// GetStatus returns the value of Status. +func (s *PaymentMethodMobileBalance) GetStatus() PaymentMethodMobileBalanceStatus { + return s.Status +} + +// GetTitle returns the value of Title. +func (s *PaymentMethodMobileBalance) GetTitle() OptPaymentMethodTitle { + return s.Title +} + +// SetType sets the value of Type. +func (s *PaymentMethodMobileBalance) SetType(val PaymentMethodType) { + s.Type = val +} + +// SetID sets the value of ID. +func (s *PaymentMethodMobileBalance) SetID(val string) { + s.ID = val +} + +// SetSaved sets the value of Saved. +func (s *PaymentMethodMobileBalance) SetSaved(val bool) { + s.Saved = val +} + +// SetStatus sets the value of Status. +func (s *PaymentMethodMobileBalance) SetStatus(val PaymentMethodMobileBalanceStatus) { + s.Status = val +} + +// SetTitle sets the value of Title. +func (s *PaymentMethodMobileBalance) SetTitle(val OptPaymentMethodTitle) { + s.Title = val +} + +// Статус проверки и сохранения способа оплаты. +// Возможные значения: * pending — ожидает действий от +// пользователя; * active — способ оплаты сохранен, его +// можно использовать для автоплатежей или выплат; * +// inactive — способ оплаты не сохранен: пользователь не +// подтвердил привязку платежного средства или при +// сохранении способа оплаты возникла ошибка. Чтобы +// узнать подробности, обратитесь в техническую +// поддержку ЮKassa. +type PaymentMethodMobileBalanceStatus string + +const ( + PaymentMethodMobileBalanceStatusPending PaymentMethodMobileBalanceStatus = "pending" + PaymentMethodMobileBalanceStatusActive PaymentMethodMobileBalanceStatus = "active" + PaymentMethodMobileBalanceStatusInactive PaymentMethodMobileBalanceStatus = "inactive" +) + +// AllValues returns all PaymentMethodMobileBalanceStatus values. +func (PaymentMethodMobileBalanceStatus) AllValues() []PaymentMethodMobileBalanceStatus { + return []PaymentMethodMobileBalanceStatus{ + PaymentMethodMobileBalanceStatusPending, + PaymentMethodMobileBalanceStatusActive, + PaymentMethodMobileBalanceStatusInactive, + } +} + +// MarshalText implements encoding.TextMarshaler. +func (s PaymentMethodMobileBalanceStatus) MarshalText() ([]byte, error) { + switch s { + case PaymentMethodMobileBalanceStatusPending: + return []byte(s), nil + case PaymentMethodMobileBalanceStatusActive: + return []byte(s), nil + case PaymentMethodMobileBalanceStatusInactive: + return []byte(s), nil + default: + return nil, errors.Errorf("invalid value: %q", s) + } +} + +// UnmarshalText implements encoding.TextUnmarshaler. +func (s *PaymentMethodMobileBalanceStatus) UnmarshalText(data []byte) error { + switch PaymentMethodMobileBalanceStatus(data) { + case PaymentMethodMobileBalanceStatusPending: + *s = PaymentMethodMobileBalanceStatusPending + return nil + case PaymentMethodMobileBalanceStatusActive: + *s = PaymentMethodMobileBalanceStatusActive + return nil + case PaymentMethodMobileBalanceStatusInactive: + *s = PaymentMethodMobileBalanceStatusInactive + return nil + default: + return errors.Errorf("invalid value: %q", data) + } +} + +// Merged schema. +// Ref: #/components/schemas/PaymentMethodQiwi +type PaymentMethodQiwi struct { + Type PaymentMethodType `json:"type"` + // Payment method ID. + ID string `json:"id"` + // Признак сохранения способа оплаты для автоплатежей: + // https://yookassa. + // ru/developers/payment-acceptance/scenario-extensions/recurring-payments/pay-with-saved. + // Возможные значения: * true — способ оплаты сохранен для + // автоплатежей и выплат; * false — способ оплаты не + // сохранен. + Saved bool `json:"saved"` + Status PaymentMethodQiwiStatus `json:"status"` + Title OptPaymentMethodTitle `json:"title"` +} + +// GetType returns the value of Type. +func (s *PaymentMethodQiwi) GetType() PaymentMethodType { + return s.Type +} + +// GetID returns the value of ID. +func (s *PaymentMethodQiwi) GetID() string { + return s.ID +} + +// GetSaved returns the value of Saved. +func (s *PaymentMethodQiwi) GetSaved() bool { + return s.Saved +} + +// GetStatus returns the value of Status. +func (s *PaymentMethodQiwi) GetStatus() PaymentMethodQiwiStatus { + return s.Status +} + +// GetTitle returns the value of Title. +func (s *PaymentMethodQiwi) GetTitle() OptPaymentMethodTitle { + return s.Title +} + +// SetType sets the value of Type. +func (s *PaymentMethodQiwi) SetType(val PaymentMethodType) { + s.Type = val +} + +// SetID sets the value of ID. +func (s *PaymentMethodQiwi) SetID(val string) { + s.ID = val +} + +// SetSaved sets the value of Saved. +func (s *PaymentMethodQiwi) SetSaved(val bool) { + s.Saved = val +} + +// SetStatus sets the value of Status. +func (s *PaymentMethodQiwi) SetStatus(val PaymentMethodQiwiStatus) { + s.Status = val +} + +// SetTitle sets the value of Title. +func (s *PaymentMethodQiwi) SetTitle(val OptPaymentMethodTitle) { + s.Title = val +} + +// Статус проверки и сохранения способа оплаты. +// Возможные значения: * pending — ожидает действий от +// пользователя; * active — способ оплаты сохранен, его +// можно использовать для автоплатежей или выплат; * +// inactive — способ оплаты не сохранен: пользователь не +// подтвердил привязку платежного средства или при +// сохранении способа оплаты возникла ошибка. Чтобы +// узнать подробности, обратитесь в техническую +// поддержку ЮKassa. +type PaymentMethodQiwiStatus string + +const ( + PaymentMethodQiwiStatusPending PaymentMethodQiwiStatus = "pending" + PaymentMethodQiwiStatusActive PaymentMethodQiwiStatus = "active" + PaymentMethodQiwiStatusInactive PaymentMethodQiwiStatus = "inactive" +) + +// AllValues returns all PaymentMethodQiwiStatus values. +func (PaymentMethodQiwiStatus) AllValues() []PaymentMethodQiwiStatus { + return []PaymentMethodQiwiStatus{ + PaymentMethodQiwiStatusPending, + PaymentMethodQiwiStatusActive, + PaymentMethodQiwiStatusInactive, + } +} + +// MarshalText implements encoding.TextMarshaler. +func (s PaymentMethodQiwiStatus) MarshalText() ([]byte, error) { + switch s { + case PaymentMethodQiwiStatusPending: + return []byte(s), nil + case PaymentMethodQiwiStatusActive: + return []byte(s), nil + case PaymentMethodQiwiStatusInactive: + return []byte(s), nil + default: + return nil, errors.Errorf("invalid value: %q", s) + } +} + +// UnmarshalText implements encoding.TextUnmarshaler. +func (s *PaymentMethodQiwiStatus) UnmarshalText(data []byte) error { + switch PaymentMethodQiwiStatus(data) { + case PaymentMethodQiwiStatusPending: + *s = PaymentMethodQiwiStatusPending + return nil + case PaymentMethodQiwiStatusActive: + *s = PaymentMethodQiwiStatusActive + return nil + case PaymentMethodQiwiStatusInactive: + *s = PaymentMethodQiwiStatusInactive + return nil + default: + return errors.Errorf("invalid value: %q", data) + } +} + +// Merged schema. +// Ref: #/components/schemas/PaymentMethodSberBnpl +type PaymentMethodSberBnpl struct { + Type PaymentMethodType `json:"type"` + // Payment method ID. + ID string `json:"id"` + // Признак сохранения способа оплаты для автоплатежей: + // https://yookassa. + // ru/developers/payment-acceptance/scenario-extensions/recurring-payments/pay-with-saved. + // Возможные значения: * true — способ оплаты сохранен для + // автоплатежей и выплат; * false — способ оплаты не + // сохранен. + Saved bool `json:"saved"` + Status PaymentMethodSberBnplStatus `json:"status"` + Title OptPaymentMethodTitle `json:"title"` +} + +// GetType returns the value of Type. +func (s *PaymentMethodSberBnpl) GetType() PaymentMethodType { + return s.Type +} + +// GetID returns the value of ID. +func (s *PaymentMethodSberBnpl) GetID() string { + return s.ID +} + +// GetSaved returns the value of Saved. +func (s *PaymentMethodSberBnpl) GetSaved() bool { + return s.Saved +} + +// GetStatus returns the value of Status. +func (s *PaymentMethodSberBnpl) GetStatus() PaymentMethodSberBnplStatus { + return s.Status +} + +// GetTitle returns the value of Title. +func (s *PaymentMethodSberBnpl) GetTitle() OptPaymentMethodTitle { + return s.Title +} + +// SetType sets the value of Type. +func (s *PaymentMethodSberBnpl) SetType(val PaymentMethodType) { + s.Type = val +} + +// SetID sets the value of ID. +func (s *PaymentMethodSberBnpl) SetID(val string) { + s.ID = val +} + +// SetSaved sets the value of Saved. +func (s *PaymentMethodSberBnpl) SetSaved(val bool) { + s.Saved = val +} + +// SetStatus sets the value of Status. +func (s *PaymentMethodSberBnpl) SetStatus(val PaymentMethodSberBnplStatus) { + s.Status = val +} + +// SetTitle sets the value of Title. +func (s *PaymentMethodSberBnpl) SetTitle(val OptPaymentMethodTitle) { + s.Title = val +} + +// Статус проверки и сохранения способа оплаты. +// Возможные значения: * pending — ожидает действий от +// пользователя; * active — способ оплаты сохранен, его +// можно использовать для автоплатежей или выплат; * +// inactive — способ оплаты не сохранен: пользователь не +// подтвердил привязку платежного средства или при +// сохранении способа оплаты возникла ошибка. Чтобы +// узнать подробности, обратитесь в техническую +// поддержку ЮKassa. +type PaymentMethodSberBnplStatus string + +const ( + PaymentMethodSberBnplStatusPending PaymentMethodSberBnplStatus = "pending" + PaymentMethodSberBnplStatusActive PaymentMethodSberBnplStatus = "active" + PaymentMethodSberBnplStatusInactive PaymentMethodSberBnplStatus = "inactive" +) + +// AllValues returns all PaymentMethodSberBnplStatus values. +func (PaymentMethodSberBnplStatus) AllValues() []PaymentMethodSberBnplStatus { + return []PaymentMethodSberBnplStatus{ + PaymentMethodSberBnplStatusPending, + PaymentMethodSberBnplStatusActive, + PaymentMethodSberBnplStatusInactive, + } +} + +// MarshalText implements encoding.TextMarshaler. +func (s PaymentMethodSberBnplStatus) MarshalText() ([]byte, error) { + switch s { + case PaymentMethodSberBnplStatusPending: + return []byte(s), nil + case PaymentMethodSberBnplStatusActive: + return []byte(s), nil + case PaymentMethodSberBnplStatusInactive: + return []byte(s), nil + default: + return nil, errors.Errorf("invalid value: %q", s) + } +} + +// UnmarshalText implements encoding.TextUnmarshaler. +func (s *PaymentMethodSberBnplStatus) UnmarshalText(data []byte) error { + switch PaymentMethodSberBnplStatus(data) { + case PaymentMethodSberBnplStatusPending: + *s = PaymentMethodSberBnplStatusPending + return nil + case PaymentMethodSberBnplStatusActive: + *s = PaymentMethodSberBnplStatusActive + return nil + case PaymentMethodSberBnplStatusInactive: + *s = PaymentMethodSberBnplStatusInactive + return nil + default: + return errors.Errorf("invalid value: %q", data) + } +} + +// Merged schema. +// Ref: #/components/schemas/PaymentMethodSberLoan +type PaymentMethodSberLoan struct { + Type PaymentMethodType `json:"type"` + // Payment method ID. + ID string `json:"id"` + // Признак сохранения способа оплаты для автоплатежей: + // https://yookassa. + // ru/developers/payment-acceptance/scenario-extensions/recurring-payments/pay-with-saved. + // Возможные значения: * true — способ оплаты сохранен для + // автоплатежей и выплат; * false — способ оплаты не + // сохранен. + Saved bool `json:"saved"` + Status PaymentMethodSberLoanStatus `json:"status"` + Title OptPaymentMethodTitle `json:"title"` + // Тариф кредита, который пользователь выбрал при + // оплате. Возможные значения: loan — кредит; installments_XX — + // рассрочка, где XX — количество месяцев для выплаты + // рассрочки. Например, installments_3 — рассрочка на 3 месяца. + // Присутствует для платежей в статусе waiting_for_capture и + // succeeded. + LoanOption OptString `json:"loan_option"` + DiscountAmount OptPaymentMethodSberLoanDiscountAmount `json:"discount_amount"` + // Время, когда заканчивается период охлаждения: + // https://yookassa.ru/docs/support/payments/credit-purchases-by-sberbank-with-cooling-off + // кредита или рассрочки. Указывается по UTC: https://ru.wikipedia. + // org/wiki/%D0%92%D1%81%D0%B5%D0%BC%D0%B8%D1%80%D0%BD%D0%BE%D0%B5_%D0%BA%D0%BE%D0%BE%D1%80%D0%B4%D0%B8%D0%BD%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%BE%D0%B5_%D0%B2%D1%80%D0%B5%D0%BC%D1%8F и передается в формате ISO 8601: https://en.wikipedia.org/wiki/ISO_8601. Присутствует для платежей в статусе pending, которые по закону: https://www.consultant.ru/document/cons_doc_LAW_498604/ попадают под процедуру охлаждения. + SuspendedUntil OptDateTime `json:"suspended_until"` +} + +// GetType returns the value of Type. +func (s *PaymentMethodSberLoan) GetType() PaymentMethodType { + return s.Type +} + +// GetID returns the value of ID. +func (s *PaymentMethodSberLoan) GetID() string { + return s.ID +} + +// GetSaved returns the value of Saved. +func (s *PaymentMethodSberLoan) GetSaved() bool { + return s.Saved +} + +// GetStatus returns the value of Status. +func (s *PaymentMethodSberLoan) GetStatus() PaymentMethodSberLoanStatus { + return s.Status +} + +// GetTitle returns the value of Title. +func (s *PaymentMethodSberLoan) GetTitle() OptPaymentMethodTitle { + return s.Title +} + +// GetLoanOption returns the value of LoanOption. +func (s *PaymentMethodSberLoan) GetLoanOption() OptString { + return s.LoanOption +} + +// GetDiscountAmount returns the value of DiscountAmount. +func (s *PaymentMethodSberLoan) GetDiscountAmount() OptPaymentMethodSberLoanDiscountAmount { + return s.DiscountAmount +} + +// GetSuspendedUntil returns the value of SuspendedUntil. +func (s *PaymentMethodSberLoan) GetSuspendedUntil() OptDateTime { + return s.SuspendedUntil +} + +// SetType sets the value of Type. +func (s *PaymentMethodSberLoan) SetType(val PaymentMethodType) { + s.Type = val +} + +// SetID sets the value of ID. +func (s *PaymentMethodSberLoan) SetID(val string) { + s.ID = val +} + +// SetSaved sets the value of Saved. +func (s *PaymentMethodSberLoan) SetSaved(val bool) { + s.Saved = val +} + +// SetStatus sets the value of Status. +func (s *PaymentMethodSberLoan) SetStatus(val PaymentMethodSberLoanStatus) { + s.Status = val +} + +// SetTitle sets the value of Title. +func (s *PaymentMethodSberLoan) SetTitle(val OptPaymentMethodTitle) { + s.Title = val +} + +// SetLoanOption sets the value of LoanOption. +func (s *PaymentMethodSberLoan) SetLoanOption(val OptString) { + s.LoanOption = val +} + +// SetDiscountAmount sets the value of DiscountAmount. +func (s *PaymentMethodSberLoan) SetDiscountAmount(val OptPaymentMethodSberLoanDiscountAmount) { + s.DiscountAmount = val +} + +// SetSuspendedUntil sets the value of SuspendedUntil. +func (s *PaymentMethodSberLoan) SetSuspendedUntil(val OptDateTime) { + s.SuspendedUntil = val +} + +// Сумма в выбранной валюте. +type PaymentMethodSberLoanDiscountAmount struct { + // Сумма в выбранной валюте. Всегда дробное значение. + // Разделитель дробной части — точка, разделитель тысяч + // отсутствует. Количество знаков после точки зависит + // от выбранной валюты. Пример: 1000.00. + Value string `json:"value"` + Currency CurrencyCode `json:"currency"` +} + +// GetValue returns the value of Value. +func (s *PaymentMethodSberLoanDiscountAmount) GetValue() string { + return s.Value +} + +// GetCurrency returns the value of Currency. +func (s *PaymentMethodSberLoanDiscountAmount) GetCurrency() CurrencyCode { + return s.Currency +} + +// SetValue sets the value of Value. +func (s *PaymentMethodSberLoanDiscountAmount) SetValue(val string) { + s.Value = val +} + +// SetCurrency sets the value of Currency. +func (s *PaymentMethodSberLoanDiscountAmount) SetCurrency(val CurrencyCode) { + s.Currency = val +} + +// Статус проверки и сохранения способа оплаты. +// Возможные значения: * pending — ожидает действий от +// пользователя; * active — способ оплаты сохранен, его +// можно использовать для автоплатежей или выплат; * +// inactive — способ оплаты не сохранен: пользователь не +// подтвердил привязку платежного средства или при +// сохранении способа оплаты возникла ошибка. Чтобы +// узнать подробности, обратитесь в техническую +// поддержку ЮKassa. +type PaymentMethodSberLoanStatus string + +const ( + PaymentMethodSberLoanStatusPending PaymentMethodSberLoanStatus = "pending" + PaymentMethodSberLoanStatusActive PaymentMethodSberLoanStatus = "active" + PaymentMethodSberLoanStatusInactive PaymentMethodSberLoanStatus = "inactive" +) + +// AllValues returns all PaymentMethodSberLoanStatus values. +func (PaymentMethodSberLoanStatus) AllValues() []PaymentMethodSberLoanStatus { + return []PaymentMethodSberLoanStatus{ + PaymentMethodSberLoanStatusPending, + PaymentMethodSberLoanStatusActive, + PaymentMethodSberLoanStatusInactive, + } +} + +// MarshalText implements encoding.TextMarshaler. +func (s PaymentMethodSberLoanStatus) MarshalText() ([]byte, error) { + switch s { + case PaymentMethodSberLoanStatusPending: + return []byte(s), nil + case PaymentMethodSberLoanStatusActive: + return []byte(s), nil + case PaymentMethodSberLoanStatusInactive: + return []byte(s), nil + default: + return nil, errors.Errorf("invalid value: %q", s) + } +} + +// UnmarshalText implements encoding.TextUnmarshaler. +func (s *PaymentMethodSberLoanStatus) UnmarshalText(data []byte) error { + switch PaymentMethodSberLoanStatus(data) { + case PaymentMethodSberLoanStatusPending: + *s = PaymentMethodSberLoanStatusPending + return nil + case PaymentMethodSberLoanStatusActive: + *s = PaymentMethodSberLoanStatusActive + return nil + case PaymentMethodSberLoanStatusInactive: + *s = PaymentMethodSberLoanStatusInactive + return nil + default: + return errors.Errorf("invalid value: %q", data) + } +} + +// Merged schema. +// Ref: #/components/schemas/PaymentMethodSberbank +type PaymentMethodSberbank struct { + Type PaymentMethodType `json:"type"` + // Payment method ID. + ID string `json:"id"` + // Признак сохранения способа оплаты для автоплатежей: + // https://yookassa. + // ru/developers/payment-acceptance/scenario-extensions/recurring-payments/pay-with-saved. + // Возможные значения: * true — способ оплаты сохранен для + // автоплатежей и выплат; * false — способ оплаты не + // сохранен. + Saved bool `json:"saved"` + Status PaymentMethodSberbankStatus `json:"status"` + Title OptPaymentMethodTitle `json:"title"` + // Телефон пользователя, на который зарегистрирован + // аккаунт в SberPay. Указывается в формате ITU-T E.164: https://ru. + // wikipedia.org/wiki/E.164, например 79000000000. + Phone OptString `json:"phone"` + Card OptInvoicingBankCardData `json:"card"` +} + +// GetType returns the value of Type. +func (s *PaymentMethodSberbank) GetType() PaymentMethodType { + return s.Type +} + +// GetID returns the value of ID. +func (s *PaymentMethodSberbank) GetID() string { + return s.ID +} + +// GetSaved returns the value of Saved. +func (s *PaymentMethodSberbank) GetSaved() bool { + return s.Saved +} + +// GetStatus returns the value of Status. +func (s *PaymentMethodSberbank) GetStatus() PaymentMethodSberbankStatus { + return s.Status +} + +// GetTitle returns the value of Title. +func (s *PaymentMethodSberbank) GetTitle() OptPaymentMethodTitle { + return s.Title +} + +// GetPhone returns the value of Phone. +func (s *PaymentMethodSberbank) GetPhone() OptString { + return s.Phone +} + +// GetCard returns the value of Card. +func (s *PaymentMethodSberbank) GetCard() OptInvoicingBankCardData { + return s.Card +} + +// SetType sets the value of Type. +func (s *PaymentMethodSberbank) SetType(val PaymentMethodType) { + s.Type = val +} + +// SetID sets the value of ID. +func (s *PaymentMethodSberbank) SetID(val string) { + s.ID = val +} + +// SetSaved sets the value of Saved. +func (s *PaymentMethodSberbank) SetSaved(val bool) { + s.Saved = val +} + +// SetStatus sets the value of Status. +func (s *PaymentMethodSberbank) SetStatus(val PaymentMethodSberbankStatus) { + s.Status = val +} + +// SetTitle sets the value of Title. +func (s *PaymentMethodSberbank) SetTitle(val OptPaymentMethodTitle) { + s.Title = val +} + +// SetPhone sets the value of Phone. +func (s *PaymentMethodSberbank) SetPhone(val OptString) { + s.Phone = val +} + +// SetCard sets the value of Card. +func (s *PaymentMethodSberbank) SetCard(val OptInvoicingBankCardData) { + s.Card = val +} + +// Статус проверки и сохранения способа оплаты. +// Возможные значения: * pending — ожидает действий от +// пользователя; * active — способ оплаты сохранен, его +// можно использовать для автоплатежей или выплат; * +// inactive — способ оплаты не сохранен: пользователь не +// подтвердил привязку платежного средства или при +// сохранении способа оплаты возникла ошибка. Чтобы +// узнать подробности, обратитесь в техническую +// поддержку ЮKassa. +type PaymentMethodSberbankStatus string + +const ( + PaymentMethodSberbankStatusPending PaymentMethodSberbankStatus = "pending" + PaymentMethodSberbankStatusActive PaymentMethodSberbankStatus = "active" + PaymentMethodSberbankStatusInactive PaymentMethodSberbankStatus = "inactive" +) + +// AllValues returns all PaymentMethodSberbankStatus values. +func (PaymentMethodSberbankStatus) AllValues() []PaymentMethodSberbankStatus { + return []PaymentMethodSberbankStatus{ + PaymentMethodSberbankStatusPending, + PaymentMethodSberbankStatusActive, + PaymentMethodSberbankStatusInactive, + } +} + +// MarshalText implements encoding.TextMarshaler. +func (s PaymentMethodSberbankStatus) MarshalText() ([]byte, error) { + switch s { + case PaymentMethodSberbankStatusPending: + return []byte(s), nil + case PaymentMethodSberbankStatusActive: + return []byte(s), nil + case PaymentMethodSberbankStatusInactive: + return []byte(s), nil + default: + return nil, errors.Errorf("invalid value: %q", s) + } +} + +// UnmarshalText implements encoding.TextUnmarshaler. +func (s *PaymentMethodSberbankStatus) UnmarshalText(data []byte) error { + switch PaymentMethodSberbankStatus(data) { + case PaymentMethodSberbankStatusPending: + *s = PaymentMethodSberbankStatusPending + return nil + case PaymentMethodSberbankStatusActive: + *s = PaymentMethodSberbankStatusActive + return nil + case PaymentMethodSberbankStatusInactive: + *s = PaymentMethodSberbankStatusInactive + return nil + default: + return errors.Errorf("invalid value: %q", data) + } +} + +// Merged schema. +// Ref: #/components/schemas/PaymentMethodSbp +type PaymentMethodSbp struct { + Type PaymentMethodType `json:"type"` + // Payment method ID. + ID string `json:"id"` + // Признак сохранения способа оплаты для автоплатежей: + // https://yookassa. + // ru/developers/payment-acceptance/scenario-extensions/recurring-payments/pay-with-saved. + // Возможные значения: * true — способ оплаты сохранен для + // автоплатежей и выплат; * false — способ оплаты не + // сохранен. + Saved bool `json:"saved"` + Status PaymentMethodSbpStatus `json:"status"` + Title OptPaymentMethodTitle `json:"title"` + // Идентификатор операции в СБП (НСПК). Пример: + // 1027088AE4CB48CB81287833347A8777 Обязательный параметр для платежей + // в статусе succeeded. В остальных случаях может + // отсутствовать. + SbpOperationID OptString `json:"sbp_operation_id"` + PayerBankDetails OptSbpPayerBankDetails `json:"payer_bank_details"` +} + +// GetType returns the value of Type. +func (s *PaymentMethodSbp) GetType() PaymentMethodType { + return s.Type +} + +// GetID returns the value of ID. +func (s *PaymentMethodSbp) GetID() string { + return s.ID +} + +// GetSaved returns the value of Saved. +func (s *PaymentMethodSbp) GetSaved() bool { + return s.Saved +} + +// GetStatus returns the value of Status. +func (s *PaymentMethodSbp) GetStatus() PaymentMethodSbpStatus { + return s.Status +} + +// GetTitle returns the value of Title. +func (s *PaymentMethodSbp) GetTitle() OptPaymentMethodTitle { + return s.Title +} + +// GetSbpOperationID returns the value of SbpOperationID. +func (s *PaymentMethodSbp) GetSbpOperationID() OptString { + return s.SbpOperationID +} + +// GetPayerBankDetails returns the value of PayerBankDetails. +func (s *PaymentMethodSbp) GetPayerBankDetails() OptSbpPayerBankDetails { + return s.PayerBankDetails +} + +// SetType sets the value of Type. +func (s *PaymentMethodSbp) SetType(val PaymentMethodType) { + s.Type = val +} + +// SetID sets the value of ID. +func (s *PaymentMethodSbp) SetID(val string) { + s.ID = val +} + +// SetSaved sets the value of Saved. +func (s *PaymentMethodSbp) SetSaved(val bool) { + s.Saved = val +} + +// SetStatus sets the value of Status. +func (s *PaymentMethodSbp) SetStatus(val PaymentMethodSbpStatus) { + s.Status = val +} + +// SetTitle sets the value of Title. +func (s *PaymentMethodSbp) SetTitle(val OptPaymentMethodTitle) { + s.Title = val +} + +// SetSbpOperationID sets the value of SbpOperationID. +func (s *PaymentMethodSbp) SetSbpOperationID(val OptString) { + s.SbpOperationID = val +} + +// SetPayerBankDetails sets the value of PayerBankDetails. +func (s *PaymentMethodSbp) SetPayerBankDetails(val OptSbpPayerBankDetails) { + s.PayerBankDetails = val +} + +// Статус проверки и сохранения способа оплаты. +// Возможные значения: * pending — ожидает действий от +// пользователя; * active — способ оплаты сохранен, его +// можно использовать для автоплатежей или выплат; * +// inactive — способ оплаты не сохранен: пользователь не +// подтвердил привязку платежного средства или при +// сохранении способа оплаты возникла ошибка. Чтобы +// узнать подробности, обратитесь в техническую +// поддержку ЮKassa. +type PaymentMethodSbpStatus string + +const ( + PaymentMethodSbpStatusPending PaymentMethodSbpStatus = "pending" + PaymentMethodSbpStatusActive PaymentMethodSbpStatus = "active" + PaymentMethodSbpStatusInactive PaymentMethodSbpStatus = "inactive" +) + +// AllValues returns all PaymentMethodSbpStatus values. +func (PaymentMethodSbpStatus) AllValues() []PaymentMethodSbpStatus { + return []PaymentMethodSbpStatus{ + PaymentMethodSbpStatusPending, + PaymentMethodSbpStatusActive, + PaymentMethodSbpStatusInactive, + } +} + +// MarshalText implements encoding.TextMarshaler. +func (s PaymentMethodSbpStatus) MarshalText() ([]byte, error) { + switch s { + case PaymentMethodSbpStatusPending: + return []byte(s), nil + case PaymentMethodSbpStatusActive: + return []byte(s), nil + case PaymentMethodSbpStatusInactive: + return []byte(s), nil + default: + return nil, errors.Errorf("invalid value: %q", s) + } +} + +// UnmarshalText implements encoding.TextUnmarshaler. +func (s *PaymentMethodSbpStatus) UnmarshalText(data []byte) error { + switch PaymentMethodSbpStatus(data) { + case PaymentMethodSbpStatusPending: + *s = PaymentMethodSbpStatusPending + return nil + case PaymentMethodSbpStatusActive: + *s = PaymentMethodSbpStatusActive + return nil + case PaymentMethodSbpStatusInactive: + *s = PaymentMethodSbpStatusInactive + return nil + default: + return errors.Errorf("invalid value: %q", data) + } +} + +// Статус проверки и сохранения способа оплаты. +// Возможные значения: * pending — ожидает действий от +// пользователя; * active — способ оплаты сохранен, его +// можно использовать для автоплатежей или выплат; * +// inactive — способ оплаты не сохранен: пользователь не +// подтвердил привязку платежного средства или при +// сохранении способа оплаты возникла ошибка. Чтобы +// узнать подробности, обратитесь в техническую +// поддержку ЮKassa. +// Ref: #/components/schemas/PaymentMethodStatus +type PaymentMethodStatus string + +const ( + PaymentMethodStatusPending PaymentMethodStatus = "pending" + PaymentMethodStatusActive PaymentMethodStatus = "active" + PaymentMethodStatusInactive PaymentMethodStatus = "inactive" +) + +// AllValues returns all PaymentMethodStatus values. +func (PaymentMethodStatus) AllValues() []PaymentMethodStatus { + return []PaymentMethodStatus{ + PaymentMethodStatusPending, + PaymentMethodStatusActive, + PaymentMethodStatusInactive, + } +} + +// MarshalText implements encoding.TextMarshaler. +func (s PaymentMethodStatus) MarshalText() ([]byte, error) { + switch s { + case PaymentMethodStatusPending: + return []byte(s), nil + case PaymentMethodStatusActive: + return []byte(s), nil + case PaymentMethodStatusInactive: + return []byte(s), nil + default: + return nil, errors.Errorf("invalid value: %q", s) + } +} + +// UnmarshalText implements encoding.TextUnmarshaler. +func (s *PaymentMethodStatus) UnmarshalText(data []byte) error { + switch PaymentMethodStatus(data) { + case PaymentMethodStatusPending: + *s = PaymentMethodStatusPending + return nil + case PaymentMethodStatusActive: + *s = PaymentMethodStatusActive + return nil + case PaymentMethodStatusInactive: + *s = PaymentMethodStatusInactive + return nil + default: + return errors.Errorf("invalid value: %q", data) + } +} + +// Merged schema. +// Ref: #/components/schemas/PaymentMethodTinkoffBank +type PaymentMethodTinkoffBank struct { + Type PaymentMethodType `json:"type"` + // Payment method ID. + ID string `json:"id"` + // Признак сохранения способа оплаты для автоплатежей: + // https://yookassa. + // ru/developers/payment-acceptance/scenario-extensions/recurring-payments/pay-with-saved. + // Возможные значения: * true — способ оплаты сохранен для + // автоплатежей и выплат; * false — способ оплаты не + // сохранен. + Saved bool `json:"saved"` + Status PaymentMethodTinkoffBankStatus `json:"status"` + Title OptPaymentMethodTitle `json:"title"` + Card OptInvoicingBankCardData `json:"card"` +} + +// GetType returns the value of Type. +func (s *PaymentMethodTinkoffBank) GetType() PaymentMethodType { + return s.Type +} + +// GetID returns the value of ID. +func (s *PaymentMethodTinkoffBank) GetID() string { + return s.ID +} + +// GetSaved returns the value of Saved. +func (s *PaymentMethodTinkoffBank) GetSaved() bool { + return s.Saved +} + +// GetStatus returns the value of Status. +func (s *PaymentMethodTinkoffBank) GetStatus() PaymentMethodTinkoffBankStatus { + return s.Status +} + +// GetTitle returns the value of Title. +func (s *PaymentMethodTinkoffBank) GetTitle() OptPaymentMethodTitle { + return s.Title +} + +// GetCard returns the value of Card. +func (s *PaymentMethodTinkoffBank) GetCard() OptInvoicingBankCardData { + return s.Card +} + +// SetType sets the value of Type. +func (s *PaymentMethodTinkoffBank) SetType(val PaymentMethodType) { + s.Type = val +} + +// SetID sets the value of ID. +func (s *PaymentMethodTinkoffBank) SetID(val string) { + s.ID = val +} + +// SetSaved sets the value of Saved. +func (s *PaymentMethodTinkoffBank) SetSaved(val bool) { + s.Saved = val +} + +// SetStatus sets the value of Status. +func (s *PaymentMethodTinkoffBank) SetStatus(val PaymentMethodTinkoffBankStatus) { + s.Status = val +} + +// SetTitle sets the value of Title. +func (s *PaymentMethodTinkoffBank) SetTitle(val OptPaymentMethodTitle) { + s.Title = val +} + +// SetCard sets the value of Card. +func (s *PaymentMethodTinkoffBank) SetCard(val OptInvoicingBankCardData) { + s.Card = val +} + +// Статус проверки и сохранения способа оплаты. +// Возможные значения: * pending — ожидает действий от +// пользователя; * active — способ оплаты сохранен, его +// можно использовать для автоплатежей или выплат; * +// inactive — способ оплаты не сохранен: пользователь не +// подтвердил привязку платежного средства или при +// сохранении способа оплаты возникла ошибка. Чтобы +// узнать подробности, обратитесь в техническую +// поддержку ЮKassa. +type PaymentMethodTinkoffBankStatus string + +const ( + PaymentMethodTinkoffBankStatusPending PaymentMethodTinkoffBankStatus = "pending" + PaymentMethodTinkoffBankStatusActive PaymentMethodTinkoffBankStatus = "active" + PaymentMethodTinkoffBankStatusInactive PaymentMethodTinkoffBankStatus = "inactive" +) + +// AllValues returns all PaymentMethodTinkoffBankStatus values. +func (PaymentMethodTinkoffBankStatus) AllValues() []PaymentMethodTinkoffBankStatus { + return []PaymentMethodTinkoffBankStatus{ + PaymentMethodTinkoffBankStatusPending, + PaymentMethodTinkoffBankStatusActive, + PaymentMethodTinkoffBankStatusInactive, + } +} + +// MarshalText implements encoding.TextMarshaler. +func (s PaymentMethodTinkoffBankStatus) MarshalText() ([]byte, error) { + switch s { + case PaymentMethodTinkoffBankStatusPending: + return []byte(s), nil + case PaymentMethodTinkoffBankStatusActive: + return []byte(s), nil + case PaymentMethodTinkoffBankStatusInactive: + return []byte(s), nil + default: + return nil, errors.Errorf("invalid value: %q", s) + } +} + +// UnmarshalText implements encoding.TextUnmarshaler. +func (s *PaymentMethodTinkoffBankStatus) UnmarshalText(data []byte) error { + switch PaymentMethodTinkoffBankStatus(data) { + case PaymentMethodTinkoffBankStatusPending: + *s = PaymentMethodTinkoffBankStatusPending + return nil + case PaymentMethodTinkoffBankStatusActive: + *s = PaymentMethodTinkoffBankStatusActive + return nil + case PaymentMethodTinkoffBankStatusInactive: + *s = PaymentMethodTinkoffBankStatusInactive + return nil + default: + return errors.Errorf("invalid value: %q", data) + } +} + +type PaymentMethodTitle string + +// Payment method code is the type of a means of payment used for paying. More about payment methods: +// https://yookassa.ru/developers/payment-acceptance/getting-started/payment-methods. +// Ref: #/components/schemas/PaymentMethodType +type PaymentMethodType string + +const ( + PaymentMethodTypeBankCard PaymentMethodType = "bank_card" + PaymentMethodTypeCash PaymentMethodType = "cash" + PaymentMethodTypeAlfabank PaymentMethodType = "alfabank" + PaymentMethodTypeWebmoney PaymentMethodType = "webmoney" + PaymentMethodTypeWechat PaymentMethodType = "wechat" + PaymentMethodTypeApplePay PaymentMethodType = "apple_pay" + PaymentMethodTypeGooglePay PaymentMethodType = "google_pay" + PaymentMethodTypeQiwi PaymentMethodType = "qiwi" + PaymentMethodTypeInstallments PaymentMethodType = "installments" + PaymentMethodTypeYooMoney PaymentMethodType = "yoo_money" + PaymentMethodTypeSberbank PaymentMethodType = "sberbank" + PaymentMethodTypeMobileBalance PaymentMethodType = "mobile_balance" + PaymentMethodTypeB2bSberbank PaymentMethodType = "b2b_sberbank" + PaymentMethodTypeTinkoffBank PaymentMethodType = "tinkoff_bank" + PaymentMethodTypeSbp PaymentMethodType = "sbp" + PaymentMethodTypeSberLoan PaymentMethodType = "sber_loan" + PaymentMethodTypeElectronicCertificate PaymentMethodType = "electronic_certificate" + PaymentMethodTypeSberBnpl PaymentMethodType = "sber_bnpl" +) + +// AllValues returns all PaymentMethodType values. +func (PaymentMethodType) AllValues() []PaymentMethodType { + return []PaymentMethodType{ + PaymentMethodTypeBankCard, + PaymentMethodTypeCash, + PaymentMethodTypeAlfabank, + PaymentMethodTypeWebmoney, + PaymentMethodTypeWechat, + PaymentMethodTypeApplePay, + PaymentMethodTypeGooglePay, + PaymentMethodTypeQiwi, + PaymentMethodTypeInstallments, + PaymentMethodTypeYooMoney, + PaymentMethodTypeSberbank, + PaymentMethodTypeMobileBalance, + PaymentMethodTypeB2bSberbank, + PaymentMethodTypeTinkoffBank, + PaymentMethodTypeSbp, + PaymentMethodTypeSberLoan, + PaymentMethodTypeElectronicCertificate, + PaymentMethodTypeSberBnpl, + } +} + +// MarshalText implements encoding.TextMarshaler. +func (s PaymentMethodType) MarshalText() ([]byte, error) { + switch s { + case PaymentMethodTypeBankCard: + return []byte(s), nil + case PaymentMethodTypeCash: + return []byte(s), nil + case PaymentMethodTypeAlfabank: + return []byte(s), nil + case PaymentMethodTypeWebmoney: + return []byte(s), nil + case PaymentMethodTypeWechat: + return []byte(s), nil + case PaymentMethodTypeApplePay: + return []byte(s), nil + case PaymentMethodTypeGooglePay: + return []byte(s), nil + case PaymentMethodTypeQiwi: + return []byte(s), nil + case PaymentMethodTypeInstallments: + return []byte(s), nil + case PaymentMethodTypeYooMoney: + return []byte(s), nil + case PaymentMethodTypeSberbank: + return []byte(s), nil + case PaymentMethodTypeMobileBalance: + return []byte(s), nil + case PaymentMethodTypeB2bSberbank: + return []byte(s), nil + case PaymentMethodTypeTinkoffBank: + return []byte(s), nil + case PaymentMethodTypeSbp: + return []byte(s), nil + case PaymentMethodTypeSberLoan: + return []byte(s), nil + case PaymentMethodTypeElectronicCertificate: + return []byte(s), nil + case PaymentMethodTypeSberBnpl: + return []byte(s), nil + default: + return nil, errors.Errorf("invalid value: %q", s) + } +} + +// UnmarshalText implements encoding.TextUnmarshaler. +func (s *PaymentMethodType) UnmarshalText(data []byte) error { + switch PaymentMethodType(data) { + case PaymentMethodTypeBankCard: + *s = PaymentMethodTypeBankCard + return nil + case PaymentMethodTypeCash: + *s = PaymentMethodTypeCash + return nil + case PaymentMethodTypeAlfabank: + *s = PaymentMethodTypeAlfabank + return nil + case PaymentMethodTypeWebmoney: + *s = PaymentMethodTypeWebmoney + return nil + case PaymentMethodTypeWechat: + *s = PaymentMethodTypeWechat + return nil + case PaymentMethodTypeApplePay: + *s = PaymentMethodTypeApplePay + return nil + case PaymentMethodTypeGooglePay: + *s = PaymentMethodTypeGooglePay + return nil + case PaymentMethodTypeQiwi: + *s = PaymentMethodTypeQiwi + return nil + case PaymentMethodTypeInstallments: + *s = PaymentMethodTypeInstallments + return nil + case PaymentMethodTypeYooMoney: + *s = PaymentMethodTypeYooMoney + return nil + case PaymentMethodTypeSberbank: + *s = PaymentMethodTypeSberbank + return nil + case PaymentMethodTypeMobileBalance: + *s = PaymentMethodTypeMobileBalance + return nil + case PaymentMethodTypeB2bSberbank: + *s = PaymentMethodTypeB2bSberbank + return nil + case PaymentMethodTypeTinkoffBank: + *s = PaymentMethodTypeTinkoffBank + return nil + case PaymentMethodTypeSbp: + *s = PaymentMethodTypeSbp + return nil + case PaymentMethodTypeSberLoan: + *s = PaymentMethodTypeSberLoan + return nil + case PaymentMethodTypeElectronicCertificate: + *s = PaymentMethodTypeElectronicCertificate + return nil + case PaymentMethodTypeSberBnpl: + *s = PaymentMethodTypeSberBnpl + return nil + default: + return errors.Errorf("invalid value: %q", data) + } +} + +// Merged schema. +// Ref: #/components/schemas/PaymentMethodWeChat +type PaymentMethodWeChat struct { + Type PaymentMethodType `json:"type"` + // Payment method ID. + ID string `json:"id"` + // Признак сохранения способа оплаты для автоплатежей: + // https://yookassa. + // ru/developers/payment-acceptance/scenario-extensions/recurring-payments/pay-with-saved. + // Возможные значения: * true — способ оплаты сохранен для + // автоплатежей и выплат; * false — способ оплаты не + // сохранен. + Saved bool `json:"saved"` + Status PaymentMethodWeChatStatus `json:"status"` + Title OptPaymentMethodTitle `json:"title"` +} + +// GetType returns the value of Type. +func (s *PaymentMethodWeChat) GetType() PaymentMethodType { + return s.Type +} + +// GetID returns the value of ID. +func (s *PaymentMethodWeChat) GetID() string { + return s.ID +} + +// GetSaved returns the value of Saved. +func (s *PaymentMethodWeChat) GetSaved() bool { + return s.Saved +} + +// GetStatus returns the value of Status. +func (s *PaymentMethodWeChat) GetStatus() PaymentMethodWeChatStatus { + return s.Status +} + +// GetTitle returns the value of Title. +func (s *PaymentMethodWeChat) GetTitle() OptPaymentMethodTitle { + return s.Title +} + +// SetType sets the value of Type. +func (s *PaymentMethodWeChat) SetType(val PaymentMethodType) { + s.Type = val +} + +// SetID sets the value of ID. +func (s *PaymentMethodWeChat) SetID(val string) { + s.ID = val +} + +// SetSaved sets the value of Saved. +func (s *PaymentMethodWeChat) SetSaved(val bool) { + s.Saved = val +} + +// SetStatus sets the value of Status. +func (s *PaymentMethodWeChat) SetStatus(val PaymentMethodWeChatStatus) { + s.Status = val +} + +// SetTitle sets the value of Title. +func (s *PaymentMethodWeChat) SetTitle(val OptPaymentMethodTitle) { + s.Title = val +} + +// Статус проверки и сохранения способа оплаты. +// Возможные значения: * pending — ожидает действий от +// пользователя; * active — способ оплаты сохранен, его +// можно использовать для автоплатежей или выплат; * +// inactive — способ оплаты не сохранен: пользователь не +// подтвердил привязку платежного средства или при +// сохранении способа оплаты возникла ошибка. Чтобы +// узнать подробности, обратитесь в техническую +// поддержку ЮKassa. +type PaymentMethodWeChatStatus string + +const ( + PaymentMethodWeChatStatusPending PaymentMethodWeChatStatus = "pending" + PaymentMethodWeChatStatusActive PaymentMethodWeChatStatus = "active" + PaymentMethodWeChatStatusInactive PaymentMethodWeChatStatus = "inactive" +) + +// AllValues returns all PaymentMethodWeChatStatus values. +func (PaymentMethodWeChatStatus) AllValues() []PaymentMethodWeChatStatus { + return []PaymentMethodWeChatStatus{ + PaymentMethodWeChatStatusPending, + PaymentMethodWeChatStatusActive, + PaymentMethodWeChatStatusInactive, + } +} + +// MarshalText implements encoding.TextMarshaler. +func (s PaymentMethodWeChatStatus) MarshalText() ([]byte, error) { + switch s { + case PaymentMethodWeChatStatusPending: + return []byte(s), nil + case PaymentMethodWeChatStatusActive: + return []byte(s), nil + case PaymentMethodWeChatStatusInactive: + return []byte(s), nil + default: + return nil, errors.Errorf("invalid value: %q", s) + } +} + +// UnmarshalText implements encoding.TextUnmarshaler. +func (s *PaymentMethodWeChatStatus) UnmarshalText(data []byte) error { + switch PaymentMethodWeChatStatus(data) { + case PaymentMethodWeChatStatusPending: + *s = PaymentMethodWeChatStatusPending + return nil + case PaymentMethodWeChatStatusActive: + *s = PaymentMethodWeChatStatusActive + return nil + case PaymentMethodWeChatStatusInactive: + *s = PaymentMethodWeChatStatusInactive + return nil + default: + return errors.Errorf("invalid value: %q", data) + } +} + +// Merged schema. +// Ref: #/components/schemas/PaymentMethodWebmoney +type PaymentMethodWebmoney struct { + Type PaymentMethodType `json:"type"` + // Payment method ID. + ID string `json:"id"` + // Признак сохранения способа оплаты для автоплатежей: + // https://yookassa. + // ru/developers/payment-acceptance/scenario-extensions/recurring-payments/pay-with-saved. + // Возможные значения: * true — способ оплаты сохранен для + // автоплатежей и выплат; * false — способ оплаты не + // сохранен. + Saved bool `json:"saved"` + Status PaymentMethodWebmoneyStatus `json:"status"` + Title OptPaymentMethodTitle `json:"title"` +} + +// GetType returns the value of Type. +func (s *PaymentMethodWebmoney) GetType() PaymentMethodType { + return s.Type +} + +// GetID returns the value of ID. +func (s *PaymentMethodWebmoney) GetID() string { + return s.ID +} + +// GetSaved returns the value of Saved. +func (s *PaymentMethodWebmoney) GetSaved() bool { + return s.Saved +} + +// GetStatus returns the value of Status. +func (s *PaymentMethodWebmoney) GetStatus() PaymentMethodWebmoneyStatus { + return s.Status +} + +// GetTitle returns the value of Title. +func (s *PaymentMethodWebmoney) GetTitle() OptPaymentMethodTitle { + return s.Title +} + +// SetType sets the value of Type. +func (s *PaymentMethodWebmoney) SetType(val PaymentMethodType) { + s.Type = val +} + +// SetID sets the value of ID. +func (s *PaymentMethodWebmoney) SetID(val string) { + s.ID = val +} + +// SetSaved sets the value of Saved. +func (s *PaymentMethodWebmoney) SetSaved(val bool) { + s.Saved = val +} + +// SetStatus sets the value of Status. +func (s *PaymentMethodWebmoney) SetStatus(val PaymentMethodWebmoneyStatus) { + s.Status = val +} + +// SetTitle sets the value of Title. +func (s *PaymentMethodWebmoney) SetTitle(val OptPaymentMethodTitle) { + s.Title = val +} + +// Статус проверки и сохранения способа оплаты. +// Возможные значения: * pending — ожидает действий от +// пользователя; * active — способ оплаты сохранен, его +// можно использовать для автоплатежей или выплат; * +// inactive — способ оплаты не сохранен: пользователь не +// подтвердил привязку платежного средства или при +// сохранении способа оплаты возникла ошибка. Чтобы +// узнать подробности, обратитесь в техническую +// поддержку ЮKassa. +type PaymentMethodWebmoneyStatus string + +const ( + PaymentMethodWebmoneyStatusPending PaymentMethodWebmoneyStatus = "pending" + PaymentMethodWebmoneyStatusActive PaymentMethodWebmoneyStatus = "active" + PaymentMethodWebmoneyStatusInactive PaymentMethodWebmoneyStatus = "inactive" +) + +// AllValues returns all PaymentMethodWebmoneyStatus values. +func (PaymentMethodWebmoneyStatus) AllValues() []PaymentMethodWebmoneyStatus { + return []PaymentMethodWebmoneyStatus{ + PaymentMethodWebmoneyStatusPending, + PaymentMethodWebmoneyStatusActive, + PaymentMethodWebmoneyStatusInactive, + } +} + +// MarshalText implements encoding.TextMarshaler. +func (s PaymentMethodWebmoneyStatus) MarshalText() ([]byte, error) { + switch s { + case PaymentMethodWebmoneyStatusPending: + return []byte(s), nil + case PaymentMethodWebmoneyStatusActive: + return []byte(s), nil + case PaymentMethodWebmoneyStatusInactive: + return []byte(s), nil + default: + return nil, errors.Errorf("invalid value: %q", s) + } +} + +// UnmarshalText implements encoding.TextUnmarshaler. +func (s *PaymentMethodWebmoneyStatus) UnmarshalText(data []byte) error { + switch PaymentMethodWebmoneyStatus(data) { + case PaymentMethodWebmoneyStatusPending: + *s = PaymentMethodWebmoneyStatusPending + return nil + case PaymentMethodWebmoneyStatusActive: + *s = PaymentMethodWebmoneyStatusActive + return nil + case PaymentMethodWebmoneyStatusInactive: + *s = PaymentMethodWebmoneyStatusInactive + return nil + default: + return errors.Errorf("invalid value: %q", data) + } +} + +// Merged schema. +// Ref: #/components/schemas/PaymentMethodYooMoney +type PaymentMethodYooMoney struct { + Type PaymentMethodType `json:"type"` + // Payment method ID. + ID string `json:"id"` + // Признак сохранения способа оплаты для автоплатежей: + // https://yookassa. + // ru/developers/payment-acceptance/scenario-extensions/recurring-payments/pay-with-saved. + // Возможные значения: * true — способ оплаты сохранен для + // автоплатежей и выплат; * false — способ оплаты не + // сохранен. + Saved bool `json:"saved"` + Status PaymentMethodYooMoneyStatus `json:"status"` + Title OptPaymentMethodTitle `json:"title"` + // Номер кошелька ЮMoney, из которого заплатил + // пользователь. + AccountNumber OptString `json:"account_number"` +} + +// GetType returns the value of Type. +func (s *PaymentMethodYooMoney) GetType() PaymentMethodType { + return s.Type +} + +// GetID returns the value of ID. +func (s *PaymentMethodYooMoney) GetID() string { + return s.ID +} + +// GetSaved returns the value of Saved. +func (s *PaymentMethodYooMoney) GetSaved() bool { + return s.Saved +} + +// GetStatus returns the value of Status. +func (s *PaymentMethodYooMoney) GetStatus() PaymentMethodYooMoneyStatus { + return s.Status +} + +// GetTitle returns the value of Title. +func (s *PaymentMethodYooMoney) GetTitle() OptPaymentMethodTitle { + return s.Title +} + +// GetAccountNumber returns the value of AccountNumber. +func (s *PaymentMethodYooMoney) GetAccountNumber() OptString { + return s.AccountNumber +} + +// SetType sets the value of Type. +func (s *PaymentMethodYooMoney) SetType(val PaymentMethodType) { + s.Type = val +} + +// SetID sets the value of ID. +func (s *PaymentMethodYooMoney) SetID(val string) { + s.ID = val +} + +// SetSaved sets the value of Saved. +func (s *PaymentMethodYooMoney) SetSaved(val bool) { + s.Saved = val +} + +// SetStatus sets the value of Status. +func (s *PaymentMethodYooMoney) SetStatus(val PaymentMethodYooMoneyStatus) { + s.Status = val +} + +// SetTitle sets the value of Title. +func (s *PaymentMethodYooMoney) SetTitle(val OptPaymentMethodTitle) { + s.Title = val +} + +// SetAccountNumber sets the value of AccountNumber. +func (s *PaymentMethodYooMoney) SetAccountNumber(val OptString) { + s.AccountNumber = val +} + +// Статус проверки и сохранения способа оплаты. +// Возможные значения: * pending — ожидает действий от +// пользователя; * active — способ оплаты сохранен, его +// можно использовать для автоплатежей или выплат; * +// inactive — способ оплаты не сохранен: пользователь не +// подтвердил привязку платежного средства или при +// сохранении способа оплаты возникла ошибка. Чтобы +// узнать подробности, обратитесь в техническую +// поддержку ЮKassa. +type PaymentMethodYooMoneyStatus string + +const ( + PaymentMethodYooMoneyStatusPending PaymentMethodYooMoneyStatus = "pending" + PaymentMethodYooMoneyStatusActive PaymentMethodYooMoneyStatus = "active" + PaymentMethodYooMoneyStatusInactive PaymentMethodYooMoneyStatus = "inactive" +) + +// AllValues returns all PaymentMethodYooMoneyStatus values. +func (PaymentMethodYooMoneyStatus) AllValues() []PaymentMethodYooMoneyStatus { + return []PaymentMethodYooMoneyStatus{ + PaymentMethodYooMoneyStatusPending, + PaymentMethodYooMoneyStatusActive, + PaymentMethodYooMoneyStatusInactive, + } +} + +// MarshalText implements encoding.TextMarshaler. +func (s PaymentMethodYooMoneyStatus) MarshalText() ([]byte, error) { + switch s { + case PaymentMethodYooMoneyStatusPending: + return []byte(s), nil + case PaymentMethodYooMoneyStatusActive: + return []byte(s), nil + case PaymentMethodYooMoneyStatusInactive: + return []byte(s), nil + default: + return nil, errors.Errorf("invalid value: %q", s) + } +} + +// UnmarshalText implements encoding.TextUnmarshaler. +func (s *PaymentMethodYooMoneyStatus) UnmarshalText(data []byte) error { + switch PaymentMethodYooMoneyStatus(data) { + case PaymentMethodYooMoneyStatusPending: + *s = PaymentMethodYooMoneyStatusPending + return nil + case PaymentMethodYooMoneyStatusActive: + *s = PaymentMethodYooMoneyStatusActive + return nil + case PaymentMethodYooMoneyStatusInactive: + *s = PaymentMethodYooMoneyStatusInactive + return nil + default: + return errors.Errorf("invalid value: %q", data) + } +} + +// Merged schema. +// Ref: #/components/schemas/PaymentMethodsConfirmationDataRedirect +type PaymentMethodsConfirmationDataRedirect struct { + Type PaymentMethodsConfirmationType `json:"type"` + Enforce OptBool `json:"enforce"` + ReturnURL string `json:"return_url"` + Locale OptLocale `json:"locale"` +} + +// GetType returns the value of Type. +func (s *PaymentMethodsConfirmationDataRedirect) GetType() PaymentMethodsConfirmationType { + return s.Type +} + +// GetEnforce returns the value of Enforce. +func (s *PaymentMethodsConfirmationDataRedirect) GetEnforce() OptBool { + return s.Enforce +} + +// GetReturnURL returns the value of ReturnURL. +func (s *PaymentMethodsConfirmationDataRedirect) GetReturnURL() string { + return s.ReturnURL +} + +// GetLocale returns the value of Locale. +func (s *PaymentMethodsConfirmationDataRedirect) GetLocale() OptLocale { + return s.Locale +} + +// SetType sets the value of Type. +func (s *PaymentMethodsConfirmationDataRedirect) SetType(val PaymentMethodsConfirmationType) { + s.Type = val +} + +// SetEnforce sets the value of Enforce. +func (s *PaymentMethodsConfirmationDataRedirect) SetEnforce(val OptBool) { + s.Enforce = val +} + +// SetReturnURL sets the value of ReturnURL. +func (s *PaymentMethodsConfirmationDataRedirect) SetReturnURL(val string) { + s.ReturnURL = val +} + +// SetLocale sets the value of Locale. +func (s *PaymentMethodsConfirmationDataRedirect) SetLocale(val OptLocale) { + s.Locale = val +} + +// Merged schema. +// Ref: #/components/schemas/PaymentMethodsConfirmationRedirect +type PaymentMethodsConfirmationRedirect struct { + Type PaymentMethodsConfirmationType `json:"type"` + ConfirmationURL string `json:"confirmation_url"` + Enforce OptBool `json:"enforce"` + ReturnURL OptString `json:"return_url"` +} + +// GetType returns the value of Type. +func (s *PaymentMethodsConfirmationRedirect) GetType() PaymentMethodsConfirmationType { + return s.Type +} + +// GetConfirmationURL returns the value of ConfirmationURL. +func (s *PaymentMethodsConfirmationRedirect) GetConfirmationURL() string { + return s.ConfirmationURL +} + +// GetEnforce returns the value of Enforce. +func (s *PaymentMethodsConfirmationRedirect) GetEnforce() OptBool { + return s.Enforce +} + +// GetReturnURL returns the value of ReturnURL. +func (s *PaymentMethodsConfirmationRedirect) GetReturnURL() OptString { + return s.ReturnURL +} + +// SetType sets the value of Type. +func (s *PaymentMethodsConfirmationRedirect) SetType(val PaymentMethodsConfirmationType) { + s.Type = val +} + +// SetConfirmationURL sets the value of ConfirmationURL. +func (s *PaymentMethodsConfirmationRedirect) SetConfirmationURL(val string) { + s.ConfirmationURL = val +} + +// SetEnforce sets the value of Enforce. +func (s *PaymentMethodsConfirmationRedirect) SetEnforce(val OptBool) { + s.Enforce = val +} + +// SetReturnURL sets the value of ReturnURL. +func (s *PaymentMethodsConfirmationRedirect) SetReturnURL(val OptString) { + s.ReturnURL = val +} + +// Код сценария подтверждения пользователем привязки +// платежного средства к вашему магазину в ЮKassa. +// Ref: #/components/schemas/PaymentMethodsConfirmationType +type PaymentMethodsConfirmationType string + +const ( + PaymentMethodsConfirmationTypeRedirect PaymentMethodsConfirmationType = "redirect" +) + +// AllValues returns all PaymentMethodsConfirmationType values. +func (PaymentMethodsConfirmationType) AllValues() []PaymentMethodsConfirmationType { + return []PaymentMethodsConfirmationType{ + PaymentMethodsConfirmationTypeRedirect, + } +} + +// MarshalText implements encoding.TextMarshaler. +func (s PaymentMethodsConfirmationType) MarshalText() ([]byte, error) { + switch s { + case PaymentMethodsConfirmationTypeRedirect: + return []byte(s), nil + default: + return nil, errors.Errorf("invalid value: %q", s) + } +} + +// UnmarshalText implements encoding.TextUnmarshaler. +func (s *PaymentMethodsConfirmationType) UnmarshalText(data []byte) error { + switch PaymentMethodsConfirmationType(data) { + case PaymentMethodsConfirmationTypeRedirect: + *s = PaymentMethodsConfirmationTypeRedirect + return nil + default: + return errors.Errorf("invalid value: %q", data) + } +} + +type PaymentMethodsPaymentMethodIDGetInternalServerError TooManyRequests + +func (*PaymentMethodsPaymentMethodIDGetInternalServerError) paymentMethodsPaymentMethodIDGetRes() {} + +// PaymentMethodsPaymentMethodIDGetOK represents sum type. +type PaymentMethodsPaymentMethodIDGetOK struct { + Type PaymentMethodsPaymentMethodIDGetOKType // switch on this field + SavePaymentMethodBankCard SavePaymentMethodBankCard +} + +// PaymentMethodsPaymentMethodIDGetOKType is oneOf type of PaymentMethodsPaymentMethodIDGetOK. +type PaymentMethodsPaymentMethodIDGetOKType string + +// Possible values for PaymentMethodsPaymentMethodIDGetOKType. +const ( + SavePaymentMethodBankCardPaymentMethodsPaymentMethodIDGetOK PaymentMethodsPaymentMethodIDGetOKType = "SavePaymentMethodBankCard" +) + +// IsSavePaymentMethodBankCard reports whether PaymentMethodsPaymentMethodIDGetOK is SavePaymentMethodBankCard. +func (s PaymentMethodsPaymentMethodIDGetOK) IsSavePaymentMethodBankCard() bool { + return s.Type == SavePaymentMethodBankCardPaymentMethodsPaymentMethodIDGetOK +} + +// SetSavePaymentMethodBankCard sets PaymentMethodsPaymentMethodIDGetOK to SavePaymentMethodBankCard. +func (s *PaymentMethodsPaymentMethodIDGetOK) SetSavePaymentMethodBankCard(v SavePaymentMethodBankCard) { + s.Type = SavePaymentMethodBankCardPaymentMethodsPaymentMethodIDGetOK + s.SavePaymentMethodBankCard = v +} + +// GetSavePaymentMethodBankCard returns SavePaymentMethodBankCard and true boolean if PaymentMethodsPaymentMethodIDGetOK is SavePaymentMethodBankCard. +func (s PaymentMethodsPaymentMethodIDGetOK) GetSavePaymentMethodBankCard() (v SavePaymentMethodBankCard, ok bool) { + if !s.IsSavePaymentMethodBankCard() { + return v, false + } + return s.SavePaymentMethodBankCard, true +} + +// NewSavePaymentMethodBankCardPaymentMethodsPaymentMethodIDGetOK returns new PaymentMethodsPaymentMethodIDGetOK from SavePaymentMethodBankCard. +func NewSavePaymentMethodBankCardPaymentMethodsPaymentMethodIDGetOK(v SavePaymentMethodBankCard) PaymentMethodsPaymentMethodIDGetOK { + var s PaymentMethodsPaymentMethodIDGetOK + s.SetSavePaymentMethodBankCard(v) + return s +} + +func (*PaymentMethodsPaymentMethodIDGetOK) paymentMethodsPaymentMethodIDGetRes() {} + +type PaymentMethodsPaymentMethodIDGetTooManyRequests TooManyRequests + +func (*PaymentMethodsPaymentMethodIDGetTooManyRequests) paymentMethodsPaymentMethodIDGetRes() {} + +type PaymentMethodsPostInternalServerError TooManyRequests + +func (*PaymentMethodsPostInternalServerError) paymentMethodsPostRes() {} + +// PaymentMethodsPostOK represents sum type. +type PaymentMethodsPostOK struct { + Type PaymentMethodsPostOKType // switch on this field + SavePaymentMethodBankCard SavePaymentMethodBankCard +} + +// PaymentMethodsPostOKType is oneOf type of PaymentMethodsPostOK. +type PaymentMethodsPostOKType string + +// Possible values for PaymentMethodsPostOKType. +const ( + SavePaymentMethodBankCardPaymentMethodsPostOK PaymentMethodsPostOKType = "SavePaymentMethodBankCard" +) + +// IsSavePaymentMethodBankCard reports whether PaymentMethodsPostOK is SavePaymentMethodBankCard. +func (s PaymentMethodsPostOK) IsSavePaymentMethodBankCard() bool { + return s.Type == SavePaymentMethodBankCardPaymentMethodsPostOK +} + +// SetSavePaymentMethodBankCard sets PaymentMethodsPostOK to SavePaymentMethodBankCard. +func (s *PaymentMethodsPostOK) SetSavePaymentMethodBankCard(v SavePaymentMethodBankCard) { + s.Type = SavePaymentMethodBankCardPaymentMethodsPostOK + s.SavePaymentMethodBankCard = v +} + +// GetSavePaymentMethodBankCard returns SavePaymentMethodBankCard and true boolean if PaymentMethodsPostOK is SavePaymentMethodBankCard. +func (s PaymentMethodsPostOK) GetSavePaymentMethodBankCard() (v SavePaymentMethodBankCard, ok bool) { + if !s.IsSavePaymentMethodBankCard() { + return v, false + } + return s.SavePaymentMethodBankCard, true +} + +// NewSavePaymentMethodBankCardPaymentMethodsPostOK returns new PaymentMethodsPostOK from SavePaymentMethodBankCard. +func NewSavePaymentMethodBankCardPaymentMethodsPostOK(v SavePaymentMethodBankCard) PaymentMethodsPostOK { + var s PaymentMethodsPostOK + s.SetSavePaymentMethodBankCard(v) + return s +} + +func (*PaymentMethodsPostOK) paymentMethodsPostRes() {} + +// PaymentMethodsPostReq represents sum type. +type PaymentMethodsPostReq struct { + Type PaymentMethodsPostReqType // switch on this field + SavePaymentMethodDataBankCard SavePaymentMethodDataBankCard +} + +// PaymentMethodsPostReqType is oneOf type of PaymentMethodsPostReq. +type PaymentMethodsPostReqType string + +// Possible values for PaymentMethodsPostReqType. +const ( + SavePaymentMethodDataBankCardPaymentMethodsPostReq PaymentMethodsPostReqType = "SavePaymentMethodDataBankCard" +) + +// IsSavePaymentMethodDataBankCard reports whether PaymentMethodsPostReq is SavePaymentMethodDataBankCard. +func (s PaymentMethodsPostReq) IsSavePaymentMethodDataBankCard() bool { + return s.Type == SavePaymentMethodDataBankCardPaymentMethodsPostReq +} + +// SetSavePaymentMethodDataBankCard sets PaymentMethodsPostReq to SavePaymentMethodDataBankCard. +func (s *PaymentMethodsPostReq) SetSavePaymentMethodDataBankCard(v SavePaymentMethodDataBankCard) { + s.Type = SavePaymentMethodDataBankCardPaymentMethodsPostReq + s.SavePaymentMethodDataBankCard = v +} + +// GetSavePaymentMethodDataBankCard returns SavePaymentMethodDataBankCard and true boolean if PaymentMethodsPostReq is SavePaymentMethodDataBankCard. +func (s PaymentMethodsPostReq) GetSavePaymentMethodDataBankCard() (v SavePaymentMethodDataBankCard, ok bool) { + if !s.IsSavePaymentMethodDataBankCard() { + return v, false + } + return s.SavePaymentMethodDataBankCard, true +} + +// NewSavePaymentMethodDataBankCardPaymentMethodsPostReq returns new PaymentMethodsPostReq from SavePaymentMethodDataBankCard. +func NewSavePaymentMethodDataBankCardPaymentMethodsPostReq(v SavePaymentMethodDataBankCard) PaymentMethodsPostReq { + var s PaymentMethodsPostReq + s.SetSavePaymentMethodDataBankCard(v) + return s +} + +type PaymentMethodsPostTooManyRequests TooManyRequests + +func (*PaymentMethodsPostTooManyRequests) paymentMethodsPostRes() {} + +// Merged schema. +// Ref: #/components/schemas/PaymentOrderDataUtilities +type PaymentOrderDataUtilities struct { + Type PaymentOrderDataUtilitiesType `json:"type"` + Amount PaymentOrderDataUtilitiesAmount `json:"amount"` + PaymentPurpose string `json:"payment_purpose"` + Recipient PaymentOrderDataUtilitiesRecipient `json:"recipient"` + Kbk OptKbk `json:"kbk"` + Oktmo OptOktmo `json:"oktmo"` + PaymentPeriod OptPaymentPeriod `json:"payment_period"` + // Идентификатор платежного документа. Обязательный + // параметр, если не передан payment_document_number, account_number, + // unified_account_number или service_id. + PaymentDocumentID OptString `json:"payment_document_id"` + // Номер платежного документа на стороне поставщика ЖКУ. + // Обязательный параметр, если не передан payment_document_id, + // account_number, unified_account_number или service_id. + PaymentDocumentNumber OptString `json:"payment_document_number"` + // Номер лицевого счета на стороне поставщика ЖКУ. + // Обязательный параметр, если не передан payment_document_id, + // payment_document_number, unified_account_number или service_id. + AccountNumber OptString `json:"account_number"` + // Единый лицевой счет. Уникальный идентификатор в ГИС + // ЖКХ, который характеризует связку + // «собственник-помещение». Обязательный параметр, если + // не передан payment_document_id, payment_document_number, account_number или service_id. + UnifiedAccountNumber OptString `json:"unified_account_number"` + // Идентификатор жилищно-коммунальной услуги (ЖКУ). + // Обязательный параметр, если не передан payment_document_id, + // payment_document_number, account_number или unified_account_number. + ServiceID OptString `json:"service_id"` +} + +// GetType returns the value of Type. +func (s *PaymentOrderDataUtilities) GetType() PaymentOrderDataUtilitiesType { + return s.Type +} + +// GetAmount returns the value of Amount. +func (s *PaymentOrderDataUtilities) GetAmount() PaymentOrderDataUtilitiesAmount { + return s.Amount +} + +// GetPaymentPurpose returns the value of PaymentPurpose. +func (s *PaymentOrderDataUtilities) GetPaymentPurpose() string { + return s.PaymentPurpose +} + +// GetRecipient returns the value of Recipient. +func (s *PaymentOrderDataUtilities) GetRecipient() PaymentOrderDataUtilitiesRecipient { + return s.Recipient +} + +// GetKbk returns the value of Kbk. +func (s *PaymentOrderDataUtilities) GetKbk() OptKbk { + return s.Kbk +} + +// GetOktmo returns the value of Oktmo. +func (s *PaymentOrderDataUtilities) GetOktmo() OptOktmo { + return s.Oktmo +} + +// GetPaymentPeriod returns the value of PaymentPeriod. +func (s *PaymentOrderDataUtilities) GetPaymentPeriod() OptPaymentPeriod { + return s.PaymentPeriod +} + +// GetPaymentDocumentID returns the value of PaymentDocumentID. +func (s *PaymentOrderDataUtilities) GetPaymentDocumentID() OptString { + return s.PaymentDocumentID +} + +// GetPaymentDocumentNumber returns the value of PaymentDocumentNumber. +func (s *PaymentOrderDataUtilities) GetPaymentDocumentNumber() OptString { + return s.PaymentDocumentNumber +} + +// GetAccountNumber returns the value of AccountNumber. +func (s *PaymentOrderDataUtilities) GetAccountNumber() OptString { + return s.AccountNumber +} + +// GetUnifiedAccountNumber returns the value of UnifiedAccountNumber. +func (s *PaymentOrderDataUtilities) GetUnifiedAccountNumber() OptString { + return s.UnifiedAccountNumber +} + +// GetServiceID returns the value of ServiceID. +func (s *PaymentOrderDataUtilities) GetServiceID() OptString { + return s.ServiceID +} + +// SetType sets the value of Type. +func (s *PaymentOrderDataUtilities) SetType(val PaymentOrderDataUtilitiesType) { + s.Type = val +} + +// SetAmount sets the value of Amount. +func (s *PaymentOrderDataUtilities) SetAmount(val PaymentOrderDataUtilitiesAmount) { + s.Amount = val +} + +// SetPaymentPurpose sets the value of PaymentPurpose. +func (s *PaymentOrderDataUtilities) SetPaymentPurpose(val string) { + s.PaymentPurpose = val +} + +// SetRecipient sets the value of Recipient. +func (s *PaymentOrderDataUtilities) SetRecipient(val PaymentOrderDataUtilitiesRecipient) { + s.Recipient = val +} + +// SetKbk sets the value of Kbk. +func (s *PaymentOrderDataUtilities) SetKbk(val OptKbk) { + s.Kbk = val +} + +// SetOktmo sets the value of Oktmo. +func (s *PaymentOrderDataUtilities) SetOktmo(val OptOktmo) { + s.Oktmo = val +} + +// SetPaymentPeriod sets the value of PaymentPeriod. +func (s *PaymentOrderDataUtilities) SetPaymentPeriod(val OptPaymentPeriod) { + s.PaymentPeriod = val +} + +// SetPaymentDocumentID sets the value of PaymentDocumentID. +func (s *PaymentOrderDataUtilities) SetPaymentDocumentID(val OptString) { + s.PaymentDocumentID = val +} + +// SetPaymentDocumentNumber sets the value of PaymentDocumentNumber. +func (s *PaymentOrderDataUtilities) SetPaymentDocumentNumber(val OptString) { + s.PaymentDocumentNumber = val +} + +// SetAccountNumber sets the value of AccountNumber. +func (s *PaymentOrderDataUtilities) SetAccountNumber(val OptString) { + s.AccountNumber = val +} + +// SetUnifiedAccountNumber sets the value of UnifiedAccountNumber. +func (s *PaymentOrderDataUtilities) SetUnifiedAccountNumber(val OptString) { + s.UnifiedAccountNumber = val +} + +// SetServiceID sets the value of ServiceID. +func (s *PaymentOrderDataUtilities) SetServiceID(val OptString) { + s.ServiceID = val +} + +// Сумма в выбранной валюте. +type PaymentOrderDataUtilitiesAmount struct { + // Сумма в выбранной валюте. Всегда дробное значение. + // Разделитель дробной части — точка, разделитель тысяч + // отсутствует. Количество знаков после точки зависит + // от выбранной валюты. Пример: 1000.00. + Value string `json:"value"` + Currency CurrencyCode `json:"currency"` +} + +// GetValue returns the value of Value. +func (s *PaymentOrderDataUtilitiesAmount) GetValue() string { + return s.Value +} + +// GetCurrency returns the value of Currency. +func (s *PaymentOrderDataUtilitiesAmount) GetCurrency() CurrencyCode { + return s.Currency +} + +// SetValue sets the value of Value. +func (s *PaymentOrderDataUtilitiesAmount) SetValue(val string) { + s.Value = val +} + +// SetCurrency sets the value of Currency. +func (s *PaymentOrderDataUtilitiesAmount) SetCurrency(val CurrencyCode) { + s.Currency = val +} + +// Получатель платежа. +type PaymentOrderDataUtilitiesRecipient struct { + // Название получателя. + Name string `json:"name"` + // ИНН получателя. + Inn string `json:"inn"` + // КПП получателя. + Kpp string `json:"kpp"` + Bank PaymentOrderDataUtilitiesRecipientBank `json:"bank"` +} + +// GetName returns the value of Name. +func (s *PaymentOrderDataUtilitiesRecipient) GetName() string { + return s.Name +} + +// GetInn returns the value of Inn. +func (s *PaymentOrderDataUtilitiesRecipient) GetInn() string { + return s.Inn +} + +// GetKpp returns the value of Kpp. +func (s *PaymentOrderDataUtilitiesRecipient) GetKpp() string { + return s.Kpp +} + +// GetBank returns the value of Bank. +func (s *PaymentOrderDataUtilitiesRecipient) GetBank() PaymentOrderDataUtilitiesRecipientBank { + return s.Bank +} + +// SetName sets the value of Name. +func (s *PaymentOrderDataUtilitiesRecipient) SetName(val string) { + s.Name = val +} + +// SetInn sets the value of Inn. +func (s *PaymentOrderDataUtilitiesRecipient) SetInn(val string) { + s.Inn = val +} + +// SetKpp sets the value of Kpp. +func (s *PaymentOrderDataUtilitiesRecipient) SetKpp(val string) { + s.Kpp = val +} + +// SetBank sets the value of Bank. +func (s *PaymentOrderDataUtilitiesRecipient) SetBank(val PaymentOrderDataUtilitiesRecipientBank) { + s.Bank = val +} + +// Банк получателя платежа. +type PaymentOrderDataUtilitiesRecipientBank struct { + // Name of the recipient's bank. Maximum of 45 characters. + Name string `json:"name"` + // БИК банка получателя. + Bic string `json:"bic"` + // Счет получателя в банке. + Account string `json:"account"` + // Корреспондентский счет банка получателя. + CorrespondentAccount string `json:"correspondent_account"` +} + +// GetName returns the value of Name. +func (s *PaymentOrderDataUtilitiesRecipientBank) GetName() string { + return s.Name +} + +// GetBic returns the value of Bic. +func (s *PaymentOrderDataUtilitiesRecipientBank) GetBic() string { + return s.Bic +} + +// GetAccount returns the value of Account. +func (s *PaymentOrderDataUtilitiesRecipientBank) GetAccount() string { + return s.Account +} + +// GetCorrespondentAccount returns the value of CorrespondentAccount. +func (s *PaymentOrderDataUtilitiesRecipientBank) GetCorrespondentAccount() string { + return s.CorrespondentAccount +} + +// SetName sets the value of Name. +func (s *PaymentOrderDataUtilitiesRecipientBank) SetName(val string) { + s.Name = val +} + +// SetBic sets the value of Bic. +func (s *PaymentOrderDataUtilitiesRecipientBank) SetBic(val string) { + s.Bic = val +} + +// SetAccount sets the value of Account. +func (s *PaymentOrderDataUtilitiesRecipientBank) SetAccount(val string) { + s.Account = val +} + +// SetCorrespondentAccount sets the value of CorrespondentAccount. +func (s *PaymentOrderDataUtilitiesRecipientBank) SetCorrespondentAccount(val string) { + s.CorrespondentAccount = val +} + +type PaymentOrderDataUtilitiesType string + +const ( + PaymentOrderDataUtilitiesTypeUtilities PaymentOrderDataUtilitiesType = "utilities" +) + +// AllValues returns all PaymentOrderDataUtilitiesType values. +func (PaymentOrderDataUtilitiesType) AllValues() []PaymentOrderDataUtilitiesType { + return []PaymentOrderDataUtilitiesType{ + PaymentOrderDataUtilitiesTypeUtilities, + } +} + +// MarshalText implements encoding.TextMarshaler. +func (s PaymentOrderDataUtilitiesType) MarshalText() ([]byte, error) { + switch s { + case PaymentOrderDataUtilitiesTypeUtilities: + return []byte(s), nil + default: + return nil, errors.Errorf("invalid value: %q", s) + } +} + +// UnmarshalText implements encoding.TextUnmarshaler. +func (s *PaymentOrderDataUtilitiesType) UnmarshalText(data []byte) error { + switch PaymentOrderDataUtilitiesType(data) { + case PaymentOrderDataUtilitiesTypeUtilities: + *s = PaymentOrderDataUtilitiesTypeUtilities + return nil + default: + return errors.Errorf("invalid value: %q", data) + } +} + +// Merged schema. +// Ref: #/components/schemas/PaymentOverviewStatementData +type PaymentOverviewStatementData struct { + Type PaymentOverviewStatementDataType `json:"type"` + DeliveryMethod PaymentOverviewStatementEmailDeliveryMethod `json:"delivery_method"` +} + +// GetType returns the value of Type. +func (s *PaymentOverviewStatementData) GetType() PaymentOverviewStatementDataType { + return s.Type +} + +// GetDeliveryMethod returns the value of DeliveryMethod. +func (s *PaymentOverviewStatementData) GetDeliveryMethod() PaymentOverviewStatementEmailDeliveryMethod { + return s.DeliveryMethod +} + +// SetType sets the value of Type. +func (s *PaymentOverviewStatementData) SetType(val PaymentOverviewStatementDataType) { + s.Type = val +} + +// SetDeliveryMethod sets the value of DeliveryMethod. +func (s *PaymentOverviewStatementData) SetDeliveryMethod(val PaymentOverviewStatementEmailDeliveryMethod) { + s.DeliveryMethod = val +} + +type PaymentOverviewStatementDataType string + +const ( + PaymentOverviewStatementDataTypePaymentOverview PaymentOverviewStatementDataType = "payment_overview" +) + +// AllValues returns all PaymentOverviewStatementDataType values. +func (PaymentOverviewStatementDataType) AllValues() []PaymentOverviewStatementDataType { + return []PaymentOverviewStatementDataType{ + PaymentOverviewStatementDataTypePaymentOverview, + } +} + +// MarshalText implements encoding.TextMarshaler. +func (s PaymentOverviewStatementDataType) MarshalText() ([]byte, error) { + switch s { + case PaymentOverviewStatementDataTypePaymentOverview: + return []byte(s), nil + default: + return nil, errors.Errorf("invalid value: %q", s) + } +} + +// UnmarshalText implements encoding.TextUnmarshaler. +func (s *PaymentOverviewStatementDataType) UnmarshalText(data []byte) error { + switch PaymentOverviewStatementDataType(data) { + case PaymentOverviewStatementDataTypePaymentOverview: + *s = PaymentOverviewStatementDataTypePaymentOverview + return nil + default: + return errors.Errorf("invalid value: %q", data) + } +} + +// Ref: #/components/schemas/PaymentOverviewStatementDeliveryMethodType +type PaymentOverviewStatementDeliveryMethodType string + +const ( + PaymentOverviewStatementDeliveryMethodTypeEmail PaymentOverviewStatementDeliveryMethodType = "email" +) + +// AllValues returns all PaymentOverviewStatementDeliveryMethodType values. +func (PaymentOverviewStatementDeliveryMethodType) AllValues() []PaymentOverviewStatementDeliveryMethodType { + return []PaymentOverviewStatementDeliveryMethodType{ + PaymentOverviewStatementDeliveryMethodTypeEmail, + } +} + +// MarshalText implements encoding.TextMarshaler. +func (s PaymentOverviewStatementDeliveryMethodType) MarshalText() ([]byte, error) { + switch s { + case PaymentOverviewStatementDeliveryMethodTypeEmail: + return []byte(s), nil + default: + return nil, errors.Errorf("invalid value: %q", s) + } +} + +// UnmarshalText implements encoding.TextUnmarshaler. +func (s *PaymentOverviewStatementDeliveryMethodType) UnmarshalText(data []byte) error { + switch PaymentOverviewStatementDeliveryMethodType(data) { + case PaymentOverviewStatementDeliveryMethodTypeEmail: + *s = PaymentOverviewStatementDeliveryMethodTypeEmail + return nil + default: + return errors.Errorf("invalid value: %q", data) + } +} + +// Merged schema. +// Ref: #/components/schemas/PaymentOverviewStatementEmailDeliveryMethod +type PaymentOverviewStatementEmailDeliveryMethod struct { + Type PaymentOverviewStatementDeliveryMethodType `json:"type"` + Email string `json:"email"` +} + +// GetType returns the value of Type. +func (s *PaymentOverviewStatementEmailDeliveryMethod) GetType() PaymentOverviewStatementDeliveryMethodType { + return s.Type +} + +// GetEmail returns the value of Email. +func (s *PaymentOverviewStatementEmailDeliveryMethod) GetEmail() string { + return s.Email +} + +// SetType sets the value of Type. +func (s *PaymentOverviewStatementEmailDeliveryMethod) SetType(val PaymentOverviewStatementDeliveryMethodType) { + s.Type = val +} + +// SetEmail sets the value of Email. +func (s *PaymentOverviewStatementEmailDeliveryMethod) SetEmail(val string) { + s.Email = val +} + +// PaymentPaymentMethod represents sum type. +type PaymentPaymentMethod struct { + Type PaymentPaymentMethodType // switch on this field + PaymentMethodBankCard PaymentMethodBankCard + PaymentMethodCash PaymentMethodCash + PaymentMethodQiwi PaymentMethodQiwi + PaymentMethodAlfabank PaymentMethodAlfabank + PaymentMethodWebmoney PaymentMethodWebmoney + PaymentMethodSberbank PaymentMethodSberbank + PaymentMethodTinkoffBank PaymentMethodTinkoffBank + PaymentMethodYooMoney PaymentMethodYooMoney + PaymentMethodApplePay PaymentMethodApplePay + PaymentMethodGooglePay PaymentMethodGooglePay + PaymentMethodMobileBalance PaymentMethodMobileBalance + PaymentMethodInstallments PaymentMethodInstallments + PaymentMethodB2bSberbank PaymentMethodB2bSberbank + PaymentMethodWeChat PaymentMethodWeChat + PaymentMethodSbp PaymentMethodSbp + PaymentMethodSberLoan PaymentMethodSberLoan + PaymentMethodElectronicCertificate PaymentMethodElectronicCertificate + PaymentMethodSberBnpl PaymentMethodSberBnpl +} + +// PaymentPaymentMethodType is oneOf type of PaymentPaymentMethod. +type PaymentPaymentMethodType string + +// Possible values for PaymentPaymentMethodType. +const ( + PaymentMethodBankCardPaymentPaymentMethod PaymentPaymentMethodType = "PaymentMethodBankCard" + PaymentMethodCashPaymentPaymentMethod PaymentPaymentMethodType = "PaymentMethodCash" + PaymentMethodQiwiPaymentPaymentMethod PaymentPaymentMethodType = "PaymentMethodQiwi" + PaymentMethodAlfabankPaymentPaymentMethod PaymentPaymentMethodType = "PaymentMethodAlfabank" + PaymentMethodWebmoneyPaymentPaymentMethod PaymentPaymentMethodType = "PaymentMethodWebmoney" + PaymentMethodSberbankPaymentPaymentMethod PaymentPaymentMethodType = "PaymentMethodSberbank" + PaymentMethodTinkoffBankPaymentPaymentMethod PaymentPaymentMethodType = "PaymentMethodTinkoffBank" + PaymentMethodYooMoneyPaymentPaymentMethod PaymentPaymentMethodType = "PaymentMethodYooMoney" + PaymentMethodApplePayPaymentPaymentMethod PaymentPaymentMethodType = "PaymentMethodApplePay" + PaymentMethodGooglePayPaymentPaymentMethod PaymentPaymentMethodType = "PaymentMethodGooglePay" + PaymentMethodMobileBalancePaymentPaymentMethod PaymentPaymentMethodType = "PaymentMethodMobileBalance" + PaymentMethodInstallmentsPaymentPaymentMethod PaymentPaymentMethodType = "PaymentMethodInstallments" + PaymentMethodB2bSberbankPaymentPaymentMethod PaymentPaymentMethodType = "PaymentMethodB2bSberbank" + PaymentMethodWeChatPaymentPaymentMethod PaymentPaymentMethodType = "PaymentMethodWeChat" + PaymentMethodSbpPaymentPaymentMethod PaymentPaymentMethodType = "PaymentMethodSbp" + PaymentMethodSberLoanPaymentPaymentMethod PaymentPaymentMethodType = "PaymentMethodSberLoan" + PaymentMethodElectronicCertificatePaymentPaymentMethod PaymentPaymentMethodType = "PaymentMethodElectronicCertificate" + PaymentMethodSberBnplPaymentPaymentMethod PaymentPaymentMethodType = "PaymentMethodSberBnpl" +) + +// IsPaymentMethodBankCard reports whether PaymentPaymentMethod is PaymentMethodBankCard. +func (s PaymentPaymentMethod) IsPaymentMethodBankCard() bool { + return s.Type == PaymentMethodBankCardPaymentPaymentMethod +} + +// IsPaymentMethodCash reports whether PaymentPaymentMethod is PaymentMethodCash. +func (s PaymentPaymentMethod) IsPaymentMethodCash() bool { + return s.Type == PaymentMethodCashPaymentPaymentMethod +} + +// IsPaymentMethodQiwi reports whether PaymentPaymentMethod is PaymentMethodQiwi. +func (s PaymentPaymentMethod) IsPaymentMethodQiwi() bool { + return s.Type == PaymentMethodQiwiPaymentPaymentMethod +} + +// IsPaymentMethodAlfabank reports whether PaymentPaymentMethod is PaymentMethodAlfabank. +func (s PaymentPaymentMethod) IsPaymentMethodAlfabank() bool { + return s.Type == PaymentMethodAlfabankPaymentPaymentMethod +} + +// IsPaymentMethodWebmoney reports whether PaymentPaymentMethod is PaymentMethodWebmoney. +func (s PaymentPaymentMethod) IsPaymentMethodWebmoney() bool { + return s.Type == PaymentMethodWebmoneyPaymentPaymentMethod +} + +// IsPaymentMethodSberbank reports whether PaymentPaymentMethod is PaymentMethodSberbank. +func (s PaymentPaymentMethod) IsPaymentMethodSberbank() bool { + return s.Type == PaymentMethodSberbankPaymentPaymentMethod +} + +// IsPaymentMethodTinkoffBank reports whether PaymentPaymentMethod is PaymentMethodTinkoffBank. +func (s PaymentPaymentMethod) IsPaymentMethodTinkoffBank() bool { + return s.Type == PaymentMethodTinkoffBankPaymentPaymentMethod +} + +// IsPaymentMethodYooMoney reports whether PaymentPaymentMethod is PaymentMethodYooMoney. +func (s PaymentPaymentMethod) IsPaymentMethodYooMoney() bool { + return s.Type == PaymentMethodYooMoneyPaymentPaymentMethod +} + +// IsPaymentMethodApplePay reports whether PaymentPaymentMethod is PaymentMethodApplePay. +func (s PaymentPaymentMethod) IsPaymentMethodApplePay() bool { + return s.Type == PaymentMethodApplePayPaymentPaymentMethod +} + +// IsPaymentMethodGooglePay reports whether PaymentPaymentMethod is PaymentMethodGooglePay. +func (s PaymentPaymentMethod) IsPaymentMethodGooglePay() bool { + return s.Type == PaymentMethodGooglePayPaymentPaymentMethod +} + +// IsPaymentMethodMobileBalance reports whether PaymentPaymentMethod is PaymentMethodMobileBalance. +func (s PaymentPaymentMethod) IsPaymentMethodMobileBalance() bool { + return s.Type == PaymentMethodMobileBalancePaymentPaymentMethod +} + +// IsPaymentMethodInstallments reports whether PaymentPaymentMethod is PaymentMethodInstallments. +func (s PaymentPaymentMethod) IsPaymentMethodInstallments() bool { + return s.Type == PaymentMethodInstallmentsPaymentPaymentMethod +} + +// IsPaymentMethodB2bSberbank reports whether PaymentPaymentMethod is PaymentMethodB2bSberbank. +func (s PaymentPaymentMethod) IsPaymentMethodB2bSberbank() bool { + return s.Type == PaymentMethodB2bSberbankPaymentPaymentMethod +} + +// IsPaymentMethodWeChat reports whether PaymentPaymentMethod is PaymentMethodWeChat. +func (s PaymentPaymentMethod) IsPaymentMethodWeChat() bool { + return s.Type == PaymentMethodWeChatPaymentPaymentMethod +} + +// IsPaymentMethodSbp reports whether PaymentPaymentMethod is PaymentMethodSbp. +func (s PaymentPaymentMethod) IsPaymentMethodSbp() bool { + return s.Type == PaymentMethodSbpPaymentPaymentMethod +} + +// IsPaymentMethodSberLoan reports whether PaymentPaymentMethod is PaymentMethodSberLoan. +func (s PaymentPaymentMethod) IsPaymentMethodSberLoan() bool { + return s.Type == PaymentMethodSberLoanPaymentPaymentMethod +} + +// IsPaymentMethodElectronicCertificate reports whether PaymentPaymentMethod is PaymentMethodElectronicCertificate. +func (s PaymentPaymentMethod) IsPaymentMethodElectronicCertificate() bool { + return s.Type == PaymentMethodElectronicCertificatePaymentPaymentMethod +} + +// IsPaymentMethodSberBnpl reports whether PaymentPaymentMethod is PaymentMethodSberBnpl. +func (s PaymentPaymentMethod) IsPaymentMethodSberBnpl() bool { + return s.Type == PaymentMethodSberBnplPaymentPaymentMethod +} + +// SetPaymentMethodBankCard sets PaymentPaymentMethod to PaymentMethodBankCard. +func (s *PaymentPaymentMethod) SetPaymentMethodBankCard(v PaymentMethodBankCard) { + s.Type = PaymentMethodBankCardPaymentPaymentMethod + s.PaymentMethodBankCard = v +} + +// GetPaymentMethodBankCard returns PaymentMethodBankCard and true boolean if PaymentPaymentMethod is PaymentMethodBankCard. +func (s PaymentPaymentMethod) GetPaymentMethodBankCard() (v PaymentMethodBankCard, ok bool) { + if !s.IsPaymentMethodBankCard() { + return v, false + } + return s.PaymentMethodBankCard, true +} + +// NewPaymentMethodBankCardPaymentPaymentMethod returns new PaymentPaymentMethod from PaymentMethodBankCard. +func NewPaymentMethodBankCardPaymentPaymentMethod(v PaymentMethodBankCard) PaymentPaymentMethod { + var s PaymentPaymentMethod + s.SetPaymentMethodBankCard(v) + return s +} + +// SetPaymentMethodCash sets PaymentPaymentMethod to PaymentMethodCash. +func (s *PaymentPaymentMethod) SetPaymentMethodCash(v PaymentMethodCash) { + s.Type = PaymentMethodCashPaymentPaymentMethod + s.PaymentMethodCash = v +} + +// GetPaymentMethodCash returns PaymentMethodCash and true boolean if PaymentPaymentMethod is PaymentMethodCash. +func (s PaymentPaymentMethod) GetPaymentMethodCash() (v PaymentMethodCash, ok bool) { + if !s.IsPaymentMethodCash() { + return v, false + } + return s.PaymentMethodCash, true +} + +// NewPaymentMethodCashPaymentPaymentMethod returns new PaymentPaymentMethod from PaymentMethodCash. +func NewPaymentMethodCashPaymentPaymentMethod(v PaymentMethodCash) PaymentPaymentMethod { + var s PaymentPaymentMethod + s.SetPaymentMethodCash(v) + return s +} + +// SetPaymentMethodQiwi sets PaymentPaymentMethod to PaymentMethodQiwi. +func (s *PaymentPaymentMethod) SetPaymentMethodQiwi(v PaymentMethodQiwi) { + s.Type = PaymentMethodQiwiPaymentPaymentMethod + s.PaymentMethodQiwi = v +} + +// GetPaymentMethodQiwi returns PaymentMethodQiwi and true boolean if PaymentPaymentMethod is PaymentMethodQiwi. +func (s PaymentPaymentMethod) GetPaymentMethodQiwi() (v PaymentMethodQiwi, ok bool) { + if !s.IsPaymentMethodQiwi() { + return v, false + } + return s.PaymentMethodQiwi, true +} + +// NewPaymentMethodQiwiPaymentPaymentMethod returns new PaymentPaymentMethod from PaymentMethodQiwi. +func NewPaymentMethodQiwiPaymentPaymentMethod(v PaymentMethodQiwi) PaymentPaymentMethod { + var s PaymentPaymentMethod + s.SetPaymentMethodQiwi(v) + return s +} + +// SetPaymentMethodAlfabank sets PaymentPaymentMethod to PaymentMethodAlfabank. +func (s *PaymentPaymentMethod) SetPaymentMethodAlfabank(v PaymentMethodAlfabank) { + s.Type = PaymentMethodAlfabankPaymentPaymentMethod + s.PaymentMethodAlfabank = v +} + +// GetPaymentMethodAlfabank returns PaymentMethodAlfabank and true boolean if PaymentPaymentMethod is PaymentMethodAlfabank. +func (s PaymentPaymentMethod) GetPaymentMethodAlfabank() (v PaymentMethodAlfabank, ok bool) { + if !s.IsPaymentMethodAlfabank() { + return v, false + } + return s.PaymentMethodAlfabank, true +} + +// NewPaymentMethodAlfabankPaymentPaymentMethod returns new PaymentPaymentMethod from PaymentMethodAlfabank. +func NewPaymentMethodAlfabankPaymentPaymentMethod(v PaymentMethodAlfabank) PaymentPaymentMethod { + var s PaymentPaymentMethod + s.SetPaymentMethodAlfabank(v) + return s +} + +// SetPaymentMethodWebmoney sets PaymentPaymentMethod to PaymentMethodWebmoney. +func (s *PaymentPaymentMethod) SetPaymentMethodWebmoney(v PaymentMethodWebmoney) { + s.Type = PaymentMethodWebmoneyPaymentPaymentMethod + s.PaymentMethodWebmoney = v +} + +// GetPaymentMethodWebmoney returns PaymentMethodWebmoney and true boolean if PaymentPaymentMethod is PaymentMethodWebmoney. +func (s PaymentPaymentMethod) GetPaymentMethodWebmoney() (v PaymentMethodWebmoney, ok bool) { + if !s.IsPaymentMethodWebmoney() { + return v, false + } + return s.PaymentMethodWebmoney, true +} + +// NewPaymentMethodWebmoneyPaymentPaymentMethod returns new PaymentPaymentMethod from PaymentMethodWebmoney. +func NewPaymentMethodWebmoneyPaymentPaymentMethod(v PaymentMethodWebmoney) PaymentPaymentMethod { + var s PaymentPaymentMethod + s.SetPaymentMethodWebmoney(v) + return s +} + +// SetPaymentMethodSberbank sets PaymentPaymentMethod to PaymentMethodSberbank. +func (s *PaymentPaymentMethod) SetPaymentMethodSberbank(v PaymentMethodSberbank) { + s.Type = PaymentMethodSberbankPaymentPaymentMethod + s.PaymentMethodSberbank = v +} + +// GetPaymentMethodSberbank returns PaymentMethodSberbank and true boolean if PaymentPaymentMethod is PaymentMethodSberbank. +func (s PaymentPaymentMethod) GetPaymentMethodSberbank() (v PaymentMethodSberbank, ok bool) { + if !s.IsPaymentMethodSberbank() { + return v, false + } + return s.PaymentMethodSberbank, true +} + +// NewPaymentMethodSberbankPaymentPaymentMethod returns new PaymentPaymentMethod from PaymentMethodSberbank. +func NewPaymentMethodSberbankPaymentPaymentMethod(v PaymentMethodSberbank) PaymentPaymentMethod { + var s PaymentPaymentMethod + s.SetPaymentMethodSberbank(v) + return s +} + +// SetPaymentMethodTinkoffBank sets PaymentPaymentMethod to PaymentMethodTinkoffBank. +func (s *PaymentPaymentMethod) SetPaymentMethodTinkoffBank(v PaymentMethodTinkoffBank) { + s.Type = PaymentMethodTinkoffBankPaymentPaymentMethod + s.PaymentMethodTinkoffBank = v +} + +// GetPaymentMethodTinkoffBank returns PaymentMethodTinkoffBank and true boolean if PaymentPaymentMethod is PaymentMethodTinkoffBank. +func (s PaymentPaymentMethod) GetPaymentMethodTinkoffBank() (v PaymentMethodTinkoffBank, ok bool) { + if !s.IsPaymentMethodTinkoffBank() { + return v, false + } + return s.PaymentMethodTinkoffBank, true +} + +// NewPaymentMethodTinkoffBankPaymentPaymentMethod returns new PaymentPaymentMethod from PaymentMethodTinkoffBank. +func NewPaymentMethodTinkoffBankPaymentPaymentMethod(v PaymentMethodTinkoffBank) PaymentPaymentMethod { + var s PaymentPaymentMethod + s.SetPaymentMethodTinkoffBank(v) + return s +} + +// SetPaymentMethodYooMoney sets PaymentPaymentMethod to PaymentMethodYooMoney. +func (s *PaymentPaymentMethod) SetPaymentMethodYooMoney(v PaymentMethodYooMoney) { + s.Type = PaymentMethodYooMoneyPaymentPaymentMethod + s.PaymentMethodYooMoney = v +} + +// GetPaymentMethodYooMoney returns PaymentMethodYooMoney and true boolean if PaymentPaymentMethod is PaymentMethodYooMoney. +func (s PaymentPaymentMethod) GetPaymentMethodYooMoney() (v PaymentMethodYooMoney, ok bool) { + if !s.IsPaymentMethodYooMoney() { + return v, false + } + return s.PaymentMethodYooMoney, true +} + +// NewPaymentMethodYooMoneyPaymentPaymentMethod returns new PaymentPaymentMethod from PaymentMethodYooMoney. +func NewPaymentMethodYooMoneyPaymentPaymentMethod(v PaymentMethodYooMoney) PaymentPaymentMethod { + var s PaymentPaymentMethod + s.SetPaymentMethodYooMoney(v) + return s +} + +// SetPaymentMethodApplePay sets PaymentPaymentMethod to PaymentMethodApplePay. +func (s *PaymentPaymentMethod) SetPaymentMethodApplePay(v PaymentMethodApplePay) { + s.Type = PaymentMethodApplePayPaymentPaymentMethod + s.PaymentMethodApplePay = v +} + +// GetPaymentMethodApplePay returns PaymentMethodApplePay and true boolean if PaymentPaymentMethod is PaymentMethodApplePay. +func (s PaymentPaymentMethod) GetPaymentMethodApplePay() (v PaymentMethodApplePay, ok bool) { + if !s.IsPaymentMethodApplePay() { + return v, false + } + return s.PaymentMethodApplePay, true +} + +// NewPaymentMethodApplePayPaymentPaymentMethod returns new PaymentPaymentMethod from PaymentMethodApplePay. +func NewPaymentMethodApplePayPaymentPaymentMethod(v PaymentMethodApplePay) PaymentPaymentMethod { + var s PaymentPaymentMethod + s.SetPaymentMethodApplePay(v) + return s +} + +// SetPaymentMethodGooglePay sets PaymentPaymentMethod to PaymentMethodGooglePay. +func (s *PaymentPaymentMethod) SetPaymentMethodGooglePay(v PaymentMethodGooglePay) { + s.Type = PaymentMethodGooglePayPaymentPaymentMethod + s.PaymentMethodGooglePay = v +} + +// GetPaymentMethodGooglePay returns PaymentMethodGooglePay and true boolean if PaymentPaymentMethod is PaymentMethodGooglePay. +func (s PaymentPaymentMethod) GetPaymentMethodGooglePay() (v PaymentMethodGooglePay, ok bool) { + if !s.IsPaymentMethodGooglePay() { + return v, false + } + return s.PaymentMethodGooglePay, true +} + +// NewPaymentMethodGooglePayPaymentPaymentMethod returns new PaymentPaymentMethod from PaymentMethodGooglePay. +func NewPaymentMethodGooglePayPaymentPaymentMethod(v PaymentMethodGooglePay) PaymentPaymentMethod { + var s PaymentPaymentMethod + s.SetPaymentMethodGooglePay(v) + return s +} + +// SetPaymentMethodMobileBalance sets PaymentPaymentMethod to PaymentMethodMobileBalance. +func (s *PaymentPaymentMethod) SetPaymentMethodMobileBalance(v PaymentMethodMobileBalance) { + s.Type = PaymentMethodMobileBalancePaymentPaymentMethod + s.PaymentMethodMobileBalance = v +} + +// GetPaymentMethodMobileBalance returns PaymentMethodMobileBalance and true boolean if PaymentPaymentMethod is PaymentMethodMobileBalance. +func (s PaymentPaymentMethod) GetPaymentMethodMobileBalance() (v PaymentMethodMobileBalance, ok bool) { + if !s.IsPaymentMethodMobileBalance() { + return v, false + } + return s.PaymentMethodMobileBalance, true +} + +// NewPaymentMethodMobileBalancePaymentPaymentMethod returns new PaymentPaymentMethod from PaymentMethodMobileBalance. +func NewPaymentMethodMobileBalancePaymentPaymentMethod(v PaymentMethodMobileBalance) PaymentPaymentMethod { + var s PaymentPaymentMethod + s.SetPaymentMethodMobileBalance(v) + return s +} + +// SetPaymentMethodInstallments sets PaymentPaymentMethod to PaymentMethodInstallments. +func (s *PaymentPaymentMethod) SetPaymentMethodInstallments(v PaymentMethodInstallments) { + s.Type = PaymentMethodInstallmentsPaymentPaymentMethod + s.PaymentMethodInstallments = v +} + +// GetPaymentMethodInstallments returns PaymentMethodInstallments and true boolean if PaymentPaymentMethod is PaymentMethodInstallments. +func (s PaymentPaymentMethod) GetPaymentMethodInstallments() (v PaymentMethodInstallments, ok bool) { + if !s.IsPaymentMethodInstallments() { + return v, false + } + return s.PaymentMethodInstallments, true +} + +// NewPaymentMethodInstallmentsPaymentPaymentMethod returns new PaymentPaymentMethod from PaymentMethodInstallments. +func NewPaymentMethodInstallmentsPaymentPaymentMethod(v PaymentMethodInstallments) PaymentPaymentMethod { + var s PaymentPaymentMethod + s.SetPaymentMethodInstallments(v) + return s +} + +// SetPaymentMethodB2bSberbank sets PaymentPaymentMethod to PaymentMethodB2bSberbank. +func (s *PaymentPaymentMethod) SetPaymentMethodB2bSberbank(v PaymentMethodB2bSberbank) { + s.Type = PaymentMethodB2bSberbankPaymentPaymentMethod + s.PaymentMethodB2bSberbank = v +} + +// GetPaymentMethodB2bSberbank returns PaymentMethodB2bSberbank and true boolean if PaymentPaymentMethod is PaymentMethodB2bSberbank. +func (s PaymentPaymentMethod) GetPaymentMethodB2bSberbank() (v PaymentMethodB2bSberbank, ok bool) { + if !s.IsPaymentMethodB2bSberbank() { + return v, false + } + return s.PaymentMethodB2bSberbank, true +} + +// NewPaymentMethodB2bSberbankPaymentPaymentMethod returns new PaymentPaymentMethod from PaymentMethodB2bSberbank. +func NewPaymentMethodB2bSberbankPaymentPaymentMethod(v PaymentMethodB2bSberbank) PaymentPaymentMethod { + var s PaymentPaymentMethod + s.SetPaymentMethodB2bSberbank(v) + return s +} + +// SetPaymentMethodWeChat sets PaymentPaymentMethod to PaymentMethodWeChat. +func (s *PaymentPaymentMethod) SetPaymentMethodWeChat(v PaymentMethodWeChat) { + s.Type = PaymentMethodWeChatPaymentPaymentMethod + s.PaymentMethodWeChat = v +} + +// GetPaymentMethodWeChat returns PaymentMethodWeChat and true boolean if PaymentPaymentMethod is PaymentMethodWeChat. +func (s PaymentPaymentMethod) GetPaymentMethodWeChat() (v PaymentMethodWeChat, ok bool) { + if !s.IsPaymentMethodWeChat() { + return v, false + } + return s.PaymentMethodWeChat, true +} + +// NewPaymentMethodWeChatPaymentPaymentMethod returns new PaymentPaymentMethod from PaymentMethodWeChat. +func NewPaymentMethodWeChatPaymentPaymentMethod(v PaymentMethodWeChat) PaymentPaymentMethod { + var s PaymentPaymentMethod + s.SetPaymentMethodWeChat(v) + return s +} + +// SetPaymentMethodSbp sets PaymentPaymentMethod to PaymentMethodSbp. +func (s *PaymentPaymentMethod) SetPaymentMethodSbp(v PaymentMethodSbp) { + s.Type = PaymentMethodSbpPaymentPaymentMethod + s.PaymentMethodSbp = v +} + +// GetPaymentMethodSbp returns PaymentMethodSbp and true boolean if PaymentPaymentMethod is PaymentMethodSbp. +func (s PaymentPaymentMethod) GetPaymentMethodSbp() (v PaymentMethodSbp, ok bool) { + if !s.IsPaymentMethodSbp() { + return v, false + } + return s.PaymentMethodSbp, true +} + +// NewPaymentMethodSbpPaymentPaymentMethod returns new PaymentPaymentMethod from PaymentMethodSbp. +func NewPaymentMethodSbpPaymentPaymentMethod(v PaymentMethodSbp) PaymentPaymentMethod { + var s PaymentPaymentMethod + s.SetPaymentMethodSbp(v) + return s +} + +// SetPaymentMethodSberLoan sets PaymentPaymentMethod to PaymentMethodSberLoan. +func (s *PaymentPaymentMethod) SetPaymentMethodSberLoan(v PaymentMethodSberLoan) { + s.Type = PaymentMethodSberLoanPaymentPaymentMethod + s.PaymentMethodSberLoan = v +} + +// GetPaymentMethodSberLoan returns PaymentMethodSberLoan and true boolean if PaymentPaymentMethod is PaymentMethodSberLoan. +func (s PaymentPaymentMethod) GetPaymentMethodSberLoan() (v PaymentMethodSberLoan, ok bool) { + if !s.IsPaymentMethodSberLoan() { + return v, false + } + return s.PaymentMethodSberLoan, true +} + +// NewPaymentMethodSberLoanPaymentPaymentMethod returns new PaymentPaymentMethod from PaymentMethodSberLoan. +func NewPaymentMethodSberLoanPaymentPaymentMethod(v PaymentMethodSberLoan) PaymentPaymentMethod { + var s PaymentPaymentMethod + s.SetPaymentMethodSberLoan(v) + return s +} + +// SetPaymentMethodElectronicCertificate sets PaymentPaymentMethod to PaymentMethodElectronicCertificate. +func (s *PaymentPaymentMethod) SetPaymentMethodElectronicCertificate(v PaymentMethodElectronicCertificate) { + s.Type = PaymentMethodElectronicCertificatePaymentPaymentMethod + s.PaymentMethodElectronicCertificate = v +} + +// GetPaymentMethodElectronicCertificate returns PaymentMethodElectronicCertificate and true boolean if PaymentPaymentMethod is PaymentMethodElectronicCertificate. +func (s PaymentPaymentMethod) GetPaymentMethodElectronicCertificate() (v PaymentMethodElectronicCertificate, ok bool) { + if !s.IsPaymentMethodElectronicCertificate() { + return v, false + } + return s.PaymentMethodElectronicCertificate, true +} + +// NewPaymentMethodElectronicCertificatePaymentPaymentMethod returns new PaymentPaymentMethod from PaymentMethodElectronicCertificate. +func NewPaymentMethodElectronicCertificatePaymentPaymentMethod(v PaymentMethodElectronicCertificate) PaymentPaymentMethod { + var s PaymentPaymentMethod + s.SetPaymentMethodElectronicCertificate(v) + return s +} + +// SetPaymentMethodSberBnpl sets PaymentPaymentMethod to PaymentMethodSberBnpl. +func (s *PaymentPaymentMethod) SetPaymentMethodSberBnpl(v PaymentMethodSberBnpl) { + s.Type = PaymentMethodSberBnplPaymentPaymentMethod + s.PaymentMethodSberBnpl = v +} + +// GetPaymentMethodSberBnpl returns PaymentMethodSberBnpl and true boolean if PaymentPaymentMethod is PaymentMethodSberBnpl. +func (s PaymentPaymentMethod) GetPaymentMethodSberBnpl() (v PaymentMethodSberBnpl, ok bool) { + if !s.IsPaymentMethodSberBnpl() { + return v, false + } + return s.PaymentMethodSberBnpl, true +} + +// NewPaymentMethodSberBnplPaymentPaymentMethod returns new PaymentPaymentMethod from PaymentMethodSberBnpl. +func NewPaymentMethodSberBnplPaymentPaymentMethod(v PaymentMethodSberBnpl) PaymentPaymentMethod { + var s PaymentPaymentMethod + s.SetPaymentMethodSberBnpl(v) + return s +} + +// Период оплаты, за который выставлены начисления и за +// который вносится оплата. +// Ref: #/components/schemas/PaymentPeriod +type PaymentPeriod struct { + // Месяц периода. Например, 1 — январь. + Month int `json:"month"` + // Payment period year. The value must be within the range 1920–2050. For example, 2025. + Year int `json:"year"` +} + +// GetMonth returns the value of Month. +func (s *PaymentPeriod) GetMonth() int { + return s.Month +} + +// GetYear returns the value of Year. +func (s *PaymentPeriod) GetYear() int { + return s.Year +} + +// SetMonth sets the value of Month. +func (s *PaymentPeriod) SetMonth(val int) { + s.Month = val +} + +// SetYear sets the value of Year. +func (s *PaymentPeriod) SetYear(val int) { + s.Year = val +} + +type PaymentPurpose string + +type PaymentReceiptRegistration string + +const ( + PaymentReceiptRegistrationPending PaymentReceiptRegistration = "pending" + PaymentReceiptRegistrationSucceeded PaymentReceiptRegistration = "succeeded" + PaymentReceiptRegistrationCanceled PaymentReceiptRegistration = "canceled" +) + +// AllValues returns all PaymentReceiptRegistration values. +func (PaymentReceiptRegistration) AllValues() []PaymentReceiptRegistration { + return []PaymentReceiptRegistration{ + PaymentReceiptRegistrationPending, + PaymentReceiptRegistrationSucceeded, + PaymentReceiptRegistrationCanceled, + } +} + +// MarshalText implements encoding.TextMarshaler. +func (s PaymentReceiptRegistration) MarshalText() ([]byte, error) { + switch s { + case PaymentReceiptRegistrationPending: + return []byte(s), nil + case PaymentReceiptRegistrationSucceeded: + return []byte(s), nil + case PaymentReceiptRegistrationCanceled: + return []byte(s), nil + default: + return nil, errors.Errorf("invalid value: %q", s) + } +} + +// UnmarshalText implements encoding.TextUnmarshaler. +func (s *PaymentReceiptRegistration) UnmarshalText(data []byte) error { + switch PaymentReceiptRegistration(data) { + case PaymentReceiptRegistrationPending: + *s = PaymentReceiptRegistrationPending + return nil + case PaymentReceiptRegistrationSucceeded: + *s = PaymentReceiptRegistrationSucceeded + return nil + case PaymentReceiptRegistrationCanceled: + *s = PaymentReceiptRegistrationCanceled + return nil + default: + return errors.Errorf("invalid value: %q", data) + } +} + +// Payment recipient. +type PaymentRecipient struct { + AccountID AccountId `json:"account_id"` + GatewayID GatewayId `json:"gateway_id"` +} + +// GetAccountID returns the value of AccountID. +func (s *PaymentRecipient) GetAccountID() AccountId { + return s.AccountID +} + +// GetGatewayID returns the value of GatewayID. +func (s *PaymentRecipient) GetGatewayID() GatewayId { + return s.GatewayID +} + +// SetAccountID sets the value of AccountID. +func (s *PaymentRecipient) SetAccountID(val AccountId) { + s.AccountID = val +} + +// SetGatewayID sets the value of GatewayID. +func (s *PaymentRecipient) SetGatewayID(val GatewayId) { + s.GatewayID = val +} + +// Сумма в выбранной валюте. +type PaymentRefundedAmount struct { + // Сумма в выбранной валюте. Всегда дробное значение. + // Разделитель дробной части — точка, разделитель тысяч + // отсутствует. Количество знаков после точки зависит + // от выбранной валюты. Пример: 1000.00. + Value string `json:"value"` + Currency CurrencyCode `json:"currency"` +} + +// GetValue returns the value of Value. +func (s *PaymentRefundedAmount) GetValue() string { + return s.Value +} + +// GetCurrency returns the value of Currency. +func (s *PaymentRefundedAmount) GetCurrency() CurrencyCode { + return s.Currency +} + +// SetValue sets the value of Value. +func (s *PaymentRefundedAmount) SetValue(val string) { + s.Value = val +} + +// SetCurrency sets the value of Currency. +func (s *PaymentRefundedAmount) SetCurrency(val CurrencyCode) { + s.Currency = val +} + +// Payment status. Possible values: pending, waiting_for_capture, succeeded, and canceled. More about +// the life cycle of a payment: https://yookassa. +// ru/developers/payment-acceptance/getting-started/payment-process#lifecycle. +// Ref: #/components/schemas/PaymentStatus +type PaymentStatus string + +const ( + PaymentStatusPending PaymentStatus = "pending" + PaymentStatusWaitingForCapture PaymentStatus = "waiting_for_capture" + PaymentStatusSucceeded PaymentStatus = "succeeded" + PaymentStatusCanceled PaymentStatus = "canceled" +) + +// AllValues returns all PaymentStatus values. +func (PaymentStatus) AllValues() []PaymentStatus { + return []PaymentStatus{ + PaymentStatusPending, + PaymentStatusWaitingForCapture, + PaymentStatusSucceeded, + PaymentStatusCanceled, + } +} + +// MarshalText implements encoding.TextMarshaler. +func (s PaymentStatus) MarshalText() ([]byte, error) { + switch s { + case PaymentStatusPending: + return []byte(s), nil + case PaymentStatusWaitingForCapture: + return []byte(s), nil + case PaymentStatusSucceeded: + return []byte(s), nil + case PaymentStatusCanceled: + return []byte(s), nil + default: + return nil, errors.Errorf("invalid value: %q", s) + } +} + +// UnmarshalText implements encoding.TextUnmarshaler. +func (s *PaymentStatus) UnmarshalText(data []byte) error { + switch PaymentStatus(data) { + case PaymentStatusPending: + *s = PaymentStatusPending + return nil + case PaymentStatusWaitingForCapture: + *s = PaymentStatusWaitingForCapture + return nil + case PaymentStatusSucceeded: + *s = PaymentStatusSucceeded + return nil + case PaymentStatusCanceled: + *s = PaymentStatusCanceled + return nil + default: + return errors.Errorf("invalid value: %q", data) + } +} + +type PaymentToken string + +type PaymentsPaymentIDCapturePostReq struct { + Amount OptPaymentsPaymentIDCapturePostReqAmount `json:"amount"` + Receipt OptReceiptData `json:"receipt"` + Airline OptPaymentsPaymentIDCapturePostReqAirline `json:"airline"` + // Information about money distribution: the amounts of transfers and the stores to be transferred to. + // Specified for partially capturing a payment if you use Split payments: https://yookassa. + // ru/developers/solutions-for-platforms/split-payments/basics. + Transfers []TransferData `json:"transfers"` + // The deal within which the payment is being carried out. Specified for partially capturing a + // payment if you use Safe deal: https://yookassa. + // ru/developers/solutions-for-platforms/safe-deal/basics. + Deal OptPaymentsPaymentIDCapturePostReqDeal `json:"deal"` +} + +// GetAmount returns the value of Amount. +func (s *PaymentsPaymentIDCapturePostReq) GetAmount() OptPaymentsPaymentIDCapturePostReqAmount { + return s.Amount +} + +// GetReceipt returns the value of Receipt. +func (s *PaymentsPaymentIDCapturePostReq) GetReceipt() OptReceiptData { + return s.Receipt +} + +// GetAirline returns the value of Airline. +func (s *PaymentsPaymentIDCapturePostReq) GetAirline() OptPaymentsPaymentIDCapturePostReqAirline { + return s.Airline +} + +// GetTransfers returns the value of Transfers. +func (s *PaymentsPaymentIDCapturePostReq) GetTransfers() []TransferData { + return s.Transfers +} + +// GetDeal returns the value of Deal. +func (s *PaymentsPaymentIDCapturePostReq) GetDeal() OptPaymentsPaymentIDCapturePostReqDeal { + return s.Deal +} + +// SetAmount sets the value of Amount. +func (s *PaymentsPaymentIDCapturePostReq) SetAmount(val OptPaymentsPaymentIDCapturePostReqAmount) { + s.Amount = val +} + +// SetReceipt sets the value of Receipt. +func (s *PaymentsPaymentIDCapturePostReq) SetReceipt(val OptReceiptData) { + s.Receipt = val +} + +// SetAirline sets the value of Airline. +func (s *PaymentsPaymentIDCapturePostReq) SetAirline(val OptPaymentsPaymentIDCapturePostReqAirline) { + s.Airline = val +} + +// SetTransfers sets the value of Transfers. +func (s *PaymentsPaymentIDCapturePostReq) SetTransfers(val []TransferData) { + s.Transfers = val +} + +// SetDeal sets the value of Deal. +func (s *PaymentsPaymentIDCapturePostReq) SetDeal(val OptPaymentsPaymentIDCapturePostReqDeal) { + s.Deal = val +} + +// Объект с данными для продажи авиабилетов: https://yookassa. +// ru/developers/payment-acceptance/scenario-extensions/airline-tickets. Используется +// только для платежей банковской картой. +type PaymentsPaymentIDCapturePostReqAirline struct { + // Unique ticket number. If you already know the ticket number during payment creation, ticket_number + // is a required parameter. If you don't, specify booking_reference instead of ticket_number. + TicketNumber OptString `json:"ticket_number"` + // Booking reference number, required if ticket_number is not specified. + BookingReference OptString `json:"booking_reference"` + // List of passengers. + Passengers []AirlinePassenger `json:"passengers"` + // List of flight legs. + Legs []AirlineLeg `json:"legs"` +} + +// GetTicketNumber returns the value of TicketNumber. +func (s *PaymentsPaymentIDCapturePostReqAirline) GetTicketNumber() OptString { + return s.TicketNumber +} + +// GetBookingReference returns the value of BookingReference. +func (s *PaymentsPaymentIDCapturePostReqAirline) GetBookingReference() OptString { + return s.BookingReference +} + +// GetPassengers returns the value of Passengers. +func (s *PaymentsPaymentIDCapturePostReqAirline) GetPassengers() []AirlinePassenger { + return s.Passengers +} + +// GetLegs returns the value of Legs. +func (s *PaymentsPaymentIDCapturePostReqAirline) GetLegs() []AirlineLeg { + return s.Legs +} + +// SetTicketNumber sets the value of TicketNumber. +func (s *PaymentsPaymentIDCapturePostReqAirline) SetTicketNumber(val OptString) { + s.TicketNumber = val +} + +// SetBookingReference sets the value of BookingReference. +func (s *PaymentsPaymentIDCapturePostReqAirline) SetBookingReference(val OptString) { + s.BookingReference = val +} + +// SetPassengers sets the value of Passengers. +func (s *PaymentsPaymentIDCapturePostReqAirline) SetPassengers(val []AirlinePassenger) { + s.Passengers = val +} + +// SetLegs sets the value of Legs. +func (s *PaymentsPaymentIDCapturePostReqAirline) SetLegs(val []AirlineLeg) { + s.Legs = val +} + +// Сумма в выбранной валюте. +type PaymentsPaymentIDCapturePostReqAmount struct { + // Сумма в выбранной валюте. Всегда дробное значение. + // Разделитель дробной части — точка, разделитель тысяч + // отсутствует. Количество знаков после точки зависит + // от выбранной валюты. Пример: 1000.00. + Value string `json:"value"` + Currency CurrencyCode `json:"currency"` +} + +// GetValue returns the value of Value. +func (s *PaymentsPaymentIDCapturePostReqAmount) GetValue() string { + return s.Value +} + +// GetCurrency returns the value of Currency. +func (s *PaymentsPaymentIDCapturePostReqAmount) GetCurrency() CurrencyCode { + return s.Currency +} + +// SetValue sets the value of Value. +func (s *PaymentsPaymentIDCapturePostReqAmount) SetValue(val string) { + s.Value = val +} + +// SetCurrency sets the value of Currency. +func (s *PaymentsPaymentIDCapturePostReqAmount) SetCurrency(val CurrencyCode) { + s.Currency = val +} + +// The deal within which the payment is being carried out. Specified for partially capturing a +// payment if you use Safe deal: https://yookassa. +// ru/developers/solutions-for-platforms/safe-deal/basics. +type PaymentsPaymentIDCapturePostReqDeal struct { + Settlements SettlementPaymentArray `json:"settlements"` +} + +// GetSettlements returns the value of Settlements. +func (s *PaymentsPaymentIDCapturePostReqDeal) GetSettlements() SettlementPaymentArray { + return s.Settlements +} + +// SetSettlements sets the value of Settlements. +func (s *PaymentsPaymentIDCapturePostReqDeal) SetSettlements(val SettlementPaymentArray) { + s.Settlements = val +} + +type PaymentsPostReq struct { + Amount PaymentsPostReqAmount `json:"amount"` + Description OptString `json:"description"` + Receipt OptReceiptData `json:"receipt"` + Recipient OptRecipient `json:"recipient"` + PaymentToken OptPaymentToken `json:"payment_token"` + PaymentMethodID OptPaymentMethodId `json:"payment_method_id"` + PaymentMethodData OptPaymentsPostReqPaymentMethodData `json:"payment_method_data"` + Confirmation OptPaymentsPostReqConfirmation `json:"confirmation"` + SavePaymentMethod OptSavePaymentMethodAttribute `json:"save_payment_method"` + Capture OptCapture `json:"capture"` + ClientIP OptClientIp `json:"client_ip"` + Metadata OptMetadata `json:"metadata"` + Airline OptPaymentsPostReqAirline `json:"airline"` + // Information about money distribution: the amounts of transfers and the stores to be transferred to. + // Specified if you use Split payments: https://yookassa. + // ru/developers/solutions-for-platforms/split-payments/basics. + Transfers []TransferDataPayment `json:"transfers"` + Deal OptPaymentsPostReqDeal `json:"deal"` + MerchantCustomerID OptString `json:"merchant_customer_id"` + PaymentOrder OptPaymentsPostReqPaymentOrder `json:"payment_order"` + Receiver OptPaymentsPostReqReceiver `json:"receiver"` + // Data for sending statements. Required if you want the user to receive a statement after they make + // a payment. Only one type of statement is currently available: payment overview. This is the + // information about a successful payment that YooMoney sends to the user's email address. An + // overview may be sent if the payment was made via bank cards, SberPay, or FPS. The option to send + // overviews is available for all integration scenarios: https://yookassa. + // ru/developers/payment-acceptance/getting-started/selecting-integration-scenario. + Statements []PaymentsPostReqStatementsItem `json:"statements"` + Test OptTest `json:"test"` +} + +// GetAmount returns the value of Amount. +func (s *PaymentsPostReq) GetAmount() PaymentsPostReqAmount { + return s.Amount +} + +// GetDescription returns the value of Description. +func (s *PaymentsPostReq) GetDescription() OptString { + return s.Description +} + +// GetReceipt returns the value of Receipt. +func (s *PaymentsPostReq) GetReceipt() OptReceiptData { + return s.Receipt +} + +// GetRecipient returns the value of Recipient. +func (s *PaymentsPostReq) GetRecipient() OptRecipient { + return s.Recipient +} + +// GetPaymentToken returns the value of PaymentToken. +func (s *PaymentsPostReq) GetPaymentToken() OptPaymentToken { + return s.PaymentToken +} + +// GetPaymentMethodID returns the value of PaymentMethodID. +func (s *PaymentsPostReq) GetPaymentMethodID() OptPaymentMethodId { + return s.PaymentMethodID +} + +// GetPaymentMethodData returns the value of PaymentMethodData. +func (s *PaymentsPostReq) GetPaymentMethodData() OptPaymentsPostReqPaymentMethodData { + return s.PaymentMethodData +} + +// GetConfirmation returns the value of Confirmation. +func (s *PaymentsPostReq) GetConfirmation() OptPaymentsPostReqConfirmation { + return s.Confirmation +} + +// GetSavePaymentMethod returns the value of SavePaymentMethod. +func (s *PaymentsPostReq) GetSavePaymentMethod() OptSavePaymentMethodAttribute { + return s.SavePaymentMethod +} + +// GetCapture returns the value of Capture. +func (s *PaymentsPostReq) GetCapture() OptCapture { + return s.Capture +} + +// GetClientIP returns the value of ClientIP. +func (s *PaymentsPostReq) GetClientIP() OptClientIp { + return s.ClientIP +} + +// GetMetadata returns the value of Metadata. +func (s *PaymentsPostReq) GetMetadata() OptMetadata { + return s.Metadata +} + +// GetAirline returns the value of Airline. +func (s *PaymentsPostReq) GetAirline() OptPaymentsPostReqAirline { + return s.Airline +} + +// GetTransfers returns the value of Transfers. +func (s *PaymentsPostReq) GetTransfers() []TransferDataPayment { + return s.Transfers +} + +// GetDeal returns the value of Deal. +func (s *PaymentsPostReq) GetDeal() OptPaymentsPostReqDeal { + return s.Deal +} + +// GetMerchantCustomerID returns the value of MerchantCustomerID. +func (s *PaymentsPostReq) GetMerchantCustomerID() OptString { + return s.MerchantCustomerID +} + +// GetPaymentOrder returns the value of PaymentOrder. +func (s *PaymentsPostReq) GetPaymentOrder() OptPaymentsPostReqPaymentOrder { + return s.PaymentOrder +} + +// GetReceiver returns the value of Receiver. +func (s *PaymentsPostReq) GetReceiver() OptPaymentsPostReqReceiver { + return s.Receiver +} + +// GetStatements returns the value of Statements. +func (s *PaymentsPostReq) GetStatements() []PaymentsPostReqStatementsItem { + return s.Statements +} + +// GetTest returns the value of Test. +func (s *PaymentsPostReq) GetTest() OptTest { + return s.Test +} + +// SetAmount sets the value of Amount. +func (s *PaymentsPostReq) SetAmount(val PaymentsPostReqAmount) { + s.Amount = val +} + +// SetDescription sets the value of Description. +func (s *PaymentsPostReq) SetDescription(val OptString) { + s.Description = val +} + +// SetReceipt sets the value of Receipt. +func (s *PaymentsPostReq) SetReceipt(val OptReceiptData) { + s.Receipt = val +} + +// SetRecipient sets the value of Recipient. +func (s *PaymentsPostReq) SetRecipient(val OptRecipient) { + s.Recipient = val +} + +// SetPaymentToken sets the value of PaymentToken. +func (s *PaymentsPostReq) SetPaymentToken(val OptPaymentToken) { + s.PaymentToken = val +} + +// SetPaymentMethodID sets the value of PaymentMethodID. +func (s *PaymentsPostReq) SetPaymentMethodID(val OptPaymentMethodId) { + s.PaymentMethodID = val +} + +// SetPaymentMethodData sets the value of PaymentMethodData. +func (s *PaymentsPostReq) SetPaymentMethodData(val OptPaymentsPostReqPaymentMethodData) { + s.PaymentMethodData = val +} + +// SetConfirmation sets the value of Confirmation. +func (s *PaymentsPostReq) SetConfirmation(val OptPaymentsPostReqConfirmation) { + s.Confirmation = val +} + +// SetSavePaymentMethod sets the value of SavePaymentMethod. +func (s *PaymentsPostReq) SetSavePaymentMethod(val OptSavePaymentMethodAttribute) { + s.SavePaymentMethod = val +} + +// SetCapture sets the value of Capture. +func (s *PaymentsPostReq) SetCapture(val OptCapture) { + s.Capture = val +} + +// SetClientIP sets the value of ClientIP. +func (s *PaymentsPostReq) SetClientIP(val OptClientIp) { + s.ClientIP = val +} + +// SetMetadata sets the value of Metadata. +func (s *PaymentsPostReq) SetMetadata(val OptMetadata) { + s.Metadata = val +} + +// SetAirline sets the value of Airline. +func (s *PaymentsPostReq) SetAirline(val OptPaymentsPostReqAirline) { + s.Airline = val +} + +// SetTransfers sets the value of Transfers. +func (s *PaymentsPostReq) SetTransfers(val []TransferDataPayment) { + s.Transfers = val +} + +// SetDeal sets the value of Deal. +func (s *PaymentsPostReq) SetDeal(val OptPaymentsPostReqDeal) { + s.Deal = val +} + +// SetMerchantCustomerID sets the value of MerchantCustomerID. +func (s *PaymentsPostReq) SetMerchantCustomerID(val OptString) { + s.MerchantCustomerID = val +} + +// SetPaymentOrder sets the value of PaymentOrder. +func (s *PaymentsPostReq) SetPaymentOrder(val OptPaymentsPostReqPaymentOrder) { + s.PaymentOrder = val +} + +// SetReceiver sets the value of Receiver. +func (s *PaymentsPostReq) SetReceiver(val OptPaymentsPostReqReceiver) { + s.Receiver = val +} + +// SetStatements sets the value of Statements. +func (s *PaymentsPostReq) SetStatements(val []PaymentsPostReqStatementsItem) { + s.Statements = val +} + +// SetTest sets the value of Test. +func (s *PaymentsPostReq) SetTest(val OptTest) { + s.Test = val +} + +// Объект с данными для продажи авиабилетов: https://yookassa. +// ru/developers/payment-acceptance/scenario-extensions/airline-tickets. Используется +// только для платежей банковской картой. +type PaymentsPostReqAirline struct { + // Unique ticket number. If you already know the ticket number during payment creation, ticket_number + // is a required parameter. If you don't, specify booking_reference instead of ticket_number. + TicketNumber OptString `json:"ticket_number"` + // Booking reference number, required if ticket_number is not specified. + BookingReference OptString `json:"booking_reference"` + // List of passengers. + Passengers []AirlinePassenger `json:"passengers"` + // List of flight legs. + Legs []AirlineLeg `json:"legs"` +} + +// GetTicketNumber returns the value of TicketNumber. +func (s *PaymentsPostReqAirline) GetTicketNumber() OptString { + return s.TicketNumber +} + +// GetBookingReference returns the value of BookingReference. +func (s *PaymentsPostReqAirline) GetBookingReference() OptString { + return s.BookingReference +} + +// GetPassengers returns the value of Passengers. +func (s *PaymentsPostReqAirline) GetPassengers() []AirlinePassenger { + return s.Passengers +} + +// GetLegs returns the value of Legs. +func (s *PaymentsPostReqAirline) GetLegs() []AirlineLeg { + return s.Legs +} + +// SetTicketNumber sets the value of TicketNumber. +func (s *PaymentsPostReqAirline) SetTicketNumber(val OptString) { + s.TicketNumber = val +} + +// SetBookingReference sets the value of BookingReference. +func (s *PaymentsPostReqAirline) SetBookingReference(val OptString) { + s.BookingReference = val +} + +// SetPassengers sets the value of Passengers. +func (s *PaymentsPostReqAirline) SetPassengers(val []AirlinePassenger) { + s.Passengers = val +} + +// SetLegs sets the value of Legs. +func (s *PaymentsPostReqAirline) SetLegs(val []AirlineLeg) { + s.Legs = val +} + +// Сумма в выбранной валюте. +type PaymentsPostReqAmount struct { + // Сумма в выбранной валюте. Всегда дробное значение. + // Разделитель дробной части — точка, разделитель тысяч + // отсутствует. Количество знаков после точки зависит + // от выбранной валюты. Пример: 1000.00. + Value string `json:"value"` + Currency CurrencyCode `json:"currency"` +} + +// GetValue returns the value of Value. +func (s *PaymentsPostReqAmount) GetValue() string { + return s.Value +} + +// GetCurrency returns the value of Currency. +func (s *PaymentsPostReqAmount) GetCurrency() CurrencyCode { + return s.Currency +} + +// SetValue sets the value of Value. +func (s *PaymentsPostReqAmount) SetValue(val string) { + s.Value = val +} + +// SetCurrency sets the value of Currency. +func (s *PaymentsPostReqAmount) SetCurrency(val CurrencyCode) { + s.Currency = val +} + +// PaymentsPostReqConfirmation represents sum type. +type PaymentsPostReqConfirmation struct { + Type PaymentsPostReqConfirmationType // switch on this field + ConfirmationDataRedirect ConfirmationDataRedirect + ConfirmationDataExternal ConfirmationDataExternal + ConfirmationDataQr ConfirmationDataQr + ConfirmationDataEmbedded ConfirmationDataEmbedded + ConfirmationDataMobileApplication ConfirmationDataMobileApplication +} + +// PaymentsPostReqConfirmationType is oneOf type of PaymentsPostReqConfirmation. +type PaymentsPostReqConfirmationType string + +// Possible values for PaymentsPostReqConfirmationType. +const ( + ConfirmationDataRedirectPaymentsPostReqConfirmation PaymentsPostReqConfirmationType = "ConfirmationDataRedirect" + ConfirmationDataExternalPaymentsPostReqConfirmation PaymentsPostReqConfirmationType = "ConfirmationDataExternal" + ConfirmationDataQrPaymentsPostReqConfirmation PaymentsPostReqConfirmationType = "ConfirmationDataQr" + ConfirmationDataEmbeddedPaymentsPostReqConfirmation PaymentsPostReqConfirmationType = "ConfirmationDataEmbedded" + ConfirmationDataMobileApplicationPaymentsPostReqConfirmation PaymentsPostReqConfirmationType = "ConfirmationDataMobileApplication" +) + +// IsConfirmationDataRedirect reports whether PaymentsPostReqConfirmation is ConfirmationDataRedirect. +func (s PaymentsPostReqConfirmation) IsConfirmationDataRedirect() bool { + return s.Type == ConfirmationDataRedirectPaymentsPostReqConfirmation +} + +// IsConfirmationDataExternal reports whether PaymentsPostReqConfirmation is ConfirmationDataExternal. +func (s PaymentsPostReqConfirmation) IsConfirmationDataExternal() bool { + return s.Type == ConfirmationDataExternalPaymentsPostReqConfirmation +} + +// IsConfirmationDataQr reports whether PaymentsPostReqConfirmation is ConfirmationDataQr. +func (s PaymentsPostReqConfirmation) IsConfirmationDataQr() bool { + return s.Type == ConfirmationDataQrPaymentsPostReqConfirmation +} + +// IsConfirmationDataEmbedded reports whether PaymentsPostReqConfirmation is ConfirmationDataEmbedded. +func (s PaymentsPostReqConfirmation) IsConfirmationDataEmbedded() bool { + return s.Type == ConfirmationDataEmbeddedPaymentsPostReqConfirmation +} + +// IsConfirmationDataMobileApplication reports whether PaymentsPostReqConfirmation is ConfirmationDataMobileApplication. +func (s PaymentsPostReqConfirmation) IsConfirmationDataMobileApplication() bool { + return s.Type == ConfirmationDataMobileApplicationPaymentsPostReqConfirmation +} + +// SetConfirmationDataRedirect sets PaymentsPostReqConfirmation to ConfirmationDataRedirect. +func (s *PaymentsPostReqConfirmation) SetConfirmationDataRedirect(v ConfirmationDataRedirect) { + s.Type = ConfirmationDataRedirectPaymentsPostReqConfirmation + s.ConfirmationDataRedirect = v +} + +// GetConfirmationDataRedirect returns ConfirmationDataRedirect and true boolean if PaymentsPostReqConfirmation is ConfirmationDataRedirect. +func (s PaymentsPostReqConfirmation) GetConfirmationDataRedirect() (v ConfirmationDataRedirect, ok bool) { + if !s.IsConfirmationDataRedirect() { + return v, false + } + return s.ConfirmationDataRedirect, true +} + +// NewConfirmationDataRedirectPaymentsPostReqConfirmation returns new PaymentsPostReqConfirmation from ConfirmationDataRedirect. +func NewConfirmationDataRedirectPaymentsPostReqConfirmation(v ConfirmationDataRedirect) PaymentsPostReqConfirmation { + var s PaymentsPostReqConfirmation + s.SetConfirmationDataRedirect(v) + return s +} + +// SetConfirmationDataExternal sets PaymentsPostReqConfirmation to ConfirmationDataExternal. +func (s *PaymentsPostReqConfirmation) SetConfirmationDataExternal(v ConfirmationDataExternal) { + s.Type = ConfirmationDataExternalPaymentsPostReqConfirmation + s.ConfirmationDataExternal = v +} + +// GetConfirmationDataExternal returns ConfirmationDataExternal and true boolean if PaymentsPostReqConfirmation is ConfirmationDataExternal. +func (s PaymentsPostReqConfirmation) GetConfirmationDataExternal() (v ConfirmationDataExternal, ok bool) { + if !s.IsConfirmationDataExternal() { + return v, false + } + return s.ConfirmationDataExternal, true +} + +// NewConfirmationDataExternalPaymentsPostReqConfirmation returns new PaymentsPostReqConfirmation from ConfirmationDataExternal. +func NewConfirmationDataExternalPaymentsPostReqConfirmation(v ConfirmationDataExternal) PaymentsPostReqConfirmation { + var s PaymentsPostReqConfirmation + s.SetConfirmationDataExternal(v) + return s +} + +// SetConfirmationDataQr sets PaymentsPostReqConfirmation to ConfirmationDataQr. +func (s *PaymentsPostReqConfirmation) SetConfirmationDataQr(v ConfirmationDataQr) { + s.Type = ConfirmationDataQrPaymentsPostReqConfirmation + s.ConfirmationDataQr = v +} + +// GetConfirmationDataQr returns ConfirmationDataQr and true boolean if PaymentsPostReqConfirmation is ConfirmationDataQr. +func (s PaymentsPostReqConfirmation) GetConfirmationDataQr() (v ConfirmationDataQr, ok bool) { + if !s.IsConfirmationDataQr() { + return v, false + } + return s.ConfirmationDataQr, true +} + +// NewConfirmationDataQrPaymentsPostReqConfirmation returns new PaymentsPostReqConfirmation from ConfirmationDataQr. +func NewConfirmationDataQrPaymentsPostReqConfirmation(v ConfirmationDataQr) PaymentsPostReqConfirmation { + var s PaymentsPostReqConfirmation + s.SetConfirmationDataQr(v) + return s +} + +// SetConfirmationDataEmbedded sets PaymentsPostReqConfirmation to ConfirmationDataEmbedded. +func (s *PaymentsPostReqConfirmation) SetConfirmationDataEmbedded(v ConfirmationDataEmbedded) { + s.Type = ConfirmationDataEmbeddedPaymentsPostReqConfirmation + s.ConfirmationDataEmbedded = v +} + +// GetConfirmationDataEmbedded returns ConfirmationDataEmbedded and true boolean if PaymentsPostReqConfirmation is ConfirmationDataEmbedded. +func (s PaymentsPostReqConfirmation) GetConfirmationDataEmbedded() (v ConfirmationDataEmbedded, ok bool) { + if !s.IsConfirmationDataEmbedded() { + return v, false + } + return s.ConfirmationDataEmbedded, true +} + +// NewConfirmationDataEmbeddedPaymentsPostReqConfirmation returns new PaymentsPostReqConfirmation from ConfirmationDataEmbedded. +func NewConfirmationDataEmbeddedPaymentsPostReqConfirmation(v ConfirmationDataEmbedded) PaymentsPostReqConfirmation { + var s PaymentsPostReqConfirmation + s.SetConfirmationDataEmbedded(v) + return s +} + +// SetConfirmationDataMobileApplication sets PaymentsPostReqConfirmation to ConfirmationDataMobileApplication. +func (s *PaymentsPostReqConfirmation) SetConfirmationDataMobileApplication(v ConfirmationDataMobileApplication) { + s.Type = ConfirmationDataMobileApplicationPaymentsPostReqConfirmation + s.ConfirmationDataMobileApplication = v +} + +// GetConfirmationDataMobileApplication returns ConfirmationDataMobileApplication and true boolean if PaymentsPostReqConfirmation is ConfirmationDataMobileApplication. +func (s PaymentsPostReqConfirmation) GetConfirmationDataMobileApplication() (v ConfirmationDataMobileApplication, ok bool) { + if !s.IsConfirmationDataMobileApplication() { + return v, false + } + return s.ConfirmationDataMobileApplication, true +} + +// NewConfirmationDataMobileApplicationPaymentsPostReqConfirmation returns new PaymentsPostReqConfirmation from ConfirmationDataMobileApplication. +func NewConfirmationDataMobileApplicationPaymentsPostReqConfirmation(v ConfirmationDataMobileApplication) PaymentsPostReqConfirmation { + var s PaymentsPostReqConfirmation + s.SetConfirmationDataMobileApplication(v) + return s +} + +type PaymentsPostReqDeal struct { + ID DealId `json:"id"` + Settlements SettlementPaymentArray `json:"settlements"` +} + +// GetID returns the value of ID. +func (s *PaymentsPostReqDeal) GetID() DealId { + return s.ID +} + +// GetSettlements returns the value of Settlements. +func (s *PaymentsPostReqDeal) GetSettlements() SettlementPaymentArray { + return s.Settlements +} + +// SetID sets the value of ID. +func (s *PaymentsPostReqDeal) SetID(val DealId) { + s.ID = val +} + +// SetSettlements sets the value of Settlements. +func (s *PaymentsPostReqDeal) SetSettlements(val SettlementPaymentArray) { + s.Settlements = val +} + +// PaymentsPostReqPaymentMethodData represents sum type. +type PaymentsPostReqPaymentMethodData struct { + Type PaymentsPostReqPaymentMethodDataType // switch on this field + PaymentMethodDataBankCard PaymentMethodDataBankCard + PaymentMethodDataCash PaymentMethodDataCash + PaymentMethodDataSberbank PaymentMethodDataSberbank + PaymentMethodDataTinkoffBank PaymentMethodDataTinkoffBank + PaymentMethodDataYooMoney PaymentMethodDataYooMoney + PaymentMethodDataMobileBalance PaymentMethodDataMobileBalance + PaymentMethodDataB2bSberbank PaymentMethodDataB2bSberbank + PaymentMethodDataSbp PaymentMethodDataSbp + PaymentMethodDataSberLoan PaymentMethodDataSberLoan + PaymentMethodDataElectronicCertificate PaymentMethodDataElectronicCertificate + PaymentMethodDataSberBnpl PaymentMethodDataSberBnpl +} + +// PaymentsPostReqPaymentMethodDataType is oneOf type of PaymentsPostReqPaymentMethodData. +type PaymentsPostReqPaymentMethodDataType string + +// Possible values for PaymentsPostReqPaymentMethodDataType. +const ( + PaymentMethodDataBankCardPaymentsPostReqPaymentMethodData PaymentsPostReqPaymentMethodDataType = "PaymentMethodDataBankCard" + PaymentMethodDataCashPaymentsPostReqPaymentMethodData PaymentsPostReqPaymentMethodDataType = "PaymentMethodDataCash" + PaymentMethodDataSberbankPaymentsPostReqPaymentMethodData PaymentsPostReqPaymentMethodDataType = "PaymentMethodDataSberbank" + PaymentMethodDataTinkoffBankPaymentsPostReqPaymentMethodData PaymentsPostReqPaymentMethodDataType = "PaymentMethodDataTinkoffBank" + PaymentMethodDataYooMoneyPaymentsPostReqPaymentMethodData PaymentsPostReqPaymentMethodDataType = "PaymentMethodDataYooMoney" + PaymentMethodDataMobileBalancePaymentsPostReqPaymentMethodData PaymentsPostReqPaymentMethodDataType = "PaymentMethodDataMobileBalance" + PaymentMethodDataB2bSberbankPaymentsPostReqPaymentMethodData PaymentsPostReqPaymentMethodDataType = "PaymentMethodDataB2bSberbank" + PaymentMethodDataSbpPaymentsPostReqPaymentMethodData PaymentsPostReqPaymentMethodDataType = "PaymentMethodDataSbp" + PaymentMethodDataSberLoanPaymentsPostReqPaymentMethodData PaymentsPostReqPaymentMethodDataType = "PaymentMethodDataSberLoan" + PaymentMethodDataElectronicCertificatePaymentsPostReqPaymentMethodData PaymentsPostReqPaymentMethodDataType = "PaymentMethodDataElectronicCertificate" + PaymentMethodDataSberBnplPaymentsPostReqPaymentMethodData PaymentsPostReqPaymentMethodDataType = "PaymentMethodDataSberBnpl" +) + +// IsPaymentMethodDataBankCard reports whether PaymentsPostReqPaymentMethodData is PaymentMethodDataBankCard. +func (s PaymentsPostReqPaymentMethodData) IsPaymentMethodDataBankCard() bool { + return s.Type == PaymentMethodDataBankCardPaymentsPostReqPaymentMethodData +} + +// IsPaymentMethodDataCash reports whether PaymentsPostReqPaymentMethodData is PaymentMethodDataCash. +func (s PaymentsPostReqPaymentMethodData) IsPaymentMethodDataCash() bool { + return s.Type == PaymentMethodDataCashPaymentsPostReqPaymentMethodData +} + +// IsPaymentMethodDataSberbank reports whether PaymentsPostReqPaymentMethodData is PaymentMethodDataSberbank. +func (s PaymentsPostReqPaymentMethodData) IsPaymentMethodDataSberbank() bool { + return s.Type == PaymentMethodDataSberbankPaymentsPostReqPaymentMethodData +} + +// IsPaymentMethodDataTinkoffBank reports whether PaymentsPostReqPaymentMethodData is PaymentMethodDataTinkoffBank. +func (s PaymentsPostReqPaymentMethodData) IsPaymentMethodDataTinkoffBank() bool { + return s.Type == PaymentMethodDataTinkoffBankPaymentsPostReqPaymentMethodData +} + +// IsPaymentMethodDataYooMoney reports whether PaymentsPostReqPaymentMethodData is PaymentMethodDataYooMoney. +func (s PaymentsPostReqPaymentMethodData) IsPaymentMethodDataYooMoney() bool { + return s.Type == PaymentMethodDataYooMoneyPaymentsPostReqPaymentMethodData +} + +// IsPaymentMethodDataMobileBalance reports whether PaymentsPostReqPaymentMethodData is PaymentMethodDataMobileBalance. +func (s PaymentsPostReqPaymentMethodData) IsPaymentMethodDataMobileBalance() bool { + return s.Type == PaymentMethodDataMobileBalancePaymentsPostReqPaymentMethodData +} + +// IsPaymentMethodDataB2bSberbank reports whether PaymentsPostReqPaymentMethodData is PaymentMethodDataB2bSberbank. +func (s PaymentsPostReqPaymentMethodData) IsPaymentMethodDataB2bSberbank() bool { + return s.Type == PaymentMethodDataB2bSberbankPaymentsPostReqPaymentMethodData +} + +// IsPaymentMethodDataSbp reports whether PaymentsPostReqPaymentMethodData is PaymentMethodDataSbp. +func (s PaymentsPostReqPaymentMethodData) IsPaymentMethodDataSbp() bool { + return s.Type == PaymentMethodDataSbpPaymentsPostReqPaymentMethodData +} + +// IsPaymentMethodDataSberLoan reports whether PaymentsPostReqPaymentMethodData is PaymentMethodDataSberLoan. +func (s PaymentsPostReqPaymentMethodData) IsPaymentMethodDataSberLoan() bool { + return s.Type == PaymentMethodDataSberLoanPaymentsPostReqPaymentMethodData +} + +// IsPaymentMethodDataElectronicCertificate reports whether PaymentsPostReqPaymentMethodData is PaymentMethodDataElectronicCertificate. +func (s PaymentsPostReqPaymentMethodData) IsPaymentMethodDataElectronicCertificate() bool { + return s.Type == PaymentMethodDataElectronicCertificatePaymentsPostReqPaymentMethodData +} + +// IsPaymentMethodDataSberBnpl reports whether PaymentsPostReqPaymentMethodData is PaymentMethodDataSberBnpl. +func (s PaymentsPostReqPaymentMethodData) IsPaymentMethodDataSberBnpl() bool { + return s.Type == PaymentMethodDataSberBnplPaymentsPostReqPaymentMethodData +} + +// SetPaymentMethodDataBankCard sets PaymentsPostReqPaymentMethodData to PaymentMethodDataBankCard. +func (s *PaymentsPostReqPaymentMethodData) SetPaymentMethodDataBankCard(v PaymentMethodDataBankCard) { + s.Type = PaymentMethodDataBankCardPaymentsPostReqPaymentMethodData + s.PaymentMethodDataBankCard = v +} + +// GetPaymentMethodDataBankCard returns PaymentMethodDataBankCard and true boolean if PaymentsPostReqPaymentMethodData is PaymentMethodDataBankCard. +func (s PaymentsPostReqPaymentMethodData) GetPaymentMethodDataBankCard() (v PaymentMethodDataBankCard, ok bool) { + if !s.IsPaymentMethodDataBankCard() { + return v, false + } + return s.PaymentMethodDataBankCard, true +} + +// NewPaymentMethodDataBankCardPaymentsPostReqPaymentMethodData returns new PaymentsPostReqPaymentMethodData from PaymentMethodDataBankCard. +func NewPaymentMethodDataBankCardPaymentsPostReqPaymentMethodData(v PaymentMethodDataBankCard) PaymentsPostReqPaymentMethodData { + var s PaymentsPostReqPaymentMethodData + s.SetPaymentMethodDataBankCard(v) + return s +} + +// SetPaymentMethodDataCash sets PaymentsPostReqPaymentMethodData to PaymentMethodDataCash. +func (s *PaymentsPostReqPaymentMethodData) SetPaymentMethodDataCash(v PaymentMethodDataCash) { + s.Type = PaymentMethodDataCashPaymentsPostReqPaymentMethodData + s.PaymentMethodDataCash = v +} + +// GetPaymentMethodDataCash returns PaymentMethodDataCash and true boolean if PaymentsPostReqPaymentMethodData is PaymentMethodDataCash. +func (s PaymentsPostReqPaymentMethodData) GetPaymentMethodDataCash() (v PaymentMethodDataCash, ok bool) { + if !s.IsPaymentMethodDataCash() { + return v, false + } + return s.PaymentMethodDataCash, true +} + +// NewPaymentMethodDataCashPaymentsPostReqPaymentMethodData returns new PaymentsPostReqPaymentMethodData from PaymentMethodDataCash. +func NewPaymentMethodDataCashPaymentsPostReqPaymentMethodData(v PaymentMethodDataCash) PaymentsPostReqPaymentMethodData { + var s PaymentsPostReqPaymentMethodData + s.SetPaymentMethodDataCash(v) + return s +} + +// SetPaymentMethodDataSberbank sets PaymentsPostReqPaymentMethodData to PaymentMethodDataSberbank. +func (s *PaymentsPostReqPaymentMethodData) SetPaymentMethodDataSberbank(v PaymentMethodDataSberbank) { + s.Type = PaymentMethodDataSberbankPaymentsPostReqPaymentMethodData + s.PaymentMethodDataSberbank = v +} + +// GetPaymentMethodDataSberbank returns PaymentMethodDataSberbank and true boolean if PaymentsPostReqPaymentMethodData is PaymentMethodDataSberbank. +func (s PaymentsPostReqPaymentMethodData) GetPaymentMethodDataSberbank() (v PaymentMethodDataSberbank, ok bool) { + if !s.IsPaymentMethodDataSberbank() { + return v, false + } + return s.PaymentMethodDataSberbank, true +} + +// NewPaymentMethodDataSberbankPaymentsPostReqPaymentMethodData returns new PaymentsPostReqPaymentMethodData from PaymentMethodDataSberbank. +func NewPaymentMethodDataSberbankPaymentsPostReqPaymentMethodData(v PaymentMethodDataSberbank) PaymentsPostReqPaymentMethodData { + var s PaymentsPostReqPaymentMethodData + s.SetPaymentMethodDataSberbank(v) + return s +} + +// SetPaymentMethodDataTinkoffBank sets PaymentsPostReqPaymentMethodData to PaymentMethodDataTinkoffBank. +func (s *PaymentsPostReqPaymentMethodData) SetPaymentMethodDataTinkoffBank(v PaymentMethodDataTinkoffBank) { + s.Type = PaymentMethodDataTinkoffBankPaymentsPostReqPaymentMethodData + s.PaymentMethodDataTinkoffBank = v +} + +// GetPaymentMethodDataTinkoffBank returns PaymentMethodDataTinkoffBank and true boolean if PaymentsPostReqPaymentMethodData is PaymentMethodDataTinkoffBank. +func (s PaymentsPostReqPaymentMethodData) GetPaymentMethodDataTinkoffBank() (v PaymentMethodDataTinkoffBank, ok bool) { + if !s.IsPaymentMethodDataTinkoffBank() { + return v, false + } + return s.PaymentMethodDataTinkoffBank, true +} + +// NewPaymentMethodDataTinkoffBankPaymentsPostReqPaymentMethodData returns new PaymentsPostReqPaymentMethodData from PaymentMethodDataTinkoffBank. +func NewPaymentMethodDataTinkoffBankPaymentsPostReqPaymentMethodData(v PaymentMethodDataTinkoffBank) PaymentsPostReqPaymentMethodData { + var s PaymentsPostReqPaymentMethodData + s.SetPaymentMethodDataTinkoffBank(v) + return s +} + +// SetPaymentMethodDataYooMoney sets PaymentsPostReqPaymentMethodData to PaymentMethodDataYooMoney. +func (s *PaymentsPostReqPaymentMethodData) SetPaymentMethodDataYooMoney(v PaymentMethodDataYooMoney) { + s.Type = PaymentMethodDataYooMoneyPaymentsPostReqPaymentMethodData + s.PaymentMethodDataYooMoney = v +} + +// GetPaymentMethodDataYooMoney returns PaymentMethodDataYooMoney and true boolean if PaymentsPostReqPaymentMethodData is PaymentMethodDataYooMoney. +func (s PaymentsPostReqPaymentMethodData) GetPaymentMethodDataYooMoney() (v PaymentMethodDataYooMoney, ok bool) { + if !s.IsPaymentMethodDataYooMoney() { + return v, false + } + return s.PaymentMethodDataYooMoney, true +} + +// NewPaymentMethodDataYooMoneyPaymentsPostReqPaymentMethodData returns new PaymentsPostReqPaymentMethodData from PaymentMethodDataYooMoney. +func NewPaymentMethodDataYooMoneyPaymentsPostReqPaymentMethodData(v PaymentMethodDataYooMoney) PaymentsPostReqPaymentMethodData { + var s PaymentsPostReqPaymentMethodData + s.SetPaymentMethodDataYooMoney(v) + return s +} + +// SetPaymentMethodDataMobileBalance sets PaymentsPostReqPaymentMethodData to PaymentMethodDataMobileBalance. +func (s *PaymentsPostReqPaymentMethodData) SetPaymentMethodDataMobileBalance(v PaymentMethodDataMobileBalance) { + s.Type = PaymentMethodDataMobileBalancePaymentsPostReqPaymentMethodData + s.PaymentMethodDataMobileBalance = v +} + +// GetPaymentMethodDataMobileBalance returns PaymentMethodDataMobileBalance and true boolean if PaymentsPostReqPaymentMethodData is PaymentMethodDataMobileBalance. +func (s PaymentsPostReqPaymentMethodData) GetPaymentMethodDataMobileBalance() (v PaymentMethodDataMobileBalance, ok bool) { + if !s.IsPaymentMethodDataMobileBalance() { + return v, false + } + return s.PaymentMethodDataMobileBalance, true +} + +// NewPaymentMethodDataMobileBalancePaymentsPostReqPaymentMethodData returns new PaymentsPostReqPaymentMethodData from PaymentMethodDataMobileBalance. +func NewPaymentMethodDataMobileBalancePaymentsPostReqPaymentMethodData(v PaymentMethodDataMobileBalance) PaymentsPostReqPaymentMethodData { + var s PaymentsPostReqPaymentMethodData + s.SetPaymentMethodDataMobileBalance(v) + return s +} + +// SetPaymentMethodDataB2bSberbank sets PaymentsPostReqPaymentMethodData to PaymentMethodDataB2bSberbank. +func (s *PaymentsPostReqPaymentMethodData) SetPaymentMethodDataB2bSberbank(v PaymentMethodDataB2bSberbank) { + s.Type = PaymentMethodDataB2bSberbankPaymentsPostReqPaymentMethodData + s.PaymentMethodDataB2bSberbank = v +} + +// GetPaymentMethodDataB2bSberbank returns PaymentMethodDataB2bSberbank and true boolean if PaymentsPostReqPaymentMethodData is PaymentMethodDataB2bSberbank. +func (s PaymentsPostReqPaymentMethodData) GetPaymentMethodDataB2bSberbank() (v PaymentMethodDataB2bSberbank, ok bool) { + if !s.IsPaymentMethodDataB2bSberbank() { + return v, false + } + return s.PaymentMethodDataB2bSberbank, true +} + +// NewPaymentMethodDataB2bSberbankPaymentsPostReqPaymentMethodData returns new PaymentsPostReqPaymentMethodData from PaymentMethodDataB2bSberbank. +func NewPaymentMethodDataB2bSberbankPaymentsPostReqPaymentMethodData(v PaymentMethodDataB2bSberbank) PaymentsPostReqPaymentMethodData { + var s PaymentsPostReqPaymentMethodData + s.SetPaymentMethodDataB2bSberbank(v) + return s +} + +// SetPaymentMethodDataSbp sets PaymentsPostReqPaymentMethodData to PaymentMethodDataSbp. +func (s *PaymentsPostReqPaymentMethodData) SetPaymentMethodDataSbp(v PaymentMethodDataSbp) { + s.Type = PaymentMethodDataSbpPaymentsPostReqPaymentMethodData + s.PaymentMethodDataSbp = v +} + +// GetPaymentMethodDataSbp returns PaymentMethodDataSbp and true boolean if PaymentsPostReqPaymentMethodData is PaymentMethodDataSbp. +func (s PaymentsPostReqPaymentMethodData) GetPaymentMethodDataSbp() (v PaymentMethodDataSbp, ok bool) { + if !s.IsPaymentMethodDataSbp() { + return v, false + } + return s.PaymentMethodDataSbp, true +} + +// NewPaymentMethodDataSbpPaymentsPostReqPaymentMethodData returns new PaymentsPostReqPaymentMethodData from PaymentMethodDataSbp. +func NewPaymentMethodDataSbpPaymentsPostReqPaymentMethodData(v PaymentMethodDataSbp) PaymentsPostReqPaymentMethodData { + var s PaymentsPostReqPaymentMethodData + s.SetPaymentMethodDataSbp(v) + return s +} + +// SetPaymentMethodDataSberLoan sets PaymentsPostReqPaymentMethodData to PaymentMethodDataSberLoan. +func (s *PaymentsPostReqPaymentMethodData) SetPaymentMethodDataSberLoan(v PaymentMethodDataSberLoan) { + s.Type = PaymentMethodDataSberLoanPaymentsPostReqPaymentMethodData + s.PaymentMethodDataSberLoan = v +} + +// GetPaymentMethodDataSberLoan returns PaymentMethodDataSberLoan and true boolean if PaymentsPostReqPaymentMethodData is PaymentMethodDataSberLoan. +func (s PaymentsPostReqPaymentMethodData) GetPaymentMethodDataSberLoan() (v PaymentMethodDataSberLoan, ok bool) { + if !s.IsPaymentMethodDataSberLoan() { + return v, false + } + return s.PaymentMethodDataSberLoan, true +} + +// NewPaymentMethodDataSberLoanPaymentsPostReqPaymentMethodData returns new PaymentsPostReqPaymentMethodData from PaymentMethodDataSberLoan. +func NewPaymentMethodDataSberLoanPaymentsPostReqPaymentMethodData(v PaymentMethodDataSberLoan) PaymentsPostReqPaymentMethodData { + var s PaymentsPostReqPaymentMethodData + s.SetPaymentMethodDataSberLoan(v) + return s +} + +// SetPaymentMethodDataElectronicCertificate sets PaymentsPostReqPaymentMethodData to PaymentMethodDataElectronicCertificate. +func (s *PaymentsPostReqPaymentMethodData) SetPaymentMethodDataElectronicCertificate(v PaymentMethodDataElectronicCertificate) { + s.Type = PaymentMethodDataElectronicCertificatePaymentsPostReqPaymentMethodData + s.PaymentMethodDataElectronicCertificate = v +} + +// GetPaymentMethodDataElectronicCertificate returns PaymentMethodDataElectronicCertificate and true boolean if PaymentsPostReqPaymentMethodData is PaymentMethodDataElectronicCertificate. +func (s PaymentsPostReqPaymentMethodData) GetPaymentMethodDataElectronicCertificate() (v PaymentMethodDataElectronicCertificate, ok bool) { + if !s.IsPaymentMethodDataElectronicCertificate() { + return v, false + } + return s.PaymentMethodDataElectronicCertificate, true +} + +// NewPaymentMethodDataElectronicCertificatePaymentsPostReqPaymentMethodData returns new PaymentsPostReqPaymentMethodData from PaymentMethodDataElectronicCertificate. +func NewPaymentMethodDataElectronicCertificatePaymentsPostReqPaymentMethodData(v PaymentMethodDataElectronicCertificate) PaymentsPostReqPaymentMethodData { + var s PaymentsPostReqPaymentMethodData + s.SetPaymentMethodDataElectronicCertificate(v) + return s +} + +// SetPaymentMethodDataSberBnpl sets PaymentsPostReqPaymentMethodData to PaymentMethodDataSberBnpl. +func (s *PaymentsPostReqPaymentMethodData) SetPaymentMethodDataSberBnpl(v PaymentMethodDataSberBnpl) { + s.Type = PaymentMethodDataSberBnplPaymentsPostReqPaymentMethodData + s.PaymentMethodDataSberBnpl = v +} + +// GetPaymentMethodDataSberBnpl returns PaymentMethodDataSberBnpl and true boolean if PaymentsPostReqPaymentMethodData is PaymentMethodDataSberBnpl. +func (s PaymentsPostReqPaymentMethodData) GetPaymentMethodDataSberBnpl() (v PaymentMethodDataSberBnpl, ok bool) { + if !s.IsPaymentMethodDataSberBnpl() { + return v, false + } + return s.PaymentMethodDataSberBnpl, true +} + +// NewPaymentMethodDataSberBnplPaymentsPostReqPaymentMethodData returns new PaymentsPostReqPaymentMethodData from PaymentMethodDataSberBnpl. +func NewPaymentMethodDataSberBnplPaymentsPostReqPaymentMethodData(v PaymentMethodDataSberBnpl) PaymentsPostReqPaymentMethodData { + var s PaymentsPostReqPaymentMethodData + s.SetPaymentMethodDataSberBnpl(v) + return s +} + +// PaymentsPostReqPaymentOrder represents sum type. +type PaymentsPostReqPaymentOrder struct { + Type PaymentsPostReqPaymentOrderType // switch on this field + PaymentOrderDataUtilities PaymentOrderDataUtilities +} + +// PaymentsPostReqPaymentOrderType is oneOf type of PaymentsPostReqPaymentOrder. +type PaymentsPostReqPaymentOrderType string + +// Possible values for PaymentsPostReqPaymentOrderType. +const ( + PaymentOrderDataUtilitiesPaymentsPostReqPaymentOrder PaymentsPostReqPaymentOrderType = "PaymentOrderDataUtilities" +) + +// IsPaymentOrderDataUtilities reports whether PaymentsPostReqPaymentOrder is PaymentOrderDataUtilities. +func (s PaymentsPostReqPaymentOrder) IsPaymentOrderDataUtilities() bool { + return s.Type == PaymentOrderDataUtilitiesPaymentsPostReqPaymentOrder +} + +// SetPaymentOrderDataUtilities sets PaymentsPostReqPaymentOrder to PaymentOrderDataUtilities. +func (s *PaymentsPostReqPaymentOrder) SetPaymentOrderDataUtilities(v PaymentOrderDataUtilities) { + s.Type = PaymentOrderDataUtilitiesPaymentsPostReqPaymentOrder + s.PaymentOrderDataUtilities = v +} + +// GetPaymentOrderDataUtilities returns PaymentOrderDataUtilities and true boolean if PaymentsPostReqPaymentOrder is PaymentOrderDataUtilities. +func (s PaymentsPostReqPaymentOrder) GetPaymentOrderDataUtilities() (v PaymentOrderDataUtilities, ok bool) { + if !s.IsPaymentOrderDataUtilities() { + return v, false + } + return s.PaymentOrderDataUtilities, true +} + +// NewPaymentOrderDataUtilitiesPaymentsPostReqPaymentOrder returns new PaymentsPostReqPaymentOrder from PaymentOrderDataUtilities. +func NewPaymentOrderDataUtilitiesPaymentsPostReqPaymentOrder(v PaymentOrderDataUtilities) PaymentsPostReqPaymentOrder { + var s PaymentsPostReqPaymentOrder + s.SetPaymentOrderDataUtilities(v) + return s +} + +// PaymentsPostReqReceiver represents sum type. +type PaymentsPostReqReceiver struct { + Type PaymentsPostReqReceiverType // switch on this field + ReceiverMobileBalance ReceiverMobileBalance + ReceiverDigitalWallet ReceiverDigitalWallet + ReceiverBankAccount ReceiverBankAccount +} + +// PaymentsPostReqReceiverType is oneOf type of PaymentsPostReqReceiver. +type PaymentsPostReqReceiverType string + +// Possible values for PaymentsPostReqReceiverType. +const ( + ReceiverMobileBalancePaymentsPostReqReceiver PaymentsPostReqReceiverType = "ReceiverMobileBalance" + ReceiverDigitalWalletPaymentsPostReqReceiver PaymentsPostReqReceiverType = "ReceiverDigitalWallet" + ReceiverBankAccountPaymentsPostReqReceiver PaymentsPostReqReceiverType = "ReceiverBankAccount" +) + +// IsReceiverMobileBalance reports whether PaymentsPostReqReceiver is ReceiverMobileBalance. +func (s PaymentsPostReqReceiver) IsReceiverMobileBalance() bool { + return s.Type == ReceiverMobileBalancePaymentsPostReqReceiver +} + +// IsReceiverDigitalWallet reports whether PaymentsPostReqReceiver is ReceiverDigitalWallet. +func (s PaymentsPostReqReceiver) IsReceiverDigitalWallet() bool { + return s.Type == ReceiverDigitalWalletPaymentsPostReqReceiver +} + +// IsReceiverBankAccount reports whether PaymentsPostReqReceiver is ReceiverBankAccount. +func (s PaymentsPostReqReceiver) IsReceiverBankAccount() bool { + return s.Type == ReceiverBankAccountPaymentsPostReqReceiver +} + +// SetReceiverMobileBalance sets PaymentsPostReqReceiver to ReceiverMobileBalance. +func (s *PaymentsPostReqReceiver) SetReceiverMobileBalance(v ReceiverMobileBalance) { + s.Type = ReceiverMobileBalancePaymentsPostReqReceiver + s.ReceiverMobileBalance = v +} + +// GetReceiverMobileBalance returns ReceiverMobileBalance and true boolean if PaymentsPostReqReceiver is ReceiverMobileBalance. +func (s PaymentsPostReqReceiver) GetReceiverMobileBalance() (v ReceiverMobileBalance, ok bool) { + if !s.IsReceiverMobileBalance() { + return v, false + } + return s.ReceiverMobileBalance, true +} + +// NewReceiverMobileBalancePaymentsPostReqReceiver returns new PaymentsPostReqReceiver from ReceiverMobileBalance. +func NewReceiverMobileBalancePaymentsPostReqReceiver(v ReceiverMobileBalance) PaymentsPostReqReceiver { + var s PaymentsPostReqReceiver + s.SetReceiverMobileBalance(v) + return s +} + +// SetReceiverDigitalWallet sets PaymentsPostReqReceiver to ReceiverDigitalWallet. +func (s *PaymentsPostReqReceiver) SetReceiverDigitalWallet(v ReceiverDigitalWallet) { + s.Type = ReceiverDigitalWalletPaymentsPostReqReceiver + s.ReceiverDigitalWallet = v +} + +// GetReceiverDigitalWallet returns ReceiverDigitalWallet and true boolean if PaymentsPostReqReceiver is ReceiverDigitalWallet. +func (s PaymentsPostReqReceiver) GetReceiverDigitalWallet() (v ReceiverDigitalWallet, ok bool) { + if !s.IsReceiverDigitalWallet() { + return v, false + } + return s.ReceiverDigitalWallet, true +} + +// NewReceiverDigitalWalletPaymentsPostReqReceiver returns new PaymentsPostReqReceiver from ReceiverDigitalWallet. +func NewReceiverDigitalWalletPaymentsPostReqReceiver(v ReceiverDigitalWallet) PaymentsPostReqReceiver { + var s PaymentsPostReqReceiver + s.SetReceiverDigitalWallet(v) + return s +} + +// SetReceiverBankAccount sets PaymentsPostReqReceiver to ReceiverBankAccount. +func (s *PaymentsPostReqReceiver) SetReceiverBankAccount(v ReceiverBankAccount) { + s.Type = ReceiverBankAccountPaymentsPostReqReceiver + s.ReceiverBankAccount = v +} + +// GetReceiverBankAccount returns ReceiverBankAccount and true boolean if PaymentsPostReqReceiver is ReceiverBankAccount. +func (s PaymentsPostReqReceiver) GetReceiverBankAccount() (v ReceiverBankAccount, ok bool) { + if !s.IsReceiverBankAccount() { + return v, false + } + return s.ReceiverBankAccount, true +} + +// NewReceiverBankAccountPaymentsPostReqReceiver returns new PaymentsPostReqReceiver from ReceiverBankAccount. +func NewReceiverBankAccountPaymentsPostReqReceiver(v ReceiverBankAccount) PaymentsPostReqReceiver { + var s PaymentsPostReqReceiver + s.SetReceiverBankAccount(v) + return s +} + +// PaymentsPostReqStatementsItem represents sum type. +type PaymentsPostReqStatementsItem struct { + Type PaymentsPostReqStatementsItemType // switch on this field + PaymentOverviewStatementData PaymentOverviewStatementData +} + +// PaymentsPostReqStatementsItemType is oneOf type of PaymentsPostReqStatementsItem. +type PaymentsPostReqStatementsItemType string + +// Possible values for PaymentsPostReqStatementsItemType. +const ( + PaymentOverviewStatementDataPaymentsPostReqStatementsItem PaymentsPostReqStatementsItemType = "PaymentOverviewStatementData" +) + +// IsPaymentOverviewStatementData reports whether PaymentsPostReqStatementsItem is PaymentOverviewStatementData. +func (s PaymentsPostReqStatementsItem) IsPaymentOverviewStatementData() bool { + return s.Type == PaymentOverviewStatementDataPaymentsPostReqStatementsItem +} + +// SetPaymentOverviewStatementData sets PaymentsPostReqStatementsItem to PaymentOverviewStatementData. +func (s *PaymentsPostReqStatementsItem) SetPaymentOverviewStatementData(v PaymentOverviewStatementData) { + s.Type = PaymentOverviewStatementDataPaymentsPostReqStatementsItem + s.PaymentOverviewStatementData = v +} + +// GetPaymentOverviewStatementData returns PaymentOverviewStatementData and true boolean if PaymentsPostReqStatementsItem is PaymentOverviewStatementData. +func (s PaymentsPostReqStatementsItem) GetPaymentOverviewStatementData() (v PaymentOverviewStatementData, ok bool) { + if !s.IsPaymentOverviewStatementData() { + return v, false + } + return s.PaymentOverviewStatementData, true +} + +// NewPaymentOverviewStatementDataPaymentsPostReqStatementsItem returns new PaymentsPostReqStatementsItem from PaymentOverviewStatementData. +func NewPaymentOverviewStatementDataPaymentsPostReqStatementsItem(v PaymentOverviewStatementData) PaymentsPostReqStatementsItem { + var s PaymentsPostReqStatementsItem + s.SetPaymentOverviewStatementData(v) + return s +} + +// Payout object (Payout) contains all the relevant information about the payout. +// Ref: #/components/schemas/Payout +type Payout struct { + ID PayoutId `json:"id"` + Amount PayoutAmount `json:"amount"` + Status PayoutStatus `json:"status"` + PayoutDestination PayoutPayoutDestination `json:"payout_destination"` + Description OptString `json:"description"` + // Время создания выплаты. Указывается по UTC: https://ru.wikipedia. + // org/wiki/%D0%92%D1%81%D0%B5%D0%BC%D0%B8%D1%80%D0%BD%D0%BE%D0%B5_%D0%BA%D0%BE%D0%BE%D1%80%D0%B4%D0%B8%D0%BD%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%BE%D0%B5_%D0%B2%D1%80%D0%B5%D0%BC%D1%8F и передается в формате ISO 8601: https://en.wikipedia.org/wiki/ISO_8601. Пример: 2017-11-03T11:52:31.827Z. + CreatedAt time.Time `json:"created_at"` + // Time of a successful payout processing. Based on UTC: https://en.wikipedia. + // org/wiki/Coordinated_Universal_Time and specified in the ISO 8601: https://en.wikipedia. + // org/wiki/ISO_8601 format. Example: 2017-11-03T11:52:42.312Z Mandatory parameter for payouts with + // the succeeded status. + SucceededAt OptDateTime `json:"succeeded_at"` + Deal OptPayoutDeal `json:"deal"` + SelfEmployed OptPayoutSelfEmployed `json:"self_employed"` + Receipt OptIncomeReceipt `json:"receipt"` + CancellationDetails OptPayoutCancellationDetails `json:"cancellation_details"` + Metadata OptMetadata `json:"metadata"` + Test Test `json:"test"` +} + +// GetID returns the value of ID. +func (s *Payout) GetID() PayoutId { + return s.ID +} + +// GetAmount returns the value of Amount. +func (s *Payout) GetAmount() PayoutAmount { + return s.Amount +} + +// GetStatus returns the value of Status. +func (s *Payout) GetStatus() PayoutStatus { + return s.Status +} + +// GetPayoutDestination returns the value of PayoutDestination. +func (s *Payout) GetPayoutDestination() PayoutPayoutDestination { + return s.PayoutDestination +} + +// GetDescription returns the value of Description. +func (s *Payout) GetDescription() OptString { + return s.Description +} + +// GetCreatedAt returns the value of CreatedAt. +func (s *Payout) GetCreatedAt() time.Time { + return s.CreatedAt +} + +// GetSucceededAt returns the value of SucceededAt. +func (s *Payout) GetSucceededAt() OptDateTime { + return s.SucceededAt +} + +// GetDeal returns the value of Deal. +func (s *Payout) GetDeal() OptPayoutDeal { + return s.Deal +} + +// GetSelfEmployed returns the value of SelfEmployed. +func (s *Payout) GetSelfEmployed() OptPayoutSelfEmployed { + return s.SelfEmployed +} + +// GetReceipt returns the value of Receipt. +func (s *Payout) GetReceipt() OptIncomeReceipt { + return s.Receipt +} + +// GetCancellationDetails returns the value of CancellationDetails. +func (s *Payout) GetCancellationDetails() OptPayoutCancellationDetails { + return s.CancellationDetails +} + +// GetMetadata returns the value of Metadata. +func (s *Payout) GetMetadata() OptMetadata { + return s.Metadata +} + +// GetTest returns the value of Test. +func (s *Payout) GetTest() Test { + return s.Test +} + +// SetID sets the value of ID. +func (s *Payout) SetID(val PayoutId) { + s.ID = val +} + +// SetAmount sets the value of Amount. +func (s *Payout) SetAmount(val PayoutAmount) { + s.Amount = val +} + +// SetStatus sets the value of Status. +func (s *Payout) SetStatus(val PayoutStatus) { + s.Status = val +} + +// SetPayoutDestination sets the value of PayoutDestination. +func (s *Payout) SetPayoutDestination(val PayoutPayoutDestination) { + s.PayoutDestination = val +} + +// SetDescription sets the value of Description. +func (s *Payout) SetDescription(val OptString) { + s.Description = val +} + +// SetCreatedAt sets the value of CreatedAt. +func (s *Payout) SetCreatedAt(val time.Time) { + s.CreatedAt = val +} + +// SetSucceededAt sets the value of SucceededAt. +func (s *Payout) SetSucceededAt(val OptDateTime) { + s.SucceededAt = val +} + +// SetDeal sets the value of Deal. +func (s *Payout) SetDeal(val OptPayoutDeal) { + s.Deal = val +} + +// SetSelfEmployed sets the value of SelfEmployed. +func (s *Payout) SetSelfEmployed(val OptPayoutSelfEmployed) { + s.SelfEmployed = val +} + +// SetReceipt sets the value of Receipt. +func (s *Payout) SetReceipt(val OptIncomeReceipt) { + s.Receipt = val +} + +// SetCancellationDetails sets the value of CancellationDetails. +func (s *Payout) SetCancellationDetails(val OptPayoutCancellationDetails) { + s.CancellationDetails = val +} + +// SetMetadata sets the value of Metadata. +func (s *Payout) SetMetadata(val OptMetadata) { + s.Metadata = val +} + +// SetTest sets the value of Test. +func (s *Payout) SetTest(val Test) { + s.Test = val +} + +func (*Payout) payoutsPayoutIDGetRes() {} +func (*Payout) payoutsPostRes() {} + +// Сумма в выбранной валюте. +type PayoutAmount struct { + // Сумма в выбранной валюте. Всегда дробное значение. + // Разделитель дробной части — точка, разделитель тысяч + // отсутствует. Количество знаков после точки зависит + // от выбранной валюты. Пример: 1000.00. + Value string `json:"value"` + Currency CurrencyCode `json:"currency"` +} + +// GetValue returns the value of Value. +func (s *PayoutAmount) GetValue() string { + return s.Value +} + +// GetCurrency returns the value of Currency. +func (s *PayoutAmount) GetCurrency() CurrencyCode { + return s.Currency +} + +// SetValue sets the value of Value. +func (s *PayoutAmount) SetValue(val string) { + s.Value = val +} + +// SetCurrency sets the value of Currency. +func (s *PayoutAmount) SetCurrency(val CurrencyCode) { + s.Currency = val +} + +// Комментарий к статусу canceled: кто отменил выплату и по +// какой причине. +// Ref: #/components/schemas/PayoutCancellationDetails +type PayoutCancellationDetails struct { + // Участник процесса выплаты, который принял решение об + // отмене транзакции. Перечень инициаторов отмены + // выплаты: для обычных выплат: https://yookassa. + // ru/developers/payouts/after-the-payout/declined-payouts#cancellation-details-party, для + // выплат в рамках Безопасной сделки: https://yookassa. + // ru/developers/solutions-for-platforms/safe-deal/integration/payouts#declined-payouts-cancellation-details-party. + Party PayoutCancellationDetailsParty `json:"party"` + // Причина отмены выплаты. Перечень и описание + // возможных значений: для обычных выплат: https://yookassa. + // ru/developers/payouts/after-the-payout/declined-payouts#cancellation-details-reason, для + // выплат в рамках Безопасной сделки: https://yookassa. + // ru/developers/solutions-for-platforms/safe-deal/integration/payouts#declined-payouts-cancellation-details-reason. + Reason PayoutCancellationDetailsReason `json:"reason"` +} + +// GetParty returns the value of Party. +func (s *PayoutCancellationDetails) GetParty() PayoutCancellationDetailsParty { + return s.Party +} + +// GetReason returns the value of Reason. +func (s *PayoutCancellationDetails) GetReason() PayoutCancellationDetailsReason { + return s.Reason +} + +// SetParty sets the value of Party. +func (s *PayoutCancellationDetails) SetParty(val PayoutCancellationDetailsParty) { + s.Party = val +} + +// SetReason sets the value of Reason. +func (s *PayoutCancellationDetails) SetReason(val PayoutCancellationDetailsReason) { + s.Reason = val +} + +// Участник процесса выплаты, который принял решение об +// отмене транзакции. Перечень инициаторов отмены +// выплаты: для обычных выплат: https://yookassa. +// ru/developers/payouts/after-the-payout/declined-payouts#cancellation-details-party, для +// выплат в рамках Безопасной сделки: https://yookassa. +// ru/developers/solutions-for-platforms/safe-deal/integration/payouts#declined-payouts-cancellation-details-party. +type PayoutCancellationDetailsParty string + +const ( + PayoutCancellationDetailsPartyYooMoney PayoutCancellationDetailsParty = "yoo_money" + PayoutCancellationDetailsPartyPayoutNetwork PayoutCancellationDetailsParty = "payout_network" +) + +// AllValues returns all PayoutCancellationDetailsParty values. +func (PayoutCancellationDetailsParty) AllValues() []PayoutCancellationDetailsParty { + return []PayoutCancellationDetailsParty{ + PayoutCancellationDetailsPartyYooMoney, + PayoutCancellationDetailsPartyPayoutNetwork, + } +} + +// MarshalText implements encoding.TextMarshaler. +func (s PayoutCancellationDetailsParty) MarshalText() ([]byte, error) { + switch s { + case PayoutCancellationDetailsPartyYooMoney: + return []byte(s), nil + case PayoutCancellationDetailsPartyPayoutNetwork: + return []byte(s), nil + default: + return nil, errors.Errorf("invalid value: %q", s) + } +} + +// UnmarshalText implements encoding.TextUnmarshaler. +func (s *PayoutCancellationDetailsParty) UnmarshalText(data []byte) error { + switch PayoutCancellationDetailsParty(data) { + case PayoutCancellationDetailsPartyYooMoney: + *s = PayoutCancellationDetailsPartyYooMoney + return nil + case PayoutCancellationDetailsPartyPayoutNetwork: + *s = PayoutCancellationDetailsPartyPayoutNetwork + return nil + default: + return errors.Errorf("invalid value: %q", data) + } +} + +// Причина отмены выплаты. Перечень и описание +// возможных значений: для обычных выплат: https://yookassa. +// ru/developers/payouts/after-the-payout/declined-payouts#cancellation-details-reason, для +// выплат в рамках Безопасной сделки: https://yookassa. +// ru/developers/solutions-for-platforms/safe-deal/integration/payouts#declined-payouts-cancellation-details-reason. +type PayoutCancellationDetailsReason string + +const ( + PayoutCancellationDetailsReasonInsufficientFunds PayoutCancellationDetailsReason = "insufficient_funds" + PayoutCancellationDetailsReasonFraudSuspected PayoutCancellationDetailsReason = "fraud_suspected" + PayoutCancellationDetailsReasonOneTimeLimitExceeded PayoutCancellationDetailsReason = "one_time_limit_exceeded" + PayoutCancellationDetailsReasonPeriodicLimitExceeded PayoutCancellationDetailsReason = "periodic_limit_exceeded" + PayoutCancellationDetailsReasonRejectedByPayee PayoutCancellationDetailsReason = "rejected_by_payee" + PayoutCancellationDetailsReasonGeneralDecline PayoutCancellationDetailsReason = "general_decline" + PayoutCancellationDetailsReasonIssuerUnavailable PayoutCancellationDetailsReason = "issuer_unavailable" + PayoutCancellationDetailsReasonRecipientNotFound PayoutCancellationDetailsReason = "recipient_not_found" + PayoutCancellationDetailsReasonRecipientCheckFailed PayoutCancellationDetailsReason = "recipient_check_failed" + PayoutCancellationDetailsReasonIdentificationRequired PayoutCancellationDetailsReason = "identification_required" + PayoutCancellationDetailsReasonSelfEmployedAnnualLimitExceeded PayoutCancellationDetailsReason = "self_employed_annual_limit_exceeded" +) + +// AllValues returns all PayoutCancellationDetailsReason values. +func (PayoutCancellationDetailsReason) AllValues() []PayoutCancellationDetailsReason { + return []PayoutCancellationDetailsReason{ + PayoutCancellationDetailsReasonInsufficientFunds, + PayoutCancellationDetailsReasonFraudSuspected, + PayoutCancellationDetailsReasonOneTimeLimitExceeded, + PayoutCancellationDetailsReasonPeriodicLimitExceeded, + PayoutCancellationDetailsReasonRejectedByPayee, + PayoutCancellationDetailsReasonGeneralDecline, + PayoutCancellationDetailsReasonIssuerUnavailable, + PayoutCancellationDetailsReasonRecipientNotFound, + PayoutCancellationDetailsReasonRecipientCheckFailed, + PayoutCancellationDetailsReasonIdentificationRequired, + PayoutCancellationDetailsReasonSelfEmployedAnnualLimitExceeded, + } +} + +// MarshalText implements encoding.TextMarshaler. +func (s PayoutCancellationDetailsReason) MarshalText() ([]byte, error) { + switch s { + case PayoutCancellationDetailsReasonInsufficientFunds: + return []byte(s), nil + case PayoutCancellationDetailsReasonFraudSuspected: + return []byte(s), nil + case PayoutCancellationDetailsReasonOneTimeLimitExceeded: + return []byte(s), nil + case PayoutCancellationDetailsReasonPeriodicLimitExceeded: + return []byte(s), nil + case PayoutCancellationDetailsReasonRejectedByPayee: + return []byte(s), nil + case PayoutCancellationDetailsReasonGeneralDecline: + return []byte(s), nil + case PayoutCancellationDetailsReasonIssuerUnavailable: + return []byte(s), nil + case PayoutCancellationDetailsReasonRecipientNotFound: + return []byte(s), nil + case PayoutCancellationDetailsReasonRecipientCheckFailed: + return []byte(s), nil + case PayoutCancellationDetailsReasonIdentificationRequired: + return []byte(s), nil + case PayoutCancellationDetailsReasonSelfEmployedAnnualLimitExceeded: + return []byte(s), nil + default: + return nil, errors.Errorf("invalid value: %q", s) + } +} + +// UnmarshalText implements encoding.TextUnmarshaler. +func (s *PayoutCancellationDetailsReason) UnmarshalText(data []byte) error { + switch PayoutCancellationDetailsReason(data) { + case PayoutCancellationDetailsReasonInsufficientFunds: + *s = PayoutCancellationDetailsReasonInsufficientFunds + return nil + case PayoutCancellationDetailsReasonFraudSuspected: + *s = PayoutCancellationDetailsReasonFraudSuspected + return nil + case PayoutCancellationDetailsReasonOneTimeLimitExceeded: + *s = PayoutCancellationDetailsReasonOneTimeLimitExceeded + return nil + case PayoutCancellationDetailsReasonPeriodicLimitExceeded: + *s = PayoutCancellationDetailsReasonPeriodicLimitExceeded + return nil + case PayoutCancellationDetailsReasonRejectedByPayee: + *s = PayoutCancellationDetailsReasonRejectedByPayee + return nil + case PayoutCancellationDetailsReasonGeneralDecline: + *s = PayoutCancellationDetailsReasonGeneralDecline + return nil + case PayoutCancellationDetailsReasonIssuerUnavailable: + *s = PayoutCancellationDetailsReasonIssuerUnavailable + return nil + case PayoutCancellationDetailsReasonRecipientNotFound: + *s = PayoutCancellationDetailsReasonRecipientNotFound + return nil + case PayoutCancellationDetailsReasonRecipientCheckFailed: + *s = PayoutCancellationDetailsReasonRecipientCheckFailed + return nil + case PayoutCancellationDetailsReasonIdentificationRequired: + *s = PayoutCancellationDetailsReasonIdentificationRequired + return nil + case PayoutCancellationDetailsReasonSelfEmployedAnnualLimitExceeded: + *s = PayoutCancellationDetailsReasonSelfEmployedAnnualLimitExceeded + return nil + default: + return errors.Errorf("invalid value: %q", data) + } +} + +// Данные банковской карты. +// Ref: #/components/schemas/PayoutCardData +type PayoutCardData struct { + First6 string `json:"first6"` + Last4 BankCardLast4 `json:"last4"` + CardType BankCardType `json:"card_type"` + IssuerCountry OptBankCardIssuerCountry `json:"issuer_country"` + IssuerName OptBankCardIssuerName `json:"issuer_name"` +} + +// GetFirst6 returns the value of First6. +func (s *PayoutCardData) GetFirst6() string { + return s.First6 +} + +// GetLast4 returns the value of Last4. +func (s *PayoutCardData) GetLast4() BankCardLast4 { + return s.Last4 +} + +// GetCardType returns the value of CardType. +func (s *PayoutCardData) GetCardType() BankCardType { + return s.CardType +} + +// GetIssuerCountry returns the value of IssuerCountry. +func (s *PayoutCardData) GetIssuerCountry() OptBankCardIssuerCountry { + return s.IssuerCountry +} + +// GetIssuerName returns the value of IssuerName. +func (s *PayoutCardData) GetIssuerName() OptBankCardIssuerName { + return s.IssuerName +} + +// SetFirst6 sets the value of First6. +func (s *PayoutCardData) SetFirst6(val string) { + s.First6 = val +} + +// SetLast4 sets the value of Last4. +func (s *PayoutCardData) SetLast4(val BankCardLast4) { + s.Last4 = val +} + +// SetCardType sets the value of CardType. +func (s *PayoutCardData) SetCardType(val BankCardType) { + s.CardType = val +} + +// SetIssuerCountry sets the value of IssuerCountry. +func (s *PayoutCardData) SetIssuerCountry(val OptBankCardIssuerCountry) { + s.IssuerCountry = val +} + +// SetIssuerName sets the value of IssuerName. +func (s *PayoutCardData) SetIssuerName(val OptBankCardIssuerName) { + s.IssuerName = val +} + +// Merged schema. +type PayoutDeal struct { + ID DealId `json:"id"` +} + +// GetID returns the value of ID. +func (s *PayoutDeal) GetID() DealId { + return s.ID +} + +// SetID sets the value of ID. +func (s *PayoutDeal) SetID(val DealId) { + s.ID = val +} + +// Сделка, в рамках которой нужно провести выплату. +// Необходимо передавать, если вы проводите Безопасную +// сделку: https://yookassa.ru/developers/solutions-for-platforms/safe-deal/basics. +// Ref: #/components/schemas/PayoutDealInfo +type PayoutDealInfo struct { + ID DealId `json:"id"` +} + +// GetID returns the value of ID. +func (s *PayoutDealInfo) GetID() DealId { + return s.ID +} + +// SetID sets the value of ID. +func (s *PayoutDealInfo) SetID(val DealId) { + s.ID = val +} + +// Способ получения выплаты: * yoo_money — выплаты на кошелек +// ЮMoney; * bank_card — выплаты на банковскую карту; * sbp — +// выплаты через СБП на счет в банке или платежном +// сервисе. +// Ref: #/components/schemas/PayoutDestinationDataType +type PayoutDestinationDataType string + +const ( + PayoutDestinationDataTypeYooMoney PayoutDestinationDataType = "yoo_money" + PayoutDestinationDataTypeBankCard PayoutDestinationDataType = "bank_card" + PayoutDestinationDataTypeSbp PayoutDestinationDataType = "sbp" +) + +// AllValues returns all PayoutDestinationDataType values. +func (PayoutDestinationDataType) AllValues() []PayoutDestinationDataType { + return []PayoutDestinationDataType{ + PayoutDestinationDataTypeYooMoney, + PayoutDestinationDataTypeBankCard, + PayoutDestinationDataTypeSbp, + } +} + +// MarshalText implements encoding.TextMarshaler. +func (s PayoutDestinationDataType) MarshalText() ([]byte, error) { + switch s { + case PayoutDestinationDataTypeYooMoney: + return []byte(s), nil + case PayoutDestinationDataTypeBankCard: + return []byte(s), nil + case PayoutDestinationDataTypeSbp: + return []byte(s), nil + default: + return nil, errors.Errorf("invalid value: %q", s) + } +} + +// UnmarshalText implements encoding.TextUnmarshaler. +func (s *PayoutDestinationDataType) UnmarshalText(data []byte) error { + switch PayoutDestinationDataType(data) { + case PayoutDestinationDataTypeYooMoney: + *s = PayoutDestinationDataTypeYooMoney + return nil + case PayoutDestinationDataTypeBankCard: + *s = PayoutDestinationDataTypeBankCard + return nil + case PayoutDestinationDataTypeSbp: + *s = PayoutDestinationDataTypeSbp + return nil + default: + return errors.Errorf("invalid value: %q", data) + } +} + +// Способ получения выплаты: * bank_card – выплата на +// банковскую карту; * yoo_money – выплата на кошелек ЮMoney; * sbp +// – выплата через СБП на счет в банке или платежном +// сервисе. +// Ref: #/components/schemas/PayoutDestinationType +type PayoutDestinationType string + +const ( + PayoutDestinationTypeBankCard PayoutDestinationType = "bank_card" + PayoutDestinationTypeYooMoney PayoutDestinationType = "yoo_money" + PayoutDestinationTypeSbp PayoutDestinationType = "sbp" +) + +// AllValues returns all PayoutDestinationType values. +func (PayoutDestinationType) AllValues() []PayoutDestinationType { + return []PayoutDestinationType{ + PayoutDestinationTypeBankCard, + PayoutDestinationTypeYooMoney, + PayoutDestinationTypeSbp, + } +} + +// MarshalText implements encoding.TextMarshaler. +func (s PayoutDestinationType) MarshalText() ([]byte, error) { + switch s { + case PayoutDestinationTypeBankCard: + return []byte(s), nil + case PayoutDestinationTypeYooMoney: + return []byte(s), nil + case PayoutDestinationTypeSbp: + return []byte(s), nil + default: + return nil, errors.Errorf("invalid value: %q", s) + } +} + +// UnmarshalText implements encoding.TextUnmarshaler. +func (s *PayoutDestinationType) UnmarshalText(data []byte) error { + switch PayoutDestinationType(data) { + case PayoutDestinationTypeBankCard: + *s = PayoutDestinationTypeBankCard + return nil + case PayoutDestinationTypeYooMoney: + *s = PayoutDestinationTypeYooMoney + return nil + case PayoutDestinationTypeSbp: + *s = PayoutDestinationTypeSbp + return nil + default: + return errors.Errorf("invalid value: %q", data) + } +} + +type PayoutId string + +// Способ получения выплаты. +// Ref: #/components/schemas/PayoutMethodType +type PayoutMethodType string + +const ( + PayoutMethodTypeBankCard PayoutMethodType = "bank_card" + PayoutMethodTypeYooMoney PayoutMethodType = "yoo_money" + PayoutMethodTypeSbp PayoutMethodType = "sbp" +) + +// AllValues returns all PayoutMethodType values. +func (PayoutMethodType) AllValues() []PayoutMethodType { + return []PayoutMethodType{ + PayoutMethodTypeBankCard, + PayoutMethodTypeYooMoney, + PayoutMethodTypeSbp, + } +} + +// MarshalText implements encoding.TextMarshaler. +func (s PayoutMethodType) MarshalText() ([]byte, error) { + switch s { + case PayoutMethodTypeBankCard: + return []byte(s), nil + case PayoutMethodTypeYooMoney: + return []byte(s), nil + case PayoutMethodTypeSbp: + return []byte(s), nil + default: + return nil, errors.Errorf("invalid value: %q", s) + } +} + +// UnmarshalText implements encoding.TextUnmarshaler. +func (s *PayoutMethodType) UnmarshalText(data []byte) error { + switch PayoutMethodType(data) { + case PayoutMethodTypeBankCard: + *s = PayoutMethodTypeBankCard + return nil + case PayoutMethodTypeYooMoney: + *s = PayoutMethodTypeYooMoney + return nil + case PayoutMethodTypeSbp: + *s = PayoutMethodTypeSbp + return nil + default: + return errors.Errorf("invalid value: %q", data) + } +} + +// PayoutPayoutDestination represents sum type. +type PayoutPayoutDestination struct { + Type PayoutPayoutDestinationType // switch on this field + PayoutToCardDestination PayoutToCardDestination + PayoutToYooMoneyDestination PayoutToYooMoneyDestination + PayoutToSbpDestination PayoutToSbpDestination +} + +// PayoutPayoutDestinationType is oneOf type of PayoutPayoutDestination. +type PayoutPayoutDestinationType string + +// Possible values for PayoutPayoutDestinationType. +const ( + PayoutToCardDestinationPayoutPayoutDestination PayoutPayoutDestinationType = "PayoutToCardDestination" + PayoutToYooMoneyDestinationPayoutPayoutDestination PayoutPayoutDestinationType = "PayoutToYooMoneyDestination" + PayoutToSbpDestinationPayoutPayoutDestination PayoutPayoutDestinationType = "PayoutToSbpDestination" +) + +// IsPayoutToCardDestination reports whether PayoutPayoutDestination is PayoutToCardDestination. +func (s PayoutPayoutDestination) IsPayoutToCardDestination() bool { + return s.Type == PayoutToCardDestinationPayoutPayoutDestination +} + +// IsPayoutToYooMoneyDestination reports whether PayoutPayoutDestination is PayoutToYooMoneyDestination. +func (s PayoutPayoutDestination) IsPayoutToYooMoneyDestination() bool { + return s.Type == PayoutToYooMoneyDestinationPayoutPayoutDestination +} + +// IsPayoutToSbpDestination reports whether PayoutPayoutDestination is PayoutToSbpDestination. +func (s PayoutPayoutDestination) IsPayoutToSbpDestination() bool { + return s.Type == PayoutToSbpDestinationPayoutPayoutDestination +} + +// SetPayoutToCardDestination sets PayoutPayoutDestination to PayoutToCardDestination. +func (s *PayoutPayoutDestination) SetPayoutToCardDestination(v PayoutToCardDestination) { + s.Type = PayoutToCardDestinationPayoutPayoutDestination + s.PayoutToCardDestination = v +} + +// GetPayoutToCardDestination returns PayoutToCardDestination and true boolean if PayoutPayoutDestination is PayoutToCardDestination. +func (s PayoutPayoutDestination) GetPayoutToCardDestination() (v PayoutToCardDestination, ok bool) { + if !s.IsPayoutToCardDestination() { + return v, false + } + return s.PayoutToCardDestination, true +} + +// NewPayoutToCardDestinationPayoutPayoutDestination returns new PayoutPayoutDestination from PayoutToCardDestination. +func NewPayoutToCardDestinationPayoutPayoutDestination(v PayoutToCardDestination) PayoutPayoutDestination { + var s PayoutPayoutDestination + s.SetPayoutToCardDestination(v) + return s +} + +// SetPayoutToYooMoneyDestination sets PayoutPayoutDestination to PayoutToYooMoneyDestination. +func (s *PayoutPayoutDestination) SetPayoutToYooMoneyDestination(v PayoutToYooMoneyDestination) { + s.Type = PayoutToYooMoneyDestinationPayoutPayoutDestination + s.PayoutToYooMoneyDestination = v +} + +// GetPayoutToYooMoneyDestination returns PayoutToYooMoneyDestination and true boolean if PayoutPayoutDestination is PayoutToYooMoneyDestination. +func (s PayoutPayoutDestination) GetPayoutToYooMoneyDestination() (v PayoutToYooMoneyDestination, ok bool) { + if !s.IsPayoutToYooMoneyDestination() { + return v, false + } + return s.PayoutToYooMoneyDestination, true +} + +// NewPayoutToYooMoneyDestinationPayoutPayoutDestination returns new PayoutPayoutDestination from PayoutToYooMoneyDestination. +func NewPayoutToYooMoneyDestinationPayoutPayoutDestination(v PayoutToYooMoneyDestination) PayoutPayoutDestination { + var s PayoutPayoutDestination + s.SetPayoutToYooMoneyDestination(v) + return s +} + +// SetPayoutToSbpDestination sets PayoutPayoutDestination to PayoutToSbpDestination. +func (s *PayoutPayoutDestination) SetPayoutToSbpDestination(v PayoutToSbpDestination) { + s.Type = PayoutToSbpDestinationPayoutPayoutDestination + s.PayoutToSbpDestination = v +} + +// GetPayoutToSbpDestination returns PayoutToSbpDestination and true boolean if PayoutPayoutDestination is PayoutToSbpDestination. +func (s PayoutPayoutDestination) GetPayoutToSbpDestination() (v PayoutToSbpDestination, ok bool) { + if !s.IsPayoutToSbpDestination() { + return v, false + } + return s.PayoutToSbpDestination, true +} + +// NewPayoutToSbpDestinationPayoutPayoutDestination returns new PayoutPayoutDestination from PayoutToSbpDestination. +func NewPayoutToSbpDestinationPayoutPayoutDestination(v PayoutToSbpDestination) PayoutPayoutDestination { + var s PayoutPayoutDestination + s.SetPayoutToSbpDestination(v) + return s +} + +// Данные для создания выплаты. +// Ref: #/components/schemas/PayoutRequest +type PayoutRequest struct { + Amount PayoutRequestAmount `json:"amount"` + PayoutDestinationData OptPayoutRequestPayoutDestinationData `json:"payout_destination_data"` + // Токенизированные данные для выплаты. Например, + // синоним банковской карты. Обязательный параметр, + // если не передан payout_destination_data или payment_method_id. + PayoutToken OptString `json:"payout_token"` + PaymentMethodID OptString `json:"payment_method_id"` + Description OptString `json:"description"` + Deal OptPayoutDealInfo `json:"deal"` + // Персональные данные получателя выплаты. Только для + // обычных выплат. Необходимо передавать в этих + // сценариях: * выплаты с проверкой получателя: https://yookassa. + // ru/developers/payouts/scenario-extensions/recipient-check (только для выплат + // через СБП); * выплаты с передачей данных получателя + // для выписок из реестра: https://yookassa. + // ru/developers/payouts/scenario-extensions/recipient-data-send. В массиве можно + // одновременно передать несколько идентификаторов, но + // только для разных типов данных. + PersonalData []PayoutsPersonalData `json:"personal_data"` + Metadata OptMetadata `json:"metadata"` +} + +// GetAmount returns the value of Amount. +func (s *PayoutRequest) GetAmount() PayoutRequestAmount { + return s.Amount +} + +// GetPayoutDestinationData returns the value of PayoutDestinationData. +func (s *PayoutRequest) GetPayoutDestinationData() OptPayoutRequestPayoutDestinationData { + return s.PayoutDestinationData +} + +// GetPayoutToken returns the value of PayoutToken. +func (s *PayoutRequest) GetPayoutToken() OptString { + return s.PayoutToken +} + +// GetPaymentMethodID returns the value of PaymentMethodID. +func (s *PayoutRequest) GetPaymentMethodID() OptString { + return s.PaymentMethodID +} + +// GetDescription returns the value of Description. +func (s *PayoutRequest) GetDescription() OptString { + return s.Description +} + +// GetDeal returns the value of Deal. +func (s *PayoutRequest) GetDeal() OptPayoutDealInfo { + return s.Deal +} + +// GetPersonalData returns the value of PersonalData. +func (s *PayoutRequest) GetPersonalData() []PayoutsPersonalData { + return s.PersonalData +} + +// GetMetadata returns the value of Metadata. +func (s *PayoutRequest) GetMetadata() OptMetadata { + return s.Metadata +} + +// SetAmount sets the value of Amount. +func (s *PayoutRequest) SetAmount(val PayoutRequestAmount) { + s.Amount = val +} + +// SetPayoutDestinationData sets the value of PayoutDestinationData. +func (s *PayoutRequest) SetPayoutDestinationData(val OptPayoutRequestPayoutDestinationData) { + s.PayoutDestinationData = val +} + +// SetPayoutToken sets the value of PayoutToken. +func (s *PayoutRequest) SetPayoutToken(val OptString) { + s.PayoutToken = val +} + +// SetPaymentMethodID sets the value of PaymentMethodID. +func (s *PayoutRequest) SetPaymentMethodID(val OptString) { + s.PaymentMethodID = val +} + +// SetDescription sets the value of Description. +func (s *PayoutRequest) SetDescription(val OptString) { + s.Description = val +} + +// SetDeal sets the value of Deal. +func (s *PayoutRequest) SetDeal(val OptPayoutDealInfo) { + s.Deal = val +} + +// SetPersonalData sets the value of PersonalData. +func (s *PayoutRequest) SetPersonalData(val []PayoutsPersonalData) { + s.PersonalData = val +} + +// SetMetadata sets the value of Metadata. +func (s *PayoutRequest) SetMetadata(val OptMetadata) { + s.Metadata = val +} + +// Сумма в выбранной валюте. +type PayoutRequestAmount struct { + // Сумма в выбранной валюте. Всегда дробное значение. + // Разделитель дробной части — точка, разделитель тысяч + // отсутствует. Количество знаков после точки зависит + // от выбранной валюты. Пример: 1000.00. + Value string `json:"value"` + Currency CurrencyCode `json:"currency"` +} + +// GetValue returns the value of Value. +func (s *PayoutRequestAmount) GetValue() string { + return s.Value +} + +// GetCurrency returns the value of Currency. +func (s *PayoutRequestAmount) GetCurrency() CurrencyCode { + return s.Currency +} + +// SetValue sets the value of Value. +func (s *PayoutRequestAmount) SetValue(val string) { + s.Value = val +} + +// SetCurrency sets the value of Currency. +func (s *PayoutRequestAmount) SetCurrency(val CurrencyCode) { + s.Currency = val +} + +// PayoutRequestPayoutDestinationData represents sum type. +type PayoutRequestPayoutDestinationData struct { + Type PayoutRequestPayoutDestinationDataType // switch on this field + PayoutToYooMoneyDestinationData PayoutToYooMoneyDestinationData + PayoutToBankCardDestinationData PayoutToBankCardDestinationData + PayoutToSbpDestinationData PayoutToSbpDestinationData +} + +// PayoutRequestPayoutDestinationDataType is oneOf type of PayoutRequestPayoutDestinationData. +type PayoutRequestPayoutDestinationDataType string + +// Possible values for PayoutRequestPayoutDestinationDataType. +const ( + PayoutToYooMoneyDestinationDataPayoutRequestPayoutDestinationData PayoutRequestPayoutDestinationDataType = "PayoutToYooMoneyDestinationData" + PayoutToBankCardDestinationDataPayoutRequestPayoutDestinationData PayoutRequestPayoutDestinationDataType = "PayoutToBankCardDestinationData" + PayoutToSbpDestinationDataPayoutRequestPayoutDestinationData PayoutRequestPayoutDestinationDataType = "PayoutToSbpDestinationData" +) + +// IsPayoutToYooMoneyDestinationData reports whether PayoutRequestPayoutDestinationData is PayoutToYooMoneyDestinationData. +func (s PayoutRequestPayoutDestinationData) IsPayoutToYooMoneyDestinationData() bool { + return s.Type == PayoutToYooMoneyDestinationDataPayoutRequestPayoutDestinationData +} + +// IsPayoutToBankCardDestinationData reports whether PayoutRequestPayoutDestinationData is PayoutToBankCardDestinationData. +func (s PayoutRequestPayoutDestinationData) IsPayoutToBankCardDestinationData() bool { + return s.Type == PayoutToBankCardDestinationDataPayoutRequestPayoutDestinationData +} + +// IsPayoutToSbpDestinationData reports whether PayoutRequestPayoutDestinationData is PayoutToSbpDestinationData. +func (s PayoutRequestPayoutDestinationData) IsPayoutToSbpDestinationData() bool { + return s.Type == PayoutToSbpDestinationDataPayoutRequestPayoutDestinationData +} + +// SetPayoutToYooMoneyDestinationData sets PayoutRequestPayoutDestinationData to PayoutToYooMoneyDestinationData. +func (s *PayoutRequestPayoutDestinationData) SetPayoutToYooMoneyDestinationData(v PayoutToYooMoneyDestinationData) { + s.Type = PayoutToYooMoneyDestinationDataPayoutRequestPayoutDestinationData + s.PayoutToYooMoneyDestinationData = v +} + +// GetPayoutToYooMoneyDestinationData returns PayoutToYooMoneyDestinationData and true boolean if PayoutRequestPayoutDestinationData is PayoutToYooMoneyDestinationData. +func (s PayoutRequestPayoutDestinationData) GetPayoutToYooMoneyDestinationData() (v PayoutToYooMoneyDestinationData, ok bool) { + if !s.IsPayoutToYooMoneyDestinationData() { + return v, false + } + return s.PayoutToYooMoneyDestinationData, true +} + +// NewPayoutToYooMoneyDestinationDataPayoutRequestPayoutDestinationData returns new PayoutRequestPayoutDestinationData from PayoutToYooMoneyDestinationData. +func NewPayoutToYooMoneyDestinationDataPayoutRequestPayoutDestinationData(v PayoutToYooMoneyDestinationData) PayoutRequestPayoutDestinationData { + var s PayoutRequestPayoutDestinationData + s.SetPayoutToYooMoneyDestinationData(v) + return s +} + +// SetPayoutToBankCardDestinationData sets PayoutRequestPayoutDestinationData to PayoutToBankCardDestinationData. +func (s *PayoutRequestPayoutDestinationData) SetPayoutToBankCardDestinationData(v PayoutToBankCardDestinationData) { + s.Type = PayoutToBankCardDestinationDataPayoutRequestPayoutDestinationData + s.PayoutToBankCardDestinationData = v +} + +// GetPayoutToBankCardDestinationData returns PayoutToBankCardDestinationData and true boolean if PayoutRequestPayoutDestinationData is PayoutToBankCardDestinationData. +func (s PayoutRequestPayoutDestinationData) GetPayoutToBankCardDestinationData() (v PayoutToBankCardDestinationData, ok bool) { + if !s.IsPayoutToBankCardDestinationData() { + return v, false + } + return s.PayoutToBankCardDestinationData, true +} + +// NewPayoutToBankCardDestinationDataPayoutRequestPayoutDestinationData returns new PayoutRequestPayoutDestinationData from PayoutToBankCardDestinationData. +func NewPayoutToBankCardDestinationDataPayoutRequestPayoutDestinationData(v PayoutToBankCardDestinationData) PayoutRequestPayoutDestinationData { + var s PayoutRequestPayoutDestinationData + s.SetPayoutToBankCardDestinationData(v) + return s +} + +// SetPayoutToSbpDestinationData sets PayoutRequestPayoutDestinationData to PayoutToSbpDestinationData. +func (s *PayoutRequestPayoutDestinationData) SetPayoutToSbpDestinationData(v PayoutToSbpDestinationData) { + s.Type = PayoutToSbpDestinationDataPayoutRequestPayoutDestinationData + s.PayoutToSbpDestinationData = v +} + +// GetPayoutToSbpDestinationData returns PayoutToSbpDestinationData and true boolean if PayoutRequestPayoutDestinationData is PayoutToSbpDestinationData. +func (s PayoutRequestPayoutDestinationData) GetPayoutToSbpDestinationData() (v PayoutToSbpDestinationData, ok bool) { + if !s.IsPayoutToSbpDestinationData() { + return v, false + } + return s.PayoutToSbpDestinationData, true +} + +// NewPayoutToSbpDestinationDataPayoutRequestPayoutDestinationData returns new PayoutRequestPayoutDestinationData from PayoutToSbpDestinationData. +func NewPayoutToSbpDestinationDataPayoutRequestPayoutDestinationData(v PayoutToSbpDestinationData) PayoutRequestPayoutDestinationData { + var s PayoutRequestPayoutDestinationData + s.SetPayoutToSbpDestinationData(v) + return s +} + +// Merged schema. +type PayoutSelfEmployed struct { + ID SelfEmployedId `json:"id"` +} + +// GetID returns the value of ID. +func (s *PayoutSelfEmployed) GetID() SelfEmployedId { + return s.ID +} + +// SetID sets the value of ID. +func (s *PayoutSelfEmployed) SetID(val SelfEmployedId) { + s.ID = val +} + +// Merged schema. +// Ref: #/components/schemas/PayoutStatementRecipientPersonalDataRequest +type PayoutStatementRecipientPersonalDataRequest struct { + Type PersonalDataType `json:"type"` + Metadata OptMetadata `json:"metadata"` + LastName LastName `json:"last_name"` + FirstName FirstName `json:"first_name"` + MiddleName OptMiddleName `json:"middle_name"` + // Дата рождения. Передается в формате ISO 8601: https://en.wikipedia. + // org/wiki/ISO_8601. + Birthdate time.Time `json:"birthdate"` +} + +// GetType returns the value of Type. +func (s *PayoutStatementRecipientPersonalDataRequest) GetType() PersonalDataType { + return s.Type +} + +// GetMetadata returns the value of Metadata. +func (s *PayoutStatementRecipientPersonalDataRequest) GetMetadata() OptMetadata { + return s.Metadata +} + +// GetLastName returns the value of LastName. +func (s *PayoutStatementRecipientPersonalDataRequest) GetLastName() LastName { + return s.LastName +} + +// GetFirstName returns the value of FirstName. +func (s *PayoutStatementRecipientPersonalDataRequest) GetFirstName() FirstName { + return s.FirstName +} + +// GetMiddleName returns the value of MiddleName. +func (s *PayoutStatementRecipientPersonalDataRequest) GetMiddleName() OptMiddleName { + return s.MiddleName +} + +// GetBirthdate returns the value of Birthdate. +func (s *PayoutStatementRecipientPersonalDataRequest) GetBirthdate() time.Time { + return s.Birthdate +} + +// SetType sets the value of Type. +func (s *PayoutStatementRecipientPersonalDataRequest) SetType(val PersonalDataType) { + s.Type = val +} + +// SetMetadata sets the value of Metadata. +func (s *PayoutStatementRecipientPersonalDataRequest) SetMetadata(val OptMetadata) { + s.Metadata = val +} + +// SetLastName sets the value of LastName. +func (s *PayoutStatementRecipientPersonalDataRequest) SetLastName(val LastName) { + s.LastName = val +} + +// SetFirstName sets the value of FirstName. +func (s *PayoutStatementRecipientPersonalDataRequest) SetFirstName(val FirstName) { + s.FirstName = val +} + +// SetMiddleName sets the value of MiddleName. +func (s *PayoutStatementRecipientPersonalDataRequest) SetMiddleName(val OptMiddleName) { + s.MiddleName = val +} + +// SetBirthdate sets the value of Birthdate. +func (s *PayoutStatementRecipientPersonalDataRequest) SetBirthdate(val time.Time) { + s.Birthdate = val +} + +// Статус выплаты. Возможные значения: pending — выплата +// создана, но деньги еще не поступили на указанное +// платежное средство пользователя (например, ЮKassa ждет +// подтверждения от эквайера, что перевод успешен); succeeded +// — выплата успешно завершена, деньги переведены на +// платежное средство пользователя (финальный и +// неизменяемый статус); canceled — выплата отменена, +// инициатор и причина отмены указаны в объекте +// cancellation_details (финальный и неизменяемый статус). +// Ref: #/components/schemas/PayoutStatus +type PayoutStatus string + +const ( + PayoutStatusPending PayoutStatus = "pending" + PayoutStatusSucceeded PayoutStatus = "succeeded" + PayoutStatusCanceled PayoutStatus = "canceled" +) + +// AllValues returns all PayoutStatus values. +func (PayoutStatus) AllValues() []PayoutStatus { + return []PayoutStatus{ + PayoutStatusPending, + PayoutStatusSucceeded, + PayoutStatusCanceled, + } +} + +// MarshalText implements encoding.TextMarshaler. +func (s PayoutStatus) MarshalText() ([]byte, error) { + switch s { + case PayoutStatusPending: + return []byte(s), nil + case PayoutStatusSucceeded: + return []byte(s), nil + case PayoutStatusCanceled: + return []byte(s), nil + default: + return nil, errors.Errorf("invalid value: %q", s) + } +} + +// UnmarshalText implements encoding.TextUnmarshaler. +func (s *PayoutStatus) UnmarshalText(data []byte) error { + switch PayoutStatus(data) { + case PayoutStatusPending: + *s = PayoutStatusPending + return nil + case PayoutStatusSucceeded: + *s = PayoutStatusSucceeded + return nil + case PayoutStatusCanceled: + *s = PayoutStatusCanceled + return nil + default: + return errors.Errorf("invalid value: %q", data) + } +} + +// Merged schema. +// Ref: #/components/schemas/PayoutToBankCardDestinationData +type PayoutToBankCardDestinationData struct { + Type PayoutDestinationDataType `json:"type"` + Card CardDataForPayoutDestination `json:"card"` +} + +// GetType returns the value of Type. +func (s *PayoutToBankCardDestinationData) GetType() PayoutDestinationDataType { + return s.Type +} + +// GetCard returns the value of Card. +func (s *PayoutToBankCardDestinationData) GetCard() CardDataForPayoutDestination { + return s.Card +} + +// SetType sets the value of Type. +func (s *PayoutToBankCardDestinationData) SetType(val PayoutDestinationDataType) { + s.Type = val +} + +// SetCard sets the value of Card. +func (s *PayoutToBankCardDestinationData) SetCard(val CardDataForPayoutDestination) { + s.Card = val +} + +// Merged schema. +// Ref: #/components/schemas/PayoutToCardDestination +type PayoutToCardDestination struct { + Type PayoutDestinationType `json:"type"` + Card OptPayoutCardData `json:"card"` +} + +// GetType returns the value of Type. +func (s *PayoutToCardDestination) GetType() PayoutDestinationType { + return s.Type +} + +// GetCard returns the value of Card. +func (s *PayoutToCardDestination) GetCard() OptPayoutCardData { + return s.Card +} + +// SetType sets the value of Type. +func (s *PayoutToCardDestination) SetType(val PayoutDestinationType) { + s.Type = val +} + +// SetCard sets the value of Card. +func (s *PayoutToCardDestination) SetCard(val OptPayoutCardData) { + s.Card = val +} + +// Merged schema. +// Ref: #/components/schemas/PayoutToSbpDestination +type PayoutToSbpDestination struct { + Type PayoutDestinationType `json:"type"` + Phone string `json:"phone"` + // Идентификатор участника СБП — банка или платежного + // сервиса, подключенного к сервису. + BankID string `json:"bank_id"` + // Проверка получателя выплаты: https://yookassa. + // ru/developers/payouts/scenario-extensions/recipient-check: true — выплата + // проходила с проверкой получателя, false — выплата + // проходила без проверки получателя. + RecipientChecked bool `json:"recipient_checked"` +} + +// GetType returns the value of Type. +func (s *PayoutToSbpDestination) GetType() PayoutDestinationType { + return s.Type +} + +// GetPhone returns the value of Phone. +func (s *PayoutToSbpDestination) GetPhone() string { + return s.Phone +} + +// GetBankID returns the value of BankID. +func (s *PayoutToSbpDestination) GetBankID() string { + return s.BankID +} + +// GetRecipientChecked returns the value of RecipientChecked. +func (s *PayoutToSbpDestination) GetRecipientChecked() bool { + return s.RecipientChecked +} + +// SetType sets the value of Type. +func (s *PayoutToSbpDestination) SetType(val PayoutDestinationType) { + s.Type = val +} + +// SetPhone sets the value of Phone. +func (s *PayoutToSbpDestination) SetPhone(val string) { + s.Phone = val +} + +// SetBankID sets the value of BankID. +func (s *PayoutToSbpDestination) SetBankID(val string) { + s.BankID = val +} + +// SetRecipientChecked sets the value of RecipientChecked. +func (s *PayoutToSbpDestination) SetRecipientChecked(val bool) { + s.RecipientChecked = val +} + +// Merged schema. +// Ref: #/components/schemas/PayoutToSbpDestinationData +type PayoutToSbpDestinationData struct { + Type PayoutDestinationDataType `json:"type"` + Phone string `json:"phone"` + BankID string `json:"bank_id"` +} + +// GetType returns the value of Type. +func (s *PayoutToSbpDestinationData) GetType() PayoutDestinationDataType { + return s.Type +} + +// GetPhone returns the value of Phone. +func (s *PayoutToSbpDestinationData) GetPhone() string { + return s.Phone +} + +// GetBankID returns the value of BankID. +func (s *PayoutToSbpDestinationData) GetBankID() string { + return s.BankID +} + +// SetType sets the value of Type. +func (s *PayoutToSbpDestinationData) SetType(val PayoutDestinationDataType) { + s.Type = val +} + +// SetPhone sets the value of Phone. +func (s *PayoutToSbpDestinationData) SetPhone(val string) { + s.Phone = val +} + +// SetBankID sets the value of BankID. +func (s *PayoutToSbpDestinationData) SetBankID(val string) { + s.BankID = val +} + +// Merged schema. +// Ref: #/components/schemas/PayoutToYooMoneyDestination +type PayoutToYooMoneyDestination struct { + Type PayoutDestinationType `json:"type"` + AccountNumber YooMoneyAccountNumber `json:"account_number"` +} + +// GetType returns the value of Type. +func (s *PayoutToYooMoneyDestination) GetType() PayoutDestinationType { + return s.Type +} + +// GetAccountNumber returns the value of AccountNumber. +func (s *PayoutToYooMoneyDestination) GetAccountNumber() YooMoneyAccountNumber { + return s.AccountNumber +} + +// SetType sets the value of Type. +func (s *PayoutToYooMoneyDestination) SetType(val PayoutDestinationType) { + s.Type = val +} + +// SetAccountNumber sets the value of AccountNumber. +func (s *PayoutToYooMoneyDestination) SetAccountNumber(val YooMoneyAccountNumber) { + s.AccountNumber = val +} + +// Merged schema. +// Ref: #/components/schemas/PayoutToYooMoneyDestinationData +type PayoutToYooMoneyDestinationData struct { + Type PayoutDestinationDataType `json:"type"` + AccountNumber string `json:"account_number"` +} + +// GetType returns the value of Type. +func (s *PayoutToYooMoneyDestinationData) GetType() PayoutDestinationDataType { + return s.Type +} + +// GetAccountNumber returns the value of AccountNumber. +func (s *PayoutToYooMoneyDestinationData) GetAccountNumber() string { + return s.AccountNumber +} + +// SetType sets the value of Type. +func (s *PayoutToYooMoneyDestinationData) SetType(val PayoutDestinationDataType) { + s.Type = val +} + +// SetAccountNumber sets the value of AccountNumber. +func (s *PayoutToYooMoneyDestinationData) SetAccountNumber(val string) { + s.AccountNumber = val +} + +type PayoutsGetInternalServerError TooManyRequests + +func (*PayoutsGetInternalServerError) payoutsGetRes() {} + +type PayoutsGetTooManyRequests TooManyRequests + +func (*PayoutsGetTooManyRequests) payoutsGetRes() {} + +// Список выплат. Выплаты отсортированы по времени +// создания в порядке убывания (от новых к старым). Если +// результатов больше, чем задано в limit, список будет +// выводиться фрагментами. В этом случае в ответе на +// запрос вернется фрагмент списка и параметр next_cursor с +// указателем на следующий фрагмент. +// Ref: #/components/schemas/PayoutsList +type PayoutsList struct { + // Формат выдачи результатов запроса. Возможное + // значение: list (список). + Type PayoutsListType `json:"type"` + Items []Payout `json:"items"` + NextCursor OptNextCursor `json:"next_cursor"` +} + +// GetType returns the value of Type. +func (s *PayoutsList) GetType() PayoutsListType { + return s.Type +} + +// GetItems returns the value of Items. +func (s *PayoutsList) GetItems() []Payout { + return s.Items +} + +// GetNextCursor returns the value of NextCursor. +func (s *PayoutsList) GetNextCursor() OptNextCursor { + return s.NextCursor +} + +// SetType sets the value of Type. +func (s *PayoutsList) SetType(val PayoutsListType) { + s.Type = val +} + +// SetItems sets the value of Items. +func (s *PayoutsList) SetItems(val []Payout) { + s.Items = val +} + +// SetNextCursor sets the value of NextCursor. +func (s *PayoutsList) SetNextCursor(val OptNextCursor) { + s.NextCursor = val +} + +func (*PayoutsList) payoutsGetRes() {} +func (*PayoutsList) payoutsSearchGetRes() {} + +// Формат выдачи результатов запроса. Возможное +// значение: list (список). +type PayoutsListType string + +const ( + PayoutsListTypeList PayoutsListType = "list" +) + +// AllValues returns all PayoutsListType values. +func (PayoutsListType) AllValues() []PayoutsListType { + return []PayoutsListType{ + PayoutsListTypeList, + } +} + +// MarshalText implements encoding.TextMarshaler. +func (s PayoutsListType) MarshalText() ([]byte, error) { + switch s { + case PayoutsListTypeList: + return []byte(s), nil + default: + return nil, errors.Errorf("invalid value: %q", s) + } +} + +// UnmarshalText implements encoding.TextUnmarshaler. +func (s *PayoutsListType) UnmarshalText(data []byte) error { + switch PayoutsListType(data) { + case PayoutsListTypeList: + *s = PayoutsListTypeList + return nil + default: + return errors.Errorf("invalid value: %q", data) + } +} + +type PayoutsPayoutIDGetInternalServerError TooManyRequests + +func (*PayoutsPayoutIDGetInternalServerError) payoutsPayoutIDGetRes() {} + +type PayoutsPayoutIDGetTooManyRequests TooManyRequests + +func (*PayoutsPayoutIDGetTooManyRequests) payoutsPayoutIDGetRes() {} + +// Персональные данные получателя выплаты. Только для +// обычных выплат. Необходимо передавать в этих +// сценариях: * выплаты с проверкой получателя: https://yookassa. +// ru/developers/payouts/scenario-extensions/recipient-check; * выплаты с передачей +// данных получателя для выписок из реестра: https://yookassa. +// ru/developers/payouts/scenario-extensions/recipient-data-send. +// Ref: #/components/schemas/PayoutsPersonalData +type PayoutsPersonalData struct { + ID PersonalDataId `json:"id"` +} + +// GetID returns the value of ID. +func (s *PayoutsPersonalData) GetID() PersonalDataId { + return s.ID +} + +// SetID sets the value of ID. +func (s *PayoutsPersonalData) SetID(val PersonalDataId) { + s.ID = val +} + +type PayoutsPostInternalServerError TooManyRequests + +func (*PayoutsPostInternalServerError) payoutsPostRes() {} + +type PayoutsPostTooManyRequests TooManyRequests + +func (*PayoutsPostTooManyRequests) payoutsPostRes() {} + +type PayoutsSearchGetInternalServerError TooManyRequests + +func (*PayoutsSearchGetInternalServerError) payoutsSearchGetRes() {} + +type PayoutsSearchGetTooManyRequests TooManyRequests + +func (*PayoutsSearchGetTooManyRequests) payoutsSearchGetRes() {} + +// Personal data object (PersonalData) contains all the relevant information about the personal +// information of the user saved in YooMoney. +// Ref: #/components/schemas/PersonalData +type PersonalData struct { + ID PersonalDataId `json:"id"` + Type PersonalDataType `json:"type"` + // Статус персональных данных. Возможные значения: + // waiting_for_operation — данные сохранены, но не использованы + // при проведении выплаты; active — данные сохранены и + // использованы при проведении выплаты; данные можно + // использовать повторно до срока, указанного в + // параметре expires_at; canceled — хранение данных отменено, + // данные удалены, инициатор и причина отмены указаны в + // объекте cancellation_details (финальный и неизменяемый статус). + // Жизненный цикл персональных данных зависит от + // назначения данных: передача данных получателя + // выплаты: https://yookassa. + // ru/developers/payouts/scenario-extensions/recipient-data-send#lifecircle для выписки + // из реестра или проверка получателя: https://yookassa. + // ru/developers/payouts/scenario-extensions/recipient-check#lifecircle при выплатах + // через СБП. + Status PersonalDataStatus `json:"status"` + CancellationDetails OptPersonalDataCancellationDetails `json:"cancellation_details"` + // Время создания персональных данных. Указывается по + // UTC: https://ru.wikipedia. + // org/wiki/%D0%92%D1%81%D0%B5%D0%BC%D0%B8%D1%80%D0%BD%D0%BE%D0%B5_%D0%BA%D0%BE%D0%BE%D1%80%D0%B4%D0%B8%D0%BD%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%BE%D0%B5_%D0%B2%D1%80%D0%B5%D0%BC%D1%8F и передается в формате ISO 8601: https://en.wikipedia.org/wiki/ISO_8601. Пример: 2017-11-03T11:52:31.827Z. + CreatedAt time.Time `json:"created_at"` + // Срок жизни объекта персональных данных — время, до + // которого вы можете использовать персональные данные + // при проведении операций. Указывается только для + // объекта в статусе active. Указывается по UTC: https://ru.wikipedia. + // org/wiki/%D0%92%D1%81%D0%B5%D0%BC%D0%B8%D1%80%D0%BD%D0%BE%D0%B5_%D0%BA%D0%BE%D0%BE%D1%80%D0%B4%D0%B8%D0%BD%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%BE%D0%B5_%D0%B2%D1%80%D0%B5%D0%BC%D1%8F и передается в формате ISO 8601: https://en.wikipedia.org/wiki/ISO_8601. Пример: 2017-11-03T11:52:31.827Z. + ExpiresAt OptDateTime `json:"expires_at"` + Metadata OptMetadata `json:"metadata"` +} + +// GetID returns the value of ID. +func (s *PersonalData) GetID() PersonalDataId { + return s.ID +} + +// GetType returns the value of Type. +func (s *PersonalData) GetType() PersonalDataType { + return s.Type +} + +// GetStatus returns the value of Status. +func (s *PersonalData) GetStatus() PersonalDataStatus { + return s.Status +} + +// GetCancellationDetails returns the value of CancellationDetails. +func (s *PersonalData) GetCancellationDetails() OptPersonalDataCancellationDetails { + return s.CancellationDetails +} + +// GetCreatedAt returns the value of CreatedAt. +func (s *PersonalData) GetCreatedAt() time.Time { + return s.CreatedAt +} + +// GetExpiresAt returns the value of ExpiresAt. +func (s *PersonalData) GetExpiresAt() OptDateTime { + return s.ExpiresAt +} + +// GetMetadata returns the value of Metadata. +func (s *PersonalData) GetMetadata() OptMetadata { + return s.Metadata +} + +// SetID sets the value of ID. +func (s *PersonalData) SetID(val PersonalDataId) { + s.ID = val +} + +// SetType sets the value of Type. +func (s *PersonalData) SetType(val PersonalDataType) { + s.Type = val +} + +// SetStatus sets the value of Status. +func (s *PersonalData) SetStatus(val PersonalDataStatus) { + s.Status = val +} + +// SetCancellationDetails sets the value of CancellationDetails. +func (s *PersonalData) SetCancellationDetails(val OptPersonalDataCancellationDetails) { + s.CancellationDetails = val +} + +// SetCreatedAt sets the value of CreatedAt. +func (s *PersonalData) SetCreatedAt(val time.Time) { + s.CreatedAt = val +} + +// SetExpiresAt sets the value of ExpiresAt. +func (s *PersonalData) SetExpiresAt(val OptDateTime) { + s.ExpiresAt = val +} + +// SetMetadata sets the value of Metadata. +func (s *PersonalData) SetMetadata(val OptMetadata) { + s.Metadata = val +} + +func (*PersonalData) personalDataPersonalDataIDGetRes() {} +func (*PersonalData) personalDataPostRes() {} + +// Комментарий к статусу canceled: кто и по какой причине +// аннулировал хранение данных. +// Ref: #/components/schemas/PersonalDataCancellationDetails +type PersonalDataCancellationDetails struct { + // Участник процесса, который принял решение о + // прекращении хранения персональных данных. Возможное + // значение: yoo_money — ЮKassa. + Party PersonalDataCancellationDetailsParty `json:"party"` + // Причина прекращения хранения персональных данных. + // Возможное значение: expired_by_timeout — истек срок хранения + // или использования персональных данных. + Reason PersonalDataCancellationDetailsReason `json:"reason"` +} + +// GetParty returns the value of Party. +func (s *PersonalDataCancellationDetails) GetParty() PersonalDataCancellationDetailsParty { + return s.Party +} + +// GetReason returns the value of Reason. +func (s *PersonalDataCancellationDetails) GetReason() PersonalDataCancellationDetailsReason { + return s.Reason +} + +// SetParty sets the value of Party. +func (s *PersonalDataCancellationDetails) SetParty(val PersonalDataCancellationDetailsParty) { + s.Party = val +} + +// SetReason sets the value of Reason. +func (s *PersonalDataCancellationDetails) SetReason(val PersonalDataCancellationDetailsReason) { + s.Reason = val +} + +// Участник процесса, который принял решение о +// прекращении хранения персональных данных. Возможное +// значение: yoo_money — ЮKassa. +type PersonalDataCancellationDetailsParty string + +const ( + PersonalDataCancellationDetailsPartyYooMoney PersonalDataCancellationDetailsParty = "yoo_money" +) + +// AllValues returns all PersonalDataCancellationDetailsParty values. +func (PersonalDataCancellationDetailsParty) AllValues() []PersonalDataCancellationDetailsParty { + return []PersonalDataCancellationDetailsParty{ + PersonalDataCancellationDetailsPartyYooMoney, + } +} + +// MarshalText implements encoding.TextMarshaler. +func (s PersonalDataCancellationDetailsParty) MarshalText() ([]byte, error) { + switch s { + case PersonalDataCancellationDetailsPartyYooMoney: + return []byte(s), nil + default: + return nil, errors.Errorf("invalid value: %q", s) + } +} + +// UnmarshalText implements encoding.TextUnmarshaler. +func (s *PersonalDataCancellationDetailsParty) UnmarshalText(data []byte) error { + switch PersonalDataCancellationDetailsParty(data) { + case PersonalDataCancellationDetailsPartyYooMoney: + *s = PersonalDataCancellationDetailsPartyYooMoney + return nil + default: + return errors.Errorf("invalid value: %q", data) + } +} + +// Причина прекращения хранения персональных данных. +// Возможное значение: expired_by_timeout — истек срок хранения +// или использования персональных данных. +type PersonalDataCancellationDetailsReason string + +const ( + PersonalDataCancellationDetailsReasonExpiredByTimeout PersonalDataCancellationDetailsReason = "expired_by_timeout" +) + +// AllValues returns all PersonalDataCancellationDetailsReason values. +func (PersonalDataCancellationDetailsReason) AllValues() []PersonalDataCancellationDetailsReason { + return []PersonalDataCancellationDetailsReason{ + PersonalDataCancellationDetailsReasonExpiredByTimeout, + } +} + +// MarshalText implements encoding.TextMarshaler. +func (s PersonalDataCancellationDetailsReason) MarshalText() ([]byte, error) { + switch s { + case PersonalDataCancellationDetailsReasonExpiredByTimeout: + return []byte(s), nil + default: + return nil, errors.Errorf("invalid value: %q", s) + } +} + +// UnmarshalText implements encoding.TextUnmarshaler. +func (s *PersonalDataCancellationDetailsReason) UnmarshalText(data []byte) error { + switch PersonalDataCancellationDetailsReason(data) { + case PersonalDataCancellationDetailsReasonExpiredByTimeout: + *s = PersonalDataCancellationDetailsReasonExpiredByTimeout + return nil + default: + return errors.Errorf("invalid value: %q", data) + } +} + +type PersonalDataId string + +type PersonalDataPersonalDataIDGetInternalServerError TooManyRequests + +func (*PersonalDataPersonalDataIDGetInternalServerError) personalDataPersonalDataIDGetRes() {} + +type PersonalDataPersonalDataIDGetTooManyRequests TooManyRequests + +func (*PersonalDataPersonalDataIDGetTooManyRequests) personalDataPersonalDataIDGetRes() {} + +type PersonalDataPostInternalServerError TooManyRequests + +func (*PersonalDataPostInternalServerError) personalDataPostRes() {} + +// PersonalDataPostReq represents sum type. +type PersonalDataPostReq struct { + Type PersonalDataPostReqType // switch on this field + SbpPayoutRecipientPersonalDataRequest SbpPayoutRecipientPersonalDataRequest + PayoutStatementRecipientPersonalDataRequest PayoutStatementRecipientPersonalDataRequest +} + +// PersonalDataPostReqType is oneOf type of PersonalDataPostReq. +type PersonalDataPostReqType string + +// Possible values for PersonalDataPostReqType. +const ( + SbpPayoutRecipientPersonalDataRequestPersonalDataPostReq PersonalDataPostReqType = "sbp_payout_recipient" + PayoutStatementRecipientPersonalDataRequestPersonalDataPostReq PersonalDataPostReqType = "payout_statement_recipient" +) + +// IsSbpPayoutRecipientPersonalDataRequest reports whether PersonalDataPostReq is SbpPayoutRecipientPersonalDataRequest. +func (s PersonalDataPostReq) IsSbpPayoutRecipientPersonalDataRequest() bool { + return s.Type == SbpPayoutRecipientPersonalDataRequestPersonalDataPostReq +} + +// IsPayoutStatementRecipientPersonalDataRequest reports whether PersonalDataPostReq is PayoutStatementRecipientPersonalDataRequest. +func (s PersonalDataPostReq) IsPayoutStatementRecipientPersonalDataRequest() bool { + return s.Type == PayoutStatementRecipientPersonalDataRequestPersonalDataPostReq +} + +// SetSbpPayoutRecipientPersonalDataRequest sets PersonalDataPostReq to SbpPayoutRecipientPersonalDataRequest. +func (s *PersonalDataPostReq) SetSbpPayoutRecipientPersonalDataRequest(v SbpPayoutRecipientPersonalDataRequest) { + s.Type = SbpPayoutRecipientPersonalDataRequestPersonalDataPostReq + s.SbpPayoutRecipientPersonalDataRequest = v +} + +// GetSbpPayoutRecipientPersonalDataRequest returns SbpPayoutRecipientPersonalDataRequest and true boolean if PersonalDataPostReq is SbpPayoutRecipientPersonalDataRequest. +func (s PersonalDataPostReq) GetSbpPayoutRecipientPersonalDataRequest() (v SbpPayoutRecipientPersonalDataRequest, ok bool) { + if !s.IsSbpPayoutRecipientPersonalDataRequest() { + return v, false + } + return s.SbpPayoutRecipientPersonalDataRequest, true +} + +// NewSbpPayoutRecipientPersonalDataRequestPersonalDataPostReq returns new PersonalDataPostReq from SbpPayoutRecipientPersonalDataRequest. +func NewSbpPayoutRecipientPersonalDataRequestPersonalDataPostReq(v SbpPayoutRecipientPersonalDataRequest) PersonalDataPostReq { + var s PersonalDataPostReq + s.SetSbpPayoutRecipientPersonalDataRequest(v) + return s +} + +// SetPayoutStatementRecipientPersonalDataRequest sets PersonalDataPostReq to PayoutStatementRecipientPersonalDataRequest. +func (s *PersonalDataPostReq) SetPayoutStatementRecipientPersonalDataRequest(v PayoutStatementRecipientPersonalDataRequest) { + s.Type = PayoutStatementRecipientPersonalDataRequestPersonalDataPostReq + s.PayoutStatementRecipientPersonalDataRequest = v +} + +// GetPayoutStatementRecipientPersonalDataRequest returns PayoutStatementRecipientPersonalDataRequest and true boolean if PersonalDataPostReq is PayoutStatementRecipientPersonalDataRequest. +func (s PersonalDataPostReq) GetPayoutStatementRecipientPersonalDataRequest() (v PayoutStatementRecipientPersonalDataRequest, ok bool) { + if !s.IsPayoutStatementRecipientPersonalDataRequest() { + return v, false + } + return s.PayoutStatementRecipientPersonalDataRequest, true +} + +// NewPayoutStatementRecipientPersonalDataRequestPersonalDataPostReq returns new PersonalDataPostReq from PayoutStatementRecipientPersonalDataRequest. +func NewPayoutStatementRecipientPersonalDataRequestPersonalDataPostReq(v PayoutStatementRecipientPersonalDataRequest) PersonalDataPostReq { + var s PersonalDataPostReq + s.SetPayoutStatementRecipientPersonalDataRequest(v) + return s +} + +type PersonalDataPostTooManyRequests TooManyRequests + +func (*PersonalDataPostTooManyRequests) personalDataPostRes() {} + +// Статус персональных данных. Возможные значения: +// waiting_for_operation — данные сохранены, но не использованы +// при проведении выплаты; active — данные сохранены и +// использованы при проведении выплаты; данные можно +// использовать повторно до срока, указанного в +// параметре expires_at; canceled — хранение данных отменено, +// данные удалены, инициатор и причина отмены указаны в +// объекте cancellation_details (финальный и неизменяемый статус). +// Жизненный цикл персональных данных зависит от +// назначения данных: передача данных получателя +// выплаты: https://yookassa. +// ru/developers/payouts/scenario-extensions/recipient-data-send#lifecircle для выписки +// из реестра или проверка получателя: https://yookassa. +// ru/developers/payouts/scenario-extensions/recipient-check#lifecircle при выплатах +// через СБП. +type PersonalDataStatus string + +const ( + PersonalDataStatusWaitingForOperation PersonalDataStatus = "waiting_for_operation" + PersonalDataStatusActive PersonalDataStatus = "active" + PersonalDataStatusCanceled PersonalDataStatus = "canceled" +) + +// AllValues returns all PersonalDataStatus values. +func (PersonalDataStatus) AllValues() []PersonalDataStatus { + return []PersonalDataStatus{ + PersonalDataStatusWaitingForOperation, + PersonalDataStatusActive, + PersonalDataStatusCanceled, + } +} + +// MarshalText implements encoding.TextMarshaler. +func (s PersonalDataStatus) MarshalText() ([]byte, error) { + switch s { + case PersonalDataStatusWaitingForOperation: + return []byte(s), nil + case PersonalDataStatusActive: + return []byte(s), nil + case PersonalDataStatusCanceled: + return []byte(s), nil + default: + return nil, errors.Errorf("invalid value: %q", s) + } +} + +// UnmarshalText implements encoding.TextUnmarshaler. +func (s *PersonalDataStatus) UnmarshalText(data []byte) error { + switch PersonalDataStatus(data) { + case PersonalDataStatusWaitingForOperation: + *s = PersonalDataStatusWaitingForOperation + return nil + case PersonalDataStatusActive: + *s = PersonalDataStatusActive + return nil + case PersonalDataStatusCanceled: + *s = PersonalDataStatusCanceled + return nil + default: + return errors.Errorf("invalid value: %q", data) + } +} + +// Тип персональных данных — цель, для которой вы будете +// использовать данные. Возможные значение: sbp_payout_recipient +// — выплаты с проверкой получателя: https://yookassa. +// ru/developers/payouts/scenario-extensions/recipient-check(только для выплат +// через СБП); payout_statement_recipient — выплаты с передачей +// данных получателя выплаты для выписок из реестра: +// https://yookassa.ru/developers/payouts/scenario-extensions/recipient-data-send. +// Ref: #/components/schemas/PersonalDataType +type PersonalDataType string + +const ( + PersonalDataTypePayoutStatementRecipient PersonalDataType = "payout_statement_recipient" + PersonalDataTypeSbpPayoutRecipient PersonalDataType = "sbp_payout_recipient" +) + +// AllValues returns all PersonalDataType values. +func (PersonalDataType) AllValues() []PersonalDataType { + return []PersonalDataType{ + PersonalDataTypePayoutStatementRecipient, + PersonalDataTypeSbpPayoutRecipient, + } +} + +// MarshalText implements encoding.TextMarshaler. +func (s PersonalDataType) MarshalText() ([]byte, error) { + switch s { + case PersonalDataTypePayoutStatementRecipient: + return []byte(s), nil + case PersonalDataTypeSbpPayoutRecipient: + return []byte(s), nil + default: + return nil, errors.Errorf("invalid value: %q", s) + } +} + +// UnmarshalText implements encoding.TextUnmarshaler. +func (s *PersonalDataType) UnmarshalText(data []byte) error { + switch PersonalDataType(data) { + case PersonalDataTypePayoutStatementRecipient: + *s = PersonalDataTypePayoutStatementRecipient + return nil + case PersonalDataTypeSbpPayoutRecipient: + *s = PersonalDataTypeSbpPayoutRecipient + return nil + default: + return errors.Errorf("invalid value: %q", data) + } +} + +type PostReceiptData jx.Raw + +// Receipt object (Receipt) contains all the relevant information about the receipt. +// Ref: #/components/schemas/Receipt +type Receipt struct { + ID ReceiptId `json:"id"` + Type ReceiptType `json:"type"` + // Идентификатор платежа: https://yookassa.ru/developers/api#payment_object, + // для которого был сформирован чек. + PaymentID OptString `json:"payment_id"` + // Идентификатор возврата: https://yookassa.ru/developers/api#refund_object, + // для которого был сформирован чек. Отсутствует в чеке + // платежа. + RefundID OptString `json:"refund_id"` + Status ReceiptStatus `json:"status"` + // Номер фискального документа. + FiscalDocumentNumber OptString `json:"fiscal_document_number"` + // Номер фискального накопителя в кассовом аппарате. + FiscalStorageNumber OptString `json:"fiscal_storage_number"` + // Фискальный признак чека. Формируется фискальным + // накопителем на основе данных, переданных для + // регистрации чека. + FiscalAttribute OptString `json:"fiscal_attribute"` + // Дата и время формирования чека в фискальном + // накопителе. Указывается в формате ISO 8601: https://en.wikipedia. + // org/wiki/ISO_8601. + RegisteredAt OptDateTime `json:"registered_at"` + // Идентификатор чека в онлайн-кассе. Присутствует, если + // чек удалось зарегистрировать. + FiscalProviderID OptString `json:"fiscal_provider_id"` + // List of products in the receipt: no more than 80 items for Receipts from YooMoney: + // https://yookassa.ru/developers/payment-acceptance/receipts/54fz/yoomoney/basics, no more than 100 + // items for third-party online sales registers: https://yookassa. + // ru/developers/payment-acceptance/receipts/54fz/other-services/basics. + Items []ReceiptItem `json:"items"` + // Признак проведения платежа в интернете (тег в 54 ФЗ — + // 1125) — указывает на оплату через интернет. Возможные + // значения: true — оплата прошла онлайн, через интернет + // (например, на вашем сайте или в приложении); false — + // оплата прошла офлайн, при личном взаимодействии + // (например, в торговой точке или при встрече с + // курьером). По умолчанию true. Если вы принимаете платежи + // офлайн, передайте в запросе значение false. + Internet OptBool `json:"internet"` + // Перечень совершенных расчетов. + Settlements []Settlement `json:"settlements"` + OnBehalfOf OptString `json:"on_behalf_of"` + TaxSystemCode OptInt32 `json:"tax_system_code"` + // Номер часовой зоны для адреса, по которому вы + // принимаете платежи (тег в 54 ФЗ — 1011). Указывается, + // только если в чеке есть товары, которые подлежат + // обязательной маркировке (в items.mark_code_info передается + // параметр gs_1m, short или fur). Перечень возможных значений: + // для Чеков от ЮKassa: https://yookassa. + // ru/developers/payment-acceptance/receipts/54fz/yoomoney/parameters-values#timezone; для + // сторонних онлайн-касс: https://yookassa. + // ru/developers/payment-acceptance/receipts/54fz/other-services/parameters-values#timezone. + Timezone OptInt `json:"timezone"` + // Отраслевой реквизит предмета расчета (тег в 54 ФЗ — 1260). + ReceiptIndustryDetails []IndustryDetails `json:"receipt_industry_details"` + ReceiptOperationalDetails OptReceiptReceiptOperationalDetails `json:"receipt_operational_details"` +} + +// GetID returns the value of ID. +func (s *Receipt) GetID() ReceiptId { + return s.ID +} + +// GetType returns the value of Type. +func (s *Receipt) GetType() ReceiptType { + return s.Type +} + +// GetPaymentID returns the value of PaymentID. +func (s *Receipt) GetPaymentID() OptString { + return s.PaymentID +} + +// GetRefundID returns the value of RefundID. +func (s *Receipt) GetRefundID() OptString { + return s.RefundID +} + +// GetStatus returns the value of Status. +func (s *Receipt) GetStatus() ReceiptStatus { + return s.Status +} + +// GetFiscalDocumentNumber returns the value of FiscalDocumentNumber. +func (s *Receipt) GetFiscalDocumentNumber() OptString { + return s.FiscalDocumentNumber +} + +// GetFiscalStorageNumber returns the value of FiscalStorageNumber. +func (s *Receipt) GetFiscalStorageNumber() OptString { + return s.FiscalStorageNumber +} + +// GetFiscalAttribute returns the value of FiscalAttribute. +func (s *Receipt) GetFiscalAttribute() OptString { + return s.FiscalAttribute +} + +// GetRegisteredAt returns the value of RegisteredAt. +func (s *Receipt) GetRegisteredAt() OptDateTime { + return s.RegisteredAt +} + +// GetFiscalProviderID returns the value of FiscalProviderID. +func (s *Receipt) GetFiscalProviderID() OptString { + return s.FiscalProviderID +} + +// GetItems returns the value of Items. +func (s *Receipt) GetItems() []ReceiptItem { + return s.Items +} + +// GetInternet returns the value of Internet. +func (s *Receipt) GetInternet() OptBool { + return s.Internet +} + +// GetSettlements returns the value of Settlements. +func (s *Receipt) GetSettlements() []Settlement { + return s.Settlements +} + +// GetOnBehalfOf returns the value of OnBehalfOf. +func (s *Receipt) GetOnBehalfOf() OptString { + return s.OnBehalfOf +} + +// GetTaxSystemCode returns the value of TaxSystemCode. +func (s *Receipt) GetTaxSystemCode() OptInt32 { + return s.TaxSystemCode +} + +// GetTimezone returns the value of Timezone. +func (s *Receipt) GetTimezone() OptInt { + return s.Timezone +} + +// GetReceiptIndustryDetails returns the value of ReceiptIndustryDetails. +func (s *Receipt) GetReceiptIndustryDetails() []IndustryDetails { + return s.ReceiptIndustryDetails +} + +// GetReceiptOperationalDetails returns the value of ReceiptOperationalDetails. +func (s *Receipt) GetReceiptOperationalDetails() OptReceiptReceiptOperationalDetails { + return s.ReceiptOperationalDetails +} + +// SetID sets the value of ID. +func (s *Receipt) SetID(val ReceiptId) { + s.ID = val +} + +// SetType sets the value of Type. +func (s *Receipt) SetType(val ReceiptType) { + s.Type = val +} + +// SetPaymentID sets the value of PaymentID. +func (s *Receipt) SetPaymentID(val OptString) { + s.PaymentID = val +} + +// SetRefundID sets the value of RefundID. +func (s *Receipt) SetRefundID(val OptString) { + s.RefundID = val +} + +// SetStatus sets the value of Status. +func (s *Receipt) SetStatus(val ReceiptStatus) { + s.Status = val +} + +// SetFiscalDocumentNumber sets the value of FiscalDocumentNumber. +func (s *Receipt) SetFiscalDocumentNumber(val OptString) { + s.FiscalDocumentNumber = val +} + +// SetFiscalStorageNumber sets the value of FiscalStorageNumber. +func (s *Receipt) SetFiscalStorageNumber(val OptString) { + s.FiscalStorageNumber = val +} + +// SetFiscalAttribute sets the value of FiscalAttribute. +func (s *Receipt) SetFiscalAttribute(val OptString) { + s.FiscalAttribute = val +} + +// SetRegisteredAt sets the value of RegisteredAt. +func (s *Receipt) SetRegisteredAt(val OptDateTime) { + s.RegisteredAt = val +} + +// SetFiscalProviderID sets the value of FiscalProviderID. +func (s *Receipt) SetFiscalProviderID(val OptString) { + s.FiscalProviderID = val +} + +// SetItems sets the value of Items. +func (s *Receipt) SetItems(val []ReceiptItem) { + s.Items = val +} + +// SetInternet sets the value of Internet. +func (s *Receipt) SetInternet(val OptBool) { + s.Internet = val +} + +// SetSettlements sets the value of Settlements. +func (s *Receipt) SetSettlements(val []Settlement) { + s.Settlements = val +} + +// SetOnBehalfOf sets the value of OnBehalfOf. +func (s *Receipt) SetOnBehalfOf(val OptString) { + s.OnBehalfOf = val +} + +// SetTaxSystemCode sets the value of TaxSystemCode. +func (s *Receipt) SetTaxSystemCode(val OptInt32) { + s.TaxSystemCode = val +} + +// SetTimezone sets the value of Timezone. +func (s *Receipt) SetTimezone(val OptInt) { + s.Timezone = val +} + +// SetReceiptIndustryDetails sets the value of ReceiptIndustryDetails. +func (s *Receipt) SetReceiptIndustryDetails(val []IndustryDetails) { + s.ReceiptIndustryDetails = val +} + +// SetReceiptOperationalDetails sets the value of ReceiptOperationalDetails. +func (s *Receipt) SetReceiptOperationalDetails(val OptReceiptReceiptOperationalDetails) { + s.ReceiptOperationalDetails = val +} + +func (*Receipt) receiptsPostRes() {} +func (*Receipt) receiptsReceiptIDGetRes() {} + +// Data for creating a receipt. The parameter is specified if: you are a company or a sole proprietor, +// +// and you use Receipts from YooMoney: https://yookassa. +// +// ru/developers/payment-acceptance/receipts/54fz/yoomoney/basics; you are a company or a sole +// proprietor, and you use the third-party sales register: https://yookassa. +// ru/developers/payment-acceptance/receipts/54fz/other-services/basics and send data for creating +// receipts under one of the following scenarios: Payment and receipt at the same time: +// https://yookassa. +// ru/developers/payment-acceptance/receipts/54fz/other-services/basics#payment-and-receipt or +// Payment after receipt: https://yookassa. +// ru/developers/payment-acceptance/receipts/54fz/other-services/basics#payment-after-receipt. +// Ref: #/components/schemas/ReceiptData +type ReceiptData struct { + Customer OptReceiptDataCustomer `json:"customer"` + // List of products in an order. If you use Receipts from YooMoney, you can specify up to 80 items. + // If you use a third-party online sales register, you can specify up to 100 items. + Items []ReceiptDataItem `json:"items"` + // Признак проведения платежа в интернете (тег в 54 ФЗ — + // 1125) — указывает на оплату через интернет. Возможные + // значения: true — оплата прошла онлайн, через интернет + // (например, на вашем сайте или в приложении); false — + // оплата прошла офлайн, при личном взаимодействии + // (например, в торговой точке или при встрече с + // курьером). По умолчанию true. Если вы принимаете платежи + // офлайн, передайте в запросе значение false. + Internet OptBool `json:"internet"` + TaxSystemCode OptTaxSystemCode `json:"tax_system_code"` + // Номер часовой зоны для адреса, по которому вы + // принимаете платежи (тег в 54 ФЗ — 1011). Указывается, + // только если в чеке есть товары, которые подлежат + // обязательной маркировке (в items.mark_code_info передается + // параметр gs_1m, short или fur). Перечень возможных значений: + // для Чеков от ЮKassa: https://yookassa. + // ru/developers/payment-acceptance/receipts/54fz/yoomoney/parameters-values#timezone; для + // сторонних онлайн-касс: https://yookassa. + // ru/developers/payment-acceptance/receipts/54fz/other-services/parameters-values#timezone. + Timezone OptInt `json:"timezone"` + // Отраслевой реквизит чека (тег в 54 ФЗ — 1261). Можно + // передавать, если используете Чеки от ЮKassa или + // онлайн-кассу, обновленную до ФФД 1.2. + ReceiptIndustryDetails []IndustryDetails `json:"receipt_industry_details"` + ReceiptOperationalDetails OptReceiptDataReceiptOperationalDetails `json:"receipt_operational_details"` +} + +// GetCustomer returns the value of Customer. +func (s *ReceiptData) GetCustomer() OptReceiptDataCustomer { + return s.Customer +} + +// GetItems returns the value of Items. +func (s *ReceiptData) GetItems() []ReceiptDataItem { + return s.Items +} + +// GetInternet returns the value of Internet. +func (s *ReceiptData) GetInternet() OptBool { + return s.Internet +} + +// GetTaxSystemCode returns the value of TaxSystemCode. +func (s *ReceiptData) GetTaxSystemCode() OptTaxSystemCode { + return s.TaxSystemCode +} + +// GetTimezone returns the value of Timezone. +func (s *ReceiptData) GetTimezone() OptInt { + return s.Timezone +} + +// GetReceiptIndustryDetails returns the value of ReceiptIndustryDetails. +func (s *ReceiptData) GetReceiptIndustryDetails() []IndustryDetails { + return s.ReceiptIndustryDetails +} + +// GetReceiptOperationalDetails returns the value of ReceiptOperationalDetails. +func (s *ReceiptData) GetReceiptOperationalDetails() OptReceiptDataReceiptOperationalDetails { + return s.ReceiptOperationalDetails +} + +// SetCustomer sets the value of Customer. +func (s *ReceiptData) SetCustomer(val OptReceiptDataCustomer) { + s.Customer = val +} + +// SetItems sets the value of Items. +func (s *ReceiptData) SetItems(val []ReceiptDataItem) { + s.Items = val +} + +// SetInternet sets the value of Internet. +func (s *ReceiptData) SetInternet(val OptBool) { + s.Internet = val +} + +// SetTaxSystemCode sets the value of TaxSystemCode. +func (s *ReceiptData) SetTaxSystemCode(val OptTaxSystemCode) { + s.TaxSystemCode = val +} + +// SetTimezone sets the value of Timezone. +func (s *ReceiptData) SetTimezone(val OptInt) { + s.Timezone = val +} + +// SetReceiptIndustryDetails sets the value of ReceiptIndustryDetails. +func (s *ReceiptData) SetReceiptIndustryDetails(val []IndustryDetails) { + s.ReceiptIndustryDetails = val +} + +// SetReceiptOperationalDetails sets the value of ReceiptOperationalDetails. +func (s *ReceiptData) SetReceiptOperationalDetails(val OptReceiptDataReceiptOperationalDetails) { + s.ReceiptOperationalDetails = val +} + +// Информация о пользователе. Необходимо указать как +// минимум контактные данные: для Чеков от ЮKassa — +// электронную почту (customer.email), в остальных случаях — +// электронную почту (customer.email) или номер телефона (customer. +// phone). +// Ref: #/components/schemas/ReceiptDataCustomer +type ReceiptDataCustomer struct { + // Для юрлица — название организации, для ИП и + // физического лица — ФИО. Если у физлица отсутствует + // ИНН, в этом же параметре передаются паспортные данные. + // Не более 256 символов. Можно передавать, если + // используете Чеки от ЮKassa или онлайн-кассу Orange Data, Атол + // Онлайн. + FullName OptString `json:"full_name"` + Inn OptString `json:"inn"` + Email OptString `json:"email"` + Phone OptString `json:"phone"` +} + +// GetFullName returns the value of FullName. +func (s *ReceiptDataCustomer) GetFullName() OptString { + return s.FullName +} + +// GetInn returns the value of Inn. +func (s *ReceiptDataCustomer) GetInn() OptString { + return s.Inn +} + +// GetEmail returns the value of Email. +func (s *ReceiptDataCustomer) GetEmail() OptString { + return s.Email +} + +// GetPhone returns the value of Phone. +func (s *ReceiptDataCustomer) GetPhone() OptString { + return s.Phone +} + +// SetFullName sets the value of FullName. +func (s *ReceiptDataCustomer) SetFullName(val OptString) { + s.FullName = val +} + +// SetInn sets the value of Inn. +func (s *ReceiptDataCustomer) SetInn(val OptString) { + s.Inn = val +} + +// SetEmail sets the value of Email. +func (s *ReceiptDataCustomer) SetEmail(val OptString) { + s.Email = val +} + +// SetPhone sets the value of Phone. +func (s *ReceiptDataCustomer) SetPhone(val OptString) { + s.Phone = val +} + +// Информация о товарной позиции в заказе. Используется +// для формирования чека. +// Ref: #/components/schemas/ReceiptDataItem +type ReceiptDataItem struct { + Description ReceiptItemDescription `json:"description"` + Amount ReceiptDataItemAmount `json:"amount"` + VatCode ReceiptItemVatCode `json:"vat_code"` + Quantity ReceiptItemQuantity `json:"quantity"` + Measure OptReceiptItemMeasure `json:"measure"` + MarkQuantity OptMarkQuantity `json:"mark_quantity"` + PaymentSubject OptReceiptItemPaymentSubject `json:"payment_subject"` + PaymentMode OptReceiptItemPaymentMode `json:"payment_mode"` + CountryOfOriginCode OptReceiptItemCountryOfOriginCode `json:"country_of_origin_code"` + CustomsDeclarationNumber OptReceiptItemCustomsDeclarationNumber `json:"customs_declaration_number"` + Excise OptReceiptItemExcise `json:"excise"` + ProductCode OptReceiptItemProductCode `json:"product_code"` + PlannedStatus OptReceiptItemPlannedStatus `json:"planned_status"` + MarkCodeInfo OptMarkCodeInfo `json:"mark_code_info"` + MarkMode OptMarkMode `json:"mark_mode"` + PaymentSubjectIndustryDetails ReceiptItemPaymentSubjectIndustryDetails `json:"payment_subject_industry_details"` +} + +// GetDescription returns the value of Description. +func (s *ReceiptDataItem) GetDescription() ReceiptItemDescription { + return s.Description +} + +// GetAmount returns the value of Amount. +func (s *ReceiptDataItem) GetAmount() ReceiptDataItemAmount { + return s.Amount +} + +// GetVatCode returns the value of VatCode. +func (s *ReceiptDataItem) GetVatCode() ReceiptItemVatCode { + return s.VatCode +} + +// GetQuantity returns the value of Quantity. +func (s *ReceiptDataItem) GetQuantity() ReceiptItemQuantity { + return s.Quantity +} + +// GetMeasure returns the value of Measure. +func (s *ReceiptDataItem) GetMeasure() OptReceiptItemMeasure { + return s.Measure +} + +// GetMarkQuantity returns the value of MarkQuantity. +func (s *ReceiptDataItem) GetMarkQuantity() OptMarkQuantity { + return s.MarkQuantity +} + +// GetPaymentSubject returns the value of PaymentSubject. +func (s *ReceiptDataItem) GetPaymentSubject() OptReceiptItemPaymentSubject { + return s.PaymentSubject +} + +// GetPaymentMode returns the value of PaymentMode. +func (s *ReceiptDataItem) GetPaymentMode() OptReceiptItemPaymentMode { + return s.PaymentMode +} + +// GetCountryOfOriginCode returns the value of CountryOfOriginCode. +func (s *ReceiptDataItem) GetCountryOfOriginCode() OptReceiptItemCountryOfOriginCode { + return s.CountryOfOriginCode +} + +// GetCustomsDeclarationNumber returns the value of CustomsDeclarationNumber. +func (s *ReceiptDataItem) GetCustomsDeclarationNumber() OptReceiptItemCustomsDeclarationNumber { + return s.CustomsDeclarationNumber +} + +// GetExcise returns the value of Excise. +func (s *ReceiptDataItem) GetExcise() OptReceiptItemExcise { + return s.Excise +} + +// GetProductCode returns the value of ProductCode. +func (s *ReceiptDataItem) GetProductCode() OptReceiptItemProductCode { + return s.ProductCode +} + +// GetPlannedStatus returns the value of PlannedStatus. +func (s *ReceiptDataItem) GetPlannedStatus() OptReceiptItemPlannedStatus { + return s.PlannedStatus +} + +// GetMarkCodeInfo returns the value of MarkCodeInfo. +func (s *ReceiptDataItem) GetMarkCodeInfo() OptMarkCodeInfo { + return s.MarkCodeInfo +} + +// GetMarkMode returns the value of MarkMode. +func (s *ReceiptDataItem) GetMarkMode() OptMarkMode { + return s.MarkMode +} + +// GetPaymentSubjectIndustryDetails returns the value of PaymentSubjectIndustryDetails. +func (s *ReceiptDataItem) GetPaymentSubjectIndustryDetails() ReceiptItemPaymentSubjectIndustryDetails { + return s.PaymentSubjectIndustryDetails +} + +// SetDescription sets the value of Description. +func (s *ReceiptDataItem) SetDescription(val ReceiptItemDescription) { + s.Description = val +} + +// SetAmount sets the value of Amount. +func (s *ReceiptDataItem) SetAmount(val ReceiptDataItemAmount) { + s.Amount = val +} + +// SetVatCode sets the value of VatCode. +func (s *ReceiptDataItem) SetVatCode(val ReceiptItemVatCode) { + s.VatCode = val +} + +// SetQuantity sets the value of Quantity. +func (s *ReceiptDataItem) SetQuantity(val ReceiptItemQuantity) { + s.Quantity = val +} + +// SetMeasure sets the value of Measure. +func (s *ReceiptDataItem) SetMeasure(val OptReceiptItemMeasure) { + s.Measure = val +} + +// SetMarkQuantity sets the value of MarkQuantity. +func (s *ReceiptDataItem) SetMarkQuantity(val OptMarkQuantity) { + s.MarkQuantity = val +} + +// SetPaymentSubject sets the value of PaymentSubject. +func (s *ReceiptDataItem) SetPaymentSubject(val OptReceiptItemPaymentSubject) { + s.PaymentSubject = val +} + +// SetPaymentMode sets the value of PaymentMode. +func (s *ReceiptDataItem) SetPaymentMode(val OptReceiptItemPaymentMode) { + s.PaymentMode = val +} + +// SetCountryOfOriginCode sets the value of CountryOfOriginCode. +func (s *ReceiptDataItem) SetCountryOfOriginCode(val OptReceiptItemCountryOfOriginCode) { + s.CountryOfOriginCode = val +} + +// SetCustomsDeclarationNumber sets the value of CustomsDeclarationNumber. +func (s *ReceiptDataItem) SetCustomsDeclarationNumber(val OptReceiptItemCustomsDeclarationNumber) { + s.CustomsDeclarationNumber = val +} + +// SetExcise sets the value of Excise. +func (s *ReceiptDataItem) SetExcise(val OptReceiptItemExcise) { + s.Excise = val +} + +// SetProductCode sets the value of ProductCode. +func (s *ReceiptDataItem) SetProductCode(val OptReceiptItemProductCode) { + s.ProductCode = val +} + +// SetPlannedStatus sets the value of PlannedStatus. +func (s *ReceiptDataItem) SetPlannedStatus(val OptReceiptItemPlannedStatus) { + s.PlannedStatus = val +} + +// SetMarkCodeInfo sets the value of MarkCodeInfo. +func (s *ReceiptDataItem) SetMarkCodeInfo(val OptMarkCodeInfo) { + s.MarkCodeInfo = val +} + +// SetMarkMode sets the value of MarkMode. +func (s *ReceiptDataItem) SetMarkMode(val OptMarkMode) { + s.MarkMode = val +} + +// SetPaymentSubjectIndustryDetails sets the value of PaymentSubjectIndustryDetails. +func (s *ReceiptDataItem) SetPaymentSubjectIndustryDetails(val ReceiptItemPaymentSubjectIndustryDetails) { + s.PaymentSubjectIndustryDetails = val +} + +// Сумма в выбранной валюте. +type ReceiptDataItemAmount struct { + // Сумма в выбранной валюте. Всегда дробное значение. + // Разделитель дробной части — точка, разделитель тысяч + // отсутствует. Количество знаков после точки зависит + // от выбранной валюты. Пример: 1000.00. + Value string `json:"value"` + Currency CurrencyCode `json:"currency"` +} + +// GetValue returns the value of Value. +func (s *ReceiptDataItemAmount) GetValue() string { + return s.Value +} + +// GetCurrency returns the value of Currency. +func (s *ReceiptDataItemAmount) GetCurrency() CurrencyCode { + return s.Currency +} + +// SetValue sets the value of Value. +func (s *ReceiptDataItemAmount) SetValue(val string) { + s.Value = val +} + +// SetCurrency sets the value of Currency. +func (s *ReceiptDataItemAmount) SetCurrency(val CurrencyCode) { + s.Currency = val +} + +// Данные операционного реквизита чека. +type ReceiptDataReceiptOperationalDetails struct { + // Идентификатор операции (тег в 54 ФЗ — 1271). Число от 0 до + // 255. + OperationID int `json:"operation_id"` + // Данные операции (тег в 54 ФЗ — 1272). + Value string `json:"value"` + // Время создания операции (тег в 54 ФЗ — 1273). Указывается + // по UTC: https://ru.wikipedia. + // org/wiki/%D0%92%D1%81%D0%B5%D0%BC%D0%B8%D1%80%D0%BD%D0%BE%D0%B5_%D0%BA%D0%BE%D0%BE%D1%80%D0%B4%D0%B8%D0%BD%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%BE%D0%B5_%D0%B2%D1%80%D0%B5%D0%BC%D1%8F и передается в формате ISO 8601: https://en.wikipedia.org/wiki/ISO_8601. Пример: 2017-11-03T11:52:31.827Z. + CreatedAt time.Time `json:"created_at"` +} + +// GetOperationID returns the value of OperationID. +func (s *ReceiptDataReceiptOperationalDetails) GetOperationID() int { + return s.OperationID +} + +// GetValue returns the value of Value. +func (s *ReceiptDataReceiptOperationalDetails) GetValue() string { + return s.Value +} + +// GetCreatedAt returns the value of CreatedAt. +func (s *ReceiptDataReceiptOperationalDetails) GetCreatedAt() time.Time { + return s.CreatedAt +} + +// SetOperationID sets the value of OperationID. +func (s *ReceiptDataReceiptOperationalDetails) SetOperationID(val int) { + s.OperationID = val +} + +// SetValue sets the value of Value. +func (s *ReceiptDataReceiptOperationalDetails) SetValue(val string) { + s.Value = val +} + +// SetCreatedAt sets the value of CreatedAt. +func (s *ReceiptDataReceiptOperationalDetails) SetCreatedAt(val time.Time) { + s.CreatedAt = val +} + +type ReceiptId string + +// Информация о товарной позиции в заказе (для +// формирования чека). +// Ref: #/components/schemas/ReceiptItem +type ReceiptItem struct { + // Название товара (не более 128 символов). Тег в 54 ФЗ — 1030). + Description string `json:"description"` + // Количество товара (тег в 54 ФЗ — 1023). Формат: десятичное + // число, дробная часть — три знака или больше + // (количество знаков зависит от quantity в запросе). + // Разделитель дробной части — точка, разделитель тысяч + // отсутствует. Пример: 5.000. + Quantity float64 `json:"quantity"` + Amount ReceiptItemAmount `json:"amount"` + VatCode int32 `json:"vat_code"` + PaymentSubject OptReceiptItemPaymentSubject `json:"payment_subject"` + PaymentMode OptReceiptItemPaymentMode `json:"payment_mode"` + // Код страны происхождения товара по общероссийскому + // классификатору стран мира (OК (MК (ИСО 3166) 004-97) 025-2001: + // http://docs.cntd.ru/document/842501280). Тег в 54 ФЗ — 1230. Пример: RU. + // Онлайн-кассы, которые поддерживают этот параметр: Orange + // Data, Кит Инвест. + CountryOfOriginCode OptString `json:"country_of_origin_code"` + // Номер таможенной декларации (от 1 до 32 символов). Тег в + // 54 ФЗ — 1231. Онлайн-кассы, которые поддерживают этот + // параметр: Orange Data, Кит Инвест. + CustomsDeclarationNumber OptString `json:"customs_declaration_number"` + // Сумма акциза товара с учетом копеек (тег в 54 ФЗ — 1229). + // Десятичное число с точностью до 2 символов после + // точки. Онлайн-кассы, которые поддерживают этот + // параметр: Orange Data, Кит Инвест. + Excise OptString `json:"excise"` + Supplier OptReceiptItemSupplierWithInn `json:"supplier"` + AgentType OptReceiptItemAgentType `json:"agent_type"` + MarkCodeInfo OptMarkCodeInfo `json:"mark_code_info"` + Measure OptReceiptItemMeasure `json:"measure"` + // Отраслевой реквизит предмета расчета (тег в 54 ФЗ — 1260). + // Обязателен при использовании ФФД 1.2. + PaymentSubjectIndustryDetails []IndustryDetails `json:"payment_subject_industry_details"` + // Product code (tag 1162 in 54-FZ) is a unique number assigned to a unit of product during marking + // process. Format: hexadecimal number with spaces. Maximum length is 32 bytes. Example: 00 00 00 01 + // 00 21 FA 41 00 23 05 41 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 12 00 AB 00. This + // parameter is required if both conditions apply: your online sales register is updated to FFD 1.05 + // or 1.1; the product is subject to mandatory marking: http://docs.cntd.ru/document/902192509. The + // parameter must not be included in the request if you are using Receipts from YooMoney: + // https://yookassa.ru/developers/payment-acceptance/receipts/54fz/yoomoney/basics or an online sales + // register updated to FFD 1.2: https://yookassa. + // ru/developers/payment-acceptance/receipts/54fz/other-services/marking. + ProductCode OptString `json:"product_code"` + PlannedStatus OptReceiptItemPlannedStatus `json:"planned_status"` + MarkMode OptMarkMode `json:"mark_mode"` + MarkQuantity OptMarkQuantity `json:"mark_quantity"` +} + +// GetDescription returns the value of Description. +func (s *ReceiptItem) GetDescription() string { + return s.Description +} + +// GetQuantity returns the value of Quantity. +func (s *ReceiptItem) GetQuantity() float64 { + return s.Quantity +} + +// GetAmount returns the value of Amount. +func (s *ReceiptItem) GetAmount() ReceiptItemAmount { + return s.Amount +} + +// GetVatCode returns the value of VatCode. +func (s *ReceiptItem) GetVatCode() int32 { + return s.VatCode +} + +// GetPaymentSubject returns the value of PaymentSubject. +func (s *ReceiptItem) GetPaymentSubject() OptReceiptItemPaymentSubject { + return s.PaymentSubject +} + +// GetPaymentMode returns the value of PaymentMode. +func (s *ReceiptItem) GetPaymentMode() OptReceiptItemPaymentMode { + return s.PaymentMode +} + +// GetCountryOfOriginCode returns the value of CountryOfOriginCode. +func (s *ReceiptItem) GetCountryOfOriginCode() OptString { + return s.CountryOfOriginCode +} + +// GetCustomsDeclarationNumber returns the value of CustomsDeclarationNumber. +func (s *ReceiptItem) GetCustomsDeclarationNumber() OptString { + return s.CustomsDeclarationNumber +} + +// GetExcise returns the value of Excise. +func (s *ReceiptItem) GetExcise() OptString { + return s.Excise +} + +// GetSupplier returns the value of Supplier. +func (s *ReceiptItem) GetSupplier() OptReceiptItemSupplierWithInn { + return s.Supplier +} + +// GetAgentType returns the value of AgentType. +func (s *ReceiptItem) GetAgentType() OptReceiptItemAgentType { + return s.AgentType +} + +// GetMarkCodeInfo returns the value of MarkCodeInfo. +func (s *ReceiptItem) GetMarkCodeInfo() OptMarkCodeInfo { + return s.MarkCodeInfo +} + +// GetMeasure returns the value of Measure. +func (s *ReceiptItem) GetMeasure() OptReceiptItemMeasure { + return s.Measure +} + +// GetPaymentSubjectIndustryDetails returns the value of PaymentSubjectIndustryDetails. +func (s *ReceiptItem) GetPaymentSubjectIndustryDetails() []IndustryDetails { + return s.PaymentSubjectIndustryDetails +} + +// GetProductCode returns the value of ProductCode. +func (s *ReceiptItem) GetProductCode() OptString { + return s.ProductCode +} + +// GetPlannedStatus returns the value of PlannedStatus. +func (s *ReceiptItem) GetPlannedStatus() OptReceiptItemPlannedStatus { + return s.PlannedStatus +} + +// GetMarkMode returns the value of MarkMode. +func (s *ReceiptItem) GetMarkMode() OptMarkMode { + return s.MarkMode +} + +// GetMarkQuantity returns the value of MarkQuantity. +func (s *ReceiptItem) GetMarkQuantity() OptMarkQuantity { + return s.MarkQuantity +} + +// SetDescription sets the value of Description. +func (s *ReceiptItem) SetDescription(val string) { + s.Description = val +} + +// SetQuantity sets the value of Quantity. +func (s *ReceiptItem) SetQuantity(val float64) { + s.Quantity = val +} + +// SetAmount sets the value of Amount. +func (s *ReceiptItem) SetAmount(val ReceiptItemAmount) { + s.Amount = val +} + +// SetVatCode sets the value of VatCode. +func (s *ReceiptItem) SetVatCode(val int32) { + s.VatCode = val +} + +// SetPaymentSubject sets the value of PaymentSubject. +func (s *ReceiptItem) SetPaymentSubject(val OptReceiptItemPaymentSubject) { + s.PaymentSubject = val +} + +// SetPaymentMode sets the value of PaymentMode. +func (s *ReceiptItem) SetPaymentMode(val OptReceiptItemPaymentMode) { + s.PaymentMode = val +} + +// SetCountryOfOriginCode sets the value of CountryOfOriginCode. +func (s *ReceiptItem) SetCountryOfOriginCode(val OptString) { + s.CountryOfOriginCode = val +} + +// SetCustomsDeclarationNumber sets the value of CustomsDeclarationNumber. +func (s *ReceiptItem) SetCustomsDeclarationNumber(val OptString) { + s.CustomsDeclarationNumber = val +} + +// SetExcise sets the value of Excise. +func (s *ReceiptItem) SetExcise(val OptString) { + s.Excise = val +} + +// SetSupplier sets the value of Supplier. +func (s *ReceiptItem) SetSupplier(val OptReceiptItemSupplierWithInn) { + s.Supplier = val +} + +// SetAgentType sets the value of AgentType. +func (s *ReceiptItem) SetAgentType(val OptReceiptItemAgentType) { + s.AgentType = val +} + +// SetMarkCodeInfo sets the value of MarkCodeInfo. +func (s *ReceiptItem) SetMarkCodeInfo(val OptMarkCodeInfo) { + s.MarkCodeInfo = val +} + +// SetMeasure sets the value of Measure. +func (s *ReceiptItem) SetMeasure(val OptReceiptItemMeasure) { + s.Measure = val +} + +// SetPaymentSubjectIndustryDetails sets the value of PaymentSubjectIndustryDetails. +func (s *ReceiptItem) SetPaymentSubjectIndustryDetails(val []IndustryDetails) { + s.PaymentSubjectIndustryDetails = val +} + +// SetProductCode sets the value of ProductCode. +func (s *ReceiptItem) SetProductCode(val OptString) { + s.ProductCode = val +} + +// SetPlannedStatus sets the value of PlannedStatus. +func (s *ReceiptItem) SetPlannedStatus(val OptReceiptItemPlannedStatus) { + s.PlannedStatus = val +} + +// SetMarkMode sets the value of MarkMode. +func (s *ReceiptItem) SetMarkMode(val OptMarkMode) { + s.MarkMode = val +} + +// SetMarkQuantity sets the value of MarkQuantity. +func (s *ReceiptItem) SetMarkQuantity(val OptMarkQuantity) { + s.MarkQuantity = val +} + +// Тип посредника, реализующего товар или услугу. +// Параметр предусмотрен форматом фискальных +// документов (ФФД) и является обязательным, начиная с +// версии 1.1. Перечень возможных значений: https://yookassa. +// ru/developers/payment-acceptance/receipts/54fz/other-services/parameters-values#agent-type. +// Можно передавать, если ваша онлайн-касса обновлена до +// ФФД 1.1 и вы отправляете данные для формирования чека +// по сценарию Сначала платеж, потом чек: https://yookassa. +// ru/developers/payment-acceptance/receipts/54fz/other-services/basics#receipt-after-payment. +// Ref: #/components/schemas/ReceiptItemAgentType +type ReceiptItemAgentType string + +const ( + ReceiptItemAgentTypeBankingPaymentAgent ReceiptItemAgentType = "banking_payment_agent" + ReceiptItemAgentTypeBankingPaymentSubagent ReceiptItemAgentType = "banking_payment_subagent" + ReceiptItemAgentTypePaymentAgent ReceiptItemAgentType = "payment_agent" + ReceiptItemAgentTypePaymentSubagent ReceiptItemAgentType = "payment_subagent" + ReceiptItemAgentTypeAttorney ReceiptItemAgentType = "attorney" + ReceiptItemAgentTypeCommissioner ReceiptItemAgentType = "commissioner" + ReceiptItemAgentTypeAgent ReceiptItemAgentType = "agent" +) + +// AllValues returns all ReceiptItemAgentType values. +func (ReceiptItemAgentType) AllValues() []ReceiptItemAgentType { + return []ReceiptItemAgentType{ + ReceiptItemAgentTypeBankingPaymentAgent, + ReceiptItemAgentTypeBankingPaymentSubagent, + ReceiptItemAgentTypePaymentAgent, + ReceiptItemAgentTypePaymentSubagent, + ReceiptItemAgentTypeAttorney, + ReceiptItemAgentTypeCommissioner, + ReceiptItemAgentTypeAgent, + } +} + +// MarshalText implements encoding.TextMarshaler. +func (s ReceiptItemAgentType) MarshalText() ([]byte, error) { + switch s { + case ReceiptItemAgentTypeBankingPaymentAgent: + return []byte(s), nil + case ReceiptItemAgentTypeBankingPaymentSubagent: + return []byte(s), nil + case ReceiptItemAgentTypePaymentAgent: + return []byte(s), nil + case ReceiptItemAgentTypePaymentSubagent: + return []byte(s), nil + case ReceiptItemAgentTypeAttorney: + return []byte(s), nil + case ReceiptItemAgentTypeCommissioner: + return []byte(s), nil + case ReceiptItemAgentTypeAgent: + return []byte(s), nil + default: + return nil, errors.Errorf("invalid value: %q", s) + } +} + +// UnmarshalText implements encoding.TextUnmarshaler. +func (s *ReceiptItemAgentType) UnmarshalText(data []byte) error { + switch ReceiptItemAgentType(data) { + case ReceiptItemAgentTypeBankingPaymentAgent: + *s = ReceiptItemAgentTypeBankingPaymentAgent + return nil + case ReceiptItemAgentTypeBankingPaymentSubagent: + *s = ReceiptItemAgentTypeBankingPaymentSubagent + return nil + case ReceiptItemAgentTypePaymentAgent: + *s = ReceiptItemAgentTypePaymentAgent + return nil + case ReceiptItemAgentTypePaymentSubagent: + *s = ReceiptItemAgentTypePaymentSubagent + return nil + case ReceiptItemAgentTypeAttorney: + *s = ReceiptItemAgentTypeAttorney + return nil + case ReceiptItemAgentTypeCommissioner: + *s = ReceiptItemAgentTypeCommissioner + return nil + case ReceiptItemAgentTypeAgent: + *s = ReceiptItemAgentTypeAgent + return nil + default: + return errors.Errorf("invalid value: %q", data) + } +} + +// Сумма в выбранной валюте. +type ReceiptItemAmount struct { + // Сумма в выбранной валюте. Всегда дробное значение. + // Разделитель дробной части — точка, разделитель тысяч + // отсутствует. Количество знаков после точки зависит + // от выбранной валюты. Пример: 1000.00. + Value string `json:"value"` + Currency CurrencyCode `json:"currency"` +} + +// GetValue returns the value of Value. +func (s *ReceiptItemAmount) GetValue() string { + return s.Value +} + +// GetCurrency returns the value of Currency. +func (s *ReceiptItemAmount) GetCurrency() CurrencyCode { + return s.Currency +} + +// SetValue sets the value of Value. +func (s *ReceiptItemAmount) SetValue(val string) { + s.Value = val +} + +// SetCurrency sets the value of Currency. +func (s *ReceiptItemAmount) SetCurrency(val CurrencyCode) { + s.Currency = val +} + +type ReceiptItemCountryOfOriginCode string + +type ReceiptItemCustomsDeclarationNumber string + +type ReceiptItemDescription string + +type ReceiptItemExcise string + +// Мера количества предмета расчета (тег в 54 ФЗ — 2108) — +// единица измерения товара, например штуки, граммы. +// Обязательный параметр, если используете Чеки от ЮKassa +// или онлайн-кассу, обновленную до ФФД 1.2. Перечень +// возможных значений: * для Чеков от ЮKassa: https://yookassa. +// ru/developers/payment-acceptance/receipts/54fz/yoomoney/parameters-values#measure * для +// сторонних онлайн-касс: https://yookassa. +// ru/developers/payment-acceptance/receipts/54fz/other-services/parameters-values#measure. +// Ref: #/components/schemas/ReceiptItemMeasure +type ReceiptItemMeasure string + +const ( + ReceiptItemMeasurePiece ReceiptItemMeasure = "piece" + ReceiptItemMeasureGram ReceiptItemMeasure = "gram" + ReceiptItemMeasureKilogram ReceiptItemMeasure = "kilogram" + ReceiptItemMeasureTon ReceiptItemMeasure = "ton" + ReceiptItemMeasureCentimeter ReceiptItemMeasure = "centimeter" + ReceiptItemMeasureDecimeter ReceiptItemMeasure = "decimeter" + ReceiptItemMeasureMeter ReceiptItemMeasure = "meter" + ReceiptItemMeasureSquareCentimeter ReceiptItemMeasure = "square_centimeter" + ReceiptItemMeasureSquareDecimeter ReceiptItemMeasure = "square_decimeter" + ReceiptItemMeasureSquareMeter ReceiptItemMeasure = "square_meter" + ReceiptItemMeasureMilliliter ReceiptItemMeasure = "milliliter" + ReceiptItemMeasureLiter ReceiptItemMeasure = "liter" + ReceiptItemMeasureCubicMeter ReceiptItemMeasure = "cubic_meter" + ReceiptItemMeasureKilowattHour ReceiptItemMeasure = "kilowatt_hour" + ReceiptItemMeasureGigacalorie ReceiptItemMeasure = "gigacalorie" + ReceiptItemMeasureDay ReceiptItemMeasure = "day" + ReceiptItemMeasureHour ReceiptItemMeasure = "hour" + ReceiptItemMeasureMinute ReceiptItemMeasure = "minute" + ReceiptItemMeasureSecond ReceiptItemMeasure = "second" + ReceiptItemMeasureKilobyte ReceiptItemMeasure = "kilobyte" + ReceiptItemMeasureMegabyte ReceiptItemMeasure = "megabyte" + ReceiptItemMeasureGigabyte ReceiptItemMeasure = "gigabyte" + ReceiptItemMeasureTerabyte ReceiptItemMeasure = "terabyte" + ReceiptItemMeasureAnother ReceiptItemMeasure = "another" +) + +// AllValues returns all ReceiptItemMeasure values. +func (ReceiptItemMeasure) AllValues() []ReceiptItemMeasure { + return []ReceiptItemMeasure{ + ReceiptItemMeasurePiece, + ReceiptItemMeasureGram, + ReceiptItemMeasureKilogram, + ReceiptItemMeasureTon, + ReceiptItemMeasureCentimeter, + ReceiptItemMeasureDecimeter, + ReceiptItemMeasureMeter, + ReceiptItemMeasureSquareCentimeter, + ReceiptItemMeasureSquareDecimeter, + ReceiptItemMeasureSquareMeter, + ReceiptItemMeasureMilliliter, + ReceiptItemMeasureLiter, + ReceiptItemMeasureCubicMeter, + ReceiptItemMeasureKilowattHour, + ReceiptItemMeasureGigacalorie, + ReceiptItemMeasureDay, + ReceiptItemMeasureHour, + ReceiptItemMeasureMinute, + ReceiptItemMeasureSecond, + ReceiptItemMeasureKilobyte, + ReceiptItemMeasureMegabyte, + ReceiptItemMeasureGigabyte, + ReceiptItemMeasureTerabyte, + ReceiptItemMeasureAnother, + } +} + +// MarshalText implements encoding.TextMarshaler. +func (s ReceiptItemMeasure) MarshalText() ([]byte, error) { + switch s { + case ReceiptItemMeasurePiece: + return []byte(s), nil + case ReceiptItemMeasureGram: + return []byte(s), nil + case ReceiptItemMeasureKilogram: + return []byte(s), nil + case ReceiptItemMeasureTon: + return []byte(s), nil + case ReceiptItemMeasureCentimeter: + return []byte(s), nil + case ReceiptItemMeasureDecimeter: + return []byte(s), nil + case ReceiptItemMeasureMeter: + return []byte(s), nil + case ReceiptItemMeasureSquareCentimeter: + return []byte(s), nil + case ReceiptItemMeasureSquareDecimeter: + return []byte(s), nil + case ReceiptItemMeasureSquareMeter: + return []byte(s), nil + case ReceiptItemMeasureMilliliter: + return []byte(s), nil + case ReceiptItemMeasureLiter: + return []byte(s), nil + case ReceiptItemMeasureCubicMeter: + return []byte(s), nil + case ReceiptItemMeasureKilowattHour: + return []byte(s), nil + case ReceiptItemMeasureGigacalorie: + return []byte(s), nil + case ReceiptItemMeasureDay: + return []byte(s), nil + case ReceiptItemMeasureHour: + return []byte(s), nil + case ReceiptItemMeasureMinute: + return []byte(s), nil + case ReceiptItemMeasureSecond: + return []byte(s), nil + case ReceiptItemMeasureKilobyte: + return []byte(s), nil + case ReceiptItemMeasureMegabyte: + return []byte(s), nil + case ReceiptItemMeasureGigabyte: + return []byte(s), nil + case ReceiptItemMeasureTerabyte: + return []byte(s), nil + case ReceiptItemMeasureAnother: + return []byte(s), nil + default: + return nil, errors.Errorf("invalid value: %q", s) + } +} + +// UnmarshalText implements encoding.TextUnmarshaler. +func (s *ReceiptItemMeasure) UnmarshalText(data []byte) error { + switch ReceiptItemMeasure(data) { + case ReceiptItemMeasurePiece: + *s = ReceiptItemMeasurePiece + return nil + case ReceiptItemMeasureGram: + *s = ReceiptItemMeasureGram + return nil + case ReceiptItemMeasureKilogram: + *s = ReceiptItemMeasureKilogram + return nil + case ReceiptItemMeasureTon: + *s = ReceiptItemMeasureTon + return nil + case ReceiptItemMeasureCentimeter: + *s = ReceiptItemMeasureCentimeter + return nil + case ReceiptItemMeasureDecimeter: + *s = ReceiptItemMeasureDecimeter + return nil + case ReceiptItemMeasureMeter: + *s = ReceiptItemMeasureMeter + return nil + case ReceiptItemMeasureSquareCentimeter: + *s = ReceiptItemMeasureSquareCentimeter + return nil + case ReceiptItemMeasureSquareDecimeter: + *s = ReceiptItemMeasureSquareDecimeter + return nil + case ReceiptItemMeasureSquareMeter: + *s = ReceiptItemMeasureSquareMeter + return nil + case ReceiptItemMeasureMilliliter: + *s = ReceiptItemMeasureMilliliter + return nil + case ReceiptItemMeasureLiter: + *s = ReceiptItemMeasureLiter + return nil + case ReceiptItemMeasureCubicMeter: + *s = ReceiptItemMeasureCubicMeter + return nil + case ReceiptItemMeasureKilowattHour: + *s = ReceiptItemMeasureKilowattHour + return nil + case ReceiptItemMeasureGigacalorie: + *s = ReceiptItemMeasureGigacalorie + return nil + case ReceiptItemMeasureDay: + *s = ReceiptItemMeasureDay + return nil + case ReceiptItemMeasureHour: + *s = ReceiptItemMeasureHour + return nil + case ReceiptItemMeasureMinute: + *s = ReceiptItemMeasureMinute + return nil + case ReceiptItemMeasureSecond: + *s = ReceiptItemMeasureSecond + return nil + case ReceiptItemMeasureKilobyte: + *s = ReceiptItemMeasureKilobyte + return nil + case ReceiptItemMeasureMegabyte: + *s = ReceiptItemMeasureMegabyte + return nil + case ReceiptItemMeasureGigabyte: + *s = ReceiptItemMeasureGigabyte + return nil + case ReceiptItemMeasureTerabyte: + *s = ReceiptItemMeasureTerabyte + return nil + case ReceiptItemMeasureAnother: + *s = ReceiptItemMeasureAnother + return nil + default: + return errors.Errorf("invalid value: %q", data) + } +} + +// Признак способа расчета (тег в 54 ФЗ — 1214) — отражает +// тип оплаты и факт передачи товара. Пример: покупатель +// полностью оплачивает товар и сразу получает его. В +// этом случае нужно передать значение full_payment (полный +// расчет). Перечень возможных значений: * для Чеков от +// ЮKassa: https://yookassa. +// ru/developers/payment-acceptance/receipts/54fz/yoomoney/parameters-values#payment-mode * для +// сторонних онлайн-касс: https://yookassa. +// ru/developers/payment-acceptance/receipts/54fz/other-services/parameters-values#payment-mode. +// Ref: #/components/schemas/ReceiptItemPaymentMode +type ReceiptItemPaymentMode string + +const ( + ReceiptItemPaymentModeFullPrepayment ReceiptItemPaymentMode = "full_prepayment" + ReceiptItemPaymentModePartialPrepayment ReceiptItemPaymentMode = "partial_prepayment" + ReceiptItemPaymentModeAdvance ReceiptItemPaymentMode = "advance" + ReceiptItemPaymentModeFullPayment ReceiptItemPaymentMode = "full_payment" + ReceiptItemPaymentModePartialPayment ReceiptItemPaymentMode = "partial_payment" + ReceiptItemPaymentModeCredit ReceiptItemPaymentMode = "credit" + ReceiptItemPaymentModeCreditPayment ReceiptItemPaymentMode = "credit_payment" +) + +// AllValues returns all ReceiptItemPaymentMode values. +func (ReceiptItemPaymentMode) AllValues() []ReceiptItemPaymentMode { + return []ReceiptItemPaymentMode{ + ReceiptItemPaymentModeFullPrepayment, + ReceiptItemPaymentModePartialPrepayment, + ReceiptItemPaymentModeAdvance, + ReceiptItemPaymentModeFullPayment, + ReceiptItemPaymentModePartialPayment, + ReceiptItemPaymentModeCredit, + ReceiptItemPaymentModeCreditPayment, + } +} + +// MarshalText implements encoding.TextMarshaler. +func (s ReceiptItemPaymentMode) MarshalText() ([]byte, error) { + switch s { + case ReceiptItemPaymentModeFullPrepayment: + return []byte(s), nil + case ReceiptItemPaymentModePartialPrepayment: + return []byte(s), nil + case ReceiptItemPaymentModeAdvance: + return []byte(s), nil + case ReceiptItemPaymentModeFullPayment: + return []byte(s), nil + case ReceiptItemPaymentModePartialPayment: + return []byte(s), nil + case ReceiptItemPaymentModeCredit: + return []byte(s), nil + case ReceiptItemPaymentModeCreditPayment: + return []byte(s), nil + default: + return nil, errors.Errorf("invalid value: %q", s) + } +} + +// UnmarshalText implements encoding.TextUnmarshaler. +func (s *ReceiptItemPaymentMode) UnmarshalText(data []byte) error { + switch ReceiptItemPaymentMode(data) { + case ReceiptItemPaymentModeFullPrepayment: + *s = ReceiptItemPaymentModeFullPrepayment + return nil + case ReceiptItemPaymentModePartialPrepayment: + *s = ReceiptItemPaymentModePartialPrepayment + return nil + case ReceiptItemPaymentModeAdvance: + *s = ReceiptItemPaymentModeAdvance + return nil + case ReceiptItemPaymentModeFullPayment: + *s = ReceiptItemPaymentModeFullPayment + return nil + case ReceiptItemPaymentModePartialPayment: + *s = ReceiptItemPaymentModePartialPayment + return nil + case ReceiptItemPaymentModeCredit: + *s = ReceiptItemPaymentModeCredit + return nil + case ReceiptItemPaymentModeCreditPayment: + *s = ReceiptItemPaymentModeCreditPayment + return nil + default: + return errors.Errorf("invalid value: %q", data) + } +} + +// Признак предмета расчета (тег в 54 ФЗ — 1212) — это то, за +// что принимается оплата, например товар, услуга. +// Перечень возможных значений: * для Чеков от ЮKassa: +// https://yookassa. +// ru/developers/payment-acceptance/receipts/54fz/yoomoney/parameters-values#payment-subject * для +// сторонних онлайн-касс: https://yookassa. +// ru/developers/payment-acceptance/receipts/54fz/other-services/parameters-values#payment-subject. +// Ref: #/components/schemas/ReceiptItemPaymentSubject +type ReceiptItemPaymentSubject string + +const ( + ReceiptItemPaymentSubjectCommodity ReceiptItemPaymentSubject = "commodity" + ReceiptItemPaymentSubjectExcise ReceiptItemPaymentSubject = "excise" + ReceiptItemPaymentSubjectJob ReceiptItemPaymentSubject = "job" + ReceiptItemPaymentSubjectService ReceiptItemPaymentSubject = "service" + ReceiptItemPaymentSubjectGamblingBet ReceiptItemPaymentSubject = "gambling_bet" + ReceiptItemPaymentSubjectGamblingPrize ReceiptItemPaymentSubject = "gambling_prize" + ReceiptItemPaymentSubjectLottery ReceiptItemPaymentSubject = "lottery" + ReceiptItemPaymentSubjectLotteryPrize ReceiptItemPaymentSubject = "lottery_prize" + ReceiptItemPaymentSubjectIntellectualActivity ReceiptItemPaymentSubject = "intellectual_activity" + ReceiptItemPaymentSubjectPayment ReceiptItemPaymentSubject = "payment" + ReceiptItemPaymentSubjectAgentCommission ReceiptItemPaymentSubject = "agent_commission" + ReceiptItemPaymentSubjectPropertyRight ReceiptItemPaymentSubject = "property_right" + ReceiptItemPaymentSubjectNonOperatingGain ReceiptItemPaymentSubject = "non_operating_gain" + ReceiptItemPaymentSubjectInsurancePremium ReceiptItemPaymentSubject = "insurance_premium" + ReceiptItemPaymentSubjectSalesTax ReceiptItemPaymentSubject = "sales_tax" + ReceiptItemPaymentSubjectResortFee ReceiptItemPaymentSubject = "resort_fee" + ReceiptItemPaymentSubjectComposite ReceiptItemPaymentSubject = "composite" + ReceiptItemPaymentSubjectAnother ReceiptItemPaymentSubject = "another" + ReceiptItemPaymentSubjectFine ReceiptItemPaymentSubject = "fine" + ReceiptItemPaymentSubjectTax ReceiptItemPaymentSubject = "tax" + ReceiptItemPaymentSubjectLien ReceiptItemPaymentSubject = "lien" + ReceiptItemPaymentSubjectCost ReceiptItemPaymentSubject = "cost" + ReceiptItemPaymentSubjectPensionInsuranceWithoutPayouts ReceiptItemPaymentSubject = "pension_insurance_without_payouts" + ReceiptItemPaymentSubjectPensionInsuranceWithPayouts ReceiptItemPaymentSubject = "pension_insurance_with_payouts" + ReceiptItemPaymentSubjectHealthInsuranceWithoutPayouts ReceiptItemPaymentSubject = "health_insurance_without_payouts" + ReceiptItemPaymentSubjectHealthInsuranceWithPayouts ReceiptItemPaymentSubject = "health_insurance_with_payouts" + ReceiptItemPaymentSubjectHealthInsurance ReceiptItemPaymentSubject = "health_insurance" + ReceiptItemPaymentSubjectCasino ReceiptItemPaymentSubject = "casino" + ReceiptItemPaymentSubjectAgentWithdrawals ReceiptItemPaymentSubject = "agent_withdrawals" + ReceiptItemPaymentSubjectNonMarkedExcise ReceiptItemPaymentSubject = "non_marked_excise" + ReceiptItemPaymentSubjectMarkedExcise ReceiptItemPaymentSubject = "marked_excise" + ReceiptItemPaymentSubjectMarked ReceiptItemPaymentSubject = "marked" + ReceiptItemPaymentSubjectNonMarked ReceiptItemPaymentSubject = "non_marked" +) + +// AllValues returns all ReceiptItemPaymentSubject values. +func (ReceiptItemPaymentSubject) AllValues() []ReceiptItemPaymentSubject { + return []ReceiptItemPaymentSubject{ + ReceiptItemPaymentSubjectCommodity, + ReceiptItemPaymentSubjectExcise, + ReceiptItemPaymentSubjectJob, + ReceiptItemPaymentSubjectService, + ReceiptItemPaymentSubjectGamblingBet, + ReceiptItemPaymentSubjectGamblingPrize, + ReceiptItemPaymentSubjectLottery, + ReceiptItemPaymentSubjectLotteryPrize, + ReceiptItemPaymentSubjectIntellectualActivity, + ReceiptItemPaymentSubjectPayment, + ReceiptItemPaymentSubjectAgentCommission, + ReceiptItemPaymentSubjectPropertyRight, + ReceiptItemPaymentSubjectNonOperatingGain, + ReceiptItemPaymentSubjectInsurancePremium, + ReceiptItemPaymentSubjectSalesTax, + ReceiptItemPaymentSubjectResortFee, + ReceiptItemPaymentSubjectComposite, + ReceiptItemPaymentSubjectAnother, + ReceiptItemPaymentSubjectFine, + ReceiptItemPaymentSubjectTax, + ReceiptItemPaymentSubjectLien, + ReceiptItemPaymentSubjectCost, + ReceiptItemPaymentSubjectPensionInsuranceWithoutPayouts, + ReceiptItemPaymentSubjectPensionInsuranceWithPayouts, + ReceiptItemPaymentSubjectHealthInsuranceWithoutPayouts, + ReceiptItemPaymentSubjectHealthInsuranceWithPayouts, + ReceiptItemPaymentSubjectHealthInsurance, + ReceiptItemPaymentSubjectCasino, + ReceiptItemPaymentSubjectAgentWithdrawals, + ReceiptItemPaymentSubjectNonMarkedExcise, + ReceiptItemPaymentSubjectMarkedExcise, + ReceiptItemPaymentSubjectMarked, + ReceiptItemPaymentSubjectNonMarked, + } +} + +// MarshalText implements encoding.TextMarshaler. +func (s ReceiptItemPaymentSubject) MarshalText() ([]byte, error) { + switch s { + case ReceiptItemPaymentSubjectCommodity: + return []byte(s), nil + case ReceiptItemPaymentSubjectExcise: + return []byte(s), nil + case ReceiptItemPaymentSubjectJob: + return []byte(s), nil + case ReceiptItemPaymentSubjectService: + return []byte(s), nil + case ReceiptItemPaymentSubjectGamblingBet: + return []byte(s), nil + case ReceiptItemPaymentSubjectGamblingPrize: + return []byte(s), nil + case ReceiptItemPaymentSubjectLottery: + return []byte(s), nil + case ReceiptItemPaymentSubjectLotteryPrize: + return []byte(s), nil + case ReceiptItemPaymentSubjectIntellectualActivity: + return []byte(s), nil + case ReceiptItemPaymentSubjectPayment: + return []byte(s), nil + case ReceiptItemPaymentSubjectAgentCommission: + return []byte(s), nil + case ReceiptItemPaymentSubjectPropertyRight: + return []byte(s), nil + case ReceiptItemPaymentSubjectNonOperatingGain: + return []byte(s), nil + case ReceiptItemPaymentSubjectInsurancePremium: + return []byte(s), nil + case ReceiptItemPaymentSubjectSalesTax: + return []byte(s), nil + case ReceiptItemPaymentSubjectResortFee: + return []byte(s), nil + case ReceiptItemPaymentSubjectComposite: + return []byte(s), nil + case ReceiptItemPaymentSubjectAnother: + return []byte(s), nil + case ReceiptItemPaymentSubjectFine: + return []byte(s), nil + case ReceiptItemPaymentSubjectTax: + return []byte(s), nil + case ReceiptItemPaymentSubjectLien: + return []byte(s), nil + case ReceiptItemPaymentSubjectCost: + return []byte(s), nil + case ReceiptItemPaymentSubjectPensionInsuranceWithoutPayouts: + return []byte(s), nil + case ReceiptItemPaymentSubjectPensionInsuranceWithPayouts: + return []byte(s), nil + case ReceiptItemPaymentSubjectHealthInsuranceWithoutPayouts: + return []byte(s), nil + case ReceiptItemPaymentSubjectHealthInsuranceWithPayouts: + return []byte(s), nil + case ReceiptItemPaymentSubjectHealthInsurance: + return []byte(s), nil + case ReceiptItemPaymentSubjectCasino: + return []byte(s), nil + case ReceiptItemPaymentSubjectAgentWithdrawals: + return []byte(s), nil + case ReceiptItemPaymentSubjectNonMarkedExcise: + return []byte(s), nil + case ReceiptItemPaymentSubjectMarkedExcise: + return []byte(s), nil + case ReceiptItemPaymentSubjectMarked: + return []byte(s), nil + case ReceiptItemPaymentSubjectNonMarked: + return []byte(s), nil + default: + return nil, errors.Errorf("invalid value: %q", s) + } +} + +// UnmarshalText implements encoding.TextUnmarshaler. +func (s *ReceiptItemPaymentSubject) UnmarshalText(data []byte) error { + switch ReceiptItemPaymentSubject(data) { + case ReceiptItemPaymentSubjectCommodity: + *s = ReceiptItemPaymentSubjectCommodity + return nil + case ReceiptItemPaymentSubjectExcise: + *s = ReceiptItemPaymentSubjectExcise + return nil + case ReceiptItemPaymentSubjectJob: + *s = ReceiptItemPaymentSubjectJob + return nil + case ReceiptItemPaymentSubjectService: + *s = ReceiptItemPaymentSubjectService + return nil + case ReceiptItemPaymentSubjectGamblingBet: + *s = ReceiptItemPaymentSubjectGamblingBet + return nil + case ReceiptItemPaymentSubjectGamblingPrize: + *s = ReceiptItemPaymentSubjectGamblingPrize + return nil + case ReceiptItemPaymentSubjectLottery: + *s = ReceiptItemPaymentSubjectLottery + return nil + case ReceiptItemPaymentSubjectLotteryPrize: + *s = ReceiptItemPaymentSubjectLotteryPrize + return nil + case ReceiptItemPaymentSubjectIntellectualActivity: + *s = ReceiptItemPaymentSubjectIntellectualActivity + return nil + case ReceiptItemPaymentSubjectPayment: + *s = ReceiptItemPaymentSubjectPayment + return nil + case ReceiptItemPaymentSubjectAgentCommission: + *s = ReceiptItemPaymentSubjectAgentCommission + return nil + case ReceiptItemPaymentSubjectPropertyRight: + *s = ReceiptItemPaymentSubjectPropertyRight + return nil + case ReceiptItemPaymentSubjectNonOperatingGain: + *s = ReceiptItemPaymentSubjectNonOperatingGain + return nil + case ReceiptItemPaymentSubjectInsurancePremium: + *s = ReceiptItemPaymentSubjectInsurancePremium + return nil + case ReceiptItemPaymentSubjectSalesTax: + *s = ReceiptItemPaymentSubjectSalesTax + return nil + case ReceiptItemPaymentSubjectResortFee: + *s = ReceiptItemPaymentSubjectResortFee + return nil + case ReceiptItemPaymentSubjectComposite: + *s = ReceiptItemPaymentSubjectComposite + return nil + case ReceiptItemPaymentSubjectAnother: + *s = ReceiptItemPaymentSubjectAnother + return nil + case ReceiptItemPaymentSubjectFine: + *s = ReceiptItemPaymentSubjectFine + return nil + case ReceiptItemPaymentSubjectTax: + *s = ReceiptItemPaymentSubjectTax + return nil + case ReceiptItemPaymentSubjectLien: + *s = ReceiptItemPaymentSubjectLien + return nil + case ReceiptItemPaymentSubjectCost: + *s = ReceiptItemPaymentSubjectCost + return nil + case ReceiptItemPaymentSubjectPensionInsuranceWithoutPayouts: + *s = ReceiptItemPaymentSubjectPensionInsuranceWithoutPayouts + return nil + case ReceiptItemPaymentSubjectPensionInsuranceWithPayouts: + *s = ReceiptItemPaymentSubjectPensionInsuranceWithPayouts + return nil + case ReceiptItemPaymentSubjectHealthInsuranceWithoutPayouts: + *s = ReceiptItemPaymentSubjectHealthInsuranceWithoutPayouts + return nil + case ReceiptItemPaymentSubjectHealthInsuranceWithPayouts: + *s = ReceiptItemPaymentSubjectHealthInsuranceWithPayouts + return nil + case ReceiptItemPaymentSubjectHealthInsurance: + *s = ReceiptItemPaymentSubjectHealthInsurance + return nil + case ReceiptItemPaymentSubjectCasino: + *s = ReceiptItemPaymentSubjectCasino + return nil + case ReceiptItemPaymentSubjectAgentWithdrawals: + *s = ReceiptItemPaymentSubjectAgentWithdrawals + return nil + case ReceiptItemPaymentSubjectNonMarkedExcise: + *s = ReceiptItemPaymentSubjectNonMarkedExcise + return nil + case ReceiptItemPaymentSubjectMarkedExcise: + *s = ReceiptItemPaymentSubjectMarkedExcise + return nil + case ReceiptItemPaymentSubjectMarked: + *s = ReceiptItemPaymentSubjectMarked + return nil + case ReceiptItemPaymentSubjectNonMarked: + *s = ReceiptItemPaymentSubjectNonMarked + return nil + default: + return errors.Errorf("invalid value: %q", data) + } +} + +type ReceiptItemPaymentSubjectIndustryDetails []IndustryDetails + +type ReceiptItemPlannedStatus int32 + +type ReceiptItemProductCode string + +type ReceiptItemQuantity float64 + +// Merged schema. +// Ref: #/components/schemas/ReceiptItemSupplierWithInn +type ReceiptItemSupplierWithInn struct { + // Наименование поставщика (тег в 54 ФЗ — 1225). Параметр + // предусмотрен форматом фискальных документов (ФФД) и + // является обязательным, начиная с версии 1.1. + Name OptString `json:"name"` + Phone OptString `json:"phone"` + Inn OptString `json:"inn"` +} + +// GetName returns the value of Name. +func (s *ReceiptItemSupplierWithInn) GetName() OptString { + return s.Name +} + +// GetPhone returns the value of Phone. +func (s *ReceiptItemSupplierWithInn) GetPhone() OptString { + return s.Phone +} + +// GetInn returns the value of Inn. +func (s *ReceiptItemSupplierWithInn) GetInn() OptString { + return s.Inn +} + +// SetName sets the value of Name. +func (s *ReceiptItemSupplierWithInn) SetName(val OptString) { + s.Name = val +} + +// SetPhone sets the value of Phone. +func (s *ReceiptItemSupplierWithInn) SetPhone(val OptString) { + s.Phone = val +} + +// SetInn sets the value of Inn. +func (s *ReceiptItemSupplierWithInn) SetInn(val OptString) { + s.Inn = val +} + +type ReceiptItemVatCode int32 + +// Данные операционного реквизита чека. +type ReceiptReceiptOperationalDetails struct { + // Идентификатор операции (тег в 54 ФЗ — 1271). Число от 0 до + // 255. + OperationID int `json:"operation_id"` + // Данные операции (тег в 54 ФЗ — 1272). + Value string `json:"value"` + // Время создания операции (тег в 54 ФЗ — 1273). Указывается + // по UTC: https://ru.wikipedia. + // org/wiki/%D0%92%D1%81%D0%B5%D0%BC%D0%B8%D1%80%D0%BD%D0%BE%D0%B5_%D0%BA%D0%BE%D0%BE%D1%80%D0%B4%D0%B8%D0%BD%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%BE%D0%B5_%D0%B2%D1%80%D0%B5%D0%BC%D1%8F и передается в формате ISO 8601: https://en.wikipedia.org/wiki/ISO_8601. Пример: 2017-11-03T11:52:31.827Z. + CreatedAt time.Time `json:"created_at"` +} + +// GetOperationID returns the value of OperationID. +func (s *ReceiptReceiptOperationalDetails) GetOperationID() int { + return s.OperationID +} + +// GetValue returns the value of Value. +func (s *ReceiptReceiptOperationalDetails) GetValue() string { + return s.Value +} + +// GetCreatedAt returns the value of CreatedAt. +func (s *ReceiptReceiptOperationalDetails) GetCreatedAt() time.Time { + return s.CreatedAt +} + +// SetOperationID sets the value of OperationID. +func (s *ReceiptReceiptOperationalDetails) SetOperationID(val int) { + s.OperationID = val +} + +// SetValue sets the value of Value. +func (s *ReceiptReceiptOperationalDetails) SetValue(val string) { + s.Value = val +} + +// SetCreatedAt sets the value of CreatedAt. +func (s *ReceiptReceiptOperationalDetails) SetCreatedAt(val time.Time) { + s.CreatedAt = val +} + +// Ref: #/components/schemas/ReceiptRegistrationStatus +type ReceiptRegistrationStatus string + +const ( + ReceiptRegistrationStatusPending ReceiptRegistrationStatus = "pending" + ReceiptRegistrationStatusSucceeded ReceiptRegistrationStatus = "succeeded" + ReceiptRegistrationStatusCanceled ReceiptRegistrationStatus = "canceled" +) + +// AllValues returns all ReceiptRegistrationStatus values. +func (ReceiptRegistrationStatus) AllValues() []ReceiptRegistrationStatus { + return []ReceiptRegistrationStatus{ + ReceiptRegistrationStatusPending, + ReceiptRegistrationStatusSucceeded, + ReceiptRegistrationStatusCanceled, + } +} + +// MarshalText implements encoding.TextMarshaler. +func (s ReceiptRegistrationStatus) MarshalText() ([]byte, error) { + switch s { + case ReceiptRegistrationStatusPending: + return []byte(s), nil + case ReceiptRegistrationStatusSucceeded: + return []byte(s), nil + case ReceiptRegistrationStatusCanceled: + return []byte(s), nil + default: + return nil, errors.Errorf("invalid value: %q", s) + } +} + +// UnmarshalText implements encoding.TextUnmarshaler. +func (s *ReceiptRegistrationStatus) UnmarshalText(data []byte) error { + switch ReceiptRegistrationStatus(data) { + case ReceiptRegistrationStatusPending: + *s = ReceiptRegistrationStatusPending + return nil + case ReceiptRegistrationStatusSucceeded: + *s = ReceiptRegistrationStatusSucceeded + return nil + case ReceiptRegistrationStatusCanceled: + *s = ReceiptRegistrationStatusCanceled + return nil + default: + return errors.Errorf("invalid value: %q", data) + } +} + +type ReceiptStatus string + +const ( + ReceiptStatusPending ReceiptStatus = "pending" + ReceiptStatusSucceeded ReceiptStatus = "succeeded" + ReceiptStatusCanceled ReceiptStatus = "canceled" +) + +// AllValues returns all ReceiptStatus values. +func (ReceiptStatus) AllValues() []ReceiptStatus { + return []ReceiptStatus{ + ReceiptStatusPending, + ReceiptStatusSucceeded, + ReceiptStatusCanceled, + } +} + +// MarshalText implements encoding.TextMarshaler. +func (s ReceiptStatus) MarshalText() ([]byte, error) { + switch s { + case ReceiptStatusPending: + return []byte(s), nil + case ReceiptStatusSucceeded: + return []byte(s), nil + case ReceiptStatusCanceled: + return []byte(s), nil + default: + return nil, errors.Errorf("invalid value: %q", s) + } +} + +// UnmarshalText implements encoding.TextUnmarshaler. +func (s *ReceiptStatus) UnmarshalText(data []byte) error { + switch ReceiptStatus(data) { + case ReceiptStatusPending: + *s = ReceiptStatusPending + return nil + case ReceiptStatusSucceeded: + *s = ReceiptStatusSucceeded + return nil + case ReceiptStatusCanceled: + *s = ReceiptStatusCanceled + return nil + default: + return errors.Errorf("invalid value: %q", data) + } +} + +// Тип чека в онлайн-кассе: приход (payment) или возврат +// прихода (refund). +// Ref: #/components/schemas/ReceiptType +type ReceiptType string + +const ( + ReceiptTypePayment ReceiptType = "payment" + ReceiptTypeRefund ReceiptType = "refund" +) + +// AllValues returns all ReceiptType values. +func (ReceiptType) AllValues() []ReceiptType { + return []ReceiptType{ + ReceiptTypePayment, + ReceiptTypeRefund, + } +} + +// MarshalText implements encoding.TextMarshaler. +func (s ReceiptType) MarshalText() ([]byte, error) { + switch s { + case ReceiptTypePayment: + return []byte(s), nil + case ReceiptTypeRefund: + return []byte(s), nil + default: + return nil, errors.Errorf("invalid value: %q", s) + } +} + +// UnmarshalText implements encoding.TextUnmarshaler. +func (s *ReceiptType) UnmarshalText(data []byte) error { + switch ReceiptType(data) { + case ReceiptTypePayment: + *s = ReceiptTypePayment + return nil + case ReceiptTypeRefund: + *s = ReceiptTypeRefund + return nil + default: + return errors.Errorf("invalid value: %q", data) + } +} + +// Список чеков, созданных за последние три года. Чеки +// отсортированы по времени создания в порядке убывания +// (от новых к старым). Если результатов больше, чем +// задано в limit, список будет выводиться фрагментами. В +// этом случае в ответе на запрос вернется фрагмент +// списка и параметр next_cursor с указателем на следующий +// фрагмент. +type ReceiptsGetOK struct { + // Формат выдачи результатов запроса. Возможное + // значение: list (список). + Type ReceiptsGetOKType `json:"type"` + Items []Receipt `json:"items"` + NextCursor OptNextCursor `json:"next_cursor"` +} + +// GetType returns the value of Type. +func (s *ReceiptsGetOK) GetType() ReceiptsGetOKType { + return s.Type +} + +// GetItems returns the value of Items. +func (s *ReceiptsGetOK) GetItems() []Receipt { + return s.Items +} + +// GetNextCursor returns the value of NextCursor. +func (s *ReceiptsGetOK) GetNextCursor() OptNextCursor { + return s.NextCursor +} + +// SetType sets the value of Type. +func (s *ReceiptsGetOK) SetType(val ReceiptsGetOKType) { + s.Type = val +} + +// SetItems sets the value of Items. +func (s *ReceiptsGetOK) SetItems(val []Receipt) { + s.Items = val +} + +// SetNextCursor sets the value of NextCursor. +func (s *ReceiptsGetOK) SetNextCursor(val OptNextCursor) { + s.NextCursor = val +} + +func (*ReceiptsGetOK) receiptsGetRes() {} + +// Формат выдачи результатов запроса. Возможное +// значение: list (список). +type ReceiptsGetOKType string + +const ( + ReceiptsGetOKTypeList ReceiptsGetOKType = "list" +) + +// AllValues returns all ReceiptsGetOKType values. +func (ReceiptsGetOKType) AllValues() []ReceiptsGetOKType { + return []ReceiptsGetOKType{ + ReceiptsGetOKTypeList, + } +} + +// MarshalText implements encoding.TextMarshaler. +func (s ReceiptsGetOKType) MarshalText() ([]byte, error) { + switch s { + case ReceiptsGetOKTypeList: + return []byte(s), nil + default: + return nil, errors.Errorf("invalid value: %q", s) + } +} + +// UnmarshalText implements encoding.TextUnmarshaler. +func (s *ReceiptsGetOKType) UnmarshalText(data []byte) error { + switch ReceiptsGetOKType(data) { + case ReceiptsGetOKTypeList: + *s = ReceiptsGetOKTypeList + return nil + default: + return errors.Errorf("invalid value: %q", data) + } +} + +// Merged schema. +// Ref: #/components/schemas/ReceiverBankAccount +type ReceiverBankAccount struct { + Type ReceiverType `json:"type"` + // Номер банковского счета. Формат — 20 символов. + AccountNumber string `json:"account_number"` + // Банковский идентификационный код (БИК) банка, в + // котором открыт счет. Формат — 9 символов. + Bic string `json:"bic"` +} + +// GetType returns the value of Type. +func (s *ReceiverBankAccount) GetType() ReceiverType { + return s.Type +} + +// GetAccountNumber returns the value of AccountNumber. +func (s *ReceiverBankAccount) GetAccountNumber() string { + return s.AccountNumber +} + +// GetBic returns the value of Bic. +func (s *ReceiverBankAccount) GetBic() string { + return s.Bic +} + +// SetType sets the value of Type. +func (s *ReceiverBankAccount) SetType(val ReceiverType) { + s.Type = val +} + +// SetAccountNumber sets the value of AccountNumber. +func (s *ReceiverBankAccount) SetAccountNumber(val string) { + s.AccountNumber = val +} + +// SetBic sets the value of Bic. +func (s *ReceiverBankAccount) SetBic(val string) { + s.Bic = val +} + +// Merged schema. +// Ref: #/components/schemas/ReceiverDigitalWallet +type ReceiverDigitalWallet struct { + Type ReceiverType `json:"type"` + // Идентификатор электронного кошелька для пополнения. + // Максимум 20 символов. + AccountNumber string `json:"account_number"` +} + +// GetType returns the value of Type. +func (s *ReceiverDigitalWallet) GetType() ReceiverType { + return s.Type +} + +// GetAccountNumber returns the value of AccountNumber. +func (s *ReceiverDigitalWallet) GetAccountNumber() string { + return s.AccountNumber +} + +// SetType sets the value of Type. +func (s *ReceiverDigitalWallet) SetType(val ReceiverType) { + s.Type = val +} + +// SetAccountNumber sets the value of AccountNumber. +func (s *ReceiverDigitalWallet) SetAccountNumber(val string) { + s.AccountNumber = val +} + +// Merged schema. +// Ref: #/components/schemas/ReceiverMobileBalance +type ReceiverMobileBalance struct { + Type ReceiverType `json:"type"` + Phone string `json:"phone"` +} + +// GetType returns the value of Type. +func (s *ReceiverMobileBalance) GetType() ReceiverType { + return s.Type +} + +// GetPhone returns the value of Phone. +func (s *ReceiverMobileBalance) GetPhone() string { + return s.Phone +} + +// SetType sets the value of Type. +func (s *ReceiverMobileBalance) SetType(val ReceiverType) { + s.Type = val +} + +// SetPhone sets the value of Phone. +func (s *ReceiverMobileBalance) SetPhone(val string) { + s.Phone = val +} + +// Payment receiver code. +// Ref: #/components/schemas/ReceiverType +type ReceiverType string + +const ( + ReceiverTypeMobileBalance ReceiverType = "mobile_balance" + ReceiverTypeDigitalWallet ReceiverType = "digital_wallet" + ReceiverTypeBankAccount ReceiverType = "bank_account" +) + +// AllValues returns all ReceiverType values. +func (ReceiverType) AllValues() []ReceiverType { + return []ReceiverType{ + ReceiverTypeMobileBalance, + ReceiverTypeDigitalWallet, + ReceiverTypeBankAccount, + } +} + +// MarshalText implements encoding.TextMarshaler. +func (s ReceiverType) MarshalText() ([]byte, error) { + switch s { + case ReceiverTypeMobileBalance: + return []byte(s), nil + case ReceiverTypeDigitalWallet: + return []byte(s), nil + case ReceiverTypeBankAccount: + return []byte(s), nil + default: + return nil, errors.Errorf("invalid value: %q", s) + } +} + +// UnmarshalText implements encoding.TextUnmarshaler. +func (s *ReceiverType) UnmarshalText(data []byte) error { + switch ReceiverType(data) { + case ReceiverTypeMobileBalance: + *s = ReceiverTypeMobileBalance + return nil + case ReceiverTypeDigitalWallet: + *s = ReceiverTypeDigitalWallet + return nil + case ReceiverTypeBankAccount: + *s = ReceiverTypeBankAccount + return nil + default: + return errors.Errorf("invalid value: %q", data) + } +} + +// Получатель платежа. Нужен, если вы разделяете потоки +// платежей в рамках одного аккаунта или создаете +// платеж в адрес другого аккаунта. +// Ref: #/components/schemas/Recipient +type Recipient struct { + GatewayID GatewayId `json:"gateway_id"` +} + +// GetGatewayID returns the value of GatewayID. +func (s *Recipient) GetGatewayID() GatewayId { + return s.GatewayID +} + +// SetGatewayID sets the value of GatewayID. +func (s *Recipient) SetGatewayID(val GatewayId) { + s.GatewayID = val +} + +// Refund object (Refund) contains all the relevant information about the payment refund. +// Ref: #/components/schemas/Refund +type Refund struct { + ID RefundId `json:"id"` + PaymentID PaymentId `json:"payment_id"` + Status RefundStatus `json:"status"` + CancellationDetails OptRefundCancellationDetails `json:"cancellation_details"` + ReceiptRegistration OptRefundReceiptRegistration `json:"receipt_registration"` + // Время создания возврата. Указывается по UTC: https://ru. + // wikipedia. + // org/wiki/%D0%92%D1%81%D0%B5%D0%BC%D0%B8%D1%80%D0%BD%D0%BE%D0%B5_%D0%BA%D0%BE%D0%BE%D1%80%D0%B4%D0%B8%D0%BD%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%BE%D0%B5_%D0%B2%D1%80%D0%B5%D0%BC%D1%8F и передается в формате ISO 8601: https://en.wikipedia.org/wiki/ISO_8601, например 2017-11-03T11:52:31.827Z. + CreatedAt time.Time `json:"created_at"` + Amount RefundAmount `json:"amount"` + // Основание для возврата денег пользователю. + Description OptString `json:"description"` + // Данные о том, с какого магазина и какую сумму нужно + // удержать для проведения возврата. Присутствует, если + // вы используете Сплитование платежей: https://yookassa. + // ru/developers/solutions-for-platforms/split-payments/basics. + Sources []RefundSourcesData `json:"sources"` + Deal OptRefundDealInfo `json:"deal"` + RefundMethod OptRefundRefundMethod `json:"refund_method"` + RefundAuthorizationDetails OptRefundAuthorizationDetails `json:"refund_authorization_details"` + Metadata OptMetadata `json:"metadata"` +} + +// GetID returns the value of ID. +func (s *Refund) GetID() RefundId { + return s.ID +} + +// GetPaymentID returns the value of PaymentID. +func (s *Refund) GetPaymentID() PaymentId { + return s.PaymentID +} + +// GetStatus returns the value of Status. +func (s *Refund) GetStatus() RefundStatus { + return s.Status +} + +// GetCancellationDetails returns the value of CancellationDetails. +func (s *Refund) GetCancellationDetails() OptRefundCancellationDetails { + return s.CancellationDetails +} + +// GetReceiptRegistration returns the value of ReceiptRegistration. +func (s *Refund) GetReceiptRegistration() OptRefundReceiptRegistration { + return s.ReceiptRegistration +} + +// GetCreatedAt returns the value of CreatedAt. +func (s *Refund) GetCreatedAt() time.Time { + return s.CreatedAt +} + +// GetAmount returns the value of Amount. +func (s *Refund) GetAmount() RefundAmount { + return s.Amount +} + +// GetDescription returns the value of Description. +func (s *Refund) GetDescription() OptString { + return s.Description +} + +// GetSources returns the value of Sources. +func (s *Refund) GetSources() []RefundSourcesData { + return s.Sources +} + +// GetDeal returns the value of Deal. +func (s *Refund) GetDeal() OptRefundDealInfo { + return s.Deal +} + +// GetRefundMethod returns the value of RefundMethod. +func (s *Refund) GetRefundMethod() OptRefundRefundMethod { + return s.RefundMethod +} + +// GetRefundAuthorizationDetails returns the value of RefundAuthorizationDetails. +func (s *Refund) GetRefundAuthorizationDetails() OptRefundAuthorizationDetails { + return s.RefundAuthorizationDetails +} + +// GetMetadata returns the value of Metadata. +func (s *Refund) GetMetadata() OptMetadata { + return s.Metadata +} + +// SetID sets the value of ID. +func (s *Refund) SetID(val RefundId) { + s.ID = val +} + +// SetPaymentID sets the value of PaymentID. +func (s *Refund) SetPaymentID(val PaymentId) { + s.PaymentID = val +} + +// SetStatus sets the value of Status. +func (s *Refund) SetStatus(val RefundStatus) { + s.Status = val +} + +// SetCancellationDetails sets the value of CancellationDetails. +func (s *Refund) SetCancellationDetails(val OptRefundCancellationDetails) { + s.CancellationDetails = val +} + +// SetReceiptRegistration sets the value of ReceiptRegistration. +func (s *Refund) SetReceiptRegistration(val OptRefundReceiptRegistration) { + s.ReceiptRegistration = val +} + +// SetCreatedAt sets the value of CreatedAt. +func (s *Refund) SetCreatedAt(val time.Time) { + s.CreatedAt = val +} + +// SetAmount sets the value of Amount. +func (s *Refund) SetAmount(val RefundAmount) { + s.Amount = val +} + +// SetDescription sets the value of Description. +func (s *Refund) SetDescription(val OptString) { + s.Description = val +} + +// SetSources sets the value of Sources. +func (s *Refund) SetSources(val []RefundSourcesData) { + s.Sources = val +} + +// SetDeal sets the value of Deal. +func (s *Refund) SetDeal(val OptRefundDealInfo) { + s.Deal = val +} + +// SetRefundMethod sets the value of RefundMethod. +func (s *Refund) SetRefundMethod(val OptRefundRefundMethod) { + s.RefundMethod = val +} + +// SetRefundAuthorizationDetails sets the value of RefundAuthorizationDetails. +func (s *Refund) SetRefundAuthorizationDetails(val OptRefundAuthorizationDetails) { + s.RefundAuthorizationDetails = val +} + +// SetMetadata sets the value of Metadata. +func (s *Refund) SetMetadata(val OptMetadata) { + s.Metadata = val +} + +func (*Refund) refundsPostRes() {} +func (*Refund) refundsRefundIDGetRes() {} + +// Сумма в выбранной валюте. +type RefundAmount struct { + // Сумма в выбранной валюте. Всегда дробное значение. + // Разделитель дробной части — точка, разделитель тысяч + // отсутствует. Количество знаков после точки зависит + // от выбранной валюты. Пример: 1000.00. + Value string `json:"value"` + Currency CurrencyCode `json:"currency"` +} + +// GetValue returns the value of Value. +func (s *RefundAmount) GetValue() string { + return s.Value +} + +// GetCurrency returns the value of Currency. +func (s *RefundAmount) GetCurrency() CurrencyCode { + return s.Currency +} + +// SetValue sets the value of Value. +func (s *RefundAmount) SetValue(val string) { + s.Value = val +} + +// SetCurrency sets the value of Currency. +func (s *RefundAmount) SetCurrency(val CurrencyCode) { + s.Currency = val +} + +// Refund authorization details. Presented only for refunds made by these payment methods: bank card, +// Mir Pay. +// Ref: #/components/schemas/RefundAuthorizationDetails +type RefundAuthorizationDetails struct { + Rrn OptRrn `json:"rrn"` +} + +// GetRrn returns the value of Rrn. +func (s *RefundAuthorizationDetails) GetRrn() OptRrn { + return s.Rrn +} + +// SetRrn sets the value of Rrn. +func (s *RefundAuthorizationDetails) SetRrn(val OptRrn) { + s.Rrn = val +} + +// Комментарий к статусу canceled: кто отменил возврат и по +// какой причине. +// Ref: #/components/schemas/RefundCancellationDetails +type RefundCancellationDetails struct { + // Участник процесса возврата, который принял решение + // отменить транзакцию. Перечень и описание возможных + // значений: https://yookassa. + // ru/developers/payment-acceptance/after-the-payment/refunds#declined-refunds-cancellation-details-party. + Party RefundCancellationDetailsParty `json:"party"` + // Причина отмены возврата. Перечень и описание + // возможных значений: https://yookassa. + // ru/developers/payment-acceptance/after-the-payment/refunds#declined-refunds-cancellation-details-reason. + Reason RefundCancellationDetailsReason `json:"reason"` +} + +// GetParty returns the value of Party. +func (s *RefundCancellationDetails) GetParty() RefundCancellationDetailsParty { + return s.Party +} + +// GetReason returns the value of Reason. +func (s *RefundCancellationDetails) GetReason() RefundCancellationDetailsReason { + return s.Reason +} + +// SetParty sets the value of Party. +func (s *RefundCancellationDetails) SetParty(val RefundCancellationDetailsParty) { + s.Party = val +} + +// SetReason sets the value of Reason. +func (s *RefundCancellationDetails) SetReason(val RefundCancellationDetailsReason) { + s.Reason = val +} + +// Участник процесса возврата, который принял решение +// отменить транзакцию. Перечень и описание возможных +// значений: https://yookassa. +// ru/developers/payment-acceptance/after-the-payment/refunds#declined-refunds-cancellation-details-party. +type RefundCancellationDetailsParty string + +const ( + RefundCancellationDetailsPartyYooMoney RefundCancellationDetailsParty = "yoo_money" + RefundCancellationDetailsPartyRefundNetwork RefundCancellationDetailsParty = "refund_network" +) + +// AllValues returns all RefundCancellationDetailsParty values. +func (RefundCancellationDetailsParty) AllValues() []RefundCancellationDetailsParty { + return []RefundCancellationDetailsParty{ + RefundCancellationDetailsPartyYooMoney, + RefundCancellationDetailsPartyRefundNetwork, + } +} + +// MarshalText implements encoding.TextMarshaler. +func (s RefundCancellationDetailsParty) MarshalText() ([]byte, error) { + switch s { + case RefundCancellationDetailsPartyYooMoney: + return []byte(s), nil + case RefundCancellationDetailsPartyRefundNetwork: + return []byte(s), nil + default: + return nil, errors.Errorf("invalid value: %q", s) + } +} + +// UnmarshalText implements encoding.TextUnmarshaler. +func (s *RefundCancellationDetailsParty) UnmarshalText(data []byte) error { + switch RefundCancellationDetailsParty(data) { + case RefundCancellationDetailsPartyYooMoney: + *s = RefundCancellationDetailsPartyYooMoney + return nil + case RefundCancellationDetailsPartyRefundNetwork: + *s = RefundCancellationDetailsPartyRefundNetwork + return nil + default: + return errors.Errorf("invalid value: %q", data) + } +} + +// Причина отмены возврата. Перечень и описание +// возможных значений: https://yookassa. +// ru/developers/payment-acceptance/after-the-payment/refunds#declined-refunds-cancellation-details-reason. +type RefundCancellationDetailsReason string + +const ( + RefundCancellationDetailsReasonYooMoneyAccountClosed RefundCancellationDetailsReason = "yoo_money_account_closed" + RefundCancellationDetailsReasonInsufficientFunds RefundCancellationDetailsReason = "insufficient_funds" + RefundCancellationDetailsReasonGeneralDecline RefundCancellationDetailsReason = "general_decline" + RefundCancellationDetailsReasonRejectedByPayee RefundCancellationDetailsReason = "rejected_by_payee" + RefundCancellationDetailsReasonRejectedByTimeout RefundCancellationDetailsReason = "rejected_by_timeout" + RefundCancellationDetailsReasonPaymentBasketIDNotFound RefundCancellationDetailsReason = "payment_basket_id_not_found" + RefundCancellationDetailsReasonPaymentArticleNumberNotFound RefundCancellationDetailsReason = "payment_article_number_not_found" + RefundCancellationDetailsReasonPaymentTruCodeNotFound RefundCancellationDetailsReason = "payment_tru_code_not_found" + RefundCancellationDetailsReasonTooManyRefundingArticles RefundCancellationDetailsReason = "too_many_refunding_articles" + RefundCancellationDetailsReasonSomeArticlesAlreadyRefunded RefundCancellationDetailsReason = "some_articles_already_refunded" +) + +// AllValues returns all RefundCancellationDetailsReason values. +func (RefundCancellationDetailsReason) AllValues() []RefundCancellationDetailsReason { + return []RefundCancellationDetailsReason{ + RefundCancellationDetailsReasonYooMoneyAccountClosed, + RefundCancellationDetailsReasonInsufficientFunds, + RefundCancellationDetailsReasonGeneralDecline, + RefundCancellationDetailsReasonRejectedByPayee, + RefundCancellationDetailsReasonRejectedByTimeout, + RefundCancellationDetailsReasonPaymentBasketIDNotFound, + RefundCancellationDetailsReasonPaymentArticleNumberNotFound, + RefundCancellationDetailsReasonPaymentTruCodeNotFound, + RefundCancellationDetailsReasonTooManyRefundingArticles, + RefundCancellationDetailsReasonSomeArticlesAlreadyRefunded, + } +} + +// MarshalText implements encoding.TextMarshaler. +func (s RefundCancellationDetailsReason) MarshalText() ([]byte, error) { + switch s { + case RefundCancellationDetailsReasonYooMoneyAccountClosed: + return []byte(s), nil + case RefundCancellationDetailsReasonInsufficientFunds: + return []byte(s), nil + case RefundCancellationDetailsReasonGeneralDecline: + return []byte(s), nil + case RefundCancellationDetailsReasonRejectedByPayee: + return []byte(s), nil + case RefundCancellationDetailsReasonRejectedByTimeout: + return []byte(s), nil + case RefundCancellationDetailsReasonPaymentBasketIDNotFound: + return []byte(s), nil + case RefundCancellationDetailsReasonPaymentArticleNumberNotFound: + return []byte(s), nil + case RefundCancellationDetailsReasonPaymentTruCodeNotFound: + return []byte(s), nil + case RefundCancellationDetailsReasonTooManyRefundingArticles: + return []byte(s), nil + case RefundCancellationDetailsReasonSomeArticlesAlreadyRefunded: + return []byte(s), nil + default: + return nil, errors.Errorf("invalid value: %q", s) + } +} + +// UnmarshalText implements encoding.TextUnmarshaler. +func (s *RefundCancellationDetailsReason) UnmarshalText(data []byte) error { + switch RefundCancellationDetailsReason(data) { + case RefundCancellationDetailsReasonYooMoneyAccountClosed: + *s = RefundCancellationDetailsReasonYooMoneyAccountClosed + return nil + case RefundCancellationDetailsReasonInsufficientFunds: + *s = RefundCancellationDetailsReasonInsufficientFunds + return nil + case RefundCancellationDetailsReasonGeneralDecline: + *s = RefundCancellationDetailsReasonGeneralDecline + return nil + case RefundCancellationDetailsReasonRejectedByPayee: + *s = RefundCancellationDetailsReasonRejectedByPayee + return nil + case RefundCancellationDetailsReasonRejectedByTimeout: + *s = RefundCancellationDetailsReasonRejectedByTimeout + return nil + case RefundCancellationDetailsReasonPaymentBasketIDNotFound: + *s = RefundCancellationDetailsReasonPaymentBasketIDNotFound + return nil + case RefundCancellationDetailsReasonPaymentArticleNumberNotFound: + *s = RefundCancellationDetailsReasonPaymentArticleNumberNotFound + return nil + case RefundCancellationDetailsReasonPaymentTruCodeNotFound: + *s = RefundCancellationDetailsReasonPaymentTruCodeNotFound + return nil + case RefundCancellationDetailsReasonTooManyRefundingArticles: + *s = RefundCancellationDetailsReasonTooManyRefundingArticles + return nil + case RefundCancellationDetailsReasonSomeArticlesAlreadyRefunded: + *s = RefundCancellationDetailsReasonSomeArticlesAlreadyRefunded + return nil + default: + return errors.Errorf("invalid value: %q", data) + } +} + +// Данные о сделке, в составе которой проходит возврат. +// Необходимо передавать, если вы проводите Безопасную +// сделку: https://yookassa.ru/developers/solutions-for-platforms/safe-deal/basics. +// Ref: #/components/schemas/RefundDealData +type RefundDealData struct { + RefundSettlements SettlementRefundArray `json:"refund_settlements"` +} + +// GetRefundSettlements returns the value of RefundSettlements. +func (s *RefundDealData) GetRefundSettlements() SettlementRefundArray { + return s.RefundSettlements +} + +// SetRefundSettlements sets the value of RefundSettlements. +func (s *RefundDealData) SetRefundSettlements(val SettlementRefundArray) { + s.RefundSettlements = val +} + +// Данные о сделке, в составе которой проходит возврат. +// Присутствует, если вы проводите Безопасную сделку: +// https://yookassa.ru/developers/solutions-for-platforms/safe-deal/basics. +// Ref: #/components/schemas/RefundDealInfo +type RefundDealInfo struct { + ID string `json:"id"` + RefundSettlements SettlementRefundArray `json:"refund_settlements"` +} + +// GetID returns the value of ID. +func (s *RefundDealInfo) GetID() string { + return s.ID +} + +// GetRefundSettlements returns the value of RefundSettlements. +func (s *RefundDealInfo) GetRefundSettlements() SettlementRefundArray { + return s.RefundSettlements +} + +// SetID sets the value of ID. +func (s *RefundDealInfo) SetID(val string) { + s.ID = val +} + +// SetRefundSettlements sets the value of RefundSettlements. +func (s *RefundDealInfo) SetRefundSettlements(val SettlementRefundArray) { + s.RefundSettlements = val +} + +type RefundId string + +// Список возвратов. Возвраты отсортированы по времени +// создания в порядке убывания (от новых к старым). Если +// результатов больше, чем задано в limit, список будет +// выводиться фрагментами. В этом случае в ответе на +// запрос вернется фрагмент списка и параметр next_cursor с +// указателем на следующий фрагмент. +// Ref: #/components/schemas/RefundList +type RefundList struct { + // Формат выдачи результатов запроса. Возможное + // значение: list (список). + Type RefundListType `json:"type"` + Items []Refund `json:"items"` + NextCursor OptNextCursor `json:"next_cursor"` +} + +// GetType returns the value of Type. +func (s *RefundList) GetType() RefundListType { + return s.Type +} + +// GetItems returns the value of Items. +func (s *RefundList) GetItems() []Refund { + return s.Items +} + +// GetNextCursor returns the value of NextCursor. +func (s *RefundList) GetNextCursor() OptNextCursor { + return s.NextCursor +} + +// SetType sets the value of Type. +func (s *RefundList) SetType(val RefundListType) { + s.Type = val +} + +// SetItems sets the value of Items. +func (s *RefundList) SetItems(val []Refund) { + s.Items = val +} + +// SetNextCursor sets the value of NextCursor. +func (s *RefundList) SetNextCursor(val OptNextCursor) { + s.NextCursor = val +} + +func (*RefundList) refundsGetRes() {} + +// Формат выдачи результатов запроса. Возможное +// значение: list (список). +type RefundListType string + +const ( + RefundListTypeList RefundListType = "list" +) + +// AllValues returns all RefundListType values. +func (RefundListType) AllValues() []RefundListType { + return []RefundListType{ + RefundListTypeList, + } +} + +// MarshalText implements encoding.TextMarshaler. +func (s RefundListType) MarshalText() ([]byte, error) { + switch s { + case RefundListTypeList: + return []byte(s), nil + default: + return nil, errors.Errorf("invalid value: %q", s) + } +} + +// UnmarshalText implements encoding.TextUnmarshaler. +func (s *RefundListType) UnmarshalText(data []byte) error { + switch RefundListType(data) { + case RefundListTypeList: + *s = RefundListTypeList + return nil + default: + return errors.Errorf("invalid value: %q", data) + } +} + +// Код способа оплаты, который использовался при +// проведении платежа. +// Ref: #/components/schemas/RefundMethodType +type RefundMethodType string + +const ( + RefundMethodTypeSbp RefundMethodType = "sbp" + RefundMethodTypeElectronicCertificate RefundMethodType = "electronic_certificate" +) + +// AllValues returns all RefundMethodType values. +func (RefundMethodType) AllValues() []RefundMethodType { + return []RefundMethodType{ + RefundMethodTypeSbp, + RefundMethodTypeElectronicCertificate, + } +} + +// MarshalText implements encoding.TextMarshaler. +func (s RefundMethodType) MarshalText() ([]byte, error) { + switch s { + case RefundMethodTypeSbp: + return []byte(s), nil + case RefundMethodTypeElectronicCertificate: + return []byte(s), nil + default: + return nil, errors.Errorf("invalid value: %q", s) + } +} + +// UnmarshalText implements encoding.TextUnmarshaler. +func (s *RefundMethodType) UnmarshalText(data []byte) error { + switch RefundMethodType(data) { + case RefundMethodTypeSbp: + *s = RefundMethodTypeSbp + return nil + case RefundMethodTypeElectronicCertificate: + *s = RefundMethodTypeElectronicCertificate + return nil + default: + return errors.Errorf("invalid value: %q", data) + } +} + +type RefundReceiptRegistration string + +const ( + RefundReceiptRegistrationPending RefundReceiptRegistration = "pending" + RefundReceiptRegistrationSucceeded RefundReceiptRegistration = "succeeded" + RefundReceiptRegistrationCanceled RefundReceiptRegistration = "canceled" +) + +// AllValues returns all RefundReceiptRegistration values. +func (RefundReceiptRegistration) AllValues() []RefundReceiptRegistration { + return []RefundReceiptRegistration{ + RefundReceiptRegistrationPending, + RefundReceiptRegistrationSucceeded, + RefundReceiptRegistrationCanceled, + } +} + +// MarshalText implements encoding.TextMarshaler. +func (s RefundReceiptRegistration) MarshalText() ([]byte, error) { + switch s { + case RefundReceiptRegistrationPending: + return []byte(s), nil + case RefundReceiptRegistrationSucceeded: + return []byte(s), nil + case RefundReceiptRegistrationCanceled: + return []byte(s), nil + default: + return nil, errors.Errorf("invalid value: %q", s) + } +} + +// UnmarshalText implements encoding.TextUnmarshaler. +func (s *RefundReceiptRegistration) UnmarshalText(data []byte) error { + switch RefundReceiptRegistration(data) { + case RefundReceiptRegistrationPending: + *s = RefundReceiptRegistrationPending + return nil + case RefundReceiptRegistrationSucceeded: + *s = RefundReceiptRegistrationSucceeded + return nil + case RefundReceiptRegistrationCanceled: + *s = RefundReceiptRegistrationCanceled + return nil + default: + return errors.Errorf("invalid value: %q", data) + } +} + +// RefundRefundMethod represents sum type. +type RefundRefundMethod struct { + Type RefundRefundMethodType // switch on this field + SbpRefundMethod SbpRefundMethod + ElectronicCertificateRefundMethod ElectronicCertificateRefundMethod +} + +// RefundRefundMethodType is oneOf type of RefundRefundMethod. +type RefundRefundMethodType string + +// Possible values for RefundRefundMethodType. +const ( + SbpRefundMethodRefundRefundMethod RefundRefundMethodType = "SbpRefundMethod" + ElectronicCertificateRefundMethodRefundRefundMethod RefundRefundMethodType = "ElectronicCertificateRefundMethod" +) + +// IsSbpRefundMethod reports whether RefundRefundMethod is SbpRefundMethod. +func (s RefundRefundMethod) IsSbpRefundMethod() bool { + return s.Type == SbpRefundMethodRefundRefundMethod +} + +// IsElectronicCertificateRefundMethod reports whether RefundRefundMethod is ElectronicCertificateRefundMethod. +func (s RefundRefundMethod) IsElectronicCertificateRefundMethod() bool { + return s.Type == ElectronicCertificateRefundMethodRefundRefundMethod +} + +// SetSbpRefundMethod sets RefundRefundMethod to SbpRefundMethod. +func (s *RefundRefundMethod) SetSbpRefundMethod(v SbpRefundMethod) { + s.Type = SbpRefundMethodRefundRefundMethod + s.SbpRefundMethod = v +} + +// GetSbpRefundMethod returns SbpRefundMethod and true boolean if RefundRefundMethod is SbpRefundMethod. +func (s RefundRefundMethod) GetSbpRefundMethod() (v SbpRefundMethod, ok bool) { + if !s.IsSbpRefundMethod() { + return v, false + } + return s.SbpRefundMethod, true +} + +// NewSbpRefundMethodRefundRefundMethod returns new RefundRefundMethod from SbpRefundMethod. +func NewSbpRefundMethodRefundRefundMethod(v SbpRefundMethod) RefundRefundMethod { + var s RefundRefundMethod + s.SetSbpRefundMethod(v) + return s +} + +// SetElectronicCertificateRefundMethod sets RefundRefundMethod to ElectronicCertificateRefundMethod. +func (s *RefundRefundMethod) SetElectronicCertificateRefundMethod(v ElectronicCertificateRefundMethod) { + s.Type = ElectronicCertificateRefundMethodRefundRefundMethod + s.ElectronicCertificateRefundMethod = v +} + +// GetElectronicCertificateRefundMethod returns ElectronicCertificateRefundMethod and true boolean if RefundRefundMethod is ElectronicCertificateRefundMethod. +func (s RefundRefundMethod) GetElectronicCertificateRefundMethod() (v ElectronicCertificateRefundMethod, ok bool) { + if !s.IsElectronicCertificateRefundMethod() { + return v, false + } + return s.ElectronicCertificateRefundMethod, true +} + +// NewElectronicCertificateRefundMethodRefundRefundMethod returns new RefundRefundMethod from ElectronicCertificateRefundMethod. +func NewElectronicCertificateRefundMethodRefundRefundMethod(v ElectronicCertificateRefundMethod) RefundRefundMethod { + var s RefundRefundMethod + s.SetElectronicCertificateRefundMethod(v) + return s +} + +// Данные о том, с какого магазина и какую сумму нужно +// удержать для проведения возврата. Сейчас в этом +// параметре можно передать данные только одного +// магазина. +// Ref: #/components/schemas/RefundSourcesData +type RefundSourcesData struct { + AccountID string `json:"account_id"` + Amount RefundSourcesDataAmount `json:"amount"` + PlatformFeeAmount OptRefundSourcesDataPlatformFeeAmount `json:"platform_fee_amount"` +} + +// GetAccountID returns the value of AccountID. +func (s *RefundSourcesData) GetAccountID() string { + return s.AccountID +} + +// GetAmount returns the value of Amount. +func (s *RefundSourcesData) GetAmount() RefundSourcesDataAmount { + return s.Amount +} + +// GetPlatformFeeAmount returns the value of PlatformFeeAmount. +func (s *RefundSourcesData) GetPlatformFeeAmount() OptRefundSourcesDataPlatformFeeAmount { + return s.PlatformFeeAmount +} + +// SetAccountID sets the value of AccountID. +func (s *RefundSourcesData) SetAccountID(val string) { + s.AccountID = val +} + +// SetAmount sets the value of Amount. +func (s *RefundSourcesData) SetAmount(val RefundSourcesDataAmount) { + s.Amount = val +} + +// SetPlatformFeeAmount sets the value of PlatformFeeAmount. +func (s *RefundSourcesData) SetPlatformFeeAmount(val OptRefundSourcesDataPlatformFeeAmount) { + s.PlatformFeeAmount = val +} + +// Merged schema. +type RefundSourcesDataAmount struct { + // Сумма в выбранной валюте. Всегда дробное значение. + // Разделитель дробной части — точка, разделитель тысяч + // отсутствует. Количество знаков после точки зависит + // от выбранной валюты. Пример: 1000.00. + Value string `json:"value"` + Currency CurrencyCode `json:"currency"` +} + +// GetValue returns the value of Value. +func (s *RefundSourcesDataAmount) GetValue() string { + return s.Value +} + +// GetCurrency returns the value of Currency. +func (s *RefundSourcesDataAmount) GetCurrency() CurrencyCode { + return s.Currency +} + +// SetValue sets the value of Value. +func (s *RefundSourcesDataAmount) SetValue(val string) { + s.Value = val +} + +// SetCurrency sets the value of Currency. +func (s *RefundSourcesDataAmount) SetCurrency(val CurrencyCode) { + s.Currency = val +} + +// Merged schema. +type RefundSourcesDataPlatformFeeAmount struct { + // Сумма в выбранной валюте. Всегда дробное значение. + // Разделитель дробной части — точка, разделитель тысяч + // отсутствует. Количество знаков после точки зависит + // от выбранной валюты. Пример: 1000.00. + Value string `json:"value"` + Currency CurrencyCode `json:"currency"` +} + +// GetValue returns the value of Value. +func (s *RefundSourcesDataPlatformFeeAmount) GetValue() string { + return s.Value +} + +// GetCurrency returns the value of Currency. +func (s *RefundSourcesDataPlatformFeeAmount) GetCurrency() CurrencyCode { + return s.Currency +} + +// SetValue sets the value of Value. +func (s *RefundSourcesDataPlatformFeeAmount) SetValue(val string) { + s.Value = val +} + +// SetCurrency sets the value of Currency. +func (s *RefundSourcesDataPlatformFeeAmount) SetCurrency(val CurrencyCode) { + s.Currency = val +} + +// Статус возврата платежа. Возможные значения: pending — +// возврат создан, но пока еще обрабатывается; succeeded — +// возврат успешно завершен, указанная в запросе сумма +// переведена на платежное средство пользователя +// (финальный и неизменяемый статус); canceled — возврат +// отменен, инициатор и причина отмены указаны в объекте +// cancellation_details (финальный и неизменяемый статус). +// Ref: #/components/schemas/RefundStatus +type RefundStatus string + +const ( + RefundStatusPending RefundStatus = "pending" + RefundStatusSucceeded RefundStatus = "succeeded" + RefundStatusCanceled RefundStatus = "canceled" +) + +// AllValues returns all RefundStatus values. +func (RefundStatus) AllValues() []RefundStatus { + return []RefundStatus{ + RefundStatusPending, + RefundStatusSucceeded, + RefundStatusCanceled, + } +} + +// MarshalText implements encoding.TextMarshaler. +func (s RefundStatus) MarshalText() ([]byte, error) { + switch s { + case RefundStatusPending: + return []byte(s), nil + case RefundStatusSucceeded: + return []byte(s), nil + case RefundStatusCanceled: + return []byte(s), nil + default: + return nil, errors.Errorf("invalid value: %q", s) + } +} + +// UnmarshalText implements encoding.TextUnmarshaler. +func (s *RefundStatus) UnmarshalText(data []byte) error { + switch RefundStatus(data) { + case RefundStatusPending: + *s = RefundStatusPending + return nil + case RefundStatusSucceeded: + *s = RefundStatusSucceeded + return nil + case RefundStatusCanceled: + *s = RefundStatusCanceled + return nil + default: + return errors.Errorf("invalid value: %q", data) + } +} + +type RefundsPostReq struct { + PaymentID PaymentId `json:"payment_id"` + Amount RefundsPostReqAmount `json:"amount"` + // Комментарий к возврату, основание для возврата денег + // пользователю. + Description OptString `json:"description"` + Receipt OptReceiptData `json:"receipt"` + // Данные о том, с какого магазина и какую сумму нужно + // удержать для проведения возврата. Необходимо + // передавать, если вы используете Сплитование + // платежей: https://yookassa.ru/developers/solutions-for-platforms/split-payments/basics. + // Сейчас в этом параметре можно передать данные только + // одного магазина. + Sources []RefundSourcesData `json:"sources"` + Deal OptRefundDealData `json:"deal"` + RefundMethodData OptRefundsPostReqRefundMethodData `json:"refund_method_data"` + Metadata OptMetadata `json:"metadata"` +} + +// GetPaymentID returns the value of PaymentID. +func (s *RefundsPostReq) GetPaymentID() PaymentId { + return s.PaymentID +} + +// GetAmount returns the value of Amount. +func (s *RefundsPostReq) GetAmount() RefundsPostReqAmount { + return s.Amount +} + +// GetDescription returns the value of Description. +func (s *RefundsPostReq) GetDescription() OptString { + return s.Description +} + +// GetReceipt returns the value of Receipt. +func (s *RefundsPostReq) GetReceipt() OptReceiptData { + return s.Receipt +} + +// GetSources returns the value of Sources. +func (s *RefundsPostReq) GetSources() []RefundSourcesData { + return s.Sources +} + +// GetDeal returns the value of Deal. +func (s *RefundsPostReq) GetDeal() OptRefundDealData { + return s.Deal +} + +// GetRefundMethodData returns the value of RefundMethodData. +func (s *RefundsPostReq) GetRefundMethodData() OptRefundsPostReqRefundMethodData { + return s.RefundMethodData +} + +// GetMetadata returns the value of Metadata. +func (s *RefundsPostReq) GetMetadata() OptMetadata { + return s.Metadata +} + +// SetPaymentID sets the value of PaymentID. +func (s *RefundsPostReq) SetPaymentID(val PaymentId) { + s.PaymentID = val +} + +// SetAmount sets the value of Amount. +func (s *RefundsPostReq) SetAmount(val RefundsPostReqAmount) { + s.Amount = val +} + +// SetDescription sets the value of Description. +func (s *RefundsPostReq) SetDescription(val OptString) { + s.Description = val +} + +// SetReceipt sets the value of Receipt. +func (s *RefundsPostReq) SetReceipt(val OptReceiptData) { + s.Receipt = val +} + +// SetSources sets the value of Sources. +func (s *RefundsPostReq) SetSources(val []RefundSourcesData) { + s.Sources = val +} + +// SetDeal sets the value of Deal. +func (s *RefundsPostReq) SetDeal(val OptRefundDealData) { + s.Deal = val +} + +// SetRefundMethodData sets the value of RefundMethodData. +func (s *RefundsPostReq) SetRefundMethodData(val OptRefundsPostReqRefundMethodData) { + s.RefundMethodData = val +} + +// SetMetadata sets the value of Metadata. +func (s *RefundsPostReq) SetMetadata(val OptMetadata) { + s.Metadata = val +} + +// Сумма в выбранной валюте. +type RefundsPostReqAmount struct { + // Сумма в выбранной валюте. Всегда дробное значение. + // Разделитель дробной части — точка, разделитель тысяч + // отсутствует. Количество знаков после точки зависит + // от выбранной валюты. Пример: 1000.00. + Value string `json:"value"` + Currency CurrencyCode `json:"currency"` +} + +// GetValue returns the value of Value. +func (s *RefundsPostReqAmount) GetValue() string { + return s.Value +} + +// GetCurrency returns the value of Currency. +func (s *RefundsPostReqAmount) GetCurrency() CurrencyCode { + return s.Currency +} + +// SetValue sets the value of Value. +func (s *RefundsPostReqAmount) SetValue(val string) { + s.Value = val +} + +// SetCurrency sets the value of Currency. +func (s *RefundsPostReqAmount) SetCurrency(val CurrencyCode) { + s.Currency = val +} + +// RefundsPostReqRefundMethodData represents sum type. +type RefundsPostReqRefundMethodData struct { + Type RefundsPostReqRefundMethodDataType // switch on this field + ElectronicCertificateRefundMethodData ElectronicCertificateRefundMethodData +} + +// RefundsPostReqRefundMethodDataType is oneOf type of RefundsPostReqRefundMethodData. +type RefundsPostReqRefundMethodDataType string + +// Possible values for RefundsPostReqRefundMethodDataType. +const ( + ElectronicCertificateRefundMethodDataRefundsPostReqRefundMethodData RefundsPostReqRefundMethodDataType = "ElectronicCertificateRefundMethodData" +) + +// IsElectronicCertificateRefundMethodData reports whether RefundsPostReqRefundMethodData is ElectronicCertificateRefundMethodData. +func (s RefundsPostReqRefundMethodData) IsElectronicCertificateRefundMethodData() bool { + return s.Type == ElectronicCertificateRefundMethodDataRefundsPostReqRefundMethodData +} + +// SetElectronicCertificateRefundMethodData sets RefundsPostReqRefundMethodData to ElectronicCertificateRefundMethodData. +func (s *RefundsPostReqRefundMethodData) SetElectronicCertificateRefundMethodData(v ElectronicCertificateRefundMethodData) { + s.Type = ElectronicCertificateRefundMethodDataRefundsPostReqRefundMethodData + s.ElectronicCertificateRefundMethodData = v +} + +// GetElectronicCertificateRefundMethodData returns ElectronicCertificateRefundMethodData and true boolean if RefundsPostReqRefundMethodData is ElectronicCertificateRefundMethodData. +func (s RefundsPostReqRefundMethodData) GetElectronicCertificateRefundMethodData() (v ElectronicCertificateRefundMethodData, ok bool) { + if !s.IsElectronicCertificateRefundMethodData() { + return v, false + } + return s.ElectronicCertificateRefundMethodData, true +} + +// NewElectronicCertificateRefundMethodDataRefundsPostReqRefundMethodData returns new RefundsPostReqRefundMethodData from ElectronicCertificateRefundMethodData. +func NewElectronicCertificateRefundMethodDataRefundsPostReqRefundMethodData(v ElectronicCertificateRefundMethodData) RefundsPostReqRefundMethodData { + var s RefundsPostReqRefundMethodData + s.SetElectronicCertificateRefundMethodData(v) + return s +} + +type ReturnUrl string + +type Rrn string + +// Merged schema. +// Ref: #/components/schemas/SafeDeal +type SafeDeal struct { + Type DealType `json:"type"` + ID DealId `json:"id"` + FeeMoment FeeMoment `json:"fee_moment"` + Description OptString `json:"description"` + Balance SafeDealBalance `json:"balance"` + PayoutBalance SafeDealPayoutBalance `json:"payout_balance"` + Status DealStatus `json:"status"` + // Время создания сделки. Указывается по UTC: https://ru.wikipedia. + // org/wiki/%D0%92%D1%81%D0%B5%D0%BC%D0%B8%D1%80%D0%BD%D0%BE%D0%B5_%D0%BA%D0%BE%D0%BE%D1%80%D0%B4%D0%B8%D0%BD%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%BE%D0%B5_%D0%B2%D1%80%D0%B5%D0%BC%D1%8F и передается в формате ISO 8601: https://en.wikipedia.org/wiki/ISO_8601. Пример: 2017-11-03T11:52:31.827Z. + CreatedAt time.Time `json:"created_at"` + // Время автоматического закрытия сделки. Если в + // указанное время сделка всё еще в статусе opened, ЮKassa + // вернет деньги покупателю и закроет сделку. По + // умолчанию время жизни сделки составляет 90 дней. Время + // указывается по UTC: https://ru.wikipedia. + // org/wiki/%D0%92%D1%81%D0%B5%D0%BC%D0%B8%D1%80%D0%BD%D0%BE%D0%B5_%D0%BA%D0%BE%D0%BE%D1%80%D0%B4%D0%B8%D0%BD%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%BE%D0%B5_%D0%B2%D1%80%D0%B5%D0%BC%D1%8F и передается в формате ISO 8601: https://en.wikipedia.org/wiki/ISO_8601. Пример: 2017-11-03T11:52:31.827Z. + ExpiresAt time.Time `json:"expires_at"` + Metadata OptMetadata `json:"metadata"` + Test Test `json:"test"` +} + +// GetType returns the value of Type. +func (s *SafeDeal) GetType() DealType { + return s.Type +} + +// GetID returns the value of ID. +func (s *SafeDeal) GetID() DealId { + return s.ID +} + +// GetFeeMoment returns the value of FeeMoment. +func (s *SafeDeal) GetFeeMoment() FeeMoment { + return s.FeeMoment +} + +// GetDescription returns the value of Description. +func (s *SafeDeal) GetDescription() OptString { + return s.Description +} + +// GetBalance returns the value of Balance. +func (s *SafeDeal) GetBalance() SafeDealBalance { + return s.Balance +} + +// GetPayoutBalance returns the value of PayoutBalance. +func (s *SafeDeal) GetPayoutBalance() SafeDealPayoutBalance { + return s.PayoutBalance +} + +// GetStatus returns the value of Status. +func (s *SafeDeal) GetStatus() DealStatus { + return s.Status +} + +// GetCreatedAt returns the value of CreatedAt. +func (s *SafeDeal) GetCreatedAt() time.Time { + return s.CreatedAt +} + +// GetExpiresAt returns the value of ExpiresAt. +func (s *SafeDeal) GetExpiresAt() time.Time { + return s.ExpiresAt +} + +// GetMetadata returns the value of Metadata. +func (s *SafeDeal) GetMetadata() OptMetadata { + return s.Metadata +} + +// GetTest returns the value of Test. +func (s *SafeDeal) GetTest() Test { + return s.Test +} + +// SetType sets the value of Type. +func (s *SafeDeal) SetType(val DealType) { + s.Type = val +} + +// SetID sets the value of ID. +func (s *SafeDeal) SetID(val DealId) { + s.ID = val +} + +// SetFeeMoment sets the value of FeeMoment. +func (s *SafeDeal) SetFeeMoment(val FeeMoment) { + s.FeeMoment = val +} + +// SetDescription sets the value of Description. +func (s *SafeDeal) SetDescription(val OptString) { + s.Description = val +} + +// SetBalance sets the value of Balance. +func (s *SafeDeal) SetBalance(val SafeDealBalance) { + s.Balance = val +} + +// SetPayoutBalance sets the value of PayoutBalance. +func (s *SafeDeal) SetPayoutBalance(val SafeDealPayoutBalance) { + s.PayoutBalance = val +} + +// SetStatus sets the value of Status. +func (s *SafeDeal) SetStatus(val DealStatus) { + s.Status = val +} + +// SetCreatedAt sets the value of CreatedAt. +func (s *SafeDeal) SetCreatedAt(val time.Time) { + s.CreatedAt = val +} + +// SetExpiresAt sets the value of ExpiresAt. +func (s *SafeDeal) SetExpiresAt(val time.Time) { + s.ExpiresAt = val +} + +// SetMetadata sets the value of Metadata. +func (s *SafeDeal) SetMetadata(val OptMetadata) { + s.Metadata = val +} + +// SetTest sets the value of Test. +func (s *SafeDeal) SetTest(val Test) { + s.Test = val +} + +func (*SafeDeal) dealsDealIDGetRes() {} +func (*SafeDeal) dealsPostRes() {} + +// Сумма в выбранной валюте. +type SafeDealBalance struct { + // Сумма в выбранной валюте. Всегда дробное значение. + // Разделитель дробной части — точка, разделитель тысяч + // отсутствует. Количество знаков после точки зависит + // от выбранной валюты. Пример: 1000.00. + Value string `json:"value"` + Currency CurrencyCode `json:"currency"` +} + +// GetValue returns the value of Value. +func (s *SafeDealBalance) GetValue() string { + return s.Value +} + +// GetCurrency returns the value of Currency. +func (s *SafeDealBalance) GetCurrency() CurrencyCode { + return s.Currency +} + +// SetValue sets the value of Value. +func (s *SafeDealBalance) SetValue(val string) { + s.Value = val +} + +// SetCurrency sets the value of Currency. +func (s *SafeDealBalance) SetCurrency(val CurrencyCode) { + s.Currency = val +} + +// Сумма в выбранной валюте. +type SafeDealPayoutBalance struct { + // Сумма в выбранной валюте. Всегда дробное значение. + // Разделитель дробной части — точка, разделитель тысяч + // отсутствует. Количество знаков после точки зависит + // от выбранной валюты. Пример: 1000.00. + Value string `json:"value"` + Currency CurrencyCode `json:"currency"` +} + +// GetValue returns the value of Value. +func (s *SafeDealPayoutBalance) GetValue() string { + return s.Value +} + +// GetCurrency returns the value of Currency. +func (s *SafeDealPayoutBalance) GetCurrency() CurrencyCode { + return s.Currency +} + +// SetValue sets the value of Value. +func (s *SafeDealPayoutBalance) SetValue(val string) { + s.Value = val +} + +// SetCurrency sets the value of Currency. +func (s *SafeDealPayoutBalance) SetCurrency(val CurrencyCode) { + s.Currency = val +} + +// Данные для создания сделки. +// Ref: #/components/schemas/SafeDealRequest +type SafeDealRequest struct { + Type DealType `json:"type"` + FeeMoment FeeMoment `json:"fee_moment"` + Metadata OptMetadata `json:"metadata"` + Description OptString `json:"description"` +} + +// GetType returns the value of Type. +func (s *SafeDealRequest) GetType() DealType { + return s.Type +} + +// GetFeeMoment returns the value of FeeMoment. +func (s *SafeDealRequest) GetFeeMoment() FeeMoment { + return s.FeeMoment +} + +// GetMetadata returns the value of Metadata. +func (s *SafeDealRequest) GetMetadata() OptMetadata { + return s.Metadata +} + +// GetDescription returns the value of Description. +func (s *SafeDealRequest) GetDescription() OptString { + return s.Description +} + +// SetType sets the value of Type. +func (s *SafeDealRequest) SetType(val DealType) { + s.Type = val +} + +// SetFeeMoment sets the value of FeeMoment. +func (s *SafeDealRequest) SetFeeMoment(val FeeMoment) { + s.FeeMoment = val +} + +// SetMetadata sets the value of Metadata. +func (s *SafeDealRequest) SetMetadata(val OptMetadata) { + s.Metadata = val +} + +// SetDescription sets the value of Description. +func (s *SafeDealRequest) SetDescription(val OptString) { + s.Description = val +} + +type SavePaymentMethodAttribute bool + +// Merged schema. +// Ref: #/components/schemas/SavePaymentMethodBankCard +type SavePaymentMethodBankCard struct { + Type SavePaymentMethodType `json:"type"` + // Идентификатор сохраненного способа оплаты. + ID string `json:"id"` + // Признак сохранения способа оплаты для автоплатежей: + // https://yookassa. + // ru/developers/payment-acceptance/scenario-extensions/recurring-payments/pay-with-saved. + // Возможные значения: * true — способ оплаты сохранен для + // автоплатежей и выплат; * false — способ оплаты не + // сохранен. + Saved bool `json:"saved"` + Status PaymentMethodStatus `json:"status"` + // Данные магазина, для которого сохраняется способ + // оплаты. + Holder SavePaymentMethodBankCardHolder `json:"holder"` + Title OptPaymentMethodTitle `json:"title"` + Confirmation OptSavePaymentMethodBankCardConfirmation `json:"confirmation"` + Card OptBankCardData `json:"card"` +} + +// GetType returns the value of Type. +func (s *SavePaymentMethodBankCard) GetType() SavePaymentMethodType { + return s.Type +} + +// GetID returns the value of ID. +func (s *SavePaymentMethodBankCard) GetID() string { + return s.ID +} + +// GetSaved returns the value of Saved. +func (s *SavePaymentMethodBankCard) GetSaved() bool { + return s.Saved +} + +// GetStatus returns the value of Status. +func (s *SavePaymentMethodBankCard) GetStatus() PaymentMethodStatus { + return s.Status +} + +// GetHolder returns the value of Holder. +func (s *SavePaymentMethodBankCard) GetHolder() SavePaymentMethodBankCardHolder { + return s.Holder +} + +// GetTitle returns the value of Title. +func (s *SavePaymentMethodBankCard) GetTitle() OptPaymentMethodTitle { + return s.Title +} + +// GetConfirmation returns the value of Confirmation. +func (s *SavePaymentMethodBankCard) GetConfirmation() OptSavePaymentMethodBankCardConfirmation { + return s.Confirmation +} + +// GetCard returns the value of Card. +func (s *SavePaymentMethodBankCard) GetCard() OptBankCardData { + return s.Card +} + +// SetType sets the value of Type. +func (s *SavePaymentMethodBankCard) SetType(val SavePaymentMethodType) { + s.Type = val +} + +// SetID sets the value of ID. +func (s *SavePaymentMethodBankCard) SetID(val string) { + s.ID = val +} + +// SetSaved sets the value of Saved. +func (s *SavePaymentMethodBankCard) SetSaved(val bool) { + s.Saved = val +} + +// SetStatus sets the value of Status. +func (s *SavePaymentMethodBankCard) SetStatus(val PaymentMethodStatus) { + s.Status = val +} + +// SetHolder sets the value of Holder. +func (s *SavePaymentMethodBankCard) SetHolder(val SavePaymentMethodBankCardHolder) { + s.Holder = val +} + +// SetTitle sets the value of Title. +func (s *SavePaymentMethodBankCard) SetTitle(val OptPaymentMethodTitle) { + s.Title = val +} + +// SetConfirmation sets the value of Confirmation. +func (s *SavePaymentMethodBankCard) SetConfirmation(val OptSavePaymentMethodBankCardConfirmation) { + s.Confirmation = val +} + +// SetCard sets the value of Card. +func (s *SavePaymentMethodBankCard) SetCard(val OptBankCardData) { + s.Card = val +} + +// SavePaymentMethodBankCardConfirmation represents sum type. +type SavePaymentMethodBankCardConfirmation struct { + Type SavePaymentMethodBankCardConfirmationType // switch on this field + PaymentMethodsConfirmationRedirect PaymentMethodsConfirmationRedirect +} + +// SavePaymentMethodBankCardConfirmationType is oneOf type of SavePaymentMethodBankCardConfirmation. +type SavePaymentMethodBankCardConfirmationType string + +// Possible values for SavePaymentMethodBankCardConfirmationType. +const ( + PaymentMethodsConfirmationRedirectSavePaymentMethodBankCardConfirmation SavePaymentMethodBankCardConfirmationType = "redirect" +) + +// IsPaymentMethodsConfirmationRedirect reports whether SavePaymentMethodBankCardConfirmation is PaymentMethodsConfirmationRedirect. +func (s SavePaymentMethodBankCardConfirmation) IsPaymentMethodsConfirmationRedirect() bool { + return s.Type == PaymentMethodsConfirmationRedirectSavePaymentMethodBankCardConfirmation +} + +// SetPaymentMethodsConfirmationRedirect sets SavePaymentMethodBankCardConfirmation to PaymentMethodsConfirmationRedirect. +func (s *SavePaymentMethodBankCardConfirmation) SetPaymentMethodsConfirmationRedirect(v PaymentMethodsConfirmationRedirect) { + s.Type = PaymentMethodsConfirmationRedirectSavePaymentMethodBankCardConfirmation + s.PaymentMethodsConfirmationRedirect = v +} + +// GetPaymentMethodsConfirmationRedirect returns PaymentMethodsConfirmationRedirect and true boolean if SavePaymentMethodBankCardConfirmation is PaymentMethodsConfirmationRedirect. +func (s SavePaymentMethodBankCardConfirmation) GetPaymentMethodsConfirmationRedirect() (v PaymentMethodsConfirmationRedirect, ok bool) { + if !s.IsPaymentMethodsConfirmationRedirect() { + return v, false + } + return s.PaymentMethodsConfirmationRedirect, true +} + +// NewPaymentMethodsConfirmationRedirectSavePaymentMethodBankCardConfirmation returns new SavePaymentMethodBankCardConfirmation from PaymentMethodsConfirmationRedirect. +func NewPaymentMethodsConfirmationRedirectSavePaymentMethodBankCardConfirmation(v PaymentMethodsConfirmationRedirect) SavePaymentMethodBankCardConfirmation { + var s SavePaymentMethodBankCardConfirmation + s.SetPaymentMethodsConfirmationRedirect(v) + return s +} + +// Данные магазина, для которого сохраняется способ +// оплаты. +type SavePaymentMethodBankCardHolder struct { + AccountID AccountId `json:"account_id"` + GatewayID OptGatewayId `json:"gateway_id"` +} + +// GetAccountID returns the value of AccountID. +func (s *SavePaymentMethodBankCardHolder) GetAccountID() AccountId { + return s.AccountID +} + +// GetGatewayID returns the value of GatewayID. +func (s *SavePaymentMethodBankCardHolder) GetGatewayID() OptGatewayId { + return s.GatewayID +} + +// SetAccountID sets the value of AccountID. +func (s *SavePaymentMethodBankCardHolder) SetAccountID(val AccountId) { + s.AccountID = val +} + +// SetGatewayID sets the value of GatewayID. +func (s *SavePaymentMethodBankCardHolder) SetGatewayID(val OptGatewayId) { + s.GatewayID = val +} + +// Merged schema. +// Ref: #/components/schemas/SavePaymentMethodDataBankCard +type SavePaymentMethodDataBankCard struct { + Type SavePaymentMethodDataBankCardType `json:"type"` + Holder OptSavePaymentMethodDataBankCardHolder `json:"holder"` + ClientIP OptClientIp `json:"client_ip"` + Confirmation OptPaymentMethodsConfirmationDataRedirect `json:"confirmation"` + Card OptCardRequestData `json:"card"` +} + +// GetType returns the value of Type. +func (s *SavePaymentMethodDataBankCard) GetType() SavePaymentMethodDataBankCardType { + return s.Type +} + +// GetHolder returns the value of Holder. +func (s *SavePaymentMethodDataBankCard) GetHolder() OptSavePaymentMethodDataBankCardHolder { + return s.Holder +} + +// GetClientIP returns the value of ClientIP. +func (s *SavePaymentMethodDataBankCard) GetClientIP() OptClientIp { + return s.ClientIP +} + +// GetConfirmation returns the value of Confirmation. +func (s *SavePaymentMethodDataBankCard) GetConfirmation() OptPaymentMethodsConfirmationDataRedirect { + return s.Confirmation +} + +// GetCard returns the value of Card. +func (s *SavePaymentMethodDataBankCard) GetCard() OptCardRequestData { + return s.Card +} + +// SetType sets the value of Type. +func (s *SavePaymentMethodDataBankCard) SetType(val SavePaymentMethodDataBankCardType) { + s.Type = val +} + +// SetHolder sets the value of Holder. +func (s *SavePaymentMethodDataBankCard) SetHolder(val OptSavePaymentMethodDataBankCardHolder) { + s.Holder = val +} + +// SetClientIP sets the value of ClientIP. +func (s *SavePaymentMethodDataBankCard) SetClientIP(val OptClientIp) { + s.ClientIP = val +} + +// SetConfirmation sets the value of Confirmation. +func (s *SavePaymentMethodDataBankCard) SetConfirmation(val OptPaymentMethodsConfirmationDataRedirect) { + s.Confirmation = val +} + +// SetCard sets the value of Card. +func (s *SavePaymentMethodDataBankCard) SetCard(val OptCardRequestData) { + s.Card = val +} + +// Получатель платежа. Нужен, если вы разделяете потоки +// платежей в рамках одного аккаунта или создаете +// платеж в адрес другого аккаунта. +type SavePaymentMethodDataBankCardHolder struct { + GatewayID GatewayId `json:"gateway_id"` +} + +// GetGatewayID returns the value of GatewayID. +func (s *SavePaymentMethodDataBankCardHolder) GetGatewayID() GatewayId { + return s.GatewayID +} + +// SetGatewayID sets the value of GatewayID. +func (s *SavePaymentMethodDataBankCardHolder) SetGatewayID(val GatewayId) { + s.GatewayID = val +} + +type SavePaymentMethodDataBankCardType string + +const ( + SavePaymentMethodDataBankCardTypeBankCard SavePaymentMethodDataBankCardType = "bank_card" +) + +// AllValues returns all SavePaymentMethodDataBankCardType values. +func (SavePaymentMethodDataBankCardType) AllValues() []SavePaymentMethodDataBankCardType { + return []SavePaymentMethodDataBankCardType{ + SavePaymentMethodDataBankCardTypeBankCard, + } +} + +// MarshalText implements encoding.TextMarshaler. +func (s SavePaymentMethodDataBankCardType) MarshalText() ([]byte, error) { + switch s { + case SavePaymentMethodDataBankCardTypeBankCard: + return []byte(s), nil + default: + return nil, errors.Errorf("invalid value: %q", s) + } +} + +// UnmarshalText implements encoding.TextUnmarshaler. +func (s *SavePaymentMethodDataBankCardType) UnmarshalText(data []byte) error { + switch SavePaymentMethodDataBankCardType(data) { + case SavePaymentMethodDataBankCardTypeBankCard: + *s = SavePaymentMethodDataBankCardTypeBankCard + return nil + default: + return errors.Errorf("invalid value: %q", data) + } +} + +// Тип способа оплаты. +// Ref: #/components/schemas/SavePaymentMethodType +type SavePaymentMethodType string + +const ( + SavePaymentMethodTypeBankCard SavePaymentMethodType = "bank_card" +) + +// AllValues returns all SavePaymentMethodType values. +func (SavePaymentMethodType) AllValues() []SavePaymentMethodType { + return []SavePaymentMethodType{ + SavePaymentMethodTypeBankCard, + } +} + +// MarshalText implements encoding.TextMarshaler. +func (s SavePaymentMethodType) MarshalText() ([]byte, error) { + switch s { + case SavePaymentMethodTypeBankCard: + return []byte(s), nil + default: + return nil, errors.Errorf("invalid value: %q", s) + } +} + +// UnmarshalText implements encoding.TextUnmarshaler. +func (s *SavePaymentMethodType) UnmarshalText(data []byte) error { + switch SavePaymentMethodType(data) { + case SavePaymentMethodTypeBankCard: + *s = SavePaymentMethodTypeBankCard + return nil + default: + return errors.Errorf("invalid value: %q", data) + } +} + +type SbpBankBic string + +type SbpBankId string + +type SbpBanksGetInternalServerError TooManyRequests + +func (*SbpBanksGetInternalServerError) sbpBanksGetRes() {} + +// Список участников СБП. Участники СБП отсортированы +// по идентификатору участника в порядке убывания. +type SbpBanksGetOK struct { + // Формат выдачи результатов запроса. Возможное + // значение: list (список). + Type SbpBanksGetOKType `json:"type"` + Items []SbpParticipantBank `json:"items"` +} + +// GetType returns the value of Type. +func (s *SbpBanksGetOK) GetType() SbpBanksGetOKType { + return s.Type +} + +// GetItems returns the value of Items. +func (s *SbpBanksGetOK) GetItems() []SbpParticipantBank { + return s.Items +} + +// SetType sets the value of Type. +func (s *SbpBanksGetOK) SetType(val SbpBanksGetOKType) { + s.Type = val +} + +// SetItems sets the value of Items. +func (s *SbpBanksGetOK) SetItems(val []SbpParticipantBank) { + s.Items = val +} + +func (*SbpBanksGetOK) sbpBanksGetRes() {} + +// Формат выдачи результатов запроса. Возможное +// значение: list (список). +type SbpBanksGetOKType string + +const ( + SbpBanksGetOKTypeList SbpBanksGetOKType = "list" +) + +// AllValues returns all SbpBanksGetOKType values. +func (SbpBanksGetOKType) AllValues() []SbpBanksGetOKType { + return []SbpBanksGetOKType{ + SbpBanksGetOKTypeList, + } +} + +// MarshalText implements encoding.TextMarshaler. +func (s SbpBanksGetOKType) MarshalText() ([]byte, error) { + switch s { + case SbpBanksGetOKTypeList: + return []byte(s), nil + default: + return nil, errors.Errorf("invalid value: %q", s) + } +} + +// UnmarshalText implements encoding.TextUnmarshaler. +func (s *SbpBanksGetOKType) UnmarshalText(data []byte) error { + switch SbpBanksGetOKType(data) { + case SbpBanksGetOKTypeList: + *s = SbpBanksGetOKTypeList + return nil + default: + return errors.Errorf("invalid value: %q", data) + } +} + +type SbpBanksGetTooManyRequests TooManyRequests + +func (*SbpBanksGetTooManyRequests) sbpBanksGetRes() {} + +// FPS (Faster Payment System of the Russian Federation) participant object contains all the relevant +// information about the bank or payment service connected to the FPS. +// Ref: #/components/schemas/SbpParticipantBank +type SbpParticipantBank struct { + BankID SbpBankId `json:"bank_id"` + // Название банка или платежного сервиса в СБП. + Name string `json:"name"` + Bic SbpBankBic `json:"bic"` +} + +// GetBankID returns the value of BankID. +func (s *SbpParticipantBank) GetBankID() SbpBankId { + return s.BankID +} + +// GetName returns the value of Name. +func (s *SbpParticipantBank) GetName() string { + return s.Name +} + +// GetBic returns the value of Bic. +func (s *SbpParticipantBank) GetBic() SbpBankBic { + return s.Bic +} + +// SetBankID sets the value of BankID. +func (s *SbpParticipantBank) SetBankID(val SbpBankId) { + s.BankID = val +} + +// SetName sets the value of Name. +func (s *SbpParticipantBank) SetName(val string) { + s.Name = val +} + +// SetBic sets the value of Bic. +func (s *SbpParticipantBank) SetBic(val SbpBankBic) { + s.Bic = val +} + +// Реквизиты счета, который использовался для оплаты. +// Обязательный параметр для платежей в статусе succeeded. В +// остальных случаях может отсутствовать. +// Ref: #/components/schemas/SbpPayerBankDetails +type SbpPayerBankDetails struct { + BankID SbpBankId `json:"bank_id"` + Bic string `json:"bic"` +} + +// GetBankID returns the value of BankID. +func (s *SbpPayerBankDetails) GetBankID() SbpBankId { + return s.BankID +} + +// GetBic returns the value of Bic. +func (s *SbpPayerBankDetails) GetBic() string { + return s.Bic +} + +// SetBankID sets the value of BankID. +func (s *SbpPayerBankDetails) SetBankID(val SbpBankId) { + s.BankID = val +} + +// SetBic sets the value of Bic. +func (s *SbpPayerBankDetails) SetBic(val string) { + s.Bic = val +} + +// Merged schema. +// Ref: #/components/schemas/SbpPayoutRecipientPersonalDataRequest +type SbpPayoutRecipientPersonalDataRequest struct { + Type PersonalDataType `json:"type"` + Metadata OptMetadata `json:"metadata"` + LastName LastName `json:"last_name"` + FirstName FirstName `json:"first_name"` + MiddleName OptMiddleName `json:"middle_name"` +} + +// GetType returns the value of Type. +func (s *SbpPayoutRecipientPersonalDataRequest) GetType() PersonalDataType { + return s.Type +} + +// GetMetadata returns the value of Metadata. +func (s *SbpPayoutRecipientPersonalDataRequest) GetMetadata() OptMetadata { + return s.Metadata +} + +// GetLastName returns the value of LastName. +func (s *SbpPayoutRecipientPersonalDataRequest) GetLastName() LastName { + return s.LastName +} + +// GetFirstName returns the value of FirstName. +func (s *SbpPayoutRecipientPersonalDataRequest) GetFirstName() FirstName { + return s.FirstName +} + +// GetMiddleName returns the value of MiddleName. +func (s *SbpPayoutRecipientPersonalDataRequest) GetMiddleName() OptMiddleName { + return s.MiddleName +} + +// SetType sets the value of Type. +func (s *SbpPayoutRecipientPersonalDataRequest) SetType(val PersonalDataType) { + s.Type = val +} + +// SetMetadata sets the value of Metadata. +func (s *SbpPayoutRecipientPersonalDataRequest) SetMetadata(val OptMetadata) { + s.Metadata = val +} + +// SetLastName sets the value of LastName. +func (s *SbpPayoutRecipientPersonalDataRequest) SetLastName(val LastName) { + s.LastName = val +} + +// SetFirstName sets the value of FirstName. +func (s *SbpPayoutRecipientPersonalDataRequest) SetFirstName(val FirstName) { + s.FirstName = val +} + +// SetMiddleName sets the value of MiddleName. +func (s *SbpPayoutRecipientPersonalDataRequest) SetMiddleName(val OptMiddleName) { + s.MiddleName = val +} + +// Merged schema. +// Ref: #/components/schemas/SbpRefundMethod +type SbpRefundMethod struct { + Type RefundMethodType `json:"type"` + // Идентификатор операции в СБП (НСПК). Пример: + // 1027088AE4CB48CB81287833347A8777. Обязательный параметр для + // возвратов в статусе succeeded. В остальных случаях может + // отсутствовать. + SbpOperationID OptString `json:"sbp_operation_id"` +} + +// GetType returns the value of Type. +func (s *SbpRefundMethod) GetType() RefundMethodType { + return s.Type +} + +// GetSbpOperationID returns the value of SbpOperationID. +func (s *SbpRefundMethod) GetSbpOperationID() OptString { + return s.SbpOperationID +} + +// SetType sets the value of Type. +func (s *SbpRefundMethod) SetType(val RefundMethodType) { + s.Type = val +} + +// SetSbpOperationID sets the value of SbpOperationID. +func (s *SbpRefundMethod) SetSbpOperationID(val OptString) { + s.SbpOperationID = val +} + +type SelfEmployedId string + +// Информация о совершенных расчетах. +// Ref: #/components/schemas/Settlement +type Settlement struct { + // Тип расчета. Перечень возможных значений * для Чеков + // от ЮKassa: https://yookassa. + // ru/developers/payment-acceptance/receipts/54fz/yoomoney/parameters-values#settlement-type * для + // сторонних онлайн-касс: https://yookassa. + // ru/developers/payment-acceptance/receipts/54fz/other-services/parameters-values#settlement-type. + Type SettlementType `json:"type"` + Amount SettlementAmount `json:"amount"` +} + +// GetType returns the value of Type. +func (s *Settlement) GetType() SettlementType { + return s.Type +} + +// GetAmount returns the value of Amount. +func (s *Settlement) GetAmount() SettlementAmount { + return s.Amount +} + +// SetType sets the value of Type. +func (s *Settlement) SetType(val SettlementType) { + s.Type = val +} + +// SetAmount sets the value of Amount. +func (s *Settlement) SetAmount(val SettlementAmount) { + s.Amount = val +} + +// Сумма в выбранной валюте. +type SettlementAmount struct { + // Сумма в выбранной валюте. Всегда дробное значение. + // Разделитель дробной части — точка, разделитель тысяч + // отсутствует. Количество знаков после точки зависит + // от выбранной валюты. Пример: 1000.00. + Value string `json:"value"` + Currency CurrencyCode `json:"currency"` +} + +// GetValue returns the value of Value. +func (s *SettlementAmount) GetValue() string { + return s.Value +} + +// GetCurrency returns the value of Currency. +func (s *SettlementAmount) GetCurrency() CurrencyCode { + return s.Currency +} + +// SetValue sets the value of Value. +func (s *SettlementAmount) SetValue(val string) { + s.Value = val +} + +// SetCurrency sets the value of Currency. +func (s *SettlementAmount) SetCurrency(val CurrencyCode) { + s.Currency = val +} + +// Transaction type. +// Ref: #/components/schemas/SettlementItemType +type SettlementItemType string + +const ( + SettlementItemTypePayout SettlementItemType = "payout" +) + +// AllValues returns all SettlementItemType values. +func (SettlementItemType) AllValues() []SettlementItemType { + return []SettlementItemType{ + SettlementItemTypePayout, + } +} + +// MarshalText implements encoding.TextMarshaler. +func (s SettlementItemType) MarshalText() ([]byte, error) { + switch s { + case SettlementItemTypePayout: + return []byte(s), nil + default: + return nil, errors.Errorf("invalid value: %q", s) + } +} + +// UnmarshalText implements encoding.TextUnmarshaler. +func (s *SettlementItemType) UnmarshalText(data []byte) error { + switch SettlementItemType(data) { + case SettlementItemTypePayout: + *s = SettlementItemTypePayout + return nil + default: + return errors.Errorf("invalid value: %q", data) + } +} + +type SettlementPaymentArray []SettlementPaymentArrayItem + +// SettlementPaymentArrayItem represents sum type. +type SettlementPaymentArrayItem struct { + Type SettlementPaymentArrayItemType // switch on this field + SettlementPayoutPayment SettlementPayoutPayment +} + +// SettlementPaymentArrayItemType is oneOf type of SettlementPaymentArrayItem. +type SettlementPaymentArrayItemType string + +// Possible values for SettlementPaymentArrayItemType. +const ( + SettlementPayoutPaymentSettlementPaymentArrayItem SettlementPaymentArrayItemType = "SettlementPayoutPayment" +) + +// IsSettlementPayoutPayment reports whether SettlementPaymentArrayItem is SettlementPayoutPayment. +func (s SettlementPaymentArrayItem) IsSettlementPayoutPayment() bool { + return s.Type == SettlementPayoutPaymentSettlementPaymentArrayItem +} + +// SetSettlementPayoutPayment sets SettlementPaymentArrayItem to SettlementPayoutPayment. +func (s *SettlementPaymentArrayItem) SetSettlementPayoutPayment(v SettlementPayoutPayment) { + s.Type = SettlementPayoutPaymentSettlementPaymentArrayItem + s.SettlementPayoutPayment = v +} + +// GetSettlementPayoutPayment returns SettlementPayoutPayment and true boolean if SettlementPaymentArrayItem is SettlementPayoutPayment. +func (s SettlementPaymentArrayItem) GetSettlementPayoutPayment() (v SettlementPayoutPayment, ok bool) { + if !s.IsSettlementPayoutPayment() { + return v, false + } + return s.SettlementPayoutPayment, true +} + +// NewSettlementPayoutPaymentSettlementPaymentArrayItem returns new SettlementPaymentArrayItem from SettlementPayoutPayment. +func NewSettlementPayoutPaymentSettlementPaymentArrayItem(v SettlementPayoutPayment) SettlementPaymentArrayItem { + var s SettlementPaymentArrayItem + s.SetSettlementPayoutPayment(v) + return s +} + +// Merged schema. +// Ref: #/components/schemas/SettlementPayoutPayment +type SettlementPayoutPayment struct { + Type SettlementItemType `json:"type"` + Amount SettlementPayoutPaymentAmount `json:"amount"` +} + +// GetType returns the value of Type. +func (s *SettlementPayoutPayment) GetType() SettlementItemType { + return s.Type +} + +// GetAmount returns the value of Amount. +func (s *SettlementPayoutPayment) GetAmount() SettlementPayoutPaymentAmount { + return s.Amount +} + +// SetType sets the value of Type. +func (s *SettlementPayoutPayment) SetType(val SettlementItemType) { + s.Type = val +} + +// SetAmount sets the value of Amount. +func (s *SettlementPayoutPayment) SetAmount(val SettlementPayoutPaymentAmount) { + s.Amount = val +} + +// Сумма в выбранной валюте. +type SettlementPayoutPaymentAmount struct { + // Сумма в выбранной валюте. Всегда дробное значение. + // Разделитель дробной части — точка, разделитель тысяч + // отсутствует. Количество знаков после точки зависит + // от выбранной валюты. Пример: 1000.00. + Value string `json:"value"` + Currency CurrencyCode `json:"currency"` +} + +// GetValue returns the value of Value. +func (s *SettlementPayoutPaymentAmount) GetValue() string { + return s.Value +} + +// GetCurrency returns the value of Currency. +func (s *SettlementPayoutPaymentAmount) GetCurrency() CurrencyCode { + return s.Currency +} + +// SetValue sets the value of Value. +func (s *SettlementPayoutPaymentAmount) SetValue(val string) { + s.Value = val +} + +// SetCurrency sets the value of Currency. +func (s *SettlementPayoutPaymentAmount) SetCurrency(val CurrencyCode) { + s.Currency = val +} + +// Merged schema. +// Ref: #/components/schemas/SettlementPayoutRefund +type SettlementPayoutRefund struct { + Type SettlementItemType `json:"type"` + Amount SettlementPayoutRefundAmount `json:"amount"` +} + +// GetType returns the value of Type. +func (s *SettlementPayoutRefund) GetType() SettlementItemType { + return s.Type +} + +// GetAmount returns the value of Amount. +func (s *SettlementPayoutRefund) GetAmount() SettlementPayoutRefundAmount { + return s.Amount +} + +// SetType sets the value of Type. +func (s *SettlementPayoutRefund) SetType(val SettlementItemType) { + s.Type = val +} + +// SetAmount sets the value of Amount. +func (s *SettlementPayoutRefund) SetAmount(val SettlementPayoutRefundAmount) { + s.Amount = val +} + +// Сумма в выбранной валюте. +type SettlementPayoutRefundAmount struct { + // Сумма в выбранной валюте. Всегда дробное значение. + // Разделитель дробной части — точка, разделитель тысяч + // отсутствует. Количество знаков после точки зависит + // от выбранной валюты. Пример: 1000.00. + Value string `json:"value"` + Currency CurrencyCode `json:"currency"` +} + +// GetValue returns the value of Value. +func (s *SettlementPayoutRefundAmount) GetValue() string { + return s.Value +} + +// GetCurrency returns the value of Currency. +func (s *SettlementPayoutRefundAmount) GetCurrency() CurrencyCode { + return s.Currency +} + +// SetValue sets the value of Value. +func (s *SettlementPayoutRefundAmount) SetValue(val string) { + s.Value = val +} + +// SetCurrency sets the value of Currency. +func (s *SettlementPayoutRefundAmount) SetCurrency(val CurrencyCode) { + s.Currency = val +} + +type SettlementRefundArray []SettlementRefundArrayItem + +// SettlementRefundArrayItem represents sum type. +type SettlementRefundArrayItem struct { + Type SettlementRefundArrayItemType // switch on this field + SettlementPayoutRefund SettlementPayoutRefund +} + +// SettlementRefundArrayItemType is oneOf type of SettlementRefundArrayItem. +type SettlementRefundArrayItemType string + +// Possible values for SettlementRefundArrayItemType. +const ( + SettlementPayoutRefundSettlementRefundArrayItem SettlementRefundArrayItemType = "SettlementPayoutRefund" +) + +// IsSettlementPayoutRefund reports whether SettlementRefundArrayItem is SettlementPayoutRefund. +func (s SettlementRefundArrayItem) IsSettlementPayoutRefund() bool { + return s.Type == SettlementPayoutRefundSettlementRefundArrayItem +} + +// SetSettlementPayoutRefund sets SettlementRefundArrayItem to SettlementPayoutRefund. +func (s *SettlementRefundArrayItem) SetSettlementPayoutRefund(v SettlementPayoutRefund) { + s.Type = SettlementPayoutRefundSettlementRefundArrayItem + s.SettlementPayoutRefund = v +} + +// GetSettlementPayoutRefund returns SettlementPayoutRefund and true boolean if SettlementRefundArrayItem is SettlementPayoutRefund. +func (s SettlementRefundArrayItem) GetSettlementPayoutRefund() (v SettlementPayoutRefund, ok bool) { + if !s.IsSettlementPayoutRefund() { + return v, false + } + return s.SettlementPayoutRefund, true +} + +// NewSettlementPayoutRefundSettlementRefundArrayItem returns new SettlementRefundArrayItem from SettlementPayoutRefund. +func NewSettlementPayoutRefundSettlementRefundArrayItem(v SettlementPayoutRefund) SettlementRefundArrayItem { + var s SettlementRefundArrayItem + s.SetSettlementPayoutRefund(v) + return s +} + +// Тип расчета. Перечень возможных значений * для Чеков +// от ЮKassa: https://yookassa. +// ru/developers/payment-acceptance/receipts/54fz/yoomoney/parameters-values#settlement-type * для +// сторонних онлайн-касс: https://yookassa. +// ru/developers/payment-acceptance/receipts/54fz/other-services/parameters-values#settlement-type. +type SettlementType string + +const ( + SettlementTypeCashless SettlementType = "cashless" + SettlementTypePrepayment SettlementType = "prepayment" + SettlementTypePostpayment SettlementType = "postpayment" + SettlementTypeConsideration SettlementType = "consideration" +) + +// AllValues returns all SettlementType values. +func (SettlementType) AllValues() []SettlementType { + return []SettlementType{ + SettlementTypeCashless, + SettlementTypePrepayment, + SettlementTypePostpayment, + SettlementTypeConsideration, + } +} + +// MarshalText implements encoding.TextMarshaler. +func (s SettlementType) MarshalText() ([]byte, error) { + switch s { + case SettlementTypeCashless: + return []byte(s), nil + case SettlementTypePrepayment: + return []byte(s), nil + case SettlementTypePostpayment: + return []byte(s), nil + case SettlementTypeConsideration: + return []byte(s), nil + default: + return nil, errors.Errorf("invalid value: %q", s) + } +} + +// UnmarshalText implements encoding.TextUnmarshaler. +func (s *SettlementType) UnmarshalText(data []byte) error { + switch SettlementType(data) { + case SettlementTypeCashless: + *s = SettlementTypeCashless + return nil + case SettlementTypePrepayment: + *s = SettlementTypePrepayment + return nil + case SettlementTypePostpayment: + *s = SettlementTypePostpayment + return nil + case SettlementTypeConsideration: + *s = SettlementTypeConsideration + return nil + default: + return errors.Errorf("invalid value: %q", data) + } +} + +type TaxSystemCode int32 + +type Test bool + +// Information about user’s 3‑D Secure authentication for confirming the payment. +// Ref: #/components/schemas/ThreeDSecureDetails +type ThreeDSecureDetails struct { + // Information on whether the 3-D Secure authentication form is displayed to the user for confirming + // the payment or not. Possible values: true: YooMoney displayed the form to the user, so that they + // could complete 3-D Secure authentication; false: payment was processed without 3-D Secure + // authentication. + Applied bool `json:"applied"` +} + +// GetApplied returns the value of Applied. +func (s *ThreeDSecureDetails) GetApplied() bool { + return s.Applied +} + +// SetApplied sets the value of Applied. +func (s *ThreeDSecureDetails) SetApplied(val bool) { + s.Applied = val +} + +// Merged schema. +// Ref: #/components/schemas/TooManyRequests +type TooManyRequests struct { + // Тип объекта. + Type OptTooManyRequestsType `json:"type"` + // Идентификатор ошибки. Используйте его, если возникла + // необходимость обратиться в техническую поддержку. + ID OptString `json:"id"` + // Подробное описание ошибки. + Description OptString `json:"description"` + // Название параметра, из-за которого произошла ошибка. + Parameter OptString `json:"parameter"` + // Рекомендуемое количество миллисекунд, спустя + // которое следует повторить запрос. + RetryAfter OptInt `json:"retry_after"` + // Код ошибки. + Code OptTooManyRequestsCode `json:"code"` +} + +// GetType returns the value of Type. +func (s *TooManyRequests) GetType() OptTooManyRequestsType { + return s.Type +} + +// GetID returns the value of ID. +func (s *TooManyRequests) GetID() OptString { + return s.ID +} + +// GetDescription returns the value of Description. +func (s *TooManyRequests) GetDescription() OptString { + return s.Description +} + +// GetParameter returns the value of Parameter. +func (s *TooManyRequests) GetParameter() OptString { + return s.Parameter +} + +// GetRetryAfter returns the value of RetryAfter. +func (s *TooManyRequests) GetRetryAfter() OptInt { + return s.RetryAfter +} + +// GetCode returns the value of Code. +func (s *TooManyRequests) GetCode() OptTooManyRequestsCode { + return s.Code +} + +// SetType sets the value of Type. +func (s *TooManyRequests) SetType(val OptTooManyRequestsType) { + s.Type = val +} + +// SetID sets the value of ID. +func (s *TooManyRequests) SetID(val OptString) { + s.ID = val +} + +// SetDescription sets the value of Description. +func (s *TooManyRequests) SetDescription(val OptString) { + s.Description = val +} + +// SetParameter sets the value of Parameter. +func (s *TooManyRequests) SetParameter(val OptString) { + s.Parameter = val +} + +// SetRetryAfter sets the value of RetryAfter. +func (s *TooManyRequests) SetRetryAfter(val OptInt) { + s.RetryAfter = val +} + +// SetCode sets the value of Code. +func (s *TooManyRequests) SetCode(val OptTooManyRequestsCode) { + s.Code = val +} + +func (*TooManyRequests) meGetRes() {} +func (*TooManyRequests) paymentsGetRes() {} +func (*TooManyRequests) paymentsPaymentIDCancelPostRes() {} +func (*TooManyRequests) paymentsPaymentIDCapturePostRes() {} +func (*TooManyRequests) paymentsPaymentIDGetRes() {} +func (*TooManyRequests) paymentsPostRes() {} +func (*TooManyRequests) receiptsGetRes() {} +func (*TooManyRequests) receiptsPostRes() {} +func (*TooManyRequests) receiptsReceiptIDGetRes() {} +func (*TooManyRequests) refundsGetRes() {} +func (*TooManyRequests) refundsPostRes() {} +func (*TooManyRequests) refundsRefundIDGetRes() {} +func (*TooManyRequests) webhooksGetRes() {} +func (*TooManyRequests) webhooksPostRes() {} +func (*TooManyRequests) webhooksWebhookIDDeleteRes() {} + +// Код ошибки. +type TooManyRequestsCode string + +const ( + TooManyRequestsCodeTooManyRequests TooManyRequestsCode = "too_many_requests" +) + +// AllValues returns all TooManyRequestsCode values. +func (TooManyRequestsCode) AllValues() []TooManyRequestsCode { + return []TooManyRequestsCode{ + TooManyRequestsCodeTooManyRequests, + } +} + +// MarshalText implements encoding.TextMarshaler. +func (s TooManyRequestsCode) MarshalText() ([]byte, error) { + switch s { + case TooManyRequestsCodeTooManyRequests: + return []byte(s), nil + default: + return nil, errors.Errorf("invalid value: %q", s) + } +} + +// UnmarshalText implements encoding.TextUnmarshaler. +func (s *TooManyRequestsCode) UnmarshalText(data []byte) error { + switch TooManyRequestsCode(data) { + case TooManyRequestsCodeTooManyRequests: + *s = TooManyRequestsCodeTooManyRequests + return nil + default: + return errors.Errorf("invalid value: %q", data) + } +} + +// Тип объекта. +type TooManyRequestsType string + +const ( + TooManyRequestsTypeError TooManyRequestsType = "error" +) + +// AllValues returns all TooManyRequestsType values. +func (TooManyRequestsType) AllValues() []TooManyRequestsType { + return []TooManyRequestsType{ + TooManyRequestsTypeError, + } +} + +// MarshalText implements encoding.TextMarshaler. +func (s TooManyRequestsType) MarshalText() ([]byte, error) { + switch s { + case TooManyRequestsTypeError: + return []byte(s), nil + default: + return nil, errors.Errorf("invalid value: %q", s) + } +} + +// UnmarshalText implements encoding.TextUnmarshaler. +func (s *TooManyRequestsType) UnmarshalText(data []byte) error { + switch TooManyRequestsType(data) { + case TooManyRequestsTypeError: + *s = TooManyRequestsTypeError + return nil + default: + return errors.Errorf("invalid value: %q", data) + } +} + +// Information about money distribution: the amounts of transfers and the stores to be transferred to. +// +// Specified if you use Split payments: https://yookassa. +// +// ru/developers/solutions-for-platforms/split-payments/basics. +// Ref: #/components/schemas/Transfer +type Transfer struct { + AccountID string `json:"account_id"` + Amount TransferAmount `json:"amount"` + Status TransferStatus `json:"status"` + PlatformFeeAmount OptTransferPlatformFeeAmount `json:"platform_fee_amount"` + // Transaction description (up to 128 characters), which the seller will see in the YooMoney Merchant + // Profile. Example: "Marketplace order No. 72". + Description OptString `json:"description"` + Metadata OptMetadata `json:"metadata"` +} + +// GetAccountID returns the value of AccountID. +func (s *Transfer) GetAccountID() string { + return s.AccountID +} + +// GetAmount returns the value of Amount. +func (s *Transfer) GetAmount() TransferAmount { + return s.Amount +} + +// GetStatus returns the value of Status. +func (s *Transfer) GetStatus() TransferStatus { + return s.Status +} + +// GetPlatformFeeAmount returns the value of PlatformFeeAmount. +func (s *Transfer) GetPlatformFeeAmount() OptTransferPlatformFeeAmount { + return s.PlatformFeeAmount +} + +// GetDescription returns the value of Description. +func (s *Transfer) GetDescription() OptString { + return s.Description +} + +// GetMetadata returns the value of Metadata. +func (s *Transfer) GetMetadata() OptMetadata { + return s.Metadata +} + +// SetAccountID sets the value of AccountID. +func (s *Transfer) SetAccountID(val string) { + s.AccountID = val +} + +// SetAmount sets the value of Amount. +func (s *Transfer) SetAmount(val TransferAmount) { + s.Amount = val +} + +// SetStatus sets the value of Status. +func (s *Transfer) SetStatus(val TransferStatus) { + s.Status = val +} + +// SetPlatformFeeAmount sets the value of PlatformFeeAmount. +func (s *Transfer) SetPlatformFeeAmount(val OptTransferPlatformFeeAmount) { + s.PlatformFeeAmount = val +} + +// SetDescription sets the value of Description. +func (s *Transfer) SetDescription(val OptString) { + s.Description = val +} + +// SetMetadata sets the value of Metadata. +func (s *Transfer) SetMetadata(val OptMetadata) { + s.Metadata = val +} + +// Merged schema. +type TransferAmount struct { + // Сумма в выбранной валюте. Всегда дробное значение. + // Разделитель дробной части — точка, разделитель тысяч + // отсутствует. Количество знаков после точки зависит + // от выбранной валюты. Пример: 1000.00. + Value string `json:"value"` + Currency CurrencyCode `json:"currency"` +} + +// GetValue returns the value of Value. +func (s *TransferAmount) GetValue() string { + return s.Value +} + +// GetCurrency returns the value of Currency. +func (s *TransferAmount) GetCurrency() CurrencyCode { + return s.Currency +} + +// SetValue sets the value of Value. +func (s *TransferAmount) SetValue(val string) { + s.Value = val +} + +// SetCurrency sets the value of Currency. +func (s *TransferAmount) SetCurrency(val CurrencyCode) { + s.Currency = val +} + +// Information about money distribution: the amounts of transfers and the stores to be transferred to. +// +// Specified if you use Split payments: https://yookassa. +// +// ru/developers/solutions-for-platforms/split-payments/basics. +// Ref: #/components/schemas/TransferData +type TransferData struct { + AccountID string `json:"account_id"` + Amount TransferDataAmount `json:"amount"` + PlatformFeeAmount OptTransferDataPlatformFeeAmount `json:"platform_fee_amount"` +} + +// GetAccountID returns the value of AccountID. +func (s *TransferData) GetAccountID() string { + return s.AccountID +} + +// GetAmount returns the value of Amount. +func (s *TransferData) GetAmount() TransferDataAmount { + return s.Amount +} + +// GetPlatformFeeAmount returns the value of PlatformFeeAmount. +func (s *TransferData) GetPlatformFeeAmount() OptTransferDataPlatformFeeAmount { + return s.PlatformFeeAmount +} + +// SetAccountID sets the value of AccountID. +func (s *TransferData) SetAccountID(val string) { + s.AccountID = val +} + +// SetAmount sets the value of Amount. +func (s *TransferData) SetAmount(val TransferDataAmount) { + s.Amount = val +} + +// SetPlatformFeeAmount sets the value of PlatformFeeAmount. +func (s *TransferData) SetPlatformFeeAmount(val OptTransferDataPlatformFeeAmount) { + s.PlatformFeeAmount = val +} + +// Merged schema. +type TransferDataAmount struct { + // Сумма в выбранной валюте. Всегда дробное значение. + // Разделитель дробной части — точка, разделитель тысяч + // отсутствует. Количество знаков после точки зависит + // от выбранной валюты. Пример: 1000.00. + Value string `json:"value"` + Currency CurrencyCode `json:"currency"` +} + +// GetValue returns the value of Value. +func (s *TransferDataAmount) GetValue() string { + return s.Value +} + +// GetCurrency returns the value of Currency. +func (s *TransferDataAmount) GetCurrency() CurrencyCode { + return s.Currency +} + +// SetValue sets the value of Value. +func (s *TransferDataAmount) SetValue(val string) { + s.Value = val +} + +// SetCurrency sets the value of Currency. +func (s *TransferDataAmount) SetCurrency(val CurrencyCode) { + s.Currency = val +} + +// Merged schema. +// Ref: #/components/schemas/TransferDataPayment +type TransferDataPayment struct { + AccountID string `json:"account_id"` + Amount TransferDataPaymentAmount `json:"amount"` + PlatformFeeAmount OptTransferDataPaymentPlatformFeeAmount `json:"platform_fee_amount"` + // Transaction description (up to 128 characters), which the seller will see in the YooMoney Merchant + // Profile. Example: "Marketplace order No. 72". + Description OptString `json:"description"` + Metadata OptMetadata `json:"metadata"` +} + +// GetAccountID returns the value of AccountID. +func (s *TransferDataPayment) GetAccountID() string { + return s.AccountID +} + +// GetAmount returns the value of Amount. +func (s *TransferDataPayment) GetAmount() TransferDataPaymentAmount { + return s.Amount +} + +// GetPlatformFeeAmount returns the value of PlatformFeeAmount. +func (s *TransferDataPayment) GetPlatformFeeAmount() OptTransferDataPaymentPlatformFeeAmount { + return s.PlatformFeeAmount +} + +// GetDescription returns the value of Description. +func (s *TransferDataPayment) GetDescription() OptString { + return s.Description +} + +// GetMetadata returns the value of Metadata. +func (s *TransferDataPayment) GetMetadata() OptMetadata { + return s.Metadata +} + +// SetAccountID sets the value of AccountID. +func (s *TransferDataPayment) SetAccountID(val string) { + s.AccountID = val +} + +// SetAmount sets the value of Amount. +func (s *TransferDataPayment) SetAmount(val TransferDataPaymentAmount) { + s.Amount = val +} + +// SetPlatformFeeAmount sets the value of PlatformFeeAmount. +func (s *TransferDataPayment) SetPlatformFeeAmount(val OptTransferDataPaymentPlatformFeeAmount) { + s.PlatformFeeAmount = val +} + +// SetDescription sets the value of Description. +func (s *TransferDataPayment) SetDescription(val OptString) { + s.Description = val +} + +// SetMetadata sets the value of Metadata. +func (s *TransferDataPayment) SetMetadata(val OptMetadata) { + s.Metadata = val +} + +// Merged schema. +type TransferDataPaymentAmount struct { + // Сумма в выбранной валюте. Всегда дробное значение. + // Разделитель дробной части — точка, разделитель тысяч + // отсутствует. Количество знаков после точки зависит + // от выбранной валюты. Пример: 1000.00. + Value string `json:"value"` + Currency CurrencyCode `json:"currency"` +} + +// GetValue returns the value of Value. +func (s *TransferDataPaymentAmount) GetValue() string { + return s.Value +} + +// GetCurrency returns the value of Currency. +func (s *TransferDataPaymentAmount) GetCurrency() CurrencyCode { + return s.Currency +} + +// SetValue sets the value of Value. +func (s *TransferDataPaymentAmount) SetValue(val string) { + s.Value = val +} + +// SetCurrency sets the value of Currency. +func (s *TransferDataPaymentAmount) SetCurrency(val CurrencyCode) { + s.Currency = val +} + +// Merged schema. +type TransferDataPaymentPlatformFeeAmount struct { + // Сумма в выбранной валюте. Всегда дробное значение. + // Разделитель дробной части — точка, разделитель тысяч + // отсутствует. Количество знаков после точки зависит + // от выбранной валюты. Пример: 1000.00. + Value string `json:"value"` + Currency CurrencyCode `json:"currency"` +} + +// GetValue returns the value of Value. +func (s *TransferDataPaymentPlatformFeeAmount) GetValue() string { + return s.Value +} + +// GetCurrency returns the value of Currency. +func (s *TransferDataPaymentPlatformFeeAmount) GetCurrency() CurrencyCode { + return s.Currency +} + +// SetValue sets the value of Value. +func (s *TransferDataPaymentPlatformFeeAmount) SetValue(val string) { + s.Value = val +} + +// SetCurrency sets the value of Currency. +func (s *TransferDataPaymentPlatformFeeAmount) SetCurrency(val CurrencyCode) { + s.Currency = val +} + +// Merged schema. +type TransferDataPlatformFeeAmount struct { + // Сумма в выбранной валюте. Всегда дробное значение. + // Разделитель дробной части — точка, разделитель тысяч + // отсутствует. Количество знаков после точки зависит + // от выбранной валюты. Пример: 1000.00. + Value string `json:"value"` + Currency CurrencyCode `json:"currency"` +} + +// GetValue returns the value of Value. +func (s *TransferDataPlatformFeeAmount) GetValue() string { + return s.Value +} + +// GetCurrency returns the value of Currency. +func (s *TransferDataPlatformFeeAmount) GetCurrency() CurrencyCode { + return s.Currency +} + +// SetValue sets the value of Value. +func (s *TransferDataPlatformFeeAmount) SetValue(val string) { + s.Value = val +} + +// SetCurrency sets the value of Currency. +func (s *TransferDataPlatformFeeAmount) SetCurrency(val CurrencyCode) { + s.Currency = val +} + +// Merged schema. +type TransferPlatformFeeAmount struct { + // Сумма в выбранной валюте. Всегда дробное значение. + // Разделитель дробной части — точка, разделитель тысяч + // отсутствует. Количество знаков после точки зависит + // от выбранной валюты. Пример: 1000.00. + Value string `json:"value"` + Currency CurrencyCode `json:"currency"` +} + +// GetValue returns the value of Value. +func (s *TransferPlatformFeeAmount) GetValue() string { + return s.Value +} + +// GetCurrency returns the value of Currency. +func (s *TransferPlatformFeeAmount) GetCurrency() CurrencyCode { + return s.Currency +} + +// SetValue sets the value of Value. +func (s *TransferPlatformFeeAmount) SetValue(val string) { + s.Value = val +} + +// SetCurrency sets the value of Currency. +func (s *TransferPlatformFeeAmount) SetCurrency(val CurrencyCode) { + s.Currency = val +} + +// Status of the money distribution between stores. Possible values: pending, waiting_for_capture, +// succeeded, canceled. +// Ref: #/components/schemas/TransferStatus +type TransferStatus string + +const ( + TransferStatusPending TransferStatus = "pending" + TransferStatusWaitingForCapture TransferStatus = "waiting_for_capture" + TransferStatusSucceeded TransferStatus = "succeeded" + TransferStatusCanceled TransferStatus = "canceled" +) + +// AllValues returns all TransferStatus values. +func (TransferStatus) AllValues() []TransferStatus { + return []TransferStatus{ + TransferStatusPending, + TransferStatusWaitingForCapture, + TransferStatusSucceeded, + TransferStatusCanceled, + } +} + +// MarshalText implements encoding.TextMarshaler. +func (s TransferStatus) MarshalText() ([]byte, error) { + switch s { + case TransferStatusPending: + return []byte(s), nil + case TransferStatusWaitingForCapture: + return []byte(s), nil + case TransferStatusSucceeded: + return []byte(s), nil + case TransferStatusCanceled: + return []byte(s), nil + default: + return nil, errors.Errorf("invalid value: %q", s) + } +} + +// UnmarshalText implements encoding.TextUnmarshaler. +func (s *TransferStatus) UnmarshalText(data []byte) error { + switch TransferStatus(data) { + case TransferStatusPending: + *s = TransferStatusPending + return nil + case TransferStatusWaitingForCapture: + *s = TransferStatusWaitingForCapture + return nil + case TransferStatusSucceeded: + *s = TransferStatusSucceeded + return nil + case TransferStatusCanceled: + *s = TransferStatusCanceled + return nil + default: + return errors.Errorf("invalid value: %q", data) + } +} + +// Данные о webhook. +// Ref: #/components/schemas/Webhook +type Webhook struct { + // Идентификатор webhook. + ID string `json:"id"` + Event WebhookEvent `json:"event"` + // URL, на который ЮKassa отправляет уведомления. + URL string `json:"url"` +} + +// GetID returns the value of ID. +func (s *Webhook) GetID() string { + return s.ID +} + +// GetEvent returns the value of Event. +func (s *Webhook) GetEvent() WebhookEvent { + return s.Event +} + +// GetURL returns the value of URL. +func (s *Webhook) GetURL() string { + return s.URL +} + +// SetID sets the value of ID. +func (s *Webhook) SetID(val string) { + s.ID = val +} + +// SetEvent sets the value of Event. +func (s *Webhook) SetEvent(val WebhookEvent) { + s.Event = val +} + +// SetURL sets the value of URL. +func (s *Webhook) SetURL(val string) { + s.URL = val +} + +func (*Webhook) webhooksPostRes() {} + +type WebhookEvent string + +const ( + WebhookEventPaymentWaitingForCapture WebhookEvent = "payment.waiting_for_capture" + WebhookEventPaymentSucceeded WebhookEvent = "payment.succeeded" + WebhookEventPaymentCanceled WebhookEvent = "payment.canceled" + WebhookEventRefundSucceeded WebhookEvent = "refund.succeeded" +) + +// AllValues returns all WebhookEvent values. +func (WebhookEvent) AllValues() []WebhookEvent { + return []WebhookEvent{ + WebhookEventPaymentWaitingForCapture, + WebhookEventPaymentSucceeded, + WebhookEventPaymentCanceled, + WebhookEventRefundSucceeded, + } +} + +// MarshalText implements encoding.TextMarshaler. +func (s WebhookEvent) MarshalText() ([]byte, error) { + switch s { + case WebhookEventPaymentWaitingForCapture: + return []byte(s), nil + case WebhookEventPaymentSucceeded: + return []byte(s), nil + case WebhookEventPaymentCanceled: + return []byte(s), nil + case WebhookEventRefundSucceeded: + return []byte(s), nil + default: + return nil, errors.Errorf("invalid value: %q", s) + } +} + +// UnmarshalText implements encoding.TextUnmarshaler. +func (s *WebhookEvent) UnmarshalText(data []byte) error { + switch WebhookEvent(data) { + case WebhookEventPaymentWaitingForCapture: + *s = WebhookEventPaymentWaitingForCapture + return nil + case WebhookEventPaymentSucceeded: + *s = WebhookEventPaymentSucceeded + return nil + case WebhookEventPaymentCanceled: + *s = WebhookEventPaymentCanceled + return nil + case WebhookEventRefundSucceeded: + *s = WebhookEventRefundSucceeded + return nil + default: + return errors.Errorf("invalid value: %q", data) + } +} + +// Список webhook. +// Ref: #/components/schemas/WebhookList +type WebhookList struct { + // Формат выдачи результатов запроса. Возможное + // значение: list (список). + Type WebhookListType `json:"type"` + Items []Webhook `json:"items"` +} + +// GetType returns the value of Type. +func (s *WebhookList) GetType() WebhookListType { + return s.Type +} + +// GetItems returns the value of Items. +func (s *WebhookList) GetItems() []Webhook { + return s.Items +} + +// SetType sets the value of Type. +func (s *WebhookList) SetType(val WebhookListType) { + s.Type = val +} + +// SetItems sets the value of Items. +func (s *WebhookList) SetItems(val []Webhook) { + s.Items = val +} + +func (*WebhookList) webhooksGetRes() {} + +// Формат выдачи результатов запроса. Возможное +// значение: list (список). +type WebhookListType string + +const ( + WebhookListTypeList WebhookListType = "list" +) + +// AllValues returns all WebhookListType values. +func (WebhookListType) AllValues() []WebhookListType { + return []WebhookListType{ + WebhookListTypeList, + } +} + +// MarshalText implements encoding.TextMarshaler. +func (s WebhookListType) MarshalText() ([]byte, error) { + switch s { + case WebhookListTypeList: + return []byte(s), nil + default: + return nil, errors.Errorf("invalid value: %q", s) + } +} + +// UnmarshalText implements encoding.TextUnmarshaler. +func (s *WebhookListType) UnmarshalText(data []byte) error { + switch WebhookListType(data) { + case WebhookListTypeList: + *s = WebhookListTypeList + return nil + default: + return errors.Errorf("invalid value: %q", data) + } +} + +type WebhooksPostReq struct { + Event WebhooksPostReqEvent `json:"event"` + // URL, на который ЮKassa будет отправлять уведомления. + URL string `json:"url"` +} + +// GetEvent returns the value of Event. +func (s *WebhooksPostReq) GetEvent() WebhooksPostReqEvent { + return s.Event +} + +// GetURL returns the value of URL. +func (s *WebhooksPostReq) GetURL() string { + return s.URL +} + +// SetEvent sets the value of Event. +func (s *WebhooksPostReq) SetEvent(val WebhooksPostReqEvent) { + s.Event = val +} + +// SetURL sets the value of URL. +func (s *WebhooksPostReq) SetURL(val string) { + s.URL = val +} + +type WebhooksPostReqEvent string + +const ( + WebhooksPostReqEventPaymentWaitingForCapture WebhooksPostReqEvent = "payment.waiting_for_capture" + WebhooksPostReqEventPaymentSucceeded WebhooksPostReqEvent = "payment.succeeded" + WebhooksPostReqEventPaymentCanceled WebhooksPostReqEvent = "payment.canceled" + WebhooksPostReqEventRefundSucceeded WebhooksPostReqEvent = "refund.succeeded" +) + +// AllValues returns all WebhooksPostReqEvent values. +func (WebhooksPostReqEvent) AllValues() []WebhooksPostReqEvent { + return []WebhooksPostReqEvent{ + WebhooksPostReqEventPaymentWaitingForCapture, + WebhooksPostReqEventPaymentSucceeded, + WebhooksPostReqEventPaymentCanceled, + WebhooksPostReqEventRefundSucceeded, + } +} + +// MarshalText implements encoding.TextMarshaler. +func (s WebhooksPostReqEvent) MarshalText() ([]byte, error) { + switch s { + case WebhooksPostReqEventPaymentWaitingForCapture: + return []byte(s), nil + case WebhooksPostReqEventPaymentSucceeded: + return []byte(s), nil + case WebhooksPostReqEventPaymentCanceled: + return []byte(s), nil + case WebhooksPostReqEventRefundSucceeded: + return []byte(s), nil + default: + return nil, errors.Errorf("invalid value: %q", s) + } +} + +// UnmarshalText implements encoding.TextUnmarshaler. +func (s *WebhooksPostReqEvent) UnmarshalText(data []byte) error { + switch WebhooksPostReqEvent(data) { + case WebhooksPostReqEventPaymentWaitingForCapture: + *s = WebhooksPostReqEventPaymentWaitingForCapture + return nil + case WebhooksPostReqEventPaymentSucceeded: + *s = WebhooksPostReqEventPaymentSucceeded + return nil + case WebhooksPostReqEventPaymentCanceled: + *s = WebhooksPostReqEventPaymentCanceled + return nil + case WebhooksPostReqEventRefundSucceeded: + *s = WebhooksPostReqEventRefundSucceeded + return nil + default: + return errors.Errorf("invalid value: %q", data) + } +} + +type WebhooksWebhookIDDeleteOK struct{} + +func (*WebhooksWebhookIDDeleteOK) webhooksWebhookIDDeleteRes() {} + +type YooMoneyAccountNumber string diff --git a/internal/service/yookassa/gen/oas_security_gen.go b/internal/service/yookassa/gen/oas_security_gen.go new file mode 100644 index 0000000..c9d6d25 --- /dev/null +++ b/internal/service/yookassa/gen/oas_security_gen.go @@ -0,0 +1,207 @@ +// Code generated by ogen, DO NOT EDIT. + +package gen + +import ( + "context" + "net/http" + "strings" + + "github.com/go-faster/errors" + "github.com/ogen-go/ogen/ogenerrors" +) + +// SecurityHandler is handler for security parameters. +type SecurityHandler interface { + // HandleBasicAuth handles BasicAuth security. + // HTTP Basic аутентификация клиента ЮKassa. + HandleBasicAuth(ctx context.Context, operationName OperationName, t BasicAuth) (context.Context, error) + // HandleOAuth2 handles OAuth2 security. + // Авторизация клиента ЮKassa с использованием OAuth-токена. + HandleOAuth2(ctx context.Context, operationName OperationName, t OAuth2) (context.Context, error) +} + +func findAuthorization(h http.Header, prefix string) (string, bool) { + v, ok := h["Authorization"] + if !ok { + return "", false + } + for _, vv := range v { + scheme, value, ok := strings.Cut(vv, " ") + if !ok || !strings.EqualFold(scheme, prefix) { + continue + } + return value, true + } + return "", false +} + +// operationRolesBasicAuth is a private map storing roles per operation. +var operationRolesBasicAuth = map[string][]string{ + DealsDealIDGetOperation: []string{}, + DealsGetOperation: []string{}, + DealsPostOperation: []string{}, + MeGetOperation: []string{}, + PaymentMethodsPaymentMethodIDGetOperation: []string{}, + PaymentMethodsPostOperation: []string{}, + PaymentsGetOperation: []string{}, + PaymentsPaymentIDCancelPostOperation: []string{}, + PaymentsPaymentIDCapturePostOperation: []string{}, + PaymentsPaymentIDGetOperation: []string{}, + PaymentsPostOperation: []string{}, + PayoutsGetOperation: []string{}, + PayoutsPayoutIDGetOperation: []string{}, + PayoutsPostOperation: []string{}, + PayoutsSearchGetOperation: []string{}, + PersonalDataPersonalDataIDGetOperation: []string{}, + PersonalDataPostOperation: []string{}, + ReceiptsGetOperation: []string{}, + ReceiptsPostOperation: []string{}, + ReceiptsReceiptIDGetOperation: []string{}, + RefundsGetOperation: []string{}, + RefundsPostOperation: []string{}, + RefundsRefundIDGetOperation: []string{}, + SbpBanksGetOperation: []string{}, + WebhooksGetOperation: []string{}, + WebhooksPostOperation: []string{}, + WebhooksWebhookIDDeleteOperation: []string{}, +} + +// GetRolesForBasicAuth returns the required roles for the given operation. +// +// This is useful for authorization scenarios where you need to know which roles +// are required for an operation. +// +// Example: +// +// requiredRoles := GetRolesForBasicAuth(AddPetOperation) +// +// Returns nil if the operation has no role requirements or if the operation is unknown. +func GetRolesForBasicAuth(operation string) []string { + roles, ok := operationRolesBasicAuth[operation] + if !ok { + return nil + } + // Return a copy to prevent external modification + result := make([]string, len(roles)) + copy(result, roles) + return result +} + +// oauth2ScopesOAuth2 is a private map storing OAuth2 scopes per operation. +var oauth2ScopesOAuth2 = map[string][]string{ + DealsDealIDGetOperation: []string{}, + DealsGetOperation: []string{}, + DealsPostOperation: []string{}, + MeGetOperation: []string{}, + PaymentMethodsPaymentMethodIDGetOperation: []string{}, + PaymentMethodsPostOperation: []string{}, + PaymentsGetOperation: []string{}, + PaymentsPaymentIDCancelPostOperation: []string{}, + PaymentsPaymentIDCapturePostOperation: []string{}, + PaymentsPaymentIDGetOperation: []string{}, + PaymentsPostOperation: []string{}, + PayoutsGetOperation: []string{}, + PayoutsPayoutIDGetOperation: []string{}, + PayoutsPostOperation: []string{}, + PayoutsSearchGetOperation: []string{}, + PersonalDataPersonalDataIDGetOperation: []string{}, + PersonalDataPostOperation: []string{}, + ReceiptsGetOperation: []string{}, + ReceiptsPostOperation: []string{}, + ReceiptsReceiptIDGetOperation: []string{}, + RefundsGetOperation: []string{}, + RefundsPostOperation: []string{}, + RefundsRefundIDGetOperation: []string{}, + SbpBanksGetOperation: []string{}, + WebhooksGetOperation: []string{}, + WebhooksPostOperation: []string{}, + WebhooksWebhookIDDeleteOperation: []string{}, +} + +// GetOAuth2ScopesForOAuth2 returns the required OAuth2 scopes for the given operation. +// +// This is useful for token exchange scenarios where you need to know which scopes +// to request when obtaining a token for a downstream API call. +// +// Example: +// +// requiredScopes := GetOAuth2ScopesForOAuth2(AddPetOperation) +// token := exchangeTokenWithScopes(requiredScopes, "https://api.example.com") +// +// Returns nil if the operation has no scope requirements or if the operation is unknown. +func GetOAuth2ScopesForOAuth2(operation string) []string { + scopes, ok := oauth2ScopesOAuth2[operation] + if !ok { + return nil + } + // Return a copy to prevent external modification + result := make([]string, len(scopes)) + copy(result, scopes) + return result +} + +func (s *Server) securityBasicAuth(ctx context.Context, operationName OperationName, req *http.Request) (context.Context, bool, error) { + var t BasicAuth + if _, ok := findAuthorization(req.Header, "Basic"); !ok { + return ctx, false, nil + } + username, password, ok := req.BasicAuth() + if !ok { + return nil, false, errors.New("invalid basic auth") + } + t.Username = username + t.Password = password + t.Roles = operationRolesBasicAuth[operationName] + rctx, err := s.sec.HandleBasicAuth(ctx, operationName, t) + if errors.Is(err, ogenerrors.ErrSkipServerSecurity) { + return nil, false, nil + } else if err != nil { + return nil, false, err + } + return rctx, true, err +} + +func (s *Server) securityOAuth2(ctx context.Context, operationName OperationName, req *http.Request) (context.Context, bool, error) { + var t OAuth2 + token, ok := findAuthorization(req.Header, "Bearer") + if !ok { + return ctx, false, nil + } + t.Token = token + t.Scopes = oauth2ScopesOAuth2[operationName] + rctx, err := s.sec.HandleOAuth2(ctx, operationName, t) + if errors.Is(err, ogenerrors.ErrSkipServerSecurity) { + return nil, false, nil + } else if err != nil { + return nil, false, err + } + return rctx, true, err +} + +// SecuritySource is provider of security values (tokens, passwords, etc.). +type SecuritySource interface { + // BasicAuth provides BasicAuth security value. + // HTTP Basic аутентификация клиента ЮKassa. + BasicAuth(ctx context.Context, operationName OperationName) (BasicAuth, error) + // OAuth2 provides OAuth2 security value. + // Авторизация клиента ЮKassa с использованием OAuth-токена. + OAuth2(ctx context.Context, operationName OperationName) (OAuth2, error) +} + +func (s *Client) securityBasicAuth(ctx context.Context, operationName OperationName, req *http.Request) error { + t, err := s.sec.BasicAuth(ctx, operationName) + if err != nil { + return errors.Wrap(err, "security source \"BasicAuth\"") + } + req.SetBasicAuth(t.Username, t.Password) + return nil +} +func (s *Client) securityOAuth2(ctx context.Context, operationName OperationName, req *http.Request) error { + t, err := s.sec.OAuth2(ctx, operationName) + if err != nil { + return errors.Wrap(err, "security source \"OAuth2\"") + } + req.Header.Set("Authorization", "Bearer "+t.Token) + return nil +} diff --git a/internal/service/yookassa/gen/oas_server_gen.go b/internal/service/yookassa/gen/oas_server_gen.go new file mode 100644 index 0000000..976bc4c --- /dev/null +++ b/internal/service/yookassa/gen/oas_server_gen.go @@ -0,0 +1,316 @@ +// Code generated by ogen, DO NOT EDIT. + +package gen + +import ( + "context" +) + +// Handler handles operations described by OpenAPI v3 specification. +type Handler interface { + // DealsDealIDGet implements GET /deals/{deal_id} operation. + // + // Запрос позволяет получить информацию о текущем + // состоянии сделки по ее уникальному идентификатору. + // + // GET /deals/{deal_id} + DealsDealIDGet(ctx context.Context, params DealsDealIDGetParams) (DealsDealIDGetRes, error) + // DealsGet implements GET /deals operation. + // + // Запрос позволяет получить список сделок, + // отфильтрованный по заданным критериям. Подробнее о + // работе со списками: https://yookassa.ru/developers/using-api/lists. + // + // GET /deals + DealsGet(ctx context.Context, params DealsGetParams) (DealsGetRes, error) + // DealsPost implements POST /deals operation. + // + // Запрос позволяет создать сделку, в рамках которой + // необходимо принять оплату от покупателя и + // перечислить ее продавцу. + // + // POST /deals + DealsPost(ctx context.Context, req *SafeDealRequest, params DealsPostParams) (DealsPostRes, error) + // MeGet implements GET /me operation. + // + // С помощью этого запроса вы можете получить + // информацию о магазине или шлюзе: * Для Сплитования + // платежей: https://yookassa.ru/developers/solutions-for-platforms/split-payments/basics: в + // запросе необходимо передать параметр on_behalf_of с + // идентификатором магазина продавца и ваши данные для + // аутентификации: https://yookassa.ru/developers/using-api/interaction-format#auth + // (идентификатор и секретный ключ вашей платформы). * + // Для партнеров: https://yookassa. + // ru/developers/solutions-for-platforms/partners-api/basics: в запросе необходимо + // передать OAuth-токен магазина. * Для выплат: https://yookassa. + // ru/developers/payouts/overview: в запросе необходимо передать ваши + // данные для аутентификации: https://yookassa. + // ru/developers/using-api/interaction-format#auth (идентификатор и секретный + // ключ вашего шлюза). + // + // GET /me + MeGet(ctx context.Context, params MeGetParams) (MeGetRes, error) + // PaymentMethodsPaymentMethodIDGet implements GET /payment_methods/{payment_method_id} operation. + // + // Используйте этот запрос, чтобы получить информацию о + // текущем состоянии способа оплаты по его уникальному + // идентификатору. + // + // GET /payment_methods/{payment_method_id} + PaymentMethodsPaymentMethodIDGet(ctx context.Context, params PaymentMethodsPaymentMethodIDGetParams) (PaymentMethodsPaymentMethodIDGetRes, error) + // PaymentMethodsPost implements POST /payment_methods operation. + // + // Используйте этот запрос, чтобы создать в ЮKassa объект + // способа оплаты: https://yookassa.ru/developers/api#payment_method_object. В + // запросе необходимо передать код способа оплаты, + // который вы хотите сохранить, и при необходимости + // дополнительные параметры, связанные с той + // функциональностью, которую вы хотите использовать. + // Идентификатор созданного способа оплаты вы можете + // использовать при проведении автоплатежей: https://yookassa. + // ru/developers/payment-acceptance/scenario-extensions/recurring-payments/create-recurring или + // выплат: https://yookassa.ru/developers/payouts/scenario-extensions/multipurpose-token. + // + // POST /payment_methods + PaymentMethodsPost(ctx context.Context, req PaymentMethodsPostReq, params PaymentMethodsPostParams) (PaymentMethodsPostRes, error) + // PaymentsGet implements GET /payments operation. + // + // Use this request to get a list of payments. You can download payments created over the last 3 + // years. You can filter the list by specified criteria. More about working with lists: + // https://yookassa.ru/developers/using-api/lists. + // + // GET /payments + PaymentsGet(ctx context.Context, params PaymentsGetParams) (PaymentsGetRes, error) + // PaymentsPaymentIDCancelPost implements POST /payments/{payment_id}/cancel operation. + // + // Cancel payments with the waiting_for_capture status. Payment cancelation means you are not ready + // to dispatch a product or to provide a service to the user. Once you cancel the payment, we will + // start returning the money to the payer’s account. If the payment was made from a bank card, a + // YooMoney wallet, or via SberPay, the money will be refunded instantly. If the payment was made + // using other payment methods, the process can take up to several days. More about capturing and + // canceling payments: https://yookassa. + // ru/developers/payment-acceptance/getting-started/payment-process#capture-and-cancel. + // + // POST /payments/{payment_id}/cancel + PaymentsPaymentIDCancelPost(ctx context.Context, params PaymentsPaymentIDCancelPostParams) (PaymentsPaymentIDCancelPostRes, error) + // PaymentsPaymentIDCapturePost implements POST /payments/{payment_id}/capture operation. + // + // Confirm you’re ready to accept the payment. Once the payment is captured, the status will change + // to succeeded. After that, you can provide the customer with the product or service. You can only + // capture payments with the waiting_for_capture status, and only for a certain amount of time + // (depending on the payment method). If you do not capture the payment within the allotted time, the + // status will change to canceled, and the money will be returned to the user. More about capturing + // and canceling payments: https://yookassa. + // ru/developers/payment-acceptance/getting-started/payment-process#capture-and-cancel. + // + // POST /payments/{payment_id}/capture + PaymentsPaymentIDCapturePost(ctx context.Context, req *PaymentsPaymentIDCapturePostReq, params PaymentsPaymentIDCapturePostParams) (PaymentsPaymentIDCapturePostRes, error) + // PaymentsPaymentIDGet implements GET /payments/{payment_id} operation. + // + // This request allows you to get the information about the current payment status by its unique ID. + // + // GET /payments/{payment_id} + PaymentsPaymentIDGet(ctx context.Context, params PaymentsPaymentIDGetParams) (PaymentsPaymentIDGetRes, error) + // PaymentsPost implements POST /payments operation. + // + // To accept a payment, you need to create a payment object: https://yookassa. + // ru/developers/api#payment_object, Payment. It contains all the necessary payment information + // (amount, currency, and status). Payments have a linear life cycle, going from one status to the + // next sequentially. + // + // POST /payments + PaymentsPost(ctx context.Context, req *PaymentsPostReq, params PaymentsPostParams) (PaymentsPostRes, error) + // PayoutsGet implements GET /payouts operation. + // + // Use this request to get a list of payouts. You can download payments created over the last 3 years. + // You can filter the list by specified criteria. Request authentication details: https://yookassa. + // ru/developers/using-api/interaction-format#auth depend on which payment solution you are using: + // basic payouts: https://yookassa.ru/developers/payouts/overview or payouts within the Safe Deal: + // https://yookassa.ru/developers/solutions-for-platforms/safe-deal/basics. More about working with + // lists: https://yookassa.ru/developers/using-api/lists. + // + // GET /payouts + PayoutsGet(ctx context.Context, params PayoutsGetParams) (PayoutsGetRes, error) + // PayoutsPayoutIDGet implements GET /payouts/{payout_id} operation. + // + // Используйте этот запрос, чтобы получить информацию о + // текущем состоянии выплаты по ее уникальному + // идентификатору. Данные для аутентификации: https://yookassa. + // ru/developers/using-api/interaction-format#auth запросов зависят от того, + // какое платежное решение вы используете — обычные + // выплаты: https://yookassa.ru/developers/payouts/overview или выплаты в + // рамках Безопасной сделки: https://yookassa. + // ru/developers/solutions-for-platforms/safe-deal/basics. + // + // GET /payouts/{payout_id} + PayoutsPayoutIDGet(ctx context.Context, params PayoutsPayoutIDGetParams) (PayoutsPayoutIDGetRes, error) + // PayoutsPost implements POST /payouts operation. + // + // Используйте этот запрос, чтобы создать в ЮKassa объект + // выплаты: https://yookassa.ru/developers/api#payout_object. В запросе + // необходимо передать сумму выплаты, данные о способе + // получения выплаты (например, номер кошелька ЮMoney), + // описание выплаты и при необходимости дополнительные + // параметры, связанные с той функциональностью, + // которую вы хотите использовать. Передаваемые + // параметры и данные для аутентификации: https://yookassa. + // ru/developers/using-api/interaction-format#auth запросов зависят от того, + // какое платежное решение вы используете — обычные + // выплаты: https://yookassa.ru/developers/payouts/overview или выплаты в + // рамках Безопасной сделки: https://yookassa. + // ru/developers/solutions-for-platforms/safe-deal/basics. + // + // POST /payouts + PayoutsPost(ctx context.Context, req *PayoutRequest, params PayoutsPostParams) (PayoutsPostRes, error) + // PayoutsSearchGet implements GET /payouts/search operation. + // + // Use this request to search for payouts by the specified criteria. Available only for payouts + // created over the last 3 months. At this time, only search by the metadata parameter is available. + // You can also specify the date and time when the payout was created (the created_at parameter). + // Request authentication details: https://yookassa.ru/developers/using-api/interaction-format#auth + // depend on which payment solution you are using: basic payouts: https://yookassa. + // ru/developers/payouts/overview or payouts within the Safe Deal: https://yookassa. + // ru/developers/solutions-for-platforms/safe-deal/basics. + // + // GET /payouts/search + PayoutsSearchGet(ctx context.Context, params PayoutsSearchGetParams) (PayoutsSearchGetRes, error) + // PersonalDataPersonalDataIDGet implements GET /personal_data/{personal_data_id} operation. + // + // С помощью этого запроса вы можете получить + // информацию о текущем статусе объекта персональных + // данных по его уникальному идентификатору. + // + // GET /personal_data/{personal_data_id} + PersonalDataPersonalDataIDGet(ctx context.Context, params PersonalDataPersonalDataIDGetParams) (PersonalDataPersonalDataIDGetRes, error) + // PersonalDataPost implements POST /personal_data operation. + // + // Используйте этот запрос, чтобы создать в ЮKassa объект + // персональных данных: https://yookassa.ru/developers/api#personal_data_object. В + // запросе необходимо указать тип данных (с какой целью + // они будут использоваться) и передать информацию о + // пользователе: фамилию, имя, отчество и другие — в + // зависимости от выбранного типа. Идентификатор + // созданного объекта персональных данных необходимо + // использовать в запросе на создание выплаты: https://yookassa. + // ru/developers/api#create_payout. + // + // POST /personal_data + PersonalDataPost(ctx context.Context, req PersonalDataPostReq, params PersonalDataPostParams) (PersonalDataPostRes, error) + // ReceiptsGet implements GET /receipts operation. + // + // Запрос позволяет получить список чеков, + // отфильтрованный по заданным критериям. Можно + // запросить чеки по конкретному платежу, чеки по + // конкретному возврату или все чеки магазина. + // Подробнее о работе со списками: https://yookassa. + // ru/developers/using-api/lists. + // + // GET /receipts + ReceiptsGet(ctx context.Context, params ReceiptsGetParams) (ReceiptsGetRes, error) + // ReceiptsPost implements POST /receipts operation. + // + // Используйте этот запрос при оплате с соблюдением + // требований 54-ФЗ: https://yookassa. + // ru/developers/payment-acceptance/receipts/54fz/basics, чтобы создать чек + // зачета предоплаты. Если вы работаете по сценарию + // Сначала платеж, потом чек: https://yookassa. + // ru/developers/payment-acceptance/receipts/54fz/other-services/basics#receipt-after-payment, в + // запросе также нужно передавать данные для + // формирования чека прихода и чека возврата прихода. + // + // POST /receipts + ReceiptsPost(ctx context.Context, req PostReceiptData, params ReceiptsPostParams) (ReceiptsPostRes, error) + // ReceiptsReceiptIDGet implements GET /receipts/{receipt_id} operation. + // + // Запрос позволяет получить информацию о текущем + // состоянии чека по его уникальному идентификатору. + // + // GET /receipts/{receipt_id} + ReceiptsReceiptIDGet(ctx context.Context, params ReceiptsReceiptIDGetParams) (ReceiptsReceiptIDGetRes, error) + // RefundsGet implements GET /refunds operation. + // + // Use this request to get a list of refunds. You can download refunds created over the last 3 years. + // You can filter the list by specified criteria. More about working with lists: https://yookassa. + // ru/developers/using-api/lists. + // + // GET /refunds + RefundsGet(ctx context.Context, params RefundsGetParams) (RefundsGetRes, error) + // RefundsPost implements POST /refunds operation. + // + // Создает возврат успешного платежа на указанную сумму. + // Платеж можно вернуть только в течение трех лет с + // момента его создания: https://yookassa.ru/developers/api#create_payment. + // Комиссия ЮKassa за проведение платежа не возвращается. + // + // POST /refunds + RefundsPost(ctx context.Context, req *RefundsPostReq, params RefundsPostParams) (RefundsPostRes, error) + // RefundsRefundIDGet implements GET /refunds/{refund_id} operation. + // + // Запрос позволяет получить информацию о текущем + // состоянии возврата по его уникальному + // идентификатору. + // + // GET /refunds/{refund_id} + RefundsRefundIDGet(ctx context.Context, params RefundsRefundIDGetParams) (RefundsRefundIDGetRes, error) + // SbpBanksGet implements GET /sbp_banks operation. + // + // С помощью этого запроса вы можете получить + // актуальный список всех участников СБП. Список нужно + // вывести получателю выплаты, идентификатор + // выбранного участника СБП необходимо использовать в + // запросе на создание выплаты: https://yookassa. + // ru/developers/api#create_payout. Подробнее о выплатах через СБП: + // https://yookassa.ru/developers/payouts/making-payouts/sbp. + // + // GET /sbp_banks + SbpBanksGet(ctx context.Context) (SbpBanksGetRes, error) + // WebhooksGet implements GET /webhooks operation. + // + // Запрос позволяет узнать, какие webhook есть для + // переданного OAuth-токена. + // + // GET /webhooks + WebhooksGet(ctx context.Context) (WebhooksGetRes, error) + // WebhooksPost implements POST /webhooks operation. + // + // Запрос позволяет подписаться на уведомления о + // событиях: https://yookassa.ru/developers/using-api/webhooks#events (например, + // переход платежа в статус succeeded). C помощью webhook можно + // подписаться только на события платежей и возвратов. + // Если вы хотите получать уведомления о нескольких + // событиях, вам нужно для каждого из них создать свой + // webhook. Для каждого OAuth-токена нужно создавать свой + // набор webhook. + // + // POST /webhooks + WebhooksPost(ctx context.Context, req *WebhooksPostReq, params WebhooksPostParams) (WebhooksPostRes, error) + // WebhooksWebhookIDDelete implements DELETE /webhooks/{webhook_id} operation. + // + // Запрос позволяет отписаться от уведомлений о событии + // для переданного OAuth-токена. Чтобы удалить webhook, вам + // нужно передать в запросе его идентификатор. + // + // DELETE /webhooks/{webhook_id} + WebhooksWebhookIDDelete(ctx context.Context, params WebhooksWebhookIDDeleteParams) (WebhooksWebhookIDDeleteRes, error) +} + +// Server implements http server based on OpenAPI v3 specification and +// calls Handler to handle requests. +type Server struct { + h Handler + sec SecurityHandler + baseServer +} + +// NewServer creates new Server. +func NewServer(h Handler, sec SecurityHandler, opts ...ServerOption) (*Server, error) { + s, err := newServerConfig(opts...).baseServer() + if err != nil { + return nil, err + } + return &Server{ + h: h, + sec: sec, + baseServer: s, + }, nil +} diff --git a/internal/service/yookassa/gen/oas_unimplemented_gen.go b/internal/service/yookassa/gen/oas_unimplemented_gen.go new file mode 100644 index 0000000..ce48b75 --- /dev/null +++ b/internal/service/yookassa/gen/oas_unimplemented_gen.go @@ -0,0 +1,383 @@ +// Code generated by ogen, DO NOT EDIT. + +package gen + +import ( + "context" + + ht "github.com/ogen-go/ogen/http" +) + +// UnimplementedHandler is no-op Handler which returns http.ErrNotImplemented. +type UnimplementedHandler struct{} + +var _ Handler = UnimplementedHandler{} + +// DealsDealIDGet implements GET /deals/{deal_id} operation. +// +// Запрос позволяет получить информацию о текущем +// состоянии сделки по ее уникальному идентификатору. +// +// GET /deals/{deal_id} +func (UnimplementedHandler) DealsDealIDGet(ctx context.Context, params DealsDealIDGetParams) (r DealsDealIDGetRes, _ error) { + return r, ht.ErrNotImplemented +} + +// DealsGet implements GET /deals operation. +// +// Запрос позволяет получить список сделок, +// отфильтрованный по заданным критериям. Подробнее о +// работе со списками: https://yookassa.ru/developers/using-api/lists. +// +// GET /deals +func (UnimplementedHandler) DealsGet(ctx context.Context, params DealsGetParams) (r DealsGetRes, _ error) { + return r, ht.ErrNotImplemented +} + +// DealsPost implements POST /deals operation. +// +// Запрос позволяет создать сделку, в рамках которой +// необходимо принять оплату от покупателя и +// перечислить ее продавцу. +// +// POST /deals +func (UnimplementedHandler) DealsPost(ctx context.Context, req *SafeDealRequest, params DealsPostParams) (r DealsPostRes, _ error) { + return r, ht.ErrNotImplemented +} + +// MeGet implements GET /me operation. +// +// С помощью этого запроса вы можете получить +// информацию о магазине или шлюзе: * Для Сплитования +// платежей: https://yookassa.ru/developers/solutions-for-platforms/split-payments/basics: в +// запросе необходимо передать параметр on_behalf_of с +// идентификатором магазина продавца и ваши данные для +// аутентификации: https://yookassa.ru/developers/using-api/interaction-format#auth +// (идентификатор и секретный ключ вашей платформы). * +// Для партнеров: https://yookassa. +// ru/developers/solutions-for-platforms/partners-api/basics: в запросе необходимо +// передать OAuth-токен магазина. * Для выплат: https://yookassa. +// ru/developers/payouts/overview: в запросе необходимо передать ваши +// данные для аутентификации: https://yookassa. +// ru/developers/using-api/interaction-format#auth (идентификатор и секретный +// ключ вашего шлюза). +// +// GET /me +func (UnimplementedHandler) MeGet(ctx context.Context, params MeGetParams) (r MeGetRes, _ error) { + return r, ht.ErrNotImplemented +} + +// PaymentMethodsPaymentMethodIDGet implements GET /payment_methods/{payment_method_id} operation. +// +// Используйте этот запрос, чтобы получить информацию о +// текущем состоянии способа оплаты по его уникальному +// идентификатору. +// +// GET /payment_methods/{payment_method_id} +func (UnimplementedHandler) PaymentMethodsPaymentMethodIDGet(ctx context.Context, params PaymentMethodsPaymentMethodIDGetParams) (r PaymentMethodsPaymentMethodIDGetRes, _ error) { + return r, ht.ErrNotImplemented +} + +// PaymentMethodsPost implements POST /payment_methods operation. +// +// Используйте этот запрос, чтобы создать в ЮKassa объект +// способа оплаты: https://yookassa.ru/developers/api#payment_method_object. В +// запросе необходимо передать код способа оплаты, +// который вы хотите сохранить, и при необходимости +// дополнительные параметры, связанные с той +// функциональностью, которую вы хотите использовать. +// Идентификатор созданного способа оплаты вы можете +// использовать при проведении автоплатежей: https://yookassa. +// ru/developers/payment-acceptance/scenario-extensions/recurring-payments/create-recurring или +// выплат: https://yookassa.ru/developers/payouts/scenario-extensions/multipurpose-token. +// +// POST /payment_methods +func (UnimplementedHandler) PaymentMethodsPost(ctx context.Context, req PaymentMethodsPostReq, params PaymentMethodsPostParams) (r PaymentMethodsPostRes, _ error) { + return r, ht.ErrNotImplemented +} + +// PaymentsGet implements GET /payments operation. +// +// Use this request to get a list of payments. You can download payments created over the last 3 +// years. You can filter the list by specified criteria. More about working with lists: +// https://yookassa.ru/developers/using-api/lists. +// +// GET /payments +func (UnimplementedHandler) PaymentsGet(ctx context.Context, params PaymentsGetParams) (r PaymentsGetRes, _ error) { + return r, ht.ErrNotImplemented +} + +// PaymentsPaymentIDCancelPost implements POST /payments/{payment_id}/cancel operation. +// +// Cancel payments with the waiting_for_capture status. Payment cancelation means you are not ready +// to dispatch a product or to provide a service to the user. Once you cancel the payment, we will +// start returning the money to the payer’s account. If the payment was made from a bank card, a +// YooMoney wallet, or via SberPay, the money will be refunded instantly. If the payment was made +// using other payment methods, the process can take up to several days. More about capturing and +// canceling payments: https://yookassa. +// ru/developers/payment-acceptance/getting-started/payment-process#capture-and-cancel. +// +// POST /payments/{payment_id}/cancel +func (UnimplementedHandler) PaymentsPaymentIDCancelPost(ctx context.Context, params PaymentsPaymentIDCancelPostParams) (r PaymentsPaymentIDCancelPostRes, _ error) { + return r, ht.ErrNotImplemented +} + +// PaymentsPaymentIDCapturePost implements POST /payments/{payment_id}/capture operation. +// +// Confirm you’re ready to accept the payment. Once the payment is captured, the status will change +// to succeeded. After that, you can provide the customer with the product or service. You can only +// capture payments with the waiting_for_capture status, and only for a certain amount of time +// (depending on the payment method). If you do not capture the payment within the allotted time, the +// status will change to canceled, and the money will be returned to the user. More about capturing +// and canceling payments: https://yookassa. +// ru/developers/payment-acceptance/getting-started/payment-process#capture-and-cancel. +// +// POST /payments/{payment_id}/capture +func (UnimplementedHandler) PaymentsPaymentIDCapturePost(ctx context.Context, req *PaymentsPaymentIDCapturePostReq, params PaymentsPaymentIDCapturePostParams) (r PaymentsPaymentIDCapturePostRes, _ error) { + return r, ht.ErrNotImplemented +} + +// PaymentsPaymentIDGet implements GET /payments/{payment_id} operation. +// +// This request allows you to get the information about the current payment status by its unique ID. +// +// GET /payments/{payment_id} +func (UnimplementedHandler) PaymentsPaymentIDGet(ctx context.Context, params PaymentsPaymentIDGetParams) (r PaymentsPaymentIDGetRes, _ error) { + return r, ht.ErrNotImplemented +} + +// PaymentsPost implements POST /payments operation. +// +// To accept a payment, you need to create a payment object: https://yookassa. +// ru/developers/api#payment_object, Payment. It contains all the necessary payment information +// (amount, currency, and status). Payments have a linear life cycle, going from one status to the +// next sequentially. +// +// POST /payments +func (UnimplementedHandler) PaymentsPost(ctx context.Context, req *PaymentsPostReq, params PaymentsPostParams) (r PaymentsPostRes, _ error) { + return r, ht.ErrNotImplemented +} + +// PayoutsGet implements GET /payouts operation. +// +// Use this request to get a list of payouts. You can download payments created over the last 3 years. +// +// You can filter the list by specified criteria. Request authentication details: https://yookassa. +// +// ru/developers/using-api/interaction-format#auth depend on which payment solution you are using: +// basic payouts: https://yookassa.ru/developers/payouts/overview or payouts within the Safe Deal: +// https://yookassa.ru/developers/solutions-for-platforms/safe-deal/basics. More about working with +// lists: https://yookassa.ru/developers/using-api/lists. +// +// GET /payouts +func (UnimplementedHandler) PayoutsGet(ctx context.Context, params PayoutsGetParams) (r PayoutsGetRes, _ error) { + return r, ht.ErrNotImplemented +} + +// PayoutsPayoutIDGet implements GET /payouts/{payout_id} operation. +// +// Используйте этот запрос, чтобы получить информацию о +// текущем состоянии выплаты по ее уникальному +// идентификатору. Данные для аутентификации: https://yookassa. +// ru/developers/using-api/interaction-format#auth запросов зависят от того, +// какое платежное решение вы используете — обычные +// выплаты: https://yookassa.ru/developers/payouts/overview или выплаты в +// рамках Безопасной сделки: https://yookassa. +// ru/developers/solutions-for-platforms/safe-deal/basics. +// +// GET /payouts/{payout_id} +func (UnimplementedHandler) PayoutsPayoutIDGet(ctx context.Context, params PayoutsPayoutIDGetParams) (r PayoutsPayoutIDGetRes, _ error) { + return r, ht.ErrNotImplemented +} + +// PayoutsPost implements POST /payouts operation. +// +// Используйте этот запрос, чтобы создать в ЮKassa объект +// выплаты: https://yookassa.ru/developers/api#payout_object. В запросе +// необходимо передать сумму выплаты, данные о способе +// получения выплаты (например, номер кошелька ЮMoney), +// описание выплаты и при необходимости дополнительные +// параметры, связанные с той функциональностью, +// которую вы хотите использовать. Передаваемые +// параметры и данные для аутентификации: https://yookassa. +// ru/developers/using-api/interaction-format#auth запросов зависят от того, +// какое платежное решение вы используете — обычные +// выплаты: https://yookassa.ru/developers/payouts/overview или выплаты в +// рамках Безопасной сделки: https://yookassa. +// ru/developers/solutions-for-platforms/safe-deal/basics. +// +// POST /payouts +func (UnimplementedHandler) PayoutsPost(ctx context.Context, req *PayoutRequest, params PayoutsPostParams) (r PayoutsPostRes, _ error) { + return r, ht.ErrNotImplemented +} + +// PayoutsSearchGet implements GET /payouts/search operation. +// +// Use this request to search for payouts by the specified criteria. Available only for payouts +// created over the last 3 months. At this time, only search by the metadata parameter is available. +// You can also specify the date and time when the payout was created (the created_at parameter). +// Request authentication details: https://yookassa.ru/developers/using-api/interaction-format#auth +// depend on which payment solution you are using: basic payouts: https://yookassa. +// ru/developers/payouts/overview or payouts within the Safe Deal: https://yookassa. +// ru/developers/solutions-for-platforms/safe-deal/basics. +// +// GET /payouts/search +func (UnimplementedHandler) PayoutsSearchGet(ctx context.Context, params PayoutsSearchGetParams) (r PayoutsSearchGetRes, _ error) { + return r, ht.ErrNotImplemented +} + +// PersonalDataPersonalDataIDGet implements GET /personal_data/{personal_data_id} operation. +// +// С помощью этого запроса вы можете получить +// информацию о текущем статусе объекта персональных +// данных по его уникальному идентификатору. +// +// GET /personal_data/{personal_data_id} +func (UnimplementedHandler) PersonalDataPersonalDataIDGet(ctx context.Context, params PersonalDataPersonalDataIDGetParams) (r PersonalDataPersonalDataIDGetRes, _ error) { + return r, ht.ErrNotImplemented +} + +// PersonalDataPost implements POST /personal_data operation. +// +// Используйте этот запрос, чтобы создать в ЮKassa объект +// персональных данных: https://yookassa.ru/developers/api#personal_data_object. В +// запросе необходимо указать тип данных (с какой целью +// они будут использоваться) и передать информацию о +// пользователе: фамилию, имя, отчество и другие — в +// зависимости от выбранного типа. Идентификатор +// созданного объекта персональных данных необходимо +// использовать в запросе на создание выплаты: https://yookassa. +// ru/developers/api#create_payout. +// +// POST /personal_data +func (UnimplementedHandler) PersonalDataPost(ctx context.Context, req PersonalDataPostReq, params PersonalDataPostParams) (r PersonalDataPostRes, _ error) { + return r, ht.ErrNotImplemented +} + +// ReceiptsGet implements GET /receipts operation. +// +// Запрос позволяет получить список чеков, +// отфильтрованный по заданным критериям. Можно +// запросить чеки по конкретному платежу, чеки по +// конкретному возврату или все чеки магазина. +// Подробнее о работе со списками: https://yookassa. +// ru/developers/using-api/lists. +// +// GET /receipts +func (UnimplementedHandler) ReceiptsGet(ctx context.Context, params ReceiptsGetParams) (r ReceiptsGetRes, _ error) { + return r, ht.ErrNotImplemented +} + +// ReceiptsPost implements POST /receipts operation. +// +// Используйте этот запрос при оплате с соблюдением +// требований 54-ФЗ: https://yookassa. +// ru/developers/payment-acceptance/receipts/54fz/basics, чтобы создать чек +// зачета предоплаты. Если вы работаете по сценарию +// Сначала платеж, потом чек: https://yookassa. +// ru/developers/payment-acceptance/receipts/54fz/other-services/basics#receipt-after-payment, в +// запросе также нужно передавать данные для +// формирования чека прихода и чека возврата прихода. +// +// POST /receipts +func (UnimplementedHandler) ReceiptsPost(ctx context.Context, req PostReceiptData, params ReceiptsPostParams) (r ReceiptsPostRes, _ error) { + return r, ht.ErrNotImplemented +} + +// ReceiptsReceiptIDGet implements GET /receipts/{receipt_id} operation. +// +// Запрос позволяет получить информацию о текущем +// состоянии чека по его уникальному идентификатору. +// +// GET /receipts/{receipt_id} +func (UnimplementedHandler) ReceiptsReceiptIDGet(ctx context.Context, params ReceiptsReceiptIDGetParams) (r ReceiptsReceiptIDGetRes, _ error) { + return r, ht.ErrNotImplemented +} + +// RefundsGet implements GET /refunds operation. +// +// Use this request to get a list of refunds. You can download refunds created over the last 3 years. +// You can filter the list by specified criteria. More about working with lists: https://yookassa. +// ru/developers/using-api/lists. +// +// GET /refunds +func (UnimplementedHandler) RefundsGet(ctx context.Context, params RefundsGetParams) (r RefundsGetRes, _ error) { + return r, ht.ErrNotImplemented +} + +// RefundsPost implements POST /refunds operation. +// +// Создает возврат успешного платежа на указанную сумму. +// +// Платеж можно вернуть только в течение трех лет с +// +// момента его создания: https://yookassa.ru/developers/api#create_payment. +// Комиссия ЮKassa за проведение платежа не возвращается. +// +// POST /refunds +func (UnimplementedHandler) RefundsPost(ctx context.Context, req *RefundsPostReq, params RefundsPostParams) (r RefundsPostRes, _ error) { + return r, ht.ErrNotImplemented +} + +// RefundsRefundIDGet implements GET /refunds/{refund_id} operation. +// +// Запрос позволяет получить информацию о текущем +// состоянии возврата по его уникальному +// идентификатору. +// +// GET /refunds/{refund_id} +func (UnimplementedHandler) RefundsRefundIDGet(ctx context.Context, params RefundsRefundIDGetParams) (r RefundsRefundIDGetRes, _ error) { + return r, ht.ErrNotImplemented +} + +// SbpBanksGet implements GET /sbp_banks operation. +// +// С помощью этого запроса вы можете получить +// актуальный список всех участников СБП. Список нужно +// вывести получателю выплаты, идентификатор +// выбранного участника СБП необходимо использовать в +// запросе на создание выплаты: https://yookassa. +// ru/developers/api#create_payout. Подробнее о выплатах через СБП: +// https://yookassa.ru/developers/payouts/making-payouts/sbp. +// +// GET /sbp_banks +func (UnimplementedHandler) SbpBanksGet(ctx context.Context) (r SbpBanksGetRes, _ error) { + return r, ht.ErrNotImplemented +} + +// WebhooksGet implements GET /webhooks operation. +// +// Запрос позволяет узнать, какие webhook есть для +// переданного OAuth-токена. +// +// GET /webhooks +func (UnimplementedHandler) WebhooksGet(ctx context.Context) (r WebhooksGetRes, _ error) { + return r, ht.ErrNotImplemented +} + +// WebhooksPost implements POST /webhooks operation. +// +// Запрос позволяет подписаться на уведомления о +// событиях: https://yookassa.ru/developers/using-api/webhooks#events (например, +// переход платежа в статус succeeded). C помощью webhook можно +// подписаться только на события платежей и возвратов. +// Если вы хотите получать уведомления о нескольких +// событиях, вам нужно для каждого из них создать свой +// webhook. Для каждого OAuth-токена нужно создавать свой +// набор webhook. +// +// POST /webhooks +func (UnimplementedHandler) WebhooksPost(ctx context.Context, req *WebhooksPostReq, params WebhooksPostParams) (r WebhooksPostRes, _ error) { + return r, ht.ErrNotImplemented +} + +// WebhooksWebhookIDDelete implements DELETE /webhooks/{webhook_id} operation. +// +// Запрос позволяет отписаться от уведомлений о событии +// для переданного OAuth-токена. Чтобы удалить webhook, вам +// нужно передать в запросе его идентификатор. +// +// DELETE /webhooks/{webhook_id} +func (UnimplementedHandler) WebhooksWebhookIDDelete(ctx context.Context, params WebhooksWebhookIDDeleteParams) (r WebhooksWebhookIDDeleteRes, _ error) { + return r, ht.ErrNotImplemented +} diff --git a/internal/service/yookassa/gen/oas_uri_gen.go b/internal/service/yookassa/gen/oas_uri_gen.go new file mode 100644 index 0000000..d2bd70f --- /dev/null +++ b/internal/service/yookassa/gen/oas_uri_gen.go @@ -0,0 +1,67 @@ +// Code generated by ogen, DO NOT EDIT. + +package gen + +import ( + "github.com/go-faster/errors" + "github.com/ogen-go/ogen/conv" + "github.com/ogen-go/ogen/uri" + "github.com/ogen-go/ogen/validate" +) + +// EncodeURI encodes MetadataInQueryParameter as URI form. +func (s MetadataInQueryParameter) EncodeURI(e uri.Encoder) error { + for k, elem := range s { + if err := e.EncodeField(k, func(e uri.Encoder) error { + + return e.EncodeValue(conv.StringToString(elem)) + }); err != nil { + return errors.Wrapf(err, "encode field %q", k) + } + } + return nil +} + +// DecodeURI decodes MetadataInQueryParameter from URI form. +func (s *MetadataInQueryParameter) DecodeURI(d uri.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode MetadataInQueryParameter to nil") + } + m := s.init() + var propertiesCount int + if err := d.DecodeFields(func(k string, d uri.Decoder) error { + propertiesCount++ + var elem string + if err := func() error { + val, err := d.DecodeValue() + if err != nil { + return err + } + + c, err := conv.ToString(val) + if err != nil { + return err + } + + elem = c + return nil + }(); err != nil { + return errors.Wrapf(err, "decode field %q", k) + } + m[string(k)] = elem + return nil + }); err != nil { + return errors.Wrap(err, "decode MetadataInQueryParameter") + } + // Validate properties count. + if err := (validate.Object{ + MinProperties: 0, + MinPropertiesSet: false, + MaxProperties: 1, + MaxPropertiesSet: true, + }).ValidateProperties(propertiesCount); err != nil { + return errors.Wrap(err, "object") + } + + return nil +} diff --git a/internal/service/yookassa/gen/oas_validators_gen.go b/internal/service/yookassa/gen/oas_validators_gen.go new file mode 100644 index 0000000..35da1a1 --- /dev/null +++ b/internal/service/yookassa/gen/oas_validators_gen.go @@ -0,0 +1,13852 @@ +// Code generated by ogen, DO NOT EDIT. + +package gen + +import ( + "fmt" + + "github.com/go-faster/errors" + "github.com/ogen-go/ogen/validate" +) + +func (s *AirlineLeg) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := (validate.String{ + MinLength: 3, + MinLengthSet: true, + MaxLength: 3, + MaxLengthSet: true, + Email: false, + Hostname: false, + Regex: regexMap["[A-Z]{3}"], + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(s.DepartureAirport)); err != nil { + return errors.Wrap(err, "string") + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "departure_airport", + Error: err, + }) + } + if err := func() error { + if err := (validate.String{ + MinLength: 3, + MinLengthSet: true, + MaxLength: 3, + MaxLengthSet: true, + Email: false, + Hostname: false, + Regex: regexMap["[A-Z]{3}"], + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(s.DestinationAirport)); err != nil { + return errors.Wrap(err, "string") + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "destination_airport", + Error: err, + }) + } + if err := func() error { + if value, ok := s.CarrierCode.Get(); ok { + if err := func() error { + if err := (validate.String{ + MinLength: 2, + MinLengthSet: true, + MaxLength: 3, + MaxLengthSet: true, + Email: false, + Hostname: false, + Regex: nil, + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(value)); err != nil { + return errors.Wrap(err, "string") + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "carrier_code", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s *AirlinePassenger) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := (validate.String{ + MinLength: 1, + MinLengthSet: true, + MaxLength: 64, + MaxLengthSet: true, + Email: false, + Hostname: false, + Regex: nil, + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(s.FirstName)); err != nil { + return errors.Wrap(err, "string") + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "first_name", + Error: err, + }) + } + if err := func() error { + if err := (validate.String{ + MinLength: 1, + MinLengthSet: true, + MaxLength: 64, + MaxLengthSet: true, + Email: false, + Hostname: false, + Regex: nil, + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(s.LastName)); err != nil { + return errors.Wrap(err, "string") + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "last_name", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s *B2bSberbankCalculatedVatData) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Type.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "type", + Error: err, + }) + } + if err := func() error { + if err := s.Rate.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "rate", + Error: err, + }) + } + if err := func() error { + if err := s.Amount.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "amount", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s *B2bSberbankCalculatedVatDataAmount) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Currency.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "currency", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s B2bSberbankCalculatedVatDataRate) Validate() error { + switch s { + case "5": + return nil + case "7": + return nil + case "10": + return nil + case "20": + return nil + case "22": + return nil + default: + return errors.Errorf("invalid value: %v", s) + } +} + +func (s *B2bSberbankMixedVatData) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Type.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "type", + Error: err, + }) + } + if err := func() error { + if err := s.Amount.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "amount", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s *B2bSberbankMixedVatDataAmount) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Currency.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "currency", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s *B2bSberbankPayerBankDetails) 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: 800, + MaxLengthSet: true, + Email: false, + Hostname: false, + Regex: nil, + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(s.FullName)); err != nil { + return errors.Wrap(err, "string") + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "full_name", + Error: err, + }) + } + if err := func() error { + if err := (validate.String{ + MinLength: 0, + MinLengthSet: false, + MaxLength: 160, + MaxLengthSet: true, + Email: false, + Hostname: false, + Regex: nil, + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(s.ShortName)); err != nil { + return errors.Wrap(err, "string") + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "short_name", + Error: err, + }) + } + if err := func() error { + if err := (validate.String{ + MinLength: 0, + MinLengthSet: false, + MaxLength: 500, + MaxLengthSet: true, + Email: false, + Hostname: false, + Regex: nil, + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(s.Address)); err != nil { + return errors.Wrap(err, "string") + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "address", + Error: err, + }) + } + if err := func() error { + if err := (validate.String{ + MinLength: 0, + MinLengthSet: false, + MaxLength: 0, + MaxLengthSet: false, + Email: false, + Hostname: false, + Regex: regexMap["\\d{10}|\\d{12}"], + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(s.Inn)); err != nil { + return errors.Wrap(err, "string") + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "inn", + Error: err, + }) + } + if err := func() error { + if err := (validate.String{ + MinLength: 1, + MinLengthSet: true, + MaxLength: 350, + MaxLengthSet: true, + Email: false, + Hostname: false, + Regex: nil, + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(s.BankName)); err != nil { + return errors.Wrap(err, "string") + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "bank_name", + Error: err, + }) + } + if err := func() error { + if err := (validate.String{ + MinLength: 1, + MinLengthSet: true, + MaxLength: 140, + MaxLengthSet: true, + Email: false, + Hostname: false, + Regex: nil, + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(s.BankBranch)); err != nil { + return errors.Wrap(err, "string") + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "bank_branch", + Error: err, + }) + } + if err := func() error { + if err := (validate.String{ + MinLength: 0, + MinLengthSet: false, + MaxLength: 0, + MaxLengthSet: false, + Email: false, + Hostname: false, + Regex: regexMap["\\d{9}"], + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(s.BankBik)); err != nil { + return errors.Wrap(err, "string") + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "bank_bik", + Error: err, + }) + } + if err := func() error { + if err := (validate.String{ + MinLength: 0, + MinLengthSet: false, + MaxLength: 0, + MaxLengthSet: false, + Email: false, + Hostname: false, + Regex: regexMap["\\d{20}"], + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(s.Account)); err != nil { + return errors.Wrap(err, "string") + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "account", + Error: err, + }) + } + if err := func() error { + if value, ok := s.Kpp.Get(); ok { + if err := func() error { + if err := (validate.String{ + MinLength: 0, + MinLengthSet: false, + MaxLength: 0, + MaxLengthSet: false, + Email: false, + Hostname: false, + Regex: regexMap["\\d{9}"], + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(value)); err != nil { + return errors.Wrap(err, "string") + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "kpp", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s *B2bSberbankUntaxedVatData) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Type.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "type", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s B2bSberbankVatDataType) Validate() error { + switch s { + case "calculated": + return nil + case "untaxed": + return nil + case "mixed": + return nil + default: + return errors.Errorf("invalid value: %v", s) + } +} + +func (s *BadRequest) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if value, ok := s.Type.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "type", + Error: err, + }) + } + if err := func() error { + if value, ok := s.Code.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "code", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s BadRequestCode) Validate() error { + switch s { + case "invalid_request": + return nil + default: + return errors.Errorf("invalid value: %v", s) + } +} + +func (s BadRequestType) Validate() error { + switch s { + case "error": + return nil + default: + return errors.Errorf("invalid value: %v", s) + } +} + +func (s *BankCardData) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if value, ok := s.First6.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "first6", + Error: err, + }) + } + if err := func() error { + if err := s.Last4.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "last4", + Error: err, + }) + } + if err := func() error { + if err := s.ExpiryYear.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "expiry_year", + Error: err, + }) + } + if err := func() error { + if err := s.CardType.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "card_type", + Error: err, + }) + } + if err := func() error { + if value, ok := s.Source.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "source", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s BankCardDataSource) Validate() error { + switch s { + case "apple_pay": + return nil + case "google_pay": + return nil + case "mir_pay": + return nil + default: + return errors.Errorf("invalid value: %v", s) + } +} + +func (s BankCardExpiryYear) Validate() error { + alias := (string)(s) + if err := (validate.String{ + MinLength: 0, + MinLengthSet: false, + MaxLength: 0, + MaxLengthSet: false, + Email: false, + Hostname: false, + Regex: regexMap["[0-9]{4}"], + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(alias)); err != nil { + return errors.Wrap(err, "string") + } + return nil +} + +func (s BankCardFirst6) Validate() error { + alias := (string)(s) + if err := (validate.String{ + MinLength: 0, + MinLengthSet: false, + MaxLength: 0, + MaxLengthSet: false, + Email: false, + Hostname: false, + Regex: regexMap["[0-9]{6}"], + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(alias)); err != nil { + return errors.Wrap(err, "string") + } + return nil +} + +func (s BankCardHolderName) Validate() error { + alias := (string)(s) + if err := (validate.String{ + MinLength: 0, + MinLengthSet: false, + MaxLength: 0, + MaxLengthSet: false, + Email: false, + Hostname: false, + Regex: regexMap["[a-zA-Z '-]{0,26}"], + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(alias)); err != nil { + return errors.Wrap(err, "string") + } + return nil +} + +func (s BankCardLast4) Validate() error { + alias := (string)(s) + if err := (validate.String{ + MinLength: 0, + MinLengthSet: false, + MaxLength: 0, + MaxLengthSet: false, + Email: false, + Hostname: false, + Regex: regexMap["[0-9]{4}"], + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(alias)); err != nil { + return errors.Wrap(err, "string") + } + return nil +} + +func (s BankCardType) Validate() error { + switch s { + case "MasterCard": + return nil + case "Visa": + return nil + case "Mir": + return nil + case "UnionPay": + return nil + case "JCB": + return nil + case "AmericanExpress": + return nil + case "DinersClub": + return nil + case "DiscoverCard": + return nil + case "InstaPayment": + return nil + case "InstaPaymentTM": + return nil + case "Laser": + return nil + case "Dankort": + return nil + case "Solo": + return nil + case "Switch": + return nil + case "Unknown": + return nil + default: + return errors.Errorf("invalid value: %v", s) + } +} + +func (s *CardDataForPayoutDestination) 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: 0, + MaxLengthSet: false, + Email: false, + Hostname: false, + Regex: regexMap["[0-9]{16,19}"], + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(s.Number)); err != nil { + return errors.Wrap(err, "string") + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "number", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s *CardRequestData) 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: 0, + MaxLengthSet: false, + Email: false, + Hostname: false, + Regex: regexMap["[0-9]{14,19}"], + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(s.Number)); err != nil { + return errors.Wrap(err, "string") + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "number", + Error: err, + }) + } + if err := func() error { + if err := (validate.String{ + MinLength: 0, + MinLengthSet: false, + MaxLength: 0, + MaxLengthSet: false, + Email: false, + Hostname: false, + Regex: regexMap["[0-9]{4}"], + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(s.ExpiryYear)); err != nil { + return errors.Wrap(err, "string") + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "expiry_year", + Error: err, + }) + } + if err := func() error { + if err := (validate.String{ + MinLength: 0, + MinLengthSet: false, + MaxLength: 0, + MaxLengthSet: false, + Email: false, + Hostname: false, + Regex: regexMap["[0-9]{2}"], + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(s.ExpiryMonth)); err != nil { + return errors.Wrap(err, "string") + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "expiry_month", + Error: err, + }) + } + if err := func() error { + if value, ok := s.Cardholder.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "cardholder", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s *Confirmation) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Type.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "type", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s *ConfirmationDataEmbedded) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Type.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "type", + Error: err, + }) + } + if err := func() error { + if value, ok := s.Locale.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "locale", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s *ConfirmationDataExternal) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Type.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "type", + Error: err, + }) + } + if err := func() error { + if value, ok := s.Locale.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "locale", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s *ConfirmationDataMobileApplication) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Type.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "type", + Error: err, + }) + } + if err := func() error { + if value, ok := s.Locale.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "locale", + Error: err, + }) + } + if err := func() error { + if err := (validate.String{ + MinLength: 0, + MinLengthSet: false, + MaxLength: 2048, + MaxLengthSet: true, + Email: false, + Hostname: false, + Regex: nil, + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(s.ReturnURL)); err != nil { + return errors.Wrap(err, "string") + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "return_url", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s *ConfirmationDataQr) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Type.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "type", + Error: err, + }) + } + if err := func() error { + if value, ok := s.Locale.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "locale", + Error: err, + }) + } + if err := func() error { + if value, ok := s.ReturnURL.Get(); ok { + if err := func() error { + if err := (validate.String{ + MinLength: 0, + MinLengthSet: false, + MaxLength: 2048, + MaxLengthSet: true, + Email: false, + Hostname: false, + Regex: nil, + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(value)); err != nil { + return errors.Wrap(err, "string") + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "return_url", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s *ConfirmationDataRedirect) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Type.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "type", + Error: err, + }) + } + if err := func() error { + if value, ok := s.Locale.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "locale", + Error: err, + }) + } + if err := func() error { + if err := s.ReturnURL.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "return_url", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s ConfirmationDataType) Validate() error { + switch s { + case "redirect": + return nil + case "external": + return nil + case "qr": + return nil + case "embedded": + return nil + case "mobile_application": + return nil + default: + return errors.Errorf("invalid value: %v", s) + } +} + +func (s *ConfirmationEmbedded) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Type.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "type", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s *ConfirmationMobileApplication) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Type.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "type", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s *ConfirmationQr) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Type.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "type", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s *ConfirmationRedirect) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Type.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "type", + Error: err, + }) + } + if err := func() error { + if value, ok := s.ReturnURL.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "return_url", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s ConfirmationType) Validate() error { + switch s { + case "redirect": + return nil + case "external": + return nil + case "qr": + return nil + case "embedded": + return nil + case "mobile_application": + return nil + default: + return errors.Errorf("invalid value: %v", s) + } +} + +func (s CurrencyCode) Validate() error { + switch s { + case "RUB": + return nil + case "EUR": + return nil + case "USD": + return nil + case "KZT": + return nil + case "BYN": + return nil + case "UAH": + return nil + case "UZS": + return nil + case "TRY": + return nil + case "INR": + return nil + case "MDL": + return nil + case "AZN": + return nil + case "AMD": + return nil + default: + return errors.Errorf("invalid value: %v", s) + } +} + +func (s DealId) Validate() error { + alias := (string)(s) + if err := (validate.String{ + MinLength: 36, + MinLengthSet: true, + MaxLength: 50, + MaxLengthSet: true, + Email: false, + Hostname: false, + Regex: nil, + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(alias)); err != nil { + return errors.Wrap(err, "string") + } + return nil +} + +func (s DealStatus) Validate() error { + switch s { + case "opened": + return nil + case "closed": + return nil + default: + return errors.Errorf("invalid value: %v", s) + } +} + +func (s DealType) Validate() error { + switch s { + case "safe_deal": + return nil + default: + return errors.Errorf("invalid value: %v", s) + } +} + +func (s *DealsDealIDGetInternalServerError) Validate() error { + alias := (*TooManyRequests)(s) + if err := alias.Validate(); err != nil { + return err + } + return nil +} + +func (s *DealsDealIDGetTooManyRequests) Validate() error { + alias := (*TooManyRequests)(s) + if err := alias.Validate(); err != nil { + return err + } + return nil +} + +func (s *DealsGetInternalServerError) Validate() error { + alias := (*TooManyRequests)(s) + if err := alias.Validate(); err != nil { + return err + } + return nil +} + +func (s *DealsGetOK) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Type.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "type", + Error: err, + }) + } + if err := func() error { + if s.Items == nil { + return errors.New("nil is invalid value") + } + var failures []validate.FieldError + for i, elem := range s.Items { + if err := func() error { + if err := elem.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: fmt.Sprintf("[%d]", i), + Error: err, + }) + } + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "items", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s DealsGetOKType) Validate() error { + switch s { + case "list": + return nil + default: + return errors.Errorf("invalid value: %v", s) + } +} + +func (s *DealsGetTooManyRequests) Validate() error { + alias := (*TooManyRequests)(s) + if err := alias.Validate(); err != nil { + return err + } + return nil +} + +func (s *DealsPostInternalServerError) Validate() error { + alias := (*TooManyRequests)(s) + if err := alias.Validate(); err != nil { + return err + } + return nil +} + +func (s *DealsPostTooManyRequests) Validate() error { + alias := (*TooManyRequests)(s) + if err := alias.Validate(); err != nil { + return err + } + return nil +} + +func (s *ElectronicCertificate) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := (validate.String{ + MinLength: 20, + MinLengthSet: true, + MaxLength: 30, + MaxLengthSet: true, + Email: false, + Hostname: false, + Regex: nil, + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(s.CertificateID)); err != nil { + return errors.Wrap(err, "string") + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "certificate_id", + Error: err, + }) + } + if err := func() error { + if err := s.AvailableCompensation.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "available_compensation", + Error: err, + }) + } + if err := func() error { + if err := s.AppliedCompensation.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "applied_compensation", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s *ElectronicCertificateAppliedCompensation) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Currency.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "currency", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s *ElectronicCertificateApprovedPaymentArticle) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.ArticleNumber.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "article_number", + Error: err, + }) + } + if err := func() error { + if err := s.TruCode.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "tru_code", + Error: err, + }) + } + if err := func() error { + if value, ok := s.ArticleCode.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "article_code", + Error: err, + }) + } + if err := func() error { + if s.Certificates == nil { + return errors.New("nil is invalid value") + } + var failures []validate.FieldError + for i, elem := range s.Certificates { + if err := func() error { + if err := elem.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: fmt.Sprintf("[%d]", i), + Error: err, + }) + } + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "certificates", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s *ElectronicCertificateArticle) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.ArticleNumber.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "article_number", + Error: err, + }) + } + if err := func() error { + if err := s.TruCode.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "tru_code", + Error: err, + }) + } + if err := func() error { + if value, ok := s.ArticleCode.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "article_code", + Error: err, + }) + } + if err := func() error { + if err := (validate.String{ + MinLength: 0, + MinLengthSet: false, + MaxLength: 128, + MaxLengthSet: true, + Email: false, + Hostname: false, + Regex: nil, + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(s.ArticleName)); err != nil { + return errors.Wrap(err, "string") + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "article_name", + Error: err, + }) + } + if err := func() error { + if err := s.Price.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "price", + Error: err, + }) + } + if err := func() error { + if value, ok := s.Metadata.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "metadata", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s ElectronicCertificateArticleCode) Validate() error { + alias := (string)(s) + if err := (validate.String{ + MinLength: 0, + MinLengthSet: false, + MaxLength: 128, + MaxLengthSet: true, + Email: false, + Hostname: false, + Regex: nil, + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(alias)); err != nil { + return errors.Wrap(err, "string") + } + return nil +} + +func (s ElectronicCertificateArticleNumber) Validate() error { + alias := (int32)(s) + if err := (validate.Int{ + MinSet: true, + Min: 1, + MaxSet: true, + Max: 999, + MinExclusive: false, + MaxExclusive: false, + MultipleOfSet: false, + MultipleOf: 0, + Pattern: nil, + }).Validate(int64(alias)); err != nil { + return errors.Wrap(err, "int") + } + return nil +} + +func (s *ElectronicCertificateArticlePrice) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Currency.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "currency", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s *ElectronicCertificateAvailableCompensation) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Currency.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "currency", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s *ElectronicCertificatePayment) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Amount.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "amount", + Error: err, + }) + } + if err := func() error { + if err := (validate.String{ + MinLength: 0, + MinLengthSet: false, + MaxLength: 0, + MaxLengthSet: false, + Email: false, + Hostname: false, + Regex: regexMap["[0-9]{24}"], + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(s.BasketID)); err != nil { + return errors.Wrap(err, "string") + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "basket_id", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s *ElectronicCertificatePaymentAmount) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Currency.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "currency", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s *ElectronicCertificatePaymentData) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Amount.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "amount", + Error: err, + }) + } + if err := func() error { + if err := (validate.String{ + MinLength: 0, + MinLengthSet: false, + MaxLength: 0, + MaxLengthSet: false, + Email: false, + Hostname: false, + Regex: regexMap["[0-9]{24}"], + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(s.BasketID)); err != nil { + return errors.Wrap(err, "string") + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "basket_id", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s *ElectronicCertificatePaymentDataAmount) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Currency.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "currency", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s *ElectronicCertificateRefundArticle) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := (validate.Int{ + MinSet: true, + Min: 1, + MaxSet: true, + Max: 999, + MinExclusive: false, + MaxExclusive: false, + MultipleOfSet: false, + MultipleOf: 0, + Pattern: nil, + }).Validate(int64(s.ArticleNumber)); err != nil { + return errors.Wrap(err, "int") + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "article_number", + Error: err, + }) + } + if err := func() error { + if err := (validate.Int{ + MinSet: true, + Min: 1, + MaxSet: true, + Max: 999, + MinExclusive: false, + MaxExclusive: false, + MultipleOfSet: false, + MultipleOf: 0, + Pattern: nil, + }).Validate(int64(s.PaymentArticleNumber)); err != nil { + return errors.Wrap(err, "int") + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "payment_article_number", + Error: err, + }) + } + if err := func() error { + if err := s.TruCode.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "tru_code", + Error: err, + }) + } + if err := func() error { + if err := (validate.Int{ + MinSet: true, + Min: 1, + MaxSet: false, + Max: 0, + MinExclusive: false, + MaxExclusive: false, + MultipleOfSet: false, + MultipleOf: 0, + Pattern: nil, + }).Validate(int64(s.Quantity)); err != nil { + return errors.Wrap(err, "int") + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "quantity", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s *ElectronicCertificateRefundDataRequest) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Amount.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "amount", + Error: err, + }) + } + if err := func() error { + if err := (validate.String{ + MinLength: 0, + MinLengthSet: false, + MaxLength: 0, + MaxLengthSet: false, + Email: false, + Hostname: false, + Regex: regexMap["[0-9]{24}"], + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(s.BasketID)); err != nil { + return errors.Wrap(err, "string") + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "basket_id", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s *ElectronicCertificateRefundDataRequestAmount) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Currency.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "currency", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s *ElectronicCertificateRefundDataResponse) 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: 0, + MaxLengthSet: false, + Email: false, + Hostname: false, + Regex: regexMap["[0-9]{24}"], + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(s.BasketID)); err != nil { + return errors.Wrap(err, "string") + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "basket_id", + Error: err, + }) + } + if err := func() error { + if err := s.Amount.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "amount", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s *ElectronicCertificateRefundDataResponseAmount) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Currency.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "currency", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s *ElectronicCertificateRefundMethod) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Type.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "type", + Error: err, + }) + } + if err := func() error { + if value, ok := s.ElectronicCertificate.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "electronic_certificate", + Error: err, + }) + } + if err := func() error { + var failures []validate.FieldError + for i, elem := range s.Articles { + if err := func() error { + if err := elem.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: fmt.Sprintf("[%d]", i), + Error: err, + }) + } + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "articles", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s *ElectronicCertificateRefundMethodData) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Type.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "type", + Error: err, + }) + } + if err := func() error { + if value, ok := s.ElectronicCertificate.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "electronic_certificate", + Error: err, + }) + } + if err := func() error { + var failures []validate.FieldError + for i, elem := range s.Articles { + if err := func() error { + if err := elem.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: fmt.Sprintf("[%d]", i), + Error: err, + }) + } + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "articles", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s ElectronicCertificateTruCode) Validate() error { + alias := (string)(s) + if err := (validate.String{ + MinLength: 30, + MinLengthSet: true, + MaxLength: 30, + MaxLengthSet: true, + Email: false, + Hostname: false, + Regex: nil, + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(alias)); err != nil { + return errors.Wrap(err, "string") + } + return nil +} + +func (s FeeMoment) Validate() error { + switch s { + case "payment_succeeded": + return nil + case "deal_closed": + return nil + default: + return errors.Errorf("invalid value: %v", s) + } +} + +func (s FirstName) Validate() error { + alias := (string)(s) + if err := (validate.String{ + MinLength: 1, + MinLengthSet: true, + MaxLength: 100, + MaxLengthSet: true, + Email: false, + Hostname: false, + Regex: regexMap["^[\\-a-zA-Zа-яёА-ЯЁ ]]*$"], + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(alias)); err != nil { + return errors.Wrap(err, "string") + } + return nil +} + +func (s *FiscalizationData) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Provider.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "provider", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s FiscalizationProvider) Validate() error { + switch s { + case "atol": + return nil + case "avanpost": + return nil + case "a_qsi": + return nil + case "business_ru": + return nil + case "digital_kassa": + return nil + case "evotor": + return nil + case "first_ofd": + return nil + case "kit_invest": + return nil + case "komtet": + return nil + case "life_pay": + return nil + case "mertrade": + return nil + case "modul_kassa": + return nil + case "rocket": + return nil + case "shtrih_m": + return nil + default: + return errors.Errorf("invalid value: %v", s) + } +} + +func (s *Forbidden) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if value, ok := s.Type.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "type", + Error: err, + }) + } + if err := func() error { + if value, ok := s.Code.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "code", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s ForbiddenCode) Validate() error { + switch s { + case "forbidden": + return nil + default: + return errors.Errorf("invalid value: %v", s) + } +} + +func (s ForbiddenType) Validate() error { + switch s { + case "error": + return nil + default: + return errors.Errorf("invalid value: %v", s) + } +} + +func (s *IncomeReceipt) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.ServiceName.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "service_name", + Error: err, + }) + } + if err := func() error { + if value, ok := s.Amount.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "amount", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s *IncomeReceiptAmount) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Currency.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "currency", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s IncomeReceiptServiceName) Validate() error { + alias := (string)(s) + if err := (validate.String{ + MinLength: 1, + MinLengthSet: true, + MaxLength: 50, + MaxLengthSet: true, + Email: false, + Hostname: false, + Regex: nil, + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(alias)); err != nil { + return errors.Wrap(err, "string") + } + return nil +} + +func (s *IndustryDetails) 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: 0, + MaxLengthSet: false, + Email: false, + Hostname: false, + Regex: regexMap["(^00[1-9]{1}$)|(^0[1-6]{1}[0-9]{1}$)|(^07[0-3]{1}$)"], + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(s.FederalID)); err != nil { + return errors.Wrap(err, "string") + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "federal_id", + Error: err, + }) + } + if err := func() error { + if err := (validate.String{ + MinLength: 0, + MinLengthSet: false, + MaxLength: 32, + MaxLengthSet: true, + Email: false, + Hostname: false, + Regex: nil, + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(s.DocumentNumber)); err != nil { + return errors.Wrap(err, "string") + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "document_number", + Error: err, + }) + } + if err := func() error { + if err := (validate.String{ + MinLength: 0, + MinLengthSet: false, + MaxLength: 256, + MaxLengthSet: true, + Email: false, + Hostname: false, + Regex: nil, + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(s.Value)); err != nil { + return errors.Wrap(err, "string") + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "value", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s *InvalidCredentials) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if value, ok := s.Type.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "type", + Error: err, + }) + } + if err := func() error { + if value, ok := s.Code.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "code", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s InvalidCredentialsCode) Validate() error { + switch s { + case "invalid_credentials": + return nil + default: + return errors.Errorf("invalid value: %v", s) + } +} + +func (s InvalidCredentialsType) Validate() error { + switch s { + case "error": + return nil + default: + return errors.Errorf("invalid value: %v", s) + } +} + +func (s InvoiceId) Validate() error { + alias := (string)(s) + if err := (validate.String{ + MinLength: 39, + MinLengthSet: true, + MaxLength: 39, + MaxLengthSet: true, + Email: false, + Hostname: false, + Regex: nil, + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(alias)); err != nil { + return errors.Wrap(err, "string") + } + return nil +} + +func (s *InvoicingBankCardData) 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: 0, + MaxLengthSet: false, + Email: false, + Hostname: false, + Regex: regexMap["[0-9]{6}"], + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(s.First6)); err != nil { + return errors.Wrap(err, "string") + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "first6", + Error: err, + }) + } + if err := func() error { + if err := s.Last4.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "last4", + Error: err, + }) + } + if err := func() error { + if err := s.ExpiryYear.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "expiry_year", + Error: err, + }) + } + if err := func() error { + if err := s.CardType.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "card_type", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s Kbk) Validate() error { + alias := (string)(s) + if err := (validate.String{ + MinLength: 1, + MinLengthSet: true, + MaxLength: 20, + MaxLengthSet: true, + Email: false, + Hostname: false, + Regex: regexMap["([\\d]{20})|(0)"], + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(alias)); err != nil { + return errors.Wrap(err, "string") + } + return nil +} + +func (s LastName) Validate() error { + alias := (string)(s) + if err := (validate.String{ + MinLength: 1, + MinLengthSet: true, + MaxLength: 200, + MaxLengthSet: true, + Email: false, + Hostname: false, + Regex: regexMap["^[\\-a-zA-Zа-яёА-ЯЁ ]]*$"], + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(alias)); err != nil { + return errors.Wrap(err, "string") + } + return nil +} + +func (s Locale) Validate() error { + switch s { + case "ru_RU": + return nil + case "en_US": + return nil + default: + return errors.Errorf("invalid value: %v", s) + } +} + +func (s *MarkCodeInfo) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if value, ok := s.Unknown.Get(); ok { + if err := func() error { + if err := (validate.String{ + MinLength: 1, + MinLengthSet: true, + MaxLength: 32, + MaxLengthSet: true, + Email: false, + Hostname: false, + Regex: nil, + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(value)); err != nil { + return errors.Wrap(err, "string") + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "unknown", + Error: err, + }) + } + if err := func() error { + if value, ok := s.Ean8.Get(); ok { + if err := func() error { + if err := (validate.String{ + MinLength: 8, + MinLengthSet: true, + MaxLength: 8, + MaxLengthSet: true, + Email: false, + Hostname: false, + Regex: nil, + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(value)); err != nil { + return errors.Wrap(err, "string") + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "ean_8", + Error: err, + }) + } + if err := func() error { + if value, ok := s.Ean13.Get(); ok { + if err := func() error { + if err := (validate.String{ + MinLength: 13, + MinLengthSet: true, + MaxLength: 13, + MaxLengthSet: true, + Email: false, + Hostname: false, + Regex: nil, + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(value)); err != nil { + return errors.Wrap(err, "string") + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "ean_13", + Error: err, + }) + } + if err := func() error { + if value, ok := s.Itf14.Get(); ok { + if err := func() error { + if err := (validate.String{ + MinLength: 14, + MinLengthSet: true, + MaxLength: 14, + MaxLengthSet: true, + Email: false, + Hostname: false, + Regex: nil, + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(value)); err != nil { + return errors.Wrap(err, "string") + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "itf_14", + Error: err, + }) + } + if err := func() error { + if value, ok := s.Gs10.Get(); ok { + if err := func() error { + if err := (validate.String{ + MinLength: 1, + MinLengthSet: true, + MaxLength: 38, + MaxLengthSet: true, + Email: false, + Hostname: false, + Regex: nil, + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(value)); err != nil { + return errors.Wrap(err, "string") + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "gs_10", + Error: err, + }) + } + if err := func() error { + if value, ok := s.Gs1m.Get(); ok { + if err := func() error { + if err := (validate.String{ + MinLength: 1, + MinLengthSet: true, + MaxLength: 200, + MaxLengthSet: true, + Email: false, + Hostname: false, + Regex: nil, + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(value)); err != nil { + return errors.Wrap(err, "string") + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "gs_1m", + Error: err, + }) + } + if err := func() error { + if value, ok := s.Short.Get(); ok { + if err := func() error { + if err := (validate.String{ + MinLength: 1, + MinLengthSet: true, + MaxLength: 38, + MaxLengthSet: true, + Email: false, + Hostname: false, + Regex: nil, + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(value)); err != nil { + return errors.Wrap(err, "string") + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "short", + Error: err, + }) + } + if err := func() error { + if value, ok := s.Fur.Get(); ok { + if err := func() error { + if err := (validate.String{ + MinLength: 20, + MinLengthSet: true, + MaxLength: 20, + MaxLengthSet: true, + Email: false, + Hostname: false, + Regex: nil, + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(value)); err != nil { + return errors.Wrap(err, "string") + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "fur", + Error: err, + }) + } + if err := func() error { + if value, ok := s.Egais20.Get(); ok { + if err := func() error { + if err := (validate.String{ + MinLength: 33, + MinLengthSet: true, + MaxLength: 33, + MaxLengthSet: true, + Email: false, + Hostname: false, + Regex: nil, + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(value)); err != nil { + return errors.Wrap(err, "string") + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "egais_20", + Error: err, + }) + } + if err := func() error { + if value, ok := s.Egais30.Get(); ok { + if err := func() error { + if err := (validate.String{ + MinLength: 14, + MinLengthSet: true, + MaxLength: 14, + MaxLengthSet: true, + Email: false, + Hostname: false, + Regex: nil, + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(value)); err != nil { + return errors.Wrap(err, "string") + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "egais_30", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s MarkMode) Validate() error { + alias := (string)(s) + if err := (validate.String{ + MinLength: 0, + MinLengthSet: false, + MaxLength: 0, + MaxLengthSet: false, + Email: false, + Hostname: false, + Regex: regexMap["^[0]{1}$"], + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(alias)); err != nil { + return errors.Wrap(err, "string") + } + return nil +} + +func (s *MarkQuantity) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := (validate.Int{ + MinSet: true, + Min: 1, + MaxSet: false, + Max: 0, + MinExclusive: false, + MaxExclusive: false, + MultipleOfSet: false, + MultipleOf: 0, + Pattern: nil, + }).Validate(int64(s.Numerator)); err != nil { + return errors.Wrap(err, "int") + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "numerator", + Error: err, + }) + } + if err := func() error { + if err := (validate.Int{ + MinSet: true, + Min: 1, + MaxSet: false, + Max: 0, + MinExclusive: false, + MaxExclusive: false, + MultipleOfSet: false, + MultipleOf: 0, + Pattern: nil, + }).Validate(int64(s.Denominator)); err != nil { + return errors.Wrap(err, "int") + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "denominator", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s *Me) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Status.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "status", + Error: err, + }) + } + if err := func() error { + if value, ok := s.Fiscalization.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "fiscalization", + Error: err, + }) + } + if err := func() error { + var failures []validate.FieldError + for i, elem := range s.PaymentMethods { + if err := func() error { + if err := elem.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: fmt.Sprintf("[%d]", i), + Error: err, + }) + } + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "payment_methods", + Error: err, + }) + } + if err := func() error { + if value, ok := s.Itn.Get(); ok { + if err := func() error { + if err := (validate.String{ + MinLength: 0, + MinLengthSet: false, + MaxLength: 0, + MaxLengthSet: false, + Email: false, + Hostname: false, + Regex: regexMap["\\d{1,20}"], + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(value)); err != nil { + return errors.Wrap(err, "string") + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "itn", + Error: err, + }) + } + if err := func() error { + var failures []validate.FieldError + for i, elem := range s.PayoutMethods { + if err := func() error { + if err := elem.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: fmt.Sprintf("[%d]", i), + Error: err, + }) + } + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "payout_methods", + Error: err, + }) + } + if err := func() error { + if value, ok := s.PayoutBalance.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "payout_balance", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s *MePayoutBalance) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Currency.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "currency", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s MeStatus) Validate() error { + switch s { + case "enabled": + return nil + case "disabled": + return nil + default: + return errors.Errorf("invalid value: %v", s) + } +} + +func (s Metadata) Validate() error { + var failures []validate.FieldError + + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s MetadataInQueryParameter) Validate() error { + var failures []validate.FieldError + for key, elem := range s { + if err := func() error { + if err := (validate.String{ + MinLength: 0, + MinLengthSet: false, + MaxLength: 512, + MaxLengthSet: true, + Email: false, + Hostname: false, + Regex: nil, + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(elem)); err != nil { + return errors.Wrap(err, "string") + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: key, + Error: err, + }) + } + } + + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s MiddleName) Validate() error { + alias := (string)(s) + if err := (validate.String{ + MinLength: 1, + MinLengthSet: true, + MaxLength: 200, + MaxLengthSet: true, + Email: false, + Hostname: false, + Regex: regexMap["^[\\-a-zA-Zа-яёА-ЯЁ ]]*$"], + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(alias)); err != nil { + return errors.Wrap(err, "string") + } + return nil +} + +func (s *NotFound) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if value, ok := s.Type.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "type", + Error: err, + }) + } + if err := func() error { + if value, ok := s.Code.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "code", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s NotFoundCode) Validate() error { + switch s { + case "not_found": + return nil + default: + return errors.Errorf("invalid value: %v", s) + } +} + +func (s NotFoundType) Validate() error { + switch s { + case "error": + return nil + default: + return errors.Errorf("invalid value: %v", s) + } +} + +func (s Oktmo) Validate() error { + alias := (string)(s) + if err := (validate.String{ + MinLength: 1, + MinLengthSet: true, + MaxLength: 8, + MaxLengthSet: true, + Email: false, + Hostname: false, + Regex: regexMap["([\\d]{8})|(0)"], + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(alias)); err != nil { + return errors.Wrap(err, "string") + } + return nil +} + +func (s *Payment) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.ID.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "id", + Error: err, + }) + } + if err := func() error { + if err := s.Status.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "status", + Error: err, + }) + } + if err := func() error { + if err := s.Amount.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "amount", + Error: err, + }) + } + if err := func() error { + if value, ok := s.IncomeAmount.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "income_amount", + Error: err, + }) + } + if err := func() error { + if value, ok := s.Description.Get(); ok { + if err := func() error { + if err := (validate.String{ + MinLength: 0, + MinLengthSet: false, + MaxLength: 128, + MaxLengthSet: true, + Email: false, + Hostname: false, + Regex: nil, + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(value)); err != nil { + return errors.Wrap(err, "string") + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "description", + Error: err, + }) + } + if err := func() error { + if value, ok := s.PaymentMethod.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "payment_method", + Error: err, + }) + } + if err := func() error { + if value, ok := s.Confirmation.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "confirmation", + Error: err, + }) + } + if err := func() error { + if value, ok := s.RefundedAmount.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "refunded_amount", + Error: err, + }) + } + if err := func() error { + if value, ok := s.ReceiptRegistration.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "receipt_registration", + Error: err, + }) + } + if err := func() error { + if value, ok := s.Metadata.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "metadata", + Error: err, + }) + } + if err := func() error { + if value, ok := s.CancellationDetails.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "cancellation_details", + Error: err, + }) + } + if err := func() error { + var failures []validate.FieldError + for i, elem := range s.Transfers { + if err := func() error { + if err := elem.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: fmt.Sprintf("[%d]", i), + Error: err, + }) + } + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "transfers", + Error: err, + }) + } + if err := func() error { + if value, ok := s.Deal.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "deal", + Error: err, + }) + } + if err := func() error { + if value, ok := s.MerchantCustomerID.Get(); ok { + if err := func() error { + if err := (validate.String{ + MinLength: 0, + MinLengthSet: false, + MaxLength: 200, + MaxLengthSet: true, + Email: false, + Hostname: false, + Regex: nil, + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(value)); err != nil { + return errors.Wrap(err, "string") + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "merchant_customer_id", + Error: err, + }) + } + if err := func() error { + if value, ok := s.InvoiceDetails.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "invoice_details", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s *PaymentAmount) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Currency.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "currency", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s *PaymentCancellationDetails) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Party.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "party", + Error: err, + }) + } + if err := func() error { + if err := s.Reason.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "reason", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s PaymentCancellationDetailsParty) Validate() error { + switch s { + case "yoo_money": + return nil + case "payment_network": + return nil + case "merchant": + return nil + default: + return errors.Errorf("invalid value: %v", s) + } +} + +func (s PaymentCancellationDetailsReason) Validate() error { + switch s { + case "3d_secure_failed": + return nil + case "call_issuer": + return nil + case "card_expired": + return nil + case "payment_method_limit_exceeded": + return nil + case "payment_method_restricted": + return nil + case "country_forbidden": + return nil + case "general_decline": + return nil + case "fraud_suspected": + return nil + case "identification_required": + return nil + case "insufficient_funds": + return nil + case "invalid_card_number": + return nil + case "invalid_csc": + return nil + case "issuer_unavailable": + return nil + case "canceled_by_merchant": + return nil + case "permission_revoked": + return nil + case "internal_timeout": + return nil + case "expired_on_confirmation": + return nil + case "expired_on_capture": + return nil + case "unsupported_mobile_operator": + return nil + case "deal_expired": + return nil + default: + return errors.Errorf("invalid value: %v", s) + } +} + +func (s PaymentConfirmation) Validate() error { + switch s.Type { + case ConfirmationRedirectPaymentConfirmation: + if err := s.ConfirmationRedirect.Validate(); err != nil { + return err + } + return nil + case ConfirmationPaymentConfirmation: + if err := s.Confirmation.Validate(); err != nil { + return err + } + return nil + case ConfirmationQrPaymentConfirmation: + if err := s.ConfirmationQr.Validate(); err != nil { + return err + } + return nil + case ConfirmationEmbeddedPaymentConfirmation: + if err := s.ConfirmationEmbedded.Validate(); err != nil { + return err + } + return nil + case ConfirmationMobileApplicationPaymentConfirmation: + if err := s.ConfirmationMobileApplication.Validate(); err != nil { + return err + } + return nil + default: + return errors.Errorf("invalid type %q", s.Type) + } +} + +func (s *PaymentDeal) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.ID.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "id", + Error: err, + }) + } + if err := func() error { + if err := s.Settlements.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "settlements", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s PaymentId) Validate() error { + alias := (string)(s) + if err := (validate.String{ + MinLength: 36, + MinLengthSet: true, + MaxLength: 36, + MaxLengthSet: true, + Email: false, + Hostname: false, + Regex: nil, + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(alias)); err != nil { + return errors.Wrap(err, "string") + } + return nil +} + +func (s *PaymentIncomeAmount) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Currency.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "currency", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s *PaymentInvoiceDetails) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if value, ok := s.ID.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "id", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s *PaymentList) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Type.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "type", + Error: err, + }) + } + if err := func() error { + if s.Items == nil { + return errors.New("nil is invalid value") + } + var failures []validate.FieldError + for i, elem := range s.Items { + if err := func() error { + if err := elem.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: fmt.Sprintf("[%d]", i), + Error: err, + }) + } + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "items", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s PaymentListType) Validate() error { + switch s { + case "list": + return nil + default: + return errors.Errorf("invalid value: %v", s) + } +} + +func (s *PaymentMethodAlfabank) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Type.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "type", + Error: err, + }) + } + if err := func() error { + if err := s.Status.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "status", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s PaymentMethodAlfabankStatus) Validate() error { + switch s { + case "pending": + return nil + case "active": + return nil + case "inactive": + return nil + default: + return errors.Errorf("invalid value: %v", s) + } +} + +func (s *PaymentMethodApplePay) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Type.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "type", + Error: err, + }) + } + if err := func() error { + if err := s.Status.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "status", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s PaymentMethodApplePayStatus) Validate() error { + switch s { + case "pending": + return nil + case "active": + return nil + case "inactive": + return nil + default: + return errors.Errorf("invalid value: %v", s) + } +} + +func (s *PaymentMethodB2bSberbank) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Type.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "type", + Error: err, + }) + } + if err := func() error { + if err := s.Status.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "status", + Error: err, + }) + } + if err := func() error { + if err := s.PaymentPurpose.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "payment_purpose", + Error: err, + }) + } + if err := func() error { + if err := s.VatData.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "vat_data", + Error: err, + }) + } + if err := func() error { + if value, ok := s.PayerBankDetails.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "payer_bank_details", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s PaymentMethodB2bSberbankStatus) Validate() error { + switch s { + case "pending": + return nil + case "active": + return nil + case "inactive": + return nil + default: + return errors.Errorf("invalid value: %v", s) + } +} + +func (s PaymentMethodB2bSberbankVatData) Validate() error { + switch s.Type { + case B2bSberbankCalculatedVatDataPaymentMethodB2bSberbankVatData: + if err := s.B2bSberbankCalculatedVatData.Validate(); err != nil { + return err + } + return nil + case B2bSberbankUntaxedVatDataPaymentMethodB2bSberbankVatData: + if err := s.B2bSberbankUntaxedVatData.Validate(); err != nil { + return err + } + return nil + case B2bSberbankMixedVatDataPaymentMethodB2bSberbankVatData: + if err := s.B2bSberbankMixedVatData.Validate(); err != nil { + return err + } + return nil + default: + return errors.Errorf("invalid type %q", s.Type) + } +} + +func (s *PaymentMethodBankCard) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Type.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "type", + Error: err, + }) + } + if err := func() error { + if err := s.Status.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "status", + Error: err, + }) + } + if err := func() error { + if value, ok := s.Card.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "card", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s PaymentMethodBankCardStatus) Validate() error { + switch s { + case "pending": + return nil + case "active": + return nil + case "inactive": + return nil + default: + return errors.Errorf("invalid value: %v", s) + } +} + +func (s *PaymentMethodCash) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Type.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "type", + Error: err, + }) + } + if err := func() error { + if err := s.Status.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "status", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s PaymentMethodCashStatus) Validate() error { + switch s { + case "pending": + return nil + case "active": + return nil + case "inactive": + return nil + default: + return errors.Errorf("invalid value: %v", s) + } +} + +func (s *PaymentMethodDataB2bSberbank) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Type.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "type", + Error: err, + }) + } + if err := func() error { + if err := s.PaymentPurpose.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "payment_purpose", + Error: err, + }) + } + if err := func() error { + if err := s.VatData.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "vat_data", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s PaymentMethodDataB2bSberbankType) Validate() error { + switch s { + case "bank_card": + return nil + case "cash": + return nil + case "sberbank": + return nil + case "tinkoff_bank": + return nil + case "yoo_money": + return nil + case "mobile_balance": + return nil + case "b2b_sberbank": + return nil + case "sbp": + return nil + case "sber_loan": + return nil + case "electronic_certificate": + return nil + case "sber_bnpl": + return nil + default: + return errors.Errorf("invalid value: %v", s) + } +} + +func (s PaymentMethodDataB2bSberbankVatData) Validate() error { + switch s.Type { + case B2bSberbankCalculatedVatDataPaymentMethodDataB2bSberbankVatData: + if err := s.B2bSberbankCalculatedVatData.Validate(); err != nil { + return err + } + return nil + case B2bSberbankUntaxedVatDataPaymentMethodDataB2bSberbankVatData: + if err := s.B2bSberbankUntaxedVatData.Validate(); err != nil { + return err + } + return nil + case B2bSberbankMixedVatDataPaymentMethodDataB2bSberbankVatData: + if err := s.B2bSberbankMixedVatData.Validate(); err != nil { + return err + } + return nil + default: + return errors.Errorf("invalid type %q", s.Type) + } +} + +func (s *PaymentMethodDataBankCard) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Type.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "type", + Error: err, + }) + } + if err := func() error { + if value, ok := s.Card.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "card", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s PaymentMethodDataBankCardType) Validate() error { + switch s { + case "bank_card": + return nil + case "cash": + return nil + case "sberbank": + return nil + case "tinkoff_bank": + return nil + case "yoo_money": + return nil + case "mobile_balance": + return nil + case "b2b_sberbank": + return nil + case "sbp": + return nil + case "sber_loan": + return nil + case "electronic_certificate": + return nil + case "sber_bnpl": + return nil + default: + return errors.Errorf("invalid value: %v", s) + } +} + +func (s *PaymentMethodDataCash) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Type.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "type", + Error: err, + }) + } + if err := func() error { + if value, ok := s.Phone.Get(); ok { + if err := func() error { + if err := (validate.String{ + MinLength: 0, + MinLengthSet: false, + MaxLength: 0, + MaxLengthSet: false, + Email: false, + Hostname: false, + Regex: regexMap["[0-9]{4,15}"], + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(value)); err != nil { + return errors.Wrap(err, "string") + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "phone", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s PaymentMethodDataCashType) Validate() error { + switch s { + case "bank_card": + return nil + case "cash": + return nil + case "sberbank": + return nil + case "tinkoff_bank": + return nil + case "yoo_money": + return nil + case "mobile_balance": + return nil + case "b2b_sberbank": + return nil + case "sbp": + return nil + case "sber_loan": + return nil + case "electronic_certificate": + return nil + case "sber_bnpl": + return nil + default: + return errors.Errorf("invalid value: %v", s) + } +} + +func (s *PaymentMethodDataElectronicCertificate) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Type.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "type", + Error: err, + }) + } + if err := func() error { + if value, ok := s.Card.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "card", + Error: err, + }) + } + if err := func() error { + if value, ok := s.ElectronicCertificate.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "electronic_certificate", + Error: err, + }) + } + if err := func() error { + var failures []validate.FieldError + for i, elem := range s.Articles { + if err := func() error { + if err := elem.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: fmt.Sprintf("[%d]", i), + Error: err, + }) + } + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "articles", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s PaymentMethodDataElectronicCertificateType) Validate() error { + switch s { + case "bank_card": + return nil + case "cash": + return nil + case "sberbank": + return nil + case "tinkoff_bank": + return nil + case "yoo_money": + return nil + case "mobile_balance": + return nil + case "b2b_sberbank": + return nil + case "sbp": + return nil + case "sber_loan": + return nil + case "electronic_certificate": + return nil + case "sber_bnpl": + return nil + default: + return errors.Errorf("invalid value: %v", s) + } +} + +func (s *PaymentMethodDataMobileBalance) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Type.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "type", + Error: err, + }) + } + if err := func() error { + if err := (validate.String{ + MinLength: 0, + MinLengthSet: false, + MaxLength: 0, + MaxLengthSet: false, + Email: false, + Hostname: false, + Regex: regexMap["[0-9]{4,15}"], + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(s.Phone)); err != nil { + return errors.Wrap(err, "string") + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "phone", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s PaymentMethodDataMobileBalanceType) Validate() error { + switch s { + case "bank_card": + return nil + case "cash": + return nil + case "sberbank": + return nil + case "tinkoff_bank": + return nil + case "yoo_money": + return nil + case "mobile_balance": + return nil + case "b2b_sberbank": + return nil + case "sbp": + return nil + case "sber_loan": + return nil + case "electronic_certificate": + return nil + case "sber_bnpl": + return nil + default: + return errors.Errorf("invalid value: %v", s) + } +} + +func (s *PaymentMethodDataSberBnpl) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Type.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "type", + Error: err, + }) + } + if err := func() error { + if value, ok := s.Phone.Get(); ok { + if err := func() error { + if err := (validate.String{ + MinLength: 0, + MinLengthSet: false, + MaxLength: 0, + MaxLengthSet: false, + Email: false, + Hostname: false, + Regex: regexMap["[0-9]{4,15}"], + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(value)); err != nil { + return errors.Wrap(err, "string") + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "phone", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s PaymentMethodDataSberBnplType) Validate() error { + switch s { + case "bank_card": + return nil + case "cash": + return nil + case "sberbank": + return nil + case "tinkoff_bank": + return nil + case "yoo_money": + return nil + case "mobile_balance": + return nil + case "b2b_sberbank": + return nil + case "sbp": + return nil + case "sber_loan": + return nil + case "electronic_certificate": + return nil + case "sber_bnpl": + return nil + default: + return errors.Errorf("invalid value: %v", s) + } +} + +func (s *PaymentMethodDataSberLoan) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Type.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "type", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s PaymentMethodDataSberLoanType) Validate() error { + switch s { + case "bank_card": + return nil + case "cash": + return nil + case "sberbank": + return nil + case "tinkoff_bank": + return nil + case "yoo_money": + return nil + case "mobile_balance": + return nil + case "b2b_sberbank": + return nil + case "sbp": + return nil + case "sber_loan": + return nil + case "electronic_certificate": + return nil + case "sber_bnpl": + return nil + default: + return errors.Errorf("invalid value: %v", s) + } +} + +func (s *PaymentMethodDataSberbank) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Type.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "type", + Error: err, + }) + } + if err := func() error { + if value, ok := s.Phone.Get(); ok { + if err := func() error { + if err := (validate.String{ + MinLength: 0, + MinLengthSet: false, + MaxLength: 0, + MaxLengthSet: false, + Email: false, + Hostname: false, + Regex: regexMap["[0-9]{4,15}"], + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(value)); err != nil { + return errors.Wrap(err, "string") + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "phone", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s PaymentMethodDataSberbankType) Validate() error { + switch s { + case "bank_card": + return nil + case "cash": + return nil + case "sberbank": + return nil + case "tinkoff_bank": + return nil + case "yoo_money": + return nil + case "mobile_balance": + return nil + case "b2b_sberbank": + return nil + case "sbp": + return nil + case "sber_loan": + return nil + case "electronic_certificate": + return nil + case "sber_bnpl": + return nil + default: + return errors.Errorf("invalid value: %v", s) + } +} + +func (s *PaymentMethodDataSbp) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Type.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "type", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s PaymentMethodDataSbpType) Validate() error { + switch s { + case "bank_card": + return nil + case "cash": + return nil + case "sberbank": + return nil + case "tinkoff_bank": + return nil + case "yoo_money": + return nil + case "mobile_balance": + return nil + case "b2b_sberbank": + return nil + case "sbp": + return nil + case "sber_loan": + return nil + case "electronic_certificate": + return nil + case "sber_bnpl": + return nil + default: + return errors.Errorf("invalid value: %v", s) + } +} + +func (s *PaymentMethodDataTinkoffBank) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Type.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "type", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s PaymentMethodDataTinkoffBankType) Validate() error { + switch s { + case "bank_card": + return nil + case "cash": + return nil + case "sberbank": + return nil + case "tinkoff_bank": + return nil + case "yoo_money": + return nil + case "mobile_balance": + return nil + case "b2b_sberbank": + return nil + case "sbp": + return nil + case "sber_loan": + return nil + case "electronic_certificate": + return nil + case "sber_bnpl": + return nil + default: + return errors.Errorf("invalid value: %v", s) + } +} + +func (s *PaymentMethodDataYooMoney) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Type.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "type", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s PaymentMethodDataYooMoneyType) Validate() error { + switch s { + case "bank_card": + return nil + case "cash": + return nil + case "sberbank": + return nil + case "tinkoff_bank": + return nil + case "yoo_money": + return nil + case "mobile_balance": + return nil + case "b2b_sberbank": + return nil + case "sbp": + return nil + case "sber_loan": + return nil + case "electronic_certificate": + return nil + case "sber_bnpl": + return nil + default: + return errors.Errorf("invalid value: %v", s) + } +} + +func (s *PaymentMethodElectronicCertificate) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Type.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "type", + Error: err, + }) + } + if err := func() error { + if err := s.Status.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "status", + Error: err, + }) + } + if err := func() error { + if value, ok := s.Card.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "card", + Error: err, + }) + } + if err := func() error { + if value, ok := s.ElectronicCertificate.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "electronic_certificate", + Error: err, + }) + } + if err := func() error { + var failures []validate.FieldError + for i, elem := range s.Articles { + if err := func() error { + if err := elem.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: fmt.Sprintf("[%d]", i), + Error: err, + }) + } + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "articles", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s *PaymentMethodElectronicCertificateCard) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if value, ok := s.First6.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "first6", + Error: err, + }) + } + if err := func() error { + if err := s.Last4.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "last4", + Error: err, + }) + } + if err := func() error { + if err := s.ExpiryYear.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "expiry_year", + Error: err, + }) + } + if err := func() error { + if err := s.CardType.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "card_type", + Error: err, + }) + } + if err := func() error { + if value, ok := s.Source.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "source", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s PaymentMethodElectronicCertificateStatus) Validate() error { + switch s { + case "pending": + return nil + case "active": + return nil + case "inactive": + return nil + default: + return errors.Errorf("invalid value: %v", s) + } +} + +func (s *PaymentMethodGooglePay) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Type.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "type", + Error: err, + }) + } + if err := func() error { + if err := s.Status.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "status", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s PaymentMethodGooglePayStatus) Validate() error { + switch s { + case "pending": + return nil + case "active": + return nil + case "inactive": + return nil + default: + return errors.Errorf("invalid value: %v", s) + } +} + +func (s *PaymentMethodInstallments) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Type.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "type", + Error: err, + }) + } + if err := func() error { + if err := s.Status.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "status", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s PaymentMethodInstallmentsStatus) Validate() error { + switch s { + case "pending": + return nil + case "active": + return nil + case "inactive": + return nil + default: + return errors.Errorf("invalid value: %v", s) + } +} + +func (s *PaymentMethodMobileBalance) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Type.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "type", + Error: err, + }) + } + if err := func() error { + if err := s.Status.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "status", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s PaymentMethodMobileBalanceStatus) Validate() error { + switch s { + case "pending": + return nil + case "active": + return nil + case "inactive": + return nil + default: + return errors.Errorf("invalid value: %v", s) + } +} + +func (s *PaymentMethodQiwi) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Type.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "type", + Error: err, + }) + } + if err := func() error { + if err := s.Status.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "status", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s PaymentMethodQiwiStatus) Validate() error { + switch s { + case "pending": + return nil + case "active": + return nil + case "inactive": + return nil + default: + return errors.Errorf("invalid value: %v", s) + } +} + +func (s *PaymentMethodSberBnpl) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Type.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "type", + Error: err, + }) + } + if err := func() error { + if err := s.Status.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "status", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s PaymentMethodSberBnplStatus) Validate() error { + switch s { + case "pending": + return nil + case "active": + return nil + case "inactive": + return nil + default: + return errors.Errorf("invalid value: %v", s) + } +} + +func (s *PaymentMethodSberLoan) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Type.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "type", + Error: err, + }) + } + if err := func() error { + if err := s.Status.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "status", + Error: err, + }) + } + if err := func() error { + if value, ok := s.LoanOption.Get(); ok { + if err := func() error { + if err := (validate.String{ + MinLength: 1, + MinLengthSet: true, + MaxLength: 0, + MaxLengthSet: false, + Email: false, + Hostname: false, + Regex: nil, + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(value)); err != nil { + return errors.Wrap(err, "string") + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "loan_option", + Error: err, + }) + } + if err := func() error { + if value, ok := s.DiscountAmount.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "discount_amount", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s *PaymentMethodSberLoanDiscountAmount) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Currency.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "currency", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s PaymentMethodSberLoanStatus) Validate() error { + switch s { + case "pending": + return nil + case "active": + return nil + case "inactive": + return nil + default: + return errors.Errorf("invalid value: %v", s) + } +} + +func (s *PaymentMethodSberbank) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Type.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "type", + Error: err, + }) + } + if err := func() error { + if err := s.Status.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "status", + Error: err, + }) + } + if err := func() error { + if value, ok := s.Phone.Get(); ok { + if err := func() error { + if err := (validate.String{ + MinLength: 0, + MinLengthSet: false, + MaxLength: 0, + MaxLengthSet: false, + Email: false, + Hostname: false, + Regex: regexMap["[0-9]{4,15}"], + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(value)); err != nil { + return errors.Wrap(err, "string") + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "phone", + Error: err, + }) + } + if err := func() error { + if value, ok := s.Card.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "card", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s PaymentMethodSberbankStatus) Validate() error { + switch s { + case "pending": + return nil + case "active": + return nil + case "inactive": + return nil + default: + return errors.Errorf("invalid value: %v", s) + } +} + +func (s *PaymentMethodSbp) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Type.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "type", + Error: err, + }) + } + if err := func() error { + if err := s.Status.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "status", + Error: err, + }) + } + if err := func() error { + if value, ok := s.PayerBankDetails.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "payer_bank_details", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s PaymentMethodSbpStatus) Validate() error { + switch s { + case "pending": + return nil + case "active": + return nil + case "inactive": + return nil + default: + return errors.Errorf("invalid value: %v", s) + } +} + +func (s PaymentMethodStatus) Validate() error { + switch s { + case "pending": + return nil + case "active": + return nil + case "inactive": + return nil + default: + return errors.Errorf("invalid value: %v", s) + } +} + +func (s *PaymentMethodTinkoffBank) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Type.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "type", + Error: err, + }) + } + if err := func() error { + if err := s.Status.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "status", + Error: err, + }) + } + if err := func() error { + if value, ok := s.Card.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "card", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s PaymentMethodTinkoffBankStatus) Validate() error { + switch s { + case "pending": + return nil + case "active": + return nil + case "inactive": + return nil + default: + return errors.Errorf("invalid value: %v", s) + } +} + +func (s PaymentMethodType) Validate() error { + switch s { + case "bank_card": + return nil + case "cash": + return nil + case "alfabank": + return nil + case "webmoney": + return nil + case "wechat": + return nil + case "apple_pay": + return nil + case "google_pay": + return nil + case "qiwi": + return nil + case "installments": + return nil + case "yoo_money": + return nil + case "sberbank": + return nil + case "mobile_balance": + return nil + case "b2b_sberbank": + return nil + case "tinkoff_bank": + return nil + case "sbp": + return nil + case "sber_loan": + return nil + case "electronic_certificate": + return nil + case "sber_bnpl": + return nil + default: + return errors.Errorf("invalid value: %v", s) + } +} + +func (s *PaymentMethodWeChat) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Type.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "type", + Error: err, + }) + } + if err := func() error { + if err := s.Status.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "status", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s PaymentMethodWeChatStatus) Validate() error { + switch s { + case "pending": + return nil + case "active": + return nil + case "inactive": + return nil + default: + return errors.Errorf("invalid value: %v", s) + } +} + +func (s *PaymentMethodWebmoney) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Type.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "type", + Error: err, + }) + } + if err := func() error { + if err := s.Status.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "status", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s PaymentMethodWebmoneyStatus) Validate() error { + switch s { + case "pending": + return nil + case "active": + return nil + case "inactive": + return nil + default: + return errors.Errorf("invalid value: %v", s) + } +} + +func (s *PaymentMethodYooMoney) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Type.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "type", + Error: err, + }) + } + if err := func() error { + if err := s.Status.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "status", + Error: err, + }) + } + if err := func() error { + if value, ok := s.AccountNumber.Get(); ok { + if err := func() error { + if err := (validate.String{ + MinLength: 0, + MinLengthSet: false, + MaxLength: 0, + MaxLengthSet: false, + Email: false, + Hostname: false, + Regex: regexMap["[0-9]{11,33}"], + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(value)); err != nil { + return errors.Wrap(err, "string") + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "account_number", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s PaymentMethodYooMoneyStatus) Validate() error { + switch s { + case "pending": + return nil + case "active": + return nil + case "inactive": + return nil + default: + return errors.Errorf("invalid value: %v", s) + } +} + +func (s *PaymentMethodsConfirmationDataRedirect) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Type.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "type", + Error: err, + }) + } + if err := func() error { + if err := (validate.String{ + MinLength: 0, + MinLengthSet: false, + MaxLength: 2048, + MaxLengthSet: true, + Email: false, + Hostname: false, + Regex: nil, + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(s.ReturnURL)); err != nil { + return errors.Wrap(err, "string") + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "return_url", + Error: err, + }) + } + if err := func() error { + if value, ok := s.Locale.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "locale", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s *PaymentMethodsConfirmationRedirect) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Type.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "type", + Error: err, + }) + } + if err := func() error { + if value, ok := s.ReturnURL.Get(); ok { + if err := func() error { + if err := (validate.String{ + MinLength: 0, + MinLengthSet: false, + MaxLength: 2048, + MaxLengthSet: true, + Email: false, + Hostname: false, + Regex: nil, + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(value)); err != nil { + return errors.Wrap(err, "string") + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "return_url", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s PaymentMethodsConfirmationType) Validate() error { + switch s { + case "redirect": + return nil + default: + return errors.Errorf("invalid value: %v", s) + } +} + +func (s *PaymentMethodsPaymentMethodIDGetInternalServerError) Validate() error { + alias := (*TooManyRequests)(s) + if err := alias.Validate(); err != nil { + return err + } + return nil +} + +func (s PaymentMethodsPaymentMethodIDGetOK) Validate() error { + switch s.Type { + case SavePaymentMethodBankCardPaymentMethodsPaymentMethodIDGetOK: + if err := s.SavePaymentMethodBankCard.Validate(); err != nil { + return err + } + return nil + default: + return errors.Errorf("invalid type %q", s.Type) + } +} + +func (s *PaymentMethodsPaymentMethodIDGetTooManyRequests) Validate() error { + alias := (*TooManyRequests)(s) + if err := alias.Validate(); err != nil { + return err + } + return nil +} + +func (s *PaymentMethodsPostInternalServerError) Validate() error { + alias := (*TooManyRequests)(s) + if err := alias.Validate(); err != nil { + return err + } + return nil +} + +func (s PaymentMethodsPostOK) Validate() error { + switch s.Type { + case SavePaymentMethodBankCardPaymentMethodsPostOK: + if err := s.SavePaymentMethodBankCard.Validate(); err != nil { + return err + } + return nil + default: + return errors.Errorf("invalid type %q", s.Type) + } +} + +func (s PaymentMethodsPostReq) Validate() error { + switch s.Type { + case SavePaymentMethodDataBankCardPaymentMethodsPostReq: + if err := s.SavePaymentMethodDataBankCard.Validate(); err != nil { + return err + } + return nil + default: + return errors.Errorf("invalid type %q", s.Type) + } +} + +func (s *PaymentMethodsPostTooManyRequests) Validate() error { + alias := (*TooManyRequests)(s) + if err := alias.Validate(); err != nil { + return err + } + return nil +} + +func (s *PaymentOrderDataUtilities) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Type.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "type", + Error: err, + }) + } + if err := func() error { + if err := s.Amount.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "amount", + Error: err, + }) + } + if err := func() error { + if err := (validate.String{ + MinLength: 0, + MinLengthSet: false, + MaxLength: 0, + MaxLengthSet: false, + Email: false, + Hostname: false, + Regex: regexMap["(?s).{1,210}"], + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(s.PaymentPurpose)); err != nil { + return errors.Wrap(err, "string") + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "payment_purpose", + Error: err, + }) + } + if err := func() error { + if err := s.Recipient.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "recipient", + Error: err, + }) + } + if err := func() error { + if value, ok := s.Kbk.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "kbk", + Error: err, + }) + } + if err := func() error { + if value, ok := s.Oktmo.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "oktmo", + Error: err, + }) + } + if err := func() error { + if value, ok := s.PaymentPeriod.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "payment_period", + Error: err, + }) + } + if err := func() error { + if value, ok := s.PaymentDocumentID.Get(); ok { + if err := func() error { + if err := (validate.String{ + MinLength: 18, + MinLengthSet: true, + MaxLength: 18, + MaxLengthSet: true, + Email: false, + Hostname: false, + Regex: nil, + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(value)); err != nil { + return errors.Wrap(err, "string") + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "payment_document_id", + Error: err, + }) + } + if err := func() error { + if value, ok := s.PaymentDocumentNumber.Get(); ok { + if err := func() error { + if err := (validate.String{ + MinLength: 1, + MinLengthSet: true, + MaxLength: 30, + MaxLengthSet: true, + Email: false, + Hostname: false, + Regex: regexMap["(.)([0-9а-яА-Яa-zA-Z]+)(.)"], + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(value)); err != nil { + return errors.Wrap(err, "string") + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "payment_document_number", + Error: err, + }) + } + if err := func() error { + if value, ok := s.AccountNumber.Get(); ok { + if err := func() error { + if err := (validate.String{ + MinLength: 1, + MinLengthSet: true, + MaxLength: 30, + MaxLengthSet: true, + Email: false, + Hostname: false, + Regex: regexMap["(.)([0-9а-яА-Яa-zA-Z]+)(.)"], + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(value)); err != nil { + return errors.Wrap(err, "string") + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "account_number", + Error: err, + }) + } + if err := func() error { + if value, ok := s.UnifiedAccountNumber.Get(); ok { + if err := func() error { + if err := (validate.String{ + MinLength: 10, + MinLengthSet: true, + MaxLength: 10, + MaxLengthSet: true, + Email: false, + Hostname: false, + Regex: nil, + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(value)); err != nil { + return errors.Wrap(err, "string") + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "unified_account_number", + Error: err, + }) + } + if err := func() error { + if value, ok := s.ServiceID.Get(); ok { + if err := func() error { + if err := (validate.String{ + MinLength: 13, + MinLengthSet: true, + MaxLength: 13, + MaxLengthSet: true, + Email: false, + Hostname: false, + Regex: nil, + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(value)); err != nil { + return errors.Wrap(err, "string") + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "service_id", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s *PaymentOrderDataUtilitiesAmount) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Currency.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "currency", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s *PaymentOrderDataUtilitiesRecipient) 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: 0, + MaxLengthSet: false, + Email: false, + Hostname: false, + Regex: regexMap["[0-9]{10}"], + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(s.Inn)); err != nil { + return errors.Wrap(err, "string") + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "inn", + Error: err, + }) + } + if err := func() error { + if err := (validate.String{ + MinLength: 0, + MinLengthSet: false, + MaxLength: 0, + MaxLengthSet: false, + Email: false, + Hostname: false, + Regex: regexMap["[0-9]{9}"], + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(s.Kpp)); err != nil { + return errors.Wrap(err, "string") + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "kpp", + Error: err, + }) + } + if err := func() error { + if err := s.Bank.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "bank", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s *PaymentOrderDataUtilitiesRecipientBank) 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: 45, + MaxLengthSet: true, + Email: false, + Hostname: false, + Regex: nil, + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(s.Name)); err != nil { + return errors.Wrap(err, "string") + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "name", + Error: err, + }) + } + if err := func() error { + if err := (validate.String{ + MinLength: 0, + MinLengthSet: false, + MaxLength: 0, + MaxLengthSet: false, + Email: false, + Hostname: false, + Regex: regexMap["[0-9]{9}"], + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(s.Bic)); err != nil { + return errors.Wrap(err, "string") + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "bic", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s PaymentOrderDataUtilitiesType) Validate() error { + switch s { + case "utilities": + return nil + default: + return errors.Errorf("invalid value: %v", s) + } +} + +func (s *PaymentOverviewStatementData) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Type.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "type", + Error: err, + }) + } + if err := func() error { + if err := s.DeliveryMethod.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "delivery_method", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s PaymentOverviewStatementDataType) Validate() error { + switch s { + case "payment_overview": + return nil + default: + return errors.Errorf("invalid value: %v", s) + } +} + +func (s PaymentOverviewStatementDeliveryMethodType) Validate() error { + switch s { + case "email": + return nil + default: + return errors.Errorf("invalid value: %v", s) + } +} + +func (s *PaymentOverviewStatementEmailDeliveryMethod) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Type.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "type", + Error: err, + }) + } + if err := func() error { + if err := (validate.String{ + MinLength: 0, + MinLengthSet: false, + MaxLength: 254, + MaxLengthSet: true, + Email: true, + Hostname: false, + Regex: nil, + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(s.Email)); err != nil { + return errors.Wrap(err, "string") + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "email", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s PaymentPaymentMethod) Validate() error { + switch s.Type { + case PaymentMethodBankCardPaymentPaymentMethod: + if err := s.PaymentMethodBankCard.Validate(); err != nil { + return err + } + return nil + case PaymentMethodCashPaymentPaymentMethod: + if err := s.PaymentMethodCash.Validate(); err != nil { + return err + } + return nil + case PaymentMethodQiwiPaymentPaymentMethod: + if err := s.PaymentMethodQiwi.Validate(); err != nil { + return err + } + return nil + case PaymentMethodAlfabankPaymentPaymentMethod: + if err := s.PaymentMethodAlfabank.Validate(); err != nil { + return err + } + return nil + case PaymentMethodWebmoneyPaymentPaymentMethod: + if err := s.PaymentMethodWebmoney.Validate(); err != nil { + return err + } + return nil + case PaymentMethodSberbankPaymentPaymentMethod: + if err := s.PaymentMethodSberbank.Validate(); err != nil { + return err + } + return nil + case PaymentMethodTinkoffBankPaymentPaymentMethod: + if err := s.PaymentMethodTinkoffBank.Validate(); err != nil { + return err + } + return nil + case PaymentMethodYooMoneyPaymentPaymentMethod: + if err := s.PaymentMethodYooMoney.Validate(); err != nil { + return err + } + return nil + case PaymentMethodApplePayPaymentPaymentMethod: + if err := s.PaymentMethodApplePay.Validate(); err != nil { + return err + } + return nil + case PaymentMethodGooglePayPaymentPaymentMethod: + if err := s.PaymentMethodGooglePay.Validate(); err != nil { + return err + } + return nil + case PaymentMethodMobileBalancePaymentPaymentMethod: + if err := s.PaymentMethodMobileBalance.Validate(); err != nil { + return err + } + return nil + case PaymentMethodInstallmentsPaymentPaymentMethod: + if err := s.PaymentMethodInstallments.Validate(); err != nil { + return err + } + return nil + case PaymentMethodB2bSberbankPaymentPaymentMethod: + if err := s.PaymentMethodB2bSberbank.Validate(); err != nil { + return err + } + return nil + case PaymentMethodWeChatPaymentPaymentMethod: + if err := s.PaymentMethodWeChat.Validate(); err != nil { + return err + } + return nil + case PaymentMethodSbpPaymentPaymentMethod: + if err := s.PaymentMethodSbp.Validate(); err != nil { + return err + } + return nil + case PaymentMethodSberLoanPaymentPaymentMethod: + if err := s.PaymentMethodSberLoan.Validate(); err != nil { + return err + } + return nil + case PaymentMethodElectronicCertificatePaymentPaymentMethod: + if err := s.PaymentMethodElectronicCertificate.Validate(); err != nil { + return err + } + return nil + case PaymentMethodSberBnplPaymentPaymentMethod: + if err := s.PaymentMethodSberBnpl.Validate(); err != nil { + return err + } + return nil + default: + return errors.Errorf("invalid type %q", s.Type) + } +} + +func (s *PaymentPeriod) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := (validate.Int{ + MinSet: true, + Min: 1, + MaxSet: true, + Max: 12, + MinExclusive: false, + MaxExclusive: false, + MultipleOfSet: false, + MultipleOf: 0, + Pattern: nil, + }).Validate(int64(s.Month)); err != nil { + return errors.Wrap(err, "int") + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "month", + Error: err, + }) + } + if err := func() error { + if err := (validate.Int{ + MinSet: true, + Min: 1920, + MaxSet: true, + Max: 2050, + MinExclusive: false, + MaxExclusive: false, + MultipleOfSet: false, + MultipleOf: 0, + Pattern: nil, + }).Validate(int64(s.Year)); err != nil { + return errors.Wrap(err, "int") + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "year", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s PaymentPurpose) Validate() error { + alias := (string)(s) + if err := (validate.String{ + MinLength: 0, + MinLengthSet: false, + MaxLength: 0, + MaxLengthSet: false, + Email: false, + Hostname: false, + Regex: regexMap["(?s).{1,210}"], + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(alias)); err != nil { + return errors.Wrap(err, "string") + } + return nil +} + +func (s PaymentReceiptRegistration) Validate() error { + switch s { + case "pending": + return nil + case "succeeded": + return nil + case "canceled": + return nil + default: + return errors.Errorf("invalid value: %v", s) + } +} + +func (s *PaymentRefundedAmount) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Currency.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "currency", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s PaymentStatus) Validate() error { + switch s { + case "pending": + return nil + case "waiting_for_capture": + return nil + case "succeeded": + return nil + case "canceled": + return nil + default: + return errors.Errorf("invalid value: %v", s) + } +} + +func (s *PaymentsPaymentIDCapturePostReq) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if value, ok := s.Amount.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "amount", + Error: err, + }) + } + if err := func() error { + if value, ok := s.Receipt.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "receipt", + Error: err, + }) + } + if err := func() error { + if value, ok := s.Airline.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "airline", + Error: err, + }) + } + if err := func() error { + var failures []validate.FieldError + for i, elem := range s.Transfers { + if err := func() error { + if err := elem.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: fmt.Sprintf("[%d]", i), + Error: err, + }) + } + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "transfers", + Error: err, + }) + } + if err := func() error { + if value, ok := s.Deal.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "deal", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s *PaymentsPaymentIDCapturePostReqAirline) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if value, ok := s.TicketNumber.Get(); ok { + if err := func() error { + if err := (validate.String{ + MinLength: 1, + MinLengthSet: true, + MaxLength: 150, + MaxLengthSet: true, + Email: false, + Hostname: false, + Regex: regexMap["[0-9]{1,150}"], + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(value)); err != nil { + return errors.Wrap(err, "string") + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "ticket_number", + Error: err, + }) + } + if err := func() error { + if value, ok := s.BookingReference.Get(); ok { + if err := func() error { + if err := (validate.String{ + MinLength: 1, + MinLengthSet: true, + MaxLength: 20, + MaxLengthSet: true, + Email: false, + Hostname: false, + Regex: nil, + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(value)); err != nil { + return errors.Wrap(err, "string") + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "booking_reference", + Error: err, + }) + } + if err := func() error { + if s.Passengers == nil { + return nil // optional + } + if err := (validate.Array{ + MinLength: 0, + MinLengthSet: true, + MaxLength: 500, + MaxLengthSet: true, + }).ValidateLength(len(s.Passengers)); err != nil { + return errors.Wrap(err, "array") + } + var failures []validate.FieldError + for i, elem := range s.Passengers { + if err := func() error { + if err := elem.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: fmt.Sprintf("[%d]", i), + Error: err, + }) + } + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "passengers", + Error: err, + }) + } + if err := func() error { + if s.Legs == nil { + return nil // optional + } + if err := (validate.Array{ + MinLength: 0, + MinLengthSet: true, + MaxLength: 4, + MaxLengthSet: true, + }).ValidateLength(len(s.Legs)); err != nil { + return errors.Wrap(err, "array") + } + var failures []validate.FieldError + for i, elem := range s.Legs { + if err := func() error { + if err := elem.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: fmt.Sprintf("[%d]", i), + Error: err, + }) + } + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "legs", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s *PaymentsPaymentIDCapturePostReqAmount) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Currency.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "currency", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s *PaymentsPaymentIDCapturePostReqDeal) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Settlements.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "settlements", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s *PaymentsPostReq) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Amount.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "amount", + Error: err, + }) + } + if err := func() error { + if value, ok := s.Description.Get(); ok { + if err := func() error { + if err := (validate.String{ + MinLength: 0, + MinLengthSet: false, + MaxLength: 128, + MaxLengthSet: true, + Email: false, + Hostname: false, + Regex: nil, + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(value)); err != nil { + return errors.Wrap(err, "string") + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "description", + Error: err, + }) + } + if err := func() error { + if value, ok := s.Receipt.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "receipt", + Error: err, + }) + } + if err := func() error { + if value, ok := s.PaymentMethodData.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "payment_method_data", + Error: err, + }) + } + if err := func() error { + if value, ok := s.Confirmation.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "confirmation", + Error: err, + }) + } + if err := func() error { + if value, ok := s.Metadata.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "metadata", + Error: err, + }) + } + if err := func() error { + if value, ok := s.Airline.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "airline", + Error: err, + }) + } + if err := func() error { + var failures []validate.FieldError + for i, elem := range s.Transfers { + if err := func() error { + if err := elem.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: fmt.Sprintf("[%d]", i), + Error: err, + }) + } + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "transfers", + Error: err, + }) + } + if err := func() error { + if value, ok := s.Deal.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "deal", + Error: err, + }) + } + if err := func() error { + if value, ok := s.MerchantCustomerID.Get(); ok { + if err := func() error { + if err := (validate.String{ + MinLength: 0, + MinLengthSet: false, + MaxLength: 200, + MaxLengthSet: true, + Email: false, + Hostname: false, + Regex: nil, + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(value)); err != nil { + return errors.Wrap(err, "string") + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "merchant_customer_id", + Error: err, + }) + } + if err := func() error { + if value, ok := s.PaymentOrder.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "payment_order", + Error: err, + }) + } + if err := func() error { + if value, ok := s.Receiver.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "receiver", + Error: err, + }) + } + if err := func() error { + var failures []validate.FieldError + for i, elem := range s.Statements { + if err := func() error { + if err := elem.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: fmt.Sprintf("[%d]", i), + Error: err, + }) + } + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "statements", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s *PaymentsPostReqAirline) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if value, ok := s.TicketNumber.Get(); ok { + if err := func() error { + if err := (validate.String{ + MinLength: 1, + MinLengthSet: true, + MaxLength: 150, + MaxLengthSet: true, + Email: false, + Hostname: false, + Regex: regexMap["[0-9]{1,150}"], + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(value)); err != nil { + return errors.Wrap(err, "string") + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "ticket_number", + Error: err, + }) + } + if err := func() error { + if value, ok := s.BookingReference.Get(); ok { + if err := func() error { + if err := (validate.String{ + MinLength: 1, + MinLengthSet: true, + MaxLength: 20, + MaxLengthSet: true, + Email: false, + Hostname: false, + Regex: nil, + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(value)); err != nil { + return errors.Wrap(err, "string") + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "booking_reference", + Error: err, + }) + } + if err := func() error { + if s.Passengers == nil { + return nil // optional + } + if err := (validate.Array{ + MinLength: 0, + MinLengthSet: true, + MaxLength: 500, + MaxLengthSet: true, + }).ValidateLength(len(s.Passengers)); err != nil { + return errors.Wrap(err, "array") + } + var failures []validate.FieldError + for i, elem := range s.Passengers { + if err := func() error { + if err := elem.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: fmt.Sprintf("[%d]", i), + Error: err, + }) + } + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "passengers", + Error: err, + }) + } + if err := func() error { + if s.Legs == nil { + return nil // optional + } + if err := (validate.Array{ + MinLength: 0, + MinLengthSet: true, + MaxLength: 4, + MaxLengthSet: true, + }).ValidateLength(len(s.Legs)); err != nil { + return errors.Wrap(err, "array") + } + var failures []validate.FieldError + for i, elem := range s.Legs { + if err := func() error { + if err := elem.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: fmt.Sprintf("[%d]", i), + Error: err, + }) + } + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "legs", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s *PaymentsPostReqAmount) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Currency.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "currency", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s PaymentsPostReqConfirmation) Validate() error { + switch s.Type { + case ConfirmationDataRedirectPaymentsPostReqConfirmation: + if err := s.ConfirmationDataRedirect.Validate(); err != nil { + return err + } + return nil + case ConfirmationDataExternalPaymentsPostReqConfirmation: + if err := s.ConfirmationDataExternal.Validate(); err != nil { + return err + } + return nil + case ConfirmationDataQrPaymentsPostReqConfirmation: + if err := s.ConfirmationDataQr.Validate(); err != nil { + return err + } + return nil + case ConfirmationDataEmbeddedPaymentsPostReqConfirmation: + if err := s.ConfirmationDataEmbedded.Validate(); err != nil { + return err + } + return nil + case ConfirmationDataMobileApplicationPaymentsPostReqConfirmation: + if err := s.ConfirmationDataMobileApplication.Validate(); err != nil { + return err + } + return nil + default: + return errors.Errorf("invalid type %q", s.Type) + } +} + +func (s *PaymentsPostReqDeal) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.ID.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "id", + Error: err, + }) + } + if err := func() error { + if err := s.Settlements.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "settlements", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s PaymentsPostReqPaymentMethodData) Validate() error { + switch s.Type { + case PaymentMethodDataBankCardPaymentsPostReqPaymentMethodData: + if err := s.PaymentMethodDataBankCard.Validate(); err != nil { + return err + } + return nil + case PaymentMethodDataCashPaymentsPostReqPaymentMethodData: + if err := s.PaymentMethodDataCash.Validate(); err != nil { + return err + } + return nil + case PaymentMethodDataSberbankPaymentsPostReqPaymentMethodData: + if err := s.PaymentMethodDataSberbank.Validate(); err != nil { + return err + } + return nil + case PaymentMethodDataTinkoffBankPaymentsPostReqPaymentMethodData: + if err := s.PaymentMethodDataTinkoffBank.Validate(); err != nil { + return err + } + return nil + case PaymentMethodDataYooMoneyPaymentsPostReqPaymentMethodData: + if err := s.PaymentMethodDataYooMoney.Validate(); err != nil { + return err + } + return nil + case PaymentMethodDataMobileBalancePaymentsPostReqPaymentMethodData: + if err := s.PaymentMethodDataMobileBalance.Validate(); err != nil { + return err + } + return nil + case PaymentMethodDataB2bSberbankPaymentsPostReqPaymentMethodData: + if err := s.PaymentMethodDataB2bSberbank.Validate(); err != nil { + return err + } + return nil + case PaymentMethodDataSbpPaymentsPostReqPaymentMethodData: + if err := s.PaymentMethodDataSbp.Validate(); err != nil { + return err + } + return nil + case PaymentMethodDataSberLoanPaymentsPostReqPaymentMethodData: + if err := s.PaymentMethodDataSberLoan.Validate(); err != nil { + return err + } + return nil + case PaymentMethodDataElectronicCertificatePaymentsPostReqPaymentMethodData: + if err := s.PaymentMethodDataElectronicCertificate.Validate(); err != nil { + return err + } + return nil + case PaymentMethodDataSberBnplPaymentsPostReqPaymentMethodData: + if err := s.PaymentMethodDataSberBnpl.Validate(); err != nil { + return err + } + return nil + default: + return errors.Errorf("invalid type %q", s.Type) + } +} + +func (s PaymentsPostReqPaymentOrder) Validate() error { + switch s.Type { + case PaymentOrderDataUtilitiesPaymentsPostReqPaymentOrder: + if err := s.PaymentOrderDataUtilities.Validate(); err != nil { + return err + } + return nil + default: + return errors.Errorf("invalid type %q", s.Type) + } +} + +func (s PaymentsPostReqReceiver) Validate() error { + switch s.Type { + case ReceiverMobileBalancePaymentsPostReqReceiver: + if err := s.ReceiverMobileBalance.Validate(); err != nil { + return err + } + return nil + case ReceiverDigitalWalletPaymentsPostReqReceiver: + if err := s.ReceiverDigitalWallet.Validate(); err != nil { + return err + } + return nil + case ReceiverBankAccountPaymentsPostReqReceiver: + if err := s.ReceiverBankAccount.Validate(); err != nil { + return err + } + return nil + default: + return errors.Errorf("invalid type %q", s.Type) + } +} + +func (s PaymentsPostReqStatementsItem) Validate() error { + switch s.Type { + case PaymentOverviewStatementDataPaymentsPostReqStatementsItem: + if err := s.PaymentOverviewStatementData.Validate(); err != nil { + return err + } + return nil + default: + return errors.Errorf("invalid type %q", s.Type) + } +} + +func (s *Payout) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.ID.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "id", + Error: err, + }) + } + if err := func() error { + if err := s.Amount.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "amount", + Error: err, + }) + } + if err := func() error { + if err := s.Status.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "status", + Error: err, + }) + } + if err := func() error { + if err := s.PayoutDestination.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "payout_destination", + Error: err, + }) + } + if err := func() error { + if value, ok := s.Description.Get(); ok { + if err := func() error { + if err := (validate.String{ + MinLength: 0, + MinLengthSet: false, + MaxLength: 128, + MaxLengthSet: true, + Email: false, + Hostname: false, + Regex: nil, + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(value)); err != nil { + return errors.Wrap(err, "string") + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "description", + Error: err, + }) + } + if err := func() error { + if value, ok := s.Deal.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "deal", + Error: err, + }) + } + if err := func() error { + if value, ok := s.SelfEmployed.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "self_employed", + Error: err, + }) + } + if err := func() error { + if value, ok := s.Receipt.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "receipt", + Error: err, + }) + } + if err := func() error { + if value, ok := s.CancellationDetails.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "cancellation_details", + Error: err, + }) + } + if err := func() error { + if value, ok := s.Metadata.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "metadata", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s *PayoutAmount) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Currency.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "currency", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s *PayoutCancellationDetails) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Party.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "party", + Error: err, + }) + } + if err := func() error { + if err := s.Reason.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "reason", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s PayoutCancellationDetailsParty) Validate() error { + switch s { + case "yoo_money": + return nil + case "payout_network": + return nil + default: + return errors.Errorf("invalid value: %v", s) + } +} + +func (s PayoutCancellationDetailsReason) Validate() error { + switch s { + case "insufficient_funds": + return nil + case "fraud_suspected": + return nil + case "one_time_limit_exceeded": + return nil + case "periodic_limit_exceeded": + return nil + case "rejected_by_payee": + return nil + case "general_decline": + return nil + case "issuer_unavailable": + return nil + case "recipient_not_found": + return nil + case "recipient_check_failed": + return nil + case "identification_required": + return nil + case "self_employed_annual_limit_exceeded": + return nil + default: + return errors.Errorf("invalid value: %v", s) + } +} + +func (s *PayoutCardData) 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: 0, + MaxLengthSet: false, + Email: false, + Hostname: false, + Regex: regexMap["[0-9]{6}"], + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(s.First6)); err != nil { + return errors.Wrap(err, "string") + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "first6", + Error: err, + }) + } + if err := func() error { + if err := s.Last4.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "last4", + Error: err, + }) + } + if err := func() error { + if err := s.CardType.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "card_type", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s *PayoutDeal) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.ID.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "id", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s *PayoutDealInfo) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.ID.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "id", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s PayoutDestinationDataType) Validate() error { + switch s { + case "yoo_money": + return nil + case "bank_card": + return nil + case "sbp": + return nil + default: + return errors.Errorf("invalid value: %v", s) + } +} + +func (s PayoutDestinationType) Validate() error { + switch s { + case "bank_card": + return nil + case "yoo_money": + return nil + case "sbp": + return nil + default: + return errors.Errorf("invalid value: %v", s) + } +} + +func (s PayoutId) Validate() error { + alias := (string)(s) + if err := (validate.String{ + MinLength: 36, + MinLengthSet: true, + MaxLength: 50, + MaxLengthSet: true, + Email: false, + Hostname: false, + Regex: nil, + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(alias)); err != nil { + return errors.Wrap(err, "string") + } + return nil +} + +func (s PayoutMethodType) Validate() error { + switch s { + case "bank_card": + return nil + case "yoo_money": + return nil + case "sbp": + return nil + default: + return errors.Errorf("invalid value: %v", s) + } +} + +func (s PayoutPayoutDestination) Validate() error { + switch s.Type { + case PayoutToCardDestinationPayoutPayoutDestination: + if err := s.PayoutToCardDestination.Validate(); err != nil { + return err + } + return nil + case PayoutToYooMoneyDestinationPayoutPayoutDestination: + if err := s.PayoutToYooMoneyDestination.Validate(); err != nil { + return err + } + return nil + case PayoutToSbpDestinationPayoutPayoutDestination: + if err := s.PayoutToSbpDestination.Validate(); err != nil { + return err + } + return nil + default: + return errors.Errorf("invalid type %q", s.Type) + } +} + +func (s *PayoutRequest) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Amount.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "amount", + Error: err, + }) + } + if err := func() error { + if value, ok := s.PayoutDestinationData.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "payout_destination_data", + Error: err, + }) + } + if err := func() error { + if value, ok := s.Description.Get(); ok { + if err := func() error { + if err := (validate.String{ + MinLength: 0, + MinLengthSet: false, + MaxLength: 128, + MaxLengthSet: true, + Email: false, + Hostname: false, + Regex: nil, + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(value)); err != nil { + return errors.Wrap(err, "string") + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "description", + Error: err, + }) + } + if err := func() error { + if value, ok := s.Deal.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "deal", + Error: err, + }) + } + if err := func() error { + if s.PersonalData == nil { + return nil // optional + } + if err := (validate.Array{ + MinLength: 1, + MinLengthSet: true, + MaxLength: 2, + MaxLengthSet: true, + }).ValidateLength(len(s.PersonalData)); err != nil { + return errors.Wrap(err, "array") + } + var failures []validate.FieldError + for i, elem := range s.PersonalData { + if err := func() error { + if err := elem.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: fmt.Sprintf("[%d]", i), + Error: err, + }) + } + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "personal_data", + Error: err, + }) + } + if err := func() error { + if value, ok := s.Metadata.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "metadata", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s *PayoutRequestAmount) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Currency.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "currency", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s PayoutRequestPayoutDestinationData) Validate() error { + switch s.Type { + case PayoutToYooMoneyDestinationDataPayoutRequestPayoutDestinationData: + if err := s.PayoutToYooMoneyDestinationData.Validate(); err != nil { + return err + } + return nil + case PayoutToBankCardDestinationDataPayoutRequestPayoutDestinationData: + if err := s.PayoutToBankCardDestinationData.Validate(); err != nil { + return err + } + return nil + case PayoutToSbpDestinationDataPayoutRequestPayoutDestinationData: + if err := s.PayoutToSbpDestinationData.Validate(); err != nil { + return err + } + return nil + default: + return errors.Errorf("invalid type %q", s.Type) + } +} + +func (s *PayoutSelfEmployed) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.ID.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "id", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s *PayoutStatementRecipientPersonalDataRequest) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Type.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "type", + Error: err, + }) + } + if err := func() error { + if value, ok := s.Metadata.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "metadata", + Error: err, + }) + } + if err := func() error { + if err := s.LastName.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "last_name", + Error: err, + }) + } + if err := func() error { + if err := s.FirstName.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "first_name", + Error: err, + }) + } + if err := func() error { + if value, ok := s.MiddleName.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "middle_name", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s PayoutStatus) Validate() error { + switch s { + case "pending": + return nil + case "succeeded": + return nil + case "canceled": + return nil + default: + return errors.Errorf("invalid value: %v", s) + } +} + +func (s *PayoutToBankCardDestinationData) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Type.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "type", + Error: err, + }) + } + if err := func() error { + if err := s.Card.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "card", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s *PayoutToCardDestination) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Type.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "type", + Error: err, + }) + } + if err := func() error { + if value, ok := s.Card.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "card", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s *PayoutToSbpDestination) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Type.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "type", + Error: err, + }) + } + if err := func() error { + if err := (validate.String{ + MinLength: 0, + MinLengthSet: false, + MaxLength: 0, + MaxLengthSet: false, + Email: false, + Hostname: false, + Regex: regexMap["[0-9]{4,15}"], + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(s.Phone)); err != nil { + return errors.Wrap(err, "string") + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "phone", + Error: err, + }) + } + if err := func() error { + if err := (validate.String{ + MinLength: 0, + MinLengthSet: false, + MaxLength: 12, + MaxLengthSet: true, + Email: false, + Hostname: false, + Regex: nil, + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(s.BankID)); err != nil { + return errors.Wrap(err, "string") + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "bank_id", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s *PayoutToSbpDestinationData) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Type.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "type", + Error: err, + }) + } + if err := func() error { + if err := (validate.String{ + MinLength: 0, + MinLengthSet: false, + MaxLength: 0, + MaxLengthSet: false, + Email: false, + Hostname: false, + Regex: regexMap["[0-9]{4,15}"], + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(s.Phone)); err != nil { + return errors.Wrap(err, "string") + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "phone", + Error: err, + }) + } + if err := func() error { + if err := (validate.String{ + MinLength: 0, + MinLengthSet: false, + MaxLength: 12, + MaxLengthSet: true, + Email: false, + Hostname: false, + Regex: regexMap["[a-zA-Z0-9]{12}"], + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(s.BankID)); err != nil { + return errors.Wrap(err, "string") + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "bank_id", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s *PayoutToYooMoneyDestination) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Type.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "type", + Error: err, + }) + } + if err := func() error { + if err := s.AccountNumber.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "account_number", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s *PayoutToYooMoneyDestinationData) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Type.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "type", + Error: err, + }) + } + if err := func() error { + if err := (validate.String{ + MinLength: 11, + MinLengthSet: true, + MaxLength: 33, + MaxLengthSet: true, + Email: false, + Hostname: false, + Regex: nil, + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(s.AccountNumber)); err != nil { + return errors.Wrap(err, "string") + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "account_number", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s *PayoutsGetInternalServerError) Validate() error { + alias := (*TooManyRequests)(s) + if err := alias.Validate(); err != nil { + return err + } + return nil +} + +func (s *PayoutsGetTooManyRequests) Validate() error { + alias := (*TooManyRequests)(s) + if err := alias.Validate(); err != nil { + return err + } + return nil +} + +func (s *PayoutsList) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Type.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "type", + Error: err, + }) + } + if err := func() error { + if s.Items == nil { + return errors.New("nil is invalid value") + } + var failures []validate.FieldError + for i, elem := range s.Items { + if err := func() error { + if err := elem.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: fmt.Sprintf("[%d]", i), + Error: err, + }) + } + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "items", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s PayoutsListType) Validate() error { + switch s { + case "list": + return nil + default: + return errors.Errorf("invalid value: %v", s) + } +} + +func (s *PayoutsPayoutIDGetInternalServerError) Validate() error { + alias := (*TooManyRequests)(s) + if err := alias.Validate(); err != nil { + return err + } + return nil +} + +func (s *PayoutsPayoutIDGetTooManyRequests) Validate() error { + alias := (*TooManyRequests)(s) + if err := alias.Validate(); err != nil { + return err + } + return nil +} + +func (s *PayoutsPersonalData) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.ID.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "id", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s *PayoutsPostInternalServerError) Validate() error { + alias := (*TooManyRequests)(s) + if err := alias.Validate(); err != nil { + return err + } + return nil +} + +func (s *PayoutsPostTooManyRequests) Validate() error { + alias := (*TooManyRequests)(s) + if err := alias.Validate(); err != nil { + return err + } + return nil +} + +func (s *PayoutsSearchGetInternalServerError) Validate() error { + alias := (*TooManyRequests)(s) + if err := alias.Validate(); err != nil { + return err + } + return nil +} + +func (s *PayoutsSearchGetTooManyRequests) Validate() error { + alias := (*TooManyRequests)(s) + if err := alias.Validate(); err != nil { + return err + } + return nil +} + +func (s *PersonalData) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.ID.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "id", + Error: err, + }) + } + if err := func() error { + if err := s.Type.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "type", + Error: err, + }) + } + if err := func() error { + if err := s.Status.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "status", + Error: err, + }) + } + if err := func() error { + if value, ok := s.CancellationDetails.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "cancellation_details", + Error: err, + }) + } + if err := func() error { + if value, ok := s.Metadata.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "metadata", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s *PersonalDataCancellationDetails) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Party.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "party", + Error: err, + }) + } + if err := func() error { + if err := s.Reason.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "reason", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s PersonalDataCancellationDetailsParty) Validate() error { + switch s { + case "yoo_money": + return nil + default: + return errors.Errorf("invalid value: %v", s) + } +} + +func (s PersonalDataCancellationDetailsReason) Validate() error { + switch s { + case "expired_by_timeout": + return nil + default: + return errors.Errorf("invalid value: %v", s) + } +} + +func (s PersonalDataId) Validate() error { + alias := (string)(s) + if err := (validate.String{ + MinLength: 36, + MinLengthSet: true, + MaxLength: 50, + MaxLengthSet: true, + Email: false, + Hostname: false, + Regex: nil, + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(alias)); err != nil { + return errors.Wrap(err, "string") + } + return nil +} + +func (s *PersonalDataPersonalDataIDGetInternalServerError) Validate() error { + alias := (*TooManyRequests)(s) + if err := alias.Validate(); err != nil { + return err + } + return nil +} + +func (s *PersonalDataPersonalDataIDGetTooManyRequests) Validate() error { + alias := (*TooManyRequests)(s) + if err := alias.Validate(); err != nil { + return err + } + return nil +} + +func (s *PersonalDataPostInternalServerError) Validate() error { + alias := (*TooManyRequests)(s) + if err := alias.Validate(); err != nil { + return err + } + return nil +} + +func (s PersonalDataPostReq) Validate() error { + switch s.Type { + case SbpPayoutRecipientPersonalDataRequestPersonalDataPostReq: + if err := s.SbpPayoutRecipientPersonalDataRequest.Validate(); err != nil { + return err + } + return nil + case PayoutStatementRecipientPersonalDataRequestPersonalDataPostReq: + if err := s.PayoutStatementRecipientPersonalDataRequest.Validate(); err != nil { + return err + } + return nil + default: + return errors.Errorf("invalid type %q", s.Type) + } +} + +func (s *PersonalDataPostTooManyRequests) Validate() error { + alias := (*TooManyRequests)(s) + if err := alias.Validate(); err != nil { + return err + } + return nil +} + +func (s PersonalDataStatus) Validate() error { + switch s { + case "waiting_for_operation": + return nil + case "active": + return nil + case "canceled": + return nil + default: + return errors.Errorf("invalid value: %v", s) + } +} + +func (s PersonalDataType) Validate() error { + switch s { + case "payout_statement_recipient": + return nil + case "sbp_payout_recipient": + return nil + default: + return errors.Errorf("invalid value: %v", s) + } +} + +func (s *Receipt) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.ID.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "id", + Error: err, + }) + } + if err := func() error { + if err := s.Type.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "type", + Error: err, + }) + } + if err := func() error { + if err := s.Status.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "status", + Error: err, + }) + } + if err := func() error { + if s.Items == nil { + return errors.New("nil is invalid value") + } + var failures []validate.FieldError + for i, elem := range s.Items { + if err := func() error { + if err := elem.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: fmt.Sprintf("[%d]", i), + Error: err, + }) + } + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "items", + Error: err, + }) + } + if err := func() error { + if s.Settlements == nil { + return nil // optional + } + if err := (validate.Array{ + MinLength: 1, + MinLengthSet: true, + MaxLength: 0, + MaxLengthSet: false, + }).ValidateLength(len(s.Settlements)); err != nil { + return errors.Wrap(err, "array") + } + var failures []validate.FieldError + for i, elem := range s.Settlements { + if err := func() error { + if err := elem.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: fmt.Sprintf("[%d]", i), + Error: err, + }) + } + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "settlements", + Error: err, + }) + } + if err := func() error { + if value, ok := s.TaxSystemCode.Get(); ok { + if err := func() error { + if err := (validate.Int{ + MinSet: true, + Min: 1, + MaxSet: true, + Max: 6, + MinExclusive: false, + MaxExclusive: false, + MultipleOfSet: false, + MultipleOf: 0, + Pattern: nil, + }).Validate(int64(value)); err != nil { + return errors.Wrap(err, "int") + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "tax_system_code", + Error: err, + }) + } + if err := func() error { + if value, ok := s.Timezone.Get(); ok { + if err := func() error { + if err := (validate.Int{ + MinSet: true, + Min: 1, + MaxSet: true, + Max: 11, + MinExclusive: false, + MaxExclusive: false, + MultipleOfSet: false, + MultipleOf: 0, + Pattern: nil, + }).Validate(int64(value)); err != nil { + return errors.Wrap(err, "int") + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "timezone", + Error: err, + }) + } + if err := func() error { + var failures []validate.FieldError + for i, elem := range s.ReceiptIndustryDetails { + if err := func() error { + if err := elem.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: fmt.Sprintf("[%d]", i), + Error: err, + }) + } + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "receipt_industry_details", + Error: err, + }) + } + if err := func() error { + if value, ok := s.ReceiptOperationalDetails.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "receipt_operational_details", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s *ReceiptData) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if value, ok := s.Customer.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "customer", + Error: err, + }) + } + if err := func() error { + if s.Items == nil { + return errors.New("nil is invalid value") + } + var failures []validate.FieldError + for i, elem := range s.Items { + if err := func() error { + if err := elem.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: fmt.Sprintf("[%d]", i), + Error: err, + }) + } + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "items", + Error: err, + }) + } + if err := func() error { + if value, ok := s.TaxSystemCode.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "tax_system_code", + Error: err, + }) + } + if err := func() error { + if value, ok := s.Timezone.Get(); ok { + if err := func() error { + if err := (validate.Int{ + MinSet: true, + Min: 1, + MaxSet: true, + Max: 11, + MinExclusive: false, + MaxExclusive: false, + MultipleOfSet: false, + MultipleOf: 0, + Pattern: nil, + }).Validate(int64(value)); err != nil { + return errors.Wrap(err, "int") + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "timezone", + Error: err, + }) + } + if err := func() error { + var failures []validate.FieldError + for i, elem := range s.ReceiptIndustryDetails { + if err := func() error { + if err := elem.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: fmt.Sprintf("[%d]", i), + Error: err, + }) + } + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "receipt_industry_details", + Error: err, + }) + } + if err := func() error { + if value, ok := s.ReceiptOperationalDetails.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "receipt_operational_details", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s *ReceiptDataCustomer) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if value, ok := s.Inn.Get(); ok { + if err := func() error { + if err := (validate.String{ + MinLength: 0, + MinLengthSet: false, + MaxLength: 0, + MaxLengthSet: false, + Email: false, + Hostname: false, + Regex: regexMap["\\d{10}|\\d{12}"], + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(value)); err != nil { + return errors.Wrap(err, "string") + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "inn", + Error: err, + }) + } + if err := func() error { + if value, ok := s.Email.Get(); ok { + if err := func() error { + if err := (validate.String{ + MinLength: 0, + MinLengthSet: false, + MaxLength: 254, + MaxLengthSet: true, + Email: true, + Hostname: false, + Regex: nil, + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(value)); err != nil { + return errors.Wrap(err, "string") + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "email", + Error: err, + }) + } + if err := func() error { + if value, ok := s.Phone.Get(); ok { + if err := func() error { + if err := (validate.String{ + MinLength: 0, + MinLengthSet: false, + MaxLength: 0, + MaxLengthSet: false, + Email: false, + Hostname: false, + Regex: regexMap["[0-9]{4,15}"], + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(value)); err != nil { + return errors.Wrap(err, "string") + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "phone", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s *ReceiptDataItem) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Amount.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "amount", + Error: err, + }) + } + if err := func() error { + if err := s.VatCode.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "vat_code", + Error: err, + }) + } + if err := func() error { + if err := s.Quantity.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "quantity", + Error: err, + }) + } + if err := func() error { + if value, ok := s.Measure.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "measure", + Error: err, + }) + } + if err := func() error { + if value, ok := s.MarkQuantity.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "mark_quantity", + Error: err, + }) + } + if err := func() error { + if value, ok := s.PaymentSubject.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "payment_subject", + Error: err, + }) + } + if err := func() error { + if value, ok := s.PaymentMode.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "payment_mode", + Error: err, + }) + } + if err := func() error { + if value, ok := s.CustomsDeclarationNumber.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "customs_declaration_number", + Error: err, + }) + } + if err := func() error { + if value, ok := s.PlannedStatus.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "planned_status", + Error: err, + }) + } + if err := func() error { + if value, ok := s.MarkCodeInfo.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "mark_code_info", + Error: err, + }) + } + if err := func() error { + if value, ok := s.MarkMode.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "mark_mode", + Error: err, + }) + } + if err := func() error { + if err := s.PaymentSubjectIndustryDetails.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "payment_subject_industry_details", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s *ReceiptDataItemAmount) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Currency.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "currency", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s *ReceiptDataReceiptOperationalDetails) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := (validate.Int{ + MinSet: true, + Min: 0, + MaxSet: true, + Max: 255, + MinExclusive: false, + MaxExclusive: false, + MultipleOfSet: false, + MultipleOf: 0, + Pattern: nil, + }).Validate(int64(s.OperationID)); err != nil { + return errors.Wrap(err, "int") + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "operation_id", + Error: err, + }) + } + if err := func() error { + if err := (validate.String{ + MinLength: 0, + MinLengthSet: false, + MaxLength: 64, + MaxLengthSet: true, + Email: false, + Hostname: false, + Regex: nil, + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(s.Value)); err != nil { + return errors.Wrap(err, "string") + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "value", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s ReceiptId) Validate() error { + alias := (string)(s) + if err := (validate.String{ + MinLength: 39, + MinLengthSet: true, + MaxLength: 39, + MaxLengthSet: true, + Email: false, + Hostname: false, + Regex: nil, + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(alias)); err != nil { + return errors.Wrap(err, "string") + } + return nil +} + +func (s *ReceiptItem) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := (validate.Float{}).Validate(float64(s.Quantity)); err != nil { + return errors.Wrap(err, "float") + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "quantity", + Error: err, + }) + } + if err := func() error { + if err := s.Amount.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "amount", + Error: err, + }) + } + if err := func() error { + if err := (validate.Int{ + MinSet: true, + Min: 1, + MaxSet: true, + Max: 12, + MinExclusive: false, + MaxExclusive: false, + MultipleOfSet: false, + MultipleOf: 0, + Pattern: nil, + }).Validate(int64(s.VatCode)); err != nil { + return errors.Wrap(err, "int") + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "vat_code", + Error: err, + }) + } + if err := func() error { + if value, ok := s.PaymentSubject.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "payment_subject", + Error: err, + }) + } + if err := func() error { + if value, ok := s.PaymentMode.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "payment_mode", + Error: err, + }) + } + if err := func() error { + if value, ok := s.CustomsDeclarationNumber.Get(); ok { + if err := func() error { + if err := (validate.String{ + MinLength: 1, + MinLengthSet: true, + MaxLength: 32, + MaxLengthSet: true, + Email: false, + Hostname: false, + Regex: nil, + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(value)); err != nil { + return errors.Wrap(err, "string") + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "customs_declaration_number", + Error: err, + }) + } + if err := func() error { + if value, ok := s.Supplier.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "supplier", + Error: err, + }) + } + if err := func() error { + if value, ok := s.AgentType.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "agent_type", + Error: err, + }) + } + if err := func() error { + if value, ok := s.MarkCodeInfo.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "mark_code_info", + Error: err, + }) + } + if err := func() error { + if value, ok := s.Measure.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "measure", + Error: err, + }) + } + if err := func() error { + var failures []validate.FieldError + for i, elem := range s.PaymentSubjectIndustryDetails { + if err := func() error { + if err := elem.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: fmt.Sprintf("[%d]", i), + Error: err, + }) + } + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "payment_subject_industry_details", + Error: err, + }) + } + if err := func() error { + if value, ok := s.PlannedStatus.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "planned_status", + Error: err, + }) + } + if err := func() error { + if value, ok := s.MarkMode.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "mark_mode", + Error: err, + }) + } + if err := func() error { + if value, ok := s.MarkQuantity.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "mark_quantity", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s ReceiptItemAgentType) Validate() error { + switch s { + case "banking_payment_agent": + return nil + case "banking_payment_subagent": + return nil + case "payment_agent": + return nil + case "payment_subagent": + return nil + case "attorney": + return nil + case "commissioner": + return nil + case "agent": + return nil + default: + return errors.Errorf("invalid value: %v", s) + } +} + +func (s *ReceiptItemAmount) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Currency.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "currency", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s ReceiptItemCustomsDeclarationNumber) Validate() error { + alias := (string)(s) + if err := (validate.String{ + MinLength: 1, + MinLengthSet: true, + MaxLength: 32, + MaxLengthSet: true, + Email: false, + Hostname: false, + Regex: nil, + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(alias)); err != nil { + return errors.Wrap(err, "string") + } + return nil +} + +func (s ReceiptItemMeasure) Validate() error { + switch s { + case "piece": + return nil + case "gram": + return nil + case "kilogram": + return nil + case "ton": + return nil + case "centimeter": + return nil + case "decimeter": + return nil + case "meter": + return nil + case "square_centimeter": + return nil + case "square_decimeter": + return nil + case "square_meter": + return nil + case "milliliter": + return nil + case "liter": + return nil + case "cubic_meter": + return nil + case "kilowatt_hour": + return nil + case "gigacalorie": + return nil + case "day": + return nil + case "hour": + return nil + case "minute": + return nil + case "second": + return nil + case "kilobyte": + return nil + case "megabyte": + return nil + case "gigabyte": + return nil + case "terabyte": + return nil + case "another": + return nil + default: + return errors.Errorf("invalid value: %v", s) + } +} + +func (s ReceiptItemPaymentMode) Validate() error { + switch s { + case "full_prepayment": + return nil + case "partial_prepayment": + return nil + case "advance": + return nil + case "full_payment": + return nil + case "partial_payment": + return nil + case "credit": + return nil + case "credit_payment": + return nil + default: + return errors.Errorf("invalid value: %v", s) + } +} + +func (s ReceiptItemPaymentSubject) Validate() error { + switch s { + case "commodity": + return nil + case "excise": + return nil + case "job": + return nil + case "service": + return nil + case "gambling_bet": + return nil + case "gambling_prize": + return nil + case "lottery": + return nil + case "lottery_prize": + return nil + case "intellectual_activity": + return nil + case "payment": + return nil + case "agent_commission": + return nil + case "property_right": + return nil + case "non_operating_gain": + return nil + case "insurance_premium": + return nil + case "sales_tax": + return nil + case "resort_fee": + return nil + case "composite": + return nil + case "another": + return nil + case "fine": + return nil + case "tax": + return nil + case "lien": + return nil + case "cost": + return nil + case "pension_insurance_without_payouts": + return nil + case "pension_insurance_with_payouts": + return nil + case "health_insurance_without_payouts": + return nil + case "health_insurance_with_payouts": + return nil + case "health_insurance": + return nil + case "casino": + return nil + case "agent_withdrawals": + return nil + case "non_marked_excise": + return nil + case "marked_excise": + return nil + case "marked": + return nil + case "non_marked": + return nil + default: + return errors.Errorf("invalid value: %v", s) + } +} + +func (s ReceiptItemPaymentSubjectIndustryDetails) Validate() error { + alias := ([]IndustryDetails)(s) + var failures []validate.FieldError + for i, elem := range alias { + if err := func() error { + if err := elem.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: fmt.Sprintf("[%d]", i), + Error: err, + }) + } + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s ReceiptItemPlannedStatus) Validate() error { + alias := (int32)(s) + if err := (validate.Int{ + MinSet: true, + Min: 1, + MaxSet: true, + Max: 6, + MinExclusive: false, + MaxExclusive: false, + MultipleOfSet: false, + MultipleOf: 0, + Pattern: nil, + }).Validate(int64(alias)); err != nil { + return errors.Wrap(err, "int") + } + return nil +} + +func (s ReceiptItemQuantity) Validate() error { + alias := (float64)(s) + if err := (validate.Float{}).Validate(float64(alias)); err != nil { + return errors.Wrap(err, "float") + } + return nil +} + +func (s *ReceiptItemSupplierWithInn) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if value, ok := s.Phone.Get(); ok { + if err := func() error { + if err := (validate.String{ + MinLength: 0, + MinLengthSet: false, + MaxLength: 0, + MaxLengthSet: false, + Email: false, + Hostname: false, + Regex: regexMap["[0-9]{4,15}"], + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(value)); err != nil { + return errors.Wrap(err, "string") + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "phone", + Error: err, + }) + } + if err := func() error { + if value, ok := s.Inn.Get(); ok { + if err := func() error { + if err := (validate.String{ + MinLength: 0, + MinLengthSet: false, + MaxLength: 0, + MaxLengthSet: false, + Email: false, + Hostname: false, + Regex: regexMap["\\d{10}|\\d{12}"], + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(value)); err != nil { + return errors.Wrap(err, "string") + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "inn", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s ReceiptItemVatCode) Validate() error { + alias := (int32)(s) + if err := (validate.Int{ + MinSet: true, + Min: 1, + MaxSet: true, + Max: 12, + MinExclusive: false, + MaxExclusive: false, + MultipleOfSet: false, + MultipleOf: 0, + Pattern: nil, + }).Validate(int64(alias)); err != nil { + return errors.Wrap(err, "int") + } + return nil +} + +func (s *ReceiptReceiptOperationalDetails) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := (validate.Int{ + MinSet: true, + Min: 0, + MaxSet: true, + Max: 255, + MinExclusive: false, + MaxExclusive: false, + MultipleOfSet: false, + MultipleOf: 0, + Pattern: nil, + }).Validate(int64(s.OperationID)); err != nil { + return errors.Wrap(err, "int") + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "operation_id", + Error: err, + }) + } + if err := func() error { + if err := (validate.String{ + MinLength: 0, + MinLengthSet: false, + MaxLength: 64, + MaxLengthSet: true, + Email: false, + Hostname: false, + Regex: nil, + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(s.Value)); err != nil { + return errors.Wrap(err, "string") + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "value", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s ReceiptRegistrationStatus) Validate() error { + switch s { + case "pending": + return nil + case "succeeded": + return nil + case "canceled": + return nil + default: + return errors.Errorf("invalid value: %v", s) + } +} + +func (s ReceiptStatus) Validate() error { + switch s { + case "pending": + return nil + case "succeeded": + return nil + case "canceled": + return nil + default: + return errors.Errorf("invalid value: %v", s) + } +} + +func (s ReceiptType) Validate() error { + switch s { + case "payment": + return nil + case "refund": + return nil + default: + return errors.Errorf("invalid value: %v", s) + } +} + +func (s *ReceiptsGetOK) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Type.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "type", + Error: err, + }) + } + if err := func() error { + if s.Items == nil { + return errors.New("nil is invalid value") + } + var failures []validate.FieldError + for i, elem := range s.Items { + if err := func() error { + if err := elem.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: fmt.Sprintf("[%d]", i), + Error: err, + }) + } + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "items", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s ReceiptsGetOKType) Validate() error { + switch s { + case "list": + return nil + default: + return errors.Errorf("invalid value: %v", s) + } +} + +func (s *ReceiverBankAccount) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Type.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "type", + Error: err, + }) + } + if err := func() error { + if err := (validate.String{ + MinLength: 0, + MinLengthSet: false, + MaxLength: 20, + MaxLengthSet: true, + Email: false, + Hostname: false, + Regex: regexMap["\\d{20}"], + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(s.AccountNumber)); err != nil { + return errors.Wrap(err, "string") + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "account_number", + Error: err, + }) + } + if err := func() error { + if err := (validate.String{ + MinLength: 0, + MinLengthSet: false, + MaxLength: 9, + MaxLengthSet: true, + Email: false, + Hostname: false, + Regex: regexMap["\\d{9}"], + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(s.Bic)); err != nil { + return errors.Wrap(err, "string") + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "bic", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s *ReceiverDigitalWallet) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Type.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "type", + Error: err, + }) + } + if err := func() error { + if err := (validate.String{ + MinLength: 0, + MinLengthSet: false, + MaxLength: 20, + MaxLengthSet: true, + Email: false, + Hostname: false, + Regex: nil, + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(s.AccountNumber)); err != nil { + return errors.Wrap(err, "string") + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "account_number", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s *ReceiverMobileBalance) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Type.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "type", + Error: err, + }) + } + if err := func() error { + if err := (validate.String{ + MinLength: 0, + MinLengthSet: false, + MaxLength: 0, + MaxLengthSet: false, + Email: false, + Hostname: false, + Regex: regexMap["[0-9]{4,15}"], + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(s.Phone)); err != nil { + return errors.Wrap(err, "string") + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "phone", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s ReceiverType) Validate() error { + switch s { + case "mobile_balance": + return nil + case "digital_wallet": + return nil + case "bank_account": + return nil + default: + return errors.Errorf("invalid value: %v", s) + } +} + +func (s *Refund) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.ID.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "id", + Error: err, + }) + } + if err := func() error { + if err := s.PaymentID.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "payment_id", + Error: err, + }) + } + if err := func() error { + if err := s.Status.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "status", + Error: err, + }) + } + if err := func() error { + if value, ok := s.CancellationDetails.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "cancellation_details", + Error: err, + }) + } + if err := func() error { + if value, ok := s.ReceiptRegistration.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "receipt_registration", + Error: err, + }) + } + if err := func() error { + if err := s.Amount.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "amount", + Error: err, + }) + } + if err := func() error { + if value, ok := s.Description.Get(); ok { + if err := func() error { + if err := (validate.String{ + MinLength: 0, + MinLengthSet: false, + MaxLength: 250, + MaxLengthSet: true, + Email: false, + Hostname: false, + Regex: nil, + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(value)); err != nil { + return errors.Wrap(err, "string") + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "description", + Error: err, + }) + } + if err := func() error { + var failures []validate.FieldError + for i, elem := range s.Sources { + if err := func() error { + if err := elem.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: fmt.Sprintf("[%d]", i), + Error: err, + }) + } + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "sources", + Error: err, + }) + } + if err := func() error { + if value, ok := s.Deal.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "deal", + Error: err, + }) + } + if err := func() error { + if value, ok := s.RefundMethod.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "refund_method", + Error: err, + }) + } + if err := func() error { + if value, ok := s.Metadata.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "metadata", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s *RefundAmount) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Currency.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "currency", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s *RefundCancellationDetails) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Party.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "party", + Error: err, + }) + } + if err := func() error { + if err := s.Reason.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "reason", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s RefundCancellationDetailsParty) Validate() error { + switch s { + case "yoo_money": + return nil + case "refund_network": + return nil + default: + return errors.Errorf("invalid value: %v", s) + } +} + +func (s RefundCancellationDetailsReason) Validate() error { + switch s { + case "yoo_money_account_closed": + return nil + case "insufficient_funds": + return nil + case "general_decline": + return nil + case "rejected_by_payee": + return nil + case "rejected_by_timeout": + return nil + case "payment_basket_id_not_found": + return nil + case "payment_article_number_not_found": + return nil + case "payment_tru_code_not_found": + return nil + case "too_many_refunding_articles": + return nil + case "some_articles_already_refunded": + return nil + default: + return errors.Errorf("invalid value: %v", s) + } +} + +func (s *RefundDealData) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.RefundSettlements.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "refund_settlements", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s *RefundDealInfo) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := (validate.String{ + MinLength: 36, + MinLengthSet: true, + MaxLength: 50, + MaxLengthSet: true, + Email: false, + Hostname: false, + Regex: nil, + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(s.ID)); err != nil { + return errors.Wrap(err, "string") + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "id", + Error: err, + }) + } + if err := func() error { + if err := s.RefundSettlements.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "refund_settlements", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s RefundId) Validate() error { + alias := (string)(s) + if err := (validate.String{ + MinLength: 36, + MinLengthSet: true, + MaxLength: 36, + MaxLengthSet: true, + Email: false, + Hostname: false, + Regex: nil, + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(alias)); err != nil { + return errors.Wrap(err, "string") + } + return nil +} + +func (s *RefundList) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Type.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "type", + Error: err, + }) + } + if err := func() error { + if s.Items == nil { + return errors.New("nil is invalid value") + } + var failures []validate.FieldError + for i, elem := range s.Items { + if err := func() error { + if err := elem.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: fmt.Sprintf("[%d]", i), + Error: err, + }) + } + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "items", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s RefundListType) Validate() error { + switch s { + case "list": + return nil + default: + return errors.Errorf("invalid value: %v", s) + } +} + +func (s RefundMethodType) Validate() error { + switch s { + case "sbp": + return nil + case "electronic_certificate": + return nil + default: + return errors.Errorf("invalid value: %v", s) + } +} + +func (s RefundReceiptRegistration) Validate() error { + switch s { + case "pending": + return nil + case "succeeded": + return nil + case "canceled": + return nil + default: + return errors.Errorf("invalid value: %v", s) + } +} + +func (s RefundRefundMethod) Validate() error { + switch s.Type { + case SbpRefundMethodRefundRefundMethod: + if err := s.SbpRefundMethod.Validate(); err != nil { + return err + } + return nil + case ElectronicCertificateRefundMethodRefundRefundMethod: + if err := s.ElectronicCertificateRefundMethod.Validate(); err != nil { + return err + } + return nil + default: + return errors.Errorf("invalid type %q", s.Type) + } +} + +func (s *RefundSourcesData) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Amount.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "amount", + Error: err, + }) + } + if err := func() error { + if value, ok := s.PlatformFeeAmount.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "platform_fee_amount", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s *RefundSourcesDataAmount) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Currency.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "currency", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s *RefundSourcesDataPlatformFeeAmount) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Currency.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "currency", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s RefundStatus) Validate() error { + switch s { + case "pending": + return nil + case "succeeded": + return nil + case "canceled": + return nil + default: + return errors.Errorf("invalid value: %v", s) + } +} + +func (s *RefundsPostReq) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.PaymentID.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "payment_id", + Error: err, + }) + } + if err := func() error { + if err := s.Amount.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "amount", + Error: err, + }) + } + if err := func() error { + if value, ok := s.Description.Get(); ok { + if err := func() error { + if err := (validate.String{ + MinLength: 0, + MinLengthSet: false, + MaxLength: 250, + MaxLengthSet: true, + Email: false, + Hostname: false, + Regex: nil, + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(value)); err != nil { + return errors.Wrap(err, "string") + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "description", + Error: err, + }) + } + if err := func() error { + if value, ok := s.Receipt.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "receipt", + Error: err, + }) + } + if err := func() error { + var failures []validate.FieldError + for i, elem := range s.Sources { + if err := func() error { + if err := elem.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: fmt.Sprintf("[%d]", i), + Error: err, + }) + } + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "sources", + Error: err, + }) + } + if err := func() error { + if value, ok := s.Deal.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "deal", + Error: err, + }) + } + if err := func() error { + if value, ok := s.RefundMethodData.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "refund_method_data", + Error: err, + }) + } + if err := func() error { + if value, ok := s.Metadata.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "metadata", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s *RefundsPostReqAmount) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Currency.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "currency", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s RefundsPostReqRefundMethodData) Validate() error { + switch s.Type { + case ElectronicCertificateRefundMethodDataRefundsPostReqRefundMethodData: + if err := s.ElectronicCertificateRefundMethodData.Validate(); err != nil { + return err + } + return nil + default: + return errors.Errorf("invalid type %q", s.Type) + } +} + +func (s ReturnUrl) Validate() error { + alias := (string)(s) + if err := (validate.String{ + MinLength: 0, + MinLengthSet: false, + MaxLength: 2048, + MaxLengthSet: true, + Email: false, + Hostname: false, + Regex: nil, + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(alias)); err != nil { + return errors.Wrap(err, "string") + } + return nil +} + +func (s *SafeDeal) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Type.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "type", + Error: err, + }) + } + if err := func() error { + if err := s.ID.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "id", + Error: err, + }) + } + if err := func() error { + if err := s.FeeMoment.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "fee_moment", + Error: err, + }) + } + if err := func() error { + if value, ok := s.Description.Get(); ok { + if err := func() error { + if err := (validate.String{ + MinLength: 0, + MinLengthSet: false, + MaxLength: 128, + MaxLengthSet: true, + Email: false, + Hostname: false, + Regex: nil, + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(value)); err != nil { + return errors.Wrap(err, "string") + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "description", + Error: err, + }) + } + if err := func() error { + if err := s.Balance.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "balance", + Error: err, + }) + } + if err := func() error { + if err := s.PayoutBalance.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "payout_balance", + Error: err, + }) + } + if err := func() error { + if err := s.Status.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "status", + Error: err, + }) + } + if err := func() error { + if value, ok := s.Metadata.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "metadata", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s *SafeDealBalance) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Currency.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "currency", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s *SafeDealPayoutBalance) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Currency.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "currency", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s *SafeDealRequest) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Type.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "type", + Error: err, + }) + } + if err := func() error { + if err := s.FeeMoment.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "fee_moment", + Error: err, + }) + } + if err := func() error { + if value, ok := s.Metadata.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "metadata", + Error: err, + }) + } + if err := func() error { + if value, ok := s.Description.Get(); ok { + if err := func() error { + if err := (validate.String{ + MinLength: 0, + MinLengthSet: false, + MaxLength: 128, + MaxLengthSet: true, + Email: false, + Hostname: false, + Regex: nil, + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(value)); err != nil { + return errors.Wrap(err, "string") + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "description", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s *SavePaymentMethodBankCard) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Type.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "type", + Error: err, + }) + } + if err := func() error { + if err := s.Status.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "status", + Error: err, + }) + } + if err := func() error { + if value, ok := s.Confirmation.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "confirmation", + Error: err, + }) + } + if err := func() error { + if value, ok := s.Card.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "card", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s SavePaymentMethodBankCardConfirmation) Validate() error { + switch s.Type { + case PaymentMethodsConfirmationRedirectSavePaymentMethodBankCardConfirmation: + if err := s.PaymentMethodsConfirmationRedirect.Validate(); err != nil { + return err + } + return nil + default: + return errors.Errorf("invalid type %q", s.Type) + } +} + +func (s *SavePaymentMethodDataBankCard) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Type.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "type", + Error: err, + }) + } + if err := func() error { + if value, ok := s.Confirmation.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "confirmation", + Error: err, + }) + } + if err := func() error { + if value, ok := s.Card.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "card", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s SavePaymentMethodDataBankCardType) Validate() error { + switch s { + case "bank_card": + return nil + default: + return errors.Errorf("invalid value: %v", s) + } +} + +func (s SavePaymentMethodType) Validate() error { + switch s { + case "bank_card": + return nil + default: + return errors.Errorf("invalid value: %v", s) + } +} + +func (s SbpBankBic) Validate() error { + alias := (string)(s) + if err := (validate.String{ + MinLength: 0, + MinLengthSet: false, + MaxLength: 9, + MaxLengthSet: true, + Email: false, + Hostname: false, + Regex: regexMap["\\d{9}"], + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(alias)); err != nil { + return errors.Wrap(err, "string") + } + return nil +} + +func (s SbpBankId) Validate() error { + alias := (string)(s) + if err := (validate.String{ + MinLength: 0, + MinLengthSet: false, + MaxLength: 12, + MaxLengthSet: true, + Email: false, + Hostname: false, + Regex: regexMap["[a-zA-Z0-9]{12}"], + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(alias)); err != nil { + return errors.Wrap(err, "string") + } + return nil +} + +func (s *SbpBanksGetInternalServerError) Validate() error { + alias := (*TooManyRequests)(s) + if err := alias.Validate(); err != nil { + return err + } + return nil +} + +func (s *SbpBanksGetOK) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Type.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "type", + Error: err, + }) + } + if err := func() error { + if s.Items == nil { + return errors.New("nil is invalid value") + } + var failures []validate.FieldError + for i, elem := range s.Items { + if err := func() error { + if err := elem.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: fmt.Sprintf("[%d]", i), + Error: err, + }) + } + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "items", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s SbpBanksGetOKType) Validate() error { + switch s { + case "list": + return nil + default: + return errors.Errorf("invalid value: %v", s) + } +} + +func (s *SbpBanksGetTooManyRequests) Validate() error { + alias := (*TooManyRequests)(s) + if err := alias.Validate(); err != nil { + return err + } + return nil +} + +func (s *SbpParticipantBank) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.BankID.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "bank_id", + Error: err, + }) + } + if err := func() error { + if err := (validate.String{ + MinLength: 0, + MinLengthSet: false, + MaxLength: 128, + MaxLengthSet: true, + Email: false, + Hostname: false, + Regex: nil, + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(s.Name)); err != nil { + return errors.Wrap(err, "string") + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "name", + Error: err, + }) + } + if err := func() error { + if err := s.Bic.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "bic", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s *SbpPayerBankDetails) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.BankID.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "bank_id", + Error: err, + }) + } + if err := func() error { + if err := (validate.String{ + MinLength: 0, + MinLengthSet: false, + MaxLength: 9, + MaxLengthSet: true, + Email: false, + Hostname: false, + Regex: regexMap["\\d{9}"], + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(s.Bic)); err != nil { + return errors.Wrap(err, "string") + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "bic", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s *SbpPayoutRecipientPersonalDataRequest) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Type.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "type", + Error: err, + }) + } + if err := func() error { + if value, ok := s.Metadata.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "metadata", + Error: err, + }) + } + if err := func() error { + if err := s.LastName.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "last_name", + Error: err, + }) + } + if err := func() error { + if err := s.FirstName.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "first_name", + Error: err, + }) + } + if err := func() error { + if value, ok := s.MiddleName.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "middle_name", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s *SbpRefundMethod) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Type.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "type", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s SelfEmployedId) Validate() error { + alias := (string)(s) + if err := (validate.String{ + MinLength: 36, + MinLengthSet: true, + MaxLength: 50, + MaxLengthSet: true, + Email: false, + Hostname: false, + Regex: nil, + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(alias)); err != nil { + return errors.Wrap(err, "string") + } + return nil +} + +func (s *Settlement) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Type.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "type", + Error: err, + }) + } + if err := func() error { + if err := s.Amount.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "amount", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s *SettlementAmount) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Currency.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "currency", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s SettlementItemType) Validate() error { + switch s { + case "payout": + return nil + default: + return errors.Errorf("invalid value: %v", s) + } +} + +func (s SettlementPaymentArray) Validate() error { + alias := ([]SettlementPaymentArrayItem)(s) + if alias == nil { + return errors.New("nil is invalid value") + } + var failures []validate.FieldError + for i, elem := range alias { + if err := func() error { + if err := elem.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: fmt.Sprintf("[%d]", i), + Error: err, + }) + } + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s SettlementPaymentArrayItem) Validate() error { + switch s.Type { + case SettlementPayoutPaymentSettlementPaymentArrayItem: + if err := s.SettlementPayoutPayment.Validate(); err != nil { + return err + } + return nil + default: + return errors.Errorf("invalid type %q", s.Type) + } +} + +func (s *SettlementPayoutPayment) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Type.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "type", + Error: err, + }) + } + if err := func() error { + if err := s.Amount.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "amount", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s *SettlementPayoutPaymentAmount) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Currency.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "currency", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s *SettlementPayoutRefund) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Type.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "type", + Error: err, + }) + } + if err := func() error { + if err := s.Amount.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "amount", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s *SettlementPayoutRefundAmount) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Currency.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "currency", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s SettlementRefundArray) Validate() error { + alias := ([]SettlementRefundArrayItem)(s) + if alias == nil { + return errors.New("nil is invalid value") + } + var failures []validate.FieldError + for i, elem := range alias { + if err := func() error { + if err := elem.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: fmt.Sprintf("[%d]", i), + Error: err, + }) + } + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s SettlementRefundArrayItem) Validate() error { + switch s.Type { + case SettlementPayoutRefundSettlementRefundArrayItem: + if err := s.SettlementPayoutRefund.Validate(); err != nil { + return err + } + return nil + default: + return errors.Errorf("invalid type %q", s.Type) + } +} + +func (s SettlementType) Validate() error { + switch s { + case "cashless": + return nil + case "prepayment": + return nil + case "postpayment": + return nil + case "consideration": + return nil + default: + return errors.Errorf("invalid value: %v", s) + } +} + +func (s TaxSystemCode) Validate() error { + alias := (int32)(s) + if err := (validate.Int{ + MinSet: true, + Min: 1, + MaxSet: true, + Max: 6, + MinExclusive: false, + MaxExclusive: false, + MultipleOfSet: false, + MultipleOf: 0, + Pattern: nil, + }).Validate(int64(alias)); err != nil { + return errors.Wrap(err, "int") + } + return nil +} + +func (s *TooManyRequests) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if value, ok := s.Type.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "type", + Error: err, + }) + } + if err := func() error { + if value, ok := s.Code.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "code", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s TooManyRequestsCode) Validate() error { + switch s { + case "too_many_requests": + return nil + default: + return errors.Errorf("invalid value: %v", s) + } +} + +func (s TooManyRequestsType) Validate() error { + switch s { + case "error": + return nil + default: + return errors.Errorf("invalid value: %v", s) + } +} + +func (s *Transfer) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Amount.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "amount", + Error: err, + }) + } + if err := func() error { + if err := s.Status.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "status", + Error: err, + }) + } + if err := func() error { + if value, ok := s.PlatformFeeAmount.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "platform_fee_amount", + Error: err, + }) + } + if err := func() error { + if value, ok := s.Description.Get(); ok { + if err := func() error { + if err := (validate.String{ + MinLength: 0, + MinLengthSet: false, + MaxLength: 128, + MaxLengthSet: true, + Email: false, + Hostname: false, + Regex: nil, + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(value)); err != nil { + return errors.Wrap(err, "string") + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "description", + Error: err, + }) + } + if err := func() error { + if value, ok := s.Metadata.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "metadata", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s *TransferAmount) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Currency.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "currency", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s *TransferData) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Amount.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "amount", + Error: err, + }) + } + if err := func() error { + if value, ok := s.PlatformFeeAmount.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "platform_fee_amount", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s *TransferDataAmount) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Currency.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "currency", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s *TransferDataPayment) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Amount.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "amount", + Error: err, + }) + } + if err := func() error { + if value, ok := s.PlatformFeeAmount.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "platform_fee_amount", + Error: err, + }) + } + if err := func() error { + if value, ok := s.Description.Get(); ok { + if err := func() error { + if err := (validate.String{ + MinLength: 0, + MinLengthSet: false, + MaxLength: 128, + MaxLengthSet: true, + Email: false, + Hostname: false, + Regex: nil, + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(value)); err != nil { + return errors.Wrap(err, "string") + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "description", + Error: err, + }) + } + if err := func() error { + if value, ok := s.Metadata.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "metadata", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s *TransferDataPaymentAmount) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Currency.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "currency", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s *TransferDataPaymentPlatformFeeAmount) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Currency.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "currency", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s *TransferDataPlatformFeeAmount) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Currency.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "currency", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s *TransferPlatformFeeAmount) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Currency.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "currency", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s TransferStatus) Validate() error { + switch s { + case "pending": + return nil + case "waiting_for_capture": + return nil + case "succeeded": + return nil + case "canceled": + return nil + default: + return errors.Errorf("invalid value: %v", s) + } +} + +func (s *Webhook) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Event.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "event", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s WebhookEvent) Validate() error { + switch s { + case "payment.waiting_for_capture": + return nil + case "payment.succeeded": + return nil + case "payment.canceled": + return nil + case "refund.succeeded": + return nil + default: + return errors.Errorf("invalid value: %v", s) + } +} + +func (s *WebhookList) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Type.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "type", + Error: err, + }) + } + if err := func() error { + if s.Items == nil { + return errors.New("nil is invalid value") + } + var failures []validate.FieldError + for i, elem := range s.Items { + if err := func() error { + if err := elem.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: fmt.Sprintf("[%d]", i), + Error: err, + }) + } + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "items", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s WebhookListType) Validate() error { + switch s { + case "list": + return nil + default: + return errors.Errorf("invalid value: %v", s) + } +} + +func (s *WebhooksPostReq) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Event.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "event", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s WebhooksPostReqEvent) Validate() error { + switch s { + case "payment.waiting_for_capture": + return nil + case "payment.succeeded": + return nil + case "payment.canceled": + return nil + case "refund.succeeded": + return nil + default: + return errors.Errorf("invalid value: %v", s) + } +} + +func (s YooMoneyAccountNumber) Validate() error { + alias := (string)(s) + if err := (validate.String{ + MinLength: 11, + MinLengthSet: true, + MaxLength: 33, + MaxLengthSet: true, + Email: false, + Hostname: false, + Regex: nil, + MinNumeric: 0, + MinNumericSet: false, + MaxNumeric: 0, + MaxNumericSet: false, + }).Validate(string(alias)); err != nil { + return errors.Wrap(err, "string") + } + return nil +} diff --git a/internal/service/yookassa/ogen.yml b/internal/service/yookassa/ogen.yml new file mode 100644 index 0000000..8727e17 --- /dev/null +++ b/internal/service/yookassa/ogen.yml @@ -0,0 +1,2 @@ +generator: + ignore_not_implemented: ["all"] \ No newline at end of file diff --git a/internal/service/yookassa/package.go b/internal/service/yookassa/package.go new file mode 100644 index 0000000..5c0c1d2 --- /dev/null +++ b/internal/service/yookassa/package.go @@ -0,0 +1,3 @@ +package yookassa + +//go:generate ogen --target ./gen -package gen --clean yookassa-openapi-specification.yaml diff --git a/internal/service/yookassa/yookassa-openapi-specification.yaml b/internal/service/yookassa/yookassa-openapi-specification.yaml new file mode 100644 index 0000000..caab56e --- /dev/null +++ b/internal/service/yookassa/yookassa-openapi-specification.yaml @@ -0,0 +1,5491 @@ +openapi: "3.0.2" +info: + version: "1.0.0" + title: "YooMoney API Reference" + description: "The YooMoney API Reference describes all the YooMoney API methods. The API allows you to process online payments via different methods and make payouts. More about integration via the YooMoney API: Integration guide: https://yookassa.ru/developers: description of payment solutions based on the YooMoney API as well as links to detailed instructions.; Interaction format: https://yookassa.ru/developers/using-api/interaction-format: description of request formats, requirements for request authentication and idempotency key, specifics of response processing.; OpenAPI specification: https://yookassa.ru/developers/using-api/openapi-specification: information about the YooMoney API specification, link for downloading the specification in the YAML format.; Ready-made SDK: https://yookassa.ru/developers/using-api/using-sdks: links to ready-made solutions for PHP, Python, and other programming languages.; Incoming notifications: https://yookassa.ru/developers/using-api/webhooks: description of the operating procedure for notifications (webhook, callback) sent to track object statuses. YooMoney API changelog: https://yookassa.ru/developers/using-api/changelog" +servers: +- url: "https://api.yookassa.ru/v3" +security: +- BasicAuth: [] +- OAuth2: [] +tags: +- name: "Payments" + description: "The API allows you to create, capture, and cancel payments, as well as receive payment information. How to process a payment: https://yookassa.ru/developers/payment-acceptance/getting-started/quick-start" +- name: "Способы оплаты" + description: "Только для тех, кто использует привязку на нулевую сумму: https://yookassa.ru/developers/payment-acceptance/scenario-extensions/recurring-payments/save-payment-method/save-without-payment для сохранения банковских карт. Способ оплаты — данные платежного средства пользователя. Например, данные банковской карты. С помощью API вы можете создать способ оплаты — сохранить платежные данные в ЮKassa с привязкой к вашему магазину. Также по API вы можете получить актуальную информацию о созданном способе оплаты." +- name: "Счета" + description: "Счет — это страница ЮKassa, на которой пользователь может ознакомиться с деталями заказа и внести оплату. При переходе к оплате ЮKassa автоматически создаст платеж: https://yookassa.ru/developers/api#payment_object и перенаправит пользователя на страницу с платежной формой. Счет считается оплаченным, если по нему есть один успешный платеж. С помощью API вы можете создать счет и получить о нём актуальную информацию. Подробнее о выставлении счетов по API: https://yookassa.ru/developers/payment-acceptance/scenario-extensions/invoices/basics" +- name: "Возвраты" + description: "С помощью API можно возвращать платежи — полностью или частично. Порядок возврата зависит от способа оплаты (payment_method) исходного платежа. При оплате банковской картой деньги возвращаются на карту, которая была использована для проведения платежа. Как проводить возвраты: https://yookassa.ru/developers/payment-acceptance/after-the-payment/refunds Часть способов оплаты (например, наличные) не поддерживают возвраты. Какие платежи можно вернуть: https://yookassa.ru/developers/payment-acceptance/getting-started/payment-methods#all" +- name: "Чеки" + description: "Для тех, кто использует решение ЮKassa для 54-ФЗ: https://yookassa.ru/developers/payment-acceptance/receipts/54fz/basics С помощью API можно получать информацию о чеках, для которых вы отправили данные через ЮKassa." +- name: "Выплаты" + description: "Payout is a sum of money that you transfer to an individual. Using the API, you can make a payout and get the information about its current status. Payouts are used in the following YooMoney payment solutions: Payouts: https://yookassa.ru/developers/payouts/overview: you, as a company, transfer money to individuals (for example, send cashback to users).; Safe Deal: https://yookassa.ru/developers/solutions-for-platforms/safe-deal/basics: your platform transfers payment from one individual to another as part of a created deal." +- name: "Участники СБП" + description: "Только для тех, кто делает обычные выплаты, не в рамках Безопасной сделки. Участники СБП — это банки и платежные сервисы, подключенные к СБП (Система быстрых платежей ЦБ РФ). С помощью API ЮKassa вы можете получить актуальный список всех участников СБП. Информация об участниках СБП нужна для проведения выплат через СБП. Как делать выплаты через СБП: https://yookassa.ru/developers/payouts/making-payouts/sbp" +- name: "Персональные данные" + description: "Только для тех, кто делает обычные выплаты, не в рамках Безопасной сделки. Персональные данные пользователя — это фамилия, имя, отчество пользователя и другие данные о нём. С помощью API вы можете создать персональные данные в ЮKassa (сохранить данные о пользователе) и получить актуальную информацию о статусе персональных данных. Персональные данные пользователя нужны в этих сценариях: выплаты с проверкой получателя: https://yookassa.ru/developers/payouts/scenario-extensions/recipient-check (только для выплат через СБП); выплаты с передачей данных получателя для выписок из реестра: https://yookassa.ru/developers/payouts/scenario-extensions/recipient-data-send." +- name: "Сделки" + description: "Только для тех, кто использует Безопасную сделку: https://yookassa.ru/developers/solutions-for-platforms/safe-deal/basics. Безопасная сделка — это решение ЮKassa, с помощью которого можно принять оплату от одного участника сделки и перевести ее другому участнику в момент выполнения условий сделки. С помощью API вы можете создать сделку и получить о ней актуальную информацию." +- name: "Webhooks" + description: "Аутентификация только по OAuth-токену. Доступно в рамках API для партнеров: https://yookassa.ru/developers/solutions-for-platforms/partners-api/basics Webhook — это механизм автоматического оповещения вашей системы о событиях, которые происходят с созданными объектами. Например, ЮKassa может сообщить, когда объект платежа: https://yookassa.ru/developers/api#payment_object, созданный в вашем приложении, перейдет в статус waiting_for_capture. С помощью API вы можете настроить webhook (создать, удалить, просмотреть список созданных) для переданного OAuth-токена. Подробнее об уведомлениях API ЮKassa: https://yookassa.ru/developers/using-api/webhooks" +- name: "Настройки" + description: "Только для тех, кто использует Сплитование платежей, Партнерскую программу или Выплаты. В ЮKassa у каждого магазина и шлюза есть определенные настройки, которые влияют на интеграцию и проведение платежей и выплат. Настройки доступны в личном кабинете: https://yookassa.ru/my/, но в некоторых платежных решениях ЮKassa важно получать настройки по API. Настройки необходимо узнавать по API в следующих платежных решениях ЮKassa: * Сплитование платежей: https://yookassa.ru/developers/solutions-for-platforms/split-payments/basics — вы можете узнать статус магазина продавца, подключенного к вашей площадке. * Партнерская программа: https://yookassa.ru/developers/solutions-for-platforms/partners-api/basics — вы можете получить справочную информацию о магазине, от имени которого вы выполняете операции, например можете узнать, нужно ли передавать данные для отправки чека. * Выплаты: https://yookassa.ru/developers/payouts/overview — вы можете узнать баланс выплат вашего шлюза." +paths: + /payments: + post: + summary: "Create a payment" + description: "To accept a payment, you need to create a payment object: https://yookassa.ru/developers/api#payment_object, Payment. It contains all the necessary payment information (amount, currency, and status). Payments have a linear life cycle, going from one status to the next sequentially." + tags: + - "Payments" + parameters: + - $ref: "#/components/parameters/IdempotenceKey" + requestBody: + required: true + content: + application/json: + schema: + type: "object" + title: "CreatePaymentRequest" + properties: + amount: + allOf: + - $ref: "#/components/schemas/MonetaryAmount" + - description: "Payment amount. Sometimes YooMoney's partners charge additional commission from the users that is not included in this amount. The amount is specified with the currency code. It should match the currency of your subaccount (recipient.gateway_id) if you separate payment flows, or the currency of the account (shopId in the Merchant Profile) if you don't." + description: + allOf: + - $ref: "#/components/schemas/Description" + - description: "Описание транзакции (не более 128 символов), которое вы увидите в личном кабинете ЮKassa, а пользователь — при оплате. Например: «Оплата заказа № 72 для user@yoomoney.ru»." + receipt: + $ref: "#/components/schemas/ReceiptData" + recipient: + $ref: "#/components/schemas/Recipient" + payment_token: + $ref: "#/components/schemas/PaymentToken" + payment_method_id: + $ref: "#/components/schemas/PaymentMethodId" + payment_method_data: + oneOf: + - $ref: "#/components/schemas/PaymentMethodDataBankCard" + - $ref: "#/components/schemas/PaymentMethodDataCash" + - $ref: "#/components/schemas/PaymentMethodDataSberbank" + - $ref: "#/components/schemas/PaymentMethodDataTinkoffBank" + - $ref: "#/components/schemas/PaymentMethodDataYooMoney" + - $ref: "#/components/schemas/PaymentMethodDataMobileBalance" + - $ref: "#/components/schemas/PaymentMethodDataB2bSberbank" + - $ref: "#/components/schemas/PaymentMethodDataSbp" + - $ref: "#/components/schemas/PaymentMethodDataSberLoan" + - $ref: "#/components/schemas/PaymentMethodDataElectronicCertificate" + - $ref: "#/components/schemas/PaymentMethodDataSberBnpl" + discriminator: + propertyName: "type" + confirmation: + oneOf: + - $ref: "#/components/schemas/ConfirmationDataRedirect" + - $ref: "#/components/schemas/ConfirmationDataExternal" + - $ref: "#/components/schemas/ConfirmationDataQr" + - $ref: "#/components/schemas/ConfirmationDataEmbedded" + - $ref: "#/components/schemas/ConfirmationDataMobileApplication" + discriminator: + propertyName: "type" + save_payment_method: + $ref: "#/components/schemas/SavePaymentMethodAttribute" + capture: + $ref: "#/components/schemas/Capture" + client_ip: + $ref: "#/components/schemas/ClientIp" + metadata: + $ref: "#/components/schemas/Metadata" + airline: + allOf: + - $ref: "#/components/schemas/Airline" + - description: "Object containing the data for selling airline tickets. Used only for bank card payments." + transfers: + description: "Information about money distribution: the amounts of transfers and the stores to be transferred to. Specified if you use Split payments: https://yookassa.ru/developers/solutions-for-platforms/split-payments/basics." + type: "array" + items: + $ref: "#/components/schemas/TransferDataPayment" + deal: + allOf: + - $ref: "#/components/schemas/PaymentDealInfo" + - description: "The deal within which the payment is being carried out. Specified if you use Safe deal: https://yookassa.ru/developers/solutions-for-platforms/safe-deal/basics." + merchant_customer_id: + allOf: + - $ref: "#/components/schemas/MerchantCustomerId" + - description: "The identifier of the customer in your system, such as email address or phone number. No more than 200 characters. Specified if you want to save a bank card and offer it for a recurring payment in the YooMoney payment widget: https://yookassa.ru/developers/payment-acceptance/integration-scenarios/widget/basics." + payment_order: + oneOf: + - $ref: "#/components/schemas/PaymentOrderDataUtilities" + discriminator: + propertyName: "type" + receiver: + oneOf: + - $ref: "#/components/schemas/ReceiverMobileBalance" + - $ref: "#/components/schemas/ReceiverDigitalWallet" + - $ref: "#/components/schemas/ReceiverBankAccount" + discriminator: + propertyName: "type" + statements: + type: "array" + description: "Data for sending statements. Required if you want the user to receive a statement after they make a payment. Only one type of statement is currently available: payment overview. This is the information about a successful payment that YooMoney sends to the user's email address. An overview may be sent if the payment was made via bank cards, SberPay, or FPS. The option to send overviews is available for all integration scenarios: https://yookassa.ru/developers/payment-acceptance/getting-started/selecting-integration-scenario." + items: + oneOf: + - $ref: "#/components/schemas/PaymentOverviewStatementData" + discriminator: + propertyName: "type" + test: + $ref: "#/components/schemas/Test" + required: + - "amount" + responses: + "200": + description: "Запрос успешно обработан" + content: + application/json: + schema: + $ref: "#/components/schemas/Payment" + "400": + $ref: "#/components/responses/BadRequest" + "401": + $ref: "#/components/responses/InvalidCredentials" + "403": + $ref: "#/components/responses/Forbidden" + "500": + $ref: "#/components/responses/InternalServerError" + get: + summary: "List payments" + description: "Use this request to get a list of payments. You can download payments created over the last 3 years. You can filter the list by specified criteria. More about working with lists: https://yookassa.ru/developers/using-api/lists" + tags: + - "Payments" + parameters: + - $ref: "#/components/parameters/CreatedGte" + - $ref: "#/components/parameters/CreatedGt" + - $ref: "#/components/parameters/CreatedLte" + - $ref: "#/components/parameters/CreatedLt" + - in: "query" + name: "captured_at.gte" + description: "Filter by time of payment capture: time must be greater than the specified value or equal (\"from a certain moment inclusive\"). Specified in the ISO 8601: https://en.wikipedia.org/wiki/ISO_8601 format. Example: captured_at.gte=2018-07-18T10:51:18.139Z" + schema: + type: "string" + format: "date-time" + - in: "query" + name: "captured_at.gt" + description: "Filter by time of payment capture: time must be greater than the specified value (\"from a certain moment exclusive\"). Specified in the ISO 8601: https://en.wikipedia.org/wiki/ISO_8601 format. Example: captured_at.gt=2018-07-18T10:51:18.139Z" + schema: + type: "string" + format: "date-time" + - in: "query" + name: "captured_at.lte" + description: "Filter by time of payment capture: time must be less than the specified value or equal (\"until a certain moment inclusive\"). Specified in the ISO 8601: https://en.wikipedia.org/wiki/ISO_8601 format. Example: captured_at.lte=2018-07-18T10:51:18.139Z" + schema: + type: "string" + format: "date-time" + - in: "query" + name: "captured_at.lt" + description: "Filter by time of payment capture: time must be less than the specified value (\"until a certain moment exclusive\") Specified in the ISO 8601: https://en.wikipedia.org/wiki/ISO_8601 format. Example: captured_at.lt=2018-07-18T10:51:18.139Z" + schema: + type: "string" + format: "date-time" + - in: "query" + name: "payment_method" + schema: + $ref: "#/components/schemas/PaymentMethodType" + required: false + description: "Filter by payment method: https://yookassa.ru/developers/payment-acceptance/getting-started/payment-methods#all code. Example: payment_method=bank_card" + - in: "query" + name: "status" + schema: + $ref: "#/components/schemas/PaymentStatus" + required: false + description: "Filter by payment status: https://yookassa.ru/developers/payment-acceptance/getting-started/payment-process#lifecycle. Example: status=succeeded" + - $ref: "#/components/parameters/Limit" + - $ref: "#/components/parameters/NextCursor" + responses: + "200": + description: "Запрос успешно обработан" + content: + application/json: + schema: + $ref: "#/components/schemas/PaymentList" + "400": + $ref: "#/components/responses/BadRequest" + "401": + $ref: "#/components/responses/InvalidCredentials" + "403": + $ref: "#/components/responses/Forbidden" + "500": + $ref: "#/components/responses/InternalServerError" + /payments/{payment_id}: + get: + summary: "Get payment information" + description: "This request allows you to get the information about the current payment status by its unique ID." + tags: + - "Payments" + parameters: + - $ref: "#/components/parameters/paymentIdPath" + responses: + "200": + description: "Запрос успешно обработан" + content: + application/json: + schema: + $ref: "#/components/schemas/Payment" + "400": + $ref: "#/components/responses/BadRequest" + "401": + $ref: "#/components/responses/InvalidCredentials" + "403": + $ref: "#/components/responses/Forbidden" + "404": + $ref: "#/components/responses/NotFound" + "500": + $ref: "#/components/responses/InternalServerError" + /payments/{payment_id}/capture: + post: + summary: "Capture a payment" + description: "Confirm you’re ready to accept the payment. Once the payment is captured, the status will change to succeeded. After that, you can provide the customer with the product or service. You can only capture payments with the waiting_for_capture status, and only for a certain amount of time (depending on the payment method). If you do not capture the payment within the allotted time, the status will change to canceled, and the money will be returned to the user. More about capturing and canceling payments: https://yookassa.ru/developers/payment-acceptance/getting-started/payment-process#capture-and-cancel" + tags: + - "Payments" + parameters: + - $ref: "#/components/parameters/paymentIdPath" + - $ref: "#/components/parameters/IdempotenceKey" + requestBody: + required: true + content: + application/json: + schema: + type: "object" + title: "PaymentCaptureRequest" + properties: + amount: + allOf: + - $ref: "#/components/schemas/MonetaryAmount" + - description: "Total amount that will be debited from the user. You can specify a part of the initial amount to return the balance to the user. To do this, make sure that the selected payment method supports partial debit: https://yookassa.ru/developers/payment-acceptance/getting-started/payment-process#capture-partly. The amount is specified with the currency code. It should match the currency of your subaccount (recipient.gateway_id) if you separate payment flows, or the currency of the account (shopId in the Merchant Profile) if you don't." + receipt: + $ref: "#/components/schemas/ReceiptData" + airline: + allOf: + - $ref: "#/components/schemas/Airline" + - description: "Object containing the data for selling airline tickets. Used only for bank card payments." + transfers: + description: "Information about money distribution: the amounts of transfers and the stores to be transferred to. Specified for partially capturing a payment if you use Split payments: https://yookassa.ru/developers/solutions-for-platforms/split-payments/basics." + type: "array" + items: + $ref: "#/components/schemas/TransferDataCapture" + deal: + type: "object" + description: "The deal within which the payment is being carried out. Specified for partially capturing a payment if you use Safe deal: https://yookassa.ru/developers/solutions-for-platforms/safe-deal/basics." + title: "CapturePaymentDeal" + properties: + settlements: + $ref: "#/components/schemas/SettlementPaymentArray" + required: + - "settlements" + responses: + "200": + description: "Запрос успешно обработан" + content: + application/json: + schema: + $ref: "#/components/schemas/Payment" + "400": + $ref: "#/components/responses/BadRequest" + "401": + $ref: "#/components/responses/InvalidCredentials" + "403": + $ref: "#/components/responses/Forbidden" + "500": + $ref: "#/components/responses/InternalServerError" + /payments/{payment_id}/cancel: + post: + summary: "Cancel a payment" + description: "Cancel payments with the waiting_for_capture status. Payment cancelation means you are not ready to dispatch a product or to provide a service to the user. Once you cancel the payment, we will start returning the money to the payer’s account. If the payment was made from a bank card, a YooMoney wallet, or via SberPay, the money will be refunded instantly. If the payment was made using other payment methods, the process can take up to several days. More about capturing and canceling payments: https://yookassa.ru/developers/payment-acceptance/getting-started/payment-process#capture-and-cancel" + parameters: + - $ref: "#/components/parameters/paymentIdPath" + - $ref: "#/components/parameters/IdempotenceKey" + tags: + - "Payments" + responses: + "200": + description: "Запрос успешно обработан" + content: + application/json: + schema: + $ref: "#/components/schemas/Payment" + "400": + $ref: "#/components/responses/BadRequest" + "401": + $ref: "#/components/responses/InvalidCredentials" + "403": + $ref: "#/components/responses/Forbidden" + "500": + $ref: "#/components/responses/InternalServerError" + /payment_methods: + post: + summary: "Создание способа оплаты" + description: "Используйте этот запрос, чтобы создать в ЮKassa объект способа оплаты: https://yookassa.ru/developers/api#payment_method_object. В запросе необходимо передать код способа оплаты, который вы хотите сохранить, и при необходимости дополнительные параметры, связанные с той функциональностью, которую вы хотите использовать. Идентификатор созданного способа оплаты вы можете использовать при проведении автоплатежей: https://yookassa.ru/developers/payment-acceptance/scenario-extensions/recurring-payments/create-recurring или выплат: https://yookassa.ru/developers/payouts/scenario-extensions/multipurpose-token." + tags: + - "Способы оплаты" + parameters: + - $ref: "#/components/parameters/IdempotenceKey" + requestBody: + required: true + content: + application/json: + schema: + oneOf: + - $ref: "#/components/schemas/SavePaymentMethodDataBankCard" + discriminator: + propertyName: "type" + responses: + "200": + description: "Запрос успешно обработан" + content: + application/json: + schema: + oneOf: + - $ref: "#/components/schemas/SavePaymentMethodBankCard" + discriminator: + propertyName: "type" + "400": + $ref: "#/components/responses/BadRequest" + "401": + $ref: "#/components/responses/InvalidCredentials" + "403": + $ref: "#/components/responses/Forbidden" + "429": + $ref: "#/components/responses/TooManyRequests" + "500": + $ref: "#/components/responses/InternalServerError" + /payment_methods/{payment_method_id}: + get: + summary: "Информация о способе оплаты" + description: "Используйте этот запрос, чтобы получить информацию о текущем состоянии способа оплаты по его уникальному идентификатору." + tags: + - "Способы оплаты" + parameters: + - $ref: "#/components/parameters/paymentMethodIdPath" + responses: + "200": + description: "Запрос успешно обработан" + content: + application/json: + schema: + oneOf: + - $ref: "#/components/schemas/SavePaymentMethodBankCard" + discriminator: + propertyName: "type" + "400": + $ref: "#/components/responses/BadRequest" + "401": + $ref: "#/components/responses/InvalidCredentials" + "403": + $ref: "#/components/responses/Forbidden" + "404": + $ref: "#/components/responses/NotFound" + "429": + $ref: "#/components/responses/TooManyRequests" + "500": + $ref: "#/components/responses/InternalServerError" + /invoices: + post: + summary: "Создание счета" + description: "Используйте этот запрос, чтобы создать в ЮKassa объект счета: https://yookassa.ru/developers/api#invoice_object. В запросе необходимо передать данные о заказе, которые отобразятся на странице счета, и данные для проведения платежа." + tags: + - "Счета" + security: + - BasicAuth: [] + parameters: + - $ref: "#/components/parameters/IdempotenceKey" + requestBody: + required: true + content: + application/json: + schema: + type: "object" + title: "CreateInvoiceRequest" + properties: + payment_data: + $ref: "#/components/schemas/PaymentData" + cart: + $ref: "#/components/schemas/Cart" + delivery_method_data: + oneOf: + - $ref: "#/components/schemas/DeliveryMethodDataSelf" + - $ref: "#/components/schemas/DeliveryMethodDataSms" + - $ref: "#/components/schemas/DeliveryMethodDataEmail" + discriminator: + propertyName: "type" + expires_at: + $ref: "#/components/schemas/InvoiceExpirationDate" + locale: + $ref: "#/components/schemas/Locale" + description: + allOf: + - $ref: "#/components/schemas/Description" + - description: "Описание выставленного счета (не более 128 символов), которое вы увидите в личном кабинете ЮKassa, а пользователь на странице счета. Например: «Счет на оплату по договору 37»." + metadata: + $ref: "#/components/schemas/Metadata" + required: + - "payment_data" + - "cart" + - "expires_at" + responses: + "200": + description: "Запрос успешно обработан" + content: + application/json: + schema: + $ref: "#/components/schemas/Invoice" + "400": + $ref: "#/components/responses/BadRequest" + "401": + $ref: "#/components/responses/InvalidCredentials" + "403": + $ref: "#/components/responses/Forbidden" + "500": + $ref: "#/components/responses/InternalServerError" + /invoices/{invoice_id}: + get: + summary: "Информация о счете" + description: "Используйте этот запрос, чтобы получить информацию о текущем состоянии счета по его уникальному идентификатору." + parameters: + - $ref: "#/components/parameters/invoiceId" + tags: + - "Счета" + security: + - BasicAuth: [] + responses: + "200": + description: "Запрос успешно обработан" + content: + application/json: + schema: + $ref: "#/components/schemas/Invoice" + "400": + $ref: "#/components/responses/BadRequest" + "401": + $ref: "#/components/responses/InvalidCredentials" + "403": + $ref: "#/components/responses/Forbidden" + "500": + $ref: "#/components/responses/InternalServerError" + /refunds: + post: + summary: "Создание возврата" + description: "Создает возврат успешного платежа на указанную сумму. Платеж можно вернуть только в течение трех лет с момента его создания: https://yookassa.ru/developers/api#create_payment. Комиссия ЮKassa за проведение платежа не возвращается." + tags: + - "Возвраты" + parameters: + - $ref: "#/components/parameters/IdempotenceKey" + requestBody: + required: true + content: + application/json: + schema: + type: "object" + title: "RefundRequest" + properties: + payment_id: + $ref: "#/components/schemas/PaymentId" + amount: + allOf: + - $ref: "#/components/schemas/MonetaryAmount" + - description: "The amount that must be refunded to the user. The amount is specified with the currency code. It should match the currency of your subaccount (recipient.gateway_id) if you separate payment flows, or the currency of the account (shopId in the Merchant Profile) if you don't." + description: + description: "Комментарий к возврату, основание для возврата денег пользователю." + type: "string" + maxLength: 250 + receipt: + $ref: "#/components/schemas/ReceiptData" + sources: + description: "Данные о том, с какого магазина и какую сумму нужно удержать для проведения возврата. Необходимо передавать, если вы используете Сплитование платежей: https://yookassa.ru/developers/solutions-for-platforms/split-payments/basics. Сейчас в этом параметре можно передать данные только одного магазина." + type: "array" + items: + $ref: "#/components/schemas/RefundSourcesData" + deal: + $ref: "#/components/schemas/RefundDealData" + refund_method_data: + oneOf: + - $ref: "#/components/schemas/ElectronicCertificateRefundMethodData" + discriminator: + propertyName: "type" + metadata: + $ref: "#/components/schemas/Metadata" + required: + - "payment_id" + - "amount" + responses: + "200": + description: "Запрос успешно обработан" + content: + application/json: + schema: + $ref: "#/components/schemas/Refund" + "400": + $ref: "#/components/responses/BadRequest" + "401": + $ref: "#/components/responses/InvalidCredentials" + "403": + $ref: "#/components/responses/Forbidden" + "500": + $ref: "#/components/responses/InternalServerError" + get: + summary: "Список возвратов" + description: "Use this request to get a list of refunds. You can download refunds created over the last 3 years. You can filter the list by specified criteria. More about working with lists: https://yookassa.ru/developers/using-api/lists" + tags: + - "Возвраты" + parameters: + - $ref: "#/components/parameters/CreatedGte" + - $ref: "#/components/parameters/CreatedGt" + - $ref: "#/components/parameters/CreatedLte" + - $ref: "#/components/parameters/CreatedLt" + - in: "query" + name: "payment_id" + schema: + $ref: "#/components/schemas/PaymentId" + required: false + description: "Фильтр по идентификатору платежа: https://yookassa.ru/developers/api#payment_object_id (получить все возвраты по платежу). Пример: payment_id=1da5c87d-0984-50e8-a7f3-8de646dd9ec9" + - in: "query" + name: "status" + schema: + $ref: "#/components/schemas/RefundStatus" + required: false + description: "Фильтр по статусу возврата. Возможные значения: pending — в обработке, succeeded — успешно выполнен, canceled — отменен. Пример: status=succeeded" + - $ref: "#/components/parameters/Limit" + - $ref: "#/components/parameters/NextCursor" + responses: + "200": + description: "Запрос успешно обработан" + content: + application/json: + schema: + $ref: "#/components/schemas/RefundList" + "400": + $ref: "#/components/responses/BadRequest" + "401": + $ref: "#/components/responses/InvalidCredentials" + "403": + $ref: "#/components/responses/Forbidden" + "500": + $ref: "#/components/responses/InternalServerError" + /refunds/{refund_id}: + get: + summary: "Информация о возврате" + description: "Запрос позволяет получить информацию о текущем состоянии возврата по его уникальному идентификатору." + tags: + - "Возвраты" + parameters: + - $ref: "#/components/parameters/refundIdPath" + responses: + "200": + description: "Запрос успешно обработан" + content: + application/json: + schema: + $ref: "#/components/schemas/Refund" + "400": + $ref: "#/components/responses/BadRequest" + "401": + $ref: "#/components/responses/InvalidCredentials" + "403": + $ref: "#/components/responses/Forbidden" + "404": + $ref: "#/components/responses/NotFound" + "500": + $ref: "#/components/responses/InternalServerError" + /receipts: + post: + summary: "Создание чека" + description: "Используйте этот запрос при оплате с соблюдением требований 54-ФЗ: https://yookassa.ru/developers/payment-acceptance/receipts/54fz/basics, чтобы создать чек зачета предоплаты. Если вы работаете по сценарию Сначала платеж, потом чек: https://yookassa.ru/developers/payment-acceptance/receipts/54fz/other-services/basics#receipt-after-payment, в запросе также нужно передавать данные для формирования чека прихода и чека возврата прихода." + tags: + - "Чеки" + parameters: + - $ref: "#/components/parameters/IdempotenceKey" + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/PostReceiptData" + responses: + "200": + description: "Запрос успешно обработан" + content: + application/json: + schema: + $ref: "#/components/schemas/Receipt" + "400": + $ref: "#/components/responses/BadRequest" + "401": + $ref: "#/components/responses/InvalidCredentials" + "403": + $ref: "#/components/responses/Forbidden" + "500": + $ref: "#/components/responses/InternalServerError" + get: + summary: "Список чеков" + description: "Запрос позволяет получить список чеков, отфильтрованный по заданным критериям. Можно запросить чеки по конкретному платежу, чеки по конкретному возврату или все чеки магазина. Подробнее о работе со списками: https://yookassa.ru/developers/using-api/lists" + tags: + - "Чеки" + parameters: + - $ref: "#/components/parameters/CreatedGte" + - $ref: "#/components/parameters/CreatedGt" + - $ref: "#/components/parameters/CreatedLte" + - $ref: "#/components/parameters/CreatedLt" + - in: "query" + name: "status" + schema: + $ref: "#/components/schemas/ReceiptRegistrationStatus" + required: false + description: "Фильтр по статусу чека. Возможные значения: pending — в обработке, succeeded — успешно зарегистрирован, canceled — отменен. Пример: status=succeeded" + - in: "query" + name: "payment_id" + schema: + $ref: "#/components/schemas/PaymentId" + required: false + description: "Фильтр по идентификатору платежа: https://yookassa.ru/developers/api#payment_object_id (получить все чеки для указанного платежа). Пример: payment_id=1da5c87d-0984-50e8-a7f3-8de646dd9ec9 В запросе можно передать только что-то одно: или идентификатор платежа, или идентификатор возврата." + - in: "query" + name: "refund_id" + schema: + $ref: "#/components/schemas/RefundId" + required: false + description: "Фильтр по идентификатору возврата: https://yookassa.ru/developers/api#refund_object_id (получить все чеки для указанного возврата). Пример: refund_id=1da5c87d-0984-50e8-a7f3-8de646dd9ec9 В запросе можно передать только что-то одно: или идентификатор платежа, или идентификатор возврата." + - $ref: "#/components/parameters/Limit" + - $ref: "#/components/parameters/NextCursor" + responses: + "200": + description: "Запрос успешно обработан" + content: + application/json: + schema: + type: "object" + description: "Список чеков, созданных за последние три года. Чеки отсортированы по времени создания в порядке убывания (от новых к старым). Если результатов больше, чем задано в limit, список будет выводиться фрагментами. В этом случае в ответе на запрос вернется фрагмент списка и параметр next_cursor с указателем на следующий фрагмент." + title: "ReceiptList" + properties: + type: + type: "string" + description: "Формат выдачи результатов запроса. Возможное значение: list (список)." + enum: + - "list" + items: + type: "array" + items: + $ref: "#/components/schemas/Receipt" + next_cursor: + $ref: "#/components/schemas/NextCursor" + required: + - "type" + - "items" + "400": + $ref: "#/components/responses/BadRequest" + "401": + $ref: "#/components/responses/InvalidCredentials" + "403": + $ref: "#/components/responses/Forbidden" + "500": + $ref: "#/components/responses/InternalServerError" + /receipts/{receipt_id}: + get: + summary: "Информация о чеке" + description: "Запрос позволяет получить информацию о текущем состоянии чека по его уникальному идентификатору." + tags: + - "Чеки" + parameters: + - $ref: "#/components/parameters/receiptIdPath" + responses: + "200": + description: "Запрос успешно обработан" + content: + application/json: + schema: + $ref: "#/components/schemas/Receipt" + "400": + $ref: "#/components/responses/BadRequest" + "401": + $ref: "#/components/responses/InvalidCredentials" + "403": + $ref: "#/components/responses/Forbidden" + "500": + $ref: "#/components/responses/InternalServerError" + /deals: + post: + summary: "Создание сделки" + description: "Запрос позволяет создать сделку, в рамках которой необходимо принять оплату от покупателя и перечислить ее продавцу." + tags: + - "Сделки" + parameters: + - $ref: "#/components/parameters/IdempotenceKey" + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/SafeDealRequest" + responses: + "200": + description: "Запрос принят в обработку и успешно обработан." + content: + application/json: + schema: + $ref: "#/components/schemas/SafeDeal" + "400": + $ref: "#/components/responses/BadRequest" + "401": + $ref: "#/components/responses/InvalidCredentials" + "403": + $ref: "#/components/responses/Forbidden" + "429": + $ref: "#/components/responses/TooManyRequests" + "500": + $ref: "#/components/responses/InternalServerError" + get: + summary: "Список сделок" + description: "Запрос позволяет получить список сделок, отфильтрованный по заданным критериям. Подробнее о работе со списками: https://yookassa.ru/developers/using-api/lists" + tags: + - "Сделки" + parameters: + - $ref: "#/components/parameters/CreatedGte" + - $ref: "#/components/parameters/CreatedGt" + - $ref: "#/components/parameters/CreatedLte" + - $ref: "#/components/parameters/CreatedLt" + - $ref: "#/components/parameters/ExpiresGte" + - $ref: "#/components/parameters/ExpiresGt" + - $ref: "#/components/parameters/ExpiresLte" + - $ref: "#/components/parameters/ExpiresLt" + - $ref: "#/components/parameters/DealStatusParameter" + - $ref: "#/components/parameters/FullTextSearch" + - $ref: "#/components/parameters/Limit" + - $ref: "#/components/parameters/NextCursor" + responses: + "200": + description: "Запрос успешно обработан" + content: + application/json: + schema: + type: "object" + description: "Список сделок, созданных за последние три года. Сделки отсортированы по времени создания в порядке убывания (от новых к старым). Если результатов больше, чем задано в limit, список будет выводиться фрагментами. В этом случае в ответе на запрос вернется фрагмент списка и параметр next_cursor с указателем на следующий фрагмент." + title: "DealList" + properties: + type: + type: "string" + description: "Формат выдачи результатов запроса. Возможное значение: list (список)." + enum: + - "list" + items: + type: "array" + items: + $ref: "#/components/schemas/SafeDeal" + next_cursor: + $ref: "#/components/schemas/NextCursor" + required: + - "type" + - "items" + "400": + $ref: "#/components/responses/BadRequest" + "401": + $ref: "#/components/responses/InvalidCredentials" + "403": + $ref: "#/components/responses/Forbidden" + "404": + $ref: "#/components/responses/NotFound" + "429": + $ref: "#/components/responses/TooManyRequests" + "500": + $ref: "#/components/responses/InternalServerError" + /deals/{deal_id}: + get: + summary: "Информация о сделке" + description: "Запрос позволяет получить информацию о текущем состоянии сделки по ее уникальному идентификатору." + tags: + - "Сделки" + parameters: + - $ref: "#/components/parameters/DealIdPath" + responses: + "200": + description: "Запрос принят в обработку и успешно обработан." + content: + application/json: + schema: + $ref: "#/components/schemas/SafeDeal" + "400": + $ref: "#/components/responses/BadRequest" + "401": + $ref: "#/components/responses/InvalidCredentials" + "403": + $ref: "#/components/responses/Forbidden" + "404": + $ref: "#/components/responses/NotFound" + "429": + $ref: "#/components/responses/TooManyRequests" + "500": + $ref: "#/components/responses/InternalServerError" + /payouts: + post: + summary: "Создание выплаты" + description: "Используйте этот запрос, чтобы создать в ЮKassa объект выплаты: https://yookassa.ru/developers/api#payout_object. В запросе необходимо передать сумму выплаты, данные о способе получения выплаты (например, номер кошелька ЮMoney), описание выплаты и при необходимости дополнительные параметры, связанные с той функциональностью, которую вы хотите использовать. Передаваемые параметры и данные для аутентификации: https://yookassa.ru/developers/using-api/interaction-format#auth запросов зависят от того, какое платежное решение вы используете — обычные выплаты: https://yookassa.ru/developers/payouts/overview или выплаты в рамках Безопасной сделки: https://yookassa.ru/developers/solutions-for-platforms/safe-deal/basics." + tags: + - "Выплаты" + parameters: + - $ref: "#/components/parameters/IdempotenceKey" + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/PayoutRequest" + responses: + "200": + description: "Запрос принят в обработку и успешно обработан." + content: + application/json: + schema: + $ref: "#/components/schemas/Payout" + "400": + $ref: "#/components/responses/BadRequest" + "401": + $ref: "#/components/responses/InvalidCredentials" + "403": + $ref: "#/components/responses/Forbidden" + "429": + $ref: "#/components/responses/TooManyRequests" + "500": + $ref: "#/components/responses/InternalServerError" + get: + summary: "List of payouts" + description: "Use this request to get a list of payouts. You can download payments created over the last 3 years. You can filter the list by specified criteria. Request authentication details: https://yookassa.ru/developers/using-api/interaction-format#auth depend on which payment solution you are using: basic payouts: https://yookassa.ru/developers/payouts/overview or payouts within the Safe Deal: https://yookassa.ru/developers/solutions-for-platforms/safe-deal/basics. More about working with lists: https://yookassa.ru/developers/using-api/lists" + tags: + - "Выплаты" + parameters: + - $ref: "#/components/parameters/CreatedGte" + - $ref: "#/components/parameters/CreatedGt" + - $ref: "#/components/parameters/CreatedLte" + - $ref: "#/components/parameters/CreatedLt" + - in: "query" + name: "payout_destination.type" + schema: + $ref: "#/components/schemas/PayoutDestinationDataType" + description: "Filter by the method of receiving the payout: https://yookassa.ru/developers/payouts/getting-started/payout-types-and-limits#types-destination code. Example: payout_destination.type=bank_card" + - in: "query" + name: "status" + schema: + $ref: "#/components/schemas/PayoutStatus" + description: "Filter by payout status: https://yookassa.ru/developers/api#payout_object_status. Example: status=succeeded" + - $ref: "#/components/parameters/Limit" + - $ref: "#/components/parameters/NextCursor" + responses: + "200": + description: "Запрос успешно обработан" + content: + application/json: + schema: + $ref: "#/components/schemas/PayoutsList" + "400": + $ref: "#/components/responses/BadRequest" + "401": + $ref: "#/components/responses/InvalidCredentials" + "403": + $ref: "#/components/responses/Forbidden" + "404": + $ref: "#/components/responses/NotFound" + "429": + $ref: "#/components/responses/TooManyRequests" + "500": + $ref: "#/components/responses/InternalServerError" + /payouts/search: + get: + summary: "Search for payouts" + description: "Use this request to search for payouts by the specified criteria. Available only for payouts created over the last 3 months. At this time, only search by the metadata parameter is available. You can also specify the date and time when the payout was created (the created_at parameter). Request authentication details: https://yookassa.ru/developers/using-api/interaction-format#auth depend on which payment solution you are using: basic payouts: https://yookassa.ru/developers/payouts/overview or payouts within the Safe Deal: https://yookassa.ru/developers/solutions-for-platforms/safe-deal/basics." + tags: + - "Выплаты" + parameters: + - $ref: "#/components/parameters/CreatedGte" + - $ref: "#/components/parameters/CreatedGt" + - $ref: "#/components/parameters/CreatedLte" + - $ref: "#/components/parameters/CreatedLt" + - $ref: "#/components/parameters/MetadataInQueryParameter" + - $ref: "#/components/parameters/Limit" + - $ref: "#/components/parameters/NextCursor" + responses: + "200": + description: "Запрос успешно обработан" + content: + application/json: + schema: + $ref: "#/components/schemas/PayoutsList" + "400": + $ref: "#/components/responses/BadRequest" + "401": + $ref: "#/components/responses/InvalidCredentials" + "403": + $ref: "#/components/responses/Forbidden" + "404": + $ref: "#/components/responses/NotFound" + "429": + $ref: "#/components/responses/TooManyRequests" + "500": + $ref: "#/components/responses/InternalServerError" + /payouts/{payout_id}: + get: + summary: "Информация о выплате" + description: "Используйте этот запрос, чтобы получить информацию о текущем состоянии выплаты по ее уникальному идентификатору. Данные для аутентификации: https://yookassa.ru/developers/using-api/interaction-format#auth запросов зависят от того, какое платежное решение вы используете — обычные выплаты: https://yookassa.ru/developers/payouts/overview или выплаты в рамках Безопасной сделки: https://yookassa.ru/developers/solutions-for-platforms/safe-deal/basics." + tags: + - "Выплаты" + parameters: + - $ref: "#/components/parameters/PayoutIdPath" + responses: + "200": + description: "Запрос принят в обработку и успешно обработан." + content: + application/json: + schema: + $ref: "#/components/schemas/Payout" + "400": + $ref: "#/components/responses/BadRequest" + "401": + $ref: "#/components/responses/InvalidCredentials" + "403": + $ref: "#/components/responses/Forbidden" + "404": + $ref: "#/components/responses/NotFound" + "429": + $ref: "#/components/responses/TooManyRequests" + "500": + $ref: "#/components/responses/InternalServerError" + /sbp_banks: + get: + summary: "Список участников СБП" + description: "С помощью этого запроса вы можете получить актуальный список всех участников СБП. Список нужно вывести получателю выплаты, идентификатор выбранного участника СБП необходимо использовать в запросе на создание выплаты: https://yookassa.ru/developers/api#create_payout. Подробнее о выплатах через СБП: https://yookassa.ru/developers/payouts/making-payouts/sbp" + tags: + - "Участники СБП" + responses: + "200": + description: "Запрос успешно обработан" + content: + application/json: + schema: + type: "object" + description: "Список участников СБП. Участники СБП отсортированы по идентификатору участника в порядке убывания." + title: "GetSbpBanksResponse" + properties: + type: + type: "string" + description: "Формат выдачи результатов запроса. Возможное значение: list (список)." + enum: + - "list" + items: + type: "array" + items: + $ref: "#/components/schemas/SbpParticipantBank" + required: + - "type" + - "items" + "400": + $ref: "#/components/responses/BadRequest" + "401": + $ref: "#/components/responses/InvalidCredentials" + "403": + $ref: "#/components/responses/Forbidden" + "404": + $ref: "#/components/responses/NotFound" + "429": + $ref: "#/components/responses/TooManyRequests" + "500": + $ref: "#/components/responses/InternalServerError" + /personal_data: + post: + summary: "Создание персональных данных" + description: "Используйте этот запрос, чтобы создать в ЮKassa объект персональных данных: https://yookassa.ru/developers/api#personal_data_object. В запросе необходимо указать тип данных (с какой целью они будут использоваться) и передать информацию о пользователе: фамилию, имя, отчество и другие — в зависимости от выбранного типа. Идентификатор созданного объекта персональных данных необходимо использовать в запросе на создание выплаты: https://yookassa.ru/developers/api#create_payout." + tags: + - "Персональные данные" + parameters: + - $ref: "#/components/parameters/IdempotenceKey" + requestBody: + required: true + content: + application/json: + schema: + oneOf: + - $ref: "#/components/schemas/SbpPayoutRecipientPersonalDataRequest" + - $ref: "#/components/schemas/PayoutStatementRecipientPersonalDataRequest" + discriminator: + propertyName: "type" + mapping: + payout_statement_recipient: "#/components/schemas/PayoutStatementRecipientPersonalDataRequest" + sbp_payout_recipient: "#/components/schemas/SbpPayoutRecipientPersonalDataRequest" + responses: + "200": + description: "Запрос принят в обработку и успешно обработан." + content: + application/json: + schema: + $ref: "#/components/schemas/PersonalData" + "400": + $ref: "#/components/responses/BadRequest" + "401": + $ref: "#/components/responses/InvalidCredentials" + "403": + $ref: "#/components/responses/Forbidden" + "429": + $ref: "#/components/responses/TooManyRequests" + "500": + $ref: "#/components/responses/InternalServerError" + /personal_data/{personal_data_id}: + get: + summary: "Информация о персональных данных" + description: "С помощью этого запроса вы можете получить информацию о текущем статусе объекта персональных данных по его уникальному идентификатору." + tags: + - "Персональные данные" + parameters: + - in: "path" + name: "personal_data_id" + required: true + schema: + $ref: "#/components/schemas/PersonalDataId" + responses: + "200": + description: "Запрос принят в обработку и успешно обработан." + content: + application/json: + schema: + $ref: "#/components/schemas/PersonalData" + "400": + $ref: "#/components/responses/BadRequest" + "401": + $ref: "#/components/responses/InvalidCredentials" + "403": + $ref: "#/components/responses/Forbidden" + "404": + $ref: "#/components/responses/NotFound" + "429": + $ref: "#/components/responses/TooManyRequests" + "500": + $ref: "#/components/responses/InternalServerError" + /webhooks: + post: + summary: "Создание webhook" + description: "Запрос позволяет подписаться на уведомления о событиях: https://yookassa.ru/developers/using-api/webhooks#events (например, переход платежа в статус succeeded). C помощью webhook можно подписаться только на события платежей и возвратов. Если вы хотите получать уведомления о нескольких событиях, вам нужно для каждого из них создать свой webhook. Для каждого OAuth-токена нужно создавать свой набор webhook." + tags: + - "Webhooks" + parameters: + - $ref: "#/components/parameters/IdempotenceKey" + requestBody: + required: true + content: + application/json: + schema: + type: "object" + title: "CreateWebhookRequest" + properties: + event: + allOf: + - $ref: "#/components/schemas/NotificationEventType" + - description: "Событие: https://yookassa.ru/developers/using-api/webhooks#events, которое вы хотите отслеживать." + url: + description: "URL, на который ЮKassa будет отправлять уведомления." + type: "string" + example: "https://www.example.com/notification_url" + required: + - "event" + - "url" + responses: + "200": + description: "Запрос успешно обработан" + content: + application/json: + schema: + $ref: "#/components/schemas/Webhook" + "400": + $ref: "#/components/responses/BadRequest" + "401": + $ref: "#/components/responses/InvalidCredentials" + "403": + $ref: "#/components/responses/Forbidden" + "500": + $ref: "#/components/responses/InternalServerError" + get: + summary: "Список созданных webhook" + description: "Запрос позволяет узнать, какие webhook есть для переданного OAuth-токена." + tags: + - "Webhooks" + responses: + "200": + description: "Запрос успешно обработан" + content: + application/json: + schema: + $ref: "#/components/schemas/WebhookList" + "401": + $ref: "#/components/responses/InvalidCredentials" + "403": + $ref: "#/components/responses/Forbidden" + "500": + $ref: "#/components/responses/InternalServerError" + /webhooks/{webhook_id}: + delete: + summary: "Удаление webhook" + description: "Запрос позволяет отписаться от уведомлений о событии для переданного OAuth-токена. Чтобы удалить webhook, вам нужно передать в запросе его идентификатор." + parameters: + - $ref: "#/components/parameters/webhookId" + tags: + - "Webhooks" + responses: + "200": + description: "Запрос успешно обработан" + content: + application/json: + schema: + type: "object" + "400": + $ref: "#/components/responses/BadRequest" + "401": + $ref: "#/components/responses/InvalidCredentials" + "403": + $ref: "#/components/responses/Forbidden" + "500": + $ref: "#/components/responses/InternalServerError" + /me: + get: + summary: "Информация о настройках магазина или шлюза" + description: "С помощью этого запроса вы можете получить информацию о магазине или шлюзе: * Для Сплитования платежей: https://yookassa.ru/developers/solutions-for-platforms/split-payments/basics: в запросе необходимо передать параметр on_behalf_of с идентификатором магазина продавца и ваши данные для аутентификации: https://yookassa.ru/developers/using-api/interaction-format#auth (идентификатор и секретный ключ вашей платформы). * Для партнеров: https://yookassa.ru/developers/solutions-for-platforms/partners-api/basics: в запросе необходимо передать OAuth-токен магазина. * Для выплат: https://yookassa.ru/developers/payouts/overview: в запросе необходимо передать ваши данные для аутентификации: https://yookassa.ru/developers/using-api/interaction-format#auth (идентификатор и секретный ключ вашего шлюза)." + tags: + - "Настройки" + parameters: + - in: "query" + name: "on_behalf_of" + schema: + $ref: "#/components/schemas/AccountId" + required: false + description: "Только для тех, кто использует Сплитование платежей: https://yookassa.ru/developers/solutions-for-platforms/split-payments/basics. Идентификатор магазина продавца, подключенного к вашей платформе, информацию о котором вы хотите узнать." + responses: + "200": + description: "Запрос успешно обработан" + content: + application/json: + schema: + $ref: "#/components/schemas/Me" + "400": + $ref: "#/components/responses/BadRequest" + "401": + $ref: "#/components/responses/InvalidCredentials" + "403": + $ref: "#/components/responses/Forbidden" + "500": + $ref: "#/components/responses/InternalServerError" +components: + securitySchemes: + BasicAuth: + description: "HTTP Basic аутентификация клиента ЮKassa" + type: "http" + scheme: "basic" + OAuth2: + description: "Авторизация клиента ЮKassa с использованием OAuth-токена" + type: "oauth2" + flows: + implicit: + authorizationUrl: "https://yookassa.ru/oauth/v2/authorize" + scopes: + checkout:payments_create: "Право на создание платежей" + checkout:payments_capture: "Право на подтверждение платежей" + checkout:payments_cancel: "Право на отмену платежей" + checkout:payments_get: "Право на получение списка платежей" + checkout:refunds_create: "Право на создание возвратов" + checkout:refunds_get: "Право на получение списка возвратов" + checkout:receipts_get: "Право на получение списка возвратов" + checkout:get_fees: "Право на получение информации об удержанных комиссиях" + parameters: + IdempotenceKey: + name: "Idempotence-Key" + in: "header" + required: true + schema: + type: "string" + maxLength: 64 + pattern: "[0-9a-zA-Z+-_.]{1,64}" + default: "2e1da982-1bb1-41f0-b9cf-758cc8bcf069" + CreatedGte: + name: "created_at.gte" + in: "query" + description: "Фильтр по времени создания: время должно быть больше указанного значения или равно ему («с такого-то момента включительно»). Указывается в формате ISO 8601: https://en.wikipedia.org/wiki/ISO_8601. Пример: created_at.gte=2018-07-18T10:51:18.139Z" + schema: + type: "string" + format: "date-time" + CreatedGt: + name: "created_at.gt" + in: "query" + description: "Фильтр по времени создания: время должно быть больше указанного значения («с такого-то момента, не включая его»). Указывается в формате ISO 8601: https://en.wikipedia.org/wiki/ISO_8601. Пример: created_at.gt=2018-07-18T10:51:18.139Z" + schema: + type: "string" + format: "date-time" + CreatedLte: + name: "created_at.lte" + in: "query" + description: "Фильтр по времени создания: время должно быть меньше указанного значения или равно ему («по такой-то момент включительно»). Указывается в формате ISO 8601: https://en.wikipedia.org/wiki/ISO_8601. Пример: created_at.lte=2018-07-18T10:51:18.139Z" + schema: + type: "string" + format: "date-time" + CreatedLt: + name: "created_at.lt" + in: "query" + description: "Фильтр по времени создания: время должно быть меньше указанного значения («по такой-то момент, не включая его»). Указывается в формате ISO 8601: https://en.wikipedia.org/wiki/ISO_8601. Пример: created_at.lt=2018-07-18T10:51:18.139Z" + schema: + type: "string" + format: "date-time" + Limit: + name: "limit" + in: "query" + description: "Размер выдачи результатов запроса — количество объектов, передаваемых в ответе. Возможные значения: от 1 до 100. Пример: limit=50 Значение по умолчанию: 10" + schema: + type: "integer" + minimum: 1 + maximum: 100 + default: 10 + NextCursor: + name: "cursor" + in: "query" + description: "Указатель на следующий фрагмент списка. Пример: cursor=37a5c87d-3984-51e8-a7f3-8de646d39ec15 В качестве указателя необходимо использовать значение параметра next_cursor, полученное в ответе на предыдущий запрос. Используется, если в списке больше объектов, чем может поместиться в выдаче (limit), и конец выдачи не достигнут. Пример использования: https://yookassa.ru/developers/using-api/lists#pagination" + schema: + type: "string" + paymentIdPath: + name: "payment_id" + in: "path" + required: true + description: "Идентификатор платежа." + schema: + $ref: "#/components/schemas/PaymentId" + paymentMethodIdPath: + name: "payment_method_id" + in: "path" + required: true + description: "Идентификатор сохраненного способа оплаты." + schema: + $ref: "#/components/schemas/PaymentMethodId" + invoiceId: + name: "invoice_id" + in: "path" + required: true + description: "Invoice ID in YooMoney." + schema: + type: "string" + minLength: 39 + maxLength: 39 + default: "in-e44e8088-bd73-43b1-959a-954f3a7d0c54?>" + refundIdPath: + name: "refund_id" + in: "path" + required: true + description: "Идентификатор возврата." + schema: + type: "string" + minLength: 36 + maxLength: 36 + default: "cae993f2-eb15-45f5-91c5-efb87107ae10" + receiptIdPath: + name: "receipt_id" + in: "path" + required: true + description: "Идентификатор чека." + schema: + $ref: "#/components/schemas/ReceiptId" + ExpiresGte: + name: "expires_at.gte" + in: "query" + description: "Фильтр по времени автоматического закрытия сделки: время должно быть больше указанного значения или равно ему («с такого-то момента включительно»). Указывается в формате ISO 8601: https://en.wikipedia.org/wiki/ISO_8601. Пример: expires_at.gte=2018-07-18T10:51:18.139Z" + schema: + type: "string" + format: "date-time" + ExpiresGt: + name: "expires_at.gt" + in: "query" + description: "Фильтр по времени автоматического закрытия сделки: время должно быть больше указанного значения («с такого-то момента, не включая его»). Указывается в формате ISO 8601: https://en.wikipedia.org/wiki/ISO_8601. Пример: expires_at.gt=2018-07-18T10:51:18.139Z" + schema: + type: "string" + format: "date-time" + ExpiresLte: + name: "expires_at.lte" + in: "query" + description: "Фильтр по времени автоматического закрытия сделки: время должно быть меньше указанного значения или равно ему («по такой-то момент включительно»). Указывается в формате ISO 8601: https://en.wikipedia.org/wiki/ISO_8601. Пример: expires_at.lte=2018-07-18T10:51:18.139Z" + schema: + type: "string" + format: "date-time" + ExpiresLt: + name: "expires_at.lt" + in: "query" + description: "Фильтр по времени автоматического закрытия сделки: время должно быть меньше указанного значения («по такой-то момент, не включая его»). Указывается в формате ISO 8601: https://en.wikipedia.org/wiki/ISO_8601. Пример: expires_at.lt=2018-07-18T10:51:18.139Z" + schema: + type: "string" + format: "date-time" + DealStatusParameter: + name: "status" + in: "query" + schema: + $ref: "#/components/schemas/DealStatus" + description: "Фильтр по статусу сделки. Пример: status=closed" + FullTextSearch: + name: "full_text_search" + in: "query" + description: "Фильтр по описанию сделки — параметру description (например, идентификатор сделки на стороне вашей интернет-площадки в ЮKassa, идентификатор покупателя или продавца). От 4 до 128 символов. Пример: 123554642-2432FF344R" + schema: + type: "string" + minLength: 4 + maxLength: 128 + DealIdPath: + name: "deal_id" + in: "path" + required: true + schema: + $ref: "#/components/schemas/DealId" + MetadataInQueryParameter: + name: "metadata" + in: "query" + style: "deepObject" + explode: true + description: "Filter by the metadata object. Strict \"key-value\" pair search: objects that have an exact key and value match in metadata are returned. Restrictions: you can specify a maximum of one \"key-value\" pair, the key name must not be longer than 32 characters, the key value must not be longer than 512 characters, and the data type is a string in UTF-8 format in URL-encoded form. Template: metadata[key]=value Example: metadata%5Boperation_id%5D=e2ab2e1c-776d-4376-aba8-d2099243d1f6" + schema: + type: "object" + maxProperties: 1 + additionalProperties: + type: "string" + maxLength: 512 + PayoutIdPath: + name: "payout_id" + in: "path" + required: true + schema: + $ref: "#/components/schemas/PayoutId" + webhookId: + name: "webhook_id" + in: "path" + required: true + description: "Идентификатор webhook-a." + schema: + type: "string" + minLength: 36 + maxLength: 36 + default: "1da5c87d-0984-50e8-a7f3-8de646dd9ec9" + schemas: + MonetaryAmount: + description: "Сумма в выбранной валюте." + type: "object" + properties: + value: + description: "Сумма в выбранной валюте. Всегда дробное значение. Разделитель дробной части — точка, разделитель тысяч отсутствует. Количество знаков после точки зависит от выбранной валюты. Пример: 1000.00." + type: "string" + example: "1000.00" + currency: + $ref: "#/components/schemas/CurrencyCode" + required: + - "value" + - "currency" + CurrencyCode: + description: "Трехбуквенный код валюты в формате ISO-4217: https://www.iso.org/iso-4217-currency-codes.html. Пример: RUB. Должен соответствовать валюте субаккаунта (recipient.gateway_id), если вы разделяете потоки платежей, и валюте аккаунта (shopId в личном кабинете: https://yookassa.ru/my), если не разделяете." + type: "string" + enum: + - "RUB" + - "EUR" + - "USD" + - "KZT" + - "BYN" + - "UAH" + - "UZS" + - "TRY" + - "INR" + - "MDL" + - "AZN" + - "AMD" + example: "RUB" + Description: + description: "Поле, в котором пользователь может передать описание создаваемого объекта (не более 128 символов). Например: «Оплата заказа № 72»." + type: "string" + maxLength: 128 + example: "Оплата заказа № 72" + ReceiptData: + type: "object" + description: "Data for creating a receipt. The parameter is specified if: you are a company or a sole proprietor, and you use Receipts from YooMoney: https://yookassa.ru/developers/payment-acceptance/receipts/54fz/yoomoney/basics; you are a company or a sole proprietor, and you use the third-party sales register: https://yookassa.ru/developers/payment-acceptance/receipts/54fz/other-services/basics and send data for creating receipts under one of the following scenarios: Payment and receipt at the same time: https://yookassa.ru/developers/payment-acceptance/receipts/54fz/other-services/basics#payment-and-receipt or Payment after receipt: https://yookassa.ru/developers/payment-acceptance/receipts/54fz/other-services/basics#payment-after-receipt." + properties: + customer: + $ref: "#/components/schemas/ReceiptDataCustomer" + items: + description: "List of products in an order. If you use Receipts from YooMoney, you can specify up to 80 items. If you use a third-party online sales register, you can specify up to 100 items." + type: "array" + items: + $ref: "#/components/schemas/ReceiptDataItem" + internet: + description: "Признак проведения платежа в интернете (тег в 54 ФЗ — 1125) — указывает на оплату через интернет. Возможные значения: true — оплата прошла онлайн, через интернет (например, на вашем сайте или в приложении); false — оплата прошла офлайн, при личном взаимодействии (например, в торговой точке или при встрече с курьером). По умолчанию true. Если вы принимаете платежи офлайн, передайте в запросе значение false." + type: "boolean" + tax_system_code: + $ref: "#/components/schemas/TaxSystemCode" + timezone: + description: "Номер часовой зоны для адреса, по которому вы принимаете платежи (тег в 54 ФЗ — 1011). Указывается, только если в чеке есть товары, которые подлежат обязательной маркировке (в items.mark_code_info передается параметр gs_1m, short или fur). Перечень возможных значений: для Чеков от ЮKassa: https://yookassa.ru/developers/payment-acceptance/receipts/54fz/yoomoney/parameters-values#timezone; для сторонних онлайн-касс: https://yookassa.ru/developers/payment-acceptance/receipts/54fz/other-services/parameters-values#timezone." + type: "integer" + minimum: 1 + maximum: 11 + receipt_industry_details: + description: "Отраслевой реквизит чека (тег в 54 ФЗ — 1261). Можно передавать, если используете Чеки от ЮKassa или онлайн-кассу, обновленную до ФФД 1.2." + type: "array" + items: + $ref: "#/components/schemas/IndustryDetails" + receipt_operational_details: + allOf: + - $ref: "#/components/schemas/OperationalDetails" + - description: "Операционный реквизит чека (тег в 54 ФЗ — 1270). Можно передавать, если используете Чеки от ЮKassa или онлайн-кассу, обновленную до ФФД 1.2." + required: + - "items" + GatewayId: + description: "Идентификатор субаккаунта. Используется для разделения потоков платежей в рамках одного аккаунта." + type: "string" + example: "456" + FiscalizationProvider: + description: "The YooMoney’s solution that the store uses to send receipts. Possible values: 54-FZ: Receipts from YooMoney: https://yookassa.ru/developers/payment-acceptance/receipts/54fz/yoomoney/basics: avanpost; 54-FZ: a third-party online sales register: https://yookassa.ru/developers/payment-acceptance/receipts/54fz/other-services/basics (name of an online sales register): a_qsi (aQsi online), atol (ATOL online), business_ru (Business.Ru), digital_kassa (digitalkassa), evotor (Evotor), first_ofd (1-OFD), kit_invest (Kit Invest), komtet (KOMTET Kassa), life_pay (LIFE PAY), mertrade (Mertrade), modul_kassa (ModulKassa), rocket (RocketR), shtrih_m (Orange Data)." + type: "string" + enum: + - "atol" + - "avanpost" + - "a_qsi" + - "business_ru" + - "digital_kassa" + - "evotor" + - "first_ofd" + - "kit_invest" + - "komtet" + - "life_pay" + - "mertrade" + - "modul_kassa" + - "rocket" + - "shtrih_m" + example: "atol" + BankCardHolderName: + description: "Имя владельца карты." + type: "string" + pattern: "[a-zA-Z '-]{0,26}" + example: "John Smith" + CardRequestData: + description: "Данные банковской карты (необходимы, если вы собираете данные карты пользователей на своей стороне)." + type: "object" + properties: + number: + description: "Номер банковской карты." + type: "string" + pattern: "[0-9]{14,19}" + example: "5105105105105100" + expiry_year: + description: "Срок действия, год, YYYY." + type: "string" + pattern: "[0-9]{4}" + example: "2017" + expiry_month: + description: "Срок действия, месяц, MM." + type: "string" + pattern: "[0-9]{2}" + example: "07" + cardholder: + $ref: "#/components/schemas/BankCardHolderName" + required: + - "number" + - "expiry_year" + - "expiry_month" + ReceiptDataCustomer: + type: "object" + description: "Информация о пользователе. Необходимо указать как минимум контактные данные: для Чеков от ЮKassa — электронную почту (customer.email), в остальных случаях — электронную почту (customer.email) или номер телефона (customer.phone)." + properties: + full_name: + description: "Для юрлица — название организации, для ИП и физического лица — ФИО. Если у физлица отсутствует ИНН, в этом же параметре передаются паспортные данные. Не более 256 символов. Можно передавать, если используете Чеки от ЮKassa или онлайн-кассу Orange Data, Атол Онлайн." + type: "string" + example: "Иванов Иван Иванович" + inn: + allOf: + - $ref: "#/components/schemas/RussianItn" + - description: "ИНН пользователя (10 или 12 цифр). Если у физического лица отсутствует ИНН, необходимо передать паспортные данные в параметре full_name. Можно передавать, если используете Чеки от ЮKassa или онлайн-кассу Orange Data, Атол Онлайн." + email: + allOf: + - $ref: "#/components/schemas/Email" + - description: "User's email address for sending the receipt. A required parameter if you use Receipts from YooMoney or a third-party online sales register, and if you don't set the phone parameter." + phone: + allOf: + - $ref: "#/components/schemas/Phone" + - description: "Телефон пользователя для отправки чека. Указывается в формате ITU-T E.164: https://ru.wikipedia.org/wiki/E.164, например 79000000000. Обязательный параметр, если не передан email." + ReceiptDataItem: + type: "object" + description: "Информация о товарной позиции в заказе. Используется для формирования чека." + properties: + description: + $ref: "#/components/schemas/ReceiptItemDescription" + amount: + allOf: + - $ref: "#/components/schemas/MonetaryAmount" + - description: "Цена товара (тег в 54 ФЗ — 1079)." + vat_code: + $ref: "#/components/schemas/ReceiptItemVatCode" + quantity: + $ref: "#/components/schemas/ReceiptItemQuantity" + measure: + $ref: "#/components/schemas/ReceiptItemMeasure" + mark_quantity: + $ref: "#/components/schemas/MarkQuantity" + payment_subject: + $ref: "#/components/schemas/ReceiptItemPaymentSubject" + payment_mode: + $ref: "#/components/schemas/ReceiptItemPaymentMode" + country_of_origin_code: + $ref: "#/components/schemas/ReceiptItemCountryOfOriginCode" + customs_declaration_number: + $ref: "#/components/schemas/ReceiptItemCustomsDeclarationNumber" + excise: + $ref: "#/components/schemas/ReceiptItemExcise" + product_code: + $ref: "#/components/schemas/ReceiptItemProductCode" + planned_status: + $ref: "#/components/schemas/ReceiptItemPlannedStatus" + mark_code_info: + $ref: "#/components/schemas/MarkCodeInfo" + mark_mode: + $ref: "#/components/schemas/MarkMode" + payment_subject_industry_details: + $ref: "#/components/schemas/ReceiptItemPaymentSubjectIndustryDetails" + required: + - "description" + - "quantity" + - "amount" + - "vat_code" + TaxSystemCode: + description: "Система налогообложения магазина (тег в 54 ФЗ — 1055). Для сторонних онлайн-касс: обязательный параметр, если вы используете онлайн-кассу Атол Онлайн, обновленную до ФФД 1.2, или у вас несколько систем налогообложения, в остальных случаях не передается. Перечень возможных значений: https://yookassa.ru/developers/payment-acceptance/receipts/54fz/other-services/parameters-values#tax-systems Для Чеков от ЮKassa: параметр передавать не нужно, ЮKassa его проигнорирует." + type: "integer" + format: "int32" + minimum: 1 + maximum: 6 + IndustryDetails: + description: "Данные отраслевого реквизита." + type: "object" + properties: + federal_id: + description: "Идентификатор федерального органа исполнительной власти (тег в 54 ФЗ — 1262)." + type: "string" + pattern: "(^00[1-9]{1}$)|(^0[1-6]{1}[0-9]{1}$)|(^07[0-3]{1}$)" + example: "001" + document_date: + description: "Дата документа основания (тег в 54 ФЗ — 1263). Передается в формате ISO 8601: https://en.wikipedia.org/wiki/ISO_8601" + type: "string" + format: "date" + example: "2020-11-18" + document_number: + description: "Номер нормативного акта федерального органа исполнительной власти, регламентирующего порядок заполнения реквизита «значение отраслевого реквизита» (тег в 54 ФЗ — 1264)." + type: "string" + maxLength: 32 + value: + description: "Значение отраслевого реквизита (тег в 54 ФЗ — 1265)." + type: "string" + example: "123/43" + maxLength: 256 + required: + - "federal_id" + - "document_date" + - "document_number" + - "value" + OperationalDetails: + description: "Данные операционного реквизита чека" + type: "object" + properties: + operation_id: + description: "Идентификатор операции (тег в 54 ФЗ — 1271). Число от 0 до 255." + type: "integer" + minimum: 0 + maximum: 255 + example: 0 + value: + description: "Данные операции (тег в 54 ФЗ — 1272)." + type: "string" + maxLength: 64 + created_at: + description: "Время создания операции (тег в 54 ФЗ — 1273). Указывается по UTC: https://ru.wikipedia.org/wiki/%D0%92%D1%81%D0%B5%D0%BC%D0%B8%D1%80%D0%BD%D0%BE%D0%B5_%D0%BA%D0%BE%D0%BE%D1%80%D0%B4%D0%B8%D0%BD%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%BE%D0%B5_%D0%B2%D1%80%D0%B5%D0%BC%D1%8F и передается в формате ISO 8601: https://en.wikipedia.org/wiki/ISO_8601. Пример: 2017-11-03T11:52:31.827Z" + type: "string" + format: "date-time" + example: "2020-07-03T11:52:31.827Z" + required: + - "operation_id" + - "value" + - "created_at" + ReceiptItemDescription: + description: "Название товара (от 1 до 128 символов). Тег в 54 ФЗ — 1030." + type: "string" + ReceiptItemVatCode: + description: "Ставка НДС (тег в 54 ФЗ — 1199). Перечень возможных значений: * для Чеков от ЮKassa: https://yookassa.ru/developers/payment-acceptance/receipts/54fz/yoomoney/parameters-values#vat-codes * для сторонних онлайн-касс: https://yookassa.ru/developers/payment-acceptance/receipts/54fz/other-services/parameters-values#vat-codes" + type: "integer" + format: "int32" + minimum: 1 + maximum: 12 + ReceiptItemQuantity: + description: "Product quantity (tag 1023 in 54-FZ). You can set an integer or a decimal value. The decimal separator is a dot; there is no thousands separator. The maximum possible value and the maximum number of digits after the decimal separator (for decimal values) depend on the model of your online sales register. For Receipts from YooMoney, the maximum possible value is 99999.999, with no more than 3 digits after the decimal separator." + type: "number" + example: 1 + ReceiptItemMeasure: + description: "Мера количества предмета расчета (тег в 54 ФЗ — 2108) — единица измерения товара, например штуки, граммы. Обязательный параметр, если используете Чеки от ЮKassa или онлайн-кассу, обновленную до ФФД 1.2. Перечень возможных значений: * для Чеков от ЮKassa: https://yookassa.ru/developers/payment-acceptance/receipts/54fz/yoomoney/parameters-values#measure * для сторонних онлайн-касс: https://yookassa.ru/developers/payment-acceptance/receipts/54fz/other-services/parameters-values#measure" + type: "string" + enum: + - "piece" + - "gram" + - "kilogram" + - "ton" + - "centimeter" + - "decimeter" + - "meter" + - "square_centimeter" + - "square_decimeter" + - "square_meter" + - "milliliter" + - "liter" + - "cubic_meter" + - "kilowatt_hour" + - "gigacalorie" + - "day" + - "hour" + - "minute" + - "second" + - "kilobyte" + - "megabyte" + - "gigabyte" + - "terabyte" + - "another" + example: "piece" + MarkQuantity: + description: "Дробное количество маркированного товара (тег в 54 ФЗ — 1291). Обязательный параметр, если одновременно выполняются эти условия: * вы используете Чеки от ЮKassa или онлайн-кассу, обновленную до ФФД 1.2; * товар нужно маркировать: http://docs.cntd.ru/document/902192509; * поле measure имеет значение piece. Пример: вы продаете поштучно карандаши. Они поставляются пачками по 100 штук с одним кодом маркировки. При продаже одного карандаша нужно в numerator передать 1, а в denominator — 100." + type: "object" + properties: + numerator: + description: "Числитель — количество продаваемых товаров из одной потребительской упаковки (тег в 54 ФЗ — 1293). Не может превышать denominator." + type: "integer" + example: 1 + minimum: 1 + denominator: + description: "Знаменатель — общее количество товаров в потребительской упаковке (тег в 54 ФЗ — 1294)." + type: "integer" + example: 100 + minimum: 1 + required: + - "numerator" + - "denominator" + ReceiptItemPaymentSubject: + description: "Признак предмета расчета (тег в 54 ФЗ — 1212) — это то, за что принимается оплата, например товар, услуга. Перечень возможных значений: * для Чеков от ЮKassa: https://yookassa.ru/developers/payment-acceptance/receipts/54fz/yoomoney/parameters-values#payment-subject * для сторонних онлайн-касс: https://yookassa.ru/developers/payment-acceptance/receipts/54fz/other-services/parameters-values#payment-subject" + type: "string" + enum: + - "commodity" + - "excise" + - "job" + - "service" + - "gambling_bet" + - "gambling_prize" + - "lottery" + - "lottery_prize" + - "intellectual_activity" + - "payment" + - "agent_commission" + - "property_right" + - "non_operating_gain" + - "insurance_premium" + - "sales_tax" + - "resort_fee" + - "composite" + - "another" + - "fine" + - "tax" + - "lien" + - "cost" + - "pension_insurance_without_payouts" + - "pension_insurance_with_payouts" + - "health_insurance_without_payouts" + - "health_insurance_with_payouts" + - "health_insurance" + - "casino" + - "agent_withdrawals" + - "non_marked_excise" + - "marked_excise" + - "marked" + - "non_marked" + ReceiptItemPaymentMode: + description: "Признак способа расчета (тег в 54 ФЗ — 1214) — отражает тип оплаты и факт передачи товара. Пример: покупатель полностью оплачивает товар и сразу получает его. В этом случае нужно передать значение full_payment (полный расчет). Перечень возможных значений: * для Чеков от ЮKassa: https://yookassa.ru/developers/payment-acceptance/receipts/54fz/yoomoney/parameters-values#payment-mode * для сторонних онлайн-касс: https://yookassa.ru/developers/payment-acceptance/receipts/54fz/other-services/parameters-values#payment-mode" + type: "string" + enum: + - "full_prepayment" + - "partial_prepayment" + - "advance" + - "full_payment" + - "partial_payment" + - "credit" + - "credit_payment" + ReceiptItemCountryOfOriginCode: + description: "Код страны происхождения товара по общероссийскому классификатору стран мира (OК (MК (ИСО 3166) 004-97) 025-2001: http://docs.cntd.ru/document/842501280). Тег в 54 ФЗ — 1230. Пример: RU. Можно передавать, если используете онлайн-кассу Orange Data, Кит Инвест." + type: "string" + example: "RU" + ReceiptItemCustomsDeclarationNumber: + description: "Номер таможенной декларации (от 1 до 32 символов). Тег в 54 ФЗ — 1231. Можно передавать, если используете онлайн-кассу Orange Data, Кит Инвест." + type: "string" + minLength: 1 + maxLength: 32 + example: "10714040/140917/0090376" + ReceiptItemExcise: + description: "Сумма акциза товара с учетом копеек (тег в 54 ФЗ — 1229). Десятичное число с точностью до 2 знаков после точки. Можно передавать, если используете онлайн-кассу Orange Data, Кит Инвест." + type: "string" + example: "20.00" + ReceiptItemProductCode: + description: "Product code (tag 1162 in 54-FZ) is a unique number assigned to a unit of product during marking process. Format: hexadecimal number with spaces. Maximum length is 32 bytes. Example: 00 00 00 01 00 21 FA 41 00 23 05 41 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 12 00 AB 00. This parameter is required if both conditions apply: your online sales register is updated to FFD 1.05 or 1.1; the product is subject to mandatory marking: http://docs.cntd.ru/document/902192509. The parameter must not be included in the request if you are using Receipts from YooMoney: https://yookassa.ru/developers/payment-acceptance/receipts/54fz/yoomoney/basics or an online sales register updated to FFD 1.2: https://yookassa.ru/developers/payment-acceptance/receipts/54fz/other-services/marking." + type: "string" + example: "00 00 00 01 00 21 FA 41 00 23 05 41 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 12 00 AB 00" + ReceiptItemPlannedStatus: + description: "Planned product status. Tag in 54-FZ: 2003. To be specified only for products that are subject to mandatory marking (parameter gs_1m, short, or fur is set in items.mark_code_info). Possible values are: for Receipts from YooMoney: https://yookassa.ru/developers/payment-acceptance/receipts/54fz/yoomoney/parameters-values#planned-status; for third party online sales registers: https://yookassa.ru/developers/payment-acceptance/receipts/54fz/other-services/parameters-values#planned-status." + type: "integer" + format: "int32" + minimum: 1 + maximum: 6 + MarkCodeInfo: + description: "Код товара (тег в 54 ФЗ — 1163). Обязательный параметр, если одновременно выполняются эти условия: * вы используете Чеки от ЮKassa или онлайн-кассу, обновленную до ФФД 1.2; * товар нужно маркировать: http://docs.cntd.ru/document/902192509. Должно быть заполнено хотя бы одно поле." + type: "object" + properties: + mark_code_raw: + description: "Код товара в том виде, в котором он был прочитан сканером (тег в 54 ФЗ — 2000). Нужно передавать, если используете онлайн-кассу Orange Data. Пример: 010460406000590021N4N57RTCBUZTQ\\u001d2403054002410161218\\u001d1424010191ffd0\\u001g92tIAF/YVpU4roQS3M/m4z78yFq0nc/WsSmLeX6QkF/YVWwy5IMYAeiQ91Xa2m/fFSJcOkb2N+uUUtfr4n0mOX0Q==" + type: "string" + unknown: + description: "Нераспознанный код товара (тег в 54 ФЗ — 1300)." + type: "string" + minLength: 1 + maxLength: 32 + ean_8: + description: "Код товара в формате EAN-8 (тег в 54 ФЗ — 1301)." + type: "string" + minLength: 8 + maxLength: 8 + ean_13: + description: "Код товара в формате EAN-13 (тег в 54 ФЗ — 1302)." + type: "string" + minLength: 13 + maxLength: 13 + itf_14: + description: "Код товара в формате ITF-14 (тег в 54 ФЗ — 1303)." + type: "string" + minLength: 14 + maxLength: 14 + gs_10: + description: "Код товара в формате GS1.0 (тег в 54 ФЗ — 1304). Можно передавать, если используете онлайн-кассу Orange Data, aQsi, Кит Инвест, АТОЛ Онлайн." + type: "string" + minLength: 1 + maxLength: 38 + gs_1m: + description: "Код товара в формате GS1.M (тег в 54 ФЗ — 1305)." + type: "string" + minLength: 1 + maxLength: 200 + short: + description: "Код товара в формате короткого кода маркировки (тег в 54 ФЗ — 1306)." + type: "string" + minLength: 1 + maxLength: 38 + fur: + description: "Контрольно-идентификационный знак мехового изделия (тег в 54 ФЗ — 1307)." + type: "string" + minLength: 20 + maxLength: 20 + egais_20: + description: "Код товара в формате ЕГАИС-2.0 (тег в 54 ФЗ — 1308)." + type: "string" + minLength: 33 + maxLength: 33 + egais_30: + description: "Код товара в формате ЕГАИС-3.0 (тег в 54 ФЗ — 1309)." + type: "string" + maxLength: 14 + minLength: 14 + MarkMode: + description: "Режим обработки кода маркировки (тег в 54 ФЗ — 2102). Обязательный параметр, если одновременно выполняются эти условия: * вы используете Чеки от ЮKassa или онлайн-кассу Атол Онлайн или BusinessRu, обновленную до ФФД 1.2; * товар нужно маркировать: http://docs.cntd.ru/document/902192509. Должен принимать значение равное «0»." + type: "string" + pattern: "^[0]{1}$" + example: "0" + ReceiptItemPaymentSubjectIndustryDetails: + description: "Отраслевой реквизит предмета расчета (тег в 54 ФЗ — 1260). Можно передавать, если используете Чеки от ЮKassa или онлайн-кассу, обновленную до ФФД 1.2." + type: "array" + items: + $ref: "#/components/schemas/IndustryDetails" + RussianItn: + description: "ИНН пользователя (10 или 12 цифр)." + type: "string" + example: "6321341814" + pattern: "\\d{10}|\\d{12}" + Email: + description: "Адрес электронной почты RFC 5322" + type: "string" + format: "email" + maxLength: 254 + example: "user@yoomoney.ru" + Phone: + description: "Номер телефона в формате ITU-T E.164" + type: "string" + pattern: "[0-9]{4,15}" + example: "79000000000" + SbpBankId: + type: "string" + description: "Идентификатор банка или платежного сервиса в СБП (НСПК)." + maxLength: 12 + pattern: "[a-zA-Z0-9]{12}" + example: "100000000111" + SbpBankBic: + type: "string" + description: "Банковский идентификационный код (БИК) банка или платежного сервиса." + maxLength: 9 + pattern: "\\d{9}" + example: "044525225" + PayoutDestinationDataType: + description: "Способ получения выплаты: * yoo_money — выплаты на кошелек ЮMoney; * bank_card — выплаты на банковскую карту; * sbp — выплаты через СБП на счет в банке или платежном сервисе." + type: "string" + enum: + - "yoo_money" + - "bank_card" + - "sbp" + PayoutDestinationData: + discriminator: + propertyName: "type" + mapping: + yoo_money: "#/components/schemas/PayoutToYooMoneyDestinationData" + bank_card: "#/components/schemas/PayoutToBankCardDestinationData" + sbp: "#/components/schemas/PayoutToSbpDestinationData" + type: "object" + description: "Данные платежного средства, на которое нужно сделать выплату. Обязательный параметр, если не передан payout_token или payment_method_id. Выплаты через СБП доступны только при обычных выплатах и только при выплатах физическим лицам." + properties: + type: + $ref: "#/components/schemas/PayoutDestinationDataType" + required: + - "type" + YooMoneyAccountNumber: + description: "Номер кошелька ЮMoney, например 41001614575714. Длина — от 11 до 33 цифр." + minLength: 11 + maxLength: 33 + type: "string" + example: "41001614575714" + CardDataForPayoutDestination: + description: "Данные банковской карты для выплаты." + type: "object" + properties: + number: + description: "Номер банковской карты. Формат: только цифры, без пробелов. Пример: 5555555555554477" + type: "string" + pattern: "[0-9]{16,19}" + example: "5555555555554477" + required: + - "number" + Recipient: + description: "Получатель платежа. Нужен, если вы разделяете потоки платежей в рамках одного аккаунта или создаете платеж в адрес другого аккаунта." + type: "object" + properties: + gateway_id: + $ref: "#/components/schemas/GatewayId" + required: + - "gateway_id" + PaymentToken: + description: "One-time payment token generated with Checkout.js: https://yookassa.ru/developers/payment-acceptance/integration-scenarios/checkout-js/basics or mobile SDK: https://yookassa.ru/developers/payment-acceptance/integration-scenarios/mobile-sdks/basics." + type: "string" + example: "+u7PDjMTkf08NtD66P6+eYWa2yjU3gsSIhOOO+OWsOg=" + ConfirmationDataType: + description: "Type of payment confirmation scenario by the user. Possible values: redirect - redirecting the user to a ready-made YooMoney page or a partner's page; external - waiting for the user to confirm the payment independently; qr - generating a QR and displaying it on the payment page so that the user can confirm the payment; embedded - displaying the YooMoney payment widget; mobile_application - redirecting the user to the partner's payment app." + type: "string" + enum: + - "redirect" + - "external" + - "qr" + - "embedded" + - "mobile_application" + Locale: + description: "Язык интерфейса, писем и смс, которые будет видеть или получать пользователь. Формат соответствует ISO/IEC 15897: https://en.wikipedia.org/wiki/Locale_(computer_software). Возможные значения: ru_RU, en_US. Регистр важен." + type: "string" + enum: + - "ru_RU" + - "en_US" + example: "ru_RU" + ConfirmationData: + description: "Information required to initiate the selected payment confirmation scenario by the user. More about confirmation scenarios: https://yookassa.ru/developers/payment-acceptance/getting-started/payment-process#user-confirmation" + type: "object" + properties: + type: + $ref: "#/components/schemas/ConfirmationDataType" + locale: + $ref: "#/components/schemas/Locale" + discriminator: + propertyName: "type" + mapping: + redirect: "#/components/schemas/ConfirmationDataRedirect" + external: "#/components/schemas/ConfirmationDataExternal" + qr: "#/components/schemas/ConfirmationDataQr" + embedded: "#/components/schemas/ConfirmationDataEmbedded" + mobile_application: "#/components/schemas/ConfirmationDataMobileApplication" + required: + - "type" + Enforce: + description: "Запрос на проведение платежа с аутентификацией по 3-D Secure. Будет работать, если оплату банковской картой вы по умолчанию принимаете без подтверждения платежа пользователем. В остальных случаях аутентификацией по 3-D Secure будет управлять ЮKassa. Если хотите принимать платежи без дополнительного подтверждения пользователем, напишите вашему менеджеру ЮKassa." + type: "boolean" + default: false + example: true + ReturnUrl: + description: "URL, на который вернется пользователь после подтверждения или отмены платежа на веб-странице. Не более 2048 символов." + type: "string" + maxLength: 2048 + ConfirmationType: + description: "Тип пользовательского процесса подтверждения платежа | - redirect - необходимо направить пользователя на страницу партнера; - external - необходимо подождать, пока пользователь самостоятельно подтвердит платеж; - qr - необходимо сгенерировать QR-код и отобразить его на странице оплаты, чтобы пользователь смог подтвердить платеж; - embedded - необходимо отобразить платежный виджет ЮKassa; - mobile_application - необходимо перенаправить пользователя в приложение партнера для оплаты." + type: "string" + enum: + - "redirect" + - "external" + - "qr" + - "embedded" + - "mobile_application" + example: "redirect" + Confirmation: + description: "Selected payment confirmation scenario. For payments requiring confirmation from the user. More about confirmation scenarios: https://yookassa.ru/developers/payment-acceptance/getting-started/payment-process#user-confirmation" + type: "object" + properties: + type: + $ref: "#/components/schemas/ConfirmationType" + discriminator: + propertyName: "type" + mapping: + redirect: "#/components/schemas/ConfirmationRedirect" + external: "#/components/schemas/ConfirmationExternal" + qr: "#/components/schemas/ConfirmationQr" + embedded: "#/components/schemas/ConfirmationEmbedded" + mobile_application: "#/components/schemas/ConfirmationMobileApplication" + required: + - "type" + ConfirmationUrl: + description: "URL, на который необходимо перенаправить пользователя для подтверждения оплаты." + type: "string" + BankCardFirst6: + description: "Первые 6 цифр номера карты (BIN). При оплате картой, сохраненной в ЮKassa: https://yookassa.ru/developers/payment-acceptance/scenario-extensions/recurring-payments/basics и других сервисах, переданный BIN может не соответствовать значениям last4, expiry_year, expiry_month." + type: "string" + pattern: "[0-9]{6}" + example: "427918" + BankCardLast4: + description: "Последние 4 цифры номера карты." + type: "string" + pattern: "[0-9]{4}" + example: "7918" + BankCardExpiryYear: + description: "Срок действия, год, YYYY." + type: "string" + pattern: "[0-9]{4}" + example: "2017" + BankCardExpiryMonth: + description: "Срок действия, месяц, MM." + type: "string" + example: "07" + BankCardType: + description: "Тип банковской карты. Возможные значения: MasterCard (для карт Mastercard и Maestro), Visa (для карт Visa и Visa Electron), Mir, UnionPay, JCB, AmericanExpress, DinersClub, DiscoverCard, InstaPayment, InstaPaymentTM, Laser, Dankort, Solo, Switch и Unknown." + type: "string" + enum: + - "MasterCard" + - "Visa" + - "Mir" + - "UnionPay" + - "JCB" + - "AmericanExpress" + - "DinersClub" + - "DiscoverCard" + - "InstaPayment" + - "InstaPaymentTM" + - "Laser" + - "Dankort" + - "Solo" + - "Switch" + - "Unknown" + PaymentMethodType: + description: "Payment method code is the type of a means of payment used for paying. More about payment methods: https://yookassa.ru/developers/payment-acceptance/getting-started/payment-methods" + type: "string" + enum: + - "bank_card" + - "cash" + - "alfabank" + - "webmoney" + - "wechat" + - "apple_pay" + - "google_pay" + - "qiwi" + - "installments" + - "yoo_money" + - "sberbank" + - "mobile_balance" + - "b2b_sberbank" + - "tinkoff_bank" + - "sbp" + - "sber_loan" + - "electronic_certificate" + - "sber_bnpl" + example: "bank_card" + PaymentMethodStatus: + type: "string" + description: "Статус проверки и сохранения способа оплаты. Возможные значения: * pending — ожидает действий от пользователя; * active — способ оплаты сохранен, его можно использовать для автоплатежей или выплат; * inactive — способ оплаты не сохранен: пользователь не подтвердил привязку платежного средства или при сохранении способа оплаты возникла ошибка. Чтобы узнать подробности, обратитесь в техническую поддержку ЮKassa." + enum: + - "pending" + - "active" + - "inactive" + example: "active" + PaymentMethodTitle: + description: "Название способа оплаты." + type: "string" + example: "Основная карта" + PaymentMethod: + type: "object" + description: "Payment method: https://yookassa.ru/developers/payment-acceptance/getting-started/payment-methods#all used for this payment." + properties: + type: + $ref: "#/components/schemas/PaymentMethodType" + id: + description: "Payment method ID." + type: "string" + example: "1da5c87d-0984-50e8-a7f3-8de646dd9ec9" + saved: + description: "Признак сохранения способа оплаты для автоплатежей: https://yookassa.ru/developers/payment-acceptance/scenario-extensions/recurring-payments/pay-with-saved. Возможные значения: * true — способ оплаты сохранен для автоплатежей и выплат; * false — способ оплаты не сохранен." + type: "boolean" + example: true + status: + allOf: + - $ref: "#/components/schemas/PaymentMethodStatus" + - description: "Статус проверки и сохранения способа оплаты. Возможные значения: * pending — ожидает действий от пользователя; * active — способ оплаты сохранен, его можно использовать для автоплатежей или выплат; * inactive — способ оплаты не сохранен: возникла ошибка или не было попытки сохранения способа оплаты." + title: + $ref: "#/components/schemas/PaymentMethodTitle" + discriminator: + propertyName: "type" + mapping: + bank_card: "#/components/schemas/PaymentMethodBankCard" + cash: "#/components/schemas/PaymentMethodCash" + qiwi: "#/components/schemas/PaymentMethodQiwi" + alfabank: "#/components/schemas/PaymentMethodAlfabank" + webmoney: "#/components/schemas/PaymentMethodWebmoney" + apple_pay: "#/components/schemas/PaymentMethodApplePay" + google_pay: "#/components/schemas/PaymentMethodGooglePay" + yoo_money: "#/components/schemas/PaymentMethodYooMoney" + sberbank: "#/components/schemas/PaymentMethodSberbank" + mobile_balance: "#/components/schemas/PaymentMethodMobileBalance" + installments: "#/components/schemas/PaymentMethodInstallments" + b2b_sberbank: "#/components/schemas/PaymentMethodB2bSberbank" + tinkoff_bank: "#/components/schemas/PaymentMethodTinkoffBank" + wechat: "#/components/schemas/PaymentMethodWeChat" + sbp: "#/components/schemas/PaymentMethodSbp" + sber_loan: "#/components/schemas/PaymentMethodSberLoan" + electronic_certificate: "#/components/schemas/PaymentMethodElectronicCertificate" + sber_bnpl: "#/components/schemas/PaymentMethodSberBnpl" + required: + - "type" + - "id" + - "saved" + - "status" + BankCardData: + type: "object" + description: "Данные банковской карты." + properties: + first6: + $ref: "#/components/schemas/BankCardFirst6" + last4: + $ref: "#/components/schemas/BankCardLast4" + expiry_year: + $ref: "#/components/schemas/BankCardExpiryYear" + expiry_month: + $ref: "#/components/schemas/BankCardExpiryMonth" + card_type: + $ref: "#/components/schemas/BankCardType" + card_product: + $ref: "#/components/schemas/BankCardProduct" + issuer_country: + $ref: "#/components/schemas/BankCardIssuerCountry" + issuer_name: + $ref: "#/components/schemas/BankCardIssuerName" + source: + $ref: "#/components/schemas/BankCardDataSource" + required: + - "last4" + - "expiry_year" + - "expiry_month" + - "card_type" + BankCardProduct: + description: "Карточный продукт платежной системы, с которым ассоциирована банковская карта. Например, карточные продукты платежной системы Мир: Mir Classic, Mir Classic Credit, MIR Privilege Plus и другие." + type: "object" + properties: + code: + type: "string" + description: "Код карточного продукта. Пример: MCP" + example: "MCP" + name: + type: "string" + description: "Название карточного продукта. Пример: MIR Privilege" + example: "MIR Privilege" + required: + - "code" + BankCardIssuerCountry: + description: "Код страны, в которой выпущена карта. Передается в формате ISO-3166 alpha-2: https://www.iso.org/obp/ui/#iso:pub:PUB500001:en. Пример: RU." + type: "string" + example: "RU" + BankCardIssuerName: + description: "Наименование банка, выпустившего карту." + type: "string" + example: "Sberbank" + BankCardDataSource: + description: "Источник данных банковской карты. Возможные значения: mir_pay, apple_pay, google_pay. Присутствует, если пользователь при оплате выбрал карту, сохраненную в Mir Pay, Apple Pay или Google Pay." + type: "string" + enum: + - "apple_pay" + - "google_pay" + - "mir_pay" + InvoicingBankCardData: + type: "object" + description: "Данные банковской карты." + properties: + first6: + allOf: + - $ref: "#/components/schemas/BankCardFirst6" + - description: "Первые 6 цифр номера карты (BIN)." + last4: + $ref: "#/components/schemas/BankCardLast4" + expiry_year: + $ref: "#/components/schemas/BankCardExpiryYear" + expiry_month: + $ref: "#/components/schemas/BankCardExpiryMonth" + card_type: + $ref: "#/components/schemas/BankCardType" + required: + - "first6" + - "last4" + - "expiry_year" + - "expiry_month" + - "card_type" + SbpPayerBankDetails: + description: "Реквизиты счета, который использовался для оплаты. Обязательный параметр для платежей в статусе succeeded. В остальных случаях может отсутствовать." + type: "object" + properties: + bank_id: + $ref: "#/components/schemas/SbpBankId" + bic: + allOf: + - $ref: "#/components/schemas/SbpBankBic" + - description: "Банковский идентификационный код (БИК) банка или платежного сервиса. Используйте значение этого параметра, чтобы узнать дополнительные сведения об организации в Справочнике БИК: https://cbr.ru/PSystem/payment_system/?utm_source=w&utm_content=page#a_101477. Например, так вы можете определить название банка." + required: + - "bank_id" + - "bic" + PaymentPurpose: + description: "Назначение платежа (не больше 210 символов)." + type: "string" + pattern: "(?s).{1,210}" + example: "Оплата по договору №2143" + B2bSberbankCalculatedVatData: + description: "Данные об НДС, если товар или услуга облагается налогом (в параметре type передано значение calculated)." + allOf: + - $ref: "#/components/schemas/B2bSberbankVatData" + - type: "object" + properties: + rate: + type: "string" + enum: + - "5" + - "7" + - "10" + - "20" + - "22" + description: "Tax rate (in percentage). Possible values: 5, 7, 10, 20 and 22. Starting January 1, 2026, the 22% VAT rate applies instead of the 20% rate." + example: 22 + amount: + allOf: + - $ref: "#/components/schemas/MonetaryAmount" + - description: "Сумма НДС." + required: + - "rate" + - "amount" + B2bSberbankUntaxedVatData: + description: "Данные об НДС, если товар или услуга не облагается налогом (в параметре type передано значение untaxed)." + allOf: + - $ref: "#/components/schemas/B2bSberbankVatData" + - type: "object" + B2bSberbankMixedVatData: + description: "Данные об НДС, если создается платеж на несколько товаров или услуг с разными ставками НДС (в параметре type передано значение mixed)." + allOf: + - $ref: "#/components/schemas/B2bSberbankVatData" + - type: "object" + properties: + amount: + allOf: + - $ref: "#/components/schemas/MonetaryAmount" + - description: "Сумма НДС." + required: + - "amount" + B2bSberbankPayerBankDetails: + description: "Банковские реквизиты плательщика (юридического лица или ИП)." + type: "object" + properties: + full_name: + description: "Полное наименование организации." + type: "string" + maxLength: 800 + example: "Общество с ограниченной ответственностью 'Организация'" + short_name: + description: "Сокращенное наименование организации." + type: "string" + maxLength: 160 + example: "ООО 'Организация'" + address: + description: "Адрес организации." + type: "string" + example: "197111, Российская Федерация, г.Санкт-Петербург, ул.3-й Северовокзальный, д.17, корп./стр.2, кв.16" + maxLength: 500 + inn: + description: "Индивидуальный налоговый номер (ИНН) организации." + type: "string" + pattern: "\\d{10}|\\d{12}" + example: 7728662610 + bank_name: + description: "Наименование банка организации." + type: "string" + minLength: 1 + maxLength: 350 + example: "СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК" + bank_branch: + description: "Отделение банка организации." + type: "string" + minLength: 1 + maxLength: 140 + example: "СЕВЕРО-ЗАПАДНЫЙ БАНК СБЕРБАНКА РФ" + bank_bik: + description: "Банковский идентификационный код (БИК) банка организации." + type: "string" + pattern: "\\d{9}" + example: 9449899 + account: + description: "Номер счета организации." + type: "string" + pattern: "\\d{20}" + example: 40702810355002140000 + kpp: + description: "Код причины постановки на учет (КПП) организации." + type: "string" + pattern: "\\d{9}" + example: 783501610 + required: + - "full_name" + - "short_name" + - "address" + - "inn" + - "bank_name" + - "bank_branch" + - "bank_bik" + - "account" + ElectronicCertificatePayment: + type: "object" + description: "Данные от ФЭС НСПК для оплаты по электронному сертификату." + properties: + amount: + allOf: + - $ref: "#/components/schemas/MonetaryAmount" + - description: "Сумма, которая спишется с электронного сертификата." + basket_id: + allOf: + - $ref: "#/components/schemas/BasketId" + - description: "Идентификатор корзины покупки, сформированной в НСПК." + required: + - "amount" + - "basket_id" + ElectronicCertificateApprovedPaymentArticle: + type: "object" + description: "Товарная позиция в одобренной корзине покупки при оплате по электронному сертификату." + properties: + article_number: + $ref: "#/components/schemas/ElectronicCertificateArticleNumber" + tru_code: + $ref: "#/components/schemas/ElectronicCertificateTruCode" + article_code: + $ref: "#/components/schemas/ElectronicCertificateArticleCode" + certificates: + type: "array" + description: "Список электронных сертификатов, которые используются для оплаты покупки." + items: + $ref: "#/components/schemas/ElectronicCertificate" + required: + - "article_number" + - "tru_code" + - "certificates" + BasketId: + description: "Идентификатор корзины, сформированной в НСПК." + type: "string" + pattern: "[0-9]{24}" + example: "110200010001100000000001" + B2bSberbankVatDataType: + description: "Тип способа расчета НДС." + type: "string" + enum: + - "calculated" + - "untaxed" + - "mixed" + example: "calculated" + B2bSberbankVatData: + discriminator: + propertyName: "type" + mapping: + calculated: "#/components/schemas/B2bSberbankCalculatedVatData" + untaxed: "#/components/schemas/B2bSberbankUntaxedVatData" + mixed: "#/components/schemas/B2bSberbankMixedVatData" + description: "Данные о налоге на добавленную стоимость (НДС). Платеж может облагаться или не облагаться НДС. Товары могут облагаться по одной ставке НДС или по разным." + type: "object" + properties: + type: + $ref: "#/components/schemas/B2bSberbankVatDataType" + required: + - "type" + ElectronicCertificateArticleNumber: + description: "Порядковый номер товара в корзине. От 1 до 999 включительно." + type: "integer" + format: "int32" + minimum: 1 + maximum: 999 + example: 1 + ElectronicCertificateTruCode: + description: "Код ТРУ. 30 символов, две группы цифр, разделенные точкой. Формат: NNNNNNNNN.NNNNNNNNNYYYYMMMMZZZ, где NNNNNNNNN.NNNNNNNNN — код вида ТРУ по Перечню ТРУ: https://esnsi.gosuslugi.ru/classifiers/10616/data?pg=1&p=1, YYYY — код производителя, MMMM — код модели, ZZZ — код страны производителя. Пример: 329921120.06001010200080001643 Как сформировать код ТРУ: https://yookassa.ru/developers/payment-acceptance/integration-scenarios/manual-integration/other/electronic-certificate/basics#payments-preparations-tru-code" + example: "329921120.06001010200080001643" + type: "string" + minLength: 30 + maxLength: 30 + ElectronicCertificateArticleCode: + description: "Код товара в вашей системе. Максимум 128 символов." + example: "432" + type: "string" + maxLength: 128 + ElectronicCertificate: + type: "object" + description: "Описание используемого электронного сертификата." + properties: + certificate_id: + type: "string" + description: "Идентификатор сертификата. От 20 до 30 символов." + minLength: 20 + maxLength: 30 + tru_quantity: + type: "integer" + description: "Количество единиц товара, которое одобрили для оплаты по этому электронному сертификату." + available_compensation: + allOf: + - $ref: "#/components/schemas/MonetaryAmount" + - description: "Максимально допустимая сумма, которую может покрыть электронный сертификат для оплаты одной единицы товара. Пример: сертификат может компенсировать максимум 1000 рублей для оплаты этого товара." + applied_compensation: + allOf: + - $ref: "#/components/schemas/MonetaryAmount" + - description: "Сумма, которую одобрили для оплаты по сертификату за одну единицу товара. Пример: из 1000 рублей одобрили 500 рублей для оплаты по сертификату." + required: + - "certificate_id" + - "tru_quantity" + - "available_compensation" + - "applied_compensation" + Rrn: + type: "string" + description: "Retrieval Reference Number is a identifier of a bank transaction." + example: "603668680243" + ThreeDSecureDetails: + type: "object" + description: "Information about user’s 3‑D Secure authentication for confirming the payment." + properties: + applied: + type: "boolean" + description: "Information on whether the 3-D Secure authentication form is displayed to the user for confirming the payment or not. Possible values: true: YooMoney displayed the form to the user, so that they could complete 3-D Secure authentication; false: payment was processed without 3-D Secure authentication." + example: true + required: + - "applied" + AccountId: + description: "Идентификатор магазина в ЮKassa." + type: "string" + example: "123" + TransferStatus: + description: "Status of the money distribution between stores. Possible values: pending, waiting_for_capture, succeeded, canceled." + type: "string" + enum: + - "pending" + - "waiting_for_capture" + - "succeeded" + - "canceled" + example: "succeeded" + Metadata: + type: "object" + description: "Любые дополнительные данные, которые нужны вам для работы (например, ваш внутренний идентификатор заказа). Передаются в виде набора пар «ключ-значение» и возвращаются в ответе от ЮKassa. Ограничения: максимум 16 ключей, имя ключа не больше 32 символов, значение ключа не больше 512 символов, тип данных — строка в формате UTF-8." + maxProperties: 16 + additionalProperties: + type: "string" + nullable: true + DealId: + description: "Идентификатор сделки." + minLength: 36 + maxLength: 50 + type: "string" + example: "dl-d68d2fe4-2abb-47e5-8112-32e28f87fb52" + SettlementPaymentArray: + type: "array" + description: "Данные о распределении денег." + items: + oneOf: + - $ref: "#/components/schemas/SettlementPayoutPayment" + discriminator: + propertyName: "type" + SettlementPayoutPayment: + allOf: + - $ref: "#/components/schemas/SettlementPaymentItem" + - type: "object" + SettlementPaymentItem: + type: "object" + description: "Данные о распределении денег." + properties: + type: + $ref: "#/components/schemas/SettlementItemType" + amount: + allOf: + - $ref: "#/components/schemas/MonetaryAmount" + - description: "Сумма вознаграждения продавца." + discriminator: + propertyName: "type" + mapping: + payout: "#/components/schemas/SettlementPayoutPayment" + required: + - "type" + - "amount" + SettlementItemType: + description: "Transaction type." + type: "string" + enum: + - "payout" + example: "payout" + PaymentId: + type: "string" + description: "Идентификатор платежа в ЮKassa." + minLength: 36 + maxLength: 36 + example: "1da5c87d-0984-50e8-a7f3-8de646dd9ec9" + PaymentStatus: + description: "Payment status. Possible values: pending, waiting_for_capture, succeeded, and canceled. More about the life cycle of a payment: https://yookassa.ru/developers/payment-acceptance/getting-started/payment-process#lifecycle" + type: "string" + enum: + - "pending" + - "waiting_for_capture" + - "succeeded" + - "canceled" + example: "succeeded" + PaymentMethodBankCard: + description: "Оплата банковской картой." + allOf: + - $ref: "#/components/schemas/PaymentMethod" + - type: "object" + properties: + card: + $ref: "#/components/schemas/BankCardData" + PaymentMethodCash: + description: "Payments in cash via payment kiosks." + allOf: + - $ref: "#/components/schemas/PaymentMethod" + - type: "object" + PaymentMethodQiwi: + description: "Оплата из кошелька QIWI Wallet." + allOf: + - $ref: "#/components/schemas/PaymentMethod" + - type: "object" + PaymentMethodAlfabank: + description: "Оплата через Альфа-Клик." + allOf: + - $ref: "#/components/schemas/PaymentMethod" + - type: "object" + properties: + login: + description: "Логин пользователя в Альфа-Клике (привязанный телефон или дополнительный логин)." + type: "string" + PaymentMethodWebmoney: + description: "Оплата из кошелька WebMoney." + allOf: + - $ref: "#/components/schemas/PaymentMethod" + - type: "object" + PaymentMethodSberbank: + description: "Оплата через SberPay." + allOf: + - $ref: "#/components/schemas/PaymentMethod" + - type: "object" + properties: + phone: + description: "Телефон пользователя, на который зарегистрирован аккаунт в SberPay. Указывается в формате ITU-T E.164: https://ru.wikipedia.org/wiki/E.164, например 79000000000." + type: "string" + pattern: "[0-9]{4,15}" + example: "79000000000" + card: + $ref: "#/components/schemas/InvoicingBankCardData" + PaymentMethodTinkoffBank: + description: "Оплата через T-Pay." + allOf: + - $ref: "#/components/schemas/PaymentMethod" + - type: "object" + properties: + card: + $ref: "#/components/schemas/InvoicingBankCardData" + PaymentMethodYooMoney: + description: "Оплата из кошелька ЮMoney." + allOf: + - $ref: "#/components/schemas/PaymentMethod" + - type: "object" + properties: + account_number: + description: "Номер кошелька ЮMoney, из которого заплатил пользователь." + type: "string" + pattern: "[0-9]{11,33}" + example: "41001184120504" + PaymentMethodApplePay: + description: "Оплата через Apple Pay." + allOf: + - $ref: "#/components/schemas/PaymentMethod" + - type: "object" + PaymentMethodGooglePay: + description: "Оплата через Google Pay." + allOf: + - $ref: "#/components/schemas/PaymentMethod" + - type: "object" + PaymentMethodMobileBalance: + description: "Оплата с баланса мобильного телефона." + allOf: + - $ref: "#/components/schemas/PaymentMethod" + - type: "object" + PaymentMethodInstallments: + description: "Оплата через сервис «Заплатить по частям» (в кредит или рассрочку)." + allOf: + - $ref: "#/components/schemas/PaymentMethod" + - type: "object" + PaymentMethodB2bSberbank: + description: "Оплата через Сбербанк Бизнес Онлайн." + allOf: + - $ref: "#/components/schemas/PaymentMethod" + - type: "object" + properties: + payment_purpose: + $ref: "#/components/schemas/PaymentPurpose" + vat_data: + oneOf: + - $ref: "#/components/schemas/B2bSberbankCalculatedVatData" + - $ref: "#/components/schemas/B2bSberbankUntaxedVatData" + - $ref: "#/components/schemas/B2bSberbankMixedVatData" + discriminator: + propertyName: "type" + payer_bank_details: + $ref: "#/components/schemas/B2bSberbankPayerBankDetails" + required: + - "payment_purpose" + - "vat_data" + PaymentMethodWeChat: + description: "Оплата через WeChat." + allOf: + - $ref: "#/components/schemas/PaymentMethod" + - type: "object" + PaymentMethodSbp: + description: "Оплата через СБП (Система быстрых платежей ЦБ РФ)." + allOf: + - $ref: "#/components/schemas/PaymentMethod" + - type: "object" + properties: + sbp_operation_id: + description: "Идентификатор операции в СБП (НСПК). Пример: 1027088AE4CB48CB81287833347A8777 Обязательный параметр для платежей в статусе succeeded. В остальных случаях может отсутствовать." + type: "string" + example: "1027088AE4CB48CB81287833347A8777" + payer_bank_details: + $ref: "#/components/schemas/SbpPayerBankDetails" + PaymentMethodSberLoan: + description: "Оплата в кредит или рассрочку от СберБанка." + allOf: + - $ref: "#/components/schemas/PaymentMethod" + - type: "object" + properties: + loan_option: + description: "Тариф кредита, который пользователь выбрал при оплате. Возможные значения: loan — кредит; installments_XX — рассрочка, где XX — количество месяцев для выплаты рассрочки. Например, installments_3 — рассрочка на 3 месяца. Присутствует для платежей в статусе waiting_for_capture и succeeded." + type: "string" + example: "installments_3" + minLength: 1 + discount_amount: + allOf: + - $ref: "#/components/schemas/MonetaryAmount" + - description: "Сумма скидки для рассрочки. Присутствует для платежей в статусе waiting_for_capture и succeeded, если пользователь выбрал рассрочку." + suspended_until: + description: "Время, когда заканчивается период охлаждения: https://yookassa.ru/docs/support/payments/credit-purchases-by-sberbank-with-cooling-off кредита или рассрочки. Указывается по UTC: https://ru.wikipedia.org/wiki/%D0%92%D1%81%D0%B5%D0%BC%D0%B8%D1%80%D0%BD%D0%BE%D0%B5_%D0%BA%D0%BE%D0%BE%D1%80%D0%B4%D0%B8%D0%BD%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%BE%D0%B5_%D0%B2%D1%80%D0%B5%D0%BC%D1%8F и передается в формате ISO 8601: https://en.wikipedia.org/wiki/ISO_8601. Присутствует для платежей в статусе pending, которые по закону: https://www.consultant.ru/document/cons_doc_LAW_498604/ попадают под процедуру охлаждения." + type: "string" + format: "date-time" + example: "2017-11-03T11:52:31.827Z" + PaymentMethodElectronicCertificate: + description: "Оплата по электронному сертификату." + allOf: + - $ref: "#/components/schemas/PaymentMethod" + - type: "object" + properties: + card: + allOf: + - $ref: "#/components/schemas/BankCardData" + - description: "Данные банковской карты «Мир»." + electronic_certificate: + $ref: "#/components/schemas/ElectronicCertificatePayment" + articles: + type: "array" + description: "Одобренная корзина покупки — список товаров, одобренных к оплате по электронному сертификату. Присутствует только при оплате на готовой странице ЮKassa: https://yookassa.ru/developers/payment-acceptance/integration-scenarios/manual-integration/other/electronic-certificate/ready-made-payment-form." + items: + $ref: "#/components/schemas/ElectronicCertificateApprovedPaymentArticle" + PaymentMethodSberBnpl: + description: "Оплата через сервис «Плати частями»." + allOf: + - $ref: "#/components/schemas/PaymentMethod" + - type: "object" + ConfirmationRedirect: + allOf: + - $ref: "#/components/schemas/Confirmation" + - type: "object" + properties: + enforce: + $ref: "#/components/schemas/Enforce" + return_url: + $ref: "#/components/schemas/ReturnUrl" + confirmation_url: + $ref: "#/components/schemas/ConfirmationUrl" + required: + - "confirmation_url" + ConfirmationExternal: + type: "object" + allOf: + - $ref: "#/components/schemas/Confirmation" + ConfirmationQr: + allOf: + - $ref: "#/components/schemas/Confirmation" + - type: "object" + properties: + confirmation_data: + description: "Данные для генерации QR-кода." + type: "string" + required: + - "confirmation_data" + ConfirmationEmbedded: + allOf: + - $ref: "#/components/schemas/Confirmation" + - type: "object" + properties: + confirmation_token: + type: "string" + description: "Токен для инициализации платежного виджета ЮKassa: https://yookassa.ru/developers/payment-acceptance/integration-scenarios/widget/basics." + example: "ct-22e12f66-000f-5000-8000-18db351245c7" + required: + - "confirmation_token" + ConfirmationMobileApplication: + allOf: + - $ref: "#/components/schemas/Confirmation" + - type: "object" + properties: + confirmation_url: + allOf: + - $ref: "#/components/schemas/ConfirmationUrl" + - description: "Диплинк на мобильное приложение, в котором пользователь подтверждает платеж." + type: "string" + required: + - "confirmation_url" + Test: + description: "Признак тестовой операции." + type: "boolean" + example: false + ReceiptRegistrationStatus: + type: "string" + enum: + - "pending" + - "succeeded" + - "canceled" + example: "succeeded" + PaymentCancellationDetails: + type: "object" + description: "Commentary to the canceled status: who and why canceled the payment. More about canceled payments: https://yookassa.ru/developers/payment-acceptance/after-the-payment/declined-payments" + properties: + party: + type: "string" + description: "The participant of the payment process that made the decision to cancel the payment. Possible values are yoo_money, payment_network, and merchant. More about initiators of payment cancelation: https://yookassa.ru/developers/payment-acceptance/after-the-payment/declined-payments#cancellation-details-party" + enum: + - "yoo_money" + - "payment_network" + - "merchant" + reason: + type: "string" + description: "Reason behind the cancelation. The list and descriptions of possible values: https://yookassa.ru/developers/payment-acceptance/after-the-payment/declined-payments#cancellation-details-reason" + example: "insufficient_funds" + enum: + - "3d_secure_failed" + - "call_issuer" + - "card_expired" + - "payment_method_limit_exceeded" + - "payment_method_restricted" + - "country_forbidden" + - "general_decline" + - "fraud_suspected" + - "identification_required" + - "insufficient_funds" + - "invalid_card_number" + - "invalid_csc" + - "issuer_unavailable" + - "canceled_by_merchant" + - "permission_revoked" + - "internal_timeout" + - "expired_on_confirmation" + - "expired_on_capture" + - "unsupported_mobile_operator" + - "deal_expired" + required: + - "party" + - "reason" + AuthorizationDetails: + type: "object" + description: "Payment authorization details when paying by a bank card. Available only for following payment methods: bank card, Mir Pay, SberPay, T-Pay." + properties: + rrn: + $ref: "#/components/schemas/Rrn" + auth_code: + type: "string" + description: "Authorization code. Provided by the issuer to confirm authorization." + example: "062467" + three_d_secure: + $ref: "#/components/schemas/ThreeDSecureDetails" + required: + - "three_d_secure" + Transfer: + type: "object" + description: "Information about money distribution: the amounts of transfers and the stores to be transferred to. Specified if you use Split payments: https://yookassa.ru/developers/solutions-for-platforms/split-payments/basics." + properties: + account_id: + allOf: + - $ref: "#/components/schemas/AccountId" + - description: "ID of the store in favor of which you're accepting the receipt. Provided by YooMoney, displayed in the Sellers: https://yookassa.ru/my/marketplace/sellers section of your Merchant Profile (shopId column)." + amount: + allOf: + - $ref: "#/components/schemas/MonetaryAmount" + - description: "Amount to be transferred to the store." + - type: "object" + status: + $ref: "#/components/schemas/TransferStatus" + platform_fee_amount: + allOf: + - $ref: "#/components/schemas/MonetaryAmount" + - description: "Commission for sold products or services charged in your favor." + - type: "object" + description: + description: "Transaction description (up to 128 characters), which the seller will see in the YooMoney Merchant Profile. Example: \"Marketplace order No. 72\"." + type: "string" + maxLength: 128 + example: "Marketplace order No. 72" + metadata: + $ref: "#/components/schemas/Metadata" + required: + - "account_id" + - "amount" + - "status" + PaymentDealInfo: + type: "object" + properties: + id: + $ref: "#/components/schemas/DealId" + settlements: + $ref: "#/components/schemas/SettlementPaymentArray" + required: + - "id" + - "settlements" + MerchantCustomerId: + description: "Идентификатор покупателя в вашей системе, например электронная почта или номер телефона. Не более 200 символов." + type: "string" + maxLength: 200 + example: "user@test.merchant" + InvoiceId: + description: "Invoice ID in YooMoney." + type: "string" + minLength: 39 + maxLength: 39 + example: "in-e44e8088-bd73-43b1-959a-954f3a7d0c54" + PaymentMethodId: + description: "Saved payment method: https://yookassa.ru/developers/payment-acceptance/scenario-extensions/recurring-payments/basics's ID." + type: "string" + example: "1da5c87d-0984-50e8-a7f3-8de646dd9ec9" + PaymentMethodDataBankCard: + description: "Данные для оплаты банковской картой." + allOf: + - $ref: "#/components/schemas/PaymentMethodData" + - type: "object" + properties: + card: + $ref: "#/components/schemas/CardRequestDataWithCsc" + PaymentMethodDataCash: + description: "Данные для оплаты наличными в терминалах России или СНГ." + allOf: + - $ref: "#/components/schemas/PaymentMethodData" + - type: "object" + properties: + phone: + description: "Телефон пользователя, на который придет смс с кодом платежа (для внесения наличных). Указывается в формате ITU-T E.164: https://ru.wikipedia.org/wiki/E.164, например 79000000000. Поле можно оставить пустым: пользователь сможет заполнить его при оплате на стороне ЮKassa." + type: "string" + pattern: "[0-9]{4,15}" + example: "79000000000" + PaymentMethodDataSberbank: + description: "Данные для оплаты через SberPay." + allOf: + - $ref: "#/components/schemas/PaymentMethodData" + - type: "object" + properties: + phone: + description: "Телефон пользователя, на который зарегистрирован аккаунт в SberPay. Необходим для подтверждения оплаты по смс (сценарий подтверждения external). Указывается в формате ITU-T E.164: https://ru.wikipedia.org/wiki/E.164, например 79000000000." + type: "string" + pattern: "[0-9]{4,15}" + example: "79000000000" + PaymentMethodDataTinkoffBank: + description: "Данные для оплаты через T-Pay." + allOf: + - $ref: "#/components/schemas/PaymentMethodData" + - type: "object" + PaymentMethodDataYooMoney: + description: "Data for processing a payment made via the YooMoney wallet." + allOf: + - $ref: "#/components/schemas/PaymentMethodData" + - type: "object" + PaymentMethodDataMobileBalance: + description: "Данные для оплаты с баланса мобильного телефона." + allOf: + - $ref: "#/components/schemas/PaymentMethodData" + - type: "object" + properties: + phone: + description: "Телефон, с баланса которого осуществляется платеж. Указывается в формате ITU-T E.164: https://ru.wikipedia.org/wiki/E.164, например 79000000000." + type: "string" + pattern: "[0-9]{4,15}" + example: "79000000000" + required: + - "phone" + PaymentMethodDataB2bSberbank: + description: "Данные для оплаты через СберБанк Бизнес Онлайн." + allOf: + - $ref: "#/components/schemas/PaymentMethodData" + - type: "object" + properties: + payment_purpose: + $ref: "#/components/schemas/PaymentPurpose" + vat_data: + oneOf: + - $ref: "#/components/schemas/B2bSberbankCalculatedVatData" + - $ref: "#/components/schemas/B2bSberbankUntaxedVatData" + - $ref: "#/components/schemas/B2bSberbankMixedVatData" + discriminator: + propertyName: "type" + required: + - "payment_purpose" + - "vat_data" + PaymentMethodDataSbp: + description: "Данные для оплаты через СБП" + allOf: + - $ref: "#/components/schemas/PaymentMethodData" + - type: "object" + PaymentMethodDataSberLoan: + description: "Данные для оплаты в кредит или рассрочку от СберБанка." + allOf: + - $ref: "#/components/schemas/PaymentMethodData" + - type: "object" + PaymentMethodDataElectronicCertificate: + description: "Данные для оплаты по электронному сертификату." + allOf: + - $ref: "#/components/schemas/PaymentMethodData" + - type: "object" + properties: + card: + $ref: "#/components/schemas/CardRequestDataWithCsc" + electronic_certificate: + $ref: "#/components/schemas/ElectronicCertificatePaymentData" + articles: + description: "Корзина покупки (в терминах НСПК) — список товаров, которые можно оплатить по сертификату. Необходимо передавать только при оплате на готовой странице ЮKassa: https://yookassa.ru/developers/payment-acceptance/integration-scenarios/manual-integration/other/electronic-certificate/ready-made-payment-form." + type: "array" + items: + $ref: "#/components/schemas/ElectronicCertificateArticle" + PaymentMethodDataSberBnpl: + description: "Данные для оплаты через сервис «Плати частями»." + allOf: + - $ref: "#/components/schemas/PaymentMethodData" + - type: "object" + properties: + phone: + allOf: + - $ref: "#/components/schemas/Phone" + - description: "The user's phone number. Sent to the partner and used for authorization in the \"Pay in installments\" service. Maximum 15 characters. Specified in the ITU-T E.164: https://ru.wikipedia.org/wiki/E.164 format. Example: 79000000000." + ConfirmationDataRedirect: + allOf: + - $ref: "#/components/schemas/ConfirmationData" + - type: "object" + properties: + enforce: + $ref: "#/components/schemas/Enforce" + return_url: + $ref: "#/components/schemas/ReturnUrl" + required: + - "return_url" + ConfirmationDataExternal: + type: "object" + allOf: + - $ref: "#/components/schemas/ConfirmationData" + - type: "object" + ConfirmationDataQr: + allOf: + - $ref: "#/components/schemas/ConfirmationData" + - type: "object" + properties: + return_url: + allOf: + - $ref: "#/components/schemas/ReturnUrl" + - description: "The address of the page that will be open to the user when they've confirmed or cancelled the payment in the bank app. For example, if you need to return the user to the website, you may set the URL, or the deeplink for redirecting to the mobile app. The URL should conform to the RFC-3986: https://www.ietf.org/rfc/rfc3986.txt standard. Maximum 2048 characters. Available only for payments via the Faster Payments System: https://yookassa.ru/developers/payment-acceptance/integration-scenarios/manual-integration/other/sbp." + ConfirmationDataEmbedded: + allOf: + - $ref: "#/components/schemas/ConfirmationData" + - type: "object" + ConfirmationDataMobileApplication: + allOf: + - $ref: "#/components/schemas/ConfirmationData" + - type: "object" + properties: + return_url: + allOf: + - $ref: "#/components/schemas/ReturnUrl" + - description: "URL or deep link, to which user will return after confirming or canceling the payment in the app. Send the URL if the payment was made via the mobile version of the website, or send the deep link if the payment was made via mobile app. Maximum 255 characters for payments made via SberPay: https://yookassa.ru/developers/payment-acceptance/integration-scenarios/manual-integration/sberpay#create-payment-mobile-application. Maximum 2,048 characters for other payment methods: https://yookassa.ru/developers/payment-acceptance/getting-started/payment-methods#all." + required: + - "return_url" + SavePaymentMethodAttribute: + description: "Сохранение платежных данных для проведения автоплатежей: https://yookassa.ru/developers/payment-acceptance/scenario-extensions/recurring-payments/basics. Возможные значения: * true — сохранить способ оплаты (сохранить платежные данные); * false — провести платеж без сохранения способа оплаты. Доступно только после согласования с менеджером ЮKassa." + type: "boolean" + default: false + example: true + Capture: + description: "Автоматический прием: https://yookassa.ru/developers/payment-acceptance/getting-started/payment-process#capture-true поступившего платежа. Возможные значения: * true — оплата списывается сразу (платеж в одну стадию); * false — оплата холдируется и списывается по вашему запросу (платеж в две стадии: https://yookassa.ru/developers/payment-acceptance/getting-started/payment-process#capture-and-cancel). По умолчанию false." + type: "boolean" + default: false + example: true + ClientIp: + description: "IPv4 или IPv6-адрес пользователя. Если не указан, используется IP-адрес TCP-подключения." + type: "string" + Airline: + description: "Объект с данными для продажи авиабилетов: https://yookassa.ru/developers/payment-acceptance/scenario-extensions/airline-tickets. Используется только для платежей банковской картой." + type: "object" + properties: + ticket_number: + description: "Unique ticket number. If you already know the ticket number during payment creation, ticket_number is a required parameter. If you don't, specify booking_reference instead of ticket_number." + type: "string" + minLength: 1 + maxLength: 150 + pattern: "[0-9]{1,150}" + example: "5554916004417" + booking_reference: + description: "Booking reference number, required if ticket_number is not specified." + type: "string" + minLength: 1 + maxLength: 20 + example: "IIIKRV" + passengers: + description: "List of passengers." + type: "array" + minItems: 0 + maxItems: 500 + items: + $ref: "#/components/schemas/AirlinePassenger" + legs: + description: "List of flight legs." + type: "array" + minItems: 0 + maxItems: 4 + items: + $ref: "#/components/schemas/AirlineLeg" + TransferDataPayment: + allOf: + - $ref: "#/components/schemas/TransferData" + - type: "object" + properties: + description: + description: "Transaction description (up to 128 characters), which the seller will see in the YooMoney Merchant Profile. Example: \"Marketplace order No. 72\"." + type: "string" + maxLength: 128 + example: "Marketplace order No. 72" + metadata: + $ref: "#/components/schemas/Metadata" + PaymentOrderDataUtilities: + description: "Платежное поручение — распоряжение на перевод банку для оплаты жилищно-коммунальных услуг (ЖКУ), сведения о платеже для регистрации в ГИС ЖКХ. Необходимо передавать при оплате ЖКУ: https://yookassa.ru/developers/payment-acceptance/scenario-extensions/utility-payments. Кроме параметров, отмеченных как обязательные, должен быть передан как минимум один параметр из этого списка: payment_document_id, payment_document_number, account_number, unified_account_number или service_id." + allOf: + - $ref: "#/components/schemas/PaymentOrderData" + - type: "object" + properties: + amount: + allOf: + - $ref: "#/components/schemas/MonetaryAmount" + - description: "Сумма платежного поручения — сумма, которую пользователь переводит получателю платежа. Равна общей сумме платежа." + payment_purpose: + allOf: + - $ref: "#/components/schemas/PaymentPurpose" + - description: "Payment purpose (no more than 210 characters). The payment purpose should be specified according to the recommendations from Letter of the Bank of Russia No. IN-04-45|12 dated 22.02.2018: https://my.dom.gosuslugi.ru/filestore/publicDownloadServlet?context=contentmanagement&uid=ef9a477a-2beb-4212-be30-aed231160db1&mode=view. Example: Payment for housing and utilities;ELS (Single Personal Account) 80KX478547;PRD (Payment Period) 12.2024;Ivanov Ivan;Moscow, 1 Flotskaya ulitsa, apartment 1" + recipient: + allOf: + - $ref: "#/components/schemas/PaymentOrderRecipientUtilities" + - description: "Получатель платежа — государственная или коммерческая организация, которая предоставляет услуги или является информационным посредником, который собирает и обрабатывает начисления от других поставщиков услуг." + kbk: + $ref: "#/components/schemas/Kbk" + oktmo: + $ref: "#/components/schemas/Oktmo" + payment_period: + $ref: "#/components/schemas/PaymentPeriod" + payment_document_id: + type: "string" + description: "Идентификатор платежного документа. Обязательный параметр, если не передан payment_document_number, account_number, unified_account_number или service_id." + minLength: 18 + maxLength: 18 + example: "34СТ185329-01-2352" + payment_document_number: + type: "string" + description: "Номер платежного документа на стороне поставщика ЖКУ. Обязательный параметр, если не передан payment_document_id, account_number, unified_account_number или service_id." + minLength: 1 + maxLength: 30 + pattern: "(.)([0-9а-яА-Яa-zA-Z]+)(.)" + account_number: + type: "string" + description: "Номер лицевого счета на стороне поставщика ЖКУ. Обязательный параметр, если не передан payment_document_id, payment_document_number, unified_account_number или service_id." + minLength: 1 + maxLength: 30 + pattern: "(.)([0-9а-яА-Яa-zA-Z]+)(.)" + unified_account_number: + type: "string" + description: "Единый лицевой счет. Уникальный идентификатор в ГИС ЖКХ, который характеризует связку «собственник-помещение». Обязательный параметр, если не передан payment_document_id, payment_document_number, account_number или service_id." + minLength: 10 + maxLength: 10 + example: "60АА000593" + service_id: + type: "string" + description: "Идентификатор жилищно-коммунальной услуги (ЖКУ). Обязательный параметр, если не передан payment_document_id, payment_document_number, account_number или unified_account_number." + minLength: 13 + maxLength: 13 + example: "34СТ185329-01" + required: + - "amount" + - "payment_purpose" + - "recipient" + ReceiverMobileBalance: + description: "Реквизиты для пополнения баланса телефона." + allOf: + - $ref: "#/components/schemas/Receiver" + - type: "object" + properties: + phone: + allOf: + - $ref: "#/components/schemas/Phone" + - {} + - description: "Номер телефона для пополнения. Максимум 15 символов. Указывается в формате ITU-T E.164: https://ru.wikipedia.org/wiki/E.164. Пример: 79000000000." + required: + - "phone" + ReceiverDigitalWallet: + description: "Реквизиты для пополнения баланса электронного кошелька." + allOf: + - $ref: "#/components/schemas/Receiver" + - type: "object" + properties: + account_number: + description: "Идентификатор электронного кошелька для пополнения. Максимум 20 символов." + type: "string" + maxLength: 20 + example: "N41001184120504" + required: + - "account_number" + ReceiverBankAccount: + description: "Реквизиты для пополнения банковского счета." + allOf: + - $ref: "#/components/schemas/Receiver" + - type: "object" + properties: + account_number: + description: "Номер банковского счета. Формат — 20 символов." + type: "string" + maxLength: 20 + pattern: "\\d{20}" + example: "40817810099910004312" + bic: + description: "Банковский идентификационный код (БИК) банка, в котором открыт счет. Формат — 9 символов." + type: "string" + maxLength: 9 + pattern: "\\d{9}" + example: "044525974" + required: + - "account_number" + - "bic" + PaymentOverviewStatementData: + description: "Квитанция по платежу." + allOf: + - $ref: "#/components/schemas/Statement" + - type: "object" + properties: + delivery_method: + oneOf: + - $ref: "#/components/schemas/PaymentOverviewStatementEmailDeliveryMethod" + required: + - "delivery_method" + Payment: + type: "object" + description: "Payment object (Payment) contains the relevant information about the payment." + properties: + id: + $ref: "#/components/schemas/PaymentId" + status: + $ref: "#/components/schemas/PaymentStatus" + amount: + allOf: + - $ref: "#/components/schemas/MonetaryAmount" + - description: "Payment amount. Sometimes YooMoney's partners charge additional commission from the users that is not included in this amount. The amount is specified with the currency code. It should match the currency of your subaccount (recipient.gateway_id) if you separate payment flows, or the currency of the account (shopId in the Merchant Profile) if you don't." + income_amount: + allOf: + - $ref: "#/components/schemas/MonetaryAmount" + - description: "Сумма платежа, которую получит магазин, — значение amount за вычетом комиссии ЮKassa и суммы НДС с этой комиссии. Если вы партнер: https://yookassa.ru/developers/solutions-for-platforms/partners-api/basics и для аутентификации запросов используете OAuth-токен, запросите у магазина право: https://yookassa.ru/developers/solutions-for-platforms/partners-api/oauth/basics на получение информации о комиссиях при платежах." + description: + allOf: + - $ref: "#/components/schemas/Description" + - description: "Описание транзакции (не более 128 символов), которое вы увидите в личном кабинете ЮKassa, а пользователь — при оплате. Например: «Оплата заказа № 72 для user@yoomoney.ru»." + recipient: + description: "Payment recipient." + type: "object" + properties: + account_id: + $ref: "#/components/schemas/AccountId" + gateway_id: + $ref: "#/components/schemas/GatewayId" + required: + - "account_id" + - "gateway_id" + payment_method: + oneOf: + - $ref: "#/components/schemas/PaymentMethodBankCard" + - $ref: "#/components/schemas/PaymentMethodCash" + - $ref: "#/components/schemas/PaymentMethodQiwi" + - $ref: "#/components/schemas/PaymentMethodAlfabank" + - $ref: "#/components/schemas/PaymentMethodWebmoney" + - $ref: "#/components/schemas/PaymentMethodSberbank" + - $ref: "#/components/schemas/PaymentMethodTinkoffBank" + - $ref: "#/components/schemas/PaymentMethodYooMoney" + - $ref: "#/components/schemas/PaymentMethodApplePay" + - $ref: "#/components/schemas/PaymentMethodGooglePay" + - $ref: "#/components/schemas/PaymentMethodMobileBalance" + - $ref: "#/components/schemas/PaymentMethodInstallments" + - $ref: "#/components/schemas/PaymentMethodB2bSberbank" + - $ref: "#/components/schemas/PaymentMethodWeChat" + - $ref: "#/components/schemas/PaymentMethodSbp" + - $ref: "#/components/schemas/PaymentMethodSberLoan" + - $ref: "#/components/schemas/PaymentMethodElectronicCertificate" + - $ref: "#/components/schemas/PaymentMethodSberBnpl" + discriminator: + propertyName: "type" + captured_at: + description: "Time of payment capture, based on UTC: https://en.wikipedia.org/wiki/Coordinated_Universal_Time and specified in the ISO 8601: https://en.wikipedia.org/wiki/ISO_8601 format." + type: "string" + format: "date-time" + example: "2017-11-03T11:52:31.827Z" + created_at: + description: "Time of order creation, based on UTC: https://en.wikipedia.org/wiki/Coordinated_Universal_Time and specified in the ISO 8601: https://en.wikipedia.org/wiki/ISO_8601 format. Example: 2017-11-03T11:52:31.827Z" + type: "string" + format: "date-time" + example: "2017-11-03T11:52:31.827Z" + expires_at: + description: "The period during which you can cancel or capture a payment for free. The payment with the waiting_for_capture status will be automatically canceled at the specified time. Based on UTC: https://en.wikipedia.org/wiki/Coordinated_Universal_Time and specified in the ISO 8601: https://en.wikipedia.org/wiki/ISO_8601 format. Example: 2017-11-03T11:52:31.827Z" + type: "string" + format: "date-time" + example: "2017-11-03T11:52:31.827Z" + confirmation: + oneOf: + - $ref: "#/components/schemas/ConfirmationRedirect" + - $ref: "#/components/schemas/ConfirmationExternal" + - $ref: "#/components/schemas/ConfirmationQr" + - $ref: "#/components/schemas/ConfirmationEmbedded" + - $ref: "#/components/schemas/ConfirmationMobileApplication" + discriminator: + propertyName: "type" + test: + $ref: "#/components/schemas/Test" + refunded_amount: + allOf: + - $ref: "#/components/schemas/MonetaryAmount" + - description: "The amount refunded to the user. Specified if the payment has successful refunds." + paid: + description: "The attribute of a paid order." + type: "boolean" + example: true + refundable: + description: "Availability of the option to make a refund via API." + type: "boolean" + example: true + receipt_registration: + allOf: + - $ref: "#/components/schemas/ReceiptRegistrationStatus" + - description: "Статус регистрации чека. Возможные значения: pending — данные в обработке; succeeded — чек успешно зарегистрирован; canceled — чек зарегистрировать не удалось; если используете Чеки от ЮKassa: https://yookassa.ru/developers/payment-acceptance/receipts/54fz/yoomoney/basics, обратитесь в техническую поддержку, в остальных случаях сформируйте чек вручную. Присутствует, если вы используете решения ЮKassa для отправки чеков в налоговую: https://yookassa.ru/developers/payment-acceptance/receipts/basics." + metadata: + $ref: "#/components/schemas/Metadata" + cancellation_details: + $ref: "#/components/schemas/PaymentCancellationDetails" + authorization_details: + $ref: "#/components/schemas/AuthorizationDetails" + transfers: + description: "Information about money distribution: the amounts of transfers and the stores to be transferred to. Specified if you use Split payments: https://yookassa.ru/developers/solutions-for-platforms/split-payments/basics." + type: "array" + items: + $ref: "#/components/schemas/Transfer" + deal: + allOf: + - $ref: "#/components/schemas/PaymentDealInfo" + - description: "The deal within which the payment is being carried out. Specified if you use Safe deal: https://yookassa.ru/developers/solutions-for-platforms/safe-deal/basics." + merchant_customer_id: + allOf: + - $ref: "#/components/schemas/MerchantCustomerId" + - description: "The identifier of the customer in your system, such as email address or phone number. No more than 200 characters. Specified if you want to save a bank card and offer it for a recurring payment in the YooMoney payment widget: https://yookassa.ru/developers/payment-acceptance/integration-scenarios/widget/basics." + invoice_details: + type: "object" + description: "Данные о выставленном счете, в рамках которого проведен платеж." + properties: + id: + $ref: "#/components/schemas/InvoiceId" + required: + - "id" + - "status" + - "amount" + - "created_at" + - "paid" + - "test" + - "refundable" + - "recipient" + Error: + description: "Объект ошибки." + type: "object" + properties: + type: + type: "string" + description: "Тип объекта." + enum: + - "error" + id: + type: "string" + description: "Идентификатор ошибки. Используйте его, если возникла необходимость обратиться в техническую поддержку." + example: "ecf255db-cce8-4f15-8fc2-3d7a4678c867" + description: + type: "string" + description: "Подробное описание ошибки." + example: "Invalid API key provided" + parameter: + type: "string" + description: "Название параметра, из-за которого произошла ошибка." + example: "payment_method" + retry_after: + type: "integer" + description: "Рекомендуемое количество миллисекунд, спустя которое следует повторить запрос." + example: 1800 + BadRequest: + description: "Запрос не может быть обработан. Причиной может быть неправильный синтаксис запроса, ошибка в обязательных параметрах запроса, их отсутствие или неподдерживаемый метод." + type: "object" + allOf: + - $ref: "#/components/schemas/Error" + - type: "object" + properties: + code: + description: "Код ошибки" + type: "string" + enum: + - "invalid_request" + InvalidCredentials: + description: "В заголовке Authorization указан неверный ключ." + type: "object" + allOf: + - $ref: "#/components/schemas/Error" + - type: "object" + properties: + code: + description: "Код ошибки" + type: "string" + enum: + - "invalid_credentials" + Forbidden: + description: "Секретный ключ указан верно, но не хватает прав для совершения операции." + type: "object" + allOf: + - $ref: "#/components/schemas/Error" + - type: "object" + properties: + code: + description: "Код ошибки." + type: "string" + enum: + - "forbidden" + NotFound: + description: "Сущность не найдена." + type: "object" + allOf: + - $ref: "#/components/schemas/Error" + - type: "object" + properties: + code: + description: "Код ошибки." + type: "string" + enum: + - "not_found" + Gone: + description: "Сущность была раньше, но была умышленно удалена и теперь недоступна." + type: "object" + allOf: + - $ref: "#/components/schemas/Error" + - type: "object" + properties: + code: + description: "Код ошибки." + type: "string" + enum: + - "gone" + TooManyRequests: + description: "Слишком много запросов одновременно отправляется в API. Повторите запрос позже." + type: "object" + allOf: + - $ref: "#/components/schemas/Error" + - type: "object" + properties: + code: + description: "Код ошибки." + type: "string" + enum: + - "too_many_requests" + PaymentList: + type: "object" + description: "Список платежей. Платежи отсортированы по времени создания в порядке убывания (от новых к старым). Если результатов больше, чем задано в limit, список будет выводиться фрагментами. В этом случае в ответе на запрос вернется фрагмент списка и параметр next_cursor с указателем на следующий фрагмент." + properties: + type: + type: "string" + description: "Формат выдачи результатов запроса. Возможное значение: list (список)." + enum: + - "list" + items: + type: "array" + items: + $ref: "#/components/schemas/Payment" + next_cursor: + $ref: "#/components/schemas/NextCursor" + required: + - "type" + - "items" + TransferDataCapture: + allOf: + - $ref: "#/components/schemas/TransferData" + PaymentMethodData: + type: "object" + description: "Data for making payments using a certain method: https://yookassa.ru/developers/payment-acceptance/integration-scenarios/manual-integration/basics#integration-options (payment_method). You can send the request without this object. If you do so, the user will be able to select the payment method on the YooMoney's side." + properties: + type: + type: "string" + enum: + - "bank_card" + - "cash" + - "sberbank" + - "tinkoff_bank" + - "yoo_money" + - "mobile_balance" + - "b2b_sberbank" + - "sbp" + - "sber_loan" + - "electronic_certificate" + - "sber_bnpl" + discriminator: + propertyName: "type" + mapping: + bank_card: "#/components/schemas/PaymentMethodDataBankCard" + cash: "#/components/schemas/PaymentMethodDataCash" + sberbank: "#/components/schemas/PaymentMethodDataSberbank" + tinkoff_bank: "#/components/schemas/PaymentMethodDataTinkoffBank" + yoo_money: "#/components/schemas/PaymentMethodDataYooMoney" + mobile_balance: "#/components/schemas/PaymentMethodDataMobileBalance" + b2b_sberbank: "#/components/schemas/PaymentMethodDataB2bSberbank" + sbp: "#/components/schemas/PaymentMethodDataSbp" + sber_loan: "#/components/schemas/PaymentMethodDataSberLoan" + electronic_certificate: "#/components/schemas/PaymentMethodDataElectronicCertificate" + sber_bnpl: "#/components/schemas/PaymentMethodDataSberBnpl" + required: + - "type" + CardRequestDataWithCsc: + allOf: + - $ref: "#/components/schemas/CardRequestData" + type: "object" + properties: + csc: + description: "Код CVC2 или CVV2, 3 или 4 символа, печатается на обратной стороне карты." + type: "string" + pattern: "[0-9]{3,4}" + example: "012" + required: + - "number" + - "expiry_year" + - "expiry_month" + ElectronicCertificatePaymentData: + type: "object" + description: "Данные от ФЭС НСПК для оплаты по электронному сертификату. Неоходимо передавать только при оплате со сбором данных на вашей стороне: https://yookassa.ru/developers/payment-acceptance/integration-scenarios/manual-integration/other/electronic-certificate/merchant-payment-form." + properties: + amount: + allOf: + - $ref: "#/components/schemas/MonetaryAmount" + - description: "Сумма, которую необходимо использовать по электронному сертификату, — значение totalCertAmount, которое вы получили в ФЭС НСПК в запросе на предварительное одобрение использования сертификата (Pre-Auth): https://www.nspk.ru/developer/api-fes#operation/preAuthPurchase. Сумма должна быть не больше общей суммы платежа (amount)." + basket_id: + allOf: + - $ref: "#/components/schemas/BasketId" + - description: "Идентификатор корзины покупки, сформированной в НСПК, — значение purchaseBasketId, которое вы получили в ФЭС НСПК в запросе на предварительное одобрение использования сертификата (Pre-Auth): https://www.nspk.ru/developer/api-fes#operation/preAuthPurchase." + required: + - "amount" + - "basket_id" + ElectronicCertificateArticle: + type: "object" + description: "Товарная позиция в корзине покупки при оплате по электронному сертификату." + properties: + article_number: + $ref: "#/components/schemas/ElectronicCertificateArticleNumber" + tru_code: + $ref: "#/components/schemas/ElectronicCertificateTruCode" + article_code: + $ref: "#/components/schemas/ElectronicCertificateArticleCode" + article_name: + description: "Название товара в вашей системе. Отображается на готовой платежной форме ЮKassa. Максимум 128 символов." + example: "Item #432" + type: "string" + maxLength: 128 + quantity: + $ref: "#/components/schemas/ElectronicCertificateArticleQuantity" + price: + allOf: + - $ref: "#/components/schemas/MonetaryAmount" + - description: "Цена за единицу товара." + metadata: + $ref: "#/components/schemas/Metadata" + required: + - "article_number" + - "tru_code" + - "article_name" + - "quantity" + - "price" + ElectronicCertificateArticleQuantity: + description: "Количество единиц товара. Формат: целое положительное число." + example: 4 + type: "integer" + format: "int32" + TransferData: + type: "object" + description: "Information about money distribution: the amounts of transfers and the stores to be transferred to. Specified if you use Split payments: https://yookassa.ru/developers/solutions-for-platforms/split-payments/basics." + properties: + account_id: + allOf: + - $ref: "#/components/schemas/AccountId" + - description: "ID of the store in favor of which you're accepting the receipt. Provided by YooMoney, displayed in the Sellers: https://yookassa.ru/my/marketplace/sellers section of your Merchant Profile (shopId column)." + amount: + allOf: + - $ref: "#/components/schemas/MonetaryAmount" + - description: "Amount to be transferred to the store." + - type: "object" + platform_fee_amount: + allOf: + - $ref: "#/components/schemas/MonetaryAmount" + - description: "Commission for sold products or services charged in your favor." + - type: "object" + required: + - "account_id" + - "amount" + AirlinePassenger: + description: "Информация о пассажире." + type: "object" + properties: + first_name: + description: "Passenger's first name. Only use Latin characters, for example, SERGEI." + type: "string" + minLength: 1 + maxLength: 64 + example: "SERGEI" + last_name: + description: "Passenger's last name. Only use Latin characters, for example, IVANOV." + type: "string" + minLength: 1 + maxLength: 64 + example: "IVANOV" + required: + - "first_name" + - "last_name" + AirlineLeg: + description: "Информация о перелете." + type: "object" + properties: + departure_airport: + description: "Code of the departure airport according to IATA: https://www.iata.org/publications/Pages/code-search.aspx, for example, LED." + type: "string" + minLength: 3 + maxLength: 3 + pattern: "[A-Z]{3}" + example: "LED" + destination_airport: + description: "Code of the arrival airport according to IATA: https://www.iata.org/publications/Pages/code-search.aspx, for example, AMS." + type: "string" + minLength: 3 + maxLength: 3 + pattern: "[A-Z]{3}" + example: "AMS" + departure_date: + description: "Departure date in the YYYY-MM-DD ISO 8601:2004: http://www.iso.org/iso/catalogue_detail?csnumber=40874 format." + type: "string" + format: "date" + example: "2018-06-20" + carrier_code: + description: "Airline code according to IATA: https://www.iata.org/publications/Pages/code-search.aspx." + type: "string" + minLength: 2 + maxLength: 3 + example: "SU" + required: + - "departure_airport" + - "destination_airport" + - "departure_date" + PaymentOrderData: + type: "object" + description: "Платежное поручение — распоряжение на перевод банку для оплаты жилищно-коммунальных услуг (ЖКУ), сведения о платеже для регистрации в ГИС ЖКХ. Необходимо передавать при оплате ЖКУ: https://yookassa.ru/developers/payment-acceptance/scenario-extensions/utility-payments." + properties: + type: + type: "string" + enum: + - "utilities" + discriminator: + propertyName: "type" + mapping: + utilities: "#/components/schemas/PaymentOrderDataUtilities" + required: + - "type" + PaymentOrderRecipientUtilities: + type: "object" + description: "Получатель платежа" + properties: + name: + type: "string" + description: "Название получателя." + inn: + type: "string" + description: "ИНН получателя." + pattern: "[0-9]{10}" + kpp: + type: "string" + description: "КПП получателя." + pattern: "[0-9]{9}" + bank: + allOf: + - $ref: "#/components/schemas/PaymentOrderBankUtilities" + - description: "Банк получателя." + required: + - "name" + - "inn" + - "kpp" + - "bank" + Kbk: + type: "string" + description: "Код бюджетной классификации (КБК)." + minLength: 1 + maxLength: 20 + pattern: "([\\d]{20})|(0)" + example: "70311105013130000120" + Oktmo: + type: "string" + description: "Код ОКТМО (Общероссийский классификатор территорий муниципальных образований)." + minLength: 1 + maxLength: 8 + pattern: "([\\d]{8})|(0)" + example: "98627153" + PaymentPeriod: + type: "object" + description: "Период оплаты, за который выставлены начисления и за который вносится оплата." + properties: + month: + type: "integer" + description: "Месяц периода. Например, 1 — январь." + minimum: 1 + maximum: 12 + year: + type: "integer" + description: "Payment period year. The value must be within the range 1920–2050. For example, 2025." + minimum: 1920 + maximum: 2050 + required: + - "month" + - "year" + PaymentOrderBankUtilities: + type: "object" + description: "Банк получателя платежа." + properties: + name: + type: "string" + description: "Name of the recipient's bank. Maximum of 45 characters." + maxLength: 45 + bic: + type: "string" + description: "БИК банка получателя." + pattern: "[0-9]{9}" + account: + type: "string" + description: "Счет получателя в банке." + correspondent_account: + type: "string" + description: "Корреспондентский счет банка получателя." + required: + - "name" + - "bic" + - "account" + - "correspondent_account" + ReceiverType: + description: "Payment receiver code." + type: "string" + enum: + - "mobile_balance" + - "digital_wallet" + - "bank_account" + example: "mobile_balance" + Receiver: + discriminator: + propertyName: "type" + mapping: + mobile_balance: "#/components/schemas/ReceiverMobileBalance" + digital_wallet: "#/components/schemas/ReceiverDigitalWallet" + bank_account: "#/components/schemas/ReceiverBankAccount" + description: "Payment receiver's details specified when you want to add money to e-wallet, bank account, or phone balance: https://yookassa.ru/developers/payment-acceptance/scenario-extensions/receiver-data." + type: "object" + properties: + type: + $ref: "#/components/schemas/ReceiverType" + required: + - "type" + Statement: + type: "object" + description: "Data for sending statements. Required if you want the user to receive a statement after they make a payment. Only one type of statement is currently available: payment overview. This is the information about a successful payment that YooMoney sends to the user's email address. An overview may be sent if the payment was made via bank cards, SberPay, or FPS. The option to send overviews is available for all integration scenarios: https://yookassa.ru/developers/payment-acceptance/getting-started/selecting-integration-scenario." + discriminator: + propertyName: "type" + mapping: + payment_overview: "#/components/schemas/PaymentOverviewStatementData" + properties: + type: + type: "string" + enum: + - "payment_overview" + required: + - "type" + PaymentOverviewStatementEmailDeliveryMethod: + description: "Cпособ доставки справки." + allOf: + - $ref: "#/components/schemas/PaymentOverviewStatementDeliveryMethod" + - type: "object" + properties: + email: + allOf: + - $ref: "#/components/schemas/Email" + - description: "Электронная почта пользователя для отправки справки. Адрес электронной почты должен соответствовать стандарту RFC 5322: https://www.ietf.org/rfc/rfc5322.txt. Пример: user@example.com." + required: + - "email" + PaymentOverviewStatementDeliveryMethodType: + type: "string" + enum: + - "email" + example: "email" + PaymentOverviewStatementDeliveryMethod: + description: "Данные о выбранном способе доставки справки." + type: "object" + discriminator: + propertyName: "type" + mapping: + email: "#/components/schemas/PaymentOverviewStatementEmailDeliveryMethod" + properties: + type: + $ref: "#/components/schemas/PaymentOverviewStatementDeliveryMethodType" + required: + - "type" + NextCursor: + description: "Указатель на следующий фрагмент списка. Обязательный параметр, если размер списка больше размера выдачи (limit) и конец выдачи не достигнут." + type: "string" + example: "37a5c87d-3984-51e8-a7f3-8de646d39ec15" + SavePaymentMethodDataBankCard: + description: "Данные для проверки и сохранения банковской карты." + allOf: + - $ref: "#/components/schemas/SavePaymentMethodData" + - type: "object" + properties: + card: + $ref: "#/components/schemas/CardRequestDataWithCsc" + SavePaymentMethodBankCard: + description: "Сохраненная банковская карта." + allOf: + - $ref: "#/components/schemas/SavePaymentMethod" + - type: "object" + properties: + card: + $ref: "#/components/schemas/BankCardData" + PaymentMethodsConfirmationDataRedirect: + description: "Перенаправление пользователя на сайт ЮKassa для подтверждения привязки или страницу банка-эмитента для аутентификации по 3-D Secure." + allOf: + - $ref: "#/components/schemas/PaymentMethodsConfirmationData" + - type: "object" + properties: + enforce: + allOf: + - $ref: "#/components/schemas/Enforce" + - description: "Запрос на проведение привязки с аутентификацией по 3-D Secure. Будет работать, если оплату банковской картой вы по умолчанию принимаете без подтверждения платежа пользователем. В остальных случаях аутентификацией по 3-D Secure будет управлять ЮKassa. Если хотите принимать платежи и создавать привязки без дополнительного подтверждения пользователем, напишите вашему менеджеру ЮKassa." + return_url: + allOf: + - $ref: "#/components/schemas/ReturnUrl" + - description: "URL, на который вернется пользователь после подтверждения или отмены привязки на веб-странице. Не более 2048 символов." + locale: + $ref: "#/components/schemas/Locale" + required: + - "return_url" + PaymentMethodsConfirmationType: + description: "Код сценария подтверждения пользователем привязки платежного средства к вашему магазину в ЮKassa." + type: "string" + enum: + - "redirect" + example: "redirect" + PaymentMethodsConfirmationData: + description: "Данные, необходимые для инициирования сценария подтверждения привязки." + type: "object" + discriminator: + propertyName: "type" + mapping: + redirect: "#/components/schemas/PaymentMethodsConfirmationDataRedirect" + properties: + type: + $ref: "#/components/schemas/PaymentMethodsConfirmationType" + required: + - "type" + PaymentMethodsConfirmation: + description: "Выбранный сценарий подтверждения привязки. Присутствует, когда привязка ожидает подтверждения от пользователя." + type: "object" + discriminator: + propertyName: "type" + mapping: + redirect: "#/components/schemas/PaymentMethodsConfirmationRedirect" + properties: + type: + $ref: "#/components/schemas/PaymentMethodsConfirmationType" + required: + - "type" + SavePaymentMethodData: + type: "object" + description: "Данные для проверки и сохранения способа оплаты." + properties: + type: + type: "string" + enum: + - "bank_card" + holder: + allOf: + - $ref: "#/components/schemas/Recipient" + - description: "Данные магазина, для которого сохраняется способ оплаты." + client_ip: + $ref: "#/components/schemas/ClientIp" + confirmation: + oneOf: + - $ref: "#/components/schemas/PaymentMethodsConfirmationDataRedirect" + discriminator: + propertyName: "type" + mapping: + bank_card: "#/components/schemas/SavePaymentMethodDataBankCard" + required: + - "type" + SavePaymentMethodType: + description: "Тип способа оплаты." + type: "string" + enum: + - "bank_card" + example: "bank_card" + PaymentMethodsConfirmationRedirect: + description: "Перенаправление пользователя на сайт ЮKassa для подтверждения привязки или страницу банка-эмитента для аутентификации по 3-D Secure." + allOf: + - $ref: "#/components/schemas/PaymentMethodsConfirmation" + - type: "object" + properties: + confirmation_url: + allOf: + - $ref: "#/components/schemas/ConfirmationUrl" + - description: "URL, на который необходимо перенаправить пользователя для подтверждения привязки." + enforce: + allOf: + - $ref: "#/components/schemas/Enforce" + - description: "Запрос на проведение привязки с аутентификацией по 3-D Secure. Будет работать, если оплату банковской картой вы по умолчанию принимаете без подтверждения платежа пользователем. В остальных случаях аутентификацией по 3-D Secure будет управлять ЮKassa. Если хотите принимать платежи и создавать привязки без дополнительного подтверждения пользователем, напишите вашему менеджеру ЮKassa." + return_url: + allOf: + - $ref: "#/components/schemas/ReturnUrl" + - description: "URL, на который вернется пользователь после подтверждения или отмены привязки на веб-странице. Не более 2048 символов." + required: + - "confirmation_url" + SavePaymentMethod: + type: "object" + description: "Сохраненный способ оплаты." + discriminator: + propertyName: "type" + mapping: + bank_card: "#/components/schemas/SavePaymentMethodBankCard" + properties: + type: + $ref: "#/components/schemas/SavePaymentMethodType" + id: + description: "Идентификатор сохраненного способа оплаты." + type: "string" + example: "1da5c87d-0984-50e8-a7f3-8de646dd9ec9" + saved: + description: "Признак сохранения способа оплаты для автоплатежей: https://yookassa.ru/developers/payment-acceptance/scenario-extensions/recurring-payments/pay-with-saved. Возможные значения: * true — способ оплаты сохранен для автоплатежей и выплат; * false — способ оплаты не сохранен." + type: "boolean" + example: true + status: + $ref: "#/components/schemas/PaymentMethodStatus" + holder: + description: "Данные магазина, для которого сохраняется способ оплаты." + type: "object" + properties: + account_id: + $ref: "#/components/schemas/AccountId" + gateway_id: + $ref: "#/components/schemas/GatewayId" + required: + - "account_id" + title: + $ref: "#/components/schemas/PaymentMethodTitle" + confirmation: + oneOf: + - $ref: "#/components/schemas/PaymentMethodsConfirmationRedirect" + discriminator: + propertyName: "type" + mapping: + redirect: "#/components/schemas/PaymentMethodsConfirmationRedirect" + required: + - "id" + - "type" + - "saved" + - "status" + - "holder" + PaymentData: + type: "object" + description: "Данные для проведения платежа по выставленному счету." + properties: + amount: + allOf: + - $ref: "#/components/schemas/MonetaryAmount" + - description: "Payment amount. It must be within limits: https://yookassa.ru/docs/support/payments/limits. The amount is specified with the currency code. It should match the currency of your subaccount (recipient.gateway_id) if you separate payment flows, or the currency of the account (shopId in the Merchant Profile) if you don't." + receipt: + $ref: "#/components/schemas/ReceiptData" + recipient: + $ref: "#/components/schemas/Recipient" + save_payment_method: + $ref: "#/components/schemas/SavePaymentMethodAttribute" + capture: + $ref: "#/components/schemas/Capture" + client_ip: + $ref: "#/components/schemas/ClientIp" + description: + allOf: + - $ref: "#/components/schemas/Description" + - description: "Описание транзакции (не более 128 символов), которое вы увидите в личном кабинете ЮKassa, а пользователь — при оплате. Например: «Оплата заказа № 72 для user@yoomoney.ru»." + metadata: + $ref: "#/components/schemas/Metadata" + required: + - "amount" + Cart: + description: "Корзина заказа — список товаров или услуг, который отобразится на странице счета перед оплатой." + type: "array" + items: + $ref: "#/components/schemas/LineItem" + DeliveryMethodDataSelf: + description: "Данные для выставления счета с самостоятельной доставкой ссылки на счет." + allOf: + - $ref: "#/components/schemas/DeliveryMethodData" + - type: "object" + DeliveryMethodDataSms: + description: "Данные для выставления счета с доставкой ссылки на счет в смс." + allOf: + - $ref: "#/components/schemas/DeliveryMethodData" + - type: "object" + properties: + phone: + allOf: + - $ref: "#/components/schemas/Phone" + - description: "Номер телефона, на который ЮKassa отправит смс со ссылкой на счет. Указывается в формате ITU-T E.164: https://ru.wikipedia.org/wiki/E.164, например 79000000000." + required: + - "phone" + DeliveryMethodDataEmail: + description: "Данные для выставления счета с отправкой по электронной почте." + allOf: + - $ref: "#/components/schemas/DeliveryMethodData" + - type: "object" + properties: + email: + allOf: + - $ref: "#/components/schemas/Email" + - description: "Адрес электронной почты, на который ЮKassa отправит письмо со ссылкой на счет." + required: + - "email" + InvoiceExpirationDate: + type: "string" + format: "date-time" + description: "Срок действия счета — дата и время, до которых можно оплатить выставленный счет. Указывается по UTC: https://ru.wikipedia.org/wiki/%D0%92%D1%81%D0%B5%D0%BC%D0%B8%D1%80%D0%BD%D0%BE%D0%B5_%D0%BA%D0%BE%D0%BE%D1%80%D0%B4%D0%B8%D0%BD%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%BE%D0%B5_%D0%B2%D1%80%D0%B5%D0%BC%D1%8F и передается в формате ISO 8601: https://en.wikipedia.org/wiki/ISO_8601. Пример: 2024-10-18T10:51:18.139Z" + example: "2024-10-18T10:51:18.139Z" + Invoice: + type: "object" + description: "Invoice object (Invoice) contains all the relevant information about the invoice." + properties: + id: + $ref: "#/components/schemas/InvoiceId" + status: + $ref: "#/components/schemas/InvoiceStatus" + cart: + $ref: "#/components/schemas/Cart" + delivery_method: + oneOf: + - $ref: "#/components/schemas/DeliveryMethodSelf" + - $ref: "#/components/schemas/DeliveryMethodSms" + - $ref: "#/components/schemas/DeliveryMethodEmail" + discriminator: + propertyName: "type" + payment_details: + $ref: "#/components/schemas/PaymentDetails" + created_at: + type: "string" + format: "date-time" + description: "Дата и время создания счета на оплату. Указывается по UTC: https://ru.wikipedia.org/wiki/%D0%92%D1%81%D0%B5%D0%BC%D0%B8%D1%80%D0%BD%D0%BE%D0%B5_%D0%BA%D0%BE%D0%BE%D1%80%D0%B4%D0%B8%D0%BD%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%BE%D0%B5_%D0%B2%D1%80%D0%B5%D0%BC%D1%8F и передается в формате ISO 8601: https://en.wikipedia.org/wiki/ISO_8601. Пример: 2017-11-03T11:52:31.827Z" + example: "2017-11-03T11:52:31.827Z" + expires_at: + allOf: + - $ref: "#/components/schemas/InvoiceExpirationDate" + - description: "Срок действия счета — дата и время, до которых можно оплатить выставленный счет. Указывается по UTC: https://ru.wikipedia.org/wiki/%D0%92%D1%81%D0%B5%D0%BC%D0%B8%D1%80%D0%BD%D0%BE%D0%B5_%D0%BA%D0%BE%D0%BE%D1%80%D0%B4%D0%B8%D0%BD%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%BE%D0%B5_%D0%B2%D1%80%D0%B5%D0%BC%D1%8F и передается в формате ISO 8601: https://en.wikipedia.org/wiki/ISO_8601. Пример: 2024-10-18T10:51:18.139Z Присутствует только для счетов в статусе pending." + description: + allOf: + - $ref: "#/components/schemas/Description" + - description: "Описание выставленного счета (не более 128 символов), которое вы увидите в личном кабинете ЮKassa, а пользователь на странице счета. Например: «Счет на оплату по договору 37»." + cancellation_details: + $ref: "#/components/schemas/InvoiceCancellationDetails" + metadata: + $ref: "#/components/schemas/Metadata" + required: + - "id" + - "status" + - "cart" + - "created_at" + InvoiceStatus: + description: "Статус счета. Возможные значения: pending — счет создан и ожидает успешной оплаты; succeeded — счет успешно оплачен, есть связанный платеж в статусе succeeded (финальный и неизменяемый статус для платежей в одну стадию); canceled — вы отменили счет, успешный платеж по нему не поступил или был отменен (при оплате в две стадии) либо истек срок действия счета (финальный и неизменяемый статус). Подробнее про жизненный цикл счета: https://yookassa.ru/developers/payment-acceptance/scenario-extensions/invoices/basics#invoice-status" + type: "string" + enum: + - "pending" + - "succeeded" + - "canceled" + example: "succeeded" + DeliveryMethodSelf: + description: "Данные для самостоятельной доставки пользователю ссылки на счет." + allOf: + - $ref: "#/components/schemas/DeliveryMethod" + - type: "object" + properties: + url: + description: "URL страницы счета, который необходимо передать пользователю для оплаты. Не более 2048 символов." + type: "string" + maxLength: 2048 + DeliveryMethodSms: + description: "Данные способа отправки счета по смс." + allOf: + - $ref: "#/components/schemas/DeliveryMethod" + DeliveryMethodEmail: + description: "Данные способа отправки счета по по электронной почте." + allOf: + - $ref: "#/components/schemas/DeliveryMethod" + PaymentDetails: + type: "object" + description: "Данные о платеже по выставленному счету. Присутствуют, только если платеж успешно подтвержден пользователем: https://yookassa.ru/developers/payment-acceptance/getting-started/payment-process#user-confirmation." + properties: + id: + $ref: "#/components/schemas/PaymentId" + status: + allOf: + - $ref: "#/components/schemas/PaymentStatus" + - description: "Статус платежа. Возможные значения: * waiting_for_capture — для платежей в две стадии: https://yookassa.ru/developers/payment-acceptance/getting-started/payment-process#capture-and-cancel: платеж оплачен, деньги авторизованы, вам необходимо списать оплату или отменить платеж; * succeeded — платеж успешно завершен, деньги будут перечислены на ваш расчетный счет в соответствии с вашим договором с ЮKassa (финальный и неизменяемый статус); * canceled — для платежей в две стадии: https://yookassa.ru/developers/payment-acceptance/getting-started/payment-process#capture-and-cancel: вы отменили платеж по API (финальный и неизменяемый статус)." + required: + - "id" + - "status" + InvoiceCancellationDetails: + type: "object" + description: "Commentary for the canceled status: who canceled the invoice and for what reason." + properties: + party: + type: "string" + description: "The participant of the process who made the decision to cancel the invoice. Possible values: merchant — a seller of products and services (you); yoo_money — YooMoney." + enum: + - "yoo_money" + - "merchant" + reason: + type: "string" + description: "Reason for canceling the invoice. Possible values: invoice_canceled: invoice was canceled manually: https://yookassa.rudocs/support/merchant/invoices-to-clients/invoicing#invoicing__cancel from the Merchant Profile; invoice_expired: the invoice validity period, which you set in the expires_at parameter when creating request, has expired and there are no successful payments associated with the invoice; general_decline: the reason is not detailed, so the user should contact the initiator of cancellation for details; payment_canceled: two-stage payment was canceled via API: https://yookassa.ru/developers/payment-acceptance/getting-started/payment-process#cancel; payment_expired_on_capture: debit period: https://yookassa.ru/developers/payment-acceptance/getting-started/payment-process#hold for a two-stage payment has expired." + example: "invoice_expired" + enum: + - "invoice_canceled" + - "invoice_expired" + - "general_decline" + - "payment_canceled" + - "payment_expired_on_capture" + required: + - "party" + - "reason" + LineItem: + type: "object" + description: "Данные о товаре или услуге в корзине." + properties: + description: + description: "Название товара или услуги (от 1 до 128 символов). Пользователь увидит его на странице счета перед оплатой." + type: "string" + price: + allOf: + - $ref: "#/components/schemas/MonetaryAmount" + - description: "Полная цена товара или услуги. Пользователь увидит ее на странице счета перед оплатой." + discount_price: + allOf: + - $ref: "#/components/schemas/MonetaryAmount" + - description: "Итоговая цена товара с учетом скидки. Если передана, то на странице счета цена отобразится с учетом скидки. Не нужно передавать, если пользователь оплачивает полную стоимость товара или услуги." + quantity: + description: "Количество товара. Можно передать целое или дробное число. Разделитель дробной части — точка, разделитель тысяч отсутствует, максимум три знака после точки. Пример: 5.000" + type: "number" + example: 1 + required: + - "description" + - "price" + - "quantity" + DeliveryMethodData: + type: "object" + description: "The details of the invoice delivery method. Learn more about invoice delivery methods: https://yookassa.ru/developers/payment-acceptance/scenario-extensions/invoices/basics#send-invoice" + properties: + type: + description: "The code of the invoice delivery method." + type: "string" + enum: + - "self" + - "sms" + - "email" + discriminator: + propertyName: "type" + mapping: + self: "#/components/schemas/DeliveryMethodDataSelf" + sms: "#/components/schemas/DeliveryMethodDataSms" + email: "#/components/schemas/DeliveryMethodDataEmail" + required: + - "type" + DeliveryMethod: + type: "object" + description: "Данные о выбранном способе доставки счета. Присутствует только для счетов в статусе pending." + properties: + type: + type: "string" + enum: + - "self" + - "sms" + - "email" + discriminator: + propertyName: "type" + mapping: + self: "#/components/schemas/DeliveryMethodSelf" + sms: "#/components/schemas/DeliveryMethodSms" + email: "#/components/schemas/DeliveryMethodEmail" + required: + - "type" + RefundSourcesData: + type: "object" + description: "Данные о том, с какого магазина и какую сумму нужно удержать для проведения возврата. Сейчас в этом параметре можно передать данные только одного магазина." + properties: + account_id: + allOf: + - $ref: "#/components/schemas/AccountId" + - description: "Идентификатор магазина, для которого вы хотите провести возврат. Выдается ЮKassa, отображается в разделе Продавцы: https://yookassa.ru/my/marketplace/sellers личного кабинета (столбец shopId)." + amount: + allOf: + - $ref: "#/components/schemas/MonetaryAmount" + - description: "Сумма возврата." + - type: "object" + platform_fee_amount: + allOf: + - $ref: "#/components/schemas/MonetaryAmount" + - description: "Комиссия, которую вы удержали при оплате, и хотите вернуть." + - type: "object" + required: + - "account_id" + - "amount" + RefundDealData: + type: "object" + description: "Данные о сделке, в составе которой проходит возврат. Необходимо передавать, если вы проводите Безопасную сделку: https://yookassa.ru/developers/solutions-for-platforms/safe-deal/basics." + properties: + refund_settlements: + $ref: "#/components/schemas/SettlementRefundArray" + required: + - "refund_settlements" + ElectronicCertificateRefundMethodData: + description: "Данные для возврата платежа по электронному сертификату." + allOf: + - $ref: "#/components/schemas/RefundMethodData" + - type: "object" + properties: + electronic_certificate: + $ref: "#/components/schemas/ElectronicCertificateRefundDataRequest" + articles: + type: "array" + description: "Корзина возврата (в терминах НСПК) — список возвращаемых товаров, для оплаты которых использовался электронный сертификат. Данные должны соответствовать товарам из одобренной корзины покупки (articles в объекте платежа: https://yookassa.ru/developers/api#payment_object). Необходимо передавать только при оплате на готовой странице ЮKassa: https://yookassa.ru/developers/payment-acceptance/integration-scenarios/manual-integration/other/electronic-certificate/ready-made-payment-form." + items: + $ref: "#/components/schemas/ElectronicCertificateRefundArticle" + Refund: + description: "Refund object (Refund) contains all the relevant information about the payment refund." + type: "object" + properties: + id: + $ref: "#/components/schemas/RefundId" + payment_id: + $ref: "#/components/schemas/PaymentId" + status: + $ref: "#/components/schemas/RefundStatus" + cancellation_details: + $ref: "#/components/schemas/RefundCancellationDetails" + receipt_registration: + allOf: + - $ref: "#/components/schemas/ReceiptRegistrationStatus" + - description: "Статус регистрации чека. Возможные значения: pending — данные в обработке; succeeded — чек успешно зарегистрирован; canceled — чек зарегистрировать не удалось; если используете Чеки от ЮKassa: https://yookassa.ru/developers/payment-acceptance/receipts/54fz/yoomoney/basics, обратитесь в техническую поддержку, в остальных случаях сформируйте чек вручную. Присутствует, если вы используете решения ЮKassa для отправки чеков в налоговую: https://yookassa.ru/developers/payment-acceptance/receipts/basics." + created_at: + description: "Время создания возврата. Указывается по UTC: https://ru.wikipedia.org/wiki/%D0%92%D1%81%D0%B5%D0%BC%D0%B8%D1%80%D0%BD%D0%BE%D0%B5_%D0%BA%D0%BE%D0%BE%D1%80%D0%B4%D0%B8%D0%BD%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%BE%D0%B5_%D0%B2%D1%80%D0%B5%D0%BC%D1%8F и передается в формате ISO 8601: https://en.wikipedia.org/wiki/ISO_8601, например 2017-11-03T11:52:31.827Z" + type: "string" + format: "date-time" + example: "2017-11-03T11:52:31.827Z" + amount: + allOf: + - $ref: "#/components/schemas/MonetaryAmount" + - description: "Сумма, возвращенная пользователю." + description: + description: "Основание для возврата денег пользователю." + type: "string" + maxLength: 250 + sources: + description: "Данные о том, с какого магазина и какую сумму нужно удержать для проведения возврата. Присутствует, если вы используете Сплитование платежей: https://yookassa.ru/developers/solutions-for-platforms/split-payments/basics." + type: "array" + items: + $ref: "#/components/schemas/RefundSourcesData" + deal: + $ref: "#/components/schemas/RefundDealInfo" + refund_method: + oneOf: + - $ref: "#/components/schemas/SbpRefundMethod" + - $ref: "#/components/schemas/ElectronicCertificateRefundMethod" + discriminator: + propertyName: "type" + refund_authorization_details: + $ref: "#/components/schemas/RefundAuthorizationDetails" + metadata: + $ref: "#/components/schemas/Metadata" + required: + - "id" + - "payment_id" + - "amount" + - "status" + - "created_at" + RefundStatus: + description: "Статус возврата платежа. Возможные значения: pending — возврат создан, но пока еще обрабатывается; succeeded — возврат успешно завершен, указанная в запросе сумма переведена на платежное средство пользователя (финальный и неизменяемый статус); canceled — возврат отменен, инициатор и причина отмены указаны в объекте cancellation_details (финальный и неизменяемый статус)." + type: "string" + enum: + - "pending" + - "succeeded" + - "canceled" + example: "succeeded" + RefundList: + type: "object" + description: "Список возвратов. Возвраты отсортированы по времени создания в порядке убывания (от новых к старым). Если результатов больше, чем задано в limit, список будет выводиться фрагментами. В этом случае в ответе на запрос вернется фрагмент списка и параметр next_cursor с указателем на следующий фрагмент." + properties: + type: + type: "string" + description: "Формат выдачи результатов запроса. Возможное значение: list (список)." + enum: + - "list" + items: + type: "array" + items: + $ref: "#/components/schemas/Refund" + next_cursor: + $ref: "#/components/schemas/NextCursor" + required: + - "type" + - "items" + RefundId: + description: "Идентификатор возврата платежа в ЮKassa." + type: "string" + minLength: 36 + maxLength: 36 + example: "1ddd77af-0bd7-500d-895b-c475c55fdefc" + RefundCancellationDetails: + type: "object" + description: "Комментарий к статусу canceled: кто отменил возврат и по какой причине." + properties: + party: + type: "string" + description: "Участник процесса возврата, который принял решение отменить транзакцию. Перечень и описание возможных значений: https://yookassa.ru/developers/payment-acceptance/after-the-payment/refunds#declined-refunds-cancellation-details-party" + example: "yoo_money" + enum: + - "yoo_money" + - "refund_network" + reason: + type: "string" + description: "Причина отмены возврата. Перечень и описание возможных значений: https://yookassa.ru/developers/payment-acceptance/after-the-payment/refunds#declined-refunds-cancellation-details-reason" + example: "yoo_money_account_closed" + enum: + - "yoo_money_account_closed" + - "insufficient_funds" + - "general_decline" + - "rejected_by_payee" + - "rejected_by_timeout" + - "payment_basket_id_not_found" + - "payment_article_number_not_found" + - "payment_tru_code_not_found" + - "too_many_refunding_articles" + - "some_articles_already_refunded" + required: + - "reason" + - "party" + RefundDealInfo: + type: "object" + description: "Данные о сделке, в составе которой проходит возврат. Присутствует, если вы проводите Безопасную сделку: https://yookassa.ru/developers/solutions-for-platforms/safe-deal/basics." + properties: + id: + allOf: + - $ref: "#/components/schemas/DealId" + - description: "Идентификатор сделки. Берется из возвращаемого платежа." + refund_settlements: + $ref: "#/components/schemas/SettlementRefundArray" + required: + - "id" + - "refund_settlements" + SbpRefundMethod: + description: "Данные для возврата платежа через СБП (НСПК)." + allOf: + - $ref: "#/components/schemas/RefundMethod" + - type: "object" + properties: + sbp_operation_id: + description: "Идентификатор операции в СБП (НСПК). Пример: 1027088AE4CB48CB81287833347A8777. Обязательный параметр для возвратов в статусе succeeded. В остальных случаях может отсутствовать." + type: "string" + example: "1027088AE4CB48CB81287833347A8777" + ElectronicCertificateRefundMethod: + description: "Возврат платежа по электронному сертификату." + allOf: + - $ref: "#/components/schemas/RefundMethod" + - type: "object" + properties: + electronic_certificate: + $ref: "#/components/schemas/ElectronicCertificateRefundDataResponse" + articles: + type: "array" + description: "Корзина возврата — список возвращаемых товаров, для оплаты которых использовался электронный сертификат. Присутствует, если оплата была на готовой странице ЮKassa: https://yookassa.ru/developers/payment-acceptance/integration-scenarios/manual-integration/other/electronic-certificate/ready-made-payment-form." + items: + $ref: "#/components/schemas/ElectronicCertificateRefundArticle" + RefundAuthorizationDetails: + type: "object" + description: "Refund authorization details. Presented only for refunds made by these payment methods: bank card, Mir Pay." + properties: + rrn: + $ref: "#/components/schemas/Rrn" + SettlementRefundArray: + type: "array" + description: "Данные о распределении денег." + items: + oneOf: + - $ref: "#/components/schemas/SettlementPayoutRefund" + discriminator: + propertyName: "type" + RefundMethodData: + type: "object" + description: "Детали возврата. Зависят от способа оплаты, который использовался при проведении платежа." + properties: + type: + $ref: "#/components/schemas/RefundMethodType" + discriminator: + propertyName: "type" + mapping: + electronic_certificate: "#/components/schemas/ElectronicCertificateRefundMethodData" + required: + - "type" + ElectronicCertificateRefundDataRequest: + type: "object" + description: "Данные от ФЭС НСПК для возврата на электронный сертификат. Неоходимо передавать только при оплате со сбором данных на вашей стороне: https://yookassa.ru/developers/payment-acceptance/integration-scenarios/manual-integration/other/electronic-certificate/merchant-payment-form." + properties: + amount: + allOf: + - $ref: "#/components/schemas/MonetaryAmount" + - description: "Сумма, которая вернется на электронный сертификат, — значение totalCertAmount, которое вы получили в ФЭС НСПК в запросе на предварительное одобрение возврата (Refund Pre-Auth): https://www.nspk.ru/developer/api-fes#tag/Protokol-FES-NSPK-v1/operation/preAuthReturn." + basket_id: + allOf: + - $ref: "#/components/schemas/BasketId" + - description: "Идентификатор корзины возврата, сформированной в НСПК, — значение returnBasketId, которое вы получили в ФЭС НСПК в запросе на предварительное одобрение возврата (Refund Pre-Auth): https://www.nspk.ru/developer/api-fes#tag/Protokol-FES-NSPK-v1/operation/preAuthReturn." + required: + - "amount" + - "basket_id" + ElectronicCertificateRefundArticle: + type: "object" + description: "Товарная позиция в корзине возврата при возврате на электронный сертификат." + properties: + article_number: + allOf: + - $ref: "#/components/schemas/ElectronicCertificateArticleNumber" + - description: "Порядковый номер товара в корзине возврата. От 1 до 999 включительно." + payment_article_number: + allOf: + - $ref: "#/components/schemas/ElectronicCertificateArticleNumber" + - description: "Порядковый номер товара в одобренной корзине покупки (article_number в объекте платежа: https://yookassa.ru/developers/api#payment_object). От 1 до 999 включительно." + tru_code: + $ref: "#/components/schemas/ElectronicCertificateTruCode" + quantity: + type: "integer" + format: "int32" + minimum: 1 + description: "Количество возвращаемых единиц товара. Формат: целое положительное число." + example: 10 + required: + - "article_number" + - "payment_article_number" + - "tru_code" + - "quantity" + RefundMethodType: + description: "Код способа оплаты, который использовался при проведении платежа." + type: "string" + enum: + - "sbp" + - "electronic_certificate" + example: "sbp" + RefundMethod: + type: "object" + description: "Детали возврата. Зависят от способа оплаты, который использовался при проведении платежа." + properties: + type: + $ref: "#/components/schemas/RefundMethodType" + discriminator: + propertyName: "type" + mapping: + sbp: "#/components/schemas/SbpRefundMethod" + electronic_certificate: "#/components/schemas/ElectronicCertificateRefundMethod" + required: + - "type" + ElectronicCertificateRefundDataResponse: + type: "object" + description: "Данные от ФЭС НСПК для возврата на электронный сертификат." + properties: + basket_id: + allOf: + - $ref: "#/components/schemas/BasketId" + - description: "Идентификатор корзины возврата, сформированной в НСПК." + amount: + allOf: + - $ref: "#/components/schemas/MonetaryAmount" + - description: "Сумма, которая вернется на электронный сертификат." + required: + - "basket_id" + - "amount" + SettlementRefundItem: + type: "object" + description: "Данные о распределении денег." + properties: + type: + $ref: "#/components/schemas/SettlementItemType" + amount: + allOf: + - $ref: "#/components/schemas/MonetaryAmount" + - description: "Amount by which the seller’s remuneration must be reduced. Must be less than or equal to the refund amount." + discriminator: + propertyName: "type" + mapping: + payout: "#/components/schemas/SettlementPayoutRefund" + required: + - "type" + - "amount" + SettlementPayoutRefund: + allOf: + - $ref: "#/components/schemas/SettlementRefundItem" + - type: "object" + PostReceiptData: + description: "Данные для формирования чека в онлайн-кассе (для коллекции чеков)." + properties: + type: + allOf: + - $ref: "#/components/schemas/ReceiptType" + - description: "Тип чека в онлайн-кассе. Возможные значения: payment (приход), refund (возврат прихода)." + payment_id: + allOf: + - $ref: "#/components/schemas/PaymentId" + - description: "Идентификатор платежа в ЮKassa для отображения информации о чеке в личном кабинете: https://yookassa.ru/my/payments, на платеж не влияет. Обязательный параметр при создании чека прихода: https://yookassa.ru/developers/payment-acceptance/receipts/54fz/other-services/payments#create-receipt (тип чека — payment, статус платежа — waiting_for_capture или succeeded) и при создании чека возврата прихода: https://yookassa.ru/developers/payment-acceptance/receipts/54fz/other-services/payments#payment-receipt-part-capture для отмененного или частично подтвержденного платежа (тип чека — refund, статус платежа — canceled или succeeded). Для одного платежа можно создать не более 30 чеков." + refund_id: + allOf: + - $ref: "#/components/schemas/RefundId" + - description: "Идентификатор возврата в ЮKassa для отображения информации о чеке в личном кабинете: https://yookassa.ru/my. Обязательный параметр при создании чека возврата прихода: https://yookassa.ru/developers/payment-acceptance/receipts/54fz/other-services/refunds#after-refund (если тип чека — refund, статус возврата — succeeded). Для одного возврата можно создать не более 30 чеков." + customer: + $ref: "#/components/schemas/ReceiptDataCustomer" + items: + type: "array" + description: "List of products in the receipt: no more than 80 items for Receipts from YooMoney: https://yookassa.ru/developers/payment-acceptance/receipts/54fz/yoomoney/basics, no more than 100 items for third-party online sales registers: https://yookassa.ru/developers/payment-acceptance/receipts/54fz/other-services/basics." + items: + $ref: "#/components/schemas/PostReceiptDataItem" + internet: + description: "Признак проведения платежа в интернете (тег в 54 ФЗ — 1125) — указывает на оплату через интернет. Возможные значения: true — оплата прошла онлайн, через интернет (например, на вашем сайте или в приложении); false — оплата прошла офлайн, при личном взаимодействии (например, в торговой точке или при встрече с курьером). По умолчанию true. Если вы принимаете платежи офлайн, передайте в запросе значение false." + type: "boolean" + send: + description: "Формирование чека в онлайн-кассе сразу после создания объекта чека. Сейчас можно передать только значение true." + type: "boolean" + default: true + tax_system_code: + $ref: "#/components/schemas/TaxSystemCode" + timezone: + description: "Номер часовой зоны для адреса, по которому вы принимаете платежи (тег в 54 ФЗ — 1011). Указывается, только если в чеке есть товары, которые подлежат обязательной маркировке (в items.mark_code_info передается параметр gs_1m, short или fur). Перечень возможных значений: для Чеков от ЮKassa: https://yookassa.ru/developers/payment-acceptance/receipts/54fz/yoomoney/parameters-values#timezone; для сторонних онлайн-касс: https://yookassa.ru/developers/payment-acceptance/receipts/54fz/other-services/parameters-values#timezone." + type: "integer" + minimum: 1 + maximum: 11 + additional_user_props: + $ref: "#/components/schemas/ReceiptAdditionalUserProps" + receipt_industry_details: + description: "Отраслевой реквизит чека (тег в 54 ФЗ — 1261). Нужно передавать, если используете ФФД 1.2." + type: "array" + items: + $ref: "#/components/schemas/IndustryDetails" + receipt_operational_details: + allOf: + - $ref: "#/components/schemas/OperationalDetails" + - description: "Операционный реквизит чека (тег в 54 ФЗ — 1270). Нужно передавать, если используете ФФД 1.2." + settlements: + $ref: "#/components/schemas/SettlementArray" + on_behalf_of: + allOf: + - $ref: "#/components/schemas/AccountId" + - description: "Идентификатор магазина, от имени которого нужно отправить чек. Выдается ЮKassa, отображается в разделе Продавцы: https://yookassa.ru/my/marketplace/sellers личного кабинета (столбец shopId). Необходимо передавать, если вы используете Сплитование платежей: https://yookassa.ru/developers/solutions-for-platforms/split-payments/basics." + required: + - "customer" + - "type" + - "send" + - "settlements" + - "items" + Receipt: + type: "object" + description: "Receipt object (Receipt) contains all the relevant information about the receipt." + properties: + id: + $ref: "#/components/schemas/ReceiptId" + type: + $ref: "#/components/schemas/ReceiptType" + payment_id: + type: "string" + description: "Идентификатор платежа: https://yookassa.ru/developers/api#payment_object, для которого был сформирован чек." + example: "215d8da0-000f-50be-b000-0003308c89be" + refund_id: + type: "string" + description: "Идентификатор возврата: https://yookassa.ru/developers/api#refund_object, для которого был сформирован чек. Отсутствует в чеке платежа." + example: "215d8da0-000f-50be-b000-0003308c89be" + status: + allOf: + - $ref: "#/components/schemas/ReceiptRegistrationStatus" + - description: "Статус доставки данных для чека в онлайн-кассу. Возможные значения: pending — данные в обработке; succeeded — чек успешно зарегистрирован; canceled — чек зарегистрировать не удалось; если используете Чеки от ЮKassa: https://yookassa.ru/developers/payment-acceptance/receipts/54fz/yoomoney/basics, обратитесь в техническую поддержку, в остальных случаях сформируйте чек вручную." + fiscal_document_number: + type: "string" + description: "Номер фискального документа." + example: "3986" + fiscal_storage_number: + type: "string" + description: "Номер фискального накопителя в кассовом аппарате." + example: "9288000100115785" + fiscal_attribute: + type: "string" + description: "Фискальный признак чека. Формируется фискальным накопителем на основе данных, переданных для регистрации чека." + example: "2617603921" + registered_at: + type: "string" + format: "date-time" + description: "Дата и время формирования чека в фискальном накопителе. Указывается в формате ISO 8601: https://en.wikipedia.org/wiki/ISO_8601." + example: "2019-05-13T17:56:00.000+03:00" + fiscal_provider_id: + type: "string" + description: "Идентификатор чека в онлайн-кассе. Присутствует, если чек удалось зарегистрировать." + example: "fd9e9404-eaca-4000-8ec9-dc228ead2345" + items: + description: "List of products in the receipt: no more than 80 items for Receipts from YooMoney: https://yookassa.ru/developers/payment-acceptance/receipts/54fz/yoomoney/basics, no more than 100 items for third-party online sales registers: https://yookassa.ru/developers/payment-acceptance/receipts/54fz/other-services/basics." + type: "array" + items: + $ref: "#/components/schemas/ReceiptItem" + internet: + description: "Признак проведения платежа в интернете (тег в 54 ФЗ — 1125) — указывает на оплату через интернет. Возможные значения: true — оплата прошла онлайн, через интернет (например, на вашем сайте или в приложении); false — оплата прошла офлайн, при личном взаимодействии (например, в торговой точке или при встрече с курьером). По умолчанию true. Если вы принимаете платежи офлайн, передайте в запросе значение false." + type: "boolean" + settlements: + type: "array" + description: "Перечень совершенных расчетов." + minItems: 1 + items: + $ref: "#/components/schemas/Settlement" + on_behalf_of: + allOf: + - $ref: "#/components/schemas/AccountId" + - description: "Идентификатор магазина, от имени которого нужно отправить чек. Выдается ЮKassa. Присутствует, если вы используете Сплитование платежей: https://yookassa.ru/developers/solutions-for-platforms/split-payments/basics." + tax_system_code: + allOf: + - $ref: "#/components/schemas/TaxSystemCode" + - description: "Система налогообложения магазина (тег в 54 ФЗ — 1055). Для сторонних онлайн-касс: обязательный параметр, если вы используете онлайн-кассу Атол Онлайн, обновленную до ФФД 1.2, или у вас несколько систем налогообложения, в остальных случаях не передается. Перечень возможных значений: https://yookassa.ru/developers/payment-acceptance/receipts/54fz/other-services/parameters-values#tax-systems Для Чеков от ЮKassa: параметр передавать не нужно, ЮKassa его проигнорирует." + timezone: + description: "Номер часовой зоны для адреса, по которому вы принимаете платежи (тег в 54 ФЗ — 1011). Указывается, только если в чеке есть товары, которые подлежат обязательной маркировке (в items.mark_code_info передается параметр gs_1m, short или fur). Перечень возможных значений: для Чеков от ЮKassa: https://yookassa.ru/developers/payment-acceptance/receipts/54fz/yoomoney/parameters-values#timezone; для сторонних онлайн-касс: https://yookassa.ru/developers/payment-acceptance/receipts/54fz/other-services/parameters-values#timezone." + type: "integer" + minimum: 1 + maximum: 11 + receipt_industry_details: + description: "Отраслевой реквизит предмета расчета (тег в 54 ФЗ — 1260)." + type: "array" + items: + $ref: "#/components/schemas/IndustryDetails" + receipt_operational_details: + allOf: + - $ref: "#/components/schemas/OperationalDetails" + - description: "Операционный реквизит чека (тег в 54 ФЗ — 1270)." + required: + - "id" + - "type" + - "status" + - "items" + ReceiptId: + type: "string" + minLength: 39 + maxLength: 39 + description: "Идентификатор чека в ЮKassa." + example: "rt-1da5c87d-0984-50e8-a7f3-8de646dd9ec9" + ReceiptType: + description: "Тип чека в онлайн-кассе: приход (payment) или возврат прихода (refund)." + type: "string" + enum: + - "payment" + - "refund" + PostReceiptDataItem: + type: "object" + description: "Информация о товарной позиции в заказе (для формирования чека)." + properties: + description: + $ref: "#/components/schemas/ReceiptItemDescription" + amount: + allOf: + - $ref: "#/components/schemas/MonetaryAmount" + - description: "Цена товара (тег в 54 ФЗ — 1079)." + vat_code: + allOf: + - $ref: "#/components/schemas/ReceiptItemVatCode" + - description: "Ставка НДС (тег в 54 ФЗ — 1199). Перечень возможных значений: * для Чеков от ЮKassa: https://yookassa.ru/developers/payment-acceptance/receipts/54fz/yoomoney/parameters-values#vat-codes * для сторонних онлайн-касс: https://yookassa.ru/developers/payment-acceptance/receipts/54fz/other-services/parameters-values#vat-codes" + quantity: + allOf: + - $ref: "#/components/schemas/ReceiptItemQuantity" + - description: "Количество товара (тег в 54 ФЗ — 1023). Можно передать целое или дробное число. Разделитель дробной части — точка, разделитель тысяч отсутствует. Пример: 5.000 Максимально возможное значение и максимальное количество знаков после точки (для дробных значений) зависят от модели вашей онлайн-кассы. Для чеков от ЮKassa максимально возможное значение — 99999.999, не более 3 знаков после точки." + measure: + $ref: "#/components/schemas/ReceiptItemMeasure" + mark_quantity: + $ref: "#/components/schemas/MarkQuantity" + payment_subject: + $ref: "#/components/schemas/ReceiptItemPaymentSubject" + payment_mode: + $ref: "#/components/schemas/ReceiptItemPaymentMode" + country_of_origin_code: + $ref: "#/components/schemas/ReceiptItemCountryOfOriginCode" + customs_declaration_number: + $ref: "#/components/schemas/ReceiptItemCustomsDeclarationNumber" + excise: + $ref: "#/components/schemas/ReceiptItemExcise" + product_code: + $ref: "#/components/schemas/ReceiptItemProductCode" + planned_status: + $ref: "#/components/schemas/ReceiptItemPlannedStatus" + mark_code_info: + $ref: "#/components/schemas/MarkCodeInfo" + mark_mode: + $ref: "#/components/schemas/MarkMode" + payment_subject_industry_details: + $ref: "#/components/schemas/ReceiptItemPaymentSubjectIndustryDetails" + additional_payment_subject_props: + description: "Дополнительный реквизит предмета расчета (тег в 54 ФЗ — 1191). Не более 64 символов. Можно передавать, если вы отправляете данные для формирования чека по сценарию Сначала платеж, потом чек: https://yookassa.ru/developers/payment-acceptance/receipts/54fz/other-services/basics#receipt-after-payment" + type: "string" + maxLength: 64 + example: "mdlp2/12&" + supplier: + $ref: "#/components/schemas/PostReceiptItemSupplierWithInn" + agent_type: + $ref: "#/components/schemas/ReceiptItemAgentType" + required: + - "description" + - "quantity" + - "amount" + - "vat_code" + ReceiptAdditionalUserProps: + type: "object" + description: "Дополнительный реквизит пользователя (тег в 54 ФЗ — 1084). Можно передавать, если вы отправляете данные для формирования чека по сценарию Сначала платеж, потом чек: https://yookassa.ru/developers/payment-acceptance/receipts/54fz/other-services/basics#receipt-after-payment" + properties: + name: + description: "Наименование дополнительного реквизита пользователя (тег в 54 ФЗ — 1085). Не более 64 символов." + type: "string" + maxLength: 64 + example: "mdlp3108805" + value: + description: "Значение дополнительного реквизита пользователя (тег в 54 ФЗ — 1086). Не более 234 символов." + type: "string" + maxLength: 234 + example: "ps45102&dnАБV492&&781&dd181110&sid71752852194630&" + required: + - "name" + - "value" + SettlementArray: + type: "array" + description: "Перечень совершенных расчетов." + items: + $ref: "#/components/schemas/Settlement" + Settlement: + type: "object" + description: "Информация о совершенных расчетах." + properties: + type: + description: "Тип расчета. Перечень возможных значений * для Чеков от ЮKassa: https://yookassa.ru/developers/payment-acceptance/receipts/54fz/yoomoney/parameters-values#settlement-type * для сторонних онлайн-касс: https://yookassa.ru/developers/payment-acceptance/receipts/54fz/other-services/parameters-values#settlement-type" + type: "string" + enum: + - "cashless" + - "prepayment" + - "postpayment" + - "consideration" + amount: + allOf: + - $ref: "#/components/schemas/MonetaryAmount" + - description: "Сумма расчета." + required: + - "type" + - "amount" + PostReceiptItemSupplierWithInn: + allOf: + - $ref: "#/components/schemas/ReceiptItemSupplier" + - type: "object" + properties: + inn: + allOf: + - $ref: "#/components/schemas/RussianItn" + - description: "ИНН поставщика (10 или 12 цифр). Тег в 54 ФЗ — 1226. Параметр предусмотрен форматом фискальных документов (ФФД) и является обязательным, начиная с версии 1.05." + ReceiptItemAgentType: + description: "Тип посредника, реализующего товар или услугу. Параметр предусмотрен форматом фискальных документов (ФФД) и является обязательным, начиная с версии 1.1. Перечень возможных значений: https://yookassa.ru/developers/payment-acceptance/receipts/54fz/other-services/parameters-values#agent-type. Можно передавать, если ваша онлайн-касса обновлена до ФФД 1.1 и вы отправляете данные для формирования чека по сценарию Сначала платеж, потом чек: https://yookassa.ru/developers/payment-acceptance/receipts/54fz/other-services/basics#receipt-after-payment" + type: "string" + enum: + - "banking_payment_agent" + - "banking_payment_subagent" + - "payment_agent" + - "payment_subagent" + - "attorney" + - "commissioner" + - "agent" + ReceiptItemSupplier: + type: "object" + description: "Информация о поставщике товара или услуги (тег в 54 ФЗ — 1224). Можно передавать, если вы отправляете данные для формирования чека по сценарию Сначала платеж, потом чек: https://yookassa.ru/developers/payment-acceptance/receipts/54fz/other-services/basics#receipt-after-payment." + properties: + name: + description: "Наименование поставщика (тег в 54 ФЗ — 1225). Параметр предусмотрен форматом фискальных документов (ФФД) и является обязательным, начиная с версии 1.1." + type: "string" + phone: + allOf: + - $ref: "#/components/schemas/Phone" + - description: "Телефон поставщика (тег в 54 ФЗ — 1171). Указывается в формате ITU-T E.164: https://ru.wikipedia.org/wiki/E.164, например 79000000000. Параметр предусмотрен форматом фискальных документов (ФФД) и является обязательным, начиная с версии 1.1." + ReceiptItem: + type: "object" + description: "Информация о товарной позиции в заказе (для формирования чека)." + properties: + description: + description: "Название товара (не более 128 символов). Тег в 54 ФЗ — 1030)." + type: "string" + quantity: + description: "Количество товара (тег в 54 ФЗ — 1023). Формат: десятичное число, дробная часть — три знака или больше (количество знаков зависит от quantity в запросе). Разделитель дробной части — точка, разделитель тысяч отсутствует. Пример: 5.000" + type: "number" + example: 1 + amount: + allOf: + - $ref: "#/components/schemas/MonetaryAmount" + - description: "Цена товара (тег в 54 ФЗ — 1079)." + vat_code: + allOf: + - $ref: "#/components/schemas/ReceiptItemVatCode" + - description: "Ставка НДС (тег в 54 ФЗ — 1199). Перечень возможных значений: * для Чеков от ЮKassa: https://yookassa.ru/developers/payment-acceptance/receipts/54fz/yoomoney/parameters-values#vat-codes * для сторонних онлайн-касс: https://yookassa.ru/developers/payment-acceptance/receipts/54fz/other-services/parameters-values#vat-codes" + payment_subject: + $ref: "#/components/schemas/ReceiptItemPaymentSubject" + payment_mode: + $ref: "#/components/schemas/ReceiptItemPaymentMode" + country_of_origin_code: + type: "string" + description: "Код страны происхождения товара по общероссийскому классификатору стран мира (OК (MК (ИСО 3166) 004-97) 025-2001: http://docs.cntd.ru/document/842501280). Тег в 54 ФЗ — 1230. Пример: RU. Онлайн-кассы, которые поддерживают этот параметр: Orange Data, Кит Инвест." + example: "RU" + customs_declaration_number: + type: "string" + description: "Номер таможенной декларации (от 1 до 32 символов). Тег в 54 ФЗ — 1231. Онлайн-кассы, которые поддерживают этот параметр: Orange Data, Кит Инвест." + minLength: 1 + maxLength: 32 + example: "10714040/140917/0090376" + excise: + type: "string" + description: "Сумма акциза товара с учетом копеек (тег в 54 ФЗ — 1229). Десятичное число с точностью до 2 символов после точки. Онлайн-кассы, которые поддерживают этот параметр: Orange Data, Кит Инвест." + example: "20.00" + supplier: + $ref: "#/components/schemas/ReceiptItemSupplierWithInn" + agent_type: + $ref: "#/components/schemas/ReceiptItemAgentType" + mark_code_info: + $ref: "#/components/schemas/MarkCodeInfo" + measure: + $ref: "#/components/schemas/ReceiptItemMeasure" + payment_subject_industry_details: + description: "Отраслевой реквизит предмета расчета (тег в 54 ФЗ — 1260). Обязателен при использовании ФФД 1.2." + type: "array" + items: + $ref: "#/components/schemas/IndustryDetails" + product_code: + type: "string" + description: "Product code (tag 1162 in 54-FZ) is a unique number assigned to a unit of product during marking process. Format: hexadecimal number with spaces. Maximum length is 32 bytes. Example: 00 00 00 01 00 21 FA 41 00 23 05 41 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 12 00 AB 00. This parameter is required if both conditions apply: your online sales register is updated to FFD 1.05 or 1.1; the product is subject to mandatory marking: http://docs.cntd.ru/document/902192509. The parameter must not be included in the request if you are using Receipts from YooMoney: https://yookassa.ru/developers/payment-acceptance/receipts/54fz/yoomoney/basics or an online sales register updated to FFD 1.2: https://yookassa.ru/developers/payment-acceptance/receipts/54fz/other-services/marking." + example: "00 00 00 01 00 21 FA 41 00 23 05 41 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 12 00 AB 00" + planned_status: + $ref: "#/components/schemas/ReceiptItemPlannedStatus" + mark_mode: + $ref: "#/components/schemas/MarkMode" + mark_quantity: + $ref: "#/components/schemas/MarkQuantity" + required: + - "description" + - "quantity" + - "amount" + - "vat_code" + ReceiptItemSupplierWithInn: + allOf: + - $ref: "#/components/schemas/ReceiptItemSupplier" + - type: "object" + properties: + inn: + allOf: + - $ref: "#/components/schemas/RussianItn" + - description: "ИНН поставщика в маскированном виде (тег в 54 ФЗ — 1226). Пример: ***. Параметр предусмотрен форматом фискальных документов (ФФД) и является обязательным, начиная с версии 1.05." + SafeDealRequest: + description: "Данные для создания сделки." + type: "object" + properties: + type: + $ref: "#/components/schemas/DealType" + fee_moment: + $ref: "#/components/schemas/FeeMoment" + metadata: + $ref: "#/components/schemas/Metadata" + description: + allOf: + - $ref: "#/components/schemas/Description" + - description: "Описание сделки (не более 128 символов). Используется для фильтрации при получении списка сделок: https://yookassa.ru/developers/api#get_deals_list." + required: + - "type" + - "fee_moment" + SafeDeal: + allOf: + - $ref: "#/components/schemas/BaseDeal" + - type: "object" + properties: + id: + $ref: "#/components/schemas/DealId" + fee_moment: + $ref: "#/components/schemas/FeeMoment" + description: + allOf: + - $ref: "#/components/schemas/Description" + - description: "Описание сделки (не более 128 символов). Используется для фильтрации при получении списка сделок: https://yookassa.ru/developers/api#get_deals_list." + balance: + allOf: + - $ref: "#/components/schemas/MonetaryAmount" + - description: "Баланс сделки." + payout_balance: + allOf: + - $ref: "#/components/schemas/MonetaryAmount" + - description: "Сумма вознаграждения продавца." + status: + $ref: "#/components/schemas/DealStatus" + created_at: + description: "Время создания сделки. Указывается по UTC: https://ru.wikipedia.org/wiki/%D0%92%D1%81%D0%B5%D0%BC%D0%B8%D1%80%D0%BD%D0%BE%D0%B5_%D0%BA%D0%BE%D0%BE%D1%80%D0%B4%D0%B8%D0%BD%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%BE%D0%B5_%D0%B2%D1%80%D0%B5%D0%BC%D1%8F и передается в формате ISO 8601: https://en.wikipedia.org/wiki/ISO_8601. Пример: 2017-11-03T11:52:31.827Z" + type: "string" + format: "date-time" + example: "2020-07-03T11:52:31.827Z" + expires_at: + description: "Время автоматического закрытия сделки. Если в указанное время сделка всё еще в статусе opened, ЮKassa вернет деньги покупателю и закроет сделку. По умолчанию время жизни сделки составляет 90 дней. Время указывается по UTC: https://ru.wikipedia.org/wiki/%D0%92%D1%81%D0%B5%D0%BC%D0%B8%D1%80%D0%BD%D0%BE%D0%B5_%D0%BA%D0%BE%D0%BE%D1%80%D0%B4%D0%B8%D0%BD%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%BE%D0%B5_%D0%B2%D1%80%D0%B5%D0%BC%D1%8F и передается в формате ISO 8601: https://en.wikipedia.org/wiki/ISO_8601. Пример: 2017-11-03T11:52:31.827Z" + type: "string" + format: "date-time" + example: "2021-01-03T18:31:22.532Z" + metadata: + $ref: "#/components/schemas/Metadata" + test: + $ref: "#/components/schemas/Test" + required: + - "id" + - "balance" + - "payout_balance" + - "status" + - "created_at" + - "expires_at" + - "test" + - "fee_moment" + DealStatus: + description: "Статус сделки. Возможные значения: * opened — сделка открыта; можно выполнять платежи, возвраты и выплаты в составе сделки; * closed — сделка закрыта — вознаграждение перечислено продавцу и платформе или оплата возвращена покупателю; нельзя выполнять платежи, возвраты и выплаты в составе сделки." + type: "string" + enum: + - "opened" + - "closed" + example: "closed" + DealType: + description: "Тип сделки. Фиксированное значение: safe_deal — Безопасная сделка." + type: "string" + enum: + - "safe_deal" + example: "safe_deal" + FeeMoment: + description: "Момент перечисления вам вознаграждения платформы. Возможные значения: payment_succeeded — после успешной оплаты; deal_closed — при закрытии сделки после успешной выплаты." + type: "string" + default: "payment_succeeded" + enum: + - "payment_succeeded" + - "deal_closed" + example: "payment_succeeded" + BaseDeal: + description: "Deal object (Deal) contains all the relevant information about the deal." + type: "object" + discriminator: + propertyName: "type" + mapping: + safe_deal: "#/components/schemas/SafeDeal" + properties: + type: + $ref: "#/components/schemas/DealType" + required: + - "type" + PayoutRequest: + description: "Данные для создания выплаты." + type: "object" + properties: + amount: + allOf: + - $ref: "#/components/schemas/MonetaryAmount" + - description: "Сумма выплаты. Есть ограничения на минимальный и максимальный размер выплаты и сумму выплат за месяц. Подробнее о лимитах обычных выплат: https://yookassa.ru/developers/payouts/getting-started/payout-types-and-limits и выплат в рамках Безопасной сделки: https://yookassa.ru/developers/solutions-for-platforms/safe-deal/integration/payouts#specifics" + payout_destination_data: + oneOf: + - $ref: "#/components/schemas/PayoutToYooMoneyDestinationData" + - $ref: "#/components/schemas/PayoutToBankCardDestinationData" + - $ref: "#/components/schemas/PayoutToSbpDestinationData" + discriminator: + propertyName: "type" + payout_token: + type: "string" + description: "Токенизированные данные для выплаты. Например, синоним банковской карты. Обязательный параметр, если не передан payout_destination_data или payment_method_id." + example: "hoiCz_UVAdi_eKEthqhjRIJp.SC.001.202101" + payment_method_id: + allOf: + - $ref: "#/components/schemas/PaymentMethodId" + - description: "Идентификатор сохраненного способа оплаты, данные которого нужно использовать для проведения выплаты. Подробнее о выплатах с использованием идентификатора сохраненного способа оплаты: https://yookassa.ru/developers/payouts/scenario-extensions/multipurpose-token Обязательный параметр, если не передан payout_destination_data или payout_token." + description: + allOf: + - $ref: "#/components/schemas/Description" + - description: "Описание транзакции (не более 128 символов). Например: «Выплата по договору 37»." + deal: + $ref: "#/components/schemas/PayoutDealInfo" + personal_data: + type: "array" + description: "Персональные данные получателя выплаты. Только для обычных выплат. Необходимо передавать в этих сценариях: * выплаты с проверкой получателя: https://yookassa.ru/developers/payouts/scenario-extensions/recipient-check (только для выплат через СБП); * выплаты с передачей данных получателя для выписок из реестра: https://yookassa.ru/developers/payouts/scenario-extensions/recipient-data-send. В массиве можно одновременно передать несколько идентификаторов, но только для разных типов данных." + minItems: 1 + maxItems: 2 + items: + $ref: "#/components/schemas/PayoutsPersonalData" + metadata: + $ref: "#/components/schemas/Metadata" + test: + $ref: "#/components/schemas/Test" + required: + - "amount" + Payout: + description: "Payout object (Payout) contains all the relevant information about the payout." + type: "object" + properties: + id: + $ref: "#/components/schemas/PayoutId" + amount: + allOf: + - $ref: "#/components/schemas/MonetaryAmount" + - description: "Сумма выплаты." + status: + $ref: "#/components/schemas/PayoutStatus" + payout_destination: + oneOf: + - $ref: "#/components/schemas/PayoutToCardDestination" + - $ref: "#/components/schemas/PayoutToYooMoneyDestination" + - $ref: "#/components/schemas/PayoutToSbpDestination" + discriminator: + propertyName: "type" + description: + allOf: + - $ref: "#/components/schemas/Description" + - description: "Описание транзакции (не более 128 символов). Например: «Выплата по договору 37»." + created_at: + description: "Время создания выплаты. Указывается по UTC: https://ru.wikipedia.org/wiki/%D0%92%D1%81%D0%B5%D0%BC%D0%B8%D1%80%D0%BD%D0%BE%D0%B5_%D0%BA%D0%BE%D0%BE%D1%80%D0%B4%D0%B8%D0%BD%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%BE%D0%B5_%D0%B2%D1%80%D0%B5%D0%BC%D1%8F и передается в формате ISO 8601: https://en.wikipedia.org/wiki/ISO_8601. Пример: 2017-11-03T11:52:31.827Z" + type: "string" + format: "date-time" + example: "2020-07-03T11:52:31.827Z" + succeeded_at: + description: "Time of a successful payout processing. Based on UTC: https://en.wikipedia.org/wiki/Coordinated_Universal_Time and specified in the ISO 8601: https://en.wikipedia.org/wiki/ISO_8601 format. Example: 2017-11-03T11:52:42.312Z Mandatory parameter for payouts with the succeeded status." + type: "string" + format: "date-time" + example: "2020-07-03T11:52:42.312Z" + deal: + allOf: + - $ref: "#/components/schemas/PayoutDealInfo" + - description: "Сделка, в рамках которой нужно провести выплату. Присутствует, если вы проводите Безопасную сделку: https://yookassa.ru/developers/solutions-for-platforms/safe-deal/basics." + - type: "object" + self_employed: + allOf: + - $ref: "#/components/schemas/PayoutSelfEmployedInfo" + - description: "Details of the self-employed individual who will receive the payout. Deprecated parameter. It was previously returned when making payouts to self-employed individuals. This option is currently unavailable. The parameter is kept for backward compatibility and may be removed in future API versions." + - type: "object" + receipt: + $ref: "#/components/schemas/IncomeReceipt" + cancellation_details: + $ref: "#/components/schemas/PayoutCancellationDetails" + metadata: + $ref: "#/components/schemas/Metadata" + test: + $ref: "#/components/schemas/Test" + required: + - "id" + - "amount" + - "status" + - "payout_destination" + - "created_at" + - "test" + PayoutStatus: + type: "string" + description: "Статус выплаты. Возможные значения: pending — выплата создана, но деньги еще не поступили на указанное платежное средство пользователя (например, ЮKassa ждет подтверждения от эквайера, что перевод успешен); succeeded — выплата успешно завершена, деньги переведены на платежное средство пользователя (финальный и неизменяемый статус); canceled — выплата отменена, инициатор и причина отмены указаны в объекте cancellation_details (финальный и неизменяемый статус)." + enum: + - "pending" + - "succeeded" + - "canceled" + PayoutsList: + type: "object" + description: "Список выплат. Выплаты отсортированы по времени создания в порядке убывания (от новых к старым). Если результатов больше, чем задано в limit, список будет выводиться фрагментами. В этом случае в ответе на запрос вернется фрагмент списка и параметр next_cursor с указателем на следующий фрагмент." + properties: + type: + type: "string" + description: "Формат выдачи результатов запроса. Возможное значение: list (список)." + enum: + - "list" + items: + type: "array" + items: + $ref: "#/components/schemas/Payout" + next_cursor: + $ref: "#/components/schemas/NextCursor" + required: + - "type" + - "items" + PayoutId: + description: "Идентификатор выплаты." + minLength: 36 + maxLength: 50 + type: "string" + example: "po-27ced252-0025-5000-9000-0a682a8bab8f" + PayoutToYooMoneyDestinationData: + description: "Данные для выплаты на кошелек ЮMoney." + allOf: + - $ref: "#/components/schemas/PayoutDestinationData" + - type: "object" + properties: + account_number: + allOf: + - $ref: "#/components/schemas/YooMoneyAccountNumber" + - description: "Номер кошелька ЮMoney, например 41001614575714. Длина от 11 до 33 цифр. Статус кошелька: https://yoomoney.ru/page?id=536140: для обычных выплат: https://yookassa.ru/developers/payouts/overview — любой, для выплат в рамках Безопасной сделки: https://yookassa.ru/developers/solutions-for-platforms/safe-deal/basics — именной или идентифицированный." + - type: "string" + required: + - "account_number" + PayoutToBankCardDestinationData: + description: "Данные для выплаты на банковскую карту." + allOf: + - $ref: "#/components/schemas/PayoutDestinationData" + - type: "object" + properties: + card: + $ref: "#/components/schemas/CardDataForPayoutDestination" + required: + - "card" + PayoutToSbpDestinationData: + description: "Данные для выплаты на счет в банке через систему быстрых платежей." + allOf: + - $ref: "#/components/schemas/PayoutDestinationData" + - type: "object" + properties: + phone: + allOf: + - $ref: "#/components/schemas/Phone" + - description: "Телефон, к которому привязан счет получателя выплаты в системе участника СБП. Указывается в формате ITU-T E.164: https://ru.wikipedia.org/wiki/E.164, например 79000000000." + bank_id: + allOf: + - $ref: "#/components/schemas/SbpBankId" + - description: "FPS participant ID, a bank or payment service connected to the service. Maximum 12 characters. How to get an FPS participant ID: https://yookassa.ru/developers/payouts/making-payouts/sbp" + required: + - "phone" + - "bank_id" + PayoutDealInfo: + type: "object" + description: "Сделка, в рамках которой нужно провести выплату. Необходимо передавать, если вы проводите Безопасную сделку: https://yookassa.ru/developers/solutions-for-platforms/safe-deal/basics" + properties: + id: + $ref: "#/components/schemas/DealId" + required: + - "id" + PayoutsPersonalData: + type: "object" + description: "Персональные данные получателя выплаты. Только для обычных выплат. Необходимо передавать в этих сценариях: * выплаты с проверкой получателя: https://yookassa.ru/developers/payouts/scenario-extensions/recipient-check; * выплаты с передачей данных получателя для выписок из реестра: https://yookassa.ru/developers/payouts/scenario-extensions/recipient-data-send." + properties: + id: + $ref: "#/components/schemas/PersonalDataId" + required: + - "id" + PayoutDestinationType: + description: "Способ получения выплаты: * bank_card – выплата на банковскую карту; * yoo_money – выплата на кошелек ЮMoney; * sbp – выплата через СБП на счет в банке или платежном сервисе." + type: "string" + enum: + - "bank_card" + - "yoo_money" + - "sbp" + PayoutDestination: + type: "object" + description: "The means of payment that YooMoney sends the payout to." + discriminator: + propertyName: "type" + mapping: + bank_card: "#/components/schemas/PayoutToCardDestination" + yoo_money: "#/components/schemas/PayoutToYooMoneyDestination" + sbp: "#/components/schemas/PayoutToSbpDestination" + properties: + type: + $ref: "#/components/schemas/PayoutDestinationType" + required: + - "type" + PayoutCardData: + type: "object" + description: "Данные банковской карты." + properties: + first6: + allOf: + - $ref: "#/components/schemas/BankCardFirst6" + - description: "Первые 6 цифр номера карты (BIN)." + last4: + $ref: "#/components/schemas/BankCardLast4" + card_type: + $ref: "#/components/schemas/BankCardType" + issuer_country: + $ref: "#/components/schemas/BankCardIssuerCountry" + issuer_name: + $ref: "#/components/schemas/BankCardIssuerName" + required: + - "first6" + - "last4" + - "card_type" + PayoutToCardDestination: + description: "Выплаты на банковскую карту" + allOf: + - $ref: "#/components/schemas/PayoutDestination" + - type: "object" + properties: + card: + $ref: "#/components/schemas/PayoutCardData" + PayoutToYooMoneyDestination: + description: "Выплаты на кошелек ЮMoney." + allOf: + - $ref: "#/components/schemas/PayoutDestination" + - type: "object" + properties: + account_number: + $ref: "#/components/schemas/YooMoneyAccountNumber" + required: + - "account_number" + PayoutToSbpDestination: + description: "Данные для выплаты через СБП на счет в банке или платежном сервисе." + allOf: + - $ref: "#/components/schemas/PayoutDestination" + - type: "object" + properties: + phone: + allOf: + - $ref: "#/components/schemas/Phone" + - description: "Телефон, к которому привязан счет получателя выплаты в системе участника СБП. Указывается в формате ITU-T E.164: https://ru.wikipedia.org/wiki/E.164, например 79000000000." + bank_id: + type: "string" + description: "Идентификатор участника СБП — банка или платежного сервиса, подключенного к сервису." + example: "100000000111" + maxLength: 12 + recipient_checked: + type: "boolean" + description: "Проверка получателя выплаты: https://yookassa.ru/developers/payouts/scenario-extensions/recipient-check: true — выплата проходила с проверкой получателя, false — выплата проходила без проверки получателя." + example: false + required: + - "phone" + - "bank_id" + - "recipient_checked" + PayoutSelfEmployedInfo: + type: "object" + description: "Данные самозанятого, который получит выплату. Только для обычных выплат. Устаревший параметр. Раньше использовался для выплат самозанятым. Сейчас функциональность недоступна. Параметр сохранен для поддержки обратной совместимости, в новых версиях API может быть удален." + properties: + id: + $ref: "#/components/schemas/SelfEmployedId" + required: + - "id" + IncomeReceipt: + type: "object" + description: "Details of the receipt recorded at the Tax Service. Deprecated parameter. It was previously returned when making payouts to self-employed individuals. This option is currently unavailable. The parameter is kept for backward compatibility and may be removed in future API versions." + properties: + service_name: + $ref: "#/components/schemas/IncomeReceiptServiceName" + npd_receipt_id: + $ref: "#/components/schemas/NpdIncomeReceiptId" + url: + $ref: "#/components/schemas/IncomeReceiptUrl" + amount: + allOf: + - $ref: "#/components/schemas/MonetaryAmount" + - description: "Сумма, указанная в чеке. Присутствует, если в запросе передавалась сумма для печати в чеке." + required: + - "service_name" + PayoutCancellationDetails: + type: "object" + description: "Комментарий к статусу canceled: кто отменил выплату и по какой причине." + properties: + party: + type: "string" + description: "Участник процесса выплаты, который принял решение об отмене транзакции. Перечень инициаторов отмены выплаты: для обычных выплат: https://yookassa.ru/developers/payouts/after-the-payout/declined-payouts#cancellation-details-party, для выплат в рамках Безопасной сделки: https://yookassa.ru/developers/solutions-for-platforms/safe-deal/integration/payouts#declined-payouts-cancellation-details-party." + enum: + - "yoo_money" + - "payout_network" + reason: + type: "string" + description: "Причина отмены выплаты. Перечень и описание возможных значений: для обычных выплат: https://yookassa.ru/developers/payouts/after-the-payout/declined-payouts#cancellation-details-reason, для выплат в рамках Безопасной сделки: https://yookassa.ru/developers/solutions-for-platforms/safe-deal/integration/payouts#declined-payouts-cancellation-details-reason." + example: "insufficient_funds" + enum: + - "insufficient_funds" + - "fraud_suspected" + - "one_time_limit_exceeded" + - "periodic_limit_exceeded" + - "rejected_by_payee" + - "general_decline" + - "issuer_unavailable" + - "recipient_not_found" + - "recipient_check_failed" + - "identification_required" + - "self_employed_annual_limit_exceeded" + required: + - "party" + - "reason" + SelfEmployedId: + type: "string" + description: "Идентификатор самозанятого в ЮKassa." + minLength: 36 + maxLength: 50 + example: "se-7474a846-a965-498d-bbf9-1c3c8907cbbd" + PersonalDataId: + description: "Идентификатор персональных данных, сохраненных в ЮKassa." + minLength: 36 + maxLength: 50 + type: "string" + example: "pd-22e12f66-000f-5000-8000-18db351245c7" + IncomeReceiptServiceName: + type: "string" + description: "Описание услуги, оказанной получателем выплаты. Не более 50 символов." + minLength: 1 + maxLength: 50 + example: "Оказание услуг по доставке товара" + NpdIncomeReceiptId: + type: "string" + description: "Идентификатор чека в сервисе. Пример: 208jd98zqe" + example: "208jd98zqe" + IncomeReceiptUrl: + type: "string" + description: "Ссылка на зарегистрированный чек. Пример: https://www.nalog.gov.ru/api/v1/receipt/<Идентификатор чека>/print" + example: "https://www.nalog.gov.ru/api/v1/receipt/208jd98zqe/print" + SbpParticipantBank: + type: "object" + description: "FPS (Faster Payment System of the Russian Federation) participant object contains all the relevant information about the bank or payment service connected to the FPS." + properties: + bank_id: + $ref: "#/components/schemas/SbpBankId" + name: + type: "string" + description: "Название банка или платежного сервиса в СБП." + maxLength: 128 + example: "Сбербанк" + bic: + $ref: "#/components/schemas/SbpBankBic" + required: + - "bank_id" + - "name" + - "bic" + SbpPayoutRecipientPersonalDataRequest: + allOf: + - $ref: "#/components/schemas/PersonalDataRequest" + - type: "object" + properties: + last_name: + $ref: "#/components/schemas/LastName" + first_name: + $ref: "#/components/schemas/FirstName" + middle_name: + $ref: "#/components/schemas/MiddleName" + required: + - "last_name" + - "first_name" + PayoutStatementRecipientPersonalDataRequest: + allOf: + - $ref: "#/components/schemas/PersonalDataRequest" + - type: "object" + properties: + last_name: + $ref: "#/components/schemas/LastName" + first_name: + $ref: "#/components/schemas/FirstName" + middle_name: + $ref: "#/components/schemas/MiddleName" + birthdate: + description: "Дата рождения. Передается в формате ISO 8601: https://en.wikipedia.org/wiki/ISO_8601" + type: "string" + format: "date" + example: "2020-11-18" + required: + - "last_name" + - "first_name" + - "birthdate" + PersonalData: + description: "Personal data object (PersonalData) contains all the relevant information about the personal information of the user saved in YooMoney." + type: "object" + properties: + id: + $ref: "#/components/schemas/PersonalDataId" + type: + $ref: "#/components/schemas/PersonalDataType" + status: + type: "string" + description: "Статус персональных данных. Возможные значения: waiting_for_operation — данные сохранены, но не использованы при проведении выплаты; active — данные сохранены и использованы при проведении выплаты; данные можно использовать повторно до срока, указанного в параметре expires_at; canceled — хранение данных отменено, данные удалены, инициатор и причина отмены указаны в объекте cancellation_details (финальный и неизменяемый статус). Жизненный цикл персональных данных зависит от назначения данных: передача данных получателя выплаты: https://yookassa.ru/developers/payouts/scenario-extensions/recipient-data-send#lifecircle для выписки из реестра или проверка получателя: https://yookassa.ru/developers/payouts/scenario-extensions/recipient-check#lifecircle при выплатах через СБП." + enum: + - "waiting_for_operation" + - "active" + - "canceled" + cancellation_details: + $ref: "#/components/schemas/PersonalDataCancellationDetails" + created_at: + type: "string" + description: "Время создания персональных данных. Указывается по UTC: https://ru.wikipedia.org/wiki/%D0%92%D1%81%D0%B5%D0%BC%D0%B8%D1%80%D0%BD%D0%BE%D0%B5_%D0%BA%D0%BE%D0%BE%D1%80%D0%B4%D0%B8%D0%BD%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%BE%D0%B5_%D0%B2%D1%80%D0%B5%D0%BC%D1%8F и передается в формате ISO 8601: https://en.wikipedia.org/wiki/ISO_8601. Пример: 2017-11-03T11:52:31.827Z" + format: "date-time" + expires_at: + type: "string" + description: "Срок жизни объекта персональных данных — время, до которого вы можете использовать персональные данные при проведении операций. Указывается только для объекта в статусе active. Указывается по UTC: https://ru.wikipedia.org/wiki/%D0%92%D1%81%D0%B5%D0%BC%D0%B8%D1%80%D0%BD%D0%BE%D0%B5_%D0%BA%D0%BE%D0%BE%D1%80%D0%B4%D0%B8%D0%BD%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%BE%D0%B5_%D0%B2%D1%80%D0%B5%D0%BC%D1%8F и передается в формате ISO 8601: https://en.wikipedia.org/wiki/ISO_8601. Пример: 2017-11-03T11:52:31.827Z" + format: "date-time" + metadata: + $ref: "#/components/schemas/Metadata" + required: + - "id" + - "status" + - "type" + - "created_at" + PersonalDataType: + description: "Тип персональных данных — цель, для которой вы будете использовать данные. Возможные значение: sbp_payout_recipient — выплаты с проверкой получателя: https://yookassa.ru/developers/payouts/scenario-extensions/recipient-check(только для выплат через СБП); payout_statement_recipient — выплаты с передачей данных получателя выплаты для выписок из реестра: https://yookassa.ru/developers/payouts/scenario-extensions/recipient-data-send." + type: "string" + enum: + - "payout_statement_recipient" + - "sbp_payout_recipient" + example: "sbp_payout_recipient" + PersonalDataRequest: + description: "Данные для запроса сохранения персональных данных." + type: "object" + discriminator: + propertyName: "type" + mapping: + payout_statement_recipient: "#/components/schemas/PayoutStatementRecipientPersonalDataRequest" + sbp_payout_recipient: "#/components/schemas/SbpPayoutRecipientPersonalDataRequest" + properties: + type: + $ref: "#/components/schemas/PersonalDataType" + metadata: + $ref: "#/components/schemas/Metadata" + required: + - "type" + LastName: + description: "Фамилия пользователя." + type: "string" + pattern: "^[\\-a-zA-Zа-яёА-ЯЁ ]]*$" + example: "Иванов" + minLength: 1 + maxLength: 200 + FirstName: + description: "Имя пользователя." + type: "string" + pattern: "^[\\-a-zA-Zа-яёА-ЯЁ ]]*$" + example: "Иван" + minLength: 1 + maxLength: 100 + MiddleName: + description: "Отчество пользователя. Обязательный параметр, если есть в паспорте." + type: "string" + pattern: "^[\\-a-zA-Zа-яёА-ЯЁ ]]*$" + example: "Иванович" + minLength: 1 + maxLength: 200 + PersonalDataCancellationDetails: + type: "object" + description: "Комментарий к статусу canceled: кто и по какой причине аннулировал хранение данных." + properties: + party: + type: "string" + description: "Участник процесса, который принял решение о прекращении хранения персональных данных. Возможное значение: yoo_money — ЮKassa." + enum: + - "yoo_money" + reason: + type: "string" + description: "Причина прекращения хранения персональных данных. Возможное значение: expired_by_timeout — истек срок хранения или использования персональных данных." + example: "expired_by_timeout" + enum: + - "expired_by_timeout" + required: + - "party" + - "reason" + NotificationEventType: + type: "string" + enum: + - "payment.waiting_for_capture" + - "payment.succeeded" + - "payment.canceled" + - "refund.succeeded" + example: "payment.succeeded" + Webhook: + type: "object" + description: "Данные о webhook." + properties: + id: + description: "Идентификатор webhook." + type: "string" + example: "wh-e44e8088-bd73-43b1-959a-954f3a7d0c54" + event: + allOf: + - $ref: "#/components/schemas/NotificationEventType" + - description: "Событие: https://yookassa.ru/developers/using-api/webhooks#events, о котором уведомляет ЮKassa." + url: + description: "URL, на который ЮKassa отправляет уведомления." + type: "string" + example: "https://www.example.com/notification_url" + required: + - "id" + - "event" + - "url" + WebhookList: + type: "object" + description: "Список webhook." + properties: + type: + type: "string" + description: "Формат выдачи результатов запроса. Возможное значение: list (список)." + enum: + - "list" + items: + type: "array" + items: + $ref: "#/components/schemas/Webhook" + required: + - "type" + - "items" + Me: + type: "object" + description: "Store or gateway settings object (Me) contains all the relevant information about the settings of a store or gateway." + properties: + account_id: + allOf: + - $ref: "#/components/schemas/AccountId" + - description: "Идентификатор магазина или шлюза." + status: + type: "string" + description: "Статус магазина или шлюза. Возможные значения: * enabled — подключен к ЮKassa, может проводить платежи или выплаты; * disabled — не может проводить платежи или выплаты (еще не подключен, закрыт или временно не работает)." + enum: + - "enabled" + - "disabled" + test: + description: "Это тестовый магазин или шлюз." + type: "boolean" + example: true + fiscalization: + $ref: "#/components/schemas/FiscalizationData" + fiscalization_enabled: + description: "Устаревший параметр, который раньше использовался для определения настроек отправки чеков в налоговую. Сохранен для поддержки обратной совместимости, в новых версиях API может быть удален. Используйте объект fiscalization, чтобы определить, какие у магазина настройки отправки чеков." + type: "boolean" + example: true + payment_methods: + type: "array" + description: "Список способов оплаты: https://yookassa.ru/developers/payment-acceptance/getting-started/payment-methods#all, доступных магазину. Присутствует, если вы запрашивали настройки магазина." + items: + $ref: "#/components/schemas/PaymentMethodType" + itn: + allOf: + - $ref: "#/components/schemas/GlobalItn" + - description: "ИНН магазина (от 1 до 20 цифр). Присутствует, если вы запрашивали настройки магазина." + payout_methods: + type: "array" + description: "Список способов получения выплат, доступных шлюзу. Возможные значения: * bank_card — выплаты на банковские карты; * yoo_money — выплаты на кошельки ЮMoney; * sbp — выплаты через СБП. Присутствует, если вы запрашивали настройки шлюза." + items: + $ref: "#/components/schemas/PayoutMethodType" + name: + description: "Название шлюза, которое отображается в личном кабинете ЮKassa. Присутствует, если вы запрашивали настройки шлюза." + type: "string" + example: "TestName" + payout_balance: + allOf: + - $ref: "#/components/schemas/MonetaryAmount" + - description: "Баланс вашего шлюза. Присутствует, если вы запрашивали настройки шлюза." + required: + - "account_id" + - "test" + - "status" + FiscalizationData: + description: "Настройки магазина для отправки чеков в налоговую: https://yookassa.ru/developers/payment-acceptance/receipts/basics. Присутствует, если вы запрашивали настройки магазина и этот магазин использует решения ЮKassa для отправки чеков. Отсутствует, если магазин еще не включал отправку чеков через ЮKassa." + type: "object" + properties: + enabled: + description: "В настройках магазина включена отправка чеков. Возможные значения: * true — магазин отправляет данные для чеков через ЮKassa; * false — магазин выключил отправку чеков через ЮKassa." + type: "boolean" + example: true + provider: + $ref: "#/components/schemas/FiscalizationProvider" + required: + - "provider" + - "enabled" + GlobalItn: + description: "ИНН пользователя (от 1 до 20 цифр)." + type: "string" + example: "632134181463213" + pattern: "\\d{1,20}" + PayoutMethodType: + description: "Способ получения выплаты." + type: "string" + enum: + - "bank_card" + - "yoo_money" + - "sbp" + example: "bank_card" + responses: + BadRequest: + description: "Запрос не может быть обработан. Причиной может быть неправильный синтаксис запроса, ошибка в обязательных параметрах запроса, их отсутствие или неподдерживаемый метод." + content: + application/json: + schema: + $ref: "#/components/schemas/BadRequest" + InvalidCredentials: + description: "В заголовке Authorization указан неверный ключ." + content: + application/json: + schema: + $ref: "#/components/schemas/InvalidCredentials" + Forbidden: + description: "Секретный ключ указан верно, но не хватает прав для совершения операции." + content: + application/json: + schema: + $ref: "#/components/schemas/Forbidden" + InternalServerError: + description: "Внутренняя ошибка сервера ЮKassa." + content: + application/json: + schema: + $ref: "#/components/schemas/TooManyRequests" + NotFound: + description: "Сущность не найдена." + content: + application/json: + schema: + $ref: "#/components/schemas/NotFound" + TooManyRequests: + description: "Слишком много запросов одновременно отправляется в API. Повторите запрос позже." + content: + application/json: + schema: + $ref: "#/components/schemas/TooManyRequests" diff --git a/internal/service/yookassa/yookassa_service.go b/internal/service/yookassa/yookassa_service.go index 8635b9e..bdec759 100644 --- a/internal/service/yookassa/yookassa_service.go +++ b/internal/service/yookassa/yookassa_service.go @@ -1,13 +1,42 @@ package yookassa -import "payouts/internal/service/yookassa/config" +import ( + "context" + "payouts/internal/service/yookassa/config" + "payouts/internal/service/yookassa/gen" + + "github.com/ogen-go/ogen/ogenerrors" +) type yookassaService struct { - conf config.YooKassa + conf config.YooKassa + payClient *gen.Client +} + +// BasicAuth implements [gen.SecuritySource]. +func (y *yookassaService) BasicAuth(ctx context.Context, operationName gen.OperationName) (gen.BasicAuth, error) { + return gen.BasicAuth{ + Username: y.conf.ApiPaymentKey, + Password: y.conf.ApiBaseSecret, + }, nil +} + +// OAuth2 implements [gen.SecuritySource]. +func (y *yookassaService) OAuth2(ctx context.Context, operationName gen.OperationName) (gen.OAuth2, error) { + return gen.OAuth2{}, ogenerrors.ErrSkipClientSecurity } func NewYookassaService(conf config.YooKassa) (Service, error) { - return &yookassaService{ + + svc := &yookassaService{ conf: conf, - }, nil + } + payClient, err := gen.NewClient(conf.BaseUrl, svc) + if err != nil { + return nil, err + } + svc.payClient = payClient + + // payClient.PaymentsPost() + return svc, nil }