From e3eba0c0e846b286ca7bcbabe24a52986888e7f6 Mon Sep 17 00:00:00 2001 From: khulnasoft-bot <43526132+khulnasoft-bot@users.noreply.github.com> Date: Tue, 3 Dec 2024 22:37:54 +0600 Subject: [PATCH] init commit --- .github/actions/gitlog/action.yaml | 20 + .github/actions/gitlog/gitlog.sh | 126 + .github/actions/publish/action.yaml | 16 + .github/actions/publish/publish.sh | 70 + .github/workflows/build.yaml | 143 + .github/workflows/draft.yaml | 87 + .github/workflows/release.yaml | 23 + .gitignore | 8 + Cargo.toml | 31 + LICENSE-APACHE | 201 + LICENSE-MIT | 22 + README.md | 319 +- examples/README.md | 23 + .../Cargo.toml | 23 + .../README.md | 22 + .../src/main.rs | 71 + examples/actix-web-scopes-binding/Cargo.toml | 20 + examples/actix-web-scopes-binding/README.md | 15 + examples/actix-web-scopes-binding/src/main.rs | 55 + examples/axum-fastapi-bindings/Cargo.toml | 16 + examples/axum-fastapi-bindings/README.md | 14 + examples/axum-fastapi-bindings/src/main.rs | 141 + examples/axum-fastapi-docker | 1 + .../axum-fastapi-nesting-vendored/Cargo.toml | 22 + .../axum-fastapi-nesting-vendored/Dockerfile | 5 + .../axum-fastapi-nesting-vendored/README.md | 21 + .../axum-fastapi-nesting-vendored/src/main.rs | 67 + examples/fastapi-config-test/README.md | 6 + examples/generics-actix/Cargo.toml | 22 + examples/generics-actix/README.md | 21 + examples/generics-actix/src/main.rs | 119 + examples/raw-json-actix/Cargo.toml | 20 + examples/raw-json-actix/README.md | 22 + examples/raw-json-actix/src/main.rs | 48 + examples/rocket-todo/Cargo.toml | 22 + examples/rocket-todo/README.md | 24 + examples/rocket-todo/src/main.rs | 314 + examples/simple-axum/Cargo.toml | 15 + examples/simple-axum/src/main.rs | 32 + examples/todo-actix/Cargo.toml | 27 + examples/todo-actix/README.md | 24 + examples/todo-actix/src/main.rs | 206 + examples/todo-actix/src/todo.rs | 273 + examples/todo-axum/Cargo.toml | 25 + examples/todo-axum/README.md | 18 + examples/todo-axum/src/main.rs | 311 + examples/todo-tide/Cargo.toml | 24 + examples/todo-tide/README.md | 18 + examples/todo-tide/src/main.rs | 250 + examples/todo-warp-rapidoc/Cargo.toml | 23 + examples/todo-warp-rapidoc/README.md | 12 + examples/todo-warp-rapidoc/src/main.rs | 243 + .../Cargo.toml | 22 + .../README.md | 27 + .../todo-warp-redoc-with-file-config/build.rs | 3 + .../redoc.json | 3 + .../src/main.rs | 239 + examples/todo-warp/Cargo.toml | 24 + examples/todo-warp/README.md | 24 + examples/todo-warp/src/main.rs | 285 + examples/warp-multiple-api-docs/Cargo.toml | 24 + examples/warp-multiple-api-docs/README.md | 22 + examples/warp-multiple-api-docs/src/main.rs | 124 + fastapi-actix-web/Cargo.toml | 33 + fastapi-actix-web/LICENSE-APACHE | 1 + fastapi-actix-web/LICENSE-MIT | 1 + fastapi-actix-web/README.md | 54 + fastapi-actix-web/src/lib.rs | 486 ++ fastapi-actix-web/src/scope.rs | 265 + fastapi-actix-web/src/service_config.rs | 111 + .../testdata/app_generated_openapi | 140 + fastapi-axum/Cargo.toml | 36 + fastapi-axum/LICENSE-APACHE | 1 + fastapi-axum/LICENSE-MIT | 1 + fastapi-axum/README.md | 52 + fastapi-axum/src/lib.rs | 421 ++ fastapi-axum/src/router.rs | 432 ++ fastapi-config/Cargo.toml | 23 + fastapi-config/LICENSE-APACHE | 1 + fastapi-config/LICENSE-MIT | 1 + fastapi-config/README.md | 54 + fastapi-config/config-test-crate/Cargo.toml | 21 + fastapi-config/config-test-crate/README.md | 4 + fastapi-config/config-test-crate/build.rs | 10 + fastapi-config/config-test-crate/src/main.rs | 37 + .../config-test-crate/tests/config.rs | 180 + fastapi-config/src/lib.rs | 229 + fastapi-gen/Cargo.toml | 74 + fastapi-gen/LICENSE-APACHE | 1 + fastapi-gen/LICENSE-MIT | 1 + fastapi-gen/README.md | 1 + fastapi-gen/src/component.rs | 1616 +++++ fastapi-gen/src/component/features.rs | 712 ++ .../src/component/features/attributes.rs | 1041 +++ .../src/component/features/validation.rs | 520 ++ .../src/component/features/validators.rs | 122 + fastapi-gen/src/component/into_params.rs | 502 ++ fastapi-gen/src/component/schema.rs | 970 +++ fastapi-gen/src/component/schema/enums.rs | 1053 +++ fastapi-gen/src/component/schema/features.rs | 273 + fastapi-gen/src/component/schema/xml.rs | 134 + fastapi-gen/src/component/serde.rs | 510 ++ fastapi-gen/src/doc_comment.rs | 61 + fastapi-gen/src/ext.rs | 534 ++ fastapi-gen/src/ext/actix.rs | 271 + fastapi-gen/src/ext/auto_types.rs | 15 + fastapi-gen/src/ext/axum.rs | 141 + fastapi-gen/src/ext/rocket.rs | 345 + fastapi-gen/src/lib.rs | 3864 +++++++++++ fastapi-gen/src/openapi.rs | 826 +++ fastapi-gen/src/openapi/info.rs | 430 ++ fastapi-gen/src/path.rs | 806 +++ fastapi-gen/src/path/example.rs | 106 + fastapi-gen/src/path/handler.rs | 24 + fastapi-gen/src/path/media_type.rs | 402 ++ fastapi-gen/src/path/parameter.rs | 546 ++ fastapi-gen/src/path/request_body.rs | 270 + fastapi-gen/src/path/response.rs | 773 +++ fastapi-gen/src/path/response/derive.rs | 761 ++ fastapi-gen/src/path/response/header.rs | 165 + fastapi-gen/src/path/response/link.rs | 149 + fastapi-gen/src/path/status.rs | 63 + fastapi-gen/src/schema_type.rs | 744 ++ fastapi-gen/src/security_requirement.rs | 69 + fastapi-gen/tests/common.rs | 40 + fastapi-gen/tests/fastapi_gen_test.rs | 163 + fastapi-gen/tests/modify_test.rs | 44 + fastapi-gen/tests/openapi_derive.rs | 771 +++ fastapi-gen/tests/openapi_derive_test.rs | 128 + fastapi-gen/tests/path_derive.rs | 3169 +++++++++ fastapi-gen/tests/path_derive_actix.rs | 1161 ++++ .../tests/path_derive_auto_into_responses.rs | 74 + .../path_derive_auto_into_responses_actix.rs | 474 ++ .../path_derive_auto_into_responses_axum.rs | 57 + fastapi-gen/tests/path_derive_axum_test.rs | 809 +++ fastapi-gen/tests/path_derive_rocket.rs | 744 ++ .../tests/path_parameter_derive_actix.rs | 277 + .../tests/path_parameter_derive_test.rs | 450 ++ .../tests/path_response_derive_test.rs | 717 ++ fastapi-gen/tests/request_body_derive_test.rs | 892 +++ fastapi-gen/tests/response_derive_test.rs | 760 ++ fastapi-gen/tests/schema_derive_test.rs | 6129 +++++++++++++++++ fastapi-gen/tests/schema_generics.rs | 506 ++ .../tests/testdata/description_override | 1 + .../testdata/openapi-derive-info-description | 1 + ...pi_schemas_resolve_inner_schema_references | 293 + .../tests/testdata/rc_schema_high_order_types | 42 + .../schema_generic_collect_non_inlined_schema | 233 + ...ema_generic_enum_variant_with_generic_type | 221 + .../tests/testdata/schema_generics_openapi | 266 + .../tests/testdata/schema_high_order_types | 65 + ...schema_non_generic_root_generic_references | 72 + .../tests/testdata/uuid_type_generic_argument | 33 + fastapi-rapidoc/Cargo.toml | 34 + fastapi-rapidoc/LICENSE-APACHE | 1 + fastapi-rapidoc/LICENSE-MIT | 1 + fastapi-rapidoc/README.md | 116 + fastapi-rapidoc/res/rapidoc.html | 10 + fastapi-rapidoc/src/lib.rs | 455 ++ fastapi-redoc/Cargo.toml | 32 + fastapi-redoc/LICENSE-APACHE | 1 + fastapi-redoc/LICENSE-MIT | 1 + fastapi-redoc/README.md | 142 + fastapi-redoc/res/redoc.html | 31 + fastapi-redoc/src/actix.rs | 26 + fastapi-redoc/src/axum.rs | 19 + fastapi-redoc/src/lib.rs | 490 ++ fastapi-redoc/src/rocket.rs | 28 + fastapi-scalar/Cargo.toml | 32 + fastapi-scalar/LICENSE-APACHE | 1 + fastapi-scalar/LICENSE-MIT | 1 + fastapi-scalar/README.md | 131 + fastapi-scalar/res/scalar.html | 19 + fastapi-scalar/src/actix.rs | 26 + fastapi-scalar/src/axum.rs | 19 + fastapi-scalar/src/lib.rs | 287 + fastapi-scalar/src/rocket.rs | 28 + fastapi-swagger-ui-vendored/Cargo.toml | 14 + fastapi-swagger-ui-vendored/LICENSE-APACHE | 1 + fastapi-swagger-ui-vendored/LICENSE-MIT | 1 + fastapi-swagger-ui-vendored/README.md | 22 + fastapi-swagger-ui-vendored/res/v0.1.1.zip | 1 + fastapi-swagger-ui-vendored/res/v5.17.14.zip | Bin 0 -> 4388280 bytes fastapi-swagger-ui-vendored/src/lib.rs | 19 + fastapi-swagger-ui/Cargo.toml | 67 + fastapi-swagger-ui/LICENSE-APACHE | 1 + fastapi-swagger-ui/LICENSE-MIT | 1 + fastapi-swagger-ui/README.md | 123 + fastapi-swagger-ui/build.rs | 385 ++ fastapi-swagger-ui/src/actix.rs | 66 + fastapi-swagger-ui/src/axum.rs | 155 + fastapi-swagger-ui/src/lib.rs | 1895 +++++ fastapi-swagger-ui/src/oauth.rs | 315 + fastapi-swagger-ui/src/rocket.rs | 119 + fastapi/Cargo.toml | 76 + fastapi/LICENSE-APACHE | 1 + fastapi/LICENSE-MIT | 1 + fastapi/README.md | 1 + fastapi/src/lib.rs | 1736 +++++ fastapi/src/openapi.rs | 1078 +++ fastapi/src/openapi/content.rs | 124 + fastapi/src/openapi/encoding.rs | 94 + fastapi/src/openapi/example.rs | 101 + fastapi/src/openapi/extensions.rs | 130 + fastapi/src/openapi/external_docs.rs | 63 + fastapi/src/openapi/header.rs | 73 + fastapi/src/openapi/info.rs | 277 + fastapi/src/openapi/link.rs | 143 + fastapi/src/openapi/path.rs | 1015 +++ fastapi/src/openapi/request_body.rs | 221 + fastapi/src/openapi/response.rs | 357 + fastapi/src/openapi/schema.rs | 2872 ++++++++ fastapi/src/openapi/security.rs | 1321 ++++ fastapi/src/openapi/server.rs | 262 + fastapi/src/openapi/tag.rs | 68 + .../testdata/expected_openapi_minimal.json | 13 + .../testdata/expected_openapi_with_paths.json | 34 + fastapi/src/openapi/xml.rs | 119 + scripts/coverage.sh | 0 scripts/doc.sh | 0 scripts/test.sh | 0 scripts/update-swagger-ui.sh | 0 scripts/validate-examples.sh | 0 223 files changed, 59874 insertions(+), 1 deletion(-) create mode 100644 .github/actions/gitlog/action.yaml create mode 100755 .github/actions/gitlog/gitlog.sh create mode 100644 .github/actions/publish/action.yaml create mode 100755 .github/actions/publish/publish.sh create mode 100644 .github/workflows/build.yaml create mode 100644 .github/workflows/draft.yaml create mode 100644 .github/workflows/release.yaml create mode 100644 .gitignore create mode 100644 Cargo.toml create mode 100644 LICENSE-APACHE create mode 100644 LICENSE-MIT create mode 100644 examples/README.md create mode 100644 examples/actix-web-multiple-api-docs-with-scopes/Cargo.toml create mode 100644 examples/actix-web-multiple-api-docs-with-scopes/README.md create mode 100644 examples/actix-web-multiple-api-docs-with-scopes/src/main.rs create mode 100644 examples/actix-web-scopes-binding/Cargo.toml create mode 100644 examples/actix-web-scopes-binding/README.md create mode 100644 examples/actix-web-scopes-binding/src/main.rs create mode 100644 examples/axum-fastapi-bindings/Cargo.toml create mode 100644 examples/axum-fastapi-bindings/README.md create mode 100644 examples/axum-fastapi-bindings/src/main.rs create mode 120000 examples/axum-fastapi-docker create mode 100644 examples/axum-fastapi-nesting-vendored/Cargo.toml create mode 100644 examples/axum-fastapi-nesting-vendored/Dockerfile create mode 100644 examples/axum-fastapi-nesting-vendored/README.md create mode 100644 examples/axum-fastapi-nesting-vendored/src/main.rs create mode 100644 examples/fastapi-config-test/README.md create mode 100644 examples/generics-actix/Cargo.toml create mode 100644 examples/generics-actix/README.md create mode 100644 examples/generics-actix/src/main.rs create mode 100644 examples/raw-json-actix/Cargo.toml create mode 100644 examples/raw-json-actix/README.md create mode 100644 examples/raw-json-actix/src/main.rs create mode 100644 examples/rocket-todo/Cargo.toml create mode 100644 examples/rocket-todo/README.md create mode 100644 examples/rocket-todo/src/main.rs create mode 100644 examples/simple-axum/Cargo.toml create mode 100644 examples/simple-axum/src/main.rs create mode 100644 examples/todo-actix/Cargo.toml create mode 100644 examples/todo-actix/README.md create mode 100644 examples/todo-actix/src/main.rs create mode 100644 examples/todo-actix/src/todo.rs create mode 100644 examples/todo-axum/Cargo.toml create mode 100644 examples/todo-axum/README.md create mode 100644 examples/todo-axum/src/main.rs create mode 100644 examples/todo-tide/Cargo.toml create mode 100644 examples/todo-tide/README.md create mode 100644 examples/todo-tide/src/main.rs create mode 100644 examples/todo-warp-rapidoc/Cargo.toml create mode 100644 examples/todo-warp-rapidoc/README.md create mode 100644 examples/todo-warp-rapidoc/src/main.rs create mode 100644 examples/todo-warp-redoc-with-file-config/Cargo.toml create mode 100644 examples/todo-warp-redoc-with-file-config/README.md create mode 100644 examples/todo-warp-redoc-with-file-config/build.rs create mode 100644 examples/todo-warp-redoc-with-file-config/redoc.json create mode 100644 examples/todo-warp-redoc-with-file-config/src/main.rs create mode 100644 examples/todo-warp/Cargo.toml create mode 100644 examples/todo-warp/README.md create mode 100644 examples/todo-warp/src/main.rs create mode 100644 examples/warp-multiple-api-docs/Cargo.toml create mode 100644 examples/warp-multiple-api-docs/README.md create mode 100644 examples/warp-multiple-api-docs/src/main.rs create mode 100644 fastapi-actix-web/Cargo.toml create mode 120000 fastapi-actix-web/LICENSE-APACHE create mode 120000 fastapi-actix-web/LICENSE-MIT create mode 100644 fastapi-actix-web/README.md create mode 100644 fastapi-actix-web/src/lib.rs create mode 100644 fastapi-actix-web/src/scope.rs create mode 100644 fastapi-actix-web/src/service_config.rs create mode 100644 fastapi-actix-web/testdata/app_generated_openapi create mode 100644 fastapi-axum/Cargo.toml create mode 120000 fastapi-axum/LICENSE-APACHE create mode 120000 fastapi-axum/LICENSE-MIT create mode 100644 fastapi-axum/README.md create mode 100644 fastapi-axum/src/lib.rs create mode 100644 fastapi-axum/src/router.rs create mode 100644 fastapi-config/Cargo.toml create mode 120000 fastapi-config/LICENSE-APACHE create mode 120000 fastapi-config/LICENSE-MIT create mode 100644 fastapi-config/README.md create mode 100644 fastapi-config/config-test-crate/Cargo.toml create mode 100644 fastapi-config/config-test-crate/README.md create mode 100644 fastapi-config/config-test-crate/build.rs create mode 100644 fastapi-config/config-test-crate/src/main.rs create mode 100644 fastapi-config/config-test-crate/tests/config.rs create mode 100644 fastapi-config/src/lib.rs create mode 100644 fastapi-gen/Cargo.toml create mode 120000 fastapi-gen/LICENSE-APACHE create mode 120000 fastapi-gen/LICENSE-MIT create mode 120000 fastapi-gen/README.md create mode 100644 fastapi-gen/src/component.rs create mode 100644 fastapi-gen/src/component/features.rs create mode 100644 fastapi-gen/src/component/features/attributes.rs create mode 100644 fastapi-gen/src/component/features/validation.rs create mode 100644 fastapi-gen/src/component/features/validators.rs create mode 100644 fastapi-gen/src/component/into_params.rs create mode 100644 fastapi-gen/src/component/schema.rs create mode 100644 fastapi-gen/src/component/schema/enums.rs create mode 100644 fastapi-gen/src/component/schema/features.rs create mode 100644 fastapi-gen/src/component/schema/xml.rs create mode 100644 fastapi-gen/src/component/serde.rs create mode 100644 fastapi-gen/src/doc_comment.rs create mode 100644 fastapi-gen/src/ext.rs create mode 100644 fastapi-gen/src/ext/actix.rs create mode 100644 fastapi-gen/src/ext/auto_types.rs create mode 100644 fastapi-gen/src/ext/axum.rs create mode 100644 fastapi-gen/src/ext/rocket.rs create mode 100644 fastapi-gen/src/lib.rs create mode 100644 fastapi-gen/src/openapi.rs create mode 100644 fastapi-gen/src/openapi/info.rs create mode 100644 fastapi-gen/src/path.rs create mode 100644 fastapi-gen/src/path/example.rs create mode 100644 fastapi-gen/src/path/handler.rs create mode 100644 fastapi-gen/src/path/media_type.rs create mode 100644 fastapi-gen/src/path/parameter.rs create mode 100644 fastapi-gen/src/path/request_body.rs create mode 100644 fastapi-gen/src/path/response.rs create mode 100644 fastapi-gen/src/path/response/derive.rs create mode 100644 fastapi-gen/src/path/response/header.rs create mode 100644 fastapi-gen/src/path/response/link.rs create mode 100644 fastapi-gen/src/path/status.rs create mode 100644 fastapi-gen/src/schema_type.rs create mode 100644 fastapi-gen/src/security_requirement.rs create mode 100644 fastapi-gen/tests/common.rs create mode 100644 fastapi-gen/tests/fastapi_gen_test.rs create mode 100644 fastapi-gen/tests/modify_test.rs create mode 100644 fastapi-gen/tests/openapi_derive.rs create mode 100644 fastapi-gen/tests/openapi_derive_test.rs create mode 100644 fastapi-gen/tests/path_derive.rs create mode 100644 fastapi-gen/tests/path_derive_actix.rs create mode 100644 fastapi-gen/tests/path_derive_auto_into_responses.rs create mode 100644 fastapi-gen/tests/path_derive_auto_into_responses_actix.rs create mode 100644 fastapi-gen/tests/path_derive_auto_into_responses_axum.rs create mode 100644 fastapi-gen/tests/path_derive_axum_test.rs create mode 100644 fastapi-gen/tests/path_derive_rocket.rs create mode 100644 fastapi-gen/tests/path_parameter_derive_actix.rs create mode 100644 fastapi-gen/tests/path_parameter_derive_test.rs create mode 100644 fastapi-gen/tests/path_response_derive_test.rs create mode 100644 fastapi-gen/tests/request_body_derive_test.rs create mode 100644 fastapi-gen/tests/response_derive_test.rs create mode 100644 fastapi-gen/tests/schema_derive_test.rs create mode 100644 fastapi-gen/tests/schema_generics.rs create mode 100644 fastapi-gen/tests/testdata/description_override create mode 100644 fastapi-gen/tests/testdata/openapi-derive-info-description create mode 100644 fastapi-gen/tests/testdata/openapi_schemas_resolve_inner_schema_references create mode 100644 fastapi-gen/tests/testdata/rc_schema_high_order_types create mode 100644 fastapi-gen/tests/testdata/schema_generic_collect_non_inlined_schema create mode 100644 fastapi-gen/tests/testdata/schema_generic_enum_variant_with_generic_type create mode 100644 fastapi-gen/tests/testdata/schema_generics_openapi create mode 100644 fastapi-gen/tests/testdata/schema_high_order_types create mode 100644 fastapi-gen/tests/testdata/schema_non_generic_root_generic_references create mode 100644 fastapi-gen/tests/testdata/uuid_type_generic_argument create mode 100644 fastapi-rapidoc/Cargo.toml create mode 120000 fastapi-rapidoc/LICENSE-APACHE create mode 120000 fastapi-rapidoc/LICENSE-MIT create mode 100644 fastapi-rapidoc/README.md create mode 100644 fastapi-rapidoc/res/rapidoc.html create mode 100644 fastapi-rapidoc/src/lib.rs create mode 100644 fastapi-redoc/Cargo.toml create mode 120000 fastapi-redoc/LICENSE-APACHE create mode 120000 fastapi-redoc/LICENSE-MIT create mode 100644 fastapi-redoc/README.md create mode 100644 fastapi-redoc/res/redoc.html create mode 100644 fastapi-redoc/src/actix.rs create mode 100644 fastapi-redoc/src/axum.rs create mode 100644 fastapi-redoc/src/lib.rs create mode 100644 fastapi-redoc/src/rocket.rs create mode 100644 fastapi-scalar/Cargo.toml create mode 120000 fastapi-scalar/LICENSE-APACHE create mode 120000 fastapi-scalar/LICENSE-MIT create mode 100644 fastapi-scalar/README.md create mode 100644 fastapi-scalar/res/scalar.html create mode 100644 fastapi-scalar/src/actix.rs create mode 100644 fastapi-scalar/src/axum.rs create mode 100644 fastapi-scalar/src/lib.rs create mode 100644 fastapi-scalar/src/rocket.rs create mode 100644 fastapi-swagger-ui-vendored/Cargo.toml create mode 120000 fastapi-swagger-ui-vendored/LICENSE-APACHE create mode 120000 fastapi-swagger-ui-vendored/LICENSE-MIT create mode 100644 fastapi-swagger-ui-vendored/README.md create mode 100644 fastapi-swagger-ui-vendored/res/v0.1.1.zip create mode 100644 fastapi-swagger-ui-vendored/res/v5.17.14.zip create mode 100644 fastapi-swagger-ui-vendored/src/lib.rs create mode 100644 fastapi-swagger-ui/Cargo.toml create mode 120000 fastapi-swagger-ui/LICENSE-APACHE create mode 120000 fastapi-swagger-ui/LICENSE-MIT create mode 100644 fastapi-swagger-ui/README.md create mode 100644 fastapi-swagger-ui/build.rs create mode 100644 fastapi-swagger-ui/src/actix.rs create mode 100644 fastapi-swagger-ui/src/axum.rs create mode 100644 fastapi-swagger-ui/src/lib.rs create mode 100644 fastapi-swagger-ui/src/oauth.rs create mode 100644 fastapi-swagger-ui/src/rocket.rs create mode 100644 fastapi/Cargo.toml create mode 120000 fastapi/LICENSE-APACHE create mode 120000 fastapi/LICENSE-MIT create mode 120000 fastapi/README.md create mode 100644 fastapi/src/lib.rs create mode 100644 fastapi/src/openapi.rs create mode 100644 fastapi/src/openapi/content.rs create mode 100644 fastapi/src/openapi/encoding.rs create mode 100644 fastapi/src/openapi/example.rs create mode 100644 fastapi/src/openapi/extensions.rs create mode 100644 fastapi/src/openapi/external_docs.rs create mode 100644 fastapi/src/openapi/header.rs create mode 100644 fastapi/src/openapi/info.rs create mode 100644 fastapi/src/openapi/link.rs create mode 100644 fastapi/src/openapi/path.rs create mode 100644 fastapi/src/openapi/request_body.rs create mode 100644 fastapi/src/openapi/response.rs create mode 100644 fastapi/src/openapi/schema.rs create mode 100644 fastapi/src/openapi/security.rs create mode 100644 fastapi/src/openapi/server.rs create mode 100644 fastapi/src/openapi/tag.rs create mode 100644 fastapi/src/openapi/testdata/expected_openapi_minimal.json create mode 100644 fastapi/src/openapi/testdata/expected_openapi_with_paths.json create mode 100644 fastapi/src/openapi/xml.rs mode change 100644 => 100755 scripts/coverage.sh mode change 100644 => 100755 scripts/doc.sh mode change 100644 => 100755 scripts/test.sh mode change 100644 => 100755 scripts/update-swagger-ui.sh mode change 100644 => 100755 scripts/validate-examples.sh diff --git a/.github/actions/gitlog/action.yaml b/.github/actions/gitlog/action.yaml new file mode 100644 index 0000000..b4a4e9b --- /dev/null +++ b/.github/actions/gitlog/action.yaml @@ -0,0 +1,20 @@ +name: Git log +description: Mangles git log for change log +inputs: + output-file: + description: File path where to place the content of the changed commits + required: true + crate: + description: Name of the crate to get git log for + required: true +outputs: + last_release: + description: Last release commit or first commit of history + value: ${{ steps.gitlog.outputs.last_release }} +runs: + using: composite + steps: + - shell: bash + id: gitlog + run: | + ${{ github.action_path }}/gitlog.sh --output-file ${{ inputs.output-file }} --crate ${{ inputs.crate }} diff --git a/.github/actions/gitlog/gitlog.sh b/.github/actions/gitlog/gitlog.sh new file mode 100755 index 0000000..f00c4ac --- /dev/null +++ b/.github/actions/gitlog/gitlog.sh @@ -0,0 +1,126 @@ +#!/bin/bash + +# This mangles git log entries for change lop purposes + +output_file="" +crate="" +range="" +auth="" +while true; do + case $1 in + "--output-file") + shift + output_file="$1" + shift + ;; + "--crate") + shift + crate="$1" + shift + ;; + "--range") + shift + range="$1" + shift + ;; + "--auth") + shift + auth="$1" + shift + ;; + *) + break + ;; + esac +done + +if [[ "$output_file" == "" ]]; then + echo "Missing --output-file option argument, define path to file or - for stdout" && exit 1 +fi +if [[ "$crate" == "" ]]; then + echo "Missing --crate option argument, need an explisit crate to get git log for" && exit 1 +fi + +commit_range="" +if [ -z "$range" ]; then + from_commit=HEAD + last_release=$(git tag --sort=-committerdate | grep -E "$crate-[0-9]*\.[0-9]*\.[0-9]*" | head -1) + echo "Found tag: $last_release" + if [[ "$last_release" == "" ]]; then + last_release=$(git tag --sort=-committerdate | head -1) # get last tag + echo "Using latest tag: $last_release" + fi + + if [[ $last_release != "" ]]; then + commit_range="$from_commit...$last_release" + else + commit_range="$from_commit" + fi +else + commit_range="$range" +fi + +ancestry_path="" +if [[ "$last_release" != "" ]]; then + ancestry_path="--ancestry-path" +fi + +mapfile -t log_lines < <(git log --pretty=format:'(%h) %s' $ancestry_path "$commit_range") + +function is_crate_related { + commit="$1" + changes="$(git diff --name-only "$commit"~ "$commit" | awk -F / '{print $1}' | xargs)" + IFS=" " read -r -a change_dirs <<<"$changes" + + is_related=false + for change in "${change_dirs[@]}"; do + if [[ "$change" == "$crate" ]]; then + is_related=true + break + fi + done + + echo $is_related +} + +get_username() { + commit=$1 + + args=() + if [ -n "$auth" ]; then + args=("${args[@]}" "-H" "Authorization: Bearer $auth") + fi + + curl -sSL \ + -H "Accept: application/vnd.github+json" \ + -H "X-GitHub-Api-Version: 2022-11-28" \ + "${args[@]}" \ + https://api.github.com/repos/nxpkg/fastapi/commits/"$commit" | jq -r .author.login +} + +log="" +for line in "${log_lines[@]}"; do + commit=$(echo "$line" | awk -F ' ' '{print $1}') + commit=${commit//[\(\)]/} + + if [[ $(is_crate_related "$commit") == true ]]; then + user=$(get_username "$commit") + log=$log"* $line @$user\n" + fi +done + +if [[ "$output_file" != "" ]]; then + if [[ "$output_file" == "-" ]]; then + echo -e "$log" + else + echo -e "$log" >"$output_file" + fi +fi + +if [[ "$last_release" == "" ]]; then + last_release=$(git rev-list --reverse HEAD | head -1) +fi + +if [ -n "$GITHUB_OUTPUT" ]; then + echo "last_release=$last_release" >>"$GITHUB_OUTPUT" +fi diff --git a/.github/actions/publish/action.yaml b/.github/actions/publish/action.yaml new file mode 100644 index 0000000..35bde60 --- /dev/null +++ b/.github/actions/publish/action.yaml @@ -0,0 +1,16 @@ +name: Publish crate +description: Publishes crate to crates.io +inputs: + token: + description: Cargo login token to use the publish the crate + required: true + ref: + description: "Github release tag ref" + required: true +runs: + using: composite + steps: + - shell: bash + id: publish_crate + run: | + ${{ github.action_path }}/publish.sh --token ${{ inputs.token }} --ref ${{ inputs.ref }} diff --git a/.github/actions/publish/publish.sh b/.github/actions/publish/publish.sh new file mode 100755 index 0000000..ab9d7b4 --- /dev/null +++ b/.github/actions/publish/publish.sh @@ -0,0 +1,70 @@ +#!/bin/bash + +# Publishes crate to crates.io + +token="" +ref="" +while true; do + case $1 in + "--token") + shift + token="$1" + shift + ;; + "--ref") + shift + ref=${1/refs\/tags\//} + shift + ;; + *) + break + ;; + esac +done + +if [[ "$token" == "" ]]; then + echo "Missing --token option argument, cannot publish crates without it!" && exit 1 +fi +if [[ "$ref" == "" ]]; then + echo "Missing --ref option argument, need an explisit ref to release!" && exit 1 +fi + +function publish { + module="$1" + # echo "publish: $module" + cargo publish -p "$module" +} + +if [ ! -f "Cargo.toml" ]; then + echo "Missing Cargo.toml file, not in a Rust project root?" && exit 1 +fi + +echo "$token" | cargo login +while read -r module; do + # crate=$(echo "$ref" | sed 's|-[0-9]*\.[0-9]*\.[0-9].*||') + crate=${ref/-[0-9]\.[0-9]\.[0-9]*/} + if [[ "$crate" != "$module" ]]; then + echo "Module: $module does not match to release crate: $crate, skipping release for module" + continue + fi + + current_version=$(cargo metadata --format-version=1 --no-deps | jq -r '.packages[] | select(.name | test("'"$module"'$")) | .version') + last_version=$(curl -sS https://crates.io/api/v1/crates/"$module"/versions | jq -r '.versions[0].num') + if [[ "$last_version" == "$current_version" ]]; then + echo "Module: $module, is already at it's latest release ($last_version), nothing to release" + continue + fi + + echo "Publishing module $module..." + max_retries=10 + retry=0 + while ! publish "$module" && [[ $retry -lt $max_retries ]]; do + await_time=$((retry*2)) + echo "Failed to publish, Retrying $retry... after $await_time sec." + sleep $await_time + retry=$((retry+1)) + done + if [[ $retry -eq $max_retries ]]; then + echo "Failed to publish crate $module, try to increase await time? Or retries?" && exit 1 + fi +done < <(cargo metadata --format-version=1 --no-deps | jq -r '.metadata.publish.order[]') diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml new file mode 100644 index 0000000..d3a9882 --- /dev/null +++ b/.github/workflows/build.yaml @@ -0,0 +1,143 @@ +name: Fastapi build + +on: + push: + paths: + - "**.rs" + - "**Cargo.toml" + pull_request: + branches: [master] + paths: + - "**.rs" + - "**Cargo.toml" +env: + CARGO_TERM_COLOR: always + +jobs: + test: + strategy: + matrix: + crate: + - fastapi + - fastapi-gen + - fastapi-swagger-ui-vendored + - fastapi-swagger-ui + - fastapi-redoc + - fastapi-rapidoc + - fastapi-scalar + - fastapi-axum + - fastapi-config + - fastapi-actix-web + fail-fast: true + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + with: + fetch-depth: 2 + + - uses: actions/cache@v3 + with: + path: | + ~/.cargo/bin/ + ~/.cargo/registry/index/ + ~/.cargo/registry/cache/ + ~/.cargo/git/db/ + target/ + key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} + + - name: Resolve changed paths + id: changes + run: | + if [[ $GITHUB_EVENT_NAME != "pull_request" ]]; then + echo "changes=true" >> $GITHUB_OUTPUT + exit 0 + fi + changes=false + while read -r change; do + if [[ "$change" == "fastapi-gen" && "${{ matrix.crate }}" == "fastapi-gen" && $changes == false ]]; then + changes=true + elif [[ "$change" == "fastapi-swagger-ui-vendored" && "${{ matrix.crate }}" == "fastapi-swagger-ui-vendored" && $changes == false ]]; then + changes=true + elif [[ "$change" == "fastapi-swagger-ui" && "${{ matrix.crate }}" == "fastapi-swagger-ui" && $changes == false ]]; then + changes=true + elif [[ "$change" == "fastapi" && "${{ matrix.crate }}" == "fastapi" && $changes == false ]]; then + changes=true + elif [[ "$change" == "fastapi-redoc" && "${{ matrix.crate }}" == "fastapi-redoc" && $changes == false ]]; then + changes=true + elif [[ "$change" == "fastapi-rapidoc" && "${{ matrix.crate }}" == "fastapi-rapidoc" && $changes == false ]]; then + changes=true + elif [[ "$change" == "fastapi-scalar" && "${{ matrix.crate }}" == "fastapi-scalar" && $changes == false ]]; then + changes=true + elif [[ "$change" == "fastapi-axum" && "${{ matrix.crate }}" == "fastapi-axum" && $changes == false ]]; then + changes=true + elif [[ "$change" == "fastapi-config" && "${{ matrix.crate }}" == "fastapi-config" && $changes == false ]]; then + changes=true + elif [[ "$change" == "fastapi-actix-web" && "${{ matrix.crate }}" == "fastapi-actix-web" && $changes == false ]]; then + changes=true + fi + done < <(git diff --name-only ${{ github.sha }}~ ${{ github.sha }} | grep .rs | awk -F \/ '{print $1}') + echo "${{ matrix.crate }} changes: $changes" + echo "changes=$changes" >> $GITHUB_OUTPUT + + - name: Check format + run: | + if [[ ${{ steps.changes.outputs.changes }} == true ]]; then + cargo fmt --check --package ${{ matrix.crate }} + fi + + - name: Check clippy + run: | + if [[ ${{ steps.changes.outputs.changes }} == true ]]; then + cargo clippy --quiet --package ${{ matrix.crate }} + fi + + - name: Run tests + run: | + if [[ ${{ steps.changes.outputs.changes }} == true ]]; then + ./scripts/test.sh ${{ matrix.crate }} + fi + + check-typos: + name: typos + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: taiki-e/install-action@v2 + with: + tool: typos + - run: typos + + test-examples-compile: + name: "test (examples)" + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + with: + fetch-depth: 2 + + - name: Install stable Rust + uses: dtolnay/rust-toolchain@master + with: + toolchain: stable + components: clippy, rustfmt + + - name: Install nightly Rust + uses: dtolnay/rust-toolchain@master + with: + toolchain: nightly + components: clippy, rustfmt + + - uses: actions/cache@v3 + with: + path: | + ~/.cargo/bin/ + ~/.cargo/registry/index/ + ~/.cargo/registry/cache/ + ~/.cargo/git/db/ + examples/**/target/ + key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}_examples + + - name: Test that examples compile + run: | + ./scripts/validate-examples.sh diff --git a/.github/workflows/draft.yaml b/.github/workflows/draft.yaml new file mode 100644 index 0000000..6879946 --- /dev/null +++ b/.github/workflows/draft.yaml @@ -0,0 +1,87 @@ +name: Draft release + +on: + push: + branches: + - master + +env: + CARGO_TERM_COLOR: always + +jobs: + draft: + strategy: + matrix: + crate: + - fastapi + - fastapi-gen + - fastapi-swagger-ui-vendored + - fastapi-swagger-ui + - fastapi-redoc + - fastapi-rapidoc + - fastapi-scalar + - fastapi-axum + - fastapi-config + - fastapi-actix-web + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + with: + fetch-depth: 0 + + - uses: ./.github/actions/gitlog + name: Get changed commits + id: gitlog + with: + output-file: ./draft-gitlog.md + crate: ${{ matrix.crate }} + + - name: Prepare changes + run: | + echo "## What's New :gem: :new: :tada:" > ./draft-changes.md + cat < ./draft-gitlog.md >> ./draft-changes.md + + - name: Get release info + id: release_info + run: | + module="${{ matrix.crate }}" + version=$(cargo metadata --format-version=1 --no-deps | jq -r '.packages[] | select(.name | test("'"$module"'$")) | .version') + prerelease=false + if [[ "$version" =~ .*-.* ]]; then + prerelease=true + fi + + echo "is_prerelease=$prerelease" >> $GITHUB_OUTPUT + echo "version=$version" >> $GITHUB_OUTPUT + + - name: Add full change log link + run: | + echo -e "#### Full [change log](${{ github.server_url }}/${{ github.repository }}/compare/${{ steps.gitlog.outputs.last_release }}...${{ matrix.crate }}-${{ steps.release_info.outputs.version }})" >> ./draft-changes.md + + - name: Check existing release + id: existing_release + run: | + if git tag | grep -e ^${{ matrix.crate }}-${{ steps.release_info.outputs.version }}$ > /dev/null; then + echo "Tag tag with ${{ matrix.crate }}-${{ steps.release_info.outputs.version }} already exists, cannot draft a release for already existing tag!, Consider upgrading versions to Cargo.toml file" + echo "is_new=false" >> $GITHUB_OUTPUT + else + echo "is_new=true" >> $GITHUB_OUTPUT + fi + + - name: Remove previous release + if: ${{ steps.existing_release.outputs.is_new == 'true' }} + run: | + echo ${{ secrets.GITHUB_TOKEN }} | gh auth login --with-token + gh release delete ${{ matrix.crate }}-${{ steps.release_info.outputs.version }} -y || true + + - name: Create release + id: create_release + if: ${{ steps.existing_release.outputs.is_new == 'true' }} + uses: softprops/action-gh-release@v2.0.4 + with: + tag_name: ${{ matrix.crate }}-${{ steps.release_info.outputs.version }} + name: ${{ matrix.crate }}-${{ steps.release_info.outputs.version }} + body_path: ./draft-changes.md + draft: true + prerelease: ${{ steps.release_info.outputs.is_prerelease }} diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml new file mode 100644 index 0000000..e88c897 --- /dev/null +++ b/.github/workflows/release.yaml @@ -0,0 +1,23 @@ +name: Publish release + +on: + release: + types: [published] + +env: + CARGO_TERM_COLOR: always + +jobs: + publish: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + with: + fetch-depth: 2 + + - uses: ./.github/actions/publish + name: Cargo publish + with: + token: ${{ secrets.CARGO_LOGIN }} + ref: ${{ github.ref }} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..25c680a --- /dev/null +++ b/.gitignore @@ -0,0 +1,8 @@ +/target +Cargo.lock +*.iml +.idea +.vscode +target +.nvim + diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..ff45d03 --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,31 @@ +[workspace.package] +rust-version = "1.75" + +[workspace] +resolver = "2" +members = [ + "fastapi", + "fastapi-gen", + "fastapi-swagger-ui-vendored", + "fastapi-swagger-ui", + "fastapi-redoc", + "fastapi-rapidoc", + "fastapi-scalar", + "fastapi-axum", + "fastapi-config", + "fastapi-actix-web", +] + +[workspace.metadata.publish] +order = [ + "fastapi-config", + "fastapi-gen", + "fastapi", + "fastapi-swagger-ui-vendored", + "fastapi-swagger-ui", + "fastapi-redoc", + "fastapi-rapidoc", + "fastapi-scalar", + "fastapi-axum", + "fastapi-actix-web", +] diff --git a/LICENSE-APACHE b/LICENSE-APACHE new file mode 100644 index 0000000..f49a4e1 --- /dev/null +++ b/LICENSE-APACHE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. \ No newline at end of file diff --git a/LICENSE-MIT b/LICENSE-MIT new file mode 100644 index 0000000..63e5114 --- /dev/null +++ b/LICENSE-MIT @@ -0,0 +1,22 @@ +The MIT License (MIT) + +Copyright © 2024 + + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the “Software”), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/README.md b/README.md index 349c26a..1c11df8 100644 --- a/README.md +++ b/README.md @@ -1 +1,318 @@ -# fastapi \ No newline at end of file +# fastapi - Auto-generated OpenAPI documentation + +[![Fastapi build](https://github.com/nxpkg/fastapi/actions/workflows/build.yaml/badge.svg)](https://github.com/nxpkg/fastapi/actions/workflows/build.yaml) +[![crates.io](https://img.shields.io/crates/v/fastapi.svg?label=crates.io&color=orange&logo=rust)](https://crates.io/crates/fastapi) + +Want to have your API documented with OpenAPI? But don't want to be bothered +with manual YAML or JSON tweaking? Would like it to be so easy that it would almost +be utopic? Don't worry: fastapi is here to fill this gap. It aims to do, if not all, then +most of the heavy lifting for you, enabling you to focus on writing the actual API logic instead of +documentation. It aims to be _minimal_, _simple_ and _fast_. It uses simple `proc` macros which +you can use to annotate your code to have items documented. + +The `fastapi` crate provides auto-generated OpenAPI documentation for Rust REST APIs. It treats +code-first approach as a first class citizen and simplifies API documentation by providing +simple macros for generating the documentation from your code. + +It also contains Rust types of the OpenAPI spec, allowing you to write the OpenAPI spec only using +Rust if auto generation is not your flavor or does not fit your purpose. + +Long term goal of the library is to be the place to go when OpenAPI documentation is needed in any Rust +codebase. + +Fastapi is framework-agnostic, and could be used together with any web framework, or even without one. While +being portable and standalone, one of its key aspects is simple integration with web frameworks. + +## Choose your flavor and document your API with ice-cold IPA + +|Flavor|Support| +|--|--| +|[actix-web](https://github.com/actix/actix-web)|Parse path, path parameters and query parameters, recognize request body and response body, [`fastapi-actix-web` bindings](./fastapi-actix-web/README.md). See more at [docs](https://docs.rs/fastapi/latest/fastapi/attr.path.html#actix_extras-feature-support-for-actix-web)| +|[axum](https://github.com/tokio-rs/axum)|Parse path and query parameters, recognize request body and response body, [`fastapi-axum` bindings](./fastapi-axum/README.md). See more at [docs](https://docs.rs/fastapi/latest/fastapi/attr.path.html#axum_extras-feature-support-for-axum)| +|[rocket](https://github.com/SergioBenitez/Rocket)| Parse path, path parameters and query parameters, recognize request body and response body. See more at [docs](https://docs.rs/fastapi/latest/fastapi/attr.path.html#rocket_extras-feature-support-for-rocket)| +|Others*| Plain `fastapi` without extra flavor. This gives you all the basic benefits listed below in **[Features](#features)** section but with little less automation.| + +> Others* = For example [warp](https://github.com/seanmonstar/warp) but could be anything. + +Refer to the existing [examples](./examples) to find out more. + +## Features + +* OpenAPI 3.1 +* Pluggable, easy setup and integration with frameworks. +* No bloat, enable what you need. +* Support for generic types + * **Note!**
+ Tuples, arrays and slices cannot be used as generic arguments on types. Types implementing `ToSchema` manually should not have generic arguments, as + they are not composeable and will result compile error. +* Automatic schema collection from usages recursively. + * Request body from either handler function arguments (if supported by framework) or from `request_body` attribute. + * Response body from response `body` attribute or response `content` attribute. +* Various OpenAPI visualization tools supported out of the box. +* Rust type aliases via [`fastapi-config`](./fastapi-config/README.md). + +## What's up with the word play? + +The name comes from the words `utopic` and `api` where `uto` are the first three letters of _utopic_ +and the `ipa` is _api_ reversed. Aaand... `ipa` is also an awesome type of beer :beer:. + +## Crate Features + +- **`macros`** Enable `fastapi-gen` macros. **This is enabled by default.** +- **`yaml`**: Enables **serde_yaml** serialization of OpenAPI objects. +- **`actix_extras`**: Enhances [actix-web](https://github.com/actix/actix-web/) integration with being able to + parse `path`, `path` and `query` parameters from actix web path attribute macros. See + [docs](https://docs.rs/fastapi/latest/fastapi/attr.path.html#actix_extras-feature-support-for-actix-web) or [examples](./examples) for more details. +- **`rocket_extras`**: Enhances [rocket](https://github.com/SergioBenitez/Rocket) framework integration with being + able to parse `path`, `path` and `query` parameters from rocket path attribute macros. See [docs](https://docs.rs/fastapi/latest/fastapi/attr.path.html#rocket_extras-feature-support-for-rocket) + or [examples](./examples) for more details. +- **`axum_extras`**: Enhances [axum](https://github.com/tokio-rs/axum) framework integration allowing users to use `IntoParams` without + defining the `parameter_in` attribute. See [docs](https://docs.rs/fastapi/latest/fastapi/attr.path.html#axum_extras-feature-support-for-axum) + or [examples](./examples) for more details. +- **`debug`**: Add extra traits such as debug traits to openapi definitions and elsewhere. +- **`chrono`**: Add support for [chrono](https://crates.io/crates/chrono) `DateTime`, `Date`, `NaiveDate`, `NaiveDateTime`, `NaiveTime` and `Duration` + types. By default these types are parsed to `string` types with additional `format` information. + `format: date-time` for `DateTime` and `NaiveDateTime` and `format: date` for `Date` and `NaiveDate` according + [RFC3339](https://www.rfc-editor.org/rfc/rfc3339#section-5.6) as `ISO-8601`. To + override default `string` representation users have to use `value_type` attribute to override the type. + See [docs](https://docs.rs/fastapi/latest/fastapi/derive.ToSchema.html) for more details. +- **`time`**: Add support for [time](https://crates.io/crates/time) `OffsetDateTime`, `PrimitiveDateTime`, `Date`, and `Duration` types. + By default these types are parsed as `string`. `OffsetDateTime` and `PrimitiveDateTime` will use `date-time` format. `Date` will use + `date` format and `Duration` will not have any format. To override default `string` representation users have to use `value_type` attribute + to override the type. See [docs](https://docs.rs/fastapi/latest/fastapi/derive.ToSchema.html) for more details. +- **`decimal`**: Add support for [rust_decimal](https://crates.io/crates/rust_decimal) `Decimal` type. **By default** + it is interpreted as `String`. If you wish to change the format you need to override the type. + See the `value_type` in [component derive docs](https://docs.rs/fastapi/latest/fastapi/derive.ToSchema.html). +- **`decimal_float`**: Add support for [rust_decimal](https://crates.io/crates/rust_decimal) `Decimal` type. **By default** + it is interpreted as `Number`. This feature is mutually exclusive with **decimal** and allow to change the default type used in your + documentation for `Decimal` much like `serde_with_float` feature exposed by rust_decimal. +- **`uuid`**: Add support for [uuid](https://github.com/uuid-rs/uuid). `Uuid` type will be presented as `String` with + format `uuid` in OpenAPI spec. +- **`ulid`**: Add support for [ulid](https://github.com/dylanhart/ulid-rs). `Ulid` type will be presented as `String` with + format `ulid` in OpenAPI spec. +- **`url`**: Add support for [url](https://github.com/servo/rust-url). `Url` type will be presented as `String` with + format `uri` in OpenAPI spec. +- **`smallvec`**: Add support for [smallvec](https://crates.io/crates/smallvec). `SmallVec` will be treated as `Vec`. +- **`openapi_extensions`**: Adds traits and functions that provide extra convenience functions. + See the [`request_body` docs](https://docs.rs/fastapi/latest/fastapi/openapi/request_body) for an example. +- **`repr`**: Add support for [repr_serde](https://github.com/dtolnay/serde-repr)'s `repr(u*)` and `repr(i*)` attributes to unit type enums for + C-like enum representation. See [docs](https://docs.rs/fastapi/latest/fastapi/derive.ToSchema.html) for more details. +- **`preserve_order`**: Preserve order of properties when serializing the schema for a component. + When enabled, the properties are listed in order of fields in the corresponding struct definition. + When disabled, the properties are listed in alphabetical order. +- **`preserve_path_order`**: Preserve order of OpenAPI Paths according to order they have been + introduced to the `#[openapi(paths(...))]` macro attribute. If disabled the paths will be + ordered in alphabetical order. **However** the operations order under the path **will** be always constant according to [specification](https://spec.openapis.org/oas/latest.html#fixed-fields-6) +- **`indexmap`**: Add support for [indexmap](https://crates.io/crates/indexmap). When enabled `IndexMap` will be rendered as a map similar to + `BTreeMap` and `HashMap`. +- **`non_strict_integers`**: Add support for non-standard integer formats `int8`, `int16`, `uint8`, `uint16`, `uint32`, and `uint64`. +- **`rc_schema`**: Add `ToSchema` support for `Arc` and `Rc` types. **Note!** serde `rc` feature flag must be enabled separately to allow + serialization and deserialization of `Arc` and `Rc` types. See more about [serde feature flags](https://serde.rs/feature-flags.html). +- **`config`** Enables [`fastapi-config`](./fastapi-config/README.md) for the project which allows defining global configuration options for `fastapi`. + +### Default Library Support + +* Implicit partial support for `serde` attributes. See [docs](https://docs.rs/fastapi/latest/fastapi/derive.ToSchema.html#partial-serde-attributes-support) for more details. +* Support for [http](https://crates.io/crates/http) `StatusCode` in responses. + +## Install + +Add dependency declaration to `Cargo.toml`. + +```toml +[dependencies] +fastapi = "5" +``` + +## Examples + +_Create type with `ToSchema` and use it in `#[fastapi::path(...)]` that is registered to the `OpenApi`._ + +```rust +use fastapi::{OpenApi, ToSchema}; + +#[derive(ToSchema)] +struct Pet { + id: u64, + name: String, + age: Option, +} + +mod pet_api { + /// Get pet by id + /// + /// Get pet from database by pet id + #[fastapi::path( + get, + path = "/pets/{id}", + responses( + (status = 200, description = "Pet found successfully", body = Pet), + (status = NOT_FOUND, description = "Pet was not found") + ), + params( + ("id" = u64, Path, description = "Pet database id to get Pet for"), + ) + )] + async fn get_pet_by_id(pet_id: u64) -> Result { + Ok(Pet { + id: pet_id, + age: None, + name: "lightning".to_string(), + }) + } +} + +#[derive(OpenApi)] +#[openapi(paths(pet_api::get_pet_by_id))] +struct ApiDoc; + +println!("{}", ApiDoc::openapi().to_pretty_json().unwrap()); +``` + +
+ Above example will produce an OpenAPI doc like this: + +```json +{ + "openapi": "3.1.0", + "info": { + "title": "application name from Cargo.toml", + "description": "description from Cargo.toml", + "contact": { + "name": "author name from Cargo.toml", + "email": "author email from Cargo.toml" + }, + "license": { + "name": "license from Cargo.toml" + }, + "version": "version from Cargo.toml" + }, + "paths": { + "/pets/{id}": { + "get": { + "tags": [ + "pet_api" + ], + "summary": "Get pet by id", + "description": "Get pet from database by pet id", + "operationId": "get_pet_by_id", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "Pet database id to get Pet for", + "required": true, + "schema": { + "type": "integer", + "format": "int64", + "minimum": 0 + } + } + ], + "responses": { + "200": { + "description": "Pet found successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Pet" + } + } + } + }, + "404": { + "description": "Pet was not found" + } + } + } + } + }, + "components": { + "schemas": { + "Pet": { + "type": "object", + "required": [ + "id", + "name" + ], + "properties": { + "age": { + "type": [ + "integer", + "null" + ], + "format": "int32" + }, + "id": { + "type": "integer", + "format": "int64", + "minimum": 0 + }, + "name": { + "type": "string" + } + } + } + } + } +} +``` + +
+ +## Modify OpenAPI at runtime + +You can modify generated OpenAPI at runtime either via generated types directly or using +[Modify](https://docs.rs/fastapi/latest/fastapi/trait.Modify.html) trait. + +_Modify generated OpenAPI via types directly._ + +```rust +#[derive(OpenApi)] +#[openapi( + info(description = "My Api description"), +)] +struct ApiDoc; + +let mut doc = ApiDoc::openapi(); +doc.info.title = String::from("My Api"); +``` + +_You can even convert the generated [OpenApi](https://docs.rs/fastapi/latest/fastapi/openapi/struct.OpenApi.html) to [OpenApiBuilder](https://docs.rs/fastapi/latest/fastapi/openapi/struct.OpenApiBuilder.html)._ + +```rust +let builder: OpenApiBuilder = ApiDoc::openapi().into(); +``` + +See [Modify](https://docs.rs/fastapi/latest/fastapi/trait.Modify.html) trait for examples on how to modify generated OpenAPI via it. + +## Go beyond the surface + +- See how to serve OpenAPI doc via Swagger UI check [fastapi-swagger-ui](https://docs.rs/fastapi-swagger-ui/) crate for more details. +- Browse to [examples](https://github.com/nxpkg/fastapi/tree/master/examples) for more comprehensive examples. +- Check [IntoResponses](https://docs.rs/fastapi/latest/fastapi/derive.IntoResponses.html) and [ToResponse](https://docs.rs/fastapi/latest/fastapi/derive.ToResponse.html) for examples on deriving responses. +- More about OpenAPI security in [security documentation](https://docs.rs/fastapi/latest/fastapi/openapi/security/index.html). +- Dump generated API doc to file at build time. See [issue 214 comment](https://github.com/nxpkg/fastapi/issues/214#issuecomment-1179589373). + +## FAQ + +### Swagger UI returns 404 NotFound from built binary + +This is highly probably due to `RustEmbed` not embedding the Swagger UI to the executable. This is natural since the `RustEmbed` +library **does not** by default embed files on debug builds. To get around this you can do one of the following. + +1. Build your executable in `--release` mode + +Find `fastapi-swagger-ui` [feature flags here](https://github.com/nxpkg/fastapi/tree/master/fastapi-swagger-ui#crate-features). + +### Auto discover for OpenAPI schemas and paths? + +Currently there is no build in solution to automatically discover the OpenAPI types but for your luck there is a pretty neat crate that +just does this for you called [fastapiuto](https://github.com/ProbablyClem/fastapiuto). + +## License + +Licensed under either of [Apache 2.0](LICENSE-APACHE) or [MIT](LICENSE-MIT) license at your option. + +Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in this crate +by you, shall be dual licensed, without any additional terms or conditions. diff --git a/examples/README.md b/examples/README.md new file mode 100644 index 0000000..a676187 --- /dev/null +++ b/examples/README.md @@ -0,0 +1,23 @@ +# fastapi examples + +This is folder contain a set of examples of fastapi library which should help people to get started +with the library. + +All examples have their own `README.md`, and can be seen using two steps: + +1. Run `cargo run` +2. Browse to `http://localhost:8080/swagger-ui/` or `http://localhost:8080/redoc` or `http://localhost:8080/rapidoc`. + +`todo-actix`, `todo-axum` and `rocket-todo` have Swagger UI, Redoc, RapiDoc, and Scalar setup, others have Swagger UI +if not explicitly stated otherwise. + +Even if there is no example for your favourite framework, `fastapi` can be used with any +web framework which supports decorating functions with macros similarly to the **warp** and **tide** examples. + +## Community examples + +- **[graphul](https://github.com/graphul-rs/graphul/tree/main/examples/fastapi-swagger-ui)** +- **[salvo](https://github.com/salvo-rs/salvo/tree/main/examples/todos-fastapi)** +- **[viz](https://github.com/viz-rs/viz/tree/main/examples/routing/openapi)** +- **[ntex](https://github.com/leon3s/ntex-rest-api-example)** + diff --git a/examples/actix-web-multiple-api-docs-with-scopes/Cargo.toml b/examples/actix-web-multiple-api-docs-with-scopes/Cargo.toml new file mode 100644 index 0000000..0bd6448 --- /dev/null +++ b/examples/actix-web-multiple-api-docs-with-scopes/Cargo.toml @@ -0,0 +1,23 @@ +[package] +name = "actix-web-multiple-api-docs-with-scopes" +description = "Simple actix-web with multiple scoped api docs" +version = "0.1.0" +edition = "2021" +license = "MIT" +authors = [ + "Example " +] + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +actix-web = "4" +serde = { version = "1.0", features = ["derive"] } +serde_json = "1.0" +env_logger = "0.11.0" +log = "0.4" +futures = "0.3" +fastapi = { path = "../../fastapi", features = ["actix_extras"] } +fastapi-swagger-ui = { path = "../../fastapi-swagger-ui", features = ["actix-web"] } + +[workspace] diff --git a/examples/actix-web-multiple-api-docs-with-scopes/README.md b/examples/actix-web-multiple-api-docs-with-scopes/README.md new file mode 100644 index 0000000..62a30e6 --- /dev/null +++ b/examples/actix-web-multiple-api-docs-with-scopes/README.md @@ -0,0 +1,22 @@ +# actix-web-multiple-api-docs-with-scopes ~ fastapi with fastapi-swagger-ui example + +This is a demo `actix-web` application with multiple API docs with scope and context path. + +Just run command below to run the demo application and browse to `http://localhost:8080/swagger-ui/`. + +```bash +cargo run +``` + +On the Swagger-UI will be a drop-down labelled "Select a definition", containing "api1" and "api2". + +Alternatively, they can be loaded directly using + +- api1: http://localhost:8080/swagger-ui/?urls.primaryName=api1 +- api2: http://localhost:8080/swagger-ui/?urls.primaryName=api1 + +If you want to see some logging, you may prepend the command with `RUST_LOG=debug` as shown below. + +```bash +RUST_LOG=debug cargo run +``` diff --git a/examples/actix-web-multiple-api-docs-with-scopes/src/main.rs b/examples/actix-web-multiple-api-docs-with-scopes/src/main.rs new file mode 100644 index 0000000..0b39487 --- /dev/null +++ b/examples/actix-web-multiple-api-docs-with-scopes/src/main.rs @@ -0,0 +1,71 @@ +use std::{error::Error, net::Ipv4Addr}; + +use actix_web::{middleware::Logger, web, App, HttpServer}; +use fastapi::OpenApi; +use fastapi_swagger_ui::{SwaggerUi, Url}; + +#[actix_web::main] +async fn main() -> Result<(), impl Error> { + env_logger::init(); + + #[derive(OpenApi)] + #[openapi(paths(api1::hello1))] + struct ApiDoc1; + + #[derive(OpenApi)] + #[openapi(paths(api2::hello2))] + struct ApiDoc2; + + HttpServer::new(move || { + App::new() + .wrap(Logger::default()) + .service( + web::scope("/api") + .service(api1::hello1) + .service(api2::hello2), + ) + .service(SwaggerUi::new("/swagger-ui/{_:.*}").urls(vec![ + ( + Url::new("api1", "/api-docs/openapi1.json"), + ApiDoc1::openapi(), + ), + ( + Url::with_primary("api2", "/api-docs/openapi2.json", true), + ApiDoc2::openapi(), + ), + ])) + }) + .bind((Ipv4Addr::UNSPECIFIED, 8080))? + .run() + .await +} + +mod api1 { + use actix_web::get; + + #[fastapi::path( + context_path = "/api", + responses( + (status = 200, description = "Hello from api 1", body = String) + ) + )] + #[get("/api1/hello")] + pub(super) async fn hello1() -> String { + "hello from api 1".to_string() + } +} + +mod api2 { + use actix_web::get; + + #[fastapi::path( + context_path = "/api", + responses( + (status = 200, description = "Hello from api 2", body = String) + ) + )] + #[get("/api2/hello")] + pub(super) async fn hello2() -> String { + "hello from api 2".to_string() + } +} diff --git a/examples/actix-web-scopes-binding/Cargo.toml b/examples/actix-web-scopes-binding/Cargo.toml new file mode 100644 index 0000000..d70d376 --- /dev/null +++ b/examples/actix-web-scopes-binding/Cargo.toml @@ -0,0 +1,20 @@ +[package] +name = "actix-web-scopes-binding" +description = "Simple actix-web demo to demonstrate fastapi-actix-web bidings with scopes" +version = "0.1.0" +edition = "2021" + +[dependencies] +actix-web = "4" +serde = { version = "1.0", features = ["derive"] } +serde_json = "1.0" +env_logger = "0.11.0" +log = "0.4" +futures = "0.3" +fastapi = { path = "../../fastapi", features = ["actix_extras"] } +fastapi-swagger-ui = { path = "../../fastapi-swagger-ui", features = [ + "actix-web", +] } +fastapi-actix-web = { path = "../../fastapi-actix-web" } + +[workspace] diff --git a/examples/actix-web-scopes-binding/README.md b/examples/actix-web-scopes-binding/README.md new file mode 100644 index 0000000..db8d430 --- /dev/null +++ b/examples/actix-web-scopes-binding/README.md @@ -0,0 +1,15 @@ +# actix-web-scopes-binding + + +This is a demo `actix-web` application with [`fastapi-actix-web`][../../fastapi-actix-web] bindings demonstrating scopes support. + +Run command below to run the demo application and browse to `http://localhost:8080/swagger-ui/`. + +```bash +cargo run +``` + +Or with more logs +```bash +RUST_LOG=debug cargo run +``` diff --git a/examples/actix-web-scopes-binding/src/main.rs b/examples/actix-web-scopes-binding/src/main.rs new file mode 100644 index 0000000..1380346 --- /dev/null +++ b/examples/actix-web-scopes-binding/src/main.rs @@ -0,0 +1,55 @@ +use std::{error::Error, net::Ipv4Addr}; + +use actix_web::{middleware::Logger, App, HttpServer}; +use fastapi_actix_web::{scope, AppExt}; +use fastapi_swagger_ui::SwaggerUi; + +#[actix_web::main] +async fn main() -> Result<(), impl Error> { + env_logger::init(); + + HttpServer::new(move || { + let (app, api) = App::new() + .into_fastapi_app() + .map(|app| app.wrap(Logger::default())) + .service( + scope::scope("/api") + .service(scope::scope("/v1").service(api1::hello1)) + .service(scope::scope("/v2").service(api2::hello2)), + ) + .split_for_parts(); + + app.service(SwaggerUi::new("/swagger-ui/{_:.*}").url("/api-docs/openapi.json", api)) + }) + .bind((Ipv4Addr::UNSPECIFIED, 8080))? + .run() + .await +} + +mod api1 { + use actix_web::get; + + #[fastapi::path( + responses( + (status = 200, description = "Hello from api 1", body = str) + ) + )] + #[get("/hello")] + pub(super) async fn hello1() -> &'static str { + "hello from api 1" + } +} + +mod api2 { + use actix_web::get; + + #[fastapi::path( + responses( + (status = 200, description = "Hello from api 2", body = str) + ) + )] + #[get("/hello")] + pub(super) async fn hello2() -> &'static str { + "hello from api 2" + } +} diff --git a/examples/axum-fastapi-bindings/Cargo.toml b/examples/axum-fastapi-bindings/Cargo.toml new file mode 100644 index 0000000..89fa0c0 --- /dev/null +++ b/examples/axum-fastapi-bindings/Cargo.toml @@ -0,0 +1,16 @@ +[package] +name = "axum-fastapi-bindings" +version = "0.1.0" +edition = "2021" + +[dependencies] +axum = "0.7" +tokio = { version = "1", features = ["full"] } +tower = "0.5" +fastapi = { path = "../../fastapi", features = ["axum_extras", "debug"] } +fastapi-swagger-ui = { path = "../../fastapi-swagger-ui", features = ["axum"] } +fastapi-axum = { path = "../../fastapi-axum" ,features = ["debug"] } +serde = "1" +serde_json = "1" + +[workspace] diff --git a/examples/axum-fastapi-bindings/README.md b/examples/axum-fastapi-bindings/README.md new file mode 100644 index 0000000..42208c6 --- /dev/null +++ b/examples/axum-fastapi-bindings/README.md @@ -0,0 +1,14 @@ +# fastapi with axum bindings + +This demo `axum` application demonstrates `fastapi` and `axum` seamless integration with `fastapi-axum` crate. +API doc is served via Swagger UI. + +Run the app +```bash +cargo run +``` + +Browse the API docs. +``` +http://localhost:8080/swagger-ui +``` diff --git a/examples/axum-fastapi-bindings/src/main.rs b/examples/axum-fastapi-bindings/src/main.rs new file mode 100644 index 0000000..47f89de --- /dev/null +++ b/examples/axum-fastapi-bindings/src/main.rs @@ -0,0 +1,141 @@ +use std::io; +use std::net::Ipv4Addr; + +use tokio::net::TcpListener; +use fastapi::OpenApi; +use fastapi_axum::router::OpenApiRouter; +use fastapi_axum::routes; +use fastapi_swagger_ui::SwaggerUi; + +const CUSTOMER_TAG: &str = "customer"; +const ORDER_TAG: &str = "order"; + +#[derive(OpenApi)] +#[openapi( + tags( + (name = CUSTOMER_TAG, description = "Customer API endpoints"), + (name = ORDER_TAG, description = "Order API endpoints") + ) +)] +struct ApiDoc; + +/// Get health of the API. +#[fastapi::path( + method(get, head), + path = "/api/health", + responses( + (status = OK, description = "Success", body = str, content_type = "text/plain") + ) +)] +async fn health() -> &'static str { + "ok" +} + +#[tokio::main] +async fn main() -> Result<(), io::Error> { + let (router, api) = OpenApiRouter::with_openapi(ApiDoc::openapi()) + .routes(routes!(health)) + .nest("/api/customer", customer::router()) + .nest("/api/order", order::router()) + .routes(routes!( + inner::secret_handlers::get_secret, + inner::secret_handlers::post_secret + )) + .split_for_parts(); + + let router = router.merge(SwaggerUi::new("/swagger-ui").url("/apidoc/openapi.json", api)); + + let listener = TcpListener::bind((Ipv4Addr::LOCALHOST, 8080)).await?; + axum::serve(listener, router).await +} + +mod customer { + use axum::Json; + use serde::Serialize; + use fastapi::ToSchema; + use fastapi_axum::router::OpenApiRouter; + use fastapi_axum::routes; + + /// This is the customer + #[derive(ToSchema, Serialize)] + struct Customer { + name: String, + } + + /// expose the Customer OpenAPI to parent module + pub fn router() -> OpenApiRouter { + OpenApiRouter::new().routes(routes!(get_customer)) + } + + /// Get customer + /// + /// Just return a static Customer object + #[fastapi::path(get, path = "", responses((status = OK, body = Customer)), tag = super::CUSTOMER_TAG)] + async fn get_customer() -> Json { + Json(Customer { + name: String::from("Bill Book"), + }) + } +} + +mod order { + use axum::Json; + use serde::{Deserialize, Serialize}; + use fastapi::ToSchema; + use fastapi_axum::router::OpenApiRouter; + use fastapi_axum::routes; + + /// This is the order + #[derive(ToSchema, Serialize)] + struct Order { + id: i32, + name: String, + } + + #[derive(ToSchema, Deserialize, Serialize)] + struct OrderRequest { + name: String, + } + + /// expose the Order OpenAPI to parent module + pub fn router() -> OpenApiRouter { + OpenApiRouter::new().routes(routes!(get_order, create_order)) + } + + /// Get static order object + #[fastapi::path(get, path = "", responses((status = OK, body = Order)), tag = super::ORDER_TAG)] + async fn get_order() -> Json { + Json(Order { + id: 100, + name: String::from("Bill Book"), + }) + } + + /// Create an order. + /// + /// Create an order by basically passing through the name of the request with static id. + #[fastapi::path(post, path = "", responses((status = OK, body = Order)), tag = super::ORDER_TAG)] + async fn create_order(Json(order): Json) -> Json { + Json(Order { + id: 120, + name: order.name, + }) + } +} + +mod inner { + pub mod secret_handlers { + + /// This is some secret inner handler + #[fastapi::path(get, path = "/api/inner/secret", responses((status = OK, body = str)))] + pub async fn get_secret() -> &'static str { + "secret" + } + + /// Post some secret inner handler + #[fastapi::path(post, path = "/api/inner/secret", responses((status = OK)))] + pub async fn post_secret() { + println!("You posted a secret") + } + } +} diff --git a/examples/axum-fastapi-docker b/examples/axum-fastapi-docker new file mode 120000 index 0000000..2dd810f --- /dev/null +++ b/examples/axum-fastapi-docker @@ -0,0 +1 @@ +./axum-utoipa-nesting-vendored \ No newline at end of file diff --git a/examples/axum-fastapi-nesting-vendored/Cargo.toml b/examples/axum-fastapi-nesting-vendored/Cargo.toml new file mode 100644 index 0000000..6db5ced --- /dev/null +++ b/examples/axum-fastapi-nesting-vendored/Cargo.toml @@ -0,0 +1,22 @@ +[package] +name = "axum-fastapi-nesting" +description = "Axum nesting example with Swagger UI" +version = "0.1.0" +edition = "2021" +license = "MIT" +authors = ["Elli Example "] + + +[dependencies] +axum = "0.7" +hyper = { version = "1.0.1", features = ["full"] } +tokio = { version = "1.17", features = ["full"] } +tower = "0.5" +fastapi = { path = "../../fastapi", features = ["axum_extras"] } +fastapi-swagger-ui = { path = "../../fastapi-swagger-ui", features = ["axum", "vendored"], default-features = false } +serde = { version = "1.0", features = ["derive"] } +serde_json = "1.0" +env_logger = "0.11" +log = "0.4" + +[workspace] diff --git a/examples/axum-fastapi-nesting-vendored/Dockerfile b/examples/axum-fastapi-nesting-vendored/Dockerfile new file mode 100644 index 0000000..689a1f0 --- /dev/null +++ b/examples/axum-fastapi-nesting-vendored/Dockerfile @@ -0,0 +1,5 @@ +FROM alpine:3.14 + +COPY target/x86_64-unknown-linux-musl/release/axum-fastapi-nesting /axum-fastapi-nesting + +ENTRYPOINT [ "/axum-fastapi-nesting" ] diff --git a/examples/axum-fastapi-nesting-vendored/README.md b/examples/axum-fastapi-nesting-vendored/README.md new file mode 100644 index 0000000..e2b90a0 --- /dev/null +++ b/examples/axum-fastapi-nesting-vendored/README.md @@ -0,0 +1,21 @@ +# axum-nesting-vendored ~ fastapi with fastapi-swagger-ui example + +This example demonstrates `axum` with programmatic and macro based nesting of OpenApis +using `fastapi-swagger-ui` for visualization. + +Example uses `fastapi-swagger-ui-vendored` to demonstrate vendored version of Swagger UI. + +Just run command below to run the demo application and browse to `http://localhost:8080/swagger-ui/`. + +```bash +cargo run +``` + +## Run with Docker + +You have to build the crate with `--release` or set `debug-embed` in order to embed Swagger UI. +```bash +cargo build --release --target x86_64-unknown-linux-musl +docker build -t axum-fastapi-nesting:latest . +docker run -p 8080:8080 -t axum-fastapi-nesting:latest +``` diff --git a/examples/axum-fastapi-nesting-vendored/src/main.rs b/examples/axum-fastapi-nesting-vendored/src/main.rs new file mode 100644 index 0000000..a668c0f --- /dev/null +++ b/examples/axum-fastapi-nesting-vendored/src/main.rs @@ -0,0 +1,67 @@ +use std::net::{Ipv4Addr, SocketAddr}; + +use axum::{routing, Router}; +use std::io::Error; +use tokio::net::TcpListener; +use fastapi::openapi::path::Operation; +use fastapi::openapi::{OpenApiBuilder, PathItem, PathsBuilder}; +use fastapi::OpenApi; +use fastapi_swagger_ui::SwaggerUi; + +#[tokio::main] +async fn main() -> Result<(), Error> { + #[derive(OpenApi)] + #[openapi( + nest( + // you can nest sub apis here + (path = "/api/v1/ones", api = one::OneApi) + ) + )] + struct ApiDoc; + + #[derive(OpenApi)] + #[openapi()] + struct HelloApi; + + let hello_api = + Into::::into(HelloApi::openapi()).paths(PathsBuilder::new().path( + "", + PathItem::new(fastapi::openapi::HttpMethod::Get, Operation::new()), + )); + + let mut doc = ApiDoc::openapi(); + doc = doc.nest("/hello", hello_api); // you can even nest programmatically apis + + let app = Router::new() + .merge(SwaggerUi::new("/swagger-ui").url("/api-docs/openapi.json", doc)) + .route("/hello", routing::get(|| async { "hello" })) + .nest("/api/v1/ones", one::router()); + + let address = SocketAddr::from((Ipv4Addr::UNSPECIFIED, 8080)); + let listener = TcpListener::bind(&address).await?; + axum::serve(listener, app.into_make_service()).await +} + +mod one { + use axum::{routing, Router}; + use fastapi::OpenApi; + + #[derive(OpenApi)] + #[openapi(paths(get_one))] + pub(super) struct OneApi; + + pub(super) fn router() -> Router { + Router::new().route("/one", routing::get(get_one)) + } + + #[fastapi::path( + get, + path = "/one", + responses( + (status = OK, description = "One result ok", body = str) + ) + )] + async fn get_one() -> &'static str { + "one" + } +} diff --git a/examples/fastapi-config-test/README.md b/examples/fastapi-config-test/README.md new file mode 100644 index 0000000..33f594c --- /dev/null +++ b/examples/fastapi-config-test/README.md @@ -0,0 +1,6 @@ +# fastapi-config-test + +This example demonstrates global Rust type aliases in fastapi project. +Check out `main.rs` and `build.rs` and then run `cargo run`. + +Browse the [project files here](../../fastapi-config/config-test-crate/). diff --git a/examples/generics-actix/Cargo.toml b/examples/generics-actix/Cargo.toml new file mode 100644 index 0000000..96f8a28 --- /dev/null +++ b/examples/generics-actix/Cargo.toml @@ -0,0 +1,22 @@ +[package] +name = "generics-actix" +description = "Simple actix-web using non-supported types and generics with fastapi and Swagger" +version = "0.1.0" +edition = "2021" +license = "MIT" +authors = [ + "Example " +] + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +actix-web = "4" +env_logger = "0.10.0" +geo-types = { version = "0.7", features = ["serde"] } +serde = { version = "1.0", features = ["derive"] } +serde_json = "1.0" +fastapi = { path = "../../fastapi", features = ["actix_extras", "non_strict_integers"] } +fastapi-swagger-ui = { path = "../../fastapi-swagger-ui", features = ["actix-web"] } + +[workspace] diff --git a/examples/generics-actix/README.md b/examples/generics-actix/README.md new file mode 100644 index 0000000..89a8c52 --- /dev/null +++ b/examples/generics-actix/README.md @@ -0,0 +1,21 @@ +# generics-actix + +This is demo `actix-web` application showing using external `geo-types`, which uses generics, in endpoints. +The API demonstrates `fastapi` with `fastapi-swagger-ui` functionalities. + +Just run command below to run the demo application and browse to `http://localhost:8080/swagger-ui/`. + +```bash +cargo run +``` + +In the swagger UI: + +1. Send `x=1`, `y=2` to endpoint `coord_u64` to see an integer `x`,`y` coord object returned. +2. Send `x=1.1`, `y=2.2` to endpoint `coord_f64` to see a float `x`,`y` coord object returned. + +If you want to see some logging, you may prepend the command with `RUST_LOG=debug` as shown below. + +```bash +RUST_LOG=debug cargo run +``` diff --git a/examples/generics-actix/src/main.rs b/examples/generics-actix/src/main.rs new file mode 100644 index 0000000..dcda656 --- /dev/null +++ b/examples/generics-actix/src/main.rs @@ -0,0 +1,119 @@ +use std::{error::Error, net::Ipv4Addr}; + +use actix_web::{ + get, + middleware::Logger, + web::{Json, Query}, + App, HttpServer, Responder, Result, +}; +use serde::{Deserialize, Serialize}; +use fastapi::{ + openapi::schema::{Object, ObjectBuilder}, + IntoParams, OpenApi, PartialSchema, ToSchema, +}; +use fastapi_swagger_ui::SwaggerUi; + +fn get_coord_schema() -> Object { + ObjectBuilder::new() + .property("x", T::schema()) + .required("x") + .property("y", T::schema()) + .required("y") + .description(Some("this is the coord description")) + .build() +} + +#[derive(Serialize, ToSchema)] +pub struct MyObject { + #[schema(schema_with=get_coord_schema::)] + at: geo_types::Coord, +} + +// FloatParams and IntegerParams cant be merged using generics because +// IntoParams does not support it, and does not support `schema_with` either. +#[derive(Deserialize, Debug, IntoParams)] +pub struct FloatParams { + /// x value + x: f64, + /// y value + y: f64, +} + +#[fastapi::path( + params( + FloatParams + ), + responses( + (status = 200, description = "OK", body = MyObject), + ), + security( + ("api_key" = []) + ), +)] +#[get("/coord_f64")] +pub async fn coord_f64(params: Query) -> Result { + let params: FloatParams = params.into_inner(); + let coord = geo_types::Coord:: { + x: params.x, + y: params.y, + }; + eprintln!("response = {:?}", coord); + Ok(Json(coord)) +} + +#[derive(Deserialize, Debug, IntoParams)] +pub struct IntegerParams { + /// x value + x: u64, + /// y value + y: u64, +} + +#[fastapi::path( + params( + IntegerParams, + ), + responses( + (status = 200, description = "OK", body = MyObject), + ), + security( + ("api_key" = []) + ), +)] +#[get("/coord_u64")] +pub async fn coord_u64(params: Query) -> Result { + let params: IntegerParams = params.into_inner(); + let coord = geo_types::Coord:: { + x: params.x, + y: params.y, + }; + eprintln!("response = {:?}", coord); + Ok(Json(coord)) +} + +#[actix_web::main] +async fn main() -> Result<(), impl Error> { + env_logger::init(); + + #[derive(OpenApi)] + #[openapi( + paths(coord_f64, coord_u64), + components(schemas(MyObject, MyObject)) + )] + struct ApiDoc; + + let openapi = ApiDoc::openapi(); + + HttpServer::new(move || { + App::new() + .wrap(Logger::default()) + .service(coord_f64) + .service(coord_u64) + .service( + SwaggerUi::new("/swagger-ui/{_:.*}").url("/api-docs/openapi.json", openapi.clone()), + ) + }) + .bind((Ipv4Addr::UNSPECIFIED, 8080))? + .run() + .await +} diff --git a/examples/raw-json-actix/Cargo.toml b/examples/raw-json-actix/Cargo.toml new file mode 100644 index 0000000..437c58e --- /dev/null +++ b/examples/raw-json-actix/Cargo.toml @@ -0,0 +1,20 @@ +[package] +name = "raw-json-actix" +description = "Simple actix-web using raw JSON with fastapi and Swagger" +version = "0.1.0" +edition = "2021" +license = "MIT" +authors = [ + "Example " +] + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +actix-web = "4" +env_logger = "0.10.0" +serde_json = "1.0" +fastapi = { path = "../../fastapi", features = ["actix_extras"] } +fastapi-swagger-ui = { path = "../../fastapi-swagger-ui", features = ["actix-web"] } + +[workspace] diff --git a/examples/raw-json-actix/README.md b/examples/raw-json-actix/README.md new file mode 100644 index 0000000..f696dc3 --- /dev/null +++ b/examples/raw-json-actix/README.md @@ -0,0 +1,22 @@ +# raw-json-actix + +This is a demo `actix-web` application showing using raw JSON in endpoints. +The API demonstrates `fastapi` with `fastapi-swagger-ui` functionalities. + +Just run command below to run the demo application and browse to `http://localhost:8080/swagger-ui/`. + +```bash +cargo run +``` + +In the swagger UI: + +1. Send body `"string"` and the console will show the body was a `serde_json::String`. +2. Send body `1` and the console will show the body was a `serde_json::Number`. +3. Send body `[1, 2]` and the console will show the body was a `serde_json::Array`. + +If you want to see some logging, you may prepend the command with `RUST_LOG=debug` as shown below. + +```bash +RUST_LOG=debug cargo run +``` diff --git a/examples/raw-json-actix/src/main.rs b/examples/raw-json-actix/src/main.rs new file mode 100644 index 0000000..0fabc8d --- /dev/null +++ b/examples/raw-json-actix/src/main.rs @@ -0,0 +1,48 @@ +use std::{error::Error, net::Ipv4Addr}; + +use actix_web::{ + middleware::Logger, patch, web::Json, App, HttpResponse, HttpServer, Responder, Result, +}; +use serde_json::Value; +use fastapi::OpenApi; +use fastapi_swagger_ui::SwaggerUi; + +#[fastapi::path( + request_body = Value, + responses( + (status = 200, description = "Patch completed"), + (status = 406, description = "Not accepted"), + ), + security( + ("api_key" = []) + ), +)] +#[patch("/patch_raw")] +pub async fn patch_raw(body: Json) -> Result { + let value: Value = body.into_inner(); + eprintln!("body = {:?}", value); + Ok(HttpResponse::Ok()) +} + +#[actix_web::main] +async fn main() -> Result<(), impl Error> { + env_logger::init(); + + #[derive(OpenApi)] + #[openapi(paths(patch_raw))] + struct ApiDoc; + + let openapi = ApiDoc::openapi(); + + HttpServer::new(move || { + App::new() + .wrap(Logger::default()) + .service(patch_raw) + .service( + SwaggerUi::new("/swagger-ui/{_:.*}").url("/api-docs/openapi.json", openapi.clone()), + ) + }) + .bind((Ipv4Addr::UNSPECIFIED, 8080))? + .run() + .await +} diff --git a/examples/rocket-todo/Cargo.toml b/examples/rocket-todo/Cargo.toml new file mode 100644 index 0000000..13e4813 --- /dev/null +++ b/examples/rocket-todo/Cargo.toml @@ -0,0 +1,22 @@ +[package] +name = "rocket-todo" +description = "Simple rocket todo example api with fastapi and Swagger UI, Rapidoc, Redoc, and Scalar" +version = "0.1.0" +edition = "2021" +license = "MIT" +authors = ["Elli Example "] + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +rocket = { version = "0.5", features = ["json"] } +fastapi = { path = "../../fastapi", features = ["rocket_extras"] } +fastapi-swagger-ui = { path = "../../fastapi-swagger-ui", features = ["rocket"] } +fastapi-redoc = { path = "../../fastapi-redoc", features = ["rocket"] } +fastapi-rapidoc = { path = "../../fastapi-rapidoc", features = ["rocket"] } +fastapi-scalar = { path = "../../fastapi-scalar", features = ["rocket"] } +serde = { version = "1.0", features = ["derive"] } +serde_json = "1.0" +log = "0.4" + +[workspace] diff --git a/examples/rocket-todo/README.md b/examples/rocket-todo/README.md new file mode 100644 index 0000000..18f224b --- /dev/null +++ b/examples/rocket-todo/README.md @@ -0,0 +1,24 @@ +# todo-rocket ~ fastapi with fastapi-swagger-ui, fastapi-redoc and fastapi-rapidoc example + +This is a demo `rocket` application with in-memory storage to manage Todo items. The API +demonstrates `fastapi` with `fastapi-swagger-ui` functionalities. + +For security restricted endpoints the super secret API key is: `fastapi-rocks`. + +Just run command below to run the demo application and browse to `http://localhost:8000/swagger-ui/`. + +If you prefer Redoc just head to `http://localhost:8000/redoc` and view the Open API. + +RapiDoc can be found from `http://localhost:8000/redoc`. + +Scalar can be reached on `http://localhost:8000/scalar`. + +```bash +cargo run +``` + +If you want to see some logging, you may prepend the command with `RUST_LOG=debug` as shown below. + +```bash +RUST_LOG=debug cargo run +``` diff --git a/examples/rocket-todo/src/main.rs b/examples/rocket-todo/src/main.rs new file mode 100644 index 0000000..e82b76d --- /dev/null +++ b/examples/rocket-todo/src/main.rs @@ -0,0 +1,314 @@ +use rocket::{catch, catchers, routes, Build, Request, Rocket}; +use serde_json::json; +use todo::RequireApiKey; +use fastapi::{ + openapi::security::{ApiKey, ApiKeyValue, SecurityScheme}, + Modify, OpenApi, +}; +use fastapi_rapidoc::RapiDoc; +use fastapi_redoc::{Redoc, Servable}; +use fastapi_scalar::{Scalar, Servable as ScalarServable}; +use fastapi_swagger_ui::SwaggerUi; + +use crate::todo::TodoStore; + +#[rocket::launch] +fn rocket() -> Rocket { + #[derive(OpenApi)] + #[openapi( + nest( + (path = "/api/todo", api = todo::TodoApi) + ), + tags( + (name = "todo", description = "Todo management endpoints.") + ), + modifiers(&SecurityAddon) + )] + struct ApiDoc; + + struct SecurityAddon; + + impl Modify for SecurityAddon { + fn modify(&self, openapi: &mut fastapi::openapi::OpenApi) { + let components = openapi.components.as_mut().unwrap(); // we can unwrap safely since there already is components registered. + components.add_security_scheme( + "api_key", + SecurityScheme::ApiKey(ApiKey::Header(ApiKeyValue::new("todo_apikey"))), + ) + } + } + + rocket::build() + .manage(TodoStore::default()) + .register("/api/todo", catchers![unauthorized]) + .mount( + "/", + SwaggerUi::new("/swagger-ui/<_..>").url("/api-docs/openapi.json", ApiDoc::openapi()), + ) + // There is no need to create RapiDoc::with_openapi because the OpenApi is served + // via SwaggerUi instead we only make rapidoc to point to the existing doc. + .mount("/", RapiDoc::new("/api-docs/openapi.json").path("/rapidoc")) + // Alternative to above + // .mount( + // "/", + // RapiDoc::with_openapi("/api-docs/openapi2.json", ApiDoc::openapi()).path("/rapidoc") + // ) + .mount("/", Redoc::with_url("/redoc", ApiDoc::openapi())) + .mount("/", Scalar::with_url("/scalar", ApiDoc::openapi())) + .mount( + "/api/todo", + routes![ + todo::get_tasks, + todo::create_todo, + todo::mark_done, + todo::delete_todo, + todo::search_todos + ], + ) +} + +#[catch(401)] +async fn unauthorized(req: &Request<'_>) -> serde_json::Value { + let (_, todo_error) = req.guard::().await.failed().unwrap(); + + json!(todo_error) +} + +mod todo { + use std::sync::{Arc, Mutex}; + + use rocket::{ + delete, get, + http::Status, + outcome::Outcome, + post, put, + request::{self, FromRequest}, + response::{status::Custom, Responder}, + serde::json::Json, + FromForm, Request, State, + }; + use serde::{Deserialize, Serialize}; + use fastapi::{IntoParams, OpenApi, ToSchema}; + + #[derive(OpenApi)] + #[openapi(paths(get_tasks, create_todo, mark_done, delete_todo, search_todos,))] + pub struct TodoApi; + + pub(super) type TodoStore = Arc>>; + + /// Todo operation error. + #[derive(Serialize, ToSchema, Responder, Debug)] + pub(super) enum TodoError { + /// When there is conflict creating a new todo. + #[response(status = 409)] + Conflict(String), + + /// When todo item is not found from storage. + #[response(status = 404)] + NotFound(String), + + /// When unauthorized to complete operation + #[response(status = 401)] + Unauthorized(String), + } + + pub(super) struct RequireApiKey; + + #[rocket::async_trait] + impl<'r> FromRequest<'r> for RequireApiKey { + type Error = TodoError; + + async fn from_request(request: &'r Request<'_>) -> request::Outcome { + match request.headers().get("todo_apikey").next() { + Some("fastapi-rocks") => Outcome::Success(RequireApiKey), + None => Outcome::Error(( + Status::Unauthorized, + TodoError::Unauthorized(String::from("missing api key")), + )), + _ => Outcome::Error(( + Status::Unauthorized, + TodoError::Unauthorized(String::from("invalid api key")), + )), + } + } + } + + pub(super) struct LogApiKey; + + #[rocket::async_trait] + impl<'r> FromRequest<'r> for LogApiKey { + type Error = TodoError; + + async fn from_request(request: &'r Request<'_>) -> request::Outcome { + match request.headers().get("todo_apikey").next() { + Some("fastapi-rocks") => { + log::info!("authenticated"); + Outcome::Success(LogApiKey) + } + _ => { + log::info!("no api key"); + Outcome::Forward(Status::Unauthorized) + } + } + } + } + + /// Task to do. + #[derive(Serialize, Deserialize, ToSchema, Clone)] + pub(super) struct Todo { + /// Unique todo id. + #[schema(example = 1)] + id: i32, + /// Description of a tasks. + #[schema(example = "Buy groceries")] + value: String, + /// Indication whether task is done or not. + done: bool, + } + + /// List all available todo items. + #[fastapi::path( + responses( + (status = 200, description = "Get all todos", body = [Todo]) + ) + )] + #[get("/")] + pub(super) async fn get_tasks(store: &State) -> Json> { + Json(store.lock().unwrap().clone()) + } + + /// Create new todo item. + /// + /// Create new todo item and add it to the storage. + #[fastapi::path( + responses( + (status = 201, description = "Todo item created successfully", body = Todo), + (status = 409, description = "Todo already exists", body = TodoError, example = json!(TodoError::Conflict(String::from("id = 1")))) + ) + )] + #[post("/", data = "")] + pub(super) async fn create_todo( + todo: Json, + store: &State, + ) -> Result>, TodoError> { + let mut todos = store.lock().unwrap(); + todos + .iter() + .find(|existing| existing.id == todo.id) + .map(|todo| Err(TodoError::Conflict(format!("id = {}", todo.id)))) + .unwrap_or_else(|| { + todos.push(todo.0.clone()); + + Ok(Custom(Status::Created, Json(todo.0))) + }) + } + + /// Mark Todo item done by given id + /// + /// Tries to find todo item by given id and mark it done if found. Will return not found in case todo + /// item does not exists. + #[fastapi::path( + responses( + (status = 200, description = "Todo item marked done successfully"), + (status = 404, description = "Todo item not found from storage", body = TodoError, example = json!(TodoError::NotFound(String::from("id = 1")))) + ), + params( + ("id", description = "Todo item unique id") + ), + security( + (), + ("api_key" = []) + ) + )] + #[put("/")] + pub(super) async fn mark_done( + id: i32, + _api_key: LogApiKey, + store: &State, + ) -> Result { + store + .lock() + .unwrap() + .iter_mut() + .find(|todo| todo.id == id) + .map(|todo| { + todo.done = true; + + Ok(Status::Ok) + }) + .unwrap_or_else(|| Err(TodoError::NotFound(format!("id = {id}")))) + } + + /// Delete Todo by given id. + /// + /// Delete Todo from storage by Todo id if found. + #[fastapi::path( + responses( + (status = 200, description = "Todo deleted successfully"), + (status = 401, description = "Unauthorized to delete Todos", body = TodoError, example = json!(TodoError::Unauthorized(String::from("id = 1")))), + (status = 404, description = "Todo not found", body = TodoError, example = json!(TodoError::NotFound(String::from("id = 1")))) + ), + params( + ("id", description = "Todo item id") + ), + security( + ("api_key" = []) + ) + )] + #[delete("/")] + pub(super) async fn delete_todo( + id: i32, + _api_key: RequireApiKey, + store: &State, + ) -> Result { + let mut todos = store.lock().unwrap(); + let len = todos.len(); + todos.retain(|todo| todo.id != id); + + if len == todos.len() { + Err(TodoError::NotFound(format!("id = {id}"))) + } else { + Ok(Status::Ok) + } + } + + #[derive(Deserialize, FromForm, IntoParams)] + pub(super) struct SearchParams { + /// Value to be search form `Todo`s + value: String, + /// Search whether todo is done + done: Option, + } + + /// Search Todo items by their value. + /// + /// Search is performed in case sensitive manner from value of Todo. + #[fastapi::path( + params( + SearchParams + ), + responses( + (status = 200, description = "Found Todo items", body = [Todo]) + ) + )] + #[get("/search?")] + pub(super) async fn search_todos( + search: SearchParams, + store: &State, + ) -> Json> { + let SearchParams { value, done } = search; + + Json( + store + .lock() + .unwrap() + .iter() + .filter(|todo| { + todo.value.to_lowercase().contains(&value.to_lowercase()) + && done.map(|done| done == todo.done).unwrap_or(true) + }) + .cloned() + .collect(), + ) + } +} diff --git a/examples/simple-axum/Cargo.toml b/examples/simple-axum/Cargo.toml new file mode 100644 index 0000000..1f76bbf --- /dev/null +++ b/examples/simple-axum/Cargo.toml @@ -0,0 +1,15 @@ +[package] +name = "simple-axum" +description = "Very short Axum example that exposes OpenAPI json file" +version = "0.1.0" +edition = "2021" +license = "MIT" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +axum = "0.7" +tokio = { version = "1.17", features = ["full"] } +fastapi = { path = "../../fastapi", features = ["axum_extras"] } + +[workspace] diff --git a/examples/simple-axum/src/main.rs b/examples/simple-axum/src/main.rs new file mode 100644 index 0000000..a199aa9 --- /dev/null +++ b/examples/simple-axum/src/main.rs @@ -0,0 +1,32 @@ +use std::net::SocketAddr; + +use axum::{routing::get, Json}; +use fastapi::OpenApi; + +#[derive(OpenApi)] +#[openapi(paths(openapi))] +struct ApiDoc; + +/// Return JSON version of an OpenAPI schema +#[fastapi::path( + get, + path = "/api-docs/openapi.json", + responses( + (status = 200, description = "JSON file", body = ()) + ) +)] +async fn openapi() -> Json { + Json(ApiDoc::openapi()) +} + +#[tokio::main] +async fn main() { + let socket_address: SocketAddr = "127.0.0.1:8080".parse().unwrap(); + let listener = tokio::net::TcpListener::bind(socket_address).await.unwrap(); + + let app = axum::Router::new().route("/api-docs/openapi.json", get(openapi)); + + axum::serve(listener, app.into_make_service()) + .await + .unwrap() +} diff --git a/examples/todo-actix/Cargo.toml b/examples/todo-actix/Cargo.toml new file mode 100644 index 0000000..c4a0a5e --- /dev/null +++ b/examples/todo-actix/Cargo.toml @@ -0,0 +1,27 @@ +[package] +name = "todo-actix" +description = "Simple actix-web todo example api with fastapi and Swagger UI, Rapidoc, Redoc, and Scalar" +version = "0.1.0" +edition = "2021" +license = "MIT" +authors = ["Example "] + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +actix-web = "4" +serde = { version = "1.0", features = ["derive"] } +serde_json = "1.0" +env_logger = "0.11" +log = "0.4" +futures = "0.3" +fastapi = { path = "../../fastapi", features = ["actix_extras"] } +fastapi-swagger-ui = { path = "../../fastapi-swagger-ui", features = [ + "actix-web", +] } +fastapi-redoc = { path = "../../fastapi-redoc", features = ["actix-web"] } +fastapi-rapidoc = { path = "../../fastapi-rapidoc", features = ["actix-web"] } +fastapi-scalar = { path = "../../fastapi-scalar", features = ["actix-web"] } +fastapi-actix-web = { path = "../../fastapi-actix-web" } + +[workspace] diff --git a/examples/todo-actix/README.md b/examples/todo-actix/README.md new file mode 100644 index 0000000..d22b85a --- /dev/null +++ b/examples/todo-actix/README.md @@ -0,0 +1,24 @@ +# todo-actix ~ fastapi with fastapi-swagger-ui, fastapi-redoc and fastapi-rapidoc example + +This is a demo `actix-web` application with in-memory storage to manage Todo items. The API +demonstrates `fastapi` with `fastapi-swagger-ui` functionalities. + +For security restricted endpoints the super secret API key is: `fastapi-rocks`. + +Just run command below to run the demo application and browse to `http://localhost:8080/swagger-ui/`. + +If you prefer Redoc just head to `http://localhost:8080/redoc` and view the Open API. + +RapiDoc can be found from `http://localhost:8080/rapidoc`. + +Scalar can be reached on `http://localhost:8080/scalar`. + +```bash +cargo run +``` + +If you want to see some logging, you may prepend the command with `RUST_LOG=debug` as shown below. + +```bash +RUST_LOG=debug cargo run +``` diff --git a/examples/todo-actix/src/main.rs b/examples/todo-actix/src/main.rs new file mode 100644 index 0000000..6559328 --- /dev/null +++ b/examples/todo-actix/src/main.rs @@ -0,0 +1,206 @@ +use std::{ + error::Error, + future::{self, Ready}, + net::Ipv4Addr, +}; + +use actix_web::{ + dev::{Service, ServiceRequest, ServiceResponse, Transform}, + middleware::Logger, + web::Data, + App, HttpResponse, HttpServer, +}; +use futures::future::LocalBoxFuture; +use fastapi::{ + openapi::security::{ApiKey, ApiKeyValue, SecurityScheme}, + Modify, OpenApi, +}; +use fastapi_actix_web::AppExt; +use fastapi_rapidoc::RapiDoc; +use fastapi_redoc::{Redoc, Servable}; +use fastapi_scalar::{Scalar, Servable as ScalarServable}; +use fastapi_swagger_ui::SwaggerUi; + +use crate::todo::TodoStore; + +use self::todo::ErrorResponse; + +mod todo; + +const API_KEY_NAME: &str = "todo_apikey"; +const API_KEY: &str = "fastapi-rocks"; + +#[actix_web::main] +async fn main() -> Result<(), impl Error> { + env_logger::init(); + + #[derive(OpenApi)] + #[openapi( + tags( + (name = "todo", description = "Todo management endpoints.") + ), + modifiers(&SecurityAddon) + )] + struct ApiDoc; + + struct SecurityAddon; + + impl Modify for SecurityAddon { + fn modify(&self, openapi: &mut fastapi::openapi::OpenApi) { + let components = openapi.components.as_mut().unwrap(); // we can unwrap safely since there already is components registered. + components.add_security_scheme( + "api_key", + SecurityScheme::ApiKey(ApiKey::Header(ApiKeyValue::new("todo_apikey"))), + ) + } + } + + let store = Data::new(TodoStore::default()); + + HttpServer::new(move || { + // This factory closure is called on each worker thread independently. + App::new() + .into_fastapi_app() + .openapi(ApiDoc::openapi()) + .map(|app| app.wrap(Logger::default())) + .service(fastapi_actix_web::scope("/api/todo").configure(todo::configure(store.clone()))) + .openapi_service(|api| Redoc::with_url("/redoc", api)) + .openapi_service(|api| { + SwaggerUi::new("/swagger-ui/{_:.*}").url("/api-docs/openapi.json", api) + }) + // There is no need to create RapiDoc::with_openapi because the OpenApi is served + // via SwaggerUi. Instead we only make rapidoc to point to the existing doc. + // + // If we wanted to serve the schema, the following would work: + // .openapi_service(|api| RapiDoc::with_openapi("/api-docs/openapi2.json", api).path("/rapidoc")) + .map(|app| app.service(RapiDoc::new("/api-docs/openapi.json").path("/rapidoc"))) + .openapi_service(|api| Scalar::with_url("/scalar", api)) + .into_app() + }) + .bind((Ipv4Addr::UNSPECIFIED, 8080))? + .run() + .await +} + +/// Require api key middleware will actually require valid api key +struct RequireApiKey; + +impl Transform for RequireApiKey +where + S: Service< + ServiceRequest, + Response = ServiceResponse, + Error = actix_web::Error, + >, + S::Future: 'static, +{ + type Response = ServiceResponse; + type Error = actix_web::Error; + type Transform = ApiKeyMiddleware; + type InitError = (); + type Future = Ready>; + + fn new_transform(&self, service: S) -> Self::Future { + future::ready(Ok(ApiKeyMiddleware { + service, + log_only: false, + })) + } +} + +/// Log api key middleware only logs about missing or invalid api keys +struct LogApiKey; + +impl Transform for LogApiKey +where + S: Service< + ServiceRequest, + Response = ServiceResponse, + Error = actix_web::Error, + >, + S::Future: 'static, +{ + type Response = ServiceResponse; + type Error = actix_web::Error; + type Transform = ApiKeyMiddleware; + type InitError = (); + type Future = Ready>; + + fn new_transform(&self, service: S) -> Self::Future { + future::ready(Ok(ApiKeyMiddleware { + service, + log_only: true, + })) + } +} + +struct ApiKeyMiddleware { + service: S, + log_only: bool, +} + +impl Service for ApiKeyMiddleware +where + S: Service< + ServiceRequest, + Response = ServiceResponse, + Error = actix_web::Error, + >, + S::Future: 'static, +{ + type Response = ServiceResponse; + type Error = actix_web::Error; + type Future = LocalBoxFuture<'static, Result>; + + fn poll_ready( + &self, + ctx: &mut core::task::Context<'_>, + ) -> std::task::Poll> { + self.service.poll_ready(ctx) + } + + fn call(&self, req: ServiceRequest) -> Self::Future { + let response = |req: ServiceRequest, response: HttpResponse| -> Self::Future { + Box::pin(async { Ok(req.into_response(response)) }) + }; + + match req.headers().get(API_KEY_NAME) { + Some(key) if key != API_KEY => { + if self.log_only { + log::debug!("Incorrect api api provided!!!") + } else { + return response( + req, + HttpResponse::Unauthorized().json(ErrorResponse::Unauthorized( + String::from("incorrect api key"), + )), + ); + } + } + None => { + if self.log_only { + log::debug!("Missing api key!!!") + } else { + return response( + req, + HttpResponse::Unauthorized() + .json(ErrorResponse::Unauthorized(String::from("missing api key"))), + ); + } + } + _ => (), // just passthrough + } + + if self.log_only { + log::debug!("Performing operation") + } + + let future = self.service.call(req); + + Box::pin(async move { + let response = future.await?; + + Ok(response) + }) + } +} diff --git a/examples/todo-actix/src/todo.rs b/examples/todo-actix/src/todo.rs new file mode 100644 index 0000000..3001d5a --- /dev/null +++ b/examples/todo-actix/src/todo.rs @@ -0,0 +1,273 @@ +use std::sync::Mutex; + +use actix_web::{ + delete, get, post, put, + web::{Data, Json, Path, Query}, + HttpResponse, Responder, +}; +use serde::{Deserialize, Serialize}; +use fastapi::{IntoParams, ToSchema}; +use fastapi_actix_web::service_config::ServiceConfig; + +use crate::{LogApiKey, RequireApiKey}; + +#[derive(Default)] +pub(super) struct TodoStore { + todos: Mutex>, +} + +const TODO: &str = "todo"; + +pub(super) fn configure(store: Data) -> impl FnOnce(&mut ServiceConfig) { + |config: &mut ServiceConfig| { + config + .app_data(store) + .service(search_todos) + .service(get_todos) + .service(create_todo) + .service(delete_todo) + .service(get_todo_by_id) + .service(update_todo); + } +} + +/// Task to do. +#[derive(Serialize, Deserialize, ToSchema, Clone, Debug)] +struct Todo { + /// Unique id for the todo item. + #[schema(example = 1)] + id: i32, + /// Description of the tasks to do. + #[schema(example = "Remember to buy groceries")] + value: String, + /// Mark is the task done or not + checked: bool, +} + +/// Request to update existing `Todo` item. +#[derive(Serialize, Deserialize, ToSchema, Clone, Debug)] +struct TodoUpdateRequest { + /// Optional new value for the `Todo` task. + #[schema(example = "Dentist at 14.00")] + value: Option, + /// Optional check status to mark is the task done or not. + checked: Option, +} + +/// Todo endpoint error responses +#[derive(Serialize, Deserialize, Clone, ToSchema)] +pub(super) enum ErrorResponse { + /// When Todo is not found by search term. + NotFound(String), + /// When there is a conflict storing a new todo. + Conflict(String), + /// When todo endpoint was called without correct credentials + Unauthorized(String), +} + +/// Get list of todos. +/// +/// List todos from in-memory todo store. +/// +/// One could call the api endpoint with following curl. +/// ```text +/// curl localhost:8080/todo +/// ``` +#[fastapi::path( + tag = TODO, + responses( + (status = 200, description = "List current todo items", body = [Todo]) + ) +)] +#[get("")] +async fn get_todos(todo_store: Data) -> impl Responder { + let todos = todo_store.todos.lock().unwrap(); + + HttpResponse::Ok().json(todos.clone()) +} + +/// Create new Todo to shared in-memory storage. +/// +/// Post a new `Todo` in request body as json to store it. Api will return +/// created `Todo` on success or `ErrorResponse::Conflict` if todo with same id already exists. +/// +/// One could call the api with. +/// ```text +/// curl localhost:8080/todo -d '{"id": 1, "value": "Buy movie ticket", "checked": false}' +/// ``` +#[fastapi::path( + tag = TODO, + responses( + (status = 201, description = "Todo created successfully", body = Todo), + (status = 409, description = "Todo with id already exists", body = ErrorResponse, example = json!(ErrorResponse::Conflict(String::from("id = 1")))) + ) +)] +#[post("")] +async fn create_todo(todo: Json, todo_store: Data) -> impl Responder { + let mut todos = todo_store.todos.lock().unwrap(); + let todo = &todo.into_inner(); + + todos + .iter() + .find(|existing| existing.id == todo.id) + .map(|existing| { + HttpResponse::Conflict().json(ErrorResponse::Conflict(format!("id = {}", existing.id))) + }) + .unwrap_or_else(|| { + todos.push(todo.clone()); + + HttpResponse::Ok().json(todo) + }) +} + +/// Delete Todo by given path variable id. +/// +/// This endpoint needs `api_key` authentication in order to call. Api key can be found from README.md. +/// +/// Api will delete todo from shared in-memory storage by the provided id and return success 200. +/// If storage does not contain `Todo` with given id 404 not found will be returned. +#[fastapi::path( + tag = TODO, + responses( + (status = 200, description = "Todo deleted successfully"), + (status = 401, description = "Unauthorized to delete Todo", body = ErrorResponse, example = json!(ErrorResponse::Unauthorized(String::from("missing api key")))), + (status = 404, description = "Todo not found by id", body = ErrorResponse, example = json!(ErrorResponse::NotFound(String::from("id = 1")))) + ), + params( + ("id", description = "Unique storage id of Todo") + ), + security( + ("api_key" = []) + ) +)] +#[delete("/{id}", wrap = "RequireApiKey")] +async fn delete_todo(id: Path, todo_store: Data) -> impl Responder { + let mut todos = todo_store.todos.lock().unwrap(); + let id = id.into_inner(); + + let new_todos = todos + .iter() + .filter(|todo| todo.id != id) + .cloned() + .collect::>(); + + if new_todos.len() == todos.len() { + HttpResponse::NotFound().json(ErrorResponse::NotFound(format!("id = {id}"))) + } else { + *todos = new_todos; + HttpResponse::Ok().finish() + } +} + +/// Get Todo by given todo id. +/// +/// Return found `Todo` with status 200 or 404 not found if `Todo` is not found from shared in-memory storage. +#[fastapi::path( + tag = TODO, + responses( + (status = 200, description = "Todo found from storage", body = Todo), + (status = 404, description = "Todo not found by id", body = ErrorResponse, example = json!(ErrorResponse::NotFound(String::from("id = 1")))) + ), + params( + ("id", description = "Unique storage id of Todo") + ) +)] +#[get("/{id}")] +async fn get_todo_by_id(id: Path, todo_store: Data) -> impl Responder { + let todos = todo_store.todos.lock().unwrap(); + let id = id.into_inner(); + + todos + .iter() + .find(|todo| todo.id == id) + .map(|todo| HttpResponse::Ok().json(todo)) + .unwrap_or_else(|| { + HttpResponse::NotFound().json(ErrorResponse::NotFound(format!("id = {id}"))) + }) +} + +/// Update Todo with given id. +/// +/// This endpoint supports optional authentication. +/// +/// Tries to update `Todo` by given id as path variable. If todo is found by id values are +/// updated according `TodoUpdateRequest` and updated `Todo` is returned with status 200. +/// If todo is not found then 404 not found is returned. +#[fastapi::path( + tag = TODO, + responses( + (status = 200, description = "Todo updated successfully", body = Todo), + (status = 404, description = "Todo not found by id", body = ErrorResponse, example = json!(ErrorResponse::NotFound(String::from("id = 1")))) + ), + params( + ("id", description = "Unique storage id of Todo") + ), + security( + (), + ("api_key" = []) + ) +)] +#[put("/{id}", wrap = "LogApiKey")] +async fn update_todo( + id: Path, + todo: Json, + todo_store: Data, +) -> impl Responder { + let mut todos = todo_store.todos.lock().unwrap(); + let id = id.into_inner(); + let todo = todo.into_inner(); + + todos + .iter_mut() + .find_map(|todo| if todo.id == id { Some(todo) } else { None }) + .map(|existing_todo| { + if let Some(checked) = todo.checked { + existing_todo.checked = checked; + } + if let Some(value) = todo.value { + existing_todo.value = value; + } + + HttpResponse::Ok().json(existing_todo) + }) + .unwrap_or_else(|| { + HttpResponse::NotFound().json(ErrorResponse::NotFound(format!("id = {id}"))) + }) +} + +/// Search todos Query +#[derive(Deserialize, Debug, IntoParams)] +struct SearchTodos { + /// Content that should be found from Todo's value field + value: String, +} + +/// Search Todos with by value +/// +/// Perform search from `Todo`s present in in-memory storage by matching Todo's value to +/// value provided as query parameter. Returns 200 and matching `Todo` items. +#[fastapi::path( + tag = TODO, + params( + SearchTodos + ), + responses( + (status = 200, description = "Search Todos did not result error", body = [Todo]), + ) +)] +#[get("/search")] +async fn search_todos(query: Query, todo_store: Data) -> impl Responder { + let todos = todo_store.todos.lock().unwrap(); + + HttpResponse::Ok().json( + todos + .iter() + .filter(|todo| { + todo.value + .to_lowercase() + .contains(&query.value.to_lowercase()) + }) + .cloned() + .collect::>(), + ) +} diff --git a/examples/todo-axum/Cargo.toml b/examples/todo-axum/Cargo.toml new file mode 100644 index 0000000..93ac92e --- /dev/null +++ b/examples/todo-axum/Cargo.toml @@ -0,0 +1,25 @@ +[package] +name = "todo-axum" +description = "Simple axum todo example api with fastapi and Swagger UI, Rapidoc, Redoc, and Scalar" +version = "0.1.0" +edition = "2021" +license = "MIT" +authors = ["Elli Example "] + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +axum = "0.7" +hyper = { version = "1.0.1", features = ["full"] } +tokio = { version = "1.17", features = ["full"] } +tower = "0.5" +fastapi = { path = "../../fastapi", features = ["axum_extras"] } +fastapi-swagger-ui = { path = "../../fastapi-swagger-ui", features = ["axum"] } +fastapi-axum = { path = "../../fastapi-axum" } +fastapi-redoc = { path = "../../fastapi-redoc", features = ["axum"] } +fastapi-rapidoc = { path = "../../fastapi-rapidoc", features = ["axum"] } +fastapi-scalar = { path = "../../fastapi-scalar", features = ["axum"] } +serde = { version = "1.0", features = ["derive"] } +serde_json = "1.0" + +[workspace] diff --git a/examples/todo-axum/README.md b/examples/todo-axum/README.md new file mode 100644 index 0000000..0cc46bd --- /dev/null +++ b/examples/todo-axum/README.md @@ -0,0 +1,18 @@ +# todo-axum ~ fastapi with fastapi-swagger-ui, fastapi-redoc and fastapi-rapidoc example + +This is a demo `axum` application with in-memory storage to manage Todo items. The API +demonstrates `fastapi` with `fastapi-swagger-ui` functionalities. + +For security restricted endpoints the super secret API key is: `fastapi-rocks`. + +Just run command below to run the demo application and browse to `http://localhost:8080/swagger-ui/`. + +If you prefer Redoc just head to `http://localhost:8080/redoc` and view the Open API. + +RapiDoc can be found from `http://localhost:8080/rapidoc`. + +Scalar can be reached on `http://localhost:8080/scalar`. + +```bash +cargo run +``` diff --git a/examples/todo-axum/src/main.rs b/examples/todo-axum/src/main.rs new file mode 100644 index 0000000..ab3a730 --- /dev/null +++ b/examples/todo-axum/src/main.rs @@ -0,0 +1,311 @@ +use std::net::{Ipv4Addr, SocketAddr}; + +use std::io::Error; +use tokio::net::TcpListener; +use fastapi::{ + openapi::security::{ApiKey, ApiKeyValue, SecurityScheme}, + Modify, OpenApi, +}; +use fastapi_axum::router::OpenApiRouter; +use fastapi_rapidoc::RapiDoc; +use fastapi_redoc::{Redoc, Servable}; +use fastapi_scalar::{Scalar, Servable as ScalarServable}; +use fastapi_swagger_ui::SwaggerUi; + +const TODO_TAG: &str = "todo"; + +#[tokio::main] +async fn main() -> Result<(), Error> { + #[derive(OpenApi)] + #[openapi( + modifiers(&SecurityAddon), + tags( + (name = TODO_TAG, description = "Todo items management API") + ) + )] + struct ApiDoc; + + struct SecurityAddon; + + impl Modify for SecurityAddon { + fn modify(&self, openapi: &mut fastapi::openapi::OpenApi) { + if let Some(components) = openapi.components.as_mut() { + components.add_security_scheme( + "api_key", + SecurityScheme::ApiKey(ApiKey::Header(ApiKeyValue::new("todo_apikey"))), + ) + } + } + } + + let (router, api) = OpenApiRouter::with_openapi(ApiDoc::openapi()) + .nest("/api/v1/todos", todo::router()) + .split_for_parts(); + + let router = router + .merge(SwaggerUi::new("/swagger-ui").url("/api-docs/openapi.json", api.clone())) + .merge(Redoc::with_url("/redoc", api.clone())) + // There is no need to create `RapiDoc::with_openapi` because the OpenApi is served + // via SwaggerUi instead we only make rapidoc to point to the existing doc. + .merge(RapiDoc::new("/api-docs/openapi.json").path("/rapidoc")) + // Alternative to above + // .merge(RapiDoc::with_openapi("/api-docs/openapi2.json", api).path("/rapidoc")) + .merge(Scalar::with_url("/scalar", api)); + + let address = SocketAddr::from((Ipv4Addr::UNSPECIFIED, 8080)); + let listener = TcpListener::bind(&address).await?; + axum::serve(listener, router.into_make_service()).await +} + +mod todo { + use std::sync::Arc; + + use axum::{ + extract::{Path, Query, State}, + response::IntoResponse, + Json, + }; + use hyper::{HeaderMap, StatusCode}; + use serde::{Deserialize, Serialize}; + use tokio::sync::Mutex; + use fastapi::{IntoParams, ToSchema}; + use fastapi_axum::{router::OpenApiRouter, routes}; + + use crate::TODO_TAG; + + /// In-memory todo store + type Store = Mutex>; + + /// Item to do. + #[derive(Serialize, Deserialize, ToSchema, Clone)] + struct Todo { + id: i32, + #[schema(example = "Buy groceries")] + value: String, + done: bool, + } + + /// Todo operation errors + #[derive(Serialize, Deserialize, ToSchema)] + enum TodoError { + /// Todo already exists conflict. + #[schema(example = "Todo already exists")] + Conflict(String), + /// Todo not found by id. + #[schema(example = "id = 1")] + NotFound(String), + /// Todo operation unauthorized + #[schema(example = "missing api key")] + Unauthorized(String), + } + + pub(super) fn router() -> OpenApiRouter { + let store = Arc::new(Store::default()); + OpenApiRouter::new() + .routes(routes!(list_todos, create_todo)) + .routes(routes!(search_todos)) + .routes(routes!(mark_done, delete_todo)) + .with_state(store) + } + + /// List all Todo items + /// + /// List all Todo items from in-memory storage. + #[fastapi::path( + get, + path = "", + tag = TODO_TAG, + responses( + (status = 200, description = "List all todos successfully", body = [Todo]) + ) + )] + async fn list_todos(State(store): State>) -> Json> { + let todos = store.lock().await.clone(); + + Json(todos) + } + + /// Todo search query + #[derive(Deserialize, IntoParams)] + struct TodoSearchQuery { + /// Search by value. Search is incase sensitive. + value: String, + /// Search by `done` status. + done: bool, + } + + /// Search Todos by query params. + /// + /// Search `Todo`s by query params and return matching `Todo`s. + #[fastapi::path( + get, + path = "/search", + tag = TODO_TAG, + params( + TodoSearchQuery + ), + responses( + (status = 200, description = "List matching todos by query", body = [Todo]) + ) + )] + async fn search_todos( + State(store): State>, + query: Query, + ) -> Json> { + Json( + store + .lock() + .await + .iter() + .filter(|todo| { + todo.value.to_lowercase() == query.value.to_lowercase() + && todo.done == query.done + }) + .cloned() + .collect(), + ) + } + + /// Create new Todo + /// + /// Tries to create a new Todo item to in-memory storage or fails with 409 conflict if already exists. + #[fastapi::path( + post, + path = "", + tag = TODO_TAG, + responses( + (status = 201, description = "Todo item created successfully", body = Todo), + (status = 409, description = "Todo already exists", body = TodoError) + ) + )] + async fn create_todo( + State(store): State>, + Json(todo): Json, + ) -> impl IntoResponse { + let mut todos = store.lock().await; + + todos + .iter_mut() + .find(|existing_todo| existing_todo.id == todo.id) + .map(|found| { + ( + StatusCode::CONFLICT, + Json(TodoError::Conflict(format!( + "todo already exists: {}", + found.id + ))), + ) + .into_response() + }) + .unwrap_or_else(|| { + todos.push(todo.clone()); + + (StatusCode::CREATED, Json(todo)).into_response() + }) + } + + /// Mark Todo item done by id + /// + /// Mark Todo item done by given id. Return only status 200 on success or 404 if Todo is not found. + #[fastapi::path( + put, + path = "/{id}", + tag = TODO_TAG, + responses( + (status = 200, description = "Todo marked done successfully"), + (status = 404, description = "Todo not found") + ), + params( + ("id" = i32, Path, description = "Todo database id") + ), + security( + (), // <-- make optional authentication + ("api_key" = []) + ) + )] + async fn mark_done( + Path(id): Path, + State(store): State>, + headers: HeaderMap, + ) -> StatusCode { + match check_api_key(false, headers) { + Ok(_) => (), + Err(_) => return StatusCode::UNAUTHORIZED, + } + + let mut todos = store.lock().await; + + todos + .iter_mut() + .find(|todo| todo.id == id) + .map(|todo| { + todo.done = true; + StatusCode::OK + }) + .unwrap_or(StatusCode::NOT_FOUND) + } + + /// Delete Todo item by id + /// + /// Delete Todo item from in-memory storage by id. Returns either 200 success of 404 with TodoError if Todo is not found. + #[fastapi::path( + delete, + path = "/{id}", + tag = TODO_TAG, + responses( + (status = 200, description = "Todo marked done successfully"), + (status = 401, description = "Unauthorized to delete Todo", body = TodoError, example = json!(TodoError::Unauthorized(String::from("missing api key")))), + (status = 404, description = "Todo not found", body = TodoError, example = json!(TodoError::NotFound(String::from("id = 1")))) + ), + params( + ("id" = i32, Path, description = "Todo database id") + ), + security( + ("api_key" = []) + ) + )] + async fn delete_todo( + Path(id): Path, + State(store): State>, + headers: HeaderMap, + ) -> impl IntoResponse { + match check_api_key(true, headers) { + Ok(_) => (), + Err(error) => return error.into_response(), + } + + let mut todos = store.lock().await; + + let len = todos.len(); + + todos.retain(|todo| todo.id != id); + + if todos.len() != len { + StatusCode::OK.into_response() + } else { + ( + StatusCode::NOT_FOUND, + Json(TodoError::NotFound(format!("id = {id}"))), + ) + .into_response() + } + } + + // normally you should create a middleware for this but this is sufficient for sake of example. + fn check_api_key( + require_api_key: bool, + headers: HeaderMap, + ) -> Result<(), (StatusCode, Json)> { + match headers.get("todo_apikey") { + Some(header) if header != "fastapi-rocks" => Err(( + StatusCode::UNAUTHORIZED, + Json(TodoError::Unauthorized(String::from("incorrect api key"))), + )), + None if require_api_key => Err(( + StatusCode::UNAUTHORIZED, + Json(TodoError::Unauthorized(String::from("missing api key"))), + )), + _ => Ok(()), + } + } +} diff --git a/examples/todo-tide/Cargo.toml b/examples/todo-tide/Cargo.toml new file mode 100644 index 0000000..c9fe0fe --- /dev/null +++ b/examples/todo-tide/Cargo.toml @@ -0,0 +1,24 @@ +[package] +name = "todo-tide" +description = "Simple tide todo example api with fastapi and Swagger UI" +version = "0.1.0" +edition = "2021" +license = "MIT" +authors = [ + "Elli Example " +] + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +tide = "0.16.0" +async-std = { version = "1.8.0", features = ["attributes"] } +serde = { version = "1.0", features = ["derive"] } +serde_json = "1.0" +env_logger = "0.11.0" +log = "0.4" +futures = "0.3" +fastapi = { path = "../../fastapi" } +fastapi-swagger-ui = { path = "../../fastapi-swagger-ui" } + +[workspace] diff --git a/examples/todo-tide/README.md b/examples/todo-tide/README.md new file mode 100644 index 0000000..7e338f8 --- /dev/null +++ b/examples/todo-tide/README.md @@ -0,0 +1,18 @@ +# todo-tide ~ fastapi with fastapi-swagger-ui example + +This is a demo `tide` application with in-memory storage to manage Todo items. The API +demonstrates `fastapi` with `fastapi-swagger-ui` functionalities. + +For security restricted endpoints the super secret API key is: `fastapi-rocks`. + +Just run command below to run the demo application and browse to `http://localhost:8080/swagger-ui/index.html`. + +```bash +cargo run +``` + +If you want to see some logging, you may prepend the command with `RUST_LOG=debug` as shown below. + +```bash +RUST_LOG=debug cargo run +``` diff --git a/examples/todo-tide/src/main.rs b/examples/todo-tide/src/main.rs new file mode 100644 index 0000000..ff78416 --- /dev/null +++ b/examples/todo-tide/src/main.rs @@ -0,0 +1,250 @@ +use std::sync::Arc; + +use serde_json::json; +use tide::{http::Mime, Redirect, Response}; +use fastapi::{ + openapi::security::{ApiKey, ApiKeyValue, SecurityScheme}, + Modify, OpenApi, +}; +use fastapi_swagger_ui::Config; + +use crate::todo::Store; + +#[async_std::main] +async fn main() -> std::io::Result<()> { + env_logger::init(); + let config = Arc::new(Config::from("/api-docs/openapi.json")); + let mut app = tide::with_state(config); + + #[derive(OpenApi)] + #[openapi( + nest( + (path = "/api/todo", api = todo::TodoApi) + ), + modifiers(&SecurityAddon), + tags( + (name = "todo", description = "Todo items management endpoints.") + ) + )] + struct ApiDoc; + + struct SecurityAddon; + + impl Modify for SecurityAddon { + fn modify(&self, openapi: &mut fastapi::openapi::OpenApi) { + let components = openapi.components.as_mut().unwrap(); // we can unwrap safely since there already is components registered. + components.add_security_scheme( + "api_key", + SecurityScheme::ApiKey(ApiKey::Header(ApiKeyValue::new("todo_apikey"))), + ) + } + } + + // serve OpenApi json + app.at("/api-docs/openapi.json") + .get(|_| async move { Ok(Response::builder(200).body(json!(ApiDoc::openapi()))) }); + + // serve Swagger UI + app.at("/swagger-ui") + .get(|_| async move { Ok(Redirect::new("/swagger-ui/index.html")) }); + app.at("/swagger-ui/*").get(serve_swagger); + + app.at("/api").nest({ + let mut todos = tide::with_state(Store::default()); + + todos.at("/todo").get(todo::list_todos); + todos.at("/todo").post(todo::create_todo); + todos.at("/todo/:id").delete(todo::delete_todo); + todos.at("/todo/:id").put(todo::mark_done); + + todos + }); + + app.listen("0.0.0.0:8080").await +} + +async fn serve_swagger(request: tide::Request>>) -> tide::Result { + let config = request.state().clone(); + let path = request.url().path().to_string(); + let tail = path.strip_prefix("/swagger-ui/").unwrap(); + + match fastapi_swagger_ui::serve(tail, config) { + Ok(swagger_file) => swagger_file + .map(|file| { + Ok(Response::builder(200) + .body(file.bytes.to_vec()) + .content_type(file.content_type.parse::()?) + .build()) + }) + .unwrap_or_else(|| Ok(Response::builder(404).build())), + Err(error) => Ok(Response::builder(500).body(error.to_string()).build()), + } +} + +mod todo { + use std::sync::{Arc, Mutex}; + + use serde::{Deserialize, Serialize}; + use serde_json::json; + use tide::{Request, Response}; + use fastapi::{OpenApi, ToSchema}; + + #[derive(OpenApi)] + #[openapi( + paths( + list_todos, + create_todo, + delete_todo, + mark_done + ), + tags( + (name = "todo", description = "Todo items management endpoints.") + ) + )] + pub struct TodoApi; + + /// Item to complete + #[derive(Serialize, Deserialize, ToSchema, Clone)] + pub(super) struct Todo { + /// Unique database id for `Todo` + #[schema(example = 1)] + id: i32, + /// Description of task to complete + #[schema(example = "Buy coffee")] + value: String, + /// Indicates whether task is done or not + done: bool, + } + + /// Error that might occur when managing `Todo` items + #[derive(Serialize, Deserialize, ToSchema)] + pub(super) enum TodoError { + /// Happens when Todo item already exists + Config(String), + /// Todo not found from storage + NotFound(String), + } + + pub(super) type Store = Arc>>; + + /// List todos from in-memory storage. + /// + /// List all todos from in memory storage. + #[fastapi::path( + get, + path = "", + responses( + (status = 200, description = "List all todos successfully", body = [Todo]) + ) + )] + pub(super) async fn list_todos(req: Request) -> tide::Result { + let todos = req.state().lock().unwrap().clone(); + + Ok(Response::builder(200).body(json!(todos)).build()) + } + + /// Create new todo + /// + /// Create new todo to in-memory storage if not exists. + #[fastapi::path( + post, + path = "", + request_body = Todo, + responses( + (status = 201, description = "Todo created successfully", body = Todo), + (status = 409, description = "Todo already exists", body = TodoError, example = json!(TodoError::Config(String::from("id = 1")))) + ) + )] + pub(super) async fn create_todo(mut req: Request) -> tide::Result { + let new_todo = req.body_json::().await?; + let mut todos = req.state().lock().unwrap(); + + todos + .iter() + .find(|existing| existing.id == new_todo.id) + .map(|existing| { + Ok(Response::builder(409) + .body(json!(TodoError::Config(format!("id = {}", existing.id)))) + .build()) + }) + .unwrap_or_else(|| { + todos.push(new_todo.clone()); + + Ok(Response::builder(200).body(json!(new_todo)).build()) + }) + } + + /// Delete todo by id. + /// + /// Delete todo from in-memory storage. + #[fastapi::path( + delete, + path = "/{id}", + responses( + (status = 200, description = "Todo deleted successfully"), + (status = 401, description = "Unauthorized to delete Todo"), + (status = 404, description = "Todo not found", body = TodoError, example = json!(TodoError::NotFound(String::from("id = 1")))) + ), + params( + ("id" = i32, Path, description = "Id of todo item to delete") + ), + security( + ("api_key" = []) + ) + )] + pub(super) async fn delete_todo(req: Request) -> tide::Result { + let id = req.param("id")?.parse::()?; + let api_key = req + .header("todo_apikey") + .map(|header| header.as_str().to_string()) + .unwrap_or_default(); + + if api_key != "fastapi-rocks" { + return Ok(Response::new(401)); + } + + let mut todos = req.state().lock().unwrap(); + + let old_size = todos.len(); + + todos.retain(|todo| todo.id != id); + + if old_size == todos.len() { + Ok(Response::builder(404) + .body(json!(TodoError::NotFound(format!("id = {id}")))) + .build()) + } else { + Ok(Response::new(200)) + } + } + + /// Mark todo done by id + #[fastapi::path( + put, + path = "/{id}", + responses( + (status = 200, description = "Todo marked done successfully"), + (status = 404, description = "Todo not found", body = TodoError, example = json!(TodoError::NotFound(String::from("id = 1")))) + ), + params( + ("id" = i32, Path, description = "Id of todo item to mark done") + ) + )] + pub(super) async fn mark_done(req: Request) -> tide::Result { + let id = req.param("id")?.parse::()?; + let mut todos = req.state().lock().unwrap(); + + todos + .iter_mut() + .find(|todo| todo.id == id) + .map(|todo| { + todo.done = true; + Ok(Response::new(200)) + }) + .unwrap_or_else(|| { + Ok(Response::builder(404) + .body(json!(TodoError::NotFound(format!("id = {id}")))) + .build()) + }) + } +} diff --git a/examples/todo-warp-rapidoc/Cargo.toml b/examples/todo-warp-rapidoc/Cargo.toml new file mode 100644 index 0000000..92c1504 --- /dev/null +++ b/examples/todo-warp-rapidoc/Cargo.toml @@ -0,0 +1,23 @@ +[package] +name = "todo-warp-rapidoc" +description = "Simple warp todo example api with fastapi and fastapi-rapidoc" +version = "0.1.0" +edition = "2021" +license = "MIT" +authors = [ + "Elli Example " +] + +[dependencies] +tokio = { version = "1", features = ["full"] } +warp = "0.3" +serde = { version = "1.0", features = ["derive"] } +serde_json = "1.0" +env_logger = "0.11.0" +log = "0.4" +futures = "0.3" +fastapi = { path = "../../fastapi" } +fastapi-rapidoc = { path = "../../fastapi-rapidoc" } + +[workspace] + diff --git a/examples/todo-warp-rapidoc/README.md b/examples/todo-warp-rapidoc/README.md new file mode 100644 index 0000000..5c819b9 --- /dev/null +++ b/examples/todo-warp-rapidoc/README.md @@ -0,0 +1,12 @@ +# warp with fastapi-rapidoc + +This is simple Todo app example with warp and fastapi-rapidoc OpenAPI viewer. + +For security restricted endpoints the super secret API key is: `fastapi-rocks`. + +Head to `http://localhost:8080/rapidoc` for the demo. + +run +```rust +RUST_LOG=debug cargo run +``` diff --git a/examples/todo-warp-rapidoc/src/main.rs b/examples/todo-warp-rapidoc/src/main.rs new file mode 100644 index 0000000..3b2c888 --- /dev/null +++ b/examples/todo-warp-rapidoc/src/main.rs @@ -0,0 +1,243 @@ +use std::net::Ipv4Addr; + +use fastapi::{ + openapi::security::{ApiKey, ApiKeyValue, SecurityScheme}, + Modify, OpenApi, +}; +use fastapi_rapidoc::RapiDoc; +use warp::Filter; + +#[tokio::main] +async fn main() { + env_logger::init(); + + #[derive(OpenApi)] + #[openapi( + nest( + (path = "/api", api = todo::TodoApi) + ), + modifiers(&SecurityAddon), + tags( + (name = "todo", description = "Todo items management API") + ) + )] + struct ApiDoc; + + struct SecurityAddon; + + impl Modify for SecurityAddon { + fn modify(&self, openapi: &mut fastapi::openapi::OpenApi) { + let components = openapi.components.as_mut().unwrap(); // we can unwrap safely since there already is components registered. + components.add_security_scheme( + "api_key", + SecurityScheme::ApiKey(ApiKey::Header(ApiKeyValue::new("todo_apikey"))), + ) + } + } + + let api_doc = warp::path("api-doc.json") + .and(warp::get()) + .map(|| warp::reply::json(&ApiDoc::openapi())); + + let rapidoc_handler = warp::path("rapidoc") + .and(warp::get()) + .map(|| warp::reply::html(RapiDoc::new("/api-doc.json").to_html())); + + warp::serve( + api_doc + .or(rapidoc_handler) + .or(warp::path("api").and(todo::handlers())), + ) + .run((Ipv4Addr::UNSPECIFIED, 8080)) + .await +} + +mod todo { + use std::{ + convert::Infallible, + sync::{Arc, Mutex}, + }; + + use serde::{Deserialize, Serialize}; + use fastapi::{IntoParams, OpenApi, ToSchema}; + use warp::{hyper::StatusCode, Filter, Rejection, Reply}; + + #[derive(OpenApi)] + #[openapi(paths(list_todos, create_todo, delete_todo))] + pub struct TodoApi; + + pub type Store = Arc>>; + + /// Item to complete. + #[derive(Serialize, Deserialize, ToSchema, Clone)] + pub struct Todo { + /// Unique database id. + #[schema(example = 1)] + id: i64, + /// Description of what need to be done. + #[schema(example = "Buy movie tickets")] + value: String, + } + + #[derive(Debug, Deserialize, ToSchema)] + #[serde(rename_all = "snake_case")] + pub enum Order { + AscendingId, + DescendingId, + } + + #[derive(Debug, Deserialize, IntoParams)] + #[into_params(parameter_in = Query)] + pub struct ListQueryParams { + /// Filters the returned `Todo` items according to whether they contain the specified string. + #[param(style = Form, example = json!("task"))] + contains: Option, + /// Order the returned `Todo` items. + #[param(inline)] + order: Option, + } + + pub fn handlers() -> impl Filter + Clone { + let store = Store::default(); + + let list = warp::path("todo") + .and(warp::get()) + .and(warp::path::end()) + .and(with_store(store.clone())) + .and(warp::query::()) + .and_then(list_todos); + + let create = warp::path("todo") + .and(warp::post()) + .and(warp::path::end()) + .and(warp::body::json()) + .and(with_store(store.clone())) + .and_then(create_todo); + + let delete = warp::path!("todo" / i64) + .and(warp::delete()) + .and(warp::path::end()) + .and(with_store(store)) + .and(warp::header::header("todo_apikey")) + .and_then(delete_todo); + + list.or(create).or(delete) + } + + fn with_store(store: Store) -> impl Filter + Clone { + warp::any().map(move || store.clone()) + } + + /// List todos from in-memory storage. + /// + /// List all todos from in-memory storage. + #[fastapi::path( + get, + path = "/todo", + params(ListQueryParams), + responses( + (status = 200, description = "List todos successfully", body = [Todo]) + ) + )] + pub async fn list_todos( + store: Store, + query: ListQueryParams, + ) -> Result { + let todos = store.lock().unwrap(); + + let mut todos: Vec = if let Some(contains) = query.contains { + todos + .iter() + .filter(|todo| todo.value.contains(&contains)) + .cloned() + .collect() + } else { + todos.clone() + }; + + if let Some(order) = query.order { + match order { + Order::AscendingId => { + todos.sort_by_key(|todo| todo.id); + } + Order::DescendingId => { + todos.sort_by_key(|todo| todo.id); + todos.reverse(); + } + } + } + + Ok(warp::reply::json(&todos)) + } + + /// Create new todo item. + /// + /// Creates new todo item to in-memory storage if it is unique by id. + #[fastapi::path( + post, + path = "/todo", + request_body = Todo, + responses( + (status = 200, description = "Todo created successfully", body = Todo), + (status = 409, description = "Todo already exists") + ) + )] + pub async fn create_todo(todo: Todo, store: Store) -> Result, Infallible> { + let mut todos = store.lock().unwrap(); + + if todos + .iter() + .any(|existing_todo| existing_todo.id == todo.id) + { + Ok(Box::new(StatusCode::CONFLICT)) + } else { + todos.push(todo.clone()); + + Ok(Box::new(warp::reply::with_status( + warp::reply::json(&todo), + StatusCode::CREATED, + ))) + } + } + + /// Delete todo item by id. + /// + /// Delete todo item by id from in-memory storage. + #[fastapi::path( + delete, + path = "/todo/{id}", + responses( + (status = 200, description = "Delete successful"), + (status = 400, description = "Missing todo_apikey request header"), + (status = 401, description = "Unauthorized to delete todo"), + (status = 404, description = "Todo not found to delete"), + ), + params( + ("id" = i64, Path, description = "Todo's unique id") + ), + security( + ("api_key" = []) + ) + )] + pub async fn delete_todo( + id: i64, + store: Store, + api_key: String, + ) -> Result { + if api_key != "fastapi-rocks" { + return Ok(StatusCode::UNAUTHORIZED); + } + + let mut todos = store.lock().unwrap(); + + let size = todos.len(); + + todos.retain(|existing| existing.id != id); + + if size == todos.len() { + Ok(StatusCode::NOT_FOUND) + } else { + Ok(StatusCode::OK) + } + } +} diff --git a/examples/todo-warp-redoc-with-file-config/Cargo.toml b/examples/todo-warp-redoc-with-file-config/Cargo.toml new file mode 100644 index 0000000..0127f6e --- /dev/null +++ b/examples/todo-warp-redoc-with-file-config/Cargo.toml @@ -0,0 +1,22 @@ +[package] +name = "todo-warp-redoc-with-file-config" +description = "Simple warp todo example api with fastapi and fastapi-redoc" +version = "0.1.0" +edition = "2021" +license = "MIT" +authors = ["Elli Example "] + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +tokio = { version = "1", features = ["full"] } +warp = "0.3" +serde = { version = "1.0", features = ["derive"] } +serde_json = "1.0" +env_logger = "0.11.0" +log = "0.4" +futures = "0.3" +fastapi = { path = "../../fastapi" } +fastapi-redoc = { path = "../../fastapi-redoc" } + +[workspace] diff --git a/examples/todo-warp-redoc-with-file-config/README.md b/examples/todo-warp-redoc-with-file-config/README.md new file mode 100644 index 0000000..dd859ee --- /dev/null +++ b/examples/todo-warp-redoc-with-file-config/README.md @@ -0,0 +1,27 @@ +# todo-warp-redoc-with-file-config ~ fastapi with fastapi-redoc example + +This is a demo `warp` application with in-memory storage to manage Todo items. + +This example is more bare minimum compared to `todo-actix`, since similarly same macro syntax is +supported, no matter the framework. + + +This how `fastapi-redoc` can be used as standalone without pre-existing framework integration with additional +file configuration for the Redoc UI. The configuration is applicable in any other `fastapi-redoc` setup as well. + +See the `build.rs` file that defines the Redoc config file and `redoc.json` where the [configuration options](https://redocly.com/docs/api-reference-docs/configuration/functionality/#configuration-options-for-api-docs) +are defined. + +For security restricted endpoints the super secret API key is: `fastapi-rocks`. + +Just run command below to run the demo application and browse to `http://localhost:8080/redoc`. + +```bash +cargo run +``` + +If you want to see some logging, you may prepend the command with `RUST_LOG=debug` as shown below. + +```bash +RUST_LOG=debug cargo run +``` diff --git a/examples/todo-warp-redoc-with-file-config/build.rs b/examples/todo-warp-redoc-with-file-config/build.rs new file mode 100644 index 0000000..3b2699f --- /dev/null +++ b/examples/todo-warp-redoc-with-file-config/build.rs @@ -0,0 +1,3 @@ +fn main() { + println!("cargo:rustc-env=FASTAPI_REDOC_CONFIG_FILE=redoc.json") +} diff --git a/examples/todo-warp-redoc-with-file-config/redoc.json b/examples/todo-warp-redoc-with-file-config/redoc.json new file mode 100644 index 0000000..318f0e1 --- /dev/null +++ b/examples/todo-warp-redoc-with-file-config/redoc.json @@ -0,0 +1,3 @@ +{ + "disableSearch": true +} diff --git a/examples/todo-warp-redoc-with-file-config/src/main.rs b/examples/todo-warp-redoc-with-file-config/src/main.rs new file mode 100644 index 0000000..4dc3167 --- /dev/null +++ b/examples/todo-warp-redoc-with-file-config/src/main.rs @@ -0,0 +1,239 @@ +use std::net::Ipv4Addr; + +use fastapi::{ + openapi::{ + security::{ApiKey, ApiKeyValue, SecurityScheme}, + Components, + }, + Modify, OpenApi, +}; +use fastapi_redoc::{FileConfig, Redoc}; +use warp::Filter; + +#[tokio::main] +async fn main() { + env_logger::init(); + + #[derive(OpenApi)] + #[openapi( + nest( + (path = "/api", api = todo::TodoApi) + ), + modifiers(&SecurityAddon), + tags( + (name = "todo", description = "Todo items management API") + ) + )] + struct ApiDoc; + + struct SecurityAddon; + + impl Modify for SecurityAddon { + fn modify(&self, openapi: &mut fastapi::openapi::OpenApi) { + let components = openapi.components.get_or_insert(Components::new()); + components.add_security_scheme( + "api_key", + SecurityScheme::ApiKey(ApiKey::Header(ApiKeyValue::new("todo_apikey"))), + ) + } + } + + let redoc_ui = Redoc::with_config(ApiDoc::openapi(), FileConfig); + let redoc = warp::path("redoc") + .and(warp::get()) + .map(move || warp::reply::html(redoc_ui.to_html())); + + warp::serve(redoc.or(warp::path("api").and(todo::handlers()))) + .run((Ipv4Addr::UNSPECIFIED, 8080)) + .await +} + +mod todo { + use std::{ + convert::Infallible, + sync::{Arc, Mutex}, + }; + + use serde::{Deserialize, Serialize}; + use fastapi::{IntoParams, OpenApi, ToSchema}; + use warp::{hyper::StatusCode, Filter, Rejection, Reply}; + + #[derive(OpenApi)] + #[openapi(paths(list_todos, create_todo, delete_todo))] + pub struct TodoApi; + + pub type Store = Arc>>; + + /// Item to complete. + #[derive(Serialize, Deserialize, ToSchema, Clone)] + pub struct Todo { + /// Unique database id. + #[schema(example = 1)] + id: i64, + /// Description of what need to be done. + #[schema(example = "Buy movie tickets")] + value: String, + } + + #[derive(Debug, Deserialize, ToSchema)] + #[serde(rename_all = "snake_case")] + pub enum Order { + AscendingId, + DescendingId, + } + + #[derive(Debug, Deserialize, IntoParams)] + #[into_params(parameter_in = Query)] + pub struct ListQueryParams { + /// Filters the returned `Todo` items according to whether they contain the specified string. + #[param(style = Form, example = json!("task"))] + contains: Option, + /// Order the returned `Todo` items. + #[param(inline)] + order: Option, + } + + pub fn handlers() -> impl Filter + Clone { + let store = Store::default(); + + let list = warp::path("todo") + .and(warp::get()) + .and(warp::path::end()) + .and(with_store(store.clone())) + .and(warp::query::()) + .and_then(list_todos); + + let create = warp::path("todo") + .and(warp::post()) + .and(warp::path::end()) + .and(warp::body::json()) + .and(with_store(store.clone())) + .and_then(create_todo); + + let delete = warp::path!("todo" / i64) + .and(warp::delete()) + .and(warp::path::end()) + .and(with_store(store)) + .and(warp::header::header("todo_apikey")) + .and_then(delete_todo); + + list.or(create).or(delete) + } + + fn with_store(store: Store) -> impl Filter + Clone { + warp::any().map(move || store.clone()) + } + + /// List todos from in-memory storage. + /// + /// List all todos from in-memory storage. + #[fastapi::path( + get, + path = "/todo", + params(ListQueryParams), + responses( + (status = 200, description = "List todos successfully", body = [Todo]) + ) + )] + pub async fn list_todos( + store: Store, + query: ListQueryParams, + ) -> Result { + let todos = store.lock().unwrap(); + + let mut todos: Vec = if let Some(contains) = query.contains { + todos + .iter() + .filter(|todo| todo.value.contains(&contains)) + .cloned() + .collect() + } else { + todos.clone() + }; + + if let Some(order) = query.order { + match order { + Order::AscendingId => { + todos.sort_by_key(|todo| todo.id); + } + Order::DescendingId => { + todos.sort_by_key(|todo| todo.id); + todos.reverse(); + } + } + } + + Ok(warp::reply::json(&todos)) + } + + /// Create new todo item. + /// + /// Creates new todo item to in-memory storage if it is unique by id. + #[fastapi::path( + post, + path = "/todo", + request_body = Todo, + responses( + (status = 200, description = "Todo created successfully", body = Todo), + (status = 409, description = "Todo already exists") + ) + )] + pub async fn create_todo(todo: Todo, store: Store) -> Result, Infallible> { + let mut todos = store.lock().unwrap(); + + if todos + .iter() + .any(|existing_todo| existing_todo.id == todo.id) + { + Ok(Box::new(StatusCode::CONFLICT)) + } else { + todos.push(todo.clone()); + + Ok(Box::new(warp::reply::with_status( + warp::reply::json(&todo), + StatusCode::CREATED, + ))) + } + } + + /// Delete todo item by id. + /// + /// Delete todo item by id from in-memory storage. + #[fastapi::path( + delete, + path = "/todo/{id}", + responses( + (status = 200, description = "Delete successful"), + (status = 400, description = "Missing todo_apikey request header"), + (status = 401, description = "Unauthorized to delete todo"), + (status = 404, description = "Todo not found to delete"), + ), + params( + ("id" = i64, Path, description = "Todo's unique id") + ), + security( + ("api_key" = []) + ) + )] + pub async fn delete_todo( + id: i64, + store: Store, + api_key: String, + ) -> Result { + if api_key != "fastapi-rocks" { + return Ok(StatusCode::UNAUTHORIZED); + } + + let mut todos = store.lock().unwrap(); + + let size = todos.len(); + + todos.retain(|existing| existing.id != id); + + if size == todos.len() { + Ok(StatusCode::NOT_FOUND) + } else { + Ok(StatusCode::OK) + } + } +} diff --git a/examples/todo-warp/Cargo.toml b/examples/todo-warp/Cargo.toml new file mode 100644 index 0000000..9697ed5 --- /dev/null +++ b/examples/todo-warp/Cargo.toml @@ -0,0 +1,24 @@ +[package] +name = "todo-warp" +description = "Simple warp todo example api with fastapi and fastapi-swagger-ui" +version = "0.1.0" +edition = "2021" +license = "MIT" +authors = [ + "Elli Example " +] + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +tokio = { version = "1", features = ["full"] } +warp = "0.3" +serde = { version = "1.0", features = ["derive"] } +serde_json = "1.0" +env_logger = "0.11.0" +log = "0.4" +futures = "0.3" +fastapi = { path = "../../fastapi" } +fastapi-swagger-ui = { path = "../../fastapi-swagger-ui" } + +[workspace] diff --git a/examples/todo-warp/README.md b/examples/todo-warp/README.md new file mode 100644 index 0000000..428239d --- /dev/null +++ b/examples/todo-warp/README.md @@ -0,0 +1,24 @@ +# todo-warp ~ fastapi with fastapi-swagger-ui example + +This is a demo `warp` application with in-memory storage to manage Todo items. +The API demonstrates `fastapi` with `fastapi-swagger-ui` functionalities. + +This example is more bare minimum compared to `todo-actix`, since similarly same macro syntax is +supported, no matter the framework. + +Purpose of this `warp` demo is to mainly demonstrate how `fastapi` and `fastapi-swagger-ui` can be integrated +with other frameworks as well. + +For security restricted endpoints the super secret API key is: `fastapi-rocks`. + +Just run command below to run the demo application and browse to `http://localhost:8080/swagger-ui/`. + +```bash +cargo run +``` + +If you want to see some logging, you may prepend the command with `RUST_LOG=debug` as shown below. + +```bash +RUST_LOG=debug cargo run +``` diff --git a/examples/todo-warp/src/main.rs b/examples/todo-warp/src/main.rs new file mode 100644 index 0000000..227fa64 --- /dev/null +++ b/examples/todo-warp/src/main.rs @@ -0,0 +1,285 @@ +use std::{net::Ipv4Addr, sync::Arc}; + +use fastapi::{ + openapi::security::{ApiKey, ApiKeyValue, SecurityScheme}, + Modify, OpenApi, +}; +use fastapi_swagger_ui::Config; +use warp::{ + http::Uri, + hyper::{Response, StatusCode}, + path::{FullPath, Tail}, + Filter, Rejection, Reply, +}; + +#[tokio::main] +async fn main() { + env_logger::init(); + + let config = Arc::new(Config::from("/api-doc.json")); + + #[derive(OpenApi)] + #[openapi( + nest( + (path = "/api", api = todo::TodoApi) + ), + modifiers(&SecurityAddon), + tags( + (name = "todo", description = "Todo items management API") + ) + )] + struct ApiDoc; + + struct SecurityAddon; + + impl Modify for SecurityAddon { + fn modify(&self, openapi: &mut fastapi::openapi::OpenApi) { + let components = openapi.components.as_mut().unwrap(); // we can unwrap safely since there already is components registered. + components.add_security_scheme( + "api_key", + SecurityScheme::ApiKey(ApiKey::Header(ApiKeyValue::new("todo_apikey"))), + ) + } + } + + let api_doc = warp::path("api-doc.json") + .and(warp::get()) + .map(|| warp::reply::json(&ApiDoc::openapi())); + + let swagger_ui = warp::path("swagger-ui") + .and(warp::get()) + .and(warp::path::full()) + .and(warp::path::tail()) + .and(warp::any().map(move || config.clone())) + .and_then(serve_swagger); + + warp::serve( + api_doc + .or(swagger_ui) + .or(warp::path("api").and(todo::handlers())), + ) + .run((Ipv4Addr::UNSPECIFIED, 8080)) + .await +} + +async fn serve_swagger( + full_path: FullPath, + tail: Tail, + config: Arc>, +) -> Result, Rejection> { + if full_path.as_str() == "/swagger-ui" { + return Ok(Box::new(warp::redirect::found(Uri::from_static( + "/swagger-ui/", + )))); + } + + let path = tail.as_str(); + match fastapi_swagger_ui::serve(path, config) { + Ok(file) => { + if let Some(file) = file { + Ok(Box::new( + Response::builder() + .header("Content-Type", file.content_type) + .body(file.bytes), + )) + } else { + Ok(Box::new(StatusCode::NOT_FOUND)) + } + } + Err(error) => Ok(Box::new( + Response::builder() + .status(StatusCode::INTERNAL_SERVER_ERROR) + .body(error.to_string()), + )), + } +} + +mod todo { + use std::{ + convert::Infallible, + sync::{Arc, Mutex}, + }; + + use serde::{Deserialize, Serialize}; + use fastapi::{IntoParams, OpenApi, ToSchema}; + use warp::{hyper::StatusCode, Filter, Rejection, Reply}; + + #[derive(OpenApi)] + #[openapi(paths(list_todos, create_todo, delete_todo))] + pub struct TodoApi; + + pub type Store = Arc>>; + + /// Item to complete. + #[derive(Serialize, Deserialize, ToSchema, Clone)] + pub struct Todo { + /// Unique database id. + #[schema(example = 1)] + id: i64, + /// Description of what need to be done. + #[schema(example = "Buy movie tickets")] + value: String, + } + + #[derive(Debug, Deserialize, ToSchema)] + #[serde(rename_all = "snake_case")] + pub enum Order { + AscendingId, + DescendingId, + } + + #[derive(Debug, Deserialize, IntoParams)] + #[into_params(parameter_in = Query)] + pub struct ListQueryParams { + /// Filters the returned `Todo` items according to whether they contain the specified string. + #[param(style = Form, example = json!("task"))] + contains: Option, + /// Order the returned `Todo` items. + #[param(inline)] + order: Option, + } + + pub fn handlers() -> impl Filter + Clone { + let store = Store::default(); + + let list = warp::path("todo") + .and(warp::get()) + .and(warp::path::end()) + .and(with_store(store.clone())) + .and(warp::query::()) + .and_then(list_todos); + + let create = warp::path("todo") + .and(warp::post()) + .and(warp::path::end()) + .and(warp::body::json()) + .and(with_store(store.clone())) + .and_then(create_todo); + + let delete = warp::path!("todo" / i64) + .and(warp::delete()) + .and(warp::path::end()) + .and(with_store(store)) + .and(warp::header::header("todo_apikey")) + .and_then(delete_todo); + + list.or(create).or(delete) + } + + fn with_store(store: Store) -> impl Filter + Clone { + warp::any().map(move || store.clone()) + } + + /// List todos from in-memory storage. + /// + /// List all todos from in-memory storage. + #[fastapi::path( + get, + path = "/todo", + params(ListQueryParams), + responses( + (status = 200, description = "List todos successfully", body = [Todo]) + ) + )] + pub async fn list_todos( + store: Store, + query: ListQueryParams, + ) -> Result { + let todos = store.lock().unwrap(); + + let mut todos: Vec = if let Some(contains) = query.contains { + todos + .iter() + .filter(|todo| todo.value.contains(&contains)) + .cloned() + .collect() + } else { + todos.clone() + }; + + if let Some(order) = query.order { + match order { + Order::AscendingId => { + todos.sort_by_key(|todo| todo.id); + } + Order::DescendingId => { + todos.sort_by_key(|todo| todo.id); + todos.reverse(); + } + } + } + + Ok(warp::reply::json(&todos)) + } + + /// Create new todo item. + /// + /// Creates new todo item to in-memory storage if it is unique by id. + #[fastapi::path( + post, + path = "/todo", + request_body = Todo, + responses( + (status = 200, description = "Todo created successfully", body = Todo), + (status = 409, description = "Todo already exists") + ) + )] + pub async fn create_todo(todo: Todo, store: Store) -> Result, Infallible> { + let mut todos = store.lock().unwrap(); + + if todos + .iter() + .any(|existing_todo| existing_todo.id == todo.id) + { + Ok(Box::new(StatusCode::CONFLICT)) + } else { + todos.push(todo.clone()); + + Ok(Box::new(warp::reply::with_status( + warp::reply::json(&todo), + StatusCode::CREATED, + ))) + } + } + + /// Delete todo item by id. + /// + /// Delete todo item by id from in-memory storage. + #[fastapi::path( + delete, + path = "/todo/{id}", + responses( + (status = 200, description = "Delete successful"), + (status = 400, description = "Missing todo_apikey request header"), + (status = 401, description = "Unauthorized to delete todo"), + (status = 404, description = "Todo not found to delete"), + ), + params( + ("id" = i64, Path, description = "Todo's unique id") + ), + security( + ("api_key" = []) + ) + )] + pub async fn delete_todo( + id: i64, + store: Store, + api_key: String, + ) -> Result { + if api_key != "fastapi-rocks" { + return Ok(StatusCode::UNAUTHORIZED); + } + + let mut todos = store.lock().unwrap(); + + let size = todos.len(); + + todos.retain(|existing| existing.id != id); + + if size == todos.len() { + Ok(StatusCode::NOT_FOUND) + } else { + Ok(StatusCode::OK) + } + } +} diff --git a/examples/warp-multiple-api-docs/Cargo.toml b/examples/warp-multiple-api-docs/Cargo.toml new file mode 100644 index 0000000..92e8f15 --- /dev/null +++ b/examples/warp-multiple-api-docs/Cargo.toml @@ -0,0 +1,24 @@ +[package] +name = "warp-multiple-api-docs" +description = "Simple warp example api with multiple api docs" +version = "0.1.0" +edition = "2021" +license = "MIT" +authors = [ + "Elli Example " +] + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +tokio = { version = "1", features = ["full"] } +warp = "0.3" +serde = { version = "1.0", features = ["derive"] } +serde_json = "1.0" +env_logger = "0.10.0" +log = "0.4" +futures = "0.3" +fastapi = { path = "../../fastapi" } +fastapi-swagger-ui = { path = "../../fastapi-swagger-ui" } + +[workspace] diff --git a/examples/warp-multiple-api-docs/README.md b/examples/warp-multiple-api-docs/README.md new file mode 100644 index 0000000..77bbbc5 --- /dev/null +++ b/examples/warp-multiple-api-docs/README.md @@ -0,0 +1,22 @@ +# warp-multiple-api-docs ~ fastapi with fastapi-swagger-ui example + +This is a demo `warp` application with multiple API docs to demonstrate splitting APIs with `fastapi` and `fastapi-swagger-ui`. + +Just run command below to run the demo application and browse to `http://localhost:8080/swagger-ui/`. + +```bash +cargo run +``` + +On the Swagger-UI will be a drop-down labelled "Select a definition", containing `/api-doc1.json` and `/api-doc2.json`. + +Alternatively, they can be loaded directly using + +- api1: http://localhost:8080/swagger-ui/?urls.primaryName=%2Fapi-doc1.json +- api2: http://localhost:8080/swagger-ui/?urls.primaryName=%2Fapi-doc2.json + +If you want to see some logging, you may prepend the command with `RUST_LOG=debug` as shown below. + +```bash +RUST_LOG=debug cargo run +``` diff --git a/examples/warp-multiple-api-docs/src/main.rs b/examples/warp-multiple-api-docs/src/main.rs new file mode 100644 index 0000000..5e4c3bf --- /dev/null +++ b/examples/warp-multiple-api-docs/src/main.rs @@ -0,0 +1,124 @@ +use std::{net::Ipv4Addr, sync::Arc}; + +use fastapi::OpenApi; +use fastapi_swagger_ui::Config; +use warp::{ + http::Uri, + hyper::{Response, StatusCode}, + path::{FullPath, Tail}, + Filter, Rejection, Reply, +}; + +#[tokio::main] +async fn main() { + env_logger::init(); + + let config = Arc::new(Config::new(["/api-doc1.json", "/api-doc2.json"])); + + #[derive(OpenApi)] + #[openapi(paths(api1::hello1))] + struct ApiDoc1; + + #[derive(OpenApi)] + #[openapi(paths(api2::hello2))] + struct ApiDoc2; + + let api_doc1 = warp::path("api-doc1.json") + .and(warp::get()) + .map(|| warp::reply::json(&ApiDoc1::openapi())); + + let api_doc2 = warp::path("api-doc2.json") + .and(warp::get()) + .map(|| warp::reply::json(&ApiDoc2::openapi())); + + let swagger_ui = warp::path("swagger-ui") + .and(warp::get()) + .and(warp::path::full()) + .and(warp::path::tail()) + .and(warp::any().map(move || config.clone())) + .and_then(serve_swagger); + + let hello1 = warp::path("hello1") + .and(warp::get()) + .and(warp::path::end()) + .and_then(api1::hello1); + + let hello2 = warp::path("hello2") + .and(warp::get()) + .and(warp::path::end()) + .and_then(api2::hello2); + + warp::serve(api_doc1.or(api_doc2).or(swagger_ui).or(hello1).or(hello2)) + .run((Ipv4Addr::UNSPECIFIED, 8080)) + .await +} + +async fn serve_swagger( + full_path: FullPath, + tail: Tail, + config: Arc>, +) -> Result, Rejection> { + if full_path.as_str() == "/swagger-ui" { + return Ok(Box::new(warp::redirect::found(Uri::from_static( + "/swagger-ui/", + )))); + } + + let path = tail.as_str(); + match fastapi_swagger_ui::serve(path, config) { + Ok(file) => { + if let Some(file) = file { + Ok(Box::new( + Response::builder() + .header("Content-Type", file.content_type) + .body(file.bytes), + )) + } else { + Ok(Box::new(StatusCode::NOT_FOUND)) + } + } + Err(error) => Ok(Box::new( + Response::builder() + .status(StatusCode::INTERNAL_SERVER_ERROR) + .body(error.to_string()), + )), + } +} + +mod api1 { + use std::convert::Infallible; + + use warp::{hyper::Response, Reply}; + + #[fastapi::path( + get, + path = "/hello1", + responses( + (status = 200, body = String) + ) + )] + pub async fn hello1() -> Result { + Ok(Response::builder() + .header("content-type", "text/plain") + .body("hello 1")) + } +} + +mod api2 { + use std::convert::Infallible; + + use warp::{hyper::Response, Reply}; + + #[fastapi::path( + get, + path = "/hello2", + responses( + (status = 200, body = String) + ) + )] + pub async fn hello2() -> Result { + Ok(Response::builder() + .header("content-type", "text/plain") + .body("hello 2")) + } +} diff --git a/fastapi-actix-web/Cargo.toml b/fastapi-actix-web/Cargo.toml new file mode 100644 index 0000000..f02b767 --- /dev/null +++ b/fastapi-actix-web/Cargo.toml @@ -0,0 +1,33 @@ +[package] +name = "fastapi-actix-web" +description = "Fastapi's actix-web bindings for seamless integration of the two" +version = "0.1.2" +edition = "2021" +license = "MIT OR Apache-2.0" +readme = "README.md" +keywords = ["fastapi", "actix-web", "bindings"] +repository = "https://github.com/nxpkg/fastapi" +categories = ["web-programming"] +authors = ["Md Sulaiman "] +rust-version.workspace = true + +[dependencies] +fastapi = { path = "../fastapi", version = "0" } +actix-web = { version = "4", default-features = false } +actix-service = "2" + +[dev-dependencies] +fastapi = { path = "../fastapi", version = "0", features = [ + "actix_extras", + "macros", + "debug", +] } +actix-web = { version = "4", default-features = false, features = ["macros"] } +serde = "1" + +[package.metadata.docs.rs] +features = [] +rustdoc-args = ["--cfg", "doc_cfg"] + +[lints.rust] +unexpected_cfgs = { level = "warn", check-cfg = ['cfg(doc_cfg)'] } diff --git a/fastapi-actix-web/LICENSE-APACHE b/fastapi-actix-web/LICENSE-APACHE new file mode 120000 index 0000000..965b606 --- /dev/null +++ b/fastapi-actix-web/LICENSE-APACHE @@ -0,0 +1 @@ +../LICENSE-APACHE \ No newline at end of file diff --git a/fastapi-actix-web/LICENSE-MIT b/fastapi-actix-web/LICENSE-MIT new file mode 120000 index 0000000..76219eb --- /dev/null +++ b/fastapi-actix-web/LICENSE-MIT @@ -0,0 +1 @@ +../LICENSE-MIT \ No newline at end of file diff --git a/fastapi-actix-web/README.md b/fastapi-actix-web/README.md new file mode 100644 index 0000000..4be5735 --- /dev/null +++ b/fastapi-actix-web/README.md @@ -0,0 +1,54 @@ +# fastapi-actix-web - Bindings for Actix Web and fastapi + +[![Fastapi build](https://github.com/nxpkg/fastapi/actions/workflows/build.yaml/badge.svg)](https://github.com/nxpkg/fastapi/actions/workflows/build.yaml) +[![crates.io](https://img.shields.io/crates/v/fastapi-actix-web.svg?label=crates.io&color=orange&logo=rust)](https://crates.io/crates/fastapi-actix-web) +[![docs.rs](https://img.shields.io/static/v1?label=docs.rs&message=fastapi-actix-web&color=blue&logo=data:image/svg+xml;base64,PHN2ZyByb2xlPSJpbWciIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDUxMiA1MTIiPjxwYXRoIGZpbGw9IiNmNWY1ZjUiIGQ9Ik00ODguNiAyNTAuMkwzOTIgMjE0VjEwNS41YzAtMTUtOS4zLTI4LjQtMjMuNC0zMy43bC0xMDAtMzcuNWMtOC4xLTMuMS0xNy4xLTMuMS0yNS4zIDBsLTEwMCAzNy41Yy0xNC4xIDUuMy0yMy40IDE4LjctMjMuNCAzMy43VjIxNGwtOTYuNiAzNi4yQzkuMyAyNTUuNSAwIDI2OC45IDAgMjgzLjlWMzk0YzAgMTMuNiA3LjcgMjYuMSAxOS45IDMyLjJsMTAwIDUwYzEwLjEgNS4xIDIyLjEgNS4xIDMyLjIgMGwxMDMuOS01MiAxMDMuOSA1MmMxMC4xIDUuMSAyMi4xIDUuMSAzMi4yIDBsMTAwLTUwYzEyLjItNi4xIDE5LjktMTguNiAxOS45LTMyLjJWMjgzLjljMC0xNS05LjMtMjguNC0yMy40LTMzLjd6TTM1OCAyMTQuOGwtODUgMzEuOXYtNjguMmw4NS0zN3Y3My4zek0xNTQgMTA0LjFsMTAyLTM4LjIgMTAyIDM4LjJ2LjZsLTEwMiA0MS40LTEwMi00MS40di0uNnptODQgMjkxLjFsLTg1IDQyLjV2LTc5LjFsODUtMzguOHY3NS40em0wLTExMmwtMTAyIDQxLjQtMTAyLTQxLjR2LS42bDEwMi0zOC4yIDEwMiAzOC4ydi42em0yNDAgMTEybC04NSA0Mi41di03OS4xbDg1LTM4Ljh2NzUuNHptMC0xMTJsLTEwMiA0MS40LTEwMi00MS40di0uNmwxMDItMzguMiAxMDIgMzguMnYuNnoiPjwvcGF0aD48L3N2Zz4K)](https://docs.rs/fastapi-actix-web/latest/) +![rustc](https://img.shields.io/static/v1?label=rustc&message=1.75&color=orange&logo=rust) + +This crate implements necessary bindings for automatically collecting `paths` and `schemas` recursively from Actix Web +`App`, `Scope` and `ServiceConfig`. It provides natural API reducing duplication and support for scopes while generating +OpenAPI specification without the need to declare `paths` and `schemas` to `#[openapi(...)]` attribute of `OpenApi` derive. + +Currently only `service(...)` calls supports automatic collection of schemas and paths. Manual routes via `route(...)` or +`Route::new().to(...)` is not supported. + +## Install + +Add dependency declaration to `Cargo.toml`. + +```toml +[dependencies] +fastapi-actix-web = "0.1" +``` + +## Examples + +Collect handlers annotated with `#[fastapi::path]` recursively from `service(...)` calls to compose OpenAPI spec. + +```rust +use actix_web::{get, App}; +use fastapi_actix_web::{scope, AppExt}; + +#[derive(fastapi::ToSchema)] +struct User { + id: i32, +} + +#[fastapi::path(responses((status = OK, body = User)))] +#[get("/user")] +async fn get_user() -> Json { + Json(User { id: 1 }) +} + +let (_, mut api) = App::new() + .into_fastapi_app() + .service(scope::scope("/api/v1").service(get_user)) + .split_for_parts(); +``` + +## License + +Licensed under either of [Apache 2.0](LICENSE-APACHE) or [MIT](LICENSE-MIT) license at your option. + +Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in this crate +by you, shall be dual licensed, without any additional terms or conditions. diff --git a/fastapi-actix-web/src/lib.rs b/fastapi-actix-web/src/lib.rs new file mode 100644 index 0000000..4369d17 --- /dev/null +++ b/fastapi-actix-web/src/lib.rs @@ -0,0 +1,486 @@ +//! This crate implements necessary bindings for automatically collecting `paths` and `schemas` recursively from Actix Web +//! `App`, `Scope` and `ServiceConfig`. It provides natural API reducing duplication and support for scopes while generating +//! OpenAPI specification without the need to declare `paths` and `schemas` to `#[openapi(...)]` attribute of `OpenApi` derive. +//! +//! Currently only `service(...)` calls supports automatic collection of schemas and paths. Manual routes via `route(...)` or +//! `Route::new().to(...)` is not supported. +//! +//! ## Install +//! +//! Add dependency declaration to `Cargo.toml`. +//! +//! ```toml +//! [dependencies] +//! fastapi-actix-web = "0.1" +//! ``` +//! +//! ## Examples +//! +//! _**Collect handlers annotated with `#[fastapi::path]` recursively from `service(...)` calls to compose OpenAPI spec.**_ +//! +//! ```rust +//! use actix_web::web::Json; +//! use actix_web::{get, App}; +//! use fastapi_actix_web::{scope, AppExt}; +//! +//! #[derive(fastapi::ToSchema, serde::Serialize)] +//! struct User { +//! id: i32, +//! } +//! +//! #[fastapi::path(responses((status = OK, body = User)))] +//! #[get("/user")] +//! async fn get_user() -> Json { +//! Json(User { id: 1 }) +//! } +//! +//! let (_, mut api) = App::new() +//! .into_fastapi_app() +//! .service(scope::scope("/api/v1").service(get_user)) +//! .split_for_parts(); +//! ``` + +#![cfg_attr(doc_cfg, feature(doc_cfg))] +#![warn(missing_docs)] +#![warn(rustdoc::broken_intra_doc_links)] + +use core::fmt; +use std::future::Future; + +use actix_service::{IntoServiceFactory, ServiceFactory}; +use actix_web::dev::{HttpServiceFactory, ServiceRequest, ServiceResponse}; +use actix_web::Error; +use fastapi::openapi::PathItem; +use fastapi::OpenApi; + +use self::service_config::ServiceConfig; + +pub mod scope; +pub mod service_config; + +pub use scope::scope; + +/// This trait is used to unify OpenAPI items collection from types implementing this trait. +pub trait OpenApiFactory { + /// Get OpenAPI paths. + fn paths(&self) -> fastapi::openapi::path::Paths; + /// Collect schema reference and append them to the _`schemas`_. + fn schemas( + &self, + schemas: &mut Vec<( + String, + fastapi::openapi::RefOr, + )>, + ); +} + +impl<'t, T: fastapi::Path + fastapi::__dev::SchemaReferences + fastapi::__dev::Tags<'t>> + OpenApiFactory for T +{ + fn paths(&self) -> fastapi::openapi::path::Paths { + let methods = T::methods(); + + methods + .into_iter() + .fold( + fastapi::openapi::path::Paths::builder(), + |mut builder, method| { + let mut operation = T::operation(); + let other_tags = T::tags(); + if !other_tags.is_empty() { + let tags = operation.tags.get_or_insert(Vec::new()); + tags.extend(other_tags.into_iter().map(ToString::to_string)); + }; + + let path_item = PathItem::new(method, operation); + builder = builder.path(T::path(), path_item); + + builder + }, + ) + .build() + } + + fn schemas( + &self, + schemas: &mut Vec<( + String, + fastapi::openapi::RefOr, + )>, + ) { + ::schemas(schemas); + } +} + +/// Extends [`actix_web::App`] with `fastapi` related functionality. +pub trait AppExt { + /// Convert's this [`actix_web::App`] to [`FastapiApp`]. + /// + /// See usage from [`FastapiApp`][struct@FastapiApp] + fn into_fastapi_app(self) -> FastapiApp; +} + +impl AppExt for actix_web::App { + fn into_fastapi_app(self) -> FastapiApp { + FastapiApp::from(self) + } +} + +/// Wrapper type for [`actix_web::App`] and [`fastapi::openapi::OpenApi`]. +/// +/// [`FastapiApp`] behaves exactly same way as [`actix_web::App`] but allows automatic _`schema`_ and +/// _`path`_ collection from `service(...)` calls directly or via [`ServiceConfig::service`]. +/// +/// It exposes typical methods from [`actix_web::App`] and provides custom [`FastapiApp::map`] +/// method to add additional configuration options to wrapper [`actix_web::App`]. +/// +/// This struct need be instantiated from [`actix_web::App`] by calling `.into_fastapi_app()` +/// because we do not have access to _`actix_web::App`_ generic argument and the _`App`_ does +/// not provide any default implementation. +/// +/// # Examples +/// +/// _**Create new [`FastapiApp`] instance.**_ +/// ```rust +/// # use fastapi_actix_web::{AppExt, FastapiApp}; +/// # use actix_web::App; +/// let fastapi_app = App::new().into_fastapi_app(); +/// ``` +/// +/// _**Convert `actix_web::App` to `FastapiApp`.**_ +/// ```rust +/// # use fastapi_actix_web::{AppExt, FastapiApp}; +/// # use actix_web::App; +/// let a: FastapiApp<_> = actix_web::App::new().into(); +/// ``` +pub struct FastapiApp(actix_web::App, fastapi::openapi::OpenApi); + +impl From> for FastapiApp { + fn from(value: actix_web::App) -> Self { + #[derive(OpenApi)] + struct Api; + FastapiApp(value, Api::openapi()) + } +} + +impl FastapiApp +where + T: ServiceFactory, +{ + /// Replace the wrapped [`fastapi::openapi::OpenApi`] with given _`openapi`_. + /// + /// This is useful to prepend OpenAPI doc generated with [`FastapiApp`] + /// with content that cannot be provided directly via [`FastapiApp`]. + /// + /// # Examples + /// + /// _**Replace wrapped [`fastapi::openapi::OpenApi`] with custom one.**_ + /// ```rust + /// # use fastapi_actix_web::{AppExt, FastapiApp}; + /// # use actix_web::App; + /// # use fastapi::OpenApi; + /// #[derive(OpenApi)] + /// #[openapi(info(title = "Api title"))] + /// struct Api; + /// + /// let _ = actix_web::App::new().into_fastapi_app().openapi(Api::openapi()); + /// ``` + pub fn openapi(mut self, openapi: fastapi::openapi::OpenApi) -> Self { + self.1 = openapi; + + self + } + + /// Passthrough implementation for [`actix_web::App::app_data`]. + pub fn app_data(self, data: U) -> Self { + let app = self.0.app_data(data); + Self(app, self.1) + } + + /// Passthrough implementation for [`actix_web::App::data_factory`]. + pub fn data_factory(self, data: F) -> Self + where + F: Fn() -> Out + 'static, + Out: Future> + 'static, + D: 'static, + E: std::fmt::Debug, + { + let app = self.0.data_factory(data); + + Self(app, self.1) + } + + /// Extended version of [`actix_web::App::configure`] which handles _`schema`_ and _`path`_ + /// collection from [`ServiceConfig`] into the wrapped [`fastapi::openapi::OpenApi`] instance. + pub fn configure(self, f: F) -> Self + where + F: FnOnce(&mut ServiceConfig), + { + let mut openapi = self.1; + + let app = self.0.configure(|config| { + let mut service_config = ServiceConfig::new(config); + + f(&mut service_config); + + let paths = service_config.1.take(); + openapi.paths.merge(paths); + let schemas = service_config.2.take(); + let components = openapi + .components + .get_or_insert(fastapi::openapi::Components::new()); + components.schemas.extend(schemas); + }); + + Self(app, openapi) + } + + /// Passthrough implementation for [`actix_web::App::route`]. + pub fn route(self, path: &str, route: actix_web::Route) -> Self { + let app = self.0.route(path, route); + + Self(app, self.1) + } + + /// Extended version of [`actix_web::App::service`] method which handles _`schema`_ and _`path`_ + /// collection from [`HttpServiceFactory`]. + pub fn service(self, factory: F) -> Self + where + F: HttpServiceFactory + OpenApiFactory + 'static, + { + let mut schemas = Vec::<( + String, + fastapi::openapi::RefOr, + )>::new(); + + factory.schemas(&mut schemas); + let paths = factory.paths(); + + let mut openapi = self.1; + + openapi.paths.merge(paths); + let components = openapi + .components + .get_or_insert(fastapi::openapi::Components::new()); + components.schemas.extend(schemas); + + let app = self.0.service(factory); + + Self(app, openapi) + } + + /// Helper method to serve wrapped [`fastapi::openapi::OpenApi`] via [`HttpServiceFactory`]. + /// + /// This method functions as a convenience to serve the wrapped OpenAPI spec alternatively to + /// first call [`FastapiApp::split_for_parts`] and then calling [`actix_web::App::service`]. + pub fn openapi_service(self, factory: F) -> Self + where + F: FnOnce(fastapi::openapi::OpenApi) -> O, + O: HttpServiceFactory + 'static, + { + let service = factory(self.1.clone()); + let app = self.0.service(service); + Self(app, self.1) + } + + /// Passthrough implementation for [`actix_web::App::default_service`]. + pub fn default_service(self, svc: F) -> Self + where + F: IntoServiceFactory, + U: ServiceFactory + + 'static, + U::InitError: fmt::Debug, + { + Self(self.0.default_service(svc), self.1) + } + + /// Passthrough implementation for [`actix_web::App::external_resource`]. + pub fn external_resource(self, name: N, url: U) -> Self + where + N: AsRef, + U: AsRef, + { + Self(self.0.external_resource(name, url), self.1) + } + + /// Convenience method to add custom configuration to [`actix_web::App`] that is not directly + /// exposed via [`FastapiApp`]. This could for example be adding middlewares. + /// + /// # Examples + /// + /// _**Add middleware via `map` method.**_ + /// + /// ```rust + /// # use fastapi_actix_web::{AppExt, FastapiApp}; + /// # use actix_web::App; + /// # use actix_service::Service; + /// # use actix_web::http::header::{HeaderValue, CONTENT_TYPE}; + /// let _ = App::new() + /// .into_fastapi_app() + /// .map(|app| { + /// app.wrap_fn(|req, srv| { + /// let fut = srv.call(req); + /// async { + /// let mut res = fut.await?; + /// res.headers_mut() + /// .insert(CONTENT_TYPE, HeaderValue::from_static("text/plain")); + /// Ok(res) + /// } + /// }) + /// }); + /// ``` + pub fn map< + F: FnOnce(actix_web::App) -> actix_web::App, + NF: ServiceFactory, + >( + self, + op: F, + ) -> FastapiApp { + let app = op(self.0); + FastapiApp(app, self.1) + } + + /// Split this [`FastapiApp`] into parts returning tuple of [`actix_web::App`] and + /// [`fastapi::openapi::OpenApi`] of this instance. + pub fn split_for_parts(self) -> (actix_web::App, fastapi::openapi::OpenApi) { + (self.0, self.1) + } + + /// Converts this [`FastapiApp`] into the wrapped [`actix_web::App`]. + pub fn into_app(self) -> actix_web::App { + self.0 + } +} + +impl From> for actix_web::App { + fn from(value: FastapiApp) -> Self { + value.0 + } +} + +#[cfg(test)] +mod tests { + #![allow(unused)] + + use actix_service::Service; + use actix_web::guard::{Get, Guard}; + use actix_web::http::header::{HeaderValue, CONTENT_TYPE}; + use actix_web::web::{self, Data}; + use actix_web::{get, App, HttpRequest, HttpResponse}; + use fastapi::ToSchema; + + use super::*; + + #[derive(ToSchema)] + struct Value12 { + v: String, + } + + #[derive(ToSchema)] + struct Value2(i32); + + #[derive(ToSchema)] + struct Value1 { + bar: Value2, + } + + #[derive(ToSchema)] + struct ValueValue { + value: i32, + } + + #[fastapi::path(responses( + (status = 200, body = ValueValue) + ))] + #[get("/handler2")] + async fn handler2() -> &'static str { + "this is message 2" + } + + #[fastapi::path(responses( + (status = 200, body = Value12) + ))] + #[get("/handler")] + async fn handler() -> &'static str { + "this is message" + } + + #[fastapi::path(responses( + (status = 200, body = Value1) + ))] + #[get("/handler3")] + async fn handler3() -> &'static str { + "this is message 3" + } + + mod inner { + use actix_web::get; + use actix_web::web::Data; + use fastapi::ToSchema; + + #[derive(ToSchema)] + struct Bar(i32); + + #[derive(ToSchema)] + struct Foobar { + bar: Bar, + } + + #[fastapi::path(responses( + (status = 200, body = Foobar) + ))] + #[get("/inner_handler")] + pub async fn inner_handler(_: Data) -> &'static str { + "this is message" + } + + #[fastapi::path()] + #[get("/inner_handler3")] + pub async fn inner_handler3(_: Data) -> &'static str { + "this is message 3" + } + } + + #[get("/normal_service")] + async fn normal_service() -> &'static str { + "str" + } + + #[test] + fn test_app_generate_correct_openapi() { + fn config(cfg: &mut service_config::ServiceConfig) { + cfg.service(handler3) + .map(|config| config.service(normal_service)); + } + + let (_, mut api) = App::new() + .into_fastapi_app() + .service(handler) + .configure(config) + .service(scope::scope("/path-prefix").service(handler2).map(|scope| { + let s = scope.wrap_fn(|req, srv| { + let fut = srv.call(req); + async { + let mut res = fut.await?; + res.headers_mut() + .insert(CONTENT_TYPE, HeaderValue::from_static("text/plain")); + Ok(res) + } + }); + + s + })) + .service(scope::scope("/api/v1/inner").configure(|cfg| { + cfg.service(inner::inner_handler) + .service(inner::inner_handler3) + .app_data(Data::new(String::new())); + })) + .split_for_parts(); + api.info = fastapi::openapi::info::Info::new("title", "version"); + let json = api.to_pretty_json().expect("OpenAPI is JSON serializable"); + println!("{json}"); + + let expected = include_str!("../testdata/app_generated_openapi"); + assert_eq!(json.trim(), expected.trim()); + } +} diff --git a/fastapi-actix-web/src/scope.rs b/fastapi-actix-web/src/scope.rs new file mode 100644 index 0000000..8263dff --- /dev/null +++ b/fastapi-actix-web/src/scope.rs @@ -0,0 +1,265 @@ +//! Implement `fastapi` extended [`Scope`] for [`actix_web::Scope`]. +//! +//! See usage from [`scope`][fn@scope]. + +use core::fmt; +use std::cell::{Cell, RefCell}; + +use actix_service::{IntoServiceFactory, ServiceFactory, Transform}; +use actix_web::body::MessageBody; +use actix_web::dev::{AppService, HttpServiceFactory, ServiceRequest, ServiceResponse}; +use actix_web::guard::Guard; +use actix_web::{Error, Route}; + +use crate::service_config::ServiceConfig; +use crate::OpenApiFactory; + +/// Wrapper type for [`actix_web::Scope`] and [`fastapi::openapi::OpenApi`] with additional path +/// prefix created with `scope::scope("path-prefix")` call. +/// +/// See usage from [`scope`][fn@scope]. +pub struct Scope( + actix_web::Scope, + RefCell, + Cell, +); + +impl From> for Scope +where + T: ServiceFactory, +{ + fn from(value: actix_web::Scope) -> Self { + Self( + value, + RefCell::new(fastapi::openapi::OpenApiBuilder::new().build()), + Cell::new(String::new()), + ) + } +} + +impl<'s, T: ServiceFactory> + From<&'s str> for Scope +where + Scope: std::convert::From, +{ + fn from(value: &'s str) -> Self { + let scope = actix_web::Scope::new(value); + let s: Scope = scope.into(); + Scope(s.0, s.1, Cell::new(String::from(value))) + } +} + +/// Create a new [`Scope`] with given _`scope`_ e.g. `scope("/api/v1")`. +/// +/// This behaves exactly same way as [`actix_web::Scope`] but allows automatic _`schema`_ and +/// _`path`_ collection from `service(...)` calls directly or via [`ServiceConfig::service`]. +/// +/// # Examples +/// +/// _**Create new scoped service.**_ +/// +/// ```rust +/// # use actix_web::{get, App}; +/// # use fastapi_actix_web::{AppExt, scope}; +/// # +/// #[fastapi::path()] +/// #[get("/handler")] +/// pub async fn handler() -> &'static str { +/// "OK" +/// } +/// let _ = App::new() +/// .into_fastapi_app() +/// .service(scope::scope("/api/v1/inner").configure(|cfg| { +/// cfg.service(handler); +/// })); +/// ``` +pub fn scope< + I: Into>, + T: ServiceFactory, +>( + scope: I, +) -> Scope { + scope.into() +} + +impl Scope +where + T: ServiceFactory, +{ + /// Passthrough implementation for [`actix_web::Scope::guard`]. + pub fn guard(self, guard: G) -> Self { + let scope = self.0.guard(guard); + Self(scope, self.1, self.2) + } + + /// Passthrough implementation for [`actix_web::Scope::app_data`]. + pub fn app_data(self, data: U) -> Self { + Self(self.0.app_data(data), self.1, self.2) + } + + /// Passthrough implementation for [`actix_web::Scope::wrap`]. + pub fn wrap( + self, + middleware: M, + ) -> Scope< + impl ServiceFactory< + ServiceRequest, + Config = (), + Response = ServiceResponse, + Error = Error, + InitError = (), + >, + > + where + M: Transform< + T::Service, + ServiceRequest, + Response = ServiceResponse, + Error = Error, + InitError = (), + > + 'static, + B: MessageBody, + { + let scope = self.0.wrap(middleware); + Scope(scope, self.1, self.2) + } + + /// Synonymous for [`FastapiApp::configure`][fastapi_app_configure] + /// + /// [fastapi_app_configure]: ../struct.FastapiApp.html#method.configure + pub fn configure(self, cfg_fn: F) -> Self + where + F: FnOnce(&mut ServiceConfig), + { + let mut openapi = self.1.borrow_mut(); + + let scope = self.0.configure(|config| { + let mut service_config = ServiceConfig::new(config); + + cfg_fn(&mut service_config); + + let other_paths = service_config.1.take(); + openapi.paths.merge(other_paths); + let schemas = service_config.2.take(); + let components = openapi + .components + .get_or_insert(fastapi::openapi::Components::new()); + components.schemas.extend(schemas); + }); + drop(openapi); + + Self(scope, self.1, self.2) + } + + /// Synonymous for [`FastapiApp::service`][fastapi_app_service] + /// + /// [fastapi_app_service]: ../struct.FastapiApp.html#method.service + pub fn service(self, factory: F) -> Self + where + F: HttpServiceFactory + OpenApiFactory + 'static, + { + let mut schemas = Vec::<( + String, + fastapi::openapi::RefOr, + )>::new(); + { + let mut openapi = self.1.borrow_mut(); + let other_paths = factory.paths(); + factory.schemas(&mut schemas); + openapi.paths.merge(other_paths); + let components = openapi + .components + .get_or_insert(fastapi::openapi::Components::new()); + components.schemas.extend(schemas); + } + + let app = self.0.service(factory); + + Self(app, self.1, self.2) + } + + /// Passthrough implementation for [`actix_web::Scope::route`]. + pub fn route(self, path: &str, route: Route) -> Self { + Self(self.0.route(path, route), self.1, self.2) + } + + /// Passthrough implementation for [`actix_web::Scope::default_service`]. + pub fn default_service(self, f: F) -> Self + where + F: IntoServiceFactory, + U: ServiceFactory< + ServiceRequest, + Config = (), + Response = ServiceResponse, + Error = actix_web::Error, + > + 'static, + U::InitError: fmt::Debug, + { + Self(self.0.default_service(f), self.1, self.2) + } + + /// Synonymous for [`FastapiApp::map`][fastapi_app_map] + /// + /// [fastapi_app_map]: ../struct.FastapiApp.html#method.map + pub fn map< + F: FnOnce(actix_web::Scope) -> actix_web::Scope, + NF: ServiceFactory, + >( + self, + op: F, + ) -> Scope { + let scope = op(self.0); + Scope(scope, self.1, self.2) + } +} + +impl HttpServiceFactory for Scope +where + T: ServiceFactory< + ServiceRequest, + Config = (), + Response = ServiceResponse, + Error = Error, + InitError = (), + > + 'static, + B: MessageBody + 'static, +{ + fn register(self, config: &mut AppService) { + let Scope(scope, ..) = self; + scope.register(config); + } +} + +impl OpenApiFactory for Scope { + fn paths(&self) -> fastapi::openapi::path::Paths { + let prefix = self.2.take(); + let mut openapi = self.1.borrow_mut(); + let mut paths = std::mem::take(&mut openapi.paths); + + let prefixed_paths = paths + .paths + .into_iter() + .map(|(path, item)| { + let path = format!("{prefix}{path}"); + + (path, item) + }) + .collect::>(); + paths.paths = prefixed_paths; + + paths + } + + fn schemas( + &self, + schemas: &mut Vec<( + String, + fastapi::openapi::RefOr, + )>, + ) { + let mut api = self.1.borrow_mut(); + if let Some(components) = &mut api.components { + schemas.extend(std::mem::take(&mut components.schemas)); + } + } +} diff --git a/fastapi-actix-web/src/service_config.rs b/fastapi-actix-web/src/service_config.rs new file mode 100644 index 0000000..ed5f783 --- /dev/null +++ b/fastapi-actix-web/src/service_config.rs @@ -0,0 +1,111 @@ +//! Implement `fastapi` extended [`ServiceConfig`] for [`actix_web::web::ServiceConfig`]. + +use std::cell::Cell; + +use actix_service::{IntoServiceFactory, ServiceFactory}; +use actix_web::dev::{HttpServiceFactory, ServiceRequest, ServiceResponse}; +use actix_web::{Error, Route}; + +use crate::OpenApiFactory; + +/// Wrapper type for [`actix_web::web::ServiceConfig`], [`fastapi::openapi::path::Paths`] and +/// vec of [`fastapi::openapi::schema::Schema`] references. +pub struct ServiceConfig<'s>( + pub(super) &'s mut actix_web::web::ServiceConfig, + pub(super) Cell, + pub(super) Cell< + Vec<( + String, + fastapi::openapi::RefOr, + )>, + >, +); + +impl<'s> ServiceConfig<'s> { + /// Construct a new [`ServiceConfig`] from given [`actix_web::web::ServiceConfig`]. + pub fn new(conf: &'s mut actix_web::web::ServiceConfig) -> ServiceConfig<'s> { + ServiceConfig( + conf, + Cell::new(fastapi::openapi::path::Paths::new()), + Cell::new(Vec::new()), + ) + } + + /// Passthrough implementation for [`actix_web::web::ServiceConfig::app_data`]. + pub fn app_data(&mut self, ext: U) -> &mut Self { + self.0.app_data(ext); + self + } + + /// Passthrough implementation for [`actix_web::web::ServiceConfig::default_service`]. + pub fn default_service(&mut self, f: F) -> &mut Self + where + F: IntoServiceFactory, + U: ServiceFactory + + 'static, + U::InitError: std::fmt::Debug, + { + self.0.default_service(f); + self + } + + /// Passthrough implementation for [`actix_web::web::ServiceConfig::configure`]. + pub fn configure(&mut self, f: F) -> &mut Self + where + F: FnOnce(&mut ServiceConfig), + { + f(self); + self + } + + /// Passthrough implementation for [`actix_web::web::ServiceConfig::route`]. + pub fn route(&mut self, path: &str, route: Route) -> &mut Self { + self.0.route(path, route); + self + } + + /// Counterpart for [`FastapiApp::service`][fastapi_app_service]. + /// + /// [fastapi_app_service]: ../struct.FastapiApp.html#method.service + pub fn service(&mut self, factory: F) -> &mut Self + where + F: HttpServiceFactory + OpenApiFactory + 'static, + { + let mut paths = self.1.take(); + let other_paths = factory.paths(); + paths.merge(other_paths); + + let mut schemas = self.2.take(); + factory.schemas(&mut schemas); + self.2.set(schemas); + + self.0.service(factory); + self.1.set(paths); + + self + } + + /// Passthrough implementation for [`actix_web::web::ServiceConfig::external_resource`]. + pub fn external_resource(&mut self, name: N, url: U) -> &mut Self + where + N: AsRef, + U: AsRef, + { + self.0.external_resource(name, url); + self + } + + /// Synonymous for [`FastapiApp::map`][fastapi_app_map] + /// + /// [fastapi_app_map]: ../struct.FastapiApp.html#method.map + pub fn map< + F: FnOnce(&mut actix_web::web::ServiceConfig) -> &mut actix_web::web::ServiceConfig, + >( + &mut self, + op: F, + ) -> &mut Self { + op(self.0); + + self + } +} diff --git a/fastapi-actix-web/testdata/app_generated_openapi b/fastapi-actix-web/testdata/app_generated_openapi new file mode 100644 index 0000000..16373c6 --- /dev/null +++ b/fastapi-actix-web/testdata/app_generated_openapi @@ -0,0 +1,140 @@ +{ + "openapi": "3.1.0", + "info": { + "title": "title", + "version": "version" + }, + "paths": { + "/api/v1/inner/inner_handler": { + "get": { + "operationId": "inner_handler", + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Foobar" + } + } + } + } + } + } + }, + "/api/v1/inner/inner_handler3": { + "get": { + "operationId": "inner_handler3", + "responses": {} + } + }, + "/handler": { + "get": { + "operationId": "handler", + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Value12" + } + } + } + } + } + } + }, + "/handler3": { + "get": { + "operationId": "handler3", + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Value1" + } + } + } + } + } + } + }, + "/path-prefix/handler2": { + "get": { + "operationId": "handler2", + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValueValue" + } + } + } + } + } + } + } + }, + "components": { + "schemas": { + "Bar": { + "type": "integer", + "format": "int32" + }, + "Foobar": { + "type": "object", + "required": [ + "bar" + ], + "properties": { + "bar": { + "$ref": "#/components/schemas/Bar" + } + } + }, + "Value1": { + "type": "object", + "required": [ + "bar" + ], + "properties": { + "bar": { + "$ref": "#/components/schemas/Value2" + } + } + }, + "Value12": { + "type": "object", + "required": [ + "v" + ], + "properties": { + "v": { + "type": "string" + } + } + }, + "Value2": { + "type": "integer", + "format": "int32" + }, + "ValueValue": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "integer", + "format": "int32" + } + } + } + } + } +} diff --git a/fastapi-axum/Cargo.toml b/fastapi-axum/Cargo.toml new file mode 100644 index 0000000..d39d48b --- /dev/null +++ b/fastapi-axum/Cargo.toml @@ -0,0 +1,36 @@ +[package] +name = "fastapi-axum" +description = "Fastapi's axum bindings for seamless integration for the two" +version = "0.1.2" +edition = "2021" +license = "MIT OR Apache-2.0" +readme = "README.md" +keywords = ["fastapi", "axum", "bindings"] +repository = "https://github.com/nxpkg/fastapi" +categories = ["web-programming"] +authors = ["Md Sulaiman "] +rust-version.workspace = true + +[features] +debug = [] + +[dependencies] +axum = { version = "0.7", default-features = false } +fastapi = { version = "0.1.1", path = "../fastapi", default-features = false, features = [ + "macros", +] } +tower-service = "0.3" +tower-layer = "0.3.2" +paste = "1.0" + +[dev-dependencies] +fastapi = { path = "../fastapi", features = ["debug"] } +axum = { version = "0.7", default-features = false, features = ["json"] } +serde = "1" + +[package.metadata.docs.rs] +features = [] +rustdoc-args = ["--cfg", "doc_cfg"] + +[lints.rust] +unexpected_cfgs = { level = "warn", check-cfg = ['cfg(doc_cfg)'] } diff --git a/fastapi-axum/LICENSE-APACHE b/fastapi-axum/LICENSE-APACHE new file mode 120000 index 0000000..965b606 --- /dev/null +++ b/fastapi-axum/LICENSE-APACHE @@ -0,0 +1 @@ +../LICENSE-APACHE \ No newline at end of file diff --git a/fastapi-axum/LICENSE-MIT b/fastapi-axum/LICENSE-MIT new file mode 120000 index 0000000..76219eb --- /dev/null +++ b/fastapi-axum/LICENSE-MIT @@ -0,0 +1 @@ +../LICENSE-MIT \ No newline at end of file diff --git a/fastapi-axum/README.md b/fastapi-axum/README.md new file mode 100644 index 0000000..5a1e3a0 --- /dev/null +++ b/fastapi-axum/README.md @@ -0,0 +1,52 @@ +# fastapi-axum - Bindings for Axum and fastapi + +[![Fastapi build](https://github.com/nxpkg/fastapi/actions/workflows/build.yaml/badge.svg)](https://github.com/nxpkg/fastapi/actions/workflows/build.yaml) +[![crates.io](https://img.shields.io/crates/v/fastapi-axum.svg?label=crates.io&color=orange&logo=rust)](https://crates.io/crates/fastapi-axum) +[![docs.rs](https://img.shields.io/static/v1?label=docs.rs&message=fastapi-axum&color=blue&logo=data:image/svg+xml;base64,PHN2ZyByb2xlPSJpbWciIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDUxMiA1MTIiPjxwYXRoIGZpbGw9IiNmNWY1ZjUiIGQ9Ik00ODguNiAyNTAuMkwzOTIgMjE0VjEwNS41YzAtMTUtOS4zLTI4LjQtMjMuNC0zMy43bC0xMDAtMzcuNWMtOC4xLTMuMS0xNy4xLTMuMS0yNS4zIDBsLTEwMCAzNy41Yy0xNC4xIDUuMy0yMy40IDE4LjctMjMuNCAzMy43VjIxNGwtOTYuNiAzNi4yQzkuMyAyNTUuNSAwIDI2OC45IDAgMjgzLjlWMzk0YzAgMTMuNiA3LjcgMjYuMSAxOS45IDMyLjJsMTAwIDUwYzEwLjEgNS4xIDIyLjEgNS4xIDMyLjIgMGwxMDMuOS01MiAxMDMuOSA1MmMxMC4xIDUuMSAyMi4xIDUuMSAzMi4yIDBsMTAwLTUwYzEyLjItNi4xIDE5LjktMTguNiAxOS45LTMyLjJWMjgzLjljMC0xNS05LjMtMjguNC0yMy40LTMzLjd6TTM1OCAyMTQuOGwtODUgMzEuOXYtNjguMmw4NS0zN3Y3My4zek0xNTQgMTA0LjFsMTAyLTM4LjIgMTAyIDM4LjJ2LjZsLTEwMiA0MS40LTEwMi00MS40di0uNnptODQgMjkxLjFsLTg1IDQyLjV2LTc5LjFsODUtMzguOHY3NS40em0wLTExMmwtMTAyIDQxLjQtMTAyLTQxLjR2LS42bDEwMi0zOC4yIDEwMiAzOC4ydi42em0yNDAgMTEybC04NSA0Mi41di03OS4xbDg1LTM4Ljh2NzUuNHptMC0xMTJsLTEwMiA0MS40LTEwMi00MS40di0uNmwxMDItMzguMiAxMDIgMzguMnYuNnoiPjwvcGF0aD48L3N2Zz4K)](https://docs.rs/fastapi-axum/latest/) +![rustc](https://img.shields.io/static/v1?label=rustc&message=1.75&color=orange&logo=rust) + +Fastapi axum brings `fastapi` and `axum` closer together by the way of providing an ergonomic API that is extending on +the `axum` API. It gives a natural way to register handlers known to `axum` and also simultaneously generates OpenAPI +specification from the handlers. + +## Crate features + +- **`debug`**: Implement debug traits for types. + +## Install + +Add dependency declaration to `Cargo.toml`. + +```toml +[dependencies] +fastapi-axum = "0.1" +``` + +## Examples + +Use `OpenApiRouter` to collect handlers with `#[fastapi::path]` macro to compose service and form OpenAPI spec. + +```rust +use fastapi_axum::{routes, PathItemExt, router::OpenApiRouter}; + +#[derive(fastapi::ToSchema)] +struct User { + id: i32, +} + +#[fastapi::path(get, path = "/user", responses((status = OK, body = User)))] +async fn get_user() -> Json { + Json(User { id: 1 }) +} + +let (router, api) = OpenApiRouter::new() + .routes(routes!(get_user)) + .split_for_parts(); +``` + +## License + +Licensed under either of [Apache 2.0](LICENSE-APACHE) or [MIT](LICENSE-MIT) license at your option. + +Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in this crate +by you, shall be dual licensed, without any additional terms or conditions. diff --git a/fastapi-axum/src/lib.rs b/fastapi-axum/src/lib.rs new file mode 100644 index 0000000..255b8f3 --- /dev/null +++ b/fastapi-axum/src/lib.rs @@ -0,0 +1,421 @@ +#![cfg_attr(doc_cfg, feature(doc_cfg))] +#![warn(missing_docs)] +#![warn(rustdoc::broken_intra_doc_links)] + +//! Fastapi axum brings `fastapi` and `axum` closer together by the way of providing an ergonomic API that is extending on +//! the `axum` API. It gives a natural way to register handlers known to `axum` and also simultaneously generates OpenAPI +//! specification from the handlers. +//! +//! ## Crate features +//! +//! - **`debug`**: Implement debug traits for types. +//! +//! ## Install +//! +//! Add dependency declaration to `Cargo.toml`. +//! +//! ```toml +//! [dependencies] +//! fastapi-axum = "0.1" +//! ``` +//! +//! ## Examples +//! +//! _**Use [`OpenApiRouter`][router] to collect handlers with _`#[fastapi::path]`_ macro to compose service and form OpenAPI spec.**_ +//! +//! ```rust +//! # use axum::Json; +//! # use fastapi::openapi::OpenApi; +//! # use fastapi_axum::{routes, PathItemExt, router::OpenApiRouter}; +//! #[derive(fastapi::ToSchema, serde::Serialize)] +//! struct User { +//! id: i32, +//! } +//! +//! #[fastapi::path(get, path = "/user", responses((status = OK, body = User)))] +//! async fn get_user() -> Json { +//! Json(User { id: 1 }) +//! } +//! +//! let (router, api): (axum::Router, OpenApi) = OpenApiRouter::new() +//! .routes(routes!(get_user)) +//! .split_for_parts(); +//! ``` +//! +//! [router]: router/struct.OpenApiRouter.html + +pub mod router; + +use axum::routing::MethodFilter; +use fastapi::openapi::HttpMethod; + +/// Extends [`fastapi::openapi::path::PathItem`] by providing conversion methods to convert this +/// path item type to a [`axum::routing::MethodFilter`]. +pub trait PathItemExt { + /// Convert this path item type to a [`axum::routing::MethodFilter`]. + /// + /// Method filter is used with handler registration on [`axum::routing::MethodRouter`]. + fn to_method_filter(&self) -> MethodFilter; +} + +impl PathItemExt for HttpMethod { + fn to_method_filter(&self) -> MethodFilter { + match self { + HttpMethod::Get => MethodFilter::GET, + HttpMethod::Put => MethodFilter::PUT, + HttpMethod::Post => MethodFilter::POST, + HttpMethod::Head => MethodFilter::HEAD, + HttpMethod::Patch => MethodFilter::PATCH, + HttpMethod::Trace => MethodFilter::TRACE, + HttpMethod::Delete => MethodFilter::DELETE, + HttpMethod::Options => MethodFilter::OPTIONS, + } + } +} + +/// re-export paste so users do not need to add the dependency. +#[doc(hidden)] +pub use paste::paste; + +/// Collect axum handlers annotated with [`fastapi::path`] to [`router::FastapiMethodRouter`]. +/// +/// [`routes`] macro will return [`router::FastapiMethodRouter`] which contains an +/// [`axum::routing::MethodRouter`] and currently registered paths. The output of this macro is +/// meant to be used together with [`router::OpenApiRouter`] which combines the paths and axum +/// routers to a single entity. +/// +/// Only handlers collected with [`routes`] macro will get registered to the OpenApi. +/// +/// # Panics +/// +/// Routes registered via [`routes`] macro or via `axum::routing::*` operations are bound to same +/// rules where only one one HTTP method can can be registered once per call. This means that the +/// following will produce runtime panic from axum code. +/// +/// ```rust,no_run +/// # use fastapi_axum::{routes, router::FastapiMethodRouter}; +/// # use fastapi::path; +/// #[fastapi::path(get, path = "/search")] +/// async fn search_user() {} +/// +/// #[fastapi::path(get, path = "")] +/// async fn get_user() {} +/// +/// let _: FastapiMethodRouter = routes!(get_user, search_user); +/// ``` +/// Since the _`axum`_ does not support method filter for `CONNECT` requests, using this macro with +/// handler having request method type `CONNECT` `#[fastapi::path(connect, path = "")]` will panic at +/// runtime. +/// +/// # Examples +/// +/// _**Create new `OpenApiRouter` with `get_user` and `post_user` paths.**_ +/// ```rust +/// # use fastapi_axum::{routes, router::{OpenApiRouter, FastapiMethodRouter}}; +/// # use fastapi::path; +/// #[fastapi::path(get, path = "")] +/// async fn get_user() {} +/// +/// #[fastapi::path(post, path = "")] +/// async fn post_user() {} +/// +/// let _: OpenApiRouter = OpenApiRouter::new().routes(routes!(get_user, post_user)); +/// ``` +#[macro_export] +macro_rules! routes { + ( $handler:path $(, $tail:path)* ) => { + { + use $crate::PathItemExt; + let mut paths = fastapi::openapi::path::Paths::new(); + let mut schemas = Vec::<(String, fastapi::openapi::RefOr)>::new(); + let (path, item, types) = $crate::routes!(@resolve_types $handler : schemas); + #[allow(unused_mut)] + let mut method_router = types.iter().by_ref().fold(axum::routing::MethodRouter::new(), |router, path_type| { + router.on(path_type.to_method_filter(), $handler) + }); + paths.add_path_operation(&path, types, item); + $( method_router = $crate::routes!( schemas: method_router: paths: $tail ); )* + (schemas, paths, method_router) + } + }; + ( $schemas:tt: $router:ident: $paths:ident: $handler:path $(, $tail:tt)* ) => { + { + let (path, item, types) = $crate::routes!(@resolve_types $handler : $schemas); + let router = types.iter().by_ref().fold($router, |router, path_type| { + router.on(path_type.to_method_filter(), $handler) + }); + $paths.add_path_operation(&path, types, item); + router + } + }; + ( @resolve_types $handler:path : $schemas:tt ) => { + { + $crate::paste! { + let path = $crate::routes!( @path [path()] of $handler ); + let mut operation = $crate::routes!( @path [operation()] of $handler ); + let types = $crate::routes!( @path [methods()] of $handler ); + let tags = $crate::routes!( @path [tags()] of $handler ); + $crate::routes!( @path [schemas(&mut $schemas)] of $handler ); + if !tags.is_empty() { + let operation_tags = operation.tags.get_or_insert(Vec::new()); + operation_tags.extend(tags.iter().map(ToString::to_string)); + } + (path, operation, types) + } + } + }; + ( @path $op:tt of $part:ident $( :: $tt:tt )* ) => { + $crate::routes!( $op : [ $part $( $tt )*] ) + }; + ( $op:tt : [ $first:tt $( $rest:tt )* ] $( $rev:tt )* ) => { + $crate::routes!( $op : [ $( $rest )* ] $first $( $rev)* ) + }; + ( $op:tt : [] $first:tt $( $rest:tt )* ) => { + $crate::routes!( @inverse $op : $first $( $rest )* ) + }; + ( @inverse $op:tt : $tt:tt $( $rest:tt )* ) => { + $crate::routes!( @rev $op : $tt [$($rest)*] ) + }; + ( @rev $op:tt : $tt:tt [ $first:tt $( $rest:tt)* ] $( $reversed:tt )* ) => { + $crate::routes!( @rev $op : $tt [ $( $rest )* ] $first $( $reversed )* ) + }; + ( @rev [$op:ident $( $args:tt )* ] : $handler:tt [] $($tt:tt)* ) => { + { + #[allow(unused_imports)] + use fastapi::{Path, __dev::{Tags, SchemaReferences}}; + $crate::paste! { + $( $tt :: )* [<__path_ $handler>]::$op $( $args )* + } + } + }; + ( ) => {}; +} + +#[cfg(test)] +mod tests { + use std::collections::BTreeMap; + + use super::*; + use axum::extract::State; + use fastapi::openapi::{Content, Ref, ResponseBuilder}; + use fastapi::PartialSchema; + use router::*; + + #[fastapi::path(get, path = "/")] + async fn root() {} + + // --- user + + #[fastapi::path(get, path = "/")] + async fn get_user() {} + + #[fastapi::path(post, path = "/")] + async fn post_user() {} + + #[fastapi::path(delete, path = "/")] + async fn delete_user() {} + + #[fastapi::path(get, path = "/search")] + async fn search_user() {} + + // --- customer + + #[fastapi::path(get, path = "/")] + async fn get_customer() {} + + #[fastapi::path(post, path = "/")] + async fn post_customer() {} + + #[fastapi::path(delete, path = "/")] + async fn delete_customer() {} + + // test that with state handler compiles + #[fastapi::path(get, path = "/search")] + async fn search_customer(State(_s): State) {} + + #[test] + fn axum_router_nest_openapi_routes_compile() { + let user_router: OpenApiRouter = OpenApiRouter::new() + .routes(routes!(search_user)) + .routes(routes!(get_user, post_user, delete_user)); + + let customer_router: OpenApiRouter = OpenApiRouter::new() + .routes(routes!(get_customer, post_customer, delete_customer)) + .routes(routes!(search_customer)) + .with_state(String::new()); + + let router = OpenApiRouter::new() + .nest("/api/user", user_router) + .nest("/api/customer", customer_router) + .route("/", axum::routing::get(root)); + + let _ = router.get_openapi(); + } + + #[test] + fn openapi_router_with_openapi() { + use fastapi::OpenApi; + + #[derive(fastapi::ToSchema)] + #[allow(unused)] + struct Todo { + id: i32, + } + #[derive(fastapi::OpenApi)] + #[openapi(components(schemas(Todo)))] + struct Api; + + let mut router: OpenApiRouter = OpenApiRouter::with_openapi(Api::openapi()) + .routes(routes!(search_user)) + .routes(routes!(get_user)); + + let paths = router.to_openapi().paths; + let expected_paths = fastapi::openapi::path::PathsBuilder::new() + .path( + "/", + fastapi::openapi::PathItem::new( + fastapi::openapi::path::HttpMethod::Get, + fastapi::openapi::path::OperationBuilder::new().operation_id(Some("get_user")), + ), + ) + .path( + "/search", + fastapi::openapi::PathItem::new( + fastapi::openapi::path::HttpMethod::Get, + fastapi::openapi::path::OperationBuilder::new() + .operation_id(Some("search_user")), + ), + ); + assert_eq!(expected_paths.build(), paths); + } + + #[test] + fn openapi_router_nest_openapi() { + use fastapi::OpenApi; + + #[derive(fastapi::ToSchema)] + #[allow(unused)] + struct Todo { + id: i32, + } + #[derive(fastapi::OpenApi)] + #[openapi(components(schemas(Todo)))] + struct Api; + + let router: router::OpenApiRouter = + router::OpenApiRouter::with_openapi(Api::openapi()).routes(routes!(search_user)); + + let customer_router: router::OpenApiRouter = router::OpenApiRouter::new() + .routes(routes!(get_customer)) + .with_state(String::new()); + + let mut router = router.nest("/api/customer", customer_router); + let paths = router.to_openapi().paths; + let expected_paths = fastapi::openapi::path::PathsBuilder::new() + .path( + "/api/customer", + fastapi::openapi::PathItem::new( + fastapi::openapi::path::HttpMethod::Get, + fastapi::openapi::path::OperationBuilder::new() + .operation_id(Some("get_customer")), + ), + ) + .path( + "/search", + fastapi::openapi::PathItem::new( + fastapi::openapi::path::HttpMethod::Get, + fastapi::openapi::path::OperationBuilder::new() + .operation_id(Some("search_user")), + ), + ); + assert_eq!(expected_paths.build(), paths); + } + + #[test] + fn openapi_with_auto_collected_schemas() { + #[derive(fastapi::ToSchema)] + #[allow(unused)] + struct Todo { + id: i32, + } + + #[fastapi::path(get, path = "/todo", responses((status = 200, body = Todo)))] + async fn get_todo() {} + + let mut router: router::OpenApiRouter = + router::OpenApiRouter::new().routes(routes!(get_todo)); + + let openapi = router.to_openapi(); + let paths = openapi.paths; + let schemas = openapi + .components + .expect("Router must have auto collected schemas") + .schemas; + + let expected_paths = fastapi::openapi::path::PathsBuilder::new().path( + "/todo", + fastapi::openapi::PathItem::new( + fastapi::openapi::path::HttpMethod::Get, + fastapi::openapi::path::OperationBuilder::new() + .operation_id(Some("get_todo")) + .response( + "200", + ResponseBuilder::new().content( + "application/json", + Content::builder() + .schema(Some(Ref::from_schema_name("Todo"))) + .build(), + ), + ), + ), + ); + let expected_schemas = + BTreeMap::from_iter(std::iter::once(("Todo".to_string(), Todo::schema()))); + assert_eq!(expected_paths.build(), paths); + assert_eq!(expected_schemas, schemas); + } + + mod pets { + + #[fastapi::path(get, path = "/")] + pub async fn get_pet() {} + + #[fastapi::path(post, path = "/")] + pub async fn post_pet() {} + + #[fastapi::path(delete, path = "/")] + pub async fn delete_pet() {} + } + + #[test] + fn openapi_routes_from_another_path() { + let mut router: OpenApiRouter = + OpenApiRouter::new().routes(routes!(pets::get_pet, pets::post_pet, pets::delete_pet)); + let paths = router.to_openapi().paths; + + let expected_paths = fastapi::openapi::path::PathsBuilder::new() + .path( + "/", + fastapi::openapi::PathItem::new( + fastapi::openapi::path::HttpMethod::Get, + fastapi::openapi::path::OperationBuilder::new().operation_id(Some("get_pet")), + ), + ) + .path( + "/", + fastapi::openapi::PathItem::new( + fastapi::openapi::path::HttpMethod::Post, + fastapi::openapi::path::OperationBuilder::new().operation_id(Some("post_pet")), + ), + ) + .path( + "/", + fastapi::openapi::PathItem::new( + fastapi::openapi::path::HttpMethod::Delete, + fastapi::openapi::path::OperationBuilder::new() + .operation_id(Some("delete_pet")), + ), + ); + assert_eq!(expected_paths.build(), paths); + } +} diff --git a/fastapi-axum/src/router.rs b/fastapi-axum/src/router.rs new file mode 100644 index 0000000..c67fc61 --- /dev/null +++ b/fastapi-axum/src/router.rs @@ -0,0 +1,432 @@ +//! Implements Router for composing handlers and collecting OpenAPI information. +use std::borrow::Cow; +use std::convert::Infallible; + +use axum::extract::Request; +use axum::handler::Handler; +use axum::response::IntoResponse; +use axum::routing::{MethodRouter, Route, RouterAsService}; +use axum::Router; +use tower_layer::Layer; +use tower_service::Service; + +#[inline] +fn colonized_params>(path: S) -> String +where + String: From, +{ + String::from(path).replace('}', "").replace('{', ":") +} + +#[inline] +fn path_template>(path: S) -> String { + path.as_ref() + .split('/') + .map(|segment| { + if !segment.is_empty() && segment[0..1] == *":" { + Cow::Owned(format!("{{{}}}", &segment[1..])) + } else { + Cow::Borrowed(segment) + } + }) + .collect::>() + .join("/") +} + +/// Wrapper type for [`fastapi::openapi::path::Paths`] and [`axum::routing::MethodRouter`]. +/// +/// This is used with [`OpenApiRouter::routes`] method to register current _`paths`_ to the +/// [`fastapi::openapi::OpenApi`] of [`OpenApiRouter`] instance. +/// +/// See [`routes`][routes] for usage. +/// +/// [routes]: ../macro.routes.html +pub type FastapiMethodRouter = ( + Vec<( + String, + fastapi::openapi::RefOr, + )>, + fastapi::openapi::path::Paths, + axum::routing::MethodRouter, +); + +/// Extension trait for [`FastapiMethodRouter`] to expose typically used methods of +/// [`axum::routing::MethodRouter`] and to extend [`FastapiMethodRouter`] with useful convenience +/// methods. +pub trait FastapiMethodRouterExt +where + S: Send + Sync + Clone + 'static, +{ + /// Pass through method for [`axum::routing::MethodRouter::layer`]. + /// + /// This method is provided as convenience for defining layers to [`axum::routing::MethodRouter`] + /// routes. + fn layer(self, layer: L) -> FastapiMethodRouter + where + L: Layer> + Clone + Send + 'static, + L::Service: Service + Clone + Send + 'static, + >::Response: IntoResponse + 'static, + >::Error: Into + 'static, + >::Future: Send + 'static, + E: 'static, + S: 'static, + NewError: 'static; + + /// Pass through method for [`axum::routing::MethodRouter::with_state`]. + /// + /// Allows quick state definition for underlying [`axum::routing::MethodRouter`]. + fn with_state(self, state: S) -> FastapiMethodRouter; + + /// Convenience method that allows custom mapping for [`axum::routing::MethodRouter`] via + /// methods that not exposed directly through [`FastapiMethodRouterExt`]. + /// + /// This method could be used to add layers, route layers or fallback handlers for the method + /// router. + /// ```rust + /// # use fastapi_axum::{routes, router::{FastapiMethodRouter, FastapiMethodRouterExt}}; + /// # #[fastapi::path(get, path = "")] + /// # async fn search_user() {} + /// let _: FastapiMethodRouter = routes!(search_user).map(|method_router| { + /// // .. implementation here + /// method_router + /// }); + /// ``` + fn map( + self, + op: impl FnOnce(MethodRouter) -> MethodRouter, + ) -> FastapiMethodRouter; +} + +impl FastapiMethodRouterExt for FastapiMethodRouter +where + S: Send + Sync + Clone + 'static, +{ + fn layer(self, layer: L) -> FastapiMethodRouter + where + L: Layer> + Clone + Send + 'static, + L::Service: Service + Clone + Send + 'static, + >::Response: IntoResponse + 'static, + >::Error: Into + 'static, + >::Future: Send + 'static, + E: 'static, + S: 'static, + NewError: 'static, + { + (self.0, self.1, self.2.layer(layer)) + } + + fn with_state(self, state: S) -> FastapiMethodRouter { + (self.0, self.1, self.2.with_state(state)) + } + + fn map( + self, + op: impl FnOnce(MethodRouter) -> MethodRouter, + ) -> FastapiMethodRouter { + (self.0, self.1, op(self.2)) + } +} + +/// A wrapper struct for [`axum::Router`] and [`fastapi::openapi::OpenApi`] for composing handlers +/// and services with collecting OpenAPI information from the handlers. +/// +/// This struct provides pass through implementation for most of the [`axum::Router`] methods and +/// extends capabilities for few to collect the OpenAPI information. Methods that are not +/// implemented can be easily called after converting this router to [`axum::Router`] by +/// [`Into::into`]. +/// +/// # Examples +/// +/// _**Create new [`OpenApiRouter`] with default values populated from cargo environment variables.**_ +/// ```rust +/// # use fastapi_axum::router::OpenApiRouter; +/// let _: OpenApiRouter = OpenApiRouter::new(); +/// ``` +/// +/// _**Instantiate a new [`OpenApiRouter`] with new empty [`fastapi::openapi::OpenApi`].**_ +/// ```rust +/// # use fastapi_axum::router::OpenApiRouter; +/// let _: OpenApiRouter = OpenApiRouter::default(); +/// ``` +#[derive(Clone)] +#[cfg_attr(feature = "debug", derive(Debug))] +pub struct OpenApiRouter(Router, fastapi::openapi::OpenApi); + +impl OpenApiRouter +where + S: Send + Sync + Clone + 'static, +{ + /// Instantiate a new [`OpenApiRouter`] with default values populated from cargo environment + /// variables. This creates an `OpenApi` similar of creating a new `OpenApi` via + /// `#[derive(OpenApi)]` + /// + /// If you want to create [`OpenApiRouter`] with completely empty [`fastapi::openapi::OpenApi`] + /// instance, use [`OpenApiRouter::default()`]. + pub fn new() -> OpenApiRouter { + use fastapi::OpenApi; + #[derive(OpenApi)] + struct Api; + + Self::with_openapi(Api::openapi()) + } + + /// Instantiates a new [`OpenApiRouter`] with given _`openapi`_ instance. + /// + /// This function allows using existing [`fastapi::openapi::OpenApi`] as source for this router. + /// + /// # Examples + /// + /// _**Use derived [`fastapi::openapi::OpenApi`] as source for [`OpenApiRouter`].**_ + /// ```rust + /// # use fastapi::OpenApi; + /// # use fastapi_axum::router::OpenApiRouter; + /// #[derive(fastapi::ToSchema)] + /// struct Todo { + /// id: i32, + /// } + /// #[derive(fastapi::OpenApi)] + /// #[openapi(components(schemas(Todo)))] + /// struct Api; + /// + /// let mut router: OpenApiRouter = OpenApiRouter::with_openapi(Api::openapi()); + /// ``` + pub fn with_openapi(openapi: fastapi::openapi::OpenApi) -> Self { + Self(Router::new(), openapi) + } + + /// Pass through method for [`axum::Router::as_service`]. + pub fn as_service(&mut self) -> RouterAsService<'_, B, S> { + self.0.as_service() + } + + /// Pass through method for [`axum::Router::fallback`]. + pub fn fallback(self, handler: H) -> Self + where + H: Handler, + T: 'static, + { + Self(self.0.fallback(handler), self.1) + } + + /// Pass through method for [`axum::Router::fallback_service`]. + pub fn fallback_service(self, service: T) -> Self + where + T: Service + Clone + Send + 'static, + T::Response: IntoResponse, + T::Future: Send + 'static, + { + Self(self.0.fallback_service(service), self.1) + } + + /// Pass through method for [`axum::Router::layer`]. + pub fn layer(self, layer: L) -> Self + where + L: Layer + Clone + Send + 'static, + L::Service: Service + Clone + Send + 'static, + >::Response: IntoResponse + 'static, + >::Error: Into + 'static, + >::Future: Send + 'static, + { + Self(self.0.layer(layer), self.1) + } + + /// Register [`FastapiMethodRouter`] content created with [`routes`][routes] macro to `self`. + /// + /// Paths of the [`FastapiMethodRouter`] will be extended to [`fastapi::openapi::OpenApi`] and + /// [`axum::routing::MethodRouter`] will be added to the [`axum::Router`]. + /// + /// [routes]: ../macro.routes.html + pub fn routes(mut self, (schemas, mut paths, method_router): FastapiMethodRouter) -> Self { + let router = if paths.paths.len() == 1 { + let first_entry = &paths.paths.first_entry(); + let path = first_entry.as_ref().map(|path| path.key()); + let Some(path) = path else { + unreachable!("Whoopsie, I thought there was one Path entry"); + }; + let path = if path.is_empty() { "/" } else { path }; + + self.0.route(&colonized_params(path), method_router) + } else { + paths.paths.iter().fold(self.0, |this, (path, _)| { + let path = if path.is_empty() { "/" } else { path }; + this.route(&colonized_params(path), method_router.clone()) + }) + }; + + // add or merge current paths to the OpenApi + for (path, item) in paths.paths { + if let Some(it) = self.1.paths.paths.get_mut(&path) { + it.merge_operations(item); + } else { + self.1.paths.paths.insert(path, item); + } + } + + let components = self + .1 + .components + .get_or_insert(fastapi::openapi::Components::new()); + components.schemas.extend(schemas); + + Self(router, self.1) + } + + /// Pass through method for [`axum::Router::route`]. + pub fn route(self, path: &str, method_router: MethodRouter) -> Self { + Self(self.0.route(&colonized_params(path), method_router), self.1) + } + + /// Pass through method for [`axum::Router::route_layer`]. + pub fn route_layer(self, layer: L) -> Self + where + L: Layer + Clone + Send + 'static, + L::Service: Service + Clone + Send + 'static, + >::Response: IntoResponse + 'static, + >::Error: Into + 'static, + >::Future: Send + 'static, + { + Self(self.0.route_layer(layer), self.1) + } + + /// Pass through method for [`axum::Router::route_service`]. + pub fn route_service(self, path: &str, service: T) -> Self + where + T: Service + Clone + Send + 'static, + T::Response: IntoResponse, + T::Future: Send + 'static, + { + Self(self.0.route_service(path, service), self.1) + } + + /// Nest `router` to `self` under given `path`. Router routes will be nested with + /// [`axum::Router::nest`]. + /// + /// This method expects [`OpenApiRouter`] instance in order to nest OpenApi paths and router + /// routes. If you wish to use [`axum::Router::nest`] you need to first convert this instance + /// to [`axum::Router`] _(`let _: Router = OpenApiRouter::new().into()`)_. + /// + /// # Examples + /// + /// _**Nest two routers.**_ + /// ```rust + /// # use fastapi_axum::{routes, PathItemExt, router::OpenApiRouter}; + /// #[fastapi::path(get, path = "/search")] + /// async fn search() {} + /// + /// let search_router = OpenApiRouter::new() + /// .routes(fastapi_axum::routes!(search)); + /// + /// let router: OpenApiRouter = OpenApiRouter::new() + /// .nest("/api", search_router); + /// ``` + pub fn nest(self, path: &str, router: OpenApiRouter) -> Self { + // from axum::routing::path_router::path_for_nested_route + // method is private, so we need to replicate it here + fn path_for_nested_route<'a>(prefix: &'a str, path: &'a str) -> String { + debug_assert!(prefix.starts_with('/')); + debug_assert!(path.starts_with('/')); + + if prefix.ends_with('/') { + format!("{prefix}{}", path.trim_start_matches('/')).into() + } else if path == "/" { + prefix.into() + } else { + format!("{prefix}{path}").into() + } + } + + let api = self.1.nest_with_path_composer( + path_for_nested_route(path, "/"), + router.1, + |a: &str, b: &str| path_for_nested_route(a, b), + ); + let router = self.0.nest(&colonized_params(path), router.0); + + Self(router, api) + } + + /// Pass through method for [`axum::Router::nest_service`]. _**This does nothing for OpenApi paths.**_ + pub fn nest_service(self, path: &str, service: T) -> Self + where + T: Service + Clone + Send + 'static, + T::Response: IntoResponse, + T::Future: Send + 'static, + { + Self(self.0.nest_service(path, service), self.1) + } + + /// Merge [`fastapi::openapi::path::Paths`] from `router` to `self` and merge [`Router`] routes + /// and fallback with [`axum::Router::merge`]. + /// + /// This method expects [`OpenApiRouter`] instance in order to merge OpenApi paths and router + /// routes. If you wish to use [`axum::Router::merge`] you need to first convert this instance + /// to [`axum::Router`] _(`let _: Router = OpenApiRouter::new().into()`)_. + /// + /// # Examples + /// + /// _**Merge two routers.**_ + /// ```rust + /// # use fastapi_axum::{routes, PathItemExt, router::OpenApiRouter}; + /// #[fastapi::path(get, path = "/search")] + /// async fn search() {} + /// + /// let search_router = OpenApiRouter::new() + /// .routes(fastapi_axum::routes!(search)); + /// + /// let router: OpenApiRouter = OpenApiRouter::new() + /// .merge(search_router); + /// ``` + pub fn merge(mut self, router: OpenApiRouter) -> Self { + self.1.merge(router.1); + + Self(self.0.merge(router.0), self.1) + } + + /// Pass through method for [`axum::Router::with_state`]. + pub fn with_state(self, state: S) -> OpenApiRouter { + OpenApiRouter(self.0.with_state(state), self.1) + } + + /// Consume `self` returning the [`fastapi::openapi::OpenApi`] instance of the + /// [`OpenApiRouter`]. + pub fn into_openapi(self) -> fastapi::openapi::OpenApi { + self.1 + } + + /// Take the [`fastapi::openapi::OpenApi`] instance without consuming the [`OpenApiRouter`]. + pub fn to_openapi(&mut self) -> fastapi::openapi::OpenApi { + std::mem::take(&mut self.1) + } + + /// Get reference to the [`fastapi::openapi::OpenApi`] instance of the router. + pub fn get_openapi(&self) -> &fastapi::openapi::OpenApi { + &self.1 + } + + /// Split the content of the [`OpenApiRouter`] to parts. Method will return a tuple of + /// inner [`axum::Router`] and [`fastapi::openapi::OpenApi`]. + pub fn split_for_parts(self) -> (axum::Router, fastapi::openapi::OpenApi) { + (self.0, self.1) + } +} + +impl Default for OpenApiRouter +where + S: Send + Sync + Clone + 'static, +{ + fn default() -> Self { + Self::with_openapi(fastapi::openapi::OpenApiBuilder::new().build()) + } +} + +impl From> for Router { + fn from(value: OpenApiRouter) -> Self { + value.0 + } +} + +impl From> for OpenApiRouter { + fn from(value: Router) -> Self { + OpenApiRouter(value, fastapi::openapi::OpenApiBuilder::new().build()) + } +} diff --git a/fastapi-config/Cargo.toml b/fastapi-config/Cargo.toml new file mode 100644 index 0000000..73b55b8 --- /dev/null +++ b/fastapi-config/Cargo.toml @@ -0,0 +1,23 @@ +[package] +name = "fastapi-config" +description = "Config for controlling fastapi's various aspects" +version = "0.1.2" +edition = "2021" +license = "MIT OR Apache-2.0" +readme = "README.md" +keywords = ["fastapi", "config", "fastapi-gen", "openapi", "auto-generate"] +repository = "https://github.com/nxpkg/fastapi" +categories = ["web-programming"] +authors = ["Md Sulaiman "] +rust-version.workspace = true + +[dependencies] +serde = { version = "1.0", features = ["derive"] } +serde_json = { version = "1.0" } + +[package.metadata.docs.rs] +features = [] +rustdoc-args = ["--cfg", "doc_cfg"] + +[lints.rust] +unexpected_cfgs = { level = "warn", check-cfg = ['cfg(doc_cfg)'] } diff --git a/fastapi-config/LICENSE-APACHE b/fastapi-config/LICENSE-APACHE new file mode 120000 index 0000000..965b606 --- /dev/null +++ b/fastapi-config/LICENSE-APACHE @@ -0,0 +1 @@ +../LICENSE-APACHE \ No newline at end of file diff --git a/fastapi-config/LICENSE-MIT b/fastapi-config/LICENSE-MIT new file mode 120000 index 0000000..76219eb --- /dev/null +++ b/fastapi-config/LICENSE-MIT @@ -0,0 +1 @@ +../LICENSE-MIT \ No newline at end of file diff --git a/fastapi-config/README.md b/fastapi-config/README.md new file mode 100644 index 0000000..72576f3 --- /dev/null +++ b/fastapi-config/README.md @@ -0,0 +1,54 @@ +# fastapi-config + +[![Fastapi build](https://github.com/nxpkg/fastapi/actions/workflows/build.yaml/badge.svg)](https://github.com/nxpkg/fastapi/actions/workflows/build.yaml) +[![crates.io](https://img.shields.io/crates/v/fastapi-config.svg?label=crates.io&color=orange&logo=rust)](https://crates.io/crates/fastapi-config) +[![docs.rs](https://img.shields.io/static/v1?label=docs.rs&message=fastapi-config&color=blue&logo=data:image/svg+xml;base64,PHN2ZyByb2xlPSJpbWciIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDUxMiA1MTIiPjxwYXRoIGZpbGw9IiNmNWY1ZjUiIGQ9Ik00ODguNiAyNTAuMkwzOTIgMjE0VjEwNS41YzAtMTUtOS4zLTI4LjQtMjMuNC0zMy43bC0xMDAtMzcuNWMtOC4xLTMuMS0xNy4xLTMuMS0yNS4zIDBsLTEwMCAzNy41Yy0xNC4xIDUuMy0yMy40IDE4LjctMjMuNCAzMy43VjIxNGwtOTYuNiAzNi4yQzkuMyAyNTUuNSAwIDI2OC45IDAgMjgzLjlWMzk0YzAgMTMuNiA3LjcgMjYuMSAxOS45IDMyLjJsMTAwIDUwYzEwLjEgNS4xIDIyLjEgNS4xIDMyLjIgMGwxMDMuOS01MiAxMDMuOSA1MmMxMC4xIDUuMSAyMi4xIDUuMSAzMi4yIDBsMTAwLTUwYzEyLjItNi4xIDE5LjktMTguNiAxOS45LTMyLjJWMjgzLjljMC0xNS05LjMtMjguNC0yMy40LTMzLjd6TTM1OCAyMTQuOGwtODUgMzEuOXYtNjguMmw4NS0zN3Y3My4zek0xNTQgMTA0LjFsMTAyLTM4LjIgMTAyIDM4LjJ2LjZsLTEwMiA0MS40LTEwMi00MS40di0uNnptODQgMjkxLjFsLTg1IDQyLjV2LTc5LjFsODUtMzguOHY3NS40em0wLTExMmwtMTAyIDQxLjQtMTAyLTQxLjR2LS42bDEwMi0zOC4yIDEwMiAzOC4ydi42em0yNDAgMTEybC04NSA0Mi41di03OS4xbDg1LTM4Ljh2NzUuNHptMC0xMTJsLTEwMiA0MS40LTEwMi00MS40di0uNmwxMDItMzguMiAxMDIgMzguMnYuNnoiPjwvcGF0aD48L3N2Zz4K)](https://docs.rs/fastapi-config/latest/) +![rustc](https://img.shields.io/static/v1?label=rustc&message=1.75&color=orange&logo=rust) + +This crate provides global configuration capabilities for `fastapi`. + +## Config options + +* Define rust type aliases for `fastapi` with `.alias_for(...)` method. +* Define schema collect mode for `fastapi` with `.schema_collect(...)` method. + * `SchemaCollect:All` will collect all schemas from usages including inlined with `inline(T)` + * `SchemaCollect::NonInlined` will only collect non inlined schemas from usages. + +> [!WARNING] +> The build config will be stored to projects `OUTPUT` directory. It is then read from there via `OUTPUT` environment +> variable which will return **any instance** rust compiler might find at that time (Whatever the `OUTPUT` environment variable points to). +> **Be aware** that sometimes you might face a situation where the config is not aligned with your Rust aliases. +> This might need you to change something on your code before changed config might apply. + +## Install + +Add dependency declaration to `Cargo.toml`. + +```toml +[build-dependencies] +fastapi-config = "0.1" +``` + +## Examples + +Create `build.rs` file with following content, then in your code you can just use `MyType` as +alternative for `i32`. + +```rust +use fastapi_config::Config; + +fn main() { + Config::new() + .alias_for("MyType", "i32") + .write_to_file(); +} +``` + +See full [example for fastapi-config](../examples/fastapi-config-test/). + +## License + +Licensed under either of [Apache 2.0](LICENSE-APACHE) or [MIT](LICENSE-MIT) license at your option. + +Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in this crate +by you, shall be dual licensed, without any additional terms or conditions. diff --git a/fastapi-config/config-test-crate/Cargo.toml b/fastapi-config/config-test-crate/Cargo.toml new file mode 100644 index 0000000..b925572 --- /dev/null +++ b/fastapi-config/config-test-crate/Cargo.toml @@ -0,0 +1,21 @@ +[package] +name = "fastapi-config-test" +version = "0.1.0" +edition = "2021" +rust-version = "1.75" + +[dependencies] +fastapi = { version = "0.1.1", path = "../../fastapi", features = [ + "debug", + "config", +] } +serde = "1" +serde_json = "1" + +[build-dependencies] +fastapi-config = { version = "0.1", path = "../../fastapi-config" } + +[dev-dependencies] +fastapi-config = { version = "0.1", path = "../../fastapi-config" } + +[workspace] diff --git a/fastapi-config/config-test-crate/README.md b/fastapi-config/config-test-crate/README.md new file mode 100644 index 0000000..b35341b --- /dev/null +++ b/fastapi-config/config-test-crate/README.md @@ -0,0 +1,4 @@ +# fastapi-config-test + +This example demonstrates global Rust type aliases in fastapi project. +Check out `main.rs` and `build.rs` and then run `cargo run`. diff --git a/fastapi-config/config-test-crate/build.rs b/fastapi-config/config-test-crate/build.rs new file mode 100644 index 0000000..614deb1 --- /dev/null +++ b/fastapi-config/config-test-crate/build.rs @@ -0,0 +1,10 @@ +fn main() { + fastapi_config::Config::new() + .alias_for("MyType", "bool") + .alias_for("MyInt", "Option") + .alias_for("MyValue", "str") + .alias_for("MyDateTime", "String") + .alias_for("EntryAlias", "Entry") + .alias_for("EntryString", "Entry") + .write_to_file() +} diff --git a/fastapi-config/config-test-crate/src/main.rs b/fastapi-config/config-test-crate/src/main.rs new file mode 100644 index 0000000..e6b4d28 --- /dev/null +++ b/fastapi-config/config-test-crate/src/main.rs @@ -0,0 +1,37 @@ +use fastapi::ToSchema; + +#[allow(unused)] +#[derive(ToSchema)] +struct AliasValues { + name: String, + + #[schema(value_type = MyType)] + my_type: String, + + #[schema(value_type = MyInt)] + my_int: String, + + #[schema(value_type = MyValue)] + my_value: bool, + + date: MyDateTime, + + optional_date: Option, +} + +#[allow(unused)] +struct MyDateTime { + millis: usize, +} + +fn main() { + let schema = fastapi::schema!( + #[inline] + AliasValues + ); + + println!( + "{}", + serde_json::to_string_pretty(&schema).expect("schema must be JSON serializable") + ); +} diff --git a/fastapi-config/config-test-crate/tests/config.rs b/fastapi-config/config-test-crate/tests/config.rs new file mode 100644 index 0000000..384aa16 --- /dev/null +++ b/fastapi-config/config-test-crate/tests/config.rs @@ -0,0 +1,180 @@ +use std::borrow::Cow; + +use fastapi::{OpenApi, ToSchema}; +use fastapi_config::{Config, SchemaCollect}; + +#[test] +fn test_create_config_with_aliases() { + let config: Config<'_> = Config::new().alias_for("i32", "Option"); + let json = serde_json::to_string(&config).expect("config is json serializable"); + + let config: Config = serde_json::from_str(&json).expect("config is json deserializable"); + + assert!(!config.aliases.is_empty()); + assert!(config.aliases.contains_key("i32")); + assert_eq!( + config.aliases.get("i32"), + Some(&Cow::Borrowed("Option")) + ); +} + +#[test] +fn test_config_with_collect_all() { + let config: Config<'_> = Config::new().schema_collect(fastapi_config::SchemaCollect::All); + let json = serde_json::to_string(&config).expect("config is json serializable"); + + let config: Config = serde_json::from_str(&json).expect("config is json deserializable"); + + assert!(matches!(config.schema_collect, SchemaCollect::All)); +} + +#[test] +fn test_to_schema_with_aliases() { + #[allow(unused)] + #[derive(ToSchema)] + struct AliasValues { + name: String, + + #[schema(value_type = MyType)] + my_type: String, + + #[schema(value_type = MyInt)] + my_int: String, + + #[schema(value_type = MyValue)] + my_value: bool, + + date: MyDateTime, + } + + #[allow(unused)] + struct MyDateTime { + millis: usize, + } + + let schema = fastapi::schema!( + #[inline] + AliasValues + ); + + let actual = serde_json::to_string_pretty(&schema).expect("schema must be JSON serializable"); + + let expected = r#"{ + "type": "object", + "required": [ + "name", + "my_type", + "my_value", + "date" + ], + "properties": { + "date": { + "type": "string" + }, + "my_int": { + "type": [ + "integer", + "null" + ], + "format": "int32" + }, + "my_type": { + "type": "boolean" + }, + "my_value": { + "type": "string" + }, + "name": { + "type": "string" + } + } +}"#; + + println!("{actual}"); + assert_eq!(expected.trim(), actual.trim()) +} + +#[test] +fn test_schema_with_enum_aliases() { + #![allow(unused)] + + #[derive(OpenApi)] + #[openapi(components(schemas(Transactions)))] + struct ApiDoc; + + #[derive(ToSchema)] + pub enum Transactions { + Transaction(EntryAlias), + TransactionEntryString(EntryString), + } + + pub type EntryAlias = Entry; + pub type EntryString = Entry; + + #[derive(ToSchema)] + pub struct Entry { + pub entry_id: I, + } + + let api = ApiDoc::openapi(); + let value = serde_json::to_value(api).expect("OpenApi must be JSON serializable"); + let schemas = value + .pointer("/components/schemas") + .expect("Must have schemas"); + + let expected = r###"{ + "Entry_String": { + "properties": { + "entry_id": { + "type": "string" + } + }, + "required": [ + "entry_id" + ], + "type": "object" + }, + "Entry_i32": { + "properties": { + "entry_id": { + "format": "int32", + "type": "integer" + } + }, + "required": [ + "entry_id" + ], + "type": "object" + }, + "Transactions": { + "oneOf": [ + { + "properties": { + "Transaction": { + "$ref": "#/components/schemas/Entry_i32" + } + }, + "required": [ + "Transaction" + ], + "type": "object" + }, + { + "properties": { + "TransactionEntryString": { + "$ref": "#/components/schemas/Entry_String" + } + }, + "required": [ + "TransactionEntryString" + ], + "type": "object" + } + ] + } +}"###; + assert_eq!( + serde_json::to_string_pretty(schemas).unwrap().trim(), + expected + ); +} diff --git a/fastapi-config/src/lib.rs b/fastapi-config/src/lib.rs new file mode 100644 index 0000000..0ef7572 --- /dev/null +++ b/fastapi-config/src/lib.rs @@ -0,0 +1,229 @@ +#![warn(missing_docs)] +#![warn(rustdoc::broken_intra_doc_links)] +#![cfg_attr(doc_cfg, feature(doc_cfg))] +//! This crate provides global configuration capabilities for [`fastapi`](https://docs.rs/fastapi/latest/fastapi/). +//! +//! ## Config options +//! +//! * Define rust type aliases for `fastapi` with `.alias_for(...)` method. +//! * Define schema collect mode for `fastapi` with `.schema_collect(...)` method. +//! * [`SchemaCollect::All`] will collect all schemas from usages including inlined with `inline(T)` +//! * [`SchemaCollect::NonInlined`] will only collect non inlined schemas from usages. +//! +//!
+//! +//! Warning!
+//! The build config will be stored to projects `OUTPUT` directory. It is then read from there via `OUTPUT` environment +//! variable which will return **any instance** rust compiler might find at that time (Whatever the `OUTPUT` environment variable points to). +//! **Be aware** that sometimes you might face a situation where the config is not aligned with your Rust aliases. +//! This might need you to change something on your code before changed config might apply. +//! +//!
+//! +//! ## Install +//! +//! Add dependency declaration to `Cargo.toml`. +//! +//! ```toml +//! [build-dependencies] +//! fastapi-config = "0.1" +//! ``` +//! +//! ## Examples +//! +//! _**Create `build.rs` file with following content, then in your code you can just use `MyType` as +//! alternative for `i32`.**_ +//! +//! ```rust +//! # #![allow(clippy::needless_doctest_main)] +//! use fastapi_config::Config; +//! +//! fn main() { +//! Config::new() +//! .alias_for("MyType", "i32") +//! .write_to_file(); +//! } +//! ``` +//! +//! See full [example for fastapi-config](https://github.com/nxpkg/fastapi/tree/master/examples/fastapi-config-test/). + +use std::borrow::Cow; +use std::collections::HashMap; +use std::fs; +use std::path::PathBuf; + +use serde::de::Visitor; +use serde::{Deserialize, Serialize}; + +/// Global configuration initialized in `build.rs` of user project. +/// +/// This works similar fashion to what `hyperium/tonic` grpc library does with the project configuration. See +/// the quick usage from [module documentation][module] +/// +/// [module]: ./index.html +#[derive(Default, Serialize, Deserialize)] +#[non_exhaustive] +pub struct Config<'c> { + /// A map of global aliases `fastapi` will recognize as types. + #[doc(hidden)] + pub aliases: HashMap, Cow<'c, str>>, + /// Schema collect mode for `fastapi`. By default only non inlined schemas are collected. + pub schema_collect: SchemaCollect, +} + +/// Configures schema collect mode. By default only non explicitly inlined schemas are collected. +/// but this behavior can be changed to collect also inlined schemas by setting +/// [`SchemaCollect::All`]. +#[derive(Default)] +pub enum SchemaCollect { + /// Makes sure that all schemas from usages are collected including inlined. + All, + /// Collect only non explicitly inlined schemas to the OpenAPI. This will result smaller schema + /// foot print in the OpenAPI if schemas are typically inlined with `inline(T)` on usage. + #[default] + NonInlined, +} + +impl Serialize for SchemaCollect { + fn serialize(&self, serializer: S) -> Result + where + S: serde::Serializer, + { + match self { + Self::All => serializer.serialize_str("all"), + Self::NonInlined => serializer.serialize_str("non_inlined"), + } + } +} + +impl<'de> Deserialize<'de> for SchemaCollect { + fn deserialize(deserializer: D) -> Result + where + D: serde::Deserializer<'de>, + { + struct SchemaCollectVisitor; + impl<'d> Visitor<'d> for SchemaCollectVisitor { + type Value = SchemaCollect; + fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result { + formatter.write_str("expected str `all` or `non_inlined`") + } + + fn visit_str(self, v: &str) -> Result + where + E: serde::de::Error, + { + if v == "all" { + Ok(SchemaCollect::All) + } else { + Ok(SchemaCollect::NonInlined) + } + } + } + + deserializer.deserialize_str(SchemaCollectVisitor) + } +} + +impl<'c> Config<'c> { + const NAME: &'static str = "fastapi-config.json"; + + /// Construct a new [`Config`]. + pub fn new() -> Self { + Self { + ..Default::default() + } + } + + /// Add new global alias. + /// + /// This method accepts two arguments. First being identifier of the user's type alias. + /// Second is the type path definition to be used as alias value. The _`value`_ can be anything + /// that `fastapi` can parse as `TypeTree` and can be used as type for a value. + /// + /// Because of `TypeTree` the aliased value can also be a fairly complex type and not limited + /// to primitive types. This also allows users create custom types which can be treated as + /// primitive types. E.g. One could create custom date time type that is treated as chrono's + /// DateTime or a String. + /// + /// # Examples + /// + /// _**Create `MyType` alias for `i32`.**_ + /// ```rust + /// use fastapi_config::Config; + /// + /// let _ = Config::new() + /// .alias_for("MyType", "i32"); + /// ``` + /// + /// _**Create `Json` alias for `serde_json::Value`.**_ + /// ```rust + /// use fastapi_config::Config; + /// + /// let _ = Config::new() + /// .alias_for("Json", "Value"); + /// ``` + /// _**Create `NullableString` alias for `Option`.**_ + /// ```rust + /// use fastapi_config::Config; + /// + /// let _ = Config::new() + /// .alias_for("NullableString", "Option"); + /// ``` + pub fn alias_for(mut self, alias: &'c str, value: &'c str) -> Config<'c> { + self.aliases + .insert(Cow::Borrowed(alias), Cow::Borrowed(value)); + + self + } + + /// Define schema collect mode for `fastapi`. + /// + /// Method accepts one argument [`SchemaCollect`] which defines the collect mode to be used by + /// `utiopa`. If none is defined [`SchemaCollect::NonInlined`] schemas will be collected by + /// default. + /// + /// This can be changed to [`SchemaCollect::All`] if schemas called with `inline(T)` is wished + /// to be collected to the resulting OpenAPI. + pub fn schema_collect(mut self, schema_collect: SchemaCollect) -> Self { + self.schema_collect = schema_collect; + + self + } + + fn get_out_dir() -> Option { + match std::env::var("OUT_DIR") { + Ok(out_dir) => Some(out_dir), + Err(_) => None, + } + } + + /// Write the current [`Config`] to a file. This persists the [`Config`] for `fastapi` to read + /// and use later. + pub fn write_to_file(&self) { + let json = serde_json::to_string(self).expect("Config must be JSON serializable"); + + let Some(out_dir) = Config::get_out_dir() else { + return; + }; + + match fs::write([&*out_dir, Config::NAME].iter().collect::(), json) { + Ok(_) => (), + Err(error) => panic!("Failed to write config {}, error: {error}", Config::NAME), + }; + } + + /// Read a [`Config`] from a file. Used internally by `utiopa`. + #[doc(hidden)] + pub fn read_from_file() -> Config<'c> { + let Some(out_dir) = Config::get_out_dir() else { + return Config::default(); + }; + + let str = match fs::read_to_string([&*out_dir, Config::NAME].iter().collect::()) { + Ok(str) => str, + Err(error) => panic!("Failed to read config: {}, error: {error}", Config::NAME), + }; + + serde_json::from_str(&str).expect("Config muts be JSON deserializable") + } +} diff --git a/fastapi-gen/Cargo.toml b/fastapi-gen/Cargo.toml new file mode 100644 index 0000000..611fc35 --- /dev/null +++ b/fastapi-gen/Cargo.toml @@ -0,0 +1,74 @@ +[package] +name = "fastapi-gen" +description = "Code generation implementation for fastapi" +version = "0.1.1" +edition = "2021" +license = "MIT OR Apache-2.0" +readme = "README.md" +keywords = ["openapi", "codegen", "proc-macro", "documentation", "compile-time"] +repository = "https://github.com/nxpkg/fastapi" +authors = ["Md Sulaiman "] +rust-version.workspace = true + +[lib] +proc-macro = true + +[dependencies] +fastapi-config = { version = "0.1", path = "../fastapi-config", optional = true } +once_cell = { version = "1.19.0", optional = true } +proc-macro2 = "1.0" +syn = { version = "2.0", features = ["full", "extra-traits"] } +quote = "1.0" +regex = { version = "1.7", optional = true } +uuid = { version = "1", features = ["serde"], optional = true } +ulid = { version = "1", optional = true, default-features = false } +url = { version = "2", optional = true } + +[dev-dependencies] +fastapi = { path = "../fastapi", features = [ + "debug", + "uuid", + "macros", +], default-features = false } +serde_json = "1" +serde = "1" +actix-web = { version = "4", features = ["macros"], default-features = false } +axum = { version = "0.7", default-features = false, features = [ + "json", + "query", +] } +paste = "1" +rocket = { version = "0.5", features = ["json"] } +smallvec = { version = "1.10", features = ["serde"] } +rust_decimal = { version = "1", default-features = false } +chrono = { version = "0.4", features = ["serde"] } +assert-json-diff = "2" +time = { version = "0.3", features = ["serde-human-readable"] } +serde_with = "3.0" + +[features] +# See README.md for list and explanations of features +debug = ["syn/extra-traits"] +actix_extras = ["regex", "syn/extra-traits"] +chrono = [] +yaml = [] +decimal = [] +decimal_float = [] +rocket_extras = ["regex", "syn/extra-traits"] +non_strict_integers = [] +uuid = ["dep:uuid"] +ulid = ["dep:ulid"] +url = ["dep:url"] +axum_extras = ["regex", "syn/extra-traits"] +time = [] +smallvec = [] +repr = [] +indexmap = [] +rc_schema = [] +config = ["dep:fastapi-config", "dep:once_cell"] + +# EXPERIEMENTAL! use with cauntion +auto_into_responses = [] + +[lints.rust] +unexpected_cfgs = { level = "warn", check-cfg = ['cfg(doc_cfg)'] } \ No newline at end of file diff --git a/fastapi-gen/LICENSE-APACHE b/fastapi-gen/LICENSE-APACHE new file mode 120000 index 0000000..965b606 --- /dev/null +++ b/fastapi-gen/LICENSE-APACHE @@ -0,0 +1 @@ +../LICENSE-APACHE \ No newline at end of file diff --git a/fastapi-gen/LICENSE-MIT b/fastapi-gen/LICENSE-MIT new file mode 120000 index 0000000..76219eb --- /dev/null +++ b/fastapi-gen/LICENSE-MIT @@ -0,0 +1 @@ +../LICENSE-MIT \ No newline at end of file diff --git a/fastapi-gen/README.md b/fastapi-gen/README.md new file mode 120000 index 0000000..32d46ee --- /dev/null +++ b/fastapi-gen/README.md @@ -0,0 +1 @@ +../README.md \ No newline at end of file diff --git a/fastapi-gen/src/component.rs b/fastapi-gen/src/component.rs new file mode 100644 index 0000000..e1d28cf --- /dev/null +++ b/fastapi-gen/src/component.rs @@ -0,0 +1,1616 @@ +use std::borrow::Cow; + +use proc_macro2::{Ident, Span, TokenStream}; +use quote::{quote, quote_spanned, ToTokens}; +use syn::punctuated::Punctuated; +use syn::spanned::Spanned; +use syn::token::Comma; +use syn::{ + AngleBracketedGenericArguments, Attribute, GenericArgument, GenericParam, Generics, Path, + PathArguments, PathSegment, Type, TypePath, +}; + +use crate::doc_comment::CommentAttributes; +use crate::schema_type::{KnownFormat, PrimitiveType, SchemaTypeInner}; +use crate::{ + as_tokens_or_diagnostics, Array, AttributesExt, Diagnostics, GenericsExt, OptionExt, + ToTokensDiagnostics, +}; +use crate::{schema_type::SchemaType, Deprecated}; + +use self::features::attributes::{Description, Nullable}; +use self::features::validation::Minimum; +use self::features::{ + pop_feature, Feature, FeaturesExt, IntoInner, IsInline, ToTokensExt, Validatable, +}; +use self::serde::{RenameRule, SerdeContainer, SerdeValue}; + +pub mod into_params; + +pub mod features; +pub mod schema; +pub mod serde; + +/// Check whether either serde `container_rule` or `field_rule` has _`default`_ attribute set. +#[inline] +fn is_default(container_rules: &SerdeContainer, field_rule: &SerdeValue) -> bool { + container_rules.default || field_rule.default +} + +/// Find `#[deprecated]` attribute from given attributes. Typically derive type attributes +/// or field attributes of struct. +fn get_deprecated(attributes: &[Attribute]) -> Option { + if attributes.has_deprecated() { + Some(Deprecated::True) + } else { + None + } +} + +/// Check whether field is required based on following rules. +/// +/// * If field has not serde's `skip_serializing_if` +/// * Field has not `serde_with` double option +/// * Field is not default +pub fn is_required(field_rule: &SerdeValue, container_rules: &SerdeContainer) -> bool { + !field_rule.skip_serializing_if + && !field_rule.double_option + && !is_default(container_rules, field_rule) +} + +#[cfg_attr(feature = "debug", derive(Debug))] +enum TypeTreeValue<'t> { + TypePath(&'t TypePath), + Path(&'t Path), + /// Slice and array types need to be manually defined, since they cannot be recognized from + /// generic arguments. + Array(Vec>, Span), + UnitType, + Tuple(Vec>, Span), +} + +impl PartialEq for TypeTreeValue<'_> { + fn eq(&self, other: &Self) -> bool { + match self { + Self::Path(_) => self == other, + Self::TypePath(_) => self == other, + Self::Array(array, _) => matches!(other, Self::Array(other, _) if other == array), + Self::Tuple(tuple, _) => matches!(other, Self::Tuple(other, _) if other == tuple), + Self::UnitType => self == other, + } + } +} + +enum TypeTreeValueIter<'a, T> { + Once(std::iter::Once), + Empty, + Iter(Box + 'a>), +} + +impl<'a, T> TypeTreeValueIter<'a, T> { + fn once(item: T) -> Self { + Self::Once(std::iter::once(item)) + } + + fn empty() -> Self { + Self::Empty + } +} + +impl<'a, T> Iterator for TypeTreeValueIter<'a, T> { + type Item = T; + + fn next(&mut self) -> Option { + match self { + Self::Once(iter) => iter.next(), + Self::Empty => None, + Self::Iter(iter) => iter.next(), + } + } + + fn size_hint(&self) -> (usize, Option) { + match self { + Self::Once(once) => once.size_hint(), + Self::Empty => (0, None), + Self::Iter(iter) => iter.size_hint(), + } + } +} + +/// [`TypeTree`] of items which represents a single parsed `type` of a +/// `Schema`, `Parameter` or `FnArg` +#[cfg_attr(feature = "debug", derive(Debug))] +#[derive(Clone)] +pub struct TypeTree<'t> { + pub path: Option>, + #[allow(unused)] + pub span: Option, + pub value_type: ValueType, + pub generic_type: Option, + pub children: Option>>, +} + +pub trait SynPathExt { + /// Rewrite path will perform conditional substitution over the current path replacing + /// [`PathSegment`]s and [`syn::Ident`] with aliases if found via [`TypeTree::get_alias_type`] + /// or by [`PrimitiveType`] if type in question is known to be a primitive type. + fn rewrite_path(&self) -> Result; +} + +impl<'p> SynPathExt for &'p Path { + fn rewrite_path(&self) -> Result { + let last_segment = self + .segments + .last() + .expect("syn::Path must have at least one segment"); + + let mut segment = last_segment.clone(); + if let PathArguments::AngleBracketed(anglebracketed_args) = &last_segment.arguments { + let args = anglebracketed_args.args.iter().try_fold( + Punctuated::::new(), + |mut args, generic_arg| { + match generic_arg { + GenericArgument::Type(ty) => { + let type_tree = TypeTree::from_type(ty)?; + let alias_type = type_tree.get_alias_type()?; + let alias_type_tree = + alias_type.as_ref().map(TypeTree::from_type).transpose()?; + let type_tree = alias_type_tree.unwrap_or(type_tree); + + let path = type_tree + .path + .as_ref() + .expect("TypeTree must have a path") + .as_ref(); + + if let Some(default_type) = PrimitiveType::new(path) { + args.push(GenericArgument::Type(default_type.ty.clone())); + } else { + let inner = path.rewrite_path()?; + args.push(GenericArgument::Type(syn::Type::Path( + syn::parse_quote!(#inner), + ))) + } + } + other => args.push(other.clone()), + } + + Result::<_, Diagnostics>::Ok(args) + }, + )?; + + let angle_bracket_args = AngleBracketedGenericArguments { + args, + lt_token: anglebracketed_args.lt_token, + gt_token: anglebracketed_args.gt_token, + colon2_token: anglebracketed_args.colon2_token, + }; + + segment.arguments = PathArguments::AngleBracketed(angle_bracket_args); + } + + let segment_ident = &segment.ident; + let segment_type: Type = syn::parse_quote!(#segment_ident); + let type_tree = TypeTree::from_type(&segment_type)?; + let alias_type = type_tree.get_alias_type()?; + let alias_type_tree = alias_type.as_ref().map(TypeTree::from_type).transpose()?; + let type_tree = alias_type_tree.unwrap_or(type_tree); + + let path = type_tree + .path + .as_ref() + .expect("TypeTree for ident must have a path") + .as_ref(); + + if let Some(default_type) = PrimitiveType::new(path) { + let ty = &default_type.ty; + let ident: Ident = syn::parse_quote!(#ty); + + segment.ident = ident; + } else { + let ident = path + .get_ident() + .expect("Path of Ident must have Ident") + .clone(); + segment.ident = ident; + } + + let path = syn::Path { + segments: if last_segment == &segment { + self.segments.clone() + } else { + Punctuated::from_iter(std::iter::once(segment)) + }, + leading_colon: self.leading_colon, + }; + + Ok(path) + } +} + +impl TypeTree<'_> { + pub fn from_type(ty: &Type) -> Result, Diagnostics> { + Self::convert_types(Self::get_type_tree_values(ty)?).map(|mut type_tree| { + type_tree + .next() + .expect("TypeTree from type should have one TypeTree parent") + }) + } + + fn get_type_tree_values( + ty: &Type, + ) -> Result>, Diagnostics> { + let type_tree_values = match ty { + Type::Path(path) => { + TypeTreeValueIter::once(TypeTreeValue::TypePath(path)) + }, + // NOTE have to put this in the box to avoid compiler bug with recursive functions + // See here https://github.com/rust-lang/rust/pull/110844 and https://github.com/rust-lang/rust/issues/111906 + // This bug in fixed in Rust 1.79, but in order to support Rust 1.75 these need to be + // boxed. + Type::Reference(reference) => TypeTreeValueIter::Iter(Box::new(Self::get_type_tree_values(reference.elem.as_ref())?)), + // Type::Reference(reference) => Self::get_type_tree_values(reference.elem.as_ref())?, + Type::Tuple(tuple) => { + // Detect unit type () + if tuple.elems.is_empty() { return Ok(TypeTreeValueIter::once(TypeTreeValue::UnitType)) } + TypeTreeValueIter::once(TypeTreeValue::Tuple( + tuple.elems.iter().map(Self::get_type_tree_values).collect::, Diagnostics>>()?.into_iter().flatten().collect(), + tuple.span() + )) + }, + // NOTE have to put this in the box to avoid compiler bug with recursive functions + // See here https://github.com/rust-lang/rust/pull/110844 and https://github.com/rust-lang/rust/issues/111906 + // This bug in fixed in Rust 1.79, but in order to support Rust 1.75 these need to be + // boxed. + Type::Group(group) => TypeTreeValueIter::Iter(Box::new(Self::get_type_tree_values(group.elem.as_ref())?)), + // Type::Group(group) => Self::get_type_tree_values(group.elem.as_ref())?, + Type::Slice(slice) => TypeTreeValueIter::once(TypeTreeValue::Array(Self::get_type_tree_values(&slice.elem)?.collect(), slice.bracket_token.span.join())), + Type::Array(array) => TypeTreeValueIter::once(TypeTreeValue::Array(Self::get_type_tree_values(&array.elem)?.collect(), array.bracket_token.span.join())), + Type::TraitObject(trait_object) => { + trait_object + .bounds + .iter() + .find_map(|bound| { + match &bound { + syn::TypeParamBound::Trait(trait_bound) => Some(&trait_bound.path), + syn::TypeParamBound::Lifetime(_) => None, + syn::TypeParamBound::Verbatim(_) => None, + _ => todo!("TypeTree trait object found unrecognized TypeParamBound"), + } + }) + .map(|path| TypeTreeValueIter::once(TypeTreeValue::Path(path))).unwrap_or_else(TypeTreeValueIter::empty) + } + unexpected => return Err(Diagnostics::with_span(unexpected.span(), "unexpected type in component part get type path, expected one of: Path, Tuple, Reference, Group, Array, Slice, TraitObject")), + }; + + Ok(type_tree_values) + } + + fn convert_types<'p, P: IntoIterator>>( + paths: P, + ) -> Result>, Diagnostics> { + paths + .into_iter() + .map(|value| { + let path = match value { + TypeTreeValue::TypePath(type_path) => &type_path.path, + TypeTreeValue::Path(path) => path, + TypeTreeValue::Array(value, span) => { + let array: Path = Ident::new("Array", span).into(); + return Ok(TypeTree { + path: Some(Cow::Owned(array)), + span: Some(span), + value_type: ValueType::Object, + generic_type: Some(GenericType::Vec), + children: Some(match Self::convert_types(value) { + Ok(converted_values) => converted_values.collect(), + Err(diagnostics) => return Err(diagnostics), + }), + }); + } + TypeTreeValue::Tuple(tuple, span) => { + return Ok(TypeTree { + path: None, + span: Some(span), + children: Some(match Self::convert_types(tuple) { + Ok(converted_values) => converted_values.collect(), + Err(diagnostics) => return Err(diagnostics), + }), + generic_type: None, + value_type: ValueType::Tuple, + }) + } + TypeTreeValue::UnitType => { + return Ok(TypeTree { + path: None, + span: None, + value_type: ValueType::Tuple, + generic_type: None, + children: None, + }) + } + }; + + // there will always be one segment at least + let last_segment = path + .segments + .last() + .expect("at least one segment within path in TypeTree::convert_types"); + + if last_segment.arguments.is_empty() { + Ok(Self::convert(path, last_segment)) + } else { + Self::resolve_schema_type(path, last_segment) + } + }) + .collect::>, Diagnostics>>() + .map(IntoIterator::into_iter) + } + + // Only when type is a generic type we get to this function. + fn resolve_schema_type<'t>( + path: &'t Path, + last_segment: &'t PathSegment, + ) -> Result, Diagnostics> { + if last_segment.arguments.is_empty() { + return Err(Diagnostics::with_span( + last_segment.ident.span(), + "expected at least one angle bracket argument but was 0", + )); + }; + + let mut generic_schema_type = Self::convert(path, last_segment); + + let mut generic_types = match &last_segment.arguments { + PathArguments::AngleBracketed(angle_bracketed_args) => { + // if all type arguments are lifetimes we ignore the generic type + if angle_bracketed_args.args.iter().all(|arg| { + matches!( + arg, + GenericArgument::Lifetime(_) | GenericArgument::Const(_) + ) + }) { + None + } else { + Some( + angle_bracketed_args + .args + .iter() + .filter(|arg| { + !matches!( + arg, + GenericArgument::Lifetime(_) | GenericArgument::Const(_) + ) + }) + .map(|arg| match arg { + GenericArgument::Type(arg) => Ok(arg), + unexpected => Err(Diagnostics::with_span( + unexpected.span(), + "expected generic argument type or generic argument lifetime", + )), + }) + .collect::, Diagnostics>>()? + .into_iter(), + ) + } + } + _ => { + return Err(Diagnostics::with_span( + last_segment.ident.span(), + "unexpected path argument, expected angle bracketed path argument", + )) + } + }; + + generic_schema_type.children = generic_types.as_mut().map_try(|generic_type| { + generic_type + .map(Self::from_type) + .collect::, Diagnostics>>() + })?; + + Ok(generic_schema_type) + } + + fn convert<'t>(path: &'t Path, last_segment: &'t PathSegment) -> TypeTree<'t> { + let generic_type = Self::get_generic_type(last_segment); + let schema_type = SchemaType { + path: Cow::Borrowed(path), + nullable: matches!(generic_type, Some(GenericType::Option)), + }; + + TypeTree { + path: Some(Cow::Borrowed(path)), + span: Some(path.span()), + value_type: if schema_type.is_primitive() { + ValueType::Primitive + } else if schema_type.is_value() { + ValueType::Value + } else { + ValueType::Object + }, + generic_type, + children: None, + } + } + + // TODO should we recognize unknown generic types with `GenericType::Unknown` instead of `None`? + fn get_generic_type(segment: &PathSegment) -> Option { + if segment.arguments.is_empty() { + return None; + } + + match &*segment.ident.to_string() { + "HashMap" | "Map" | "BTreeMap" => Some(GenericType::Map), + #[cfg(feature = "indexmap")] + "IndexMap" => Some(GenericType::Map), + "Vec" => Some(GenericType::Vec), + "BTreeSet" | "HashSet" => Some(GenericType::Set), + "LinkedList" => Some(GenericType::LinkedList), + #[cfg(feature = "smallvec")] + "SmallVec" => Some(GenericType::SmallVec), + "Option" => Some(GenericType::Option), + "Cow" => Some(GenericType::Cow), + "Box" => Some(GenericType::Box), + #[cfg(feature = "rc_schema")] + "Arc" => Some(GenericType::Arc), + #[cfg(feature = "rc_schema")] + "Rc" => Some(GenericType::Rc), + "RefCell" => Some(GenericType::RefCell), + _ => None, + } + } + + /// Check whether [`TypeTreeValue`]'s [`syn::TypePath`] or any if it's `children`s [`syn::TypePath`] + /// is a given type as [`str`]. + pub fn is(&self, s: &str) -> bool { + let mut is = self + .path + .as_ref() + .map(|path| { + path.segments + .last() + .expect("expected at least one segment in TreeTypeValue path") + .ident + == s + }) + .unwrap_or(false); + + if let Some(ref children) = self.children { + is = is || children.iter().any(|child| child.is(s)); + } + + is + } + + /// `Object` virtual type is used when generic object is required in OpenAPI spec. Typically used + /// with `value_type` attribute to hinder the actual type. + pub fn is_object(&self) -> bool { + self.is("Object") + } + + /// `Value` virtual type is used when any JSON value is required in OpenAPI spec. Typically used + /// with `value_type` attribute for a member of type `serde_json::Value`. + pub fn is_value(&self) -> bool { + self.is("Value") + } + + /// Check whether the [`TypeTree`]'s `generic_type` is [`GenericType::Option`] + pub fn is_option(&self) -> bool { + matches!(self.generic_type, Some(GenericType::Option)) + } + + /// Check whether the [`TypeTree`]'s `generic_type` is [`GenericType::Map`] + pub fn is_map(&self) -> bool { + matches!(self.generic_type, Some(GenericType::Map)) + } + + /// Get [`syn::Generics`] for current [`TypeTree`]'s [`syn::Path`]. + pub fn get_path_generics(&self) -> syn::Result { + let mut generics = Generics::default(); + let segment = self + .path + .as_ref() + .ok_or_else(|| syn::Error::new(self.path.span(), "cannot get TypeTree::path, did you call this on `tuple` or `unit` type type tree?"))? + .segments + .last() + .expect("Path must have segments"); + + fn type_to_generic_params(ty: &Type) -> Vec { + match &ty { + Type::Path(path) => { + let mut params_vec: Vec = Vec::new(); + let last_segment = path + .path + .segments + .last() + .expect("TypePath must have a segment"); + let ident = &last_segment.ident; + params_vec.push(syn::parse_quote!(#ident)); + + params_vec + } + Type::Reference(reference) => type_to_generic_params(reference.elem.as_ref()), + _ => Vec::new(), + } + } + + fn angle_bracket_args_to_params( + args: &AngleBracketedGenericArguments, + ) -> impl Iterator + '_ { + args.args + .iter() + .filter_map(move |generic_argument| { + match generic_argument { + GenericArgument::Type(ty) => Some(type_to_generic_params(ty)), + GenericArgument::Lifetime(life) => { + Some(vec![GenericParam::Lifetime(syn::parse_quote!(#life))]) + } + _ => None, // other wise ignore + } + }) + .flatten() + } + + if let PathArguments::AngleBracketed(angle_bracketed_args) = &segment.arguments { + generics.lt_token = Some(angle_bracketed_args.lt_token); + generics.params = angle_bracket_args_to_params(angle_bracketed_args).collect(); + generics.gt_token = Some(angle_bracketed_args.gt_token); + }; + + Ok(generics) + } + + /// Get possible global alias defined in `fastapi_config::Config` for current `TypeTree`. + pub fn get_alias_type(&self) -> Result, Diagnostics> { + #[cfg(feature = "config")] + { + self.path + .as_ref() + .and_then(|path| path.segments.iter().last()) + .and_then(|last_segment| { + crate::CONFIG.aliases.get(&*last_segment.ident.to_string()) + }) + .map_try(|alias| syn::parse_str::(alias.as_ref())) + .map_err(|error| Diagnostics::new(error.to_string())) + } + + #[cfg(not(feature = "config"))] + Ok(None) + } +} + +impl PartialEq for TypeTree<'_> { + #[cfg(feature = "debug")] + fn eq(&self, other: &Self) -> bool { + self.path == other.path + && self.value_type == other.value_type + && self.generic_type == other.generic_type + && self.children == other.children + } + + #[cfg(not(feature = "debug"))] + fn eq(&self, other: &Self) -> bool { + let path_eg = match (self.path.as_ref(), other.path.as_ref()) { + (Some(Cow::Borrowed(self_path)), Some(Cow::Borrowed(other_path))) => { + self_path.into_token_stream().to_string() + == other_path.into_token_stream().to_string() + } + (Some(Cow::Owned(self_path)), Some(Cow::Owned(other_path))) => { + self_path.to_token_stream().to_string() + == other_path.into_token_stream().to_string() + } + (None, None) => true, + _ => false, + }; + + path_eg + && self.value_type == other.value_type + && self.generic_type == other.generic_type + && self.children == other.children + } +} + +#[cfg_attr(feature = "debug", derive(Debug))] +#[derive(Clone, Copy, PartialEq, Eq)] +pub enum ValueType { + Primitive, + Object, + Tuple, + Value, +} + +#[cfg_attr(feature = "debug", derive(Debug))] +#[derive(PartialEq, Eq, Clone, Copy)] +pub enum GenericType { + Vec, + LinkedList, + Set, + #[cfg(feature = "smallvec")] + SmallVec, + Map, + Option, + Cow, + Box, + RefCell, + #[cfg(feature = "rc_schema")] + Arc, + #[cfg(feature = "rc_schema")] + Rc, +} + +trait Rename { + fn rename(rule: &RenameRule, value: &str) -> String; +} + +/// Performs a rename for given `value` based on given rules. If no rules were +/// provided returns [`None`] +/// +/// Method accepts 3 arguments. +/// * `value` to rename. +/// * `to` Optional rename to value for fields with _`rename`_ property. +/// * `container_rule` which is used to rename containers with _`rename_all`_ property. +fn rename<'s, R: Rename>( + value: &str, + to: Option>, + container_rule: Option<&RenameRule>, +) -> Option> { + let rename = to.and_then(|to| if !to.is_empty() { Some(to) } else { None }); + + rename.or_else(|| { + container_rule + .as_ref() + .map(|container_rule| Cow::Owned(R::rename(container_rule, value))) + }) +} + +/// Can be used to perform rename on container level e.g `struct`, `enum` or `enum` `variant` level. +struct VariantRename; + +impl Rename for VariantRename { + fn rename(rule: &RenameRule, value: &str) -> String { + rule.rename_variant(value) + } +} + +/// Can be used to perform rename on field level of a container e.g `struct`. +struct FieldRename; + +impl Rename for FieldRename { + fn rename(rule: &RenameRule, value: &str) -> String { + rule.rename(value) + } +} + +#[cfg_attr(feature = "debug", derive(Debug))] +pub struct Container<'c> { + pub generics: &'c Generics, +} + +#[cfg_attr(feature = "debug", derive(Debug))] +pub struct ComponentSchemaProps<'c> { + pub container: &'c Container<'c>, + pub type_tree: &'c TypeTree<'c>, + pub features: Vec, + pub description: Option<&'c ComponentDescription<'c>>, +} + +#[cfg_attr(feature = "debug", derive(Debug))] +pub enum ComponentDescription<'c> { + CommentAttributes(&'c CommentAttributes), + Description(&'c Description), +} + +impl ToTokens for ComponentDescription<'_> { + fn to_tokens(&self, tokens: &mut TokenStream) { + let description = match self { + Self::CommentAttributes(attributes) => { + if attributes.is_empty() { + TokenStream::new() + } else { + attributes.as_formatted_string().to_token_stream() + } + } + Self::Description(description) => description.to_token_stream(), + }; + + if !description.is_empty() { + tokens.extend(quote! { + .description(Some(#description)) + }); + } + } +} + +/// Used to store possible inner field schema name and tokens if field contains any schema +/// references. E.g. field: Vec should have name: Foo::name(), tokens: Foo::schema() and +/// references: Foo::schemas() +#[cfg_attr(feature = "debug", derive(Debug))] +#[derive(Default)] +pub struct SchemaReference { + pub name: TokenStream, + pub tokens: TokenStream, + pub references: TokenStream, + pub is_inline: bool, + pub no_recursion: bool, +} + +impl SchemaReference { + /// Check whether `SchemaReference` is partial. Partial schema reference occurs in situation + /// when reference schema tokens cannot be resolved e.g. type in question is generic argument. + fn is_partial(&self) -> bool { + self.tokens.is_empty() + } +} + +#[cfg_attr(feature = "debug", derive(Debug))] +pub struct ComponentSchema { + tokens: TokenStream, + pub name_tokens: TokenStream, + pub schema_references: Vec, +} + +impl ComponentSchema { + pub fn new( + ComponentSchemaProps { + container, + type_tree, + mut features, + description, + }: ComponentSchemaProps, + ) -> Result { + let mut tokens = TokenStream::new(); + let mut name_tokens = TokenStream::new(); + let mut schema_references = Vec::::new(); + + match type_tree.generic_type { + Some(GenericType::Map) => ComponentSchema::map_to_tokens( + &mut tokens, + &mut schema_references, + container, + features, + type_tree, + description, + )?, + Some(GenericType::Vec | GenericType::LinkedList | GenericType::Set) => { + ComponentSchema::vec_to_tokens( + &mut tokens, + &mut schema_references, + container, + features, + type_tree, + description, + )? + } + #[cfg(feature = "smallvec")] + Some(GenericType::SmallVec) => ComponentSchema::vec_to_tokens( + &mut tokens, + &mut schema_references, + container, + features, + type_tree, + description, + )?, + Some(GenericType::Option) => { + // Add nullable feature if not already exists. Option is always nullable + if !features + .iter() + .any(|feature| matches!(feature, Feature::Nullable(_))) + { + features.push(Nullable::new().into()); + } + let child = type_tree + .children + .as_ref() + .expect("ComponentSchema generic container type should have children") + .iter() + .next() + .expect("ComponentSchema generic container type should have 1 child"); + let alias = child.get_alias_type()?; + let alias = alias.as_ref().map_try(TypeTree::from_type)?; + let child = alias.as_ref().unwrap_or(child); + + let schema = ComponentSchema::new(ComponentSchemaProps { + container, + type_tree: child, + features, + description, + })?; + schema.to_tokens(&mut tokens); + + schema_references.extend(schema.schema_references); + } + Some(GenericType::Cow | GenericType::Box | GenericType::RefCell) => { + let child = type_tree + .children + .as_ref() + .expect("ComponentSchema generic container type should have children") + .iter() + .next() + .expect("ComponentSchema generic container type should have 1 child"); + let alias = child.get_alias_type()?; + let alias = alias.as_ref().map_try(TypeTree::from_type)?; + let child = alias.as_ref().unwrap_or(child); + + let schema = ComponentSchema::new(ComponentSchemaProps { + container, + type_tree: child, + features, + description, + })?; + schema.to_tokens(&mut tokens); + + schema_references.extend(schema.schema_references); + } + #[cfg(feature = "rc_schema")] + Some(GenericType::Arc) | Some(GenericType::Rc) => { + let child = type_tree + .children + .as_ref() + .expect("ComponentSchema rc generic container type should have children") + .iter() + .next() + .expect("ComponentSchema rc generic container type should have 1 child"); + let alias = child.get_alias_type()?; + let alias = alias.as_ref().map_try(TypeTree::from_type)?; + let child = alias.as_ref().unwrap_or(child); + + let schema = ComponentSchema::new(ComponentSchemaProps { + container, + type_tree: child, + features, + description, + })?; + schema.to_tokens(&mut tokens); + + schema_references.extend(schema.schema_references); + } + None => ComponentSchema::non_generic_to_tokens( + &mut tokens, + &mut name_tokens, + &mut schema_references, + container, + features, + type_tree, + description, + )?, + }; + + Ok(Self { + tokens, + name_tokens, + schema_references, + }) + } + + /// Create `.schema_type(...)` override token stream if nullable is true from given [`SchemaTypeInner`]. + fn get_schema_type_override( + nullable: Option, + schema_type_inner: SchemaTypeInner, + ) -> Option { + if let Some(nullable) = nullable { + let nullable_schema_type = nullable.into_schema_type_token_stream(); + let schema_type = if nullable.value() && !nullable_schema_type.is_empty() { + Some(quote! { + { + use std::iter::FromIterator; + fastapi::openapi::schema::SchemaType::from_iter([#schema_type_inner, #nullable_schema_type]) + } + }) + } else { + None + }; + + schema_type.map(|schema_type| quote! { .schema_type(#schema_type) }) + } else { + None + } + } + + fn map_to_tokens( + tokens: &mut TokenStream, + schema_references: &mut Vec, + container: &Container, + mut features: Vec, + type_tree: &TypeTree, + description_stream: Option<&ComponentDescription<'_>>, + ) -> Result<(), Diagnostics> { + let example = features.pop_by(|feature| matches!(feature, Feature::Example(_))); + let additional_properties = pop_feature!(features => Feature::AdditionalProperties(_)); + let nullable: Option = + pop_feature!(features => Feature::Nullable(_)).into_inner(); + let default = pop_feature!(features => Feature::Default(_)); + let default_tokens = as_tokens_or_diagnostics!(&default); + let deprecated = pop_feature!(features => Feature::Deprecated(_)).try_to_token_stream()?; + + let additional_properties = additional_properties + .as_ref() + .map_try(|feature| Ok(as_tokens_or_diagnostics!(feature)))? + .or_else_try(|| { + let children = type_tree + .children + .as_ref() + .expect("ComponentSchema Map type should have children"); + // Get propertyNames + let property_name = children + .first() + .expect("ComponentSchema Map type shouldu have 2 child, getting first"); + let property_name_alias = property_name.get_alias_type()?; + let property_name_alias = + property_name_alias.as_ref().map_try(TypeTree::from_type)?; + let property_name_child = property_name_alias.as_ref().unwrap_or(property_name); + + let mut property_name_features = features.clone(); + property_name_features.push(Feature::Inline(true.into())); + let property_name_schema = ComponentSchema::new(ComponentSchemaProps { + container, + type_tree: property_name_child, + features: property_name_features, + description: None, + })?; + let property_name_tokens = property_name_schema.to_token_stream(); + + // Maps are treated as generic objects with no named properties and + // additionalProperties denoting the type + // maps have 2 child schemas and we are interested the second one of them + // which is used to determine the additional properties + let child = children + .get(1) + .expect("ComponentSchema Map type should have 2 child"); + let alias = child.get_alias_type()?; + let alias = alias.as_ref().map_try(TypeTree::from_type)?; + let child = alias.as_ref().unwrap_or(child); + + let schema_property = ComponentSchema::new(ComponentSchemaProps { + container, + type_tree: child, + features, + description: None, + })?; + let schema_tokens = schema_property.to_token_stream(); + + schema_references.extend(schema_property.schema_references); + + Result::, Diagnostics>::Ok(Some(quote! { + .property_names(Some(#property_name_tokens)) + .additional_properties(Some(#schema_tokens)) + })) + })?; + + let schema_type = + ComponentSchema::get_schema_type_override(nullable, SchemaTypeInner::Object); + + tokens.extend(quote! { + fastapi::openapi::ObjectBuilder::new() + #schema_type + #additional_properties + #description_stream + #deprecated + #default_tokens + }); + + example.to_tokens(tokens) + } + + fn vec_to_tokens( + tokens: &mut TokenStream, + schema_references: &mut Vec, + container: &Container, + mut features: Vec, + type_tree: &TypeTree, + description_stream: Option<&ComponentDescription<'_>>, + ) -> Result<(), Diagnostics> { + let example = pop_feature!(features => Feature::Example(_)); + let xml = features.extract_vec_xml_feature(type_tree)?; + let max_items = pop_feature!(features => Feature::MaxItems(_)); + let min_items = pop_feature!(features => Feature::MinItems(_)); + let nullable: Option = + pop_feature!(features => Feature::Nullable(_)).into_inner(); + let default = pop_feature!(features => Feature::Default(_)); + let title = pop_feature!(features => Feature::Title(_)); + let deprecated = pop_feature!(features => Feature::Deprecated(_)).try_to_token_stream()?; + let content_encoding = pop_feature!(features => Feature::ContentEncoding(_)); + let content_media_type = pop_feature!(features => Feature::ContentMediaType(_)); + + let child = type_tree + .children + .as_ref() + .expect("ComponentSchema Vec should have children") + .iter() + .next() + .expect("ComponentSchema Vec should have 1 child"); + + #[cfg(feature = "smallvec")] + let child = if type_tree.generic_type == Some(GenericType::SmallVec) { + child + .children + .as_ref() + .expect("SmallVec should have children") + .iter() + .next() + .expect("SmallVec should have 1 child") + } else { + child + }; + let alias = child.get_alias_type()?; + let alias = alias.as_ref().map_try(TypeTree::from_type)?; + let child = alias.as_ref().unwrap_or(child); + + let component_schema = ComponentSchema::new(ComponentSchemaProps { + container, + type_tree: child, + features, + description: None, + })?; + let component_schema_tokens = component_schema.to_token_stream(); + + schema_references.extend(component_schema.schema_references); + + let unique = match matches!(type_tree.generic_type, Some(GenericType::Set)) { + true => quote! { + .unique_items(true) + }, + false => quote! {}, + }; + let schema_type = + ComponentSchema::get_schema_type_override(nullable, SchemaTypeInner::Array); + + let schema = quote! { + fastapi::openapi::schema::ArrayBuilder::new() + #schema_type + .items(#component_schema_tokens) + #unique + }; + + let validate = |feature: &Feature| { + let type_path = &**type_tree.path.as_ref().unwrap(); + let schema_type = SchemaType { + path: Cow::Borrowed(type_path), + nullable: nullable + .map(|nullable| nullable.value()) + .unwrap_or_default(), + }; + feature.validate(&schema_type, type_tree); + }; + + tokens.extend(quote! { + #schema + #deprecated + #description_stream + }); + + if let Some(max_items) = max_items { + validate(&max_items); + tokens.extend(max_items.to_token_stream()) + } + + if let Some(min_items) = min_items { + validate(&min_items); + tokens.extend(min_items.to_token_stream()) + } + + content_encoding.to_tokens(tokens)?; + content_media_type.to_tokens(tokens)?; + default.to_tokens(tokens)?; + title.to_tokens(tokens)?; + example.to_tokens(tokens)?; + xml.to_tokens(tokens)?; + + Ok(()) + } + + fn non_generic_to_tokens( + tokens: &mut TokenStream, + name_tokens: &mut TokenStream, + schema_references: &mut Vec, + container: &Container, + mut features: Vec, + type_tree: &TypeTree, + description_stream: Option<&ComponentDescription<'_>>, + ) -> Result<(), Diagnostics> { + let nullable_feat: Option = + pop_feature!(features => Feature::Nullable(_)).into_inner(); + let nullable = nullable_feat + .map(|nullable| nullable.value()) + .unwrap_or_default(); + let deprecated = pop_feature!(features => Feature::Deprecated(_)).try_to_token_stream()?; + + match type_tree.value_type { + ValueType::Primitive => { + let type_path = &**type_tree.path.as_ref().unwrap(); + let schema_type = SchemaType { + path: Cow::Borrowed(type_path), + nullable, + }; + if schema_type.is_unsigned_integer() { + // add default minimum feature only when there is no explicit minimum + // provided + if !features + .iter() + .any(|feature| matches!(&feature, Feature::Minimum(_))) + { + features.push(Minimum::new(0f64, type_path.span()).into()); + } + } + + let schema_type_tokens = as_tokens_or_diagnostics!(&schema_type); + tokens.extend(quote! { + fastapi::openapi::ObjectBuilder::new().schema_type(#schema_type_tokens) + }); + + let format = KnownFormat::from_path(type_path)?; + if format.is_known_format() { + tokens.extend(quote! { + .format(Some(#format)) + }) + } + + description_stream.to_tokens(tokens); + tokens.extend(deprecated); + for feature in features.iter().filter(|feature| feature.is_validatable()) { + feature.validate(&schema_type, type_tree); + } + let _ = pop_feature!(features => Feature::NoRecursion(_)); // primitive types are not recursive + tokens.extend(features.to_token_stream()?); + } + ValueType::Value => { + // since OpenAPI 3.1 the type is an array, thus nullable should not be necessary + // for value type that is going to allow all types of content. + if type_tree.is_value() { + tokens.extend(quote! { + fastapi::openapi::ObjectBuilder::new() + .schema_type(fastapi::openapi::schema::SchemaType::AnyValue) + #description_stream #deprecated + }) + } + } + ValueType::Object => { + let is_inline = features.is_inline(); + + if type_tree.is_object() { + let nullable_schema_type = ComponentSchema::get_schema_type_override( + nullable_feat, + SchemaTypeInner::Object, + ); + tokens.extend(quote! { + fastapi::openapi::ObjectBuilder::new() + #nullable_schema_type + #description_stream #deprecated + }) + } else { + fn nullable_one_of_item(nullable: bool) -> Option { + if nullable { + Some( + quote! { .item(fastapi::openapi::schema::ObjectBuilder::new().schema_type(fastapi::openapi::schema::Type::Null)) }, + ) + } else { + None + } + } + let type_path = &**type_tree.path.as_ref().unwrap(); + let rewritten_path = type_path.rewrite_path()?; + let nullable_item = nullable_one_of_item(nullable); + let mut object_schema_reference = SchemaReference { + no_recursion: features + .iter() + .any(|feature| matches!(feature, Feature::NoRecursion(_))), + ..SchemaReference::default() + }; + + if let Some(children) = &type_tree.children { + let children_name = Self::compose_name( + Self::filter_const_generics(children, container.generics), + container.generics, + )?; + name_tokens.extend(quote! { std::borrow::Cow::Owned(format!("{}_{}", < #rewritten_path as fastapi::ToSchema >::name(), #children_name)) }); + } else { + name_tokens.extend( + quote! { format!("{}", < #rewritten_path as fastapi::ToSchema >::name()) }, + ); + } + + object_schema_reference.name = quote! { String::from(#name_tokens) }; + + let default = pop_feature!(features => Feature::Default(_)); + let default_tokens = as_tokens_or_diagnostics!(&default); + let title = pop_feature!(features => Feature::Title(_)); + let title_tokens = as_tokens_or_diagnostics!(&title); + + if is_inline { + let schema_type = SchemaType { + path: Cow::Borrowed(&rewritten_path), + nullable, + }; + let index = + if !schema_type.is_primitive() || type_tree.generic_type.is_none() { + container.generics.get_generic_type_param_index(type_tree) + } else { + None + }; + + object_schema_reference.is_inline = true; + let items_tokens = if let Some(children) = &type_tree.children { + schema_references.extend(Self::compose_child_references(children)?); + + let composed_generics = + Self::compose_generics(children, container.generics)? + .collect::>(); + + if index.is_some() { + quote_spanned! {type_path.span()=> + let _ = <#rewritten_path as fastapi::PartialSchema>::schema; + + if let Some(composed) = generics.get_mut(#index) { + composed.clone() + } else { + <#rewritten_path as fastapi::PartialSchema>::schema() + } + } + } else { + quote_spanned! {type_path.span()=> + <#rewritten_path as fastapi::__dev::ComposeSchema>::compose(#composed_generics.to_vec()) + } + } + } else { + quote_spanned! {type_path.span()=> + <#rewritten_path as fastapi::PartialSchema>::schema() + } + }; + object_schema_reference.tokens = items_tokens.clone(); + object_schema_reference.references = + quote! { <#rewritten_path as fastapi::ToSchema>::schemas(schemas) }; + + let description_tokens = description_stream.to_token_stream(); + let schema = if default.is_some() + || nullable + || title.is_some() + || !description_tokens.is_empty() + { + quote_spanned! {type_path.span()=> + fastapi::openapi::schema::OneOfBuilder::new() + #nullable_item + .item(#items_tokens) + #title_tokens + #default_tokens + #description_stream + } + } else { + items_tokens + }; + + schema.to_tokens(tokens); + } else { + let schema_type = SchemaType { + path: Cow::Borrowed(&rewritten_path), + nullable, + }; + let index = + if !schema_type.is_primitive() || type_tree.generic_type.is_none() { + container.generics.get_generic_type_param_index(type_tree) + } else { + None + }; + + // forcibly inline primitive type parameters, otherwise use references + if index.is_none() { + let reference_tokens = if let Some(children) = &type_tree.children { + let composed_generics = Self::compose_generics( + Self::filter_const_generics(children, container.generics), + container.generics, + )? + .collect::>(); + quote! { <#rewritten_path as fastapi::__dev::ComposeSchema>::compose(#composed_generics.to_vec()) } + } else { + quote! { <#rewritten_path as fastapi::PartialSchema>::schema() } + }; + object_schema_reference.tokens = reference_tokens; + } + // any case the references call should be passed down in generic and non + // non generic likewise. + object_schema_reference.references = + quote! { <#rewritten_path as fastapi::ToSchema>::schemas(schemas) }; + let composed_or_ref = |item_tokens: TokenStream| -> TokenStream { + if let Some(index) = &index { + quote_spanned! {type_path.span()=> + { + let _ = <#rewritten_path as fastapi::PartialSchema>::schema; + + if let Some(composed) = generics.get_mut(#index) { + composed.clone() + } else { + #item_tokens.into() + } + } + } + } else { + quote_spanned! {type_path.span()=> + #item_tokens + } + } + }; + + // TODO: refs support `summary` field but currently there is no such field + // on schemas more over there is no way to distinct the `summary` from + // `description` of the ref. Should we consider supporting the summary? + let schema = if default.is_some() || nullable || title.is_some() { + composed_or_ref(quote_spanned! {type_path.span()=> + fastapi::openapi::schema::OneOfBuilder::new() + #nullable_item + .item(fastapi::openapi::schema::RefBuilder::new() + #description_stream + .ref_location_from_schema_name(#name_tokens) + ) + #title_tokens + #default_tokens + }) + } else { + composed_or_ref(quote_spanned! {type_path.span()=> + fastapi::openapi::schema::RefBuilder::new() + #description_stream + .ref_location_from_schema_name(#name_tokens) + }) + }; + + schema.to_tokens(tokens); + } + + schema_references.push(object_schema_reference); + } + } + ValueType::Tuple => { + type_tree + .children + .as_ref() + .map_try(|children| { + let prefix_items = children + .iter() + .map(|child| { + let mut features = if child.is_option() { + vec![Feature::Nullable(Nullable::new())] + } else { + Vec::new() + }; + // Prefix item is always inlined + features.push(Feature::Inline(true.into())); + + match ComponentSchema::new(ComponentSchemaProps { + container, + type_tree: child, + features, + description: None, + }) { + Ok(child) => Ok(quote! { + Into::::into(#child) + }), + Err(diagnostics) => Err(diagnostics), + } + }) + .collect::, Diagnostics>>()? + .into_iter() + .collect::>(); + + let nullable_schema_type = ComponentSchema::get_schema_type_override( + nullable_feat, + SchemaTypeInner::Array, + ); + Result::::Ok(quote! { + fastapi::openapi::schema::ArrayBuilder::new() + #nullable_schema_type + .items(fastapi::openapi::schema::ArrayItems::False) + .prefix_items(#prefix_items) + #description_stream + #deprecated + }) + })? + .unwrap_or_else(|| quote!(fastapi::openapi::schema::empty())) // TODO should + // this bee type "null"? + .to_tokens(tokens); + tokens.extend(features.to_token_stream()); + } + } + Ok(()) + } + + fn compose_name<'tr, I>( + children: I, + generics: &'tr Generics, + ) -> Result + where + I: IntoIterator>, + { + let children = children + .into_iter() + .map(|type_tree| { + let name = type_tree + .path + .as_deref() + .expect("Generic ValueType::Object must have path"); + let rewritten_name = name.rewrite_path()?; + + if let Some(children) = &type_tree.children { + let children_name = Self::compose_name(Self::filter_const_generics(children, generics), generics)?; + + Ok(quote! { std::borrow::Cow::Owned(format!("{}_{}", <#rewritten_name as fastapi::ToSchema>::name(), #children_name)) }) + } else { + Ok(quote! { <#rewritten_name as fastapi::ToSchema>::name() }) + } + }) + .collect::, Diagnostics>>()?; + + Ok(quote! { std::borrow::Cow::::Owned(#children.to_vec().join("_")) }) + } + + fn compose_generics<'v, I: IntoIterator>>( + children: I, + generics: &'v Generics, + ) -> Result + 'v, Diagnostics> + where + ::IntoIter: 'v, + { + let iter = children.into_iter().map(|child| { + let path = child + .path + .as_deref() + .expect("inline TypeTree ValueType::Object must have child path if generic"); + let rewritten_path = path.rewrite_path()?; + if let Some(children) = &child.children { + let items = Self::compose_generics(Self::filter_const_generics(children, generics), generics)?.collect::>(); + Ok(quote! { <#rewritten_path as fastapi::__dev::ComposeSchema>::compose(#items.to_vec()) }) + } else { + Ok(quote! { <#rewritten_path as fastapi::PartialSchema>::schema() }) + } + }).collect::, Diagnostics>>()? + .into_iter(); + + Ok(iter) + } + + fn filter_const_generics<'v, I: IntoIterator>>( + children: I, + generics: &'v Generics, + ) -> impl IntoIterator> + 'v + where + ::IntoIter: 'v, + { + children.into_iter().filter(|type_tree| { + let path = type_tree + .path + .as_deref() + .expect("child TypeTree must have a Path, did you call this on array or tuple?"); + let is_const = path + .get_ident() + .map(|path_ident| { + generics.params.iter().any( + |param| matches!(param, GenericParam::Const(ty) if ty.ident == *path_ident), + ) + }) + .unwrap_or(false); + + !is_const + }) + } + + fn compose_child_references<'a, I: IntoIterator> + 'a>( + children: I, + ) -> Result + 'a, Diagnostics> { + let iter = children.into_iter().map(|type_tree| { + if let Some(children) = &type_tree.children { + let iter = Self::compose_child_references(children)?; + Ok(ChildRefIter::Iter(Box::new(iter))) + } else if type_tree.value_type == ValueType::Object { + let type_path = type_tree + .path + .as_deref() + .expect("Object TypePath must have type path, compose child references"); + + let rewritten_path = type_path.rewrite_path()?; + + Ok(ChildRefIter::Once(std::iter::once(SchemaReference { + name: quote! { String::from(< #rewritten_path as fastapi::ToSchema >::name().as_ref()) }, + tokens: quote! { <#rewritten_path as fastapi::PartialSchema>::schema() }, + references: quote !{ <#rewritten_path as fastapi::ToSchema>::schemas(schemas) }, + is_inline: false, + no_recursion: false, + })) + ) + } else { + Ok(ChildRefIter::Empty) + } + }).collect::, Diagnostics>>()? + .into_iter() + .flatten(); + + Ok(iter) + } +} + +impl ToTokens for ComponentSchema { + fn to_tokens(&self, tokens: &mut TokenStream) { + self.tokens.to_tokens(tokens); + } +} + +enum ChildRefIter<'c, T> { + Iter(Box + 'c>), + Once(std::iter::Once), + Empty, +} + +impl<'a, T> Iterator for ChildRefIter<'a, T> { + type Item = T; + + fn next(&mut self) -> Option { + match self { + Self::Iter(iter) => iter.next(), + Self::Once(once) => once.next(), + Self::Empty => None, + } + } + + fn size_hint(&self) -> (usize, Option) { + match self { + Self::Iter(iter) => iter.size_hint(), + Self::Once(once) => once.size_hint(), + Self::Empty => (0, None), + } + } +} + +#[cfg_attr(feature = "debug", derive(Debug))] +pub struct FlattenedMapSchema { + tokens: TokenStream, +} + +impl FlattenedMapSchema { + pub fn new( + ComponentSchemaProps { + container, + type_tree, + mut features, + description, + }: ComponentSchemaProps, + ) -> Result { + let mut tokens = TokenStream::new(); + let deprecated = pop_feature!(features => Feature::Deprecated(_)).try_to_token_stream()?; + + let example = features.pop_by(|feature| matches!(feature, Feature::Example(_))); + let nullable = pop_feature!(features => Feature::Nullable(_)); + let default = pop_feature!(features => Feature::Default(_)); + let default_tokens = as_tokens_or_diagnostics!(&default); + + // Maps are treated as generic objects with no named properties and + // additionalProperties denoting the type + // maps have 2 child schemas and we are interested the second one of them + // which is used to determine the additional properties + let schema_property = ComponentSchema::new(ComponentSchemaProps { + container, + type_tree: type_tree + .children + .as_ref() + .expect("ComponentSchema Map type should have children") + .get(1) + .expect("ComponentSchema Map type should have 2 child"), + features, + description: None, + })?; + let schema_tokens = schema_property.to_token_stream(); + + tokens.extend(quote! { + #schema_tokens + #description + #deprecated + #default_tokens + }); + + example.to_tokens(&mut tokens)?; + nullable.to_tokens(&mut tokens)?; + + Ok(Self { tokens }) + } +} + +impl ToTokensDiagnostics for FlattenedMapSchema { + fn to_tokens(&self, tokens: &mut TokenStream) -> Result<(), Diagnostics> { + self.tokens.to_tokens(tokens); + Ok(()) + } +} diff --git a/fastapi-gen/src/component/features.rs b/fastapi-gen/src/component/features.rs new file mode 100644 index 0000000..998f2bd --- /dev/null +++ b/fastapi-gen/src/component/features.rs @@ -0,0 +1,712 @@ +use std::{fmt::Display, mem}; + +use proc_macro2::{Ident, TokenStream}; +use quote::{quote, ToTokens}; +use syn::parse::ParseStream; + +use crate::{ + as_tokens_or_diagnostics, schema_type::SchemaType, Diagnostics, OptionExt, ToTokensDiagnostics, +}; + +use self::validators::{AboveZeroF64, AboveZeroUsize, IsNumber, IsString, IsVec, ValidatorChain}; + +use super::TypeTree; + +pub mod attributes; +pub mod validation; +pub mod validators; + +pub trait FeatureLike: Parse { + fn get_name() -> std::borrow::Cow<'static, str> + where + Self: Sized; +} + +macro_rules! impl_feature { + ( $( $name:literal => )? $( #[$meta:meta] )* $vis:vis $key:ident $ty:ident $( $tt:tt )* ) => { + $( #[$meta] )* + $vis $key $ty $( $tt )* + + impl $crate::features::FeatureLike for $ty { + fn get_name() -> std::borrow::Cow<'static, str> { + impl_feature!( @name $ty name: $( $name )* ) + } + } + + impl std::fmt::Display for $ty { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + let name = ::get_name(); + write!(f, "{name}", name = name.as_ref()) + } + } + }; + ( @name $ty:ident name: $name:literal ) => { + std::borrow::Cow::Borrowed($name) + }; + ( @name $ty:ident name: ) => { + { + let snake = $crate::component::serde::RenameRule::Snake; + let renamed = snake.rename_variant(stringify!($ty)); + std::borrow::Cow::Owned(renamed) + } + }; +} +use impl_feature; + +/// Define whether [`Feature`] variant is validatable or not +pub trait Validatable { + fn is_validatable(&self) -> bool { + false + } +} + +pub trait Validate: Validatable { + /// Perform validation check against schema type. + fn validate(&self, validator: impl validators::Validator) -> Option; +} + +pub trait Parse { + fn parse(input: ParseStream, attribute: Ident) -> syn::Result + where + Self: std::marker::Sized; +} + +#[cfg_attr(feature = "debug", derive(Debug))] +#[derive(Clone)] +pub enum Feature { + Example(attributes::Example), + Examples(attributes::Examples), + Default(attributes::Default), + Inline(attributes::Inline), + XmlAttr(attributes::XmlAttr), + Format(attributes::Format), + ValueType(attributes::ValueType), + WriteOnly(attributes::WriteOnly), + ReadOnly(attributes::ReadOnly), + Title(attributes::Title), + Nullable(attributes::Nullable), + Rename(attributes::Rename), + RenameAll(attributes::RenameAll), + Style(attributes::Style), + AllowReserved(attributes::AllowReserved), + Explode(attributes::Explode), + ParameterIn(attributes::ParameterIn), + IntoParamsNames(attributes::IntoParamsNames), + SchemaWith(attributes::SchemaWith), + Description(attributes::Description), + Deprecated(attributes::Deprecated), + As(attributes::As), + AdditionalProperties(attributes::AdditionalProperties), + Required(attributes::Required), + ContentEncoding(attributes::ContentEncoding), + ContentMediaType(attributes::ContentMediaType), + Discriminator(attributes::Discriminator), + Bound(attributes::Bound), + Ignore(attributes::Ignore), + NoRecursion(attributes::NoRecursion), + MultipleOf(validation::MultipleOf), + Maximum(validation::Maximum), + Minimum(validation::Minimum), + ExclusiveMaximum(validation::ExclusiveMaximum), + ExclusiveMinimum(validation::ExclusiveMinimum), + MaxLength(validation::MaxLength), + MinLength(validation::MinLength), + Pattern(validation::Pattern), + MaxItems(validation::MaxItems), + MinItems(validation::MinItems), + MaxProperties(validation::MaxProperties), + MinProperties(validation::MinProperties), +} + +impl Feature { + pub fn validate(&self, schema_type: &SchemaType, type_tree: &TypeTree) -> Option { + match self { + Feature::MultipleOf(multiple_of) => multiple_of.validate( + ValidatorChain::new(&IsNumber(schema_type)).next(&AboveZeroF64(&multiple_of.0)), + ), + Feature::Maximum(maximum) => maximum.validate(IsNumber(schema_type)), + Feature::Minimum(minimum) => minimum.validate(IsNumber(schema_type)), + Feature::ExclusiveMaximum(exclusive_maximum) => { + exclusive_maximum.validate(IsNumber(schema_type)) + } + Feature::ExclusiveMinimum(exclusive_minimum) => { + exclusive_minimum.validate(IsNumber(schema_type)) + } + Feature::MaxLength(max_length) => max_length.validate( + ValidatorChain::new(&IsString(schema_type)).next(&AboveZeroUsize(&max_length.0)), + ), + Feature::MinLength(min_length) => min_length.validate( + ValidatorChain::new(&IsString(schema_type)).next(&AboveZeroUsize(&min_length.0)), + ), + Feature::Pattern(pattern) => pattern.validate(IsString(schema_type)), + Feature::MaxItems(max_items) => max_items.validate( + ValidatorChain::new(&AboveZeroUsize(&max_items.0)).next(&IsVec(type_tree)), + ), + Feature::MinItems(min_items) => min_items.validate( + ValidatorChain::new(&AboveZeroUsize(&min_items.0)).next(&IsVec(type_tree)), + ), + unsupported => { + const SUPPORTED_VARIANTS: [&str; 10] = [ + "multiple_of", + "maximum", + "minimum", + "exclusive_maximum", + "exclusive_minimum", + "max_length", + "min_length", + "pattern", + "max_items", + "min_items", + ]; + panic!( + "Unsupported variant: `{unsupported}` for Validate::validate, expected one of: {variants}", + variants = SUPPORTED_VARIANTS.join(", ") + ) + } + } + } +} + +impl ToTokensDiagnostics for Feature { + fn to_tokens(&self, tokens: &mut proc_macro2::TokenStream) -> Result<(), Diagnostics> { + let feature = match &self { + Feature::Default(default) => quote! { .default(#default) }, + Feature::Example(example) => quote! { .example(Some(#example)) }, + Feature::Examples(examples) => quote! { .examples(#examples) }, + Feature::XmlAttr(xml) => quote! { .xml(Some(#xml)) }, + Feature::Format(format) => quote! { .format(Some(#format)) }, + Feature::WriteOnly(write_only) => quote! { .write_only(Some(#write_only)) }, + Feature::ReadOnly(read_only) => quote! { .read_only(Some(#read_only)) }, + Feature::Title(title) => quote! { .title(Some(#title)) }, + Feature::Nullable(_nullable) => return Err(Diagnostics::new("Nullable does not support `ToTokens`")), + Feature::Rename(rename) => rename.to_token_stream(), + Feature::Style(style) => quote! { .style(Some(#style)) }, + Feature::ParameterIn(parameter_in) => quote! { .parameter_in(#parameter_in) }, + Feature::MultipleOf(multiple_of) => quote! { .multiple_of(Some(#multiple_of)) }, + Feature::AllowReserved(allow_reserved) => { + quote! { .allow_reserved(Some(#allow_reserved)) } + } + Feature::Explode(explode) => quote! { .explode(Some(#explode)) }, + Feature::Maximum(maximum) => quote! { .maximum(Some(#maximum)) }, + Feature::Minimum(minimum) => quote! { .minimum(Some(#minimum)) }, + Feature::ExclusiveMaximum(exclusive_maximum) => { + quote! { .exclusive_maximum(Some(#exclusive_maximum)) } + } + Feature::ExclusiveMinimum(exclusive_minimum) => { + quote! { .exclusive_minimum(Some(#exclusive_minimum)) } + } + Feature::MaxLength(max_length) => quote! { .max_length(Some(#max_length)) }, + Feature::MinLength(min_length) => quote! { .min_length(Some(#min_length)) }, + Feature::Pattern(pattern) => quote! { .pattern(Some(#pattern)) }, + Feature::MaxItems(max_items) => quote! { .max_items(Some(#max_items)) }, + Feature::MinItems(min_items) => quote! { .min_items(Some(#min_items)) }, + Feature::MaxProperties(max_properties) => { + quote! { .max_properties(Some(#max_properties)) } + } + Feature::MinProperties(min_properties) => { + quote! { .max_properties(Some(#min_properties)) } + } + Feature::SchemaWith(schema_with) => schema_with.to_token_stream(), + Feature::Description(description) => quote! { .description(Some(#description)) }, + Feature::Deprecated(deprecated) => quote! { .deprecated(Some(#deprecated)) }, + Feature::AdditionalProperties(additional_properties) => { + quote! { .additional_properties(Some(#additional_properties)) } + } + Feature::ContentEncoding(content_encoding) => quote! { .content_encoding(#content_encoding) }, + Feature::ContentMediaType(content_media_type) => quote! { .content_media_type(#content_media_type) }, + Feature::Discriminator(discriminator) => quote! { .discriminator(Some(#discriminator)) }, + Feature::Bound(_) => { + // specially handled on generating impl blocks. + TokenStream::new() + } + Feature::RenameAll(_) => { + return Err(Diagnostics::new("RenameAll feature does not support `ToTokens`")) + } + Feature::ValueType(_) => { + return Err(Diagnostics::new("ValueType feature does not support `ToTokens`") + .help("ValueType is supposed to be used with `TypeTree` in same manner as a resolved struct/field type.")) + } + Feature::Inline(_) => { + // inline feature is ignored by `ToTokens` + TokenStream::new() + } + Feature::NoRecursion(_) => return Err(Diagnostics::new("NoRecursion does not support `ToTokens`")), + Feature::IntoParamsNames(_) => { + return Err(Diagnostics::new("Names feature does not support `ToTokens`") + .help("Names is only used with IntoParams to artificially give names for unnamed struct type `IntoParams`.")) + } + Feature::As(_) => { + return Err(Diagnostics::new("As does not support `ToTokens`")) + } + Feature::Required(required) => { + let name = ::get_name(); + quote! { .#name(#required) } + } + Feature::Ignore(_) => return Err(Diagnostics::new("Ignore does not support `ToTokens`")), + }; + + tokens.extend(feature); + + Ok(()) + } +} + +impl ToTokensDiagnostics for Option { + fn to_tokens(&self, tokens: &mut TokenStream) -> Result<(), Diagnostics> { + if let Some(this) = self { + this.to_tokens(tokens) + } else { + Ok(()) + } + } +} + +impl Display for Feature { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + match self { + Feature::Default(default) => default.fmt(f), + Feature::Example(example) => example.fmt(f), + Feature::Examples(examples) => examples.fmt(f), + Feature::XmlAttr(xml) => xml.fmt(f), + Feature::Format(format) => format.fmt(f), + Feature::WriteOnly(write_only) => write_only.fmt(f), + Feature::ReadOnly(read_only) => read_only.fmt(f), + Feature::Title(title) => title.fmt(f), + Feature::Nullable(nullable) => nullable.fmt(f), + Feature::Rename(rename) => rename.fmt(f), + Feature::Style(style) => style.fmt(f), + Feature::ParameterIn(parameter_in) => parameter_in.fmt(f), + Feature::AllowReserved(allow_reserved) => allow_reserved.fmt(f), + Feature::Explode(explode) => explode.fmt(f), + Feature::RenameAll(rename_all) => rename_all.fmt(f), + Feature::ValueType(value_type) => value_type.fmt(f), + Feature::Inline(inline) => inline.fmt(f), + Feature::IntoParamsNames(names) => names.fmt(f), + Feature::MultipleOf(multiple_of) => multiple_of.fmt(f), + Feature::Maximum(maximum) => maximum.fmt(f), + Feature::Minimum(minimum) => minimum.fmt(f), + Feature::ExclusiveMaximum(exclusive_maximum) => exclusive_maximum.fmt(f), + Feature::ExclusiveMinimum(exclusive_minimum) => exclusive_minimum.fmt(f), + Feature::MaxLength(max_length) => max_length.fmt(f), + Feature::MinLength(min_length) => min_length.fmt(f), + Feature::Pattern(pattern) => pattern.fmt(f), + Feature::MaxItems(max_items) => max_items.fmt(f), + Feature::MinItems(min_items) => min_items.fmt(f), + Feature::MaxProperties(max_properties) => max_properties.fmt(f), + Feature::MinProperties(min_properties) => min_properties.fmt(f), + Feature::SchemaWith(schema_with) => schema_with.fmt(f), + Feature::Description(description) => description.fmt(f), + Feature::Deprecated(deprecated) => deprecated.fmt(f), + Feature::As(as_feature) => as_feature.fmt(f), + Feature::AdditionalProperties(additional_properties) => additional_properties.fmt(f), + Feature::Required(required) => required.fmt(f), + Feature::ContentEncoding(content_encoding) => content_encoding.fmt(f), + Feature::ContentMediaType(content_media_type) => content_media_type.fmt(f), + Feature::Discriminator(discriminator) => discriminator.fmt(f), + Feature::Bound(bound) => bound.fmt(f), + Feature::Ignore(ignore) => ignore.fmt(f), + Feature::NoRecursion(no_recursion) => no_recursion.fmt(f), + } + } +} + +impl Validatable for Feature { + fn is_validatable(&self) -> bool { + match &self { + Feature::Default(default) => default.is_validatable(), + Feature::Example(example) => example.is_validatable(), + Feature::Examples(examples) => examples.is_validatable(), + Feature::XmlAttr(xml) => xml.is_validatable(), + Feature::Format(format) => format.is_validatable(), + Feature::WriteOnly(write_only) => write_only.is_validatable(), + Feature::ReadOnly(read_only) => read_only.is_validatable(), + Feature::Title(title) => title.is_validatable(), + Feature::Nullable(nullable) => nullable.is_validatable(), + Feature::Rename(rename) => rename.is_validatable(), + Feature::Style(style) => style.is_validatable(), + Feature::ParameterIn(parameter_in) => parameter_in.is_validatable(), + Feature::AllowReserved(allow_reserved) => allow_reserved.is_validatable(), + Feature::Explode(explode) => explode.is_validatable(), + Feature::RenameAll(rename_all) => rename_all.is_validatable(), + Feature::ValueType(value_type) => value_type.is_validatable(), + Feature::Inline(inline) => inline.is_validatable(), + Feature::IntoParamsNames(names) => names.is_validatable(), + Feature::MultipleOf(multiple_of) => multiple_of.is_validatable(), + Feature::Maximum(maximum) => maximum.is_validatable(), + Feature::Minimum(minimum) => minimum.is_validatable(), + Feature::ExclusiveMaximum(exclusive_maximum) => exclusive_maximum.is_validatable(), + Feature::ExclusiveMinimum(exclusive_minimum) => exclusive_minimum.is_validatable(), + Feature::MaxLength(max_length) => max_length.is_validatable(), + Feature::MinLength(min_length) => min_length.is_validatable(), + Feature::Pattern(pattern) => pattern.is_validatable(), + Feature::MaxItems(max_items) => max_items.is_validatable(), + Feature::MinItems(min_items) => min_items.is_validatable(), + Feature::MaxProperties(max_properties) => max_properties.is_validatable(), + Feature::MinProperties(min_properties) => min_properties.is_validatable(), + Feature::SchemaWith(schema_with) => schema_with.is_validatable(), + Feature::Description(description) => description.is_validatable(), + Feature::Deprecated(deprecated) => deprecated.is_validatable(), + Feature::As(as_feature) => as_feature.is_validatable(), + Feature::AdditionalProperties(additional_properties) => { + additional_properties.is_validatable() + } + Feature::Required(required) => required.is_validatable(), + Feature::ContentEncoding(content_encoding) => content_encoding.is_validatable(), + Feature::ContentMediaType(content_media_type) => content_media_type.is_validatable(), + Feature::Discriminator(discriminator) => discriminator.is_validatable(), + Feature::Bound(bound) => bound.is_validatable(), + Feature::Ignore(ignore) => ignore.is_validatable(), + Feature::NoRecursion(no_recursion) => no_recursion.is_validatable(), + } + } +} + +macro_rules! is_validatable { + ( $( $ty:path $( = $validatable:literal )? ),* ) => { + $( + impl Validatable for $ty { + $( + fn is_validatable(&self) -> bool { + $validatable + } + )? + } + )* + }; +} + +is_validatable! { + attributes::Default, + attributes::Example, + attributes::Examples, + attributes::XmlAttr, + attributes::Format, + attributes::WriteOnly, + attributes::ReadOnly, + attributes::Title, + attributes::Nullable, + attributes::Rename, + attributes::RenameAll, + attributes::Style, + attributes::ParameterIn, + attributes::AllowReserved, + attributes::Explode, + attributes::ValueType, + attributes::Inline, + attributes::IntoParamsNames, + attributes::SchemaWith, + attributes::Description, + attributes::Deprecated, + attributes::As, + attributes::AdditionalProperties, + attributes::Required, + attributes::ContentEncoding, + attributes::ContentMediaType, + attributes::Discriminator, + attributes::Bound, + attributes::Ignore, + attributes::NoRecursion, + validation::MultipleOf = true, + validation::Maximum = true, + validation::Minimum = true, + validation::ExclusiveMaximum = true, + validation::ExclusiveMinimum = true, + validation::MaxLength = true, + validation::MinLength = true, + validation::Pattern = true, + validation::MaxItems = true, + validation::MinItems = true, + validation::MaxProperties, + validation::MinProperties +} + +macro_rules! parse_features { + ($ident:ident as $( $feature:path ),*) => { + { + fn parse(input: syn::parse::ParseStream) -> syn::Result> { + let names = [$( ::get_name(), )* ]; + let mut features = Vec::::new(); + let attributes = names.join(", "); + + while !input.is_empty() { + let ident = input.parse::().or_else(|_| { + input.parse::().map(|as_| syn::Ident::new("as", as_.span)) + }).map_err(|error| { + syn::Error::new( + error.span(), + format!("unexpected attribute, expected any of: {attributes}, {error}"), + ) + })?; + let name = &*ident.to_string(); + + $( + if name == ::get_name() { + features.push(<$feature as crate::component::features::Parse>::parse(input, ident)?.into()); + if !input.is_empty() { + input.parse::()?; + } + continue; + } + )* + + if !names.contains(&std::borrow::Cow::Borrowed(name)) { + return Err(syn::Error::new(ident.span(), format!("unexpected attribute: {name}, expected any of: {attributes}"))) + } + } + + Ok(features) + } + + parse($ident)? + } + }; + (@as_ident $( $tt:tt )* ) => { + $( $tt )* + } +} + +pub(crate) use parse_features; + +pub trait IsInline { + fn is_inline(&self) -> bool; +} + +impl IsInline for Vec { + fn is_inline(&self) -> bool { + self.iter() + .find_map(|feature| match feature { + Feature::Inline(inline) if inline.0 => Some(inline), + _ => None, + }) + .is_some() + } +} + +pub trait ToTokensExt { + fn to_token_stream(&self) -> Result; +} + +impl ToTokensExt for Vec { + fn to_token_stream(&self) -> Result { + Ok(self + .iter() + .map(|feature| Ok(as_tokens_or_diagnostics!(feature))) + .collect::, Diagnostics>>()? + .into_iter() + .fold(TokenStream::new(), |mut tokens, item| { + item.to_tokens(&mut tokens); + tokens + })) + } +} + +pub trait FeaturesExt { + fn pop_by(&mut self, op: impl FnMut(&Feature) -> bool) -> Option; + + /// Extract [`XmlAttr`] feature for given `type_tree` if it has generic type [`GenericType::Vec`] + fn extract_vec_xml_feature( + &mut self, + type_tree: &TypeTree, + ) -> Result, Diagnostics>; +} + +impl FeaturesExt for Vec { + fn pop_by(&mut self, op: impl FnMut(&Feature) -> bool) -> Option { + self.iter() + .position(op) + .map(|index| self.swap_remove(index)) + } + + fn extract_vec_xml_feature( + &mut self, + type_tree: &TypeTree, + ) -> Result, Diagnostics> { + self.iter_mut() + .find_map(|feature| match feature { + Feature::XmlAttr(xml_feature) => { + match xml_feature.split_for_vec(type_tree) { + Ok((vec_xml, value_xml)) => { + // replace the original xml attribute with split value xml + if let Some(mut xml) = value_xml { + mem::swap(xml_feature, &mut xml) + } + + Some(Ok(vec_xml.map(Feature::XmlAttr))) + } + Err(diagnostics) => Some(Err(diagnostics)), + } + } + _ => None, + }) + .and_then_try(|value| value) + } +} + +impl FeaturesExt for Option> { + fn pop_by(&mut self, op: impl FnMut(&Feature) -> bool) -> Option { + self.as_mut().and_then(|features| features.pop_by(op)) + } + + fn extract_vec_xml_feature( + &mut self, + type_tree: &TypeTree, + ) -> Result, Diagnostics> { + self.as_mut() + .and_then_try(|features| features.extract_vec_xml_feature(type_tree)) + } +} + +/// Pull out a `Feature` from `Vec` of features by given match predicate. +/// This macro can be called in two forms demonstrated below. +/// ```text +/// let _: Option = pop_feature!(features => Feature::Inline(_)); +/// let _: Option = pop_feature!(feature => Feature::Inline(_) as Option); +/// ``` +/// +/// The `as ...` syntax can be used to directly convert the `Feature` instance to it's inner form. +macro_rules! pop_feature { + ($features:ident => $( $ty:tt )* ) => {{ + pop_feature!( @inner $features $( $ty )* ) + }}; + ( @inner $features:ident $ty:tt :: $tv:tt ( $t:pat ) $( $tt:tt)* ) => { + { + let f = $features.pop_by(|feature| matches!(feature, $ty :: $tv ($t) ) ); + pop_feature!( @rest f $( $tt )* ) + } + }; + ( @rest $feature:ident as $ty:ty ) => { + { + let inner: $ty = $feature.into_inner(); + inner + } + + }; + ( @rest $($tt:tt)* ) => { + $($tt)* + }; +} + +pub(crate) use pop_feature; + +pub trait IntoInner { + fn into_inner(self) -> T; +} + +macro_rules! impl_feature_into_inner { + ( $( $feat:ident :: $impl:ident , )* ) => { + $( + impl IntoInner> for Option { + fn into_inner(self) -> Option<$feat::$impl> { + self.and_then(|feature| match feature { + Feature::$impl(value) => Some(value), + _ => None, + }) + } + } + )* + }; +} + +impl_feature_into_inner! { + attributes::Example, + attributes::Examples, + attributes::Default, + attributes::Inline, + attributes::XmlAttr, + attributes::Format, + attributes::ValueType, + attributes::WriteOnly, + attributes::ReadOnly, + attributes::Title, + attributes::Nullable, + attributes::Rename, + attributes::RenameAll, + attributes::Style, + attributes::AllowReserved, + attributes::Explode, + attributes::ParameterIn, + attributes::IntoParamsNames, + attributes::SchemaWith, + attributes::Description, + attributes::Deprecated, + attributes::As, + attributes::Required, + attributes::AdditionalProperties, + attributes::Discriminator, + attributes::Bound, + attributes::Ignore, + attributes::NoRecursion, + validation::MultipleOf, + validation::Maximum, + validation::Minimum, + validation::ExclusiveMaximum, + validation::ExclusiveMinimum, + validation::MaxLength, + validation::MinLength, + validation::Pattern, + validation::MaxItems, + validation::MinItems, + validation::MaxProperties, + validation::MinProperties, +} + +macro_rules! impl_into_inner { + ($ident:ident) => { + impl crate::component::features::IntoInner> for $ident { + fn into_inner(self) -> Vec { + self.0 + } + } + + impl crate::component::features::IntoInner>> for Option<$ident> { + fn into_inner(self) -> Option> { + self.map(crate::component::features::IntoInner::into_inner) + } + } + }; +} + +pub(crate) use impl_into_inner; + +pub trait Merge: IntoInner> { + fn merge(self, from: T) -> Self; +} + +macro_rules! impl_merge { + ( $($ident:ident),* ) => { + $( + impl AsMut> for $ident { + fn as_mut(&mut self) -> &mut Vec { + &mut self.0 + } + } + + impl crate::component::features::Merge<$ident> for $ident { + fn merge(mut self, from: $ident) -> Self { + use $crate::component::features::IntoInner; + let a = self.as_mut(); + let mut b = from.into_inner(); + + a.append(&mut b); + + self + } + } + )* + }; +} + +pub(crate) use impl_merge; + +impl IntoInner> for Vec { + fn into_inner(self) -> Vec { + self + } +} + +impl Merge> for Vec { + fn merge(mut self, mut from: Vec) -> Self { + self.append(&mut from); + self + } +} diff --git a/fastapi-gen/src/component/features/attributes.rs b/fastapi-gen/src/component/features/attributes.rs new file mode 100644 index 0000000..53ef814 --- /dev/null +++ b/fastapi-gen/src/component/features/attributes.rs @@ -0,0 +1,1041 @@ +use std::mem; + +use proc_macro2::{Ident, TokenStream}; +use quote::ToTokens; +use syn::parse::ParseStream; +use syn::punctuated::Punctuated; +use syn::token::Paren; +use syn::{Error, LitStr, Token, TypePath, WherePredicate}; + +use crate::component::serde::RenameRule; +use crate::component::{schema, GenericType, TypeTree}; +use crate::parse_utils::{LitBoolOrExprPath, LitStrOrExpr}; +use crate::path::parameter::{self, ParameterStyle}; +use crate::schema_type::KnownFormat; +use crate::{parse_utils, AnyValue, Array, Diagnostics}; + +use super::{impl_feature, Feature, Parse}; +use quote::quote; + +impl_feature! { + #[derive(Clone)] + #[cfg_attr(feature = "debug", derive(Debug))] + pub struct Default(pub(crate) Option); +} + +impl Default { + pub fn new_default_trait(struct_ident: Ident, field_ident: syn::Member) -> Self { + Self(Some(AnyValue::new_default_trait(struct_ident, field_ident))) + } +} + +impl Parse for Default { + fn parse(input: syn::parse::ParseStream, _: proc_macro2::Ident) -> syn::Result { + if input.peek(syn::Token![=]) { + parse_utils::parse_next(input, || AnyValue::parse_any(input)).map(|any| Self(Some(any))) + } else { + Ok(Self(None)) + } + } +} + +impl ToTokens for Default { + fn to_tokens(&self, tokens: &mut proc_macro2::TokenStream) { + match &self.0 { + Some(inner) => tokens.extend(quote! {Some(#inner)}), + None => tokens.extend(quote! {None}), + } + } +} + +impl From for Feature { + fn from(value: self::Default) -> Self { + Feature::Default(value) + } +} + +impl_feature! { + #[derive(Clone)] + #[cfg_attr(feature = "debug", derive(Debug))] + pub struct Example(AnyValue); +} + +impl Parse for Example { + fn parse(input: syn::parse::ParseStream, _: Ident) -> syn::Result { + parse_utils::parse_next(input, || AnyValue::parse_any(input)).map(Self) + } +} + +impl ToTokens for Example { + fn to_tokens(&self, tokens: &mut proc_macro2::TokenStream) { + tokens.extend(self.0.to_token_stream()) + } +} + +impl From for Feature { + fn from(value: Example) -> Self { + Feature::Example(value) + } +} + +impl_feature! { + #[derive(Clone)] + #[cfg_attr(feature = "debug", derive(Debug))] + pub struct Examples(Vec); +} + +impl Parse for Examples { + fn parse(input: ParseStream, _: Ident) -> syn::Result + where + Self: std::marker::Sized, + { + let examples; + syn::parenthesized!(examples in input); + + Ok(Self( + Punctuated::::parse_terminated_with( + &examples, + AnyValue::parse_any, + )? + .into_iter() + .collect(), + )) + } +} + +impl ToTokens for Examples { + fn to_tokens(&self, tokens: &mut TokenStream) { + if !self.0.is_empty() { + let examples = Array::Borrowed(&self.0).to_token_stream(); + examples.to_tokens(tokens); + } + } +} + +impl From for Feature { + fn from(value: Examples) -> Self { + Feature::Examples(value) + } +} + +impl_feature! {"xml" => + #[derive(Default, Clone)] + #[cfg_attr(feature = "debug", derive(Debug))] + pub struct XmlAttr(schema::xml::XmlAttr); +} + +impl XmlAttr { + /// Split [`XmlAttr`] for [`GenericType::Vec`] returning tuple of [`XmlAttr`]s where first + /// one is for a vec and second one is for object field. + pub fn split_for_vec( + &mut self, + type_tree: &TypeTree, + ) -> Result<(Option, Option), Diagnostics> { + if matches!(type_tree.generic_type, Some(GenericType::Vec)) { + let mut value_xml = mem::take(self); + let vec_xml = schema::xml::XmlAttr::with_wrapped( + mem::take(&mut value_xml.0.is_wrapped), + mem::take(&mut value_xml.0.wrap_name), + ); + + Ok((Some(XmlAttr(vec_xml)), Some(value_xml))) + } else { + self.validate_xml(&self.0)?; + + Ok((None, Some(mem::take(self)))) + } + } + + #[inline] + fn validate_xml(&self, xml: &schema::xml::XmlAttr) -> Result<(), Diagnostics> { + if let Some(wrapped_ident) = xml.is_wrapped.as_ref() { + Err(Diagnostics::with_span( + wrapped_ident.span(), + "cannot use `wrapped` attribute in non slice field type", + ) + .help("Try removing `wrapped` attribute or make your field `Vec`")) + } else { + Ok(()) + } + } +} + +impl Parse for XmlAttr { + fn parse(input: syn::parse::ParseStream, _: Ident) -> syn::Result { + let xml; + syn::parenthesized!(xml in input); + xml.parse::().map(Self) + } +} + +impl ToTokens for XmlAttr { + fn to_tokens(&self, tokens: &mut proc_macro2::TokenStream) { + tokens.extend(self.0.to_token_stream()) + } +} + +impl From for Feature { + fn from(value: XmlAttr) -> Self { + Feature::XmlAttr(value) + } +} + +impl_feature! { + #[derive(Clone)] + #[cfg_attr(feature = "debug", derive(Debug))] + pub struct Format(KnownFormat); +} + +impl Parse for Format { + fn parse(input: syn::parse::ParseStream, _: Ident) -> syn::Result { + parse_utils::parse_next(input, || input.parse::()).map(Self) + } +} + +impl ToTokens for Format { + fn to_tokens(&self, tokens: &mut proc_macro2::TokenStream) { + tokens.extend(self.0.to_token_stream()) + } +} + +impl From for Feature { + fn from(value: Format) -> Self { + Feature::Format(value) + } +} + +impl_feature! { + #[derive(Clone, Copy)] + #[cfg_attr(feature = "debug", derive(Debug))] + pub struct WriteOnly(bool); +} + +impl Parse for WriteOnly { + fn parse(input: syn::parse::ParseStream, _: Ident) -> syn::Result { + parse_utils::parse_bool_or_true(input).map(Self) + } +} + +impl ToTokens for WriteOnly { + fn to_tokens(&self, tokens: &mut proc_macro2::TokenStream) { + tokens.extend(self.0.to_token_stream()) + } +} + +impl From for Feature { + fn from(value: WriteOnly) -> Self { + Feature::WriteOnly(value) + } +} + +impl_feature! { + #[derive(Clone, Copy)] + #[cfg_attr(feature = "debug", derive(Debug))] + pub struct ReadOnly(bool); +} + +impl Parse for ReadOnly { + fn parse(input: syn::parse::ParseStream, _: Ident) -> syn::Result { + parse_utils::parse_bool_or_true(input).map(Self) + } +} + +impl ToTokens for ReadOnly { + fn to_tokens(&self, tokens: &mut proc_macro2::TokenStream) { + tokens.extend(self.0.to_token_stream()) + } +} + +impl From for Feature { + fn from(value: ReadOnly) -> Self { + Feature::ReadOnly(value) + } +} + +impl_feature! { + #[derive(Clone)] + #[cfg_attr(feature = "debug", derive(Debug))] + pub struct Title(String); +} + +impl Parse for Title { + fn parse(input: syn::parse::ParseStream, _: Ident) -> syn::Result { + parse_utils::parse_next_literal_str(input).map(Self) + } +} + +impl ToTokens for Title { + fn to_tokens(&self, tokens: &mut proc_macro2::TokenStream) { + tokens.extend(self.0.to_token_stream()) + } +} + +impl From for Feature { + fn from(value: Title) -> Self { + Feature::Title(value) + } +} + +impl_feature! { + #[derive(Clone, Copy)] + #[cfg_attr(feature = "debug", derive(Debug))] + pub struct Nullable(bool); +} + +impl Nullable { + pub fn new() -> Self { + Self(true) + } + + pub fn value(&self) -> bool { + self.0 + } + + pub fn into_schema_type_token_stream(self) -> proc_macro2::TokenStream { + if self.0 { + quote! {fastapi::openapi::schema::Type::Null} + } else { + proc_macro2::TokenStream::new() + } + } +} + +impl Parse for Nullable { + fn parse(input: syn::parse::ParseStream, _: Ident) -> syn::Result<Self> { + parse_utils::parse_bool_or_true(input).map(Self) + } +} + +impl ToTokens for Nullable { + fn to_tokens(&self, tokens: &mut proc_macro2::TokenStream) { + tokens.extend(self.0.to_token_stream()) + } +} + +impl From<Nullable> for Feature { + fn from(value: Nullable) -> Self { + Feature::Nullable(value) + } +} + +impl_feature! { + #[cfg_attr(feature = "debug", derive(Debug))] + #[derive(Clone)] + pub struct Rename(String); +} + +impl Rename { + pub fn into_value(self) -> String { + self.0 + } +} + +impl Parse for Rename { + fn parse(input: syn::parse::ParseStream, _: Ident) -> syn::Result<Self> { + parse_utils::parse_next_literal_str(input).map(Self) + } +} + +impl ToTokens for Rename { + fn to_tokens(&self, tokens: &mut TokenStream) { + tokens.extend(self.0.to_token_stream()) + } +} + +impl From<Rename> for Feature { + fn from(value: Rename) -> Self { + Feature::Rename(value) + } +} + +impl_feature! { + #[cfg_attr(feature = "debug", derive(Debug))] + #[derive(Clone)] + pub struct RenameAll(RenameRule); + +} +impl RenameAll { + pub fn as_rename_rule(&self) -> &RenameRule { + &self.0 + } +} + +impl Parse for RenameAll { + fn parse(input: syn::parse::ParseStream, _: Ident) -> syn::Result<Self> { + let litstr = parse_utils::parse_next(input, || input.parse::<LitStr>())?; + + litstr + .value() + .parse::<RenameRule>() + .map_err(|error| syn::Error::new(litstr.span(), error.to_string())) + .map(Self) + } +} + +impl From<RenameAll> for Feature { + fn from(value: RenameAll) -> Self { + Feature::RenameAll(value) + } +} + +impl_feature! { + #[cfg_attr(feature = "debug", derive(Debug))] + #[derive(Clone)] + pub struct Style(ParameterStyle); +} + +impl From<ParameterStyle> for Style { + fn from(style: ParameterStyle) -> Self { + Self(style) + } +} + +impl Parse for Style { + fn parse(input: syn::parse::ParseStream, _: Ident) -> syn::Result<Self> { + parse_utils::parse_next(input, || input.parse::<ParameterStyle>().map(Self)) + } +} + +impl ToTokens for Style { + fn to_tokens(&self, tokens: &mut TokenStream) { + self.0.to_tokens(tokens) + } +} + +impl From<Style> for Feature { + fn from(value: Style) -> Self { + Feature::Style(value) + } +} + +impl_feature! { + #[cfg_attr(feature = "debug", derive(Debug))] + #[derive(Clone)] + pub struct ParameterIn(parameter::ParameterIn); +} + +impl Parse for ParameterIn { + fn parse(input: syn::parse::ParseStream, _: Ident) -> syn::Result<Self> { + parse_utils::parse_next(input, || input.parse::<parameter::ParameterIn>().map(Self)) + } +} + +impl ToTokens for ParameterIn { + fn to_tokens(&self, tokens: &mut TokenStream) { + self.0.to_tokens(tokens); + } +} + +impl From<ParameterIn> for Feature { + fn from(value: ParameterIn) -> Self { + Feature::ParameterIn(value) + } +} + +impl_feature! { + #[cfg_attr(feature = "debug", derive(Debug))] + #[derive(Clone)] + pub struct AllowReserved(bool); +} + +impl Parse for AllowReserved { + fn parse(input: syn::parse::ParseStream, _: Ident) -> syn::Result<Self> { + parse_utils::parse_bool_or_true(input).map(Self) + } +} + +impl ToTokens for AllowReserved { + fn to_tokens(&self, tokens: &mut TokenStream) { + self.0.to_tokens(tokens) + } +} + +impl From<AllowReserved> for Feature { + fn from(value: AllowReserved) -> Self { + Feature::AllowReserved(value) + } +} + +impl_feature! { + #[cfg_attr(feature = "debug", derive(Debug))] + #[derive(Clone)] + pub struct Explode(bool); +} + +impl Parse for Explode { + fn parse(input: syn::parse::ParseStream, _: Ident) -> syn::Result<Self> { + parse_utils::parse_bool_or_true(input).map(Self) + } +} + +impl ToTokens for Explode { + fn to_tokens(&self, tokens: &mut TokenStream) { + self.0.to_tokens(tokens) + } +} + +impl From<Explode> for Feature { + fn from(value: Explode) -> Self { + Feature::Explode(value) + } +} + +impl_feature! { + #[derive(Clone)] + #[cfg_attr(feature = "debug", derive(Debug))] + pub struct ValueType(syn::Type); +} + +impl ValueType { + /// Create [`TypeTree`] from current [`syn::Type`]. + pub fn as_type_tree(&self) -> Result<TypeTree, Diagnostics> { + TypeTree::from_type(&self.0) + } +} + +impl Parse for ValueType { + fn parse(input: syn::parse::ParseStream, _: Ident) -> syn::Result<Self> { + parse_utils::parse_next(input, || input.parse::<syn::Type>()).map(Self) + } +} + +impl From<ValueType> for Feature { + fn from(value: ValueType) -> Self { + Feature::ValueType(value) + } +} + +impl_feature! { + #[derive(Clone)] + #[cfg_attr(feature = "debug", derive(Debug))] + pub struct Inline(pub(super) bool); +} + +impl Parse for Inline { + fn parse(input: syn::parse::ParseStream, _: Ident) -> syn::Result<Self> { + parse_utils::parse_bool_or_true(input).map(Self) + } +} + +impl From<bool> for Inline { + fn from(value: bool) -> Self { + Inline(value) + } +} + +impl From<Inline> for Feature { + fn from(value: Inline) -> Self { + Feature::Inline(value) + } +} + +impl_feature! {"names" => + /// Specify names of unnamed fields with `names(...) attribute for `IntoParams` derive. + #[cfg_attr(feature = "debug", derive(Debug))] + #[derive(Clone)] + pub struct IntoParamsNames(Vec<String>); +} + +impl IntoParamsNames { + pub fn into_values(self) -> Vec<String> { + self.0 + } +} + +impl Parse for IntoParamsNames { + fn parse(input: syn::parse::ParseStream, _: Ident) -> syn::Result<Self> { + Ok(Self( + parse_utils::parse_comma_separated_within_parenthesis::<LitStr>(input)? + .iter() + .map(LitStr::value) + .collect(), + )) + } +} + +impl From<IntoParamsNames> for Feature { + fn from(value: IntoParamsNames) -> Self { + Feature::IntoParamsNames(value) + } +} + +impl_feature! { + #[cfg_attr(feature = "debug", derive(Debug))] + #[derive(Clone)] + pub struct SchemaWith(TypePath); +} + +impl Parse for SchemaWith { + fn parse(input: ParseStream, _: Ident) -> syn::Result<Self> { + parse_utils::parse_next(input, || input.parse::<TypePath>().map(Self)) + } +} + +impl ToTokens for SchemaWith { + fn to_tokens(&self, tokens: &mut TokenStream) { + let path = &self.0; + tokens.extend(quote! { + #path() + }) + } +} + +impl From<SchemaWith> for Feature { + fn from(value: SchemaWith) -> Self { + Feature::SchemaWith(value) + } +} + +impl_feature! { + #[cfg_attr(feature = "debug", derive(Debug))] + #[derive(Clone)] + pub struct Description(parse_utils::LitStrOrExpr); +} + +impl Parse for Description { + fn parse(input: ParseStream, _: Ident) -> syn::Result<Self> + where + Self: std::marker::Sized, + { + parse_utils::parse_next_literal_str_or_expr(input).map(Self) + } +} + +impl ToTokens for Description { + fn to_tokens(&self, tokens: &mut TokenStream) { + self.0.to_tokens(tokens); + } +} + +impl From<String> for Description { + fn from(value: String) -> Self { + Self(value.into()) + } +} + +impl From<Description> for Feature { + fn from(value: Description) -> Self { + Self::Description(value) + } +} + +impl_feature! { + /// Deprecated feature parsed from macro attributes. + /// + /// This feature supports only syntax parsed from fastapi specific macro attributes, it does not + /// support Rust `#[deprecated]` attribute. + #[cfg_attr(feature = "debug", derive(Debug))] + #[derive(Clone)] + pub struct Deprecated(bool); +} + +impl Parse for Deprecated { + fn parse(input: ParseStream, _: Ident) -> syn::Result<Self> + where + Self: std::marker::Sized, + { + parse_utils::parse_bool_or_true(input).map(Self) + } +} + +impl ToTokens for Deprecated { + fn to_tokens(&self, tokens: &mut TokenStream) { + let deprecated: crate::Deprecated = self.0.into(); + deprecated.to_tokens(tokens); + } +} + +impl From<Deprecated> for Feature { + fn from(value: Deprecated) -> Self { + Self::Deprecated(value) + } +} + +impl From<bool> for Deprecated { + fn from(value: bool) -> Self { + Self(value) + } +} + +impl_feature! { + #[cfg_attr(feature = "debug", derive(Debug))] + #[derive(Clone)] + pub struct As(pub TypePath); +} + +impl As { + /// Returns this `As` attribute type path formatted as string supported by OpenAPI spec whereas + /// double colons (::) are replaced with dot (.). + pub fn to_schema_formatted_string(&self) -> String { + // See: https://github.com/nxpkg/fastapi/pull/187#issuecomment-1173101405 + // :: are not officially supported in the spec + self.0 + .path + .segments + .iter() + .map(|segment| segment.ident.to_string()) + .collect::<Vec<_>>() + .join(".") + } +} + +impl Parse for As { + fn parse(input: ParseStream, _: Ident) -> syn::Result<Self> + where + Self: std::marker::Sized, + { + parse_utils::parse_next(input, || input.parse()).map(Self) + } +} + +impl From<As> for Feature { + fn from(value: As) -> Self { + Self::As(value) + } +} + +impl_feature! { + #[cfg_attr(feature = "debug", derive(Debug))] + #[derive(Clone)] + pub struct AdditionalProperties(bool); +} + +impl Parse for AdditionalProperties { + fn parse(input: ParseStream, _: Ident) -> syn::Result<Self> + where + Self: std::marker::Sized, + { + parse_utils::parse_bool_or_true(input).map(Self) + } +} + +impl ToTokens for AdditionalProperties { + fn to_tokens(&self, tokens: &mut TokenStream) { + let additional_properties = &self.0; + tokens.extend(quote!( + fastapi::openapi::schema::AdditionalProperties::FreeForm( + #additional_properties + ) + )) + } +} + +impl From<AdditionalProperties> for Feature { + fn from(value: AdditionalProperties) -> Self { + Self::AdditionalProperties(value) + } +} + +impl_feature! { + #[derive(Clone)] + #[cfg_attr(feature = "debug", derive(Debug))] + pub struct Required(pub bool); +} + +impl Required { + pub fn is_true(&self) -> bool { + self.0 + } +} + +impl Parse for Required { + fn parse(input: ParseStream, _: Ident) -> syn::Result<Self> + where + Self: std::marker::Sized, + { + parse_utils::parse_bool_or_true(input).map(Self) + } +} + +impl ToTokens for Required { + fn to_tokens(&self, tokens: &mut TokenStream) { + self.0.to_tokens(tokens) + } +} + +impl From<crate::Required> for Required { + fn from(value: crate::Required) -> Self { + if value == crate::Required::True { + Self(true) + } else { + Self(false) + } + } +} + +impl From<bool> for Required { + fn from(value: bool) -> Self { + Self(value) + } +} + +impl From<Required> for Feature { + fn from(value: Required) -> Self { + Self::Required(value) + } +} + +impl_feature! { + #[derive(Clone)] + #[cfg_attr(feature = "debug", derive(Debug))] + pub struct ContentEncoding(String); +} + +impl Parse for ContentEncoding { + fn parse(input: ParseStream, _: Ident) -> syn::Result<Self> + where + Self: std::marker::Sized, + { + parse_utils::parse_next_literal_str(input).map(Self) + } +} + +impl ToTokens for ContentEncoding { + fn to_tokens(&self, tokens: &mut TokenStream) { + self.0.to_tokens(tokens); + } +} + +impl From<ContentEncoding> for Feature { + fn from(value: ContentEncoding) -> Self { + Self::ContentEncoding(value) + } +} + +impl_feature! { + #[derive(Clone)] + #[cfg_attr(feature = "debug", derive(Debug))] + pub struct ContentMediaType(String); +} + +impl Parse for ContentMediaType { + fn parse(input: ParseStream, _: Ident) -> syn::Result<Self> + where + Self: std::marker::Sized, + { + parse_utils::parse_next_literal_str(input).map(Self) + } +} + +impl ToTokens for ContentMediaType { + fn to_tokens(&self, tokens: &mut TokenStream) { + self.0.to_tokens(tokens); + } +} + +impl From<ContentMediaType> for Feature { + fn from(value: ContentMediaType) -> Self { + Self::ContentMediaType(value) + } +} + +// discriminator = ... +// discriminator(property_name = ..., mapping( +// (value = ...), +// (value2 = ...) +// )) +impl_feature! { + #[derive(Clone)] + #[cfg_attr(feature = "debug", derive(Debug))] + pub struct Discriminator(LitStrOrExpr, Punctuated<(LitStrOrExpr, LitStrOrExpr), Token![,]>, Ident); +} + +impl Discriminator { + fn new(attribute: Ident) -> Self { + Self(LitStrOrExpr::default(), Punctuated::default(), attribute) + } + + pub fn get_attribute(&self) -> &Ident { + &self.2 + } +} + +impl Parse for Discriminator { + fn parse(input: ParseStream, attribute: Ident) -> syn::Result<Self> + where + Self: std::marker::Sized, + { + let lookahead = input.lookahead1(); + if lookahead.peek(Token![=]) { + parse_utils::parse_next_literal_str_or_expr(input) + .map(|property_name| Self(property_name, Punctuated::new(), attribute)) + } else if lookahead.peek(Paren) { + let discriminator_stream; + syn::parenthesized!(discriminator_stream in input); + + let mut discriminator = Discriminator::new(attribute); + + while !discriminator_stream.is_empty() { + let property = discriminator_stream.parse::<Ident>()?; + let name = &*property.to_string(); + + match name { + "property_name" => { + discriminator.0 = + parse_utils::parse_next_literal_str_or_expr(&discriminator_stream)? + } + "mapping" => { + let mapping_stream; + syn::parenthesized!(mapping_stream in &discriminator_stream); + let mappings: Punctuated<(LitStrOrExpr, LitStrOrExpr), Token![,]> = + Punctuated::parse_terminated_with(&mapping_stream, |input| { + let inner; + syn::parenthesized!(inner in input); + + let key = inner.parse::<LitStrOrExpr>()?; + inner.parse::<Token![=]>()?; + let value = inner.parse::<LitStrOrExpr>()?; + + Ok((key, value)) + })?; + discriminator.1 = mappings; + } + unexpected => { + return Err(Error::new( + property.span(), + format!( + "unexpected identifier {}, expected any of: property_name, mapping", + unexpected + ), + )) + } + } + + if !discriminator_stream.is_empty() { + discriminator_stream.parse::<Token![,]>()?; + } + } + + Ok(discriminator) + } else { + Err(lookahead.error()) + } + } +} + +impl ToTokens for Discriminator { + fn to_tokens(&self, tokens: &mut TokenStream) { + let Discriminator(property_name, mapping, _) = self; + + struct Mapping<'m>(&'m LitStrOrExpr, &'m LitStrOrExpr); + + impl ToTokens for Mapping<'_> { + fn to_tokens(&self, tokens: &mut TokenStream) { + let Mapping(property_name, value) = *self; + + tokens.extend(quote! { + (#property_name, #value) + }) + } + } + + let discriminator = if !mapping.is_empty() { + let mapping = mapping + .iter() + .map(|(key, value)| Mapping(key, value)) + .collect::<Array<Mapping>>(); + + quote! { + fastapi::openapi::schema::Discriminator::with_mapping(#property_name, #mapping) + } + } else { + quote! { + fastapi::openapi::schema::Discriminator::new(#property_name) + } + }; + + discriminator.to_tokens(tokens); + } +} + +impl From<Discriminator> for Feature { + fn from(value: Discriminator) -> Self { + Self::Discriminator(value) + } +} + +// bound = "GenericTy: Trait" +impl_feature! { + #[derive(Clone)] + #[cfg_attr(feature = "debug", derive(Debug))] + pub struct Bound(pub(crate) Punctuated<WherePredicate, Token![,]>); +} + +impl Parse for Bound { + fn parse(input: syn::parse::ParseStream, _: Ident) -> syn::Result<Self> { + let litstr = parse_utils::parse_next(input, || input.parse::<LitStr>())?; + let bounds = + syn::parse::Parser::parse_str(<Punctuated<_, _>>::parse_terminated, &litstr.value()) + .map_err(|err| syn::Error::new(litstr.span(), err.to_string()))?; + Ok(Self(bounds)) + } +} + +impl ToTokens for Bound { + fn to_tokens(&self, tokens: &mut proc_macro2::TokenStream) { + tokens.extend(self.0.to_token_stream()) + } +} + +impl From<Bound> for Feature { + fn from(value: Bound) -> Self { + Feature::Bound(value) + } +} + +impl_feature! { + /// Ignore feature parsed from macro attributes. + #[derive(Clone)] + #[cfg_attr(feature = "debug", derive(Debug))] + pub struct Ignore(pub LitBoolOrExprPath); +} + +impl Parse for Ignore { + fn parse(input: syn::parse::ParseStream, _: Ident) -> syn::Result<Self> + where + Self: std::marker::Sized, + { + parse_utils::parse_next_literal_bool_or_call(input).map(Self) + } +} + +impl ToTokens for Ignore { + fn to_tokens(&self, tokens: &mut proc_macro2::TokenStream) { + tokens.extend(self.0.to_token_stream()) + } +} + +impl From<Ignore> for Feature { + fn from(value: Ignore) -> Self { + Self::Ignore(value) + } +} + +impl From<bool> for Ignore { + fn from(value: bool) -> Self { + Self(value.into()) + } +} + +// Nothing to parse, it is considered to be set when attribute itself is parsed via +// `parse_features!`. +impl_feature! { + #[derive(Clone)] + #[cfg_attr(feature = "debug", derive(Debug))] + pub struct NoRecursion; +} + +impl Parse for NoRecursion { + fn parse(_: ParseStream, _: Ident) -> syn::Result<Self> + where + Self: std::marker::Sized, + { + Ok(Self) + } +} + +impl From<NoRecursion> for Feature { + fn from(value: NoRecursion) -> Self { + Self::NoRecursion(value) + } +} diff --git a/fastapi-gen/src/component/features/validation.rs b/fastapi-gen/src/component/features/validation.rs new file mode 100644 index 0000000..27ae7fe --- /dev/null +++ b/fastapi-gen/src/component/features/validation.rs @@ -0,0 +1,520 @@ +use std::str::FromStr; + +use proc_macro2::{Ident, Literal, Span, TokenStream, TokenTree}; +use quote::{quote, ToTokens}; +use syn::parse::ParseStream; +use syn::LitStr; + +use crate::{parse_utils, Diagnostics}; + +use super::validators::Validator; +use super::{impl_feature, Feature, Parse, Validate}; + +#[inline] +fn from_str<T: FromStr>(number: &str, span: Span) -> syn::Result<T> +where + <T as std::str::FromStr>::Err: std::fmt::Display, +{ + T::from_str(number).map_err(|error| syn::Error::new(span, error)) +} + +#[derive(Clone)] +#[cfg_attr(feature = "debug", derive(Debug))] +pub struct NumberValue { + minus: bool, + pub lit: Literal, +} + +impl NumberValue { + pub fn try_from_str<T>(&self) -> syn::Result<T> + where + T: FromStr, + <T as std::str::FromStr>::Err: std::fmt::Display, + { + let number = if self.minus { + format!("-{}", &self.lit) + } else { + self.lit.to_string() + }; + + let parsed = from_str::<T>(&number, self.lit.span())?; + Ok(parsed) + } +} + +impl syn::parse::Parse for NumberValue { + fn parse(input: ParseStream) -> syn::Result<Self> { + let mut minus = false; + let result = input.step(|cursor| { + let mut rest = *cursor; + + while let Some((tt, next)) = rest.token_tree() { + match &tt { + TokenTree::Punct(punct) if punct.as_char() == '-' => { + minus = true; + } + TokenTree::Literal(lit) => return Ok((lit.clone(), next)), + _ => (), + } + rest = next; + } + Err(cursor.error("no `literal` value found after this point")) + })?; + + Ok(Self { minus, lit: result }) + } +} + +impl ToTokens for NumberValue { + fn to_tokens(&self, tokens: &mut TokenStream) { + let punct = if self.minus { Some(quote! {-}) } else { None }; + let lit = &self.lit; + + tokens.extend(quote! { + #punct #lit + }) + } +} + +#[inline] +fn parse_next_number_value(input: ParseStream) -> syn::Result<NumberValue> { + use syn::parse::Parse; + parse_utils::parse_next(input, || NumberValue::parse(input)) +} + +impl_feature! { + #[cfg_attr(feature = "debug", derive(Debug))] + #[derive(Clone)] + pub struct MultipleOf(pub(super) NumberValue, Ident); +} + +impl Validate for MultipleOf { + fn validate(&self, validator: impl Validator) -> Option<Diagnostics> { + match validator.is_valid() { + Err(error) => Some(Diagnostics::with_span(self.1.span(), format!( "`multiple_of` error: {}", error)) + .help("See more details: `http://json-schema.org/draft/2020-12/json-schema-validation.html#name-multipleof`")), + _ => None + } + } +} + +impl Parse for MultipleOf { + fn parse(input: ParseStream, ident: Ident) -> syn::Result<Self> { + parse_next_number_value(input).map(|number| Self(number, ident)) + } +} + +impl ToTokens for MultipleOf { + fn to_tokens(&self, tokens: &mut TokenStream) { + self.0.to_tokens(tokens); + } +} + +impl From<MultipleOf> for Feature { + fn from(value: MultipleOf) -> Self { + Feature::MultipleOf(value) + } +} + +impl_feature! { + #[cfg_attr(feature = "debug", derive(Debug))] + #[derive(Clone)] + pub struct Maximum(pub(super) NumberValue, Ident); +} + +impl Validate for Maximum { + fn validate(&self, validator: impl Validator) -> Option<Diagnostics> { + match validator.is_valid() { + Err(error) => Some(Diagnostics::with_span(self.1.span(), format!("`maximum` error: {}", error)) + .help("See more details: `http://json-schema.org/draft/2020-12/json-schema-validation.html#name-maximum`")), + _ => None, + } + } +} + +impl Parse for Maximum { + fn parse(input: ParseStream, ident: Ident) -> syn::Result<Self> + where + Self: Sized, + { + parse_next_number_value(input).map(|number| Self(number, ident)) + } +} + +impl ToTokens for Maximum { + fn to_tokens(&self, tokens: &mut TokenStream) { + self.0.to_tokens(tokens); + } +} + +impl From<Maximum> for Feature { + fn from(value: Maximum) -> Self { + Feature::Maximum(value) + } +} + +impl_feature! { + #[cfg_attr(feature = "debug", derive(Debug))] + #[derive(Clone)] + pub struct Minimum(NumberValue, Ident); +} + +impl Minimum { + pub fn new(value: f64, span: Span) -> Self { + Self( + NumberValue { + minus: value < 0.0, + lit: Literal::f64_suffixed(value), + }, + Ident::new("empty", span), + ) + } +} + +impl Validate for Minimum { + fn validate(&self, validator: impl Validator) -> Option<Diagnostics> { + match validator.is_valid() { + Err(error) => Some( + Diagnostics::with_span(self.1.span(), format!("`minimum` error: {}", error)) + .help("See more details: `http://json-schema.org/draft/2020-12/json-schema-validation.html#name-minimum`") + ), + _ => None, + } + } +} + +impl Parse for Minimum { + fn parse(input: ParseStream, ident: Ident) -> syn::Result<Self> + where + Self: Sized, + { + parse_next_number_value(input).map(|number| Self(number, ident)) + } +} + +impl ToTokens for Minimum { + fn to_tokens(&self, tokens: &mut TokenStream) { + self.0.to_tokens(tokens); + } +} + +impl From<Minimum> for Feature { + fn from(value: Minimum) -> Self { + Feature::Minimum(value) + } +} + +impl_feature! { + #[cfg_attr(feature = "debug", derive(Debug))] + #[derive(Clone)] + pub struct ExclusiveMaximum(NumberValue, Ident); +} + +impl Validate for ExclusiveMaximum { + fn validate(&self, validator: impl Validator) -> Option<Diagnostics> { + match validator.is_valid() { + Err(error) => Some(Diagnostics::with_span(self.1.span(), format!("`exclusive_maximum` error: {}", error)) + .help("See more details: `http://json-schema.org/draft/2020-12/json-schema-validation.html#name-exclusivemaximum`")), + _ => None, + } + } +} + +impl Parse for ExclusiveMaximum { + fn parse(input: ParseStream, ident: Ident) -> syn::Result<Self> + where + Self: Sized, + { + parse_next_number_value(input).map(|number| Self(number, ident)) + } +} + +impl ToTokens for ExclusiveMaximum { + fn to_tokens(&self, tokens: &mut TokenStream) { + self.0.to_tokens(tokens); + } +} + +impl From<ExclusiveMaximum> for Feature { + fn from(value: ExclusiveMaximum) -> Self { + Feature::ExclusiveMaximum(value) + } +} + +impl_feature! { + #[cfg_attr(feature = "debug", derive(Debug))] + #[derive(Clone)] + pub struct ExclusiveMinimum(NumberValue, Ident); +} + +impl Validate for ExclusiveMinimum { + fn validate(&self, validator: impl Validator) -> Option<Diagnostics> { + match validator.is_valid() { + Err(error) => Some(Diagnostics::with_span(self.1.span(), format!("`exclusive_minimum` error: {}", error)) + .help("See more details: `http://json-schema.org/draft/2020-12/json-schema-validation.html#name-exclusiveminimum`")), + _ => None, + } + } +} + +impl Parse for ExclusiveMinimum { + fn parse(input: ParseStream, ident: Ident) -> syn::Result<Self> + where + Self: Sized, + { + parse_next_number_value(input).map(|number| Self(number, ident)) + } +} + +impl ToTokens for ExclusiveMinimum { + fn to_tokens(&self, tokens: &mut TokenStream) { + self.0.to_tokens(tokens); + } +} + +impl From<ExclusiveMinimum> for Feature { + fn from(value: ExclusiveMinimum) -> Self { + Feature::ExclusiveMinimum(value) + } +} + +impl_feature! { + #[cfg_attr(feature = "debug", derive(Debug))] + #[derive(Clone)] + pub struct MaxLength(pub(super) NumberValue, Ident); +} + +impl Validate for MaxLength { + fn validate(&self, validator: impl Validator) -> Option<Diagnostics> { + match validator.is_valid() { + Err(error) => Some(Diagnostics::with_span(self.1.span(), format!("`max_length` error: {}", error)) + .help("See more details: `http://json-schema.org/draft/2020-12/json-schema-validation.html#name-maxlength`")), + _ => None, + } + } +} + +impl Parse for MaxLength { + fn parse(input: ParseStream, ident: Ident) -> syn::Result<Self> + where + Self: Sized, + { + parse_next_number_value(input).map(|number| Self(number, ident)) + } +} + +impl ToTokens for MaxLength { + fn to_tokens(&self, tokens: &mut TokenStream) { + self.0.to_tokens(tokens); + } +} + +impl From<MaxLength> for Feature { + fn from(value: MaxLength) -> Self { + Feature::MaxLength(value) + } +} + +impl_feature! { + #[cfg_attr(feature = "debug", derive(Debug))] + #[derive(Clone)] + pub struct MinLength(pub(super) NumberValue, Ident); +} + +impl Validate for MinLength { + fn validate(&self, validator: impl Validator) -> Option<Diagnostics> { + match validator.is_valid() { + Err(error) => Some(Diagnostics::with_span(self.1.span(), format!("`min_length` error: {}", error)) + .help("See more details: `http://json-schema.org/draft/2020-12/json-schema-validation.html#name-minlength`")), + _ => None, + } + } +} + +impl Parse for MinLength { + fn parse(input: ParseStream, ident: Ident) -> syn::Result<Self> + where + Self: Sized, + { + parse_next_number_value(input).map(|number| Self(number, ident)) + } +} + +impl ToTokens for MinLength { + fn to_tokens(&self, tokens: &mut TokenStream) { + self.0.to_tokens(tokens); + } +} + +impl From<MinLength> for Feature { + fn from(value: MinLength) -> Self { + Feature::MinLength(value) + } +} + +impl_feature! { + #[cfg_attr(feature = "debug", derive(Debug))] + #[derive(Clone)] + pub struct Pattern(String, Ident); +} + +impl Validate for Pattern { + fn validate(&self, validator: impl Validator) -> Option<Diagnostics> { + match validator.is_valid() { + Err(error) => Some(Diagnostics::with_span(self.1.span(), format!("`pattern` error: {}", error)) + .help("See more details: `http://json-schema.org/draft/2020-12/json-schema-validation.html#name-pattern`") + ), + _ => None, + } + } +} + +impl Parse for Pattern { + fn parse(input: ParseStream, ident: Ident) -> syn::Result<Self> + where + Self: Sized, + { + parse_utils::parse_next(input, || input.parse::<LitStr>()) + .map(|pattern| Self(pattern.value(), ident)) + } +} + +impl ToTokens for Pattern { + fn to_tokens(&self, tokens: &mut TokenStream) { + self.0.to_tokens(tokens); + } +} + +impl From<Pattern> for Feature { + fn from(value: Pattern) -> Self { + Feature::Pattern(value) + } +} + +impl_feature! { + #[cfg_attr(feature = "debug", derive(Debug))] + #[derive(Clone)] + pub struct MaxItems(pub(super) NumberValue, Ident); +} + +impl Validate for MaxItems { + fn validate(&self, validator: impl Validator) -> Option<Diagnostics> { + match validator.is_valid() { + Err(error) => Some(Diagnostics::with_span(self.1.span(), format!("`max_items` error: {}", error)) + .help("See more details: `http://json-schema.org/draft/2020-12/json-schema-validation.html#name-maxitems")), + _ => None, + } + } +} + +impl Parse for MaxItems { + fn parse(input: ParseStream, ident: Ident) -> syn::Result<Self> + where + Self: Sized, + { + parse_next_number_value(input).map(|number| Self(number, ident)) + } +} + +impl ToTokens for MaxItems { + fn to_tokens(&self, tokens: &mut TokenStream) { + self.0.to_tokens(tokens); + } +} + +impl From<MaxItems> for Feature { + fn from(value: MaxItems) -> Self { + Feature::MaxItems(value) + } +} + +impl_feature! { + #[cfg_attr(feature = "debug", derive(Debug))] + #[derive(Clone)] + pub struct MinItems(pub(super) NumberValue, Ident); +} + +impl Validate for MinItems { + fn validate(&self, validator: impl Validator) -> Option<Diagnostics> { + match validator.is_valid() { + Err(error) => Some(Diagnostics::with_span(self.1.span(), format!("`min_items` error: {}", error)) + .help("See more details: `http://json-schema.org/draft/2020-12/json-schema-validation.html#name-minitems")), + _ => None, + } + } +} + +impl Parse for MinItems { + fn parse(input: ParseStream, ident: Ident) -> syn::Result<Self> + where + Self: Sized, + { + parse_next_number_value(input).map(|number| Self(number, ident)) + } +} + +impl ToTokens for MinItems { + fn to_tokens(&self, tokens: &mut TokenStream) { + self.0.to_tokens(tokens); + } +} + +impl From<MinItems> for Feature { + fn from(value: MinItems) -> Self { + Feature::MinItems(value) + } +} + +impl_feature! { + #[cfg_attr(feature = "debug", derive(Debug))] + #[derive(Clone)] + pub struct MaxProperties(NumberValue, ()); +} + +impl Parse for MaxProperties { + fn parse(input: ParseStream, _ident: Ident) -> syn::Result<Self> + where + Self: Sized, + { + parse_next_number_value(input).map(|number| Self(number, ())) + } +} + +impl ToTokens for MaxProperties { + fn to_tokens(&self, tokens: &mut TokenStream) { + self.0.to_tokens(tokens); + } +} + +impl From<MaxProperties> for Feature { + fn from(value: MaxProperties) -> Self { + Feature::MaxProperties(value) + } +} + +impl_feature! { + #[cfg_attr(feature = "debug", derive(Debug))] + #[derive(Clone)] + pub struct MinProperties(NumberValue, ()); +} + +impl Parse for MinProperties { + fn parse(input: ParseStream, _ident: Ident) -> syn::Result<Self> + where + Self: Sized, + { + parse_next_number_value(input).map(|number| Self(number, ())) + } +} + +impl ToTokens for MinProperties { + fn to_tokens(&self, tokens: &mut TokenStream) { + self.0.to_tokens(tokens); + } +} + +impl From<MinProperties> for Feature { + fn from(value: MinProperties) -> Self { + Feature::MinProperties(value) + } +} diff --git a/fastapi-gen/src/component/features/validators.rs b/fastapi-gen/src/component/features/validators.rs new file mode 100644 index 0000000..f0ba2fe --- /dev/null +++ b/fastapi-gen/src/component/features/validators.rs @@ -0,0 +1,122 @@ +use crate::component::{GenericType, TypeTree}; +use crate::schema_type::SchemaType; + +use super::validation::NumberValue; + +pub trait Validator { + fn is_valid(&self) -> Result<(), &'static str>; +} + +pub struct IsNumber<'a>(pub &'a SchemaType<'a>); + +impl Validator for IsNumber<'_> { + fn is_valid(&self) -> Result<(), &'static str> { + if self.0.is_number() { + Ok(()) + } else { + Err("can only be used with `number` type") + } + } +} + +pub struct IsString<'a>(pub(super) &'a SchemaType<'a>); + +impl Validator for IsString<'_> { + fn is_valid(&self) -> Result<(), &'static str> { + if self.0.is_string() { + Ok(()) + } else { + Err("can only be used with `string` type") + } + } +} + +pub struct IsInteger<'a>(&'a SchemaType<'a>); + +impl Validator for IsInteger<'_> { + fn is_valid(&self) -> Result<(), &'static str> { + if self.0.is_integer() { + Ok(()) + } else { + Err("can only be used with `integer` type") + } + } +} + +pub struct IsVec<'a>(pub(super) &'a TypeTree<'a>); + +impl Validator for IsVec<'_> { + fn is_valid(&self) -> Result<(), &'static str> { + if self.0.generic_type == Some(GenericType::Vec) { + Ok(()) + } else { + Err("can only be used with `Vec`, `array` or `slice` types") + } + } +} + +pub struct AboveZeroUsize<'a>(pub(super) &'a NumberValue); + +impl Validator for AboveZeroUsize<'_> { + fn is_valid(&self) -> Result<(), &'static str> { + let usize: usize = self + .0 + .try_from_str() + .map_err(|_| "invalid type, expected `usize`")?; + + if usize != 0 { + Ok(()) + } else { + Err("can only be above zero value") + } + } +} + +pub struct AboveZeroF64<'a>(pub(super) &'a NumberValue); + +impl Validator for AboveZeroF64<'_> { + fn is_valid(&self) -> Result<(), &'static str> { + let float: f64 = self + .0 + .try_from_str() + .map_err(|_| "invalid type, expected `f64`")?; + if float > 0.0 { + Ok(()) + } else { + Err("can only be above zero value") + } + } +} + +pub struct ValidatorChain<'c> { + inner: &'c dyn Validator, + next: Option<&'c dyn Validator>, +} + +impl Validator for ValidatorChain<'_> { + fn is_valid(&self) -> Result<(), &'static str> { + self.inner.is_valid().and_then(|_| { + if let Some(validator) = self.next.as_ref() { + validator.is_valid() + } else { + // if there is no next validator consider it valid + Ok(()) + } + }) + } +} + +impl<'c> ValidatorChain<'c> { + pub fn new(validator: &'c dyn Validator) -> Self { + Self { + inner: validator, + next: None, + } + } + + pub fn next(mut self, validator: &'c dyn Validator) -> Self { + self.next = Some(validator); + + self + } +} diff --git a/fastapi-gen/src/component/into_params.rs b/fastapi-gen/src/component/into_params.rs new file mode 100644 index 0000000..bf589a7 --- /dev/null +++ b/fastapi-gen/src/component/into_params.rs @@ -0,0 +1,502 @@ +use std::borrow::Cow; + +use proc_macro2::TokenStream; +use quote::{quote, quote_spanned, ToTokens}; +use syn::{ + parse::Parse, punctuated::Punctuated, spanned::Spanned, token::Comma, Attribute, Data, Field, + Generics, Ident, +}; + +use crate::{ + component::{ + self, + features::{ + self, + attributes::{ + AdditionalProperties, AllowReserved, Example, Explode, Format, Ignore, Inline, + IntoParamsNames, Nullable, ReadOnly, Rename, RenameAll, SchemaWith, Style, + WriteOnly, XmlAttr, + }, + validation::{ + ExclusiveMaximum, ExclusiveMinimum, MaxItems, MaxLength, Maximum, MinItems, + MinLength, Minimum, MultipleOf, Pattern, + }, + }, + FieldRename, + }, + doc_comment::CommentAttributes, + parse_utils::LitBoolOrExprPath, + Array, Diagnostics, OptionExt, Required, ToTokensDiagnostics, +}; + +use super::{ + features::{ + impl_into_inner, impl_merge, parse_features, pop_feature, Feature, FeaturesExt, IntoInner, + Merge, ToTokensExt, + }, + serde::{self, SerdeContainer, SerdeValue}, + ComponentSchema, Container, TypeTree, +}; + +impl_merge!(IntoParamsFeatures, FieldFeatures); + +/// Container attribute `#[into_params(...)]`. +pub struct IntoParamsFeatures(Vec<Feature>); + +impl Parse for IntoParamsFeatures { + fn parse(input: syn::parse::ParseStream) -> syn::Result<Self> { + Ok(Self(parse_features!( + input as Style, + features::attributes::ParameterIn, + IntoParamsNames, + RenameAll + ))) + } +} + +impl_into_inner!(IntoParamsFeatures); + +#[cfg_attr(feature = "debug", derive(Debug))] +pub struct IntoParams { + /// Attributes tagged on the whole struct or enum. + pub attrs: Vec<Attribute>, + /// Generics required to complete the definition. + pub generics: Generics, + /// Data within the struct or enum. + pub data: Data, + /// Name of the struct or enum. + pub ident: Ident, +} + +impl ToTokensDiagnostics for IntoParams { + fn to_tokens(&self, tokens: &mut proc_macro2::TokenStream) -> Result<(), Diagnostics> { + let ident = &self.ident; + let (impl_generics, ty_generics, where_clause) = self.generics.split_for_impl(); + + let mut into_params_features = self + .attrs + .iter() + .filter(|attr| attr.path().is_ident("into_params")) + .map(|attribute| { + attribute + .parse_args::<IntoParamsFeatures>() + .map(IntoParamsFeatures::into_inner) + .map_err(Diagnostics::from) + }) + .collect::<Result<Vec<_>, Diagnostics>>()? + .into_iter() + .reduce(|acc, item| acc.merge(item)); + let serde_container = serde::parse_container(&self.attrs)?; + + // #[param] is only supported over fields + if self.attrs.iter().any(|attr| attr.path().is_ident("param")) { + return Err(Diagnostics::with_span( + ident.span(), + "found `param` attribute in unsupported context", + ) + .help("Did you mean `into_params`?")); + } + + let names = into_params_features.as_mut().and_then(|features| { + let into_params_names = pop_feature!(features => Feature::IntoParamsNames(_)); + IntoInner::<Option<IntoParamsNames>>::into_inner(into_params_names) + .map(|names| names.into_values()) + }); + + let style = pop_feature!(into_params_features => Feature::Style(_)); + let parameter_in = pop_feature!(into_params_features => Feature::ParameterIn(_)); + let rename_all = pop_feature!(into_params_features => Feature::RenameAll(_)); + + let params = self + .get_struct_fields(&names.as_ref())? + .enumerate() + .map(|(index, field)| { + let field_features = match parse_field_features(field) { + Ok(features) => features, + Err(error) => return Err(error), + }; + match serde::parse_value(&field.attrs) { + Ok(serde_value) => Ok((index, field, serde_value, field_features)), + Err(diagnostics) => Err(diagnostics) + } + }) + .collect::<Result<Vec<_>, Diagnostics>>()? + .into_iter() + .filter_map(|(index, field, field_serde_params, field_features)| { + if field_serde_params.skip { + None + } else { + Some((index, field, field_serde_params, field_features)) + } + }) + .map(|(index, field, field_serde_params, field_features)| { + let name = names.as_ref() + .map_try(|names| names.get(index).ok_or_else(|| Diagnostics::with_span( + ident.span(), + format!("There is no name specified in the names(...) container attribute for tuple struct field {}", index), + ))); + let name = match name { + Ok(name) => name, + Err(diagnostics) => return Err(diagnostics) + }; + let param = Param::new(field, field_serde_params, field_features, FieldParamContainerAttributes { + rename_all: rename_all.as_ref().and_then(|feature| { + match feature { + Feature::RenameAll(rename_all) => Some(rename_all), + _ => None + } + }), + style: &style, + parameter_in: ¶meter_in, + name, + }, &serde_container, &self.generics)?; + + + Ok(param.to_token_stream()) + }) + .collect::<Result<Array<TokenStream>, Diagnostics>>()?; + + tokens.extend(quote! { + impl #impl_generics fastapi::IntoParams for #ident #ty_generics #where_clause { + fn into_params(parameter_in_provider: impl Fn() -> Option<fastapi::openapi::path::ParameterIn>) -> Vec<fastapi::openapi::path::Parameter> { + #params.into_iter().filter(Option::is_some).flatten().collect() + } + } + }); + + Ok(()) + } +} + +fn parse_field_features(field: &Field) -> Result<Vec<Feature>, Diagnostics> { + Ok(field + .attrs + .iter() + .filter(|attribute| attribute.path().is_ident("param")) + .map(|attribute| { + attribute + .parse_args::<FieldFeatures>() + .map(FieldFeatures::into_inner) + }) + .collect::<Result<Vec<_>, syn::Error>>()? + .into_iter() + .reduce(|acc, item| acc.merge(item)) + .unwrap_or_default()) +} + +impl IntoParams { + fn get_struct_fields( + &self, + field_names: &Option<&Vec<String>>, + ) -> Result<impl Iterator<Item = &Field>, Diagnostics> { + let ident = &self.ident; + match &self.data { + Data::Struct(data_struct) => match &data_struct.fields { + syn::Fields::Named(named_fields) => { + if field_names.is_some() { + return Err(Diagnostics::with_span( + ident.span(), + "`#[into_params(names(...))]` is not supported attribute on a struct with named fields") + ); + } + Ok(named_fields.named.iter()) + } + syn::Fields::Unnamed(unnamed_fields) => { + match self.validate_unnamed_field_names(&unnamed_fields.unnamed, field_names) { + None => Ok(unnamed_fields.unnamed.iter()), + Some(diagnostics) => Err(diagnostics), + } + } + _ => Err(Diagnostics::with_span( + ident.span(), + "Unit type struct is not supported", + )), + }, + _ => Err(Diagnostics::with_span( + ident.span(), + "Only struct type is supported", + )), + } + } + + fn validate_unnamed_field_names( + &self, + unnamed_fields: &Punctuated<Field, Comma>, + field_names: &Option<&Vec<String>>, + ) -> Option<Diagnostics> { + let ident = &self.ident; + match field_names { + Some(names) => { + if names.len() != unnamed_fields.len() { + Some(Diagnostics::with_span( + ident.span(), + format!("declared names amount '{}' does not match to the unnamed fields amount '{}' in type: {}", + names.len(), unnamed_fields.len(), ident) + ) + .help(r#"Did you forget to add a field name to `#[into_params(names(... , "field_name"))]`"#) + .help("Or have you added extra name but haven't defined a type?") + ) + } else { + None + } + } + None => Some( + Diagnostics::with_span( + ident.span(), + "struct with unnamed fields must have explicit name declarations.", + ) + .help(format!( + "Try defining `#[into_params(names(...))]` over your type: {}", + ident + )), + ), + } + } +} + +#[cfg_attr(feature = "debug", derive(Debug))] +pub struct FieldParamContainerAttributes<'a> { + /// See [`IntoParamsAttr::style`]. + style: &'a Option<Feature>, + /// See [`IntoParamsAttr::names`]. The name that applies to this field. + name: Option<&'a String>, + /// See [`IntoParamsAttr::parameter_in`]. + parameter_in: &'a Option<Feature>, + /// Custom rename all if serde attribute is not present. + rename_all: Option<&'a RenameAll>, +} + +struct FieldFeatures(Vec<Feature>); + +impl_into_inner!(FieldFeatures); + +impl Parse for FieldFeatures { + fn parse(input: syn::parse::ParseStream) -> syn::Result<Self> { + Ok(Self(parse_features!( + // param features + input as component::features::attributes::ValueType, + Rename, + Style, + AllowReserved, + Example, + Explode, + SchemaWith, + component::features::attributes::Required, + // param schema features + Inline, + Format, + component::features::attributes::Default, + WriteOnly, + ReadOnly, + Nullable, + XmlAttr, + MultipleOf, + Maximum, + Minimum, + ExclusiveMaximum, + ExclusiveMinimum, + MaxLength, + MinLength, + Pattern, + MaxItems, + MinItems, + AdditionalProperties, + Ignore + ))) + } +} + +#[cfg_attr(feature = "debug", derive(Debug))] +struct Param { + tokens: TokenStream, +} + +impl Param { + fn new( + field: &Field, + field_serde_params: SerdeValue, + field_features: Vec<Feature>, + container_attributes: FieldParamContainerAttributes<'_>, + serde_container: &SerdeContainer, + generics: &Generics, + ) -> Result<Self, Diagnostics> { + let mut tokens = TokenStream::new(); + let field_serde_params = &field_serde_params; + let ident = &field.ident; + let mut name = &*ident + .as_ref() + .map(|ident| ident.to_string()) + .or_else(|| container_attributes.name.cloned()) + .ok_or_else(|| + Diagnostics::with_span(field.span(), "No name specified for unnamed field.") + .help("Try adding #[into_params(names(...))] container attribute to specify the name for this field") + )?; + + if name.starts_with("r#") { + name = &name[2..]; + } + + let (schema_features, mut param_features) = + Param::resolve_field_features(field_features, &container_attributes) + .map_err(Diagnostics::from)?; + + let ignore = pop_feature!(param_features => Feature::Ignore(_)); + let rename = pop_feature!(param_features => Feature::Rename(_) as Option<Rename>) + .map(|rename| rename.into_value()); + let rename_to = field_serde_params + .rename + .as_deref() + .map(Cow::Borrowed) + .or(rename.map(Cow::Owned)); + let rename_all = serde_container.rename_all.as_ref().or(container_attributes + .rename_all + .map(|rename_all| rename_all.as_rename_rule())); + let name = super::rename::<FieldRename>(name, rename_to, rename_all) + .unwrap_or(Cow::Borrowed(name)); + let type_tree = TypeTree::from_type(&field.ty)?; + + tokens.extend(quote! { fastapi::openapi::path::ParameterBuilder::new() + .name(#name) + }); + tokens.extend( + if let Some(ref parameter_in) = &container_attributes.parameter_in { + parameter_in.to_token_stream() + } else { + quote! { + .parameter_in(parameter_in_provider().unwrap_or_default()) + } + }, + ); + + if let Some(deprecated) = super::get_deprecated(&field.attrs) { + tokens.extend(quote! { .deprecated(Some(#deprecated)) }); + } + + let schema_with = pop_feature!(param_features => Feature::SchemaWith(_)); + if let Some(schema_with) = schema_with { + let schema_with = crate::as_tokens_or_diagnostics!(&schema_with); + tokens.extend(quote! { .schema(Some(#schema_with)).build() }); + } else { + let description = + CommentAttributes::from_attributes(&field.attrs).as_formatted_string(); + if !description.is_empty() { + tokens.extend(quote! { .description(Some(#description))}) + } + + let value_type = pop_feature!(param_features => Feature::ValueType(_) as Option<features::attributes::ValueType>); + let component = value_type + .as_ref() + .map_try(|value_type| value_type.as_type_tree())? + .unwrap_or(type_tree); + let alias_type = component.get_alias_type()?; + let alias_type_tree = alias_type.as_ref().map_try(TypeTree::from_type)?; + let component = alias_type_tree.as_ref().unwrap_or(&component); + + let required: Option<features::attributes::Required> = + pop_feature!(param_features => Feature::Required(_)).into_inner(); + let component_required = + !component.is_option() && super::is_required(field_serde_params, serde_container); + + let required = match (required, component_required) { + (Some(required_feature), _) => Into::<Required>::into(required_feature.is_true()), + (None, component_required) => Into::<Required>::into(component_required), + }; + + tokens.extend(quote! { + .required(#required) + }); + tokens.extend(param_features.to_token_stream()?); + + let schema = ComponentSchema::new(component::ComponentSchemaProps { + type_tree: component, + features: schema_features, + description: None, + container: &Container { generics }, + })?; + let schema_tokens = schema.to_token_stream(); + + tokens.extend(quote! { .schema(Some(#schema_tokens)).build() }); + } + + let tokens = match ignore { + Some(Feature::Ignore(Ignore(LitBoolOrExprPath::LitBool(bool)))) => { + quote_spanned! { + bool.span() => if #bool { + None + } else { + Some(#tokens) + } + } + } + Some(Feature::Ignore(Ignore(LitBoolOrExprPath::ExprPath(path)))) => { + quote_spanned! { + path.span() => if #path() { + None + } else { + Some(#tokens) + } + } + } + _ => quote! { Some(#tokens) }, + }; + + Ok(Self { tokens }) + } + + /// Resolve [`Param`] features and split features into two [`Vec`]s. Features are split by + /// whether they should be rendered in [`Param`] itself or in [`Param`]s schema. + /// + /// Method returns a tuple containing two [`Vec`]s of [`Feature`]. + fn resolve_field_features( + mut field_features: Vec<Feature>, + container_attributes: &FieldParamContainerAttributes<'_>, + ) -> Result<(Vec<Feature>, Vec<Feature>), syn::Error> { + if let Some(ref style) = container_attributes.style { + if !field_features + .iter() + .any(|feature| matches!(&feature, Feature::Style(_))) + { + field_features.push(style.clone()); // could try to use cow to avoid cloning + }; + } + + Ok(field_features.into_iter().fold( + (Vec::<Feature>::new(), Vec::<Feature>::new()), + |(mut schema_features, mut param_features), feature| { + match feature { + Feature::Inline(_) + | Feature::Format(_) + | Feature::Default(_) + | Feature::WriteOnly(_) + | Feature::ReadOnly(_) + | Feature::Nullable(_) + | Feature::XmlAttr(_) + | Feature::MultipleOf(_) + | Feature::Maximum(_) + | Feature::Minimum(_) + | Feature::ExclusiveMaximum(_) + | Feature::ExclusiveMinimum(_) + | Feature::MaxLength(_) + | Feature::MinLength(_) + | Feature::Pattern(_) + | Feature::MaxItems(_) + | Feature::MinItems(_) + | Feature::AdditionalProperties(_) => { + schema_features.push(feature); + } + _ => { + param_features.push(feature); + } + }; + + (schema_features, param_features) + }, + )) + } +} + +impl ToTokens for Param { + fn to_tokens(&self, tokens: &mut TokenStream) { + self.tokens.to_tokens(tokens) + } +} diff --git a/fastapi-gen/src/component/schema.rs b/fastapi-gen/src/component/schema.rs new file mode 100644 index 0000000..f0bb1b5 --- /dev/null +++ b/fastapi-gen/src/component/schema.rs @@ -0,0 +1,970 @@ +use std::borrow::{Borrow, Cow}; + +use proc_macro2::{Ident, TokenStream}; +use quote::{quote, quote_spanned, ToTokens}; +use syn::{ + parse_quote, punctuated::Punctuated, spanned::Spanned, token::Comma, Attribute, Data, Field, + Fields, FieldsNamed, FieldsUnnamed, Generics, Variant, +}; + +use crate::{ + as_tokens_or_diagnostics, + component::features::attributes::{Rename, Title, ValueType}, + doc_comment::CommentAttributes, + parse_utils::LitBoolOrExprPath, + Array, AttributesExt, Diagnostics, OptionExt, ToTokensDiagnostics, +}; + +use self::{ + enums::{MixedEnum, PlainEnum}, + features::{ + EnumFeatures, FromAttributes, MixedEnumFeatures, NamedFieldFeatures, + NamedFieldStructFeatures, UnnamedFieldStructFeatures, + }, +}; + +use super::{ + features::{ + attributes::{self, As, Bound, Description, NoRecursion, RenameAll}, + parse_features, pop_feature, Feature, FeaturesExt, IntoInner, ToTokensExt, + }, + serde::{self, SerdeContainer, SerdeValue}, + ComponentDescription, ComponentSchema, FieldRename, FlattenedMapSchema, SchemaReference, + TypeTree, VariantRename, +}; + +mod enums; +mod features; +pub mod xml; + +#[cfg_attr(feature = "debug", derive(Debug))] +pub struct Root<'p> { + pub ident: &'p Ident, + pub generics: &'p Generics, + pub attributes: &'p [Attribute], +} + +pub struct Schema<'a> { + ident: &'a Ident, + attributes: &'a [Attribute], + generics: &'a Generics, + data: &'a Data, +} + +impl<'a> Schema<'a> { + pub fn new( + data: &'a Data, + attributes: &'a [Attribute], + ident: &'a Ident, + generics: &'a Generics, + ) -> Result<Self, Diagnostics> { + Ok(Self { + data, + ident, + attributes, + generics, + }) + } +} + +impl ToTokensDiagnostics for Schema<'_> { + fn to_tokens(&self, tokens: &mut TokenStream) -> Result<(), Diagnostics> { + let ident = self.ident; + let (impl_generics, ty_generics, where_clause) = self.generics.split_for_impl(); + let mut where_clause = where_clause.map_or(parse_quote!(where), |w| w.clone()); + + let root = Root { + ident, + generics: self.generics, + attributes: self.attributes, + }; + let variant = SchemaVariant::new(self.data, &root)?; + let (generic_references, schema_references): (Vec<_>, Vec<_>) = variant + .get_schema_references() + .filter(|schema_reference| !schema_reference.no_recursion) + .partition(|schema_reference| schema_reference.is_partial()); + + struct SchemaRef<'a>(&'a TokenStream, &'a TokenStream, &'a TokenStream, bool); + impl ToTokens for SchemaRef<'_> { + fn to_tokens(&self, tokens: &mut TokenStream) { + let SchemaRef(name, ref_tokens, ..) = self; + tokens.extend(quote! { (#name, #ref_tokens) }); + } + } + let schema_refs = schema_references + .iter() + .map(|schema_reference| { + SchemaRef( + &schema_reference.name, + &schema_reference.tokens, + &schema_reference.references, + schema_reference.is_inline, + ) + }) + .collect::<Array<SchemaRef>>(); + + let references = schema_refs.iter().fold( + TokenStream::new(), + |mut tokens, SchemaRef(_, _, references, _)| { + tokens.extend(quote!( #references; )); + + tokens + }, + ); + let generic_references = generic_references + .into_iter() + .map(|schema_reference| { + let reference = &schema_reference.references; + quote! {#reference;} + }) + .collect::<TokenStream>(); + + let schema_refs = schema_refs + .iter() + .filter(|SchemaRef(_, _, _, is_inline)| { + #[cfg(feature = "config")] + { + (matches!( + crate::CONFIG.schema_collect, + fastapi_config::SchemaCollect::NonInlined + ) && !is_inline) + || matches!( + crate::CONFIG.schema_collect, + fastapi_config::SchemaCollect::All + ) + } + #[cfg(not(feature = "config"))] + !is_inline + }) + .collect::<Array<_>>(); + + let name = if let Some(schema_as) = variant.get_schema_as() { + schema_as.to_schema_formatted_string() + } else { + ident.to_string() + }; + + // TODO refactor this to avoid clone + if let Some(Bound(bound)) = variant.get_schema_bound() { + where_clause.predicates.extend(bound.clone()); + } else { + for param in self.generics.type_params() { + let param = ¶m.ident; + where_clause + .predicates + .push(parse_quote!(#param : fastapi::ToSchema)) + } + } + + tokens.extend(quote! { + impl #impl_generics fastapi::__dev::ComposeSchema for #ident #ty_generics #where_clause { + fn compose( + mut generics: Vec<fastapi::openapi::RefOr<fastapi::openapi::schema::Schema>> + ) -> fastapi::openapi::RefOr<fastapi::openapi::schema::Schema> { + #variant.into() + } + } + + impl #impl_generics fastapi::ToSchema for #ident #ty_generics #where_clause { + fn name() -> std::borrow::Cow<'static, str> { + std::borrow::Cow::Borrowed(#name) + } + + fn schemas(schemas: &mut Vec<(String, fastapi::openapi::RefOr<fastapi::openapi::schema::Schema>)>) { + schemas.extend(#schema_refs); + #references; + #generic_references + } + } + }); + Ok(()) + } +} + +#[cfg_attr(feature = "debug", derive(Debug))] +enum SchemaVariant<'a> { + Named(NamedStructSchema), + Unnamed(UnnamedStructSchema), + Enum(EnumSchema<'a>), + Unit(UnitStructVariant), +} + +impl<'a> SchemaVariant<'a> { + pub fn new(data: &'a Data, root: &'a Root<'a>) -> Result<SchemaVariant<'a>, Diagnostics> { + match data { + Data::Struct(content) => match &content.fields { + Fields::Unnamed(fields) => { + let FieldsUnnamed { unnamed, .. } = fields; + let unnamed_features = root + .attributes + .parse_features::<UnnamedFieldStructFeatures>()? + .into_inner() + .unwrap_or_default(); + + Ok(Self::Unnamed(UnnamedStructSchema::new( + root, + unnamed, + unnamed_features, + )?)) + } + Fields::Named(fields) => { + let FieldsNamed { named, .. } = fields; + let named_features = root + .attributes + .parse_features::<NamedFieldStructFeatures>()? + .into_inner() + .unwrap_or_default(); + + Ok(Self::Named(NamedStructSchema::new( + root, + named, + named_features, + )?)) + } + Fields::Unit => Ok(Self::Unit(UnitStructVariant::new(root)?)), + }, + Data::Enum(content) => Ok(Self::Enum(EnumSchema::new(root, &content.variants)?)), + _ => Err(Diagnostics::with_span( + root.ident.span(), + "unexpected data type, expected syn::Data::Struct or syn::Data::Enum", + )), + } + } + + fn get_schema_as(&self) -> &Option<As> { + match self { + Self::Enum(schema) => &schema.schema_as, + Self::Named(schema) => &schema.schema_as, + Self::Unnamed(schema) => &schema.schema_as, + _ => &None, + } + } + + fn get_schema_references(&self) -> impl Iterator<Item = &SchemaReference> { + match self { + Self::Named(schema) => schema.fields_references.iter(), + Self::Unnamed(schema) => schema.schema_references.iter(), + Self::Enum(schema) => schema.schema_references.iter(), + _ => [].iter(), + } + } + + fn get_schema_bound(&self) -> Option<&Bound> { + match self { + SchemaVariant::Named(schema) => schema.bound.as_ref(), + SchemaVariant::Unnamed(schema) => schema.bound.as_ref(), + SchemaVariant::Enum(schema) => schema.bound.as_ref(), + SchemaVariant::Unit(_) => None, + } + } +} + +impl ToTokens for SchemaVariant<'_> { + fn to_tokens(&self, tokens: &mut TokenStream) { + match self { + Self::Enum(schema) => schema.to_tokens(tokens), + Self::Named(schema) => schema.to_tokens(tokens), + Self::Unnamed(schema) => schema.to_tokens(tokens), + Self::Unit(unit) => unit.to_tokens(tokens), + } + } +} + +#[cfg_attr(feature = "debug", derive(Debug))] +struct UnitStructVariant(TokenStream); + +impl UnitStructVariant { + fn new(root: &Root<'_>) -> Result<Self, Diagnostics> { + let mut tokens = quote! { + fastapi::openapi::Object::builder() + .schema_type(fastapi::openapi::schema::SchemaType::AnyValue) + .default(Some(serde_json::Value::Null)) + }; + + let mut features = features::parse_schema_features_with(root.attributes, |input| { + Ok(parse_features!(input as Title, Description)) + })? + .unwrap_or_default(); + + let description = pop_feature!(features => Feature::Description(_) as Option<Description>); + + let comment = CommentAttributes::from_attributes(root.attributes); + let description = description + .as_ref() + .map(ComponentDescription::Description) + .or(Some(ComponentDescription::CommentAttributes(&comment))); + + description.to_tokens(&mut tokens); + tokens.extend(features.to_token_stream()); + + Ok(Self(tokens)) + } +} + +impl ToTokens for UnitStructVariant { + fn to_tokens(&self, tokens: &mut TokenStream) { + self.0.to_tokens(tokens); + } +} + +#[cfg_attr(feature = "debug", derive(Debug))] +pub struct NamedStructSchema { + tokens: TokenStream, + pub schema_as: Option<As>, + fields_references: Vec<SchemaReference>, + bound: Option<Bound>, + is_all_of: bool, +} + +#[cfg_attr(feature = "debug", derive(Debug))] +struct NamedStructFieldOptions<'a> { + property: Property, + renamed_field: Option<Cow<'a, str>>, + required: Option<super::features::attributes::Required>, + is_option: bool, + ignore: Option<LitBoolOrExprPath>, +} + +impl NamedStructSchema { + pub fn new( + root: &Root, + fields: &Punctuated<Field, Comma>, + mut features: Vec<Feature>, + ) -> Result<Self, Diagnostics> { + let mut tokens = TokenStream::new(); + + let rename_all = pop_feature!(features => Feature::RenameAll(_) as Option<RenameAll>); + let schema_as = pop_feature!(features => Feature::As(_) as Option<As>); + let description: Option<Description> = + pop_feature!(features => Feature::Description(_)).into_inner(); + let bound = pop_feature!(features => Feature::Bound(_) as Option<Bound>); + + let container_rules = serde::parse_container(root.attributes)?; + + let mut fields_vec = fields + .iter() + .filter_map(|field| { + let mut field_name = Cow::Owned(field.ident.as_ref().unwrap().to_string()); + + if Borrow::<str>::borrow(&field_name).starts_with("r#") { + field_name = Cow::Owned(field_name[2..].to_string()); + } + + let field_rules = serde::parse_value(&field.attrs); + let field_rules = match field_rules { + Ok(field_rules) => field_rules, + Err(diagnostics) => return Some(Err(diagnostics)), + }; + let field_options = Self::get_named_struct_field_options( + root, + field, + &features, + &field_rules, + &container_rules, + ); + + match field_options { + Ok(Some(field_options)) => { + Some(Ok((field_options, field_rules, field_name, field))) + } + Ok(_) => None, + Err(options_diagnostics) => Some(Err(options_diagnostics)), + } + }) + .collect::<Result<Vec<_>, Diagnostics>>()?; + + let fields_references = fields_vec + .iter_mut() + .filter_map(|(field_options, field_rules, ..)| { + match (&mut field_options.property, field_rules.skip) { + (Property::Schema(schema), false) => { + Some(std::mem::take(&mut schema.schema_references)) + } + _ => None, + } + }) + .flatten() + .collect::<Vec<_>>(); + + let mut object_tokens_empty = true; + let object_tokens = fields_vec + .iter() + .filter(|(_, field_rules, ..)| !field_rules.skip && !field_rules.flatten) + .map(|(property, field_rules, field_name, field)| { + Ok(( + property, + field_rules, + field_name, + field, + as_tokens_or_diagnostics!(&property.property), + )) + }) + .collect::<Result<Vec<_>, Diagnostics>>()? + .into_iter() + .fold( + quote! { let mut object = fastapi::openapi::ObjectBuilder::new(); }, + |mut object_tokens, + ( + NamedStructFieldOptions { + renamed_field, + required, + is_option, + ignore, + .. + }, + field_rules, + field_name, + _field, + field_schema, + )| { + object_tokens_empty = false; + let rename_to = field_rules + .rename + .as_deref() + .map(Cow::Borrowed) + .or(renamed_field.as_ref().cloned()); + let rename_all = container_rules.rename_all.as_ref().or(rename_all + .as_ref() + .map(|rename_all| rename_all.as_rename_rule())); + + let name = + super::rename::<FieldRename>(field_name.borrow(), rename_to, rename_all) + .unwrap_or(Cow::Borrowed(field_name.borrow())); + + let mut property_tokens = quote! { + object = object.property(#name, #field_schema) + }; + let component_required = + !is_option && super::is_required(field_rules, &container_rules); + let required = match (required, component_required) { + (Some(required), _) => required.is_true(), + (None, component_required) => component_required, + }; + + if required { + property_tokens.extend(quote! { + .required(#name) + }) + } + + object_tokens.extend(match ignore { + Some(LitBoolOrExprPath::LitBool(bool)) => quote_spanned! { + bool.span() => if !#bool { + #property_tokens; + } + }, + Some(LitBoolOrExprPath::ExprPath(path)) => quote_spanned! { + path.span() => if !#path() { + #property_tokens; + } + }, + None => quote! { #property_tokens; }, + }); + + object_tokens + }, + ); + + let mut object_tokens = quote! { + { #object_tokens; object } + }; + + let flatten_fields = fields_vec + .iter() + .filter(|(_, field_rules, ..)| field_rules.flatten) + .collect::<Vec<_>>(); + + let all_of = if !flatten_fields.is_empty() { + let mut flattened_tokens = TokenStream::new(); + let mut flattened_map_field = None; + + for (options, _, _, field) in flatten_fields { + let NamedStructFieldOptions { property, .. } = options; + let property_schema = as_tokens_or_diagnostics!(property); + + match property { + Property::Schema(_) | Property::SchemaWith(_) => { + flattened_tokens.extend(quote! { .item(#property_schema) }) + } + Property::FlattenedMap(_) => { + match flattened_map_field { + None => { + object_tokens.extend( + quote! { .additional_properties(Some(#property_schema)) }, + ); + flattened_map_field = Some(field); + } + Some(flattened_map_field) => { + return Err(Diagnostics::with_span( + fields.span(), + format!("The structure `{}` contains multiple flattened map fields.", root.ident)) + .note( + format!("first flattened map field was declared here as `{}`", + flattened_map_field.ident.as_ref().unwrap())) + .note(format!("second flattened map field was declared here as `{}`", field.ident.as_ref().unwrap())) + ); + } + } + } + } + } + + if flattened_tokens.is_empty() { + tokens.extend(object_tokens); + false + } else { + tokens.extend(quote! { + fastapi::openapi::AllOfBuilder::new() + #flattened_tokens + + }); + if !object_tokens_empty { + tokens.extend(quote! { + .item(#object_tokens) + }); + } + true + } + } else { + tokens.extend(object_tokens); + false + }; + + if !all_of && container_rules.deny_unknown_fields { + tokens.extend(quote! { + .additional_properties(Some(fastapi::openapi::schema::AdditionalProperties::FreeForm(false))) + }); + } + + if root.attributes.has_deprecated() + && !features + .iter() + .any(|feature| matches!(feature, Feature::Deprecated(_))) + { + features.push(Feature::Deprecated(true.into())); + } + + let _ = pop_feature!(features => Feature::NoRecursion(_)); + tokens.extend(features.to_token_stream()?); + + let comments = CommentAttributes::from_attributes(root.attributes); + let description = description + .as_ref() + .map(ComponentDescription::Description) + .or(Some(ComponentDescription::CommentAttributes(&comments))); + + description.to_tokens(&mut tokens); + + Ok(Self { + tokens, + schema_as, + fields_references, + bound, + is_all_of: all_of, + }) + } + + fn get_named_struct_field_options<'a>( + root: &Root, + field: &Field, + features: &[Feature], + field_rules: &SerdeValue, + container_rules: &SerdeContainer, + ) -> Result<Option<NamedStructFieldOptions<'a>>, Diagnostics> { + let type_tree = &mut TypeTree::from_type(&field.ty)?; + + let mut field_features = field + .attrs + .parse_features::<NamedFieldFeatures>()? + .into_inner() + .unwrap_or_default(); + + if features + .iter() + .any(|feature| matches!(feature, Feature::NoRecursion(_))) + { + field_features.push(Feature::NoRecursion(NoRecursion)); + } + + let schema_default = features.iter().any(|f| matches!(f, Feature::Default(_))); + let serde_default = container_rules.default; + + if (schema_default || serde_default) + && !field_features + .iter() + .any(|f| matches!(f, Feature::Default(_))) + { + let field_ident = field.ident.as_ref().unwrap().to_owned(); + + // TODO refactor the clone away + field_features.push(Feature::Default( + crate::features::attributes::Default::new_default_trait( + root.ident.clone(), + field_ident.into(), + ), + )); + } + + if field.attrs.has_deprecated() + && !field_features + .iter() + .any(|feature| matches!(feature, Feature::Deprecated(_))) + { + field_features.push(Feature::Deprecated(true.into())); + } + + let rename_field = + pop_feature!(field_features => Feature::Rename(_)).and_then(|feature| match feature { + Feature::Rename(rename) => Some(Cow::Owned(rename.into_value())), + _ => None, + }); + + let value_type = pop_feature!(field_features => Feature::ValueType(_) as Option<ValueType>); + let override_type_tree = value_type + .as_ref() + .map_try(|value_type| value_type.as_type_tree())?; + let comments = CommentAttributes::from_attributes(&field.attrs); + let description = &ComponentDescription::CommentAttributes(&comments); + + let schema_with = pop_feature!(field_features => Feature::SchemaWith(_)); + let required = pop_feature!(field_features => Feature::Required(_) as Option<crate::component::features::attributes::Required>); + let type_tree = override_type_tree.as_ref().unwrap_or(type_tree); + + let alias_type = type_tree.get_alias_type()?; + let alias_type_tree = alias_type.as_ref().map_try(TypeTree::from_type)?; + let type_tree = alias_type_tree.as_ref().unwrap_or(type_tree); + + let is_option = type_tree.is_option(); + + let ignore = match pop_feature!(field_features => Feature::Ignore(_)) { + Some(Feature::Ignore(attributes::Ignore(bool_or_exp))) => Some(bool_or_exp), + _ => None, + }; + + Ok(Some(NamedStructFieldOptions { + property: if let Some(schema_with) = schema_with { + Property::SchemaWith(schema_with) + } else { + let props = super::ComponentSchemaProps { + type_tree, + features: field_features, + description: Some(description), + container: &super::Container { + generics: root.generics, + }, + }; + if field_rules.flatten && type_tree.is_map() { + Property::FlattenedMap(FlattenedMapSchema::new(props)?) + } else { + let schema = ComponentSchema::new(props)?; + Property::Schema(schema) + } + }, + renamed_field: rename_field, + required, + is_option, + ignore, + })) + } +} + +impl ToTokens for NamedStructSchema { + fn to_tokens(&self, tokens: &mut TokenStream) { + self.tokens.to_tokens(tokens); + } +} + +#[cfg_attr(feature = "debug", derive(Debug))] +struct UnnamedStructSchema { + tokens: TokenStream, + schema_as: Option<As>, + schema_references: Vec<SchemaReference>, + bound: Option<Bound>, +} + +impl UnnamedStructSchema { + fn new( + root: &Root, + fields: &Punctuated<Field, Comma>, + mut features: Vec<Feature>, + ) -> Result<Self, Diagnostics> { + let mut tokens = TokenStream::new(); + let schema_as = pop_feature!(features => Feature::As(_) as Option<As>); + let description: Option<Description> = + pop_feature!(features => Feature::Description(_)).into_inner(); + let bound = pop_feature!(features => Feature::Bound(_) as Option<Bound>); + + let fields_len = fields.len(); + let first_field = fields.first().unwrap(); + let first_part = &TypeTree::from_type(&first_field.ty)?; + + let all_fields_are_same = fields_len == 1 + || fields + .iter() + .skip(1) + .map(|field| TypeTree::from_type(&field.ty)) + .collect::<Result<Vec<TypeTree>, Diagnostics>>()? + .iter() + .all(|schema_part| first_part == schema_part); + + if root.attributes.has_deprecated() + && !features + .iter() + .any(|feature| matches!(feature, Feature::Deprecated(_))) + { + features.push(Feature::Deprecated(true.into())); + } + let mut schema_references = Vec::<SchemaReference>::new(); + if all_fields_are_same { + let value_type = pop_feature!(features => Feature::ValueType(_) as Option<ValueType>); + let override_type_tree = value_type + .as_ref() + .map_try(|value_type| value_type.as_type_tree())?; + + if fields_len == 1 { + let inline = features::parse_schema_features_with(&first_field.attrs, |input| { + Ok(parse_features!( + input as super::features::attributes::Inline + )) + })? + .unwrap_or_default(); + + features.extend(inline); + + if pop_feature!(features => Feature::Default(crate::features::attributes::Default(None))) + .is_some() + { + let index: syn::Index = 0.into(); + // TODO refactor the clone away + features.push(Feature::Default( + crate::features::attributes::Default::new_default_trait(root.ident.clone(), index.into()), + )); + } + } + + let comments = CommentAttributes::from_attributes(root.attributes); + let description = description + .as_ref() + .map(ComponentDescription::Description) + .or(Some(ComponentDescription::CommentAttributes(&comments))); + let type_tree = override_type_tree.as_ref().unwrap_or(first_part); + + let alias_type = type_tree.get_alias_type()?; + let alias_type_tree = alias_type.as_ref().map_try(TypeTree::from_type)?; + let type_tree = alias_type_tree.as_ref().unwrap_or(type_tree); + + let mut schema = ComponentSchema::new(super::ComponentSchemaProps { + type_tree, + features, + description: description.as_ref(), + container: &super::Container { + generics: root.generics, + }, + })?; + + tokens.extend(schema.to_token_stream()); + schema_references = std::mem::take(&mut schema.schema_references); + } else { + // Struct that has multiple unnamed fields is serialized to array by default with serde. + // See: https://serde.rs/json.html + // Typically OpenAPI does not support multi type arrays thus we simply consider the case + // as generic object array + tokens.extend(quote! { + fastapi::openapi::ObjectBuilder::new() + }); + + tokens.extend(features.to_token_stream()?) + } + + if fields_len > 1 { + let comments = CommentAttributes::from_attributes(root.attributes); + let description = description + .as_ref() + .map(ComponentDescription::Description) + .or(Some(ComponentDescription::CommentAttributes(&comments))); + tokens.extend(quote! { + .to_array_builder() + .max_items(Some(#fields_len)) + .min_items(Some(#fields_len)) + #description + }) + } + + Ok(UnnamedStructSchema { + tokens, + schema_as, + schema_references, + bound, + }) + } +} + +impl ToTokens for UnnamedStructSchema { + fn to_tokens(&self, tokens: &mut TokenStream) { + self.tokens.to_tokens(tokens); + } +} + +#[cfg_attr(feature = "debug", derive(Debug))] +pub struct EnumSchema<'a> { + schema_type: EnumSchemaType<'a>, + schema_as: Option<As>, + schema_references: Vec<SchemaReference>, + bound: Option<Bound>, +} + +impl<'e> EnumSchema<'e> { + pub fn new( + parent: &'e Root<'e>, + variants: &'e Punctuated<Variant, Comma>, + ) -> Result<Self, Diagnostics> { + if variants + .iter() + .all(|variant| matches!(variant.fields, Fields::Unit)) + { + #[cfg(feature = "repr")] + let mut features = { + if parent + .attributes + .iter() + .any(|attr| attr.path().is_ident("repr")) + { + features::parse_schema_features_with(parent.attributes, |input| { + Ok(parse_features!( + input as super::features::attributes::Example, + super::features::attributes::Examples, + super::features::attributes::Default, + super::features::attributes::Title, + crate::component::features::attributes::Deprecated, + As + )) + })? + .unwrap_or_default() + } else { + parent + .attributes + .parse_features::<EnumFeatures>()? + .into_inner() + .unwrap_or_default() + } + }; + #[cfg(not(feature = "repr"))] + let mut features = { + parent + .attributes + .parse_features::<EnumFeatures>()? + .into_inner() + .unwrap_or_default() + }; + + let schema_as = pop_feature!(features => Feature::As(_) as Option<As>); + let bound = pop_feature!(features => Feature::Bound(_) as Option<Bound>); + + if parent.attributes.has_deprecated() { + features.push(Feature::Deprecated(true.into())) + } + + Ok(Self { + schema_type: EnumSchemaType::Plain(PlainEnum::new(parent, variants, features)?), + schema_as, + schema_references: Vec::new(), + bound, + }) + } else { + let mut enum_features = parent + .attributes + .parse_features::<MixedEnumFeatures>()? + .into_inner() + .unwrap_or_default(); + let schema_as = pop_feature!(enum_features => Feature::As(_) as Option<As>); + let bound = pop_feature!(enum_features => Feature::Bound(_) as Option<Bound>); + + if parent.attributes.has_deprecated() { + enum_features.push(Feature::Deprecated(true.into())) + } + let mut mixed_enum = MixedEnum::new(parent, variants, enum_features)?; + let schema_references = std::mem::take(&mut mixed_enum.schema_references); + Ok(Self { + schema_type: EnumSchemaType::Mixed(mixed_enum), + schema_as, + schema_references, + bound, + }) + } + } +} + +impl ToTokens for EnumSchema<'_> { + fn to_tokens(&self, tokens: &mut TokenStream) { + self.schema_type.to_tokens(tokens) + } +} + +#[cfg_attr(feature = "debug", derive(Debug))] +enum EnumSchemaType<'e> { + Mixed(MixedEnum<'e>), + Plain(PlainEnum<'e>), +} + +impl ToTokens for EnumSchemaType<'_> { + fn to_tokens(&self, tokens: &mut TokenStream) { + let (attributes, description) = match self { + Self::Mixed(mixed) => { + mixed.to_tokens(tokens); + (mixed.root.attributes, &mixed.description) + } + Self::Plain(plain) => { + plain.to_tokens(tokens); + (plain.root.attributes, &plain.description) + } + }; + + let comments = CommentAttributes::from_attributes(attributes); + let description = description + .as_ref() + .map(ComponentDescription::Description) + .or(Some(ComponentDescription::CommentAttributes(&comments))); + + description.to_tokens(tokens); + } +} + +fn rename_enum_variant<'s>( + name: &str, + features: &mut Vec<Feature>, + variant_rules: &'s SerdeValue, + container_rules: &'s SerdeContainer, + rename_all: Option<&RenameAll>, +) -> Option<Cow<'s, str>> { + let rename = pop_feature!(features => Feature::Rename(_) as Option<Rename>) + .map(|rename| rename.into_value()); + let rename_to = variant_rules + .rename + .as_deref() + .map(Cow::Borrowed) + .or(rename.map(Cow::Owned)); + + let rename_all = container_rules.rename_all.as_ref().or(rename_all + .as_ref() + .map(|rename_all| rename_all.as_rename_rule())); + + super::rename::<VariantRename>(name, rename_to, rename_all) +} + +#[cfg_attr(feature = "debug", derive(Debug))] +enum Property { + Schema(ComponentSchema), + SchemaWith(Feature), + FlattenedMap(FlattenedMapSchema), +} + +impl ToTokensDiagnostics for Property { + fn to_tokens(&self, tokens: &mut TokenStream) -> Result<(), Diagnostics> { + match self { + Self::Schema(schema) => schema.to_tokens(tokens), + Self::FlattenedMap(schema) => schema.to_tokens(tokens)?, + Self::SchemaWith(schema_with) => schema_with.to_tokens(tokens)?, + } + Ok(()) + } +} diff --git a/fastapi-gen/src/component/schema/enums.rs b/fastapi-gen/src/component/schema/enums.rs new file mode 100644 index 0000000..263162f --- /dev/null +++ b/fastapi-gen/src/component/schema/enums.rs @@ -0,0 +1,1053 @@ +use std::{borrow::Cow, ops::Deref}; + +use proc_macro2::TokenStream; +use quote::{quote, ToTokens}; +use syn::{punctuated::Punctuated, spanned::Spanned, token::Comma, Fields, TypePath, Variant}; + +use crate::{ + component::{ + features::{ + attributes::{ + Deprecated, Description, Discriminator, Example, Examples, NoRecursion, Rename, + RenameAll, Title, + }, + parse_features, pop_feature, Feature, IntoInner, IsInline, ToTokensExt, + }, + schema::features::{ + EnumNamedFieldVariantFeatures, EnumUnnamedFieldVariantFeatures, FromAttributes, + }, + serde::{SerdeContainer, SerdeEnumRepr, SerdeValue}, + FeaturesExt, SchemaReference, TypeTree, ValueType, + }, + doc_comment::CommentAttributes, + schema_type::SchemaType, + Array, AttributesExt, Diagnostics, ToTokensDiagnostics, +}; + +use super::{features, serde, NamedStructSchema, Root, UnnamedStructSchema}; + +#[cfg_attr(feature = "debug", derive(Debug))] +enum PlainEnumRepr<'p> { + Plain(Array<'p, TokenStream>), + Repr(Array<'p, TokenStream>, syn::TypePath), +} + +#[cfg_attr(feature = "debug", derive(Debug))] +pub struct PlainEnum<'e> { + pub root: &'e Root<'e>, + enum_variant: PlainEnumRepr<'e>, + serde_enum_repr: SerdeEnumRepr, + features: Vec<Feature>, + pub description: Option<Description>, +} + +impl<'e> PlainEnum<'e> { + pub fn new( + root: &'e Root, + variants: &Punctuated<Variant, Comma>, + mut features: Vec<Feature>, + ) -> Result<Self, Diagnostics> { + #[cfg(feature = "repr")] + let repr_type_path = PlainEnum::get_repr_type(root.attributes)?; + + #[cfg(not(feature = "repr"))] + let repr_type_path = None; + + let rename_all = pop_feature!(features => Feature::RenameAll(_) as Option<RenameAll>); + let description = pop_feature!(features => Feature::Description(_) as Option<Description>); + + let container_rules = serde::parse_container(root.attributes)?; + let variants_iter = variants + .iter() + .map(|variant| match serde::parse_value(&variant.attrs) { + Ok(variant_rules) => Ok((variant, variant_rules)), + Err(diagnostics) => Err(diagnostics), + }) + .collect::<Result<Vec<_>, Diagnostics>>()? + .into_iter() + .filter_map(|(variant, variant_rules)| { + if variant_rules.skip { + None + } else { + Some((variant, variant_rules)) + } + }); + + let enum_variant = match repr_type_path { + Some(repr_type_path) => PlainEnumRepr::Repr( + variants_iter + .map(|(variant, _)| { + let ty = &variant.ident; + quote! { + Self::#ty as #repr_type_path + } + }) + .collect::<Array<TokenStream>>(), + repr_type_path, + ), + None => PlainEnumRepr::Plain( + variants_iter + .map(|(variant, variant_rules)| { + let parsed_features_result = + features::parse_schema_features_with(&variant.attrs, |input| { + Ok(parse_features!(input as Rename)) + }); + + match parsed_features_result { + Ok(variant_features) => { + Ok((variant, variant_rules, variant_features.unwrap_or_default())) + } + Err(diagnostics) => Err(diagnostics), + } + }) + .collect::<Result<Vec<_>, Diagnostics>>()? + .into_iter() + .map(|(variant, variant_rules, mut variant_features)| { + let name = &*variant.ident.to_string(); + let renamed = super::rename_enum_variant( + name, + &mut variant_features, + &variant_rules, + &container_rules, + rename_all.as_ref(), + ); + + renamed.unwrap_or(Cow::Borrowed(name)).to_token_stream() + }) + .collect::<Array<TokenStream>>(), + ), + }; + + Ok(Self { + root, + enum_variant, + features, + serde_enum_repr: container_rules.enum_repr, + description, + }) + } + + #[cfg(feature = "repr")] + fn get_repr_type(attributes: &[syn::Attribute]) -> Result<Option<syn::TypePath>, syn::Error> { + attributes + .iter() + .find_map(|attr| { + if attr.path().is_ident("repr") { + Some(attr.parse_args::<syn::TypePath>()) + } else { + None + } + }) + .transpose() + } +} + +impl ToTokens for PlainEnum<'_> { + fn to_tokens(&self, tokens: &mut TokenStream) { + let (variants, schema_type, enum_type) = match &self.enum_variant { + PlainEnumRepr::Plain(items) => ( + Roo::Ref(items), + Roo::Owned(SchemaType { + nullable: false, + path: Cow::Owned(syn::parse_quote!(str)), + }), + Roo::Owned(quote! { &str }), + ), + PlainEnumRepr::Repr(repr, repr_type) => ( + Roo::Ref(repr), + Roo::Owned(SchemaType { + nullable: false, + path: Cow::Borrowed(&repr_type.path), + }), + Roo::Owned(repr_type.path.to_token_stream()), + ), + }; + + match &self.serde_enum_repr { + SerdeEnumRepr::ExternallyTagged => { + EnumSchema::<PlainSchema>::with_types(variants, schema_type, enum_type) + .to_tokens(tokens); + } + SerdeEnumRepr::InternallyTagged { tag } => { + let items = variants + .iter() + .map(|item| Array::Owned(vec![item])) + .collect::<Array<_>>(); + let schema_type = schema_type.as_ref(); + let enum_type = enum_type.as_ref(); + + OneOf { + items: &items + .iter() + .map(|item| { + EnumSchema::<PlainSchema>::with_types( + Roo::Ref(item), + Roo::Ref(schema_type), + Roo::Ref(enum_type), + ) + .tagged(tag) + }) + .collect(), + discriminator: None, + } + .to_tokens(tokens) + } + SerdeEnumRepr::Untagged => { + // Even though untagged enum might have multiple variants, but unit type variants + // all will result `null` empty schema thus returning one empty schema is + // sufficient instead of returning one of N * `null` schema. + EnumSchema::<TokenStream>::untagged().to_tokens(tokens); + } + SerdeEnumRepr::AdjacentlyTagged { tag, content } => { + let items = variants + .iter() + .map(|item| Array::Owned(vec![item])) + .collect::<Array<_>>(); + let schema_type = schema_type.as_ref(); + let enum_type = enum_type.as_ref(); + + OneOf { + items: &items + .iter() + .map(|item| { + EnumSchema::<ObjectSchema>::adjacently_tagged( + PlainSchema::new( + item.deref(), + Roo::Ref(schema_type), + Roo::Ref(enum_type), + ), + content, + ) + .tag(tag, PlainSchema::for_name(content)) + }) + .collect(), + discriminator: None, + } + .to_tokens(tokens) + } + // This should not be possible as serde should not let that happen + SerdeEnumRepr::UnfinishedAdjacentlyTagged { .. } => { + unreachable!("Invalid serde enum repr, serde should have panicked and not reach here, plain enum") + } + }; + + tokens.extend(self.features.to_token_stream()); + } +} + +#[cfg_attr(feature = "debug", derive(Debug))] +pub struct MixedEnum<'p> { + pub root: &'p Root<'p>, + pub tokens: TokenStream, + pub description: Option<Description>, + pub schema_references: Vec<SchemaReference>, +} + +impl<'p> MixedEnum<'p> { + pub fn new( + root: &'p Root, + variants: &Punctuated<Variant, Comma>, + mut features: Vec<Feature>, + ) -> Result<Self, Diagnostics> { + let attributes = root.attributes; + let container_rules = serde::parse_container(attributes)?; + + let rename_all = pop_feature!(features => Feature::RenameAll(_) as Option<RenameAll>); + let description = pop_feature!(features => Feature::Description(_) as Option<Description>); + let discriminator = pop_feature!(features => Feature::Discriminator(_)); + + let variants = variants + .iter() + .map(|variant| match serde::parse_value(&variant.attrs) { + Ok(variant_rules) => Ok((variant, variant_rules)), + Err(diagnostics) => Err(diagnostics), + }) + .collect::<Result<Vec<_>, Diagnostics>>()? + .into_iter() + .filter_map(|(variant, variant_rules)| { + if variant_rules.skip { + None + } else { + let variant_features = match &variant.fields { + Fields::Named(_) => { + match variant + .attrs + .parse_features::<EnumNamedFieldVariantFeatures>() + { + Ok(features) => features.into_inner().unwrap_or_default(), + Err(diagnostics) => return Some(Err(diagnostics)), + } + } + Fields::Unnamed(_) => { + match variant + .attrs + .parse_features::<EnumUnnamedFieldVariantFeatures>() + { + Ok(features) => features.into_inner().unwrap_or_default(), + Err(diagnostics) => return Some(Err(diagnostics)), + } + } + Fields::Unit => { + let parse_unit_features = + features::parse_schema_features_with(&variant.attrs, |input| { + Ok(parse_features!( + input as Title, + Rename, + Example, + Examples, + Deprecated + )) + }); + + match parse_unit_features { + Ok(features) => features.unwrap_or_default(), + Err(diagnostics) => return Some(Err(diagnostics)), + } + } + }; + + Some(Ok((variant, variant_rules, variant_features))) + } + }) + .collect::<Result<Vec<_>, Diagnostics>>()?; + + // discriminator is only supported when all variants are unnamed with single non primitive + // field + let discriminator_supported = variants + .iter() + .all(|(variant, _, features)| + matches!(&variant.fields, Fields::Unnamed(unnamed) if unnamed.unnamed.len() == 1 + && TypeTree::from_type(&unnamed.unnamed.first().unwrap().ty).expect("unnamed field should be valid TypeTree").value_type == ValueType::Object + && !features.is_inline()) + ) + && matches!(container_rules.enum_repr, SerdeEnumRepr::Untagged); + + if discriminator.is_some() && !discriminator_supported { + let discriminator: Discriminator = + IntoInner::<Option<Discriminator>>::into_inner(discriminator).unwrap(); + return Err(Diagnostics::with_span( + discriminator.get_attribute().span(), + "Found discriminator in not discriminator supported context", + ).help("`discriminator` is only supported on enums with `#[serde(untagged)]` having unnamed field variants with single reference field.") + .note("Unnamed field variants with inlined or primitive schemas does not support discriminator.") + .note("Read more about discriminators from the specs <https://spec.openapis.org/oas/latest.html#discriminator-object>")); + } + + let mut items = variants + .into_iter() + .map(|(variant, variant_serde_rules, mut variant_features)| { + if features + .iter() + .any(|feature| matches!(feature, Feature::NoRecursion(_))) + { + variant_features.push(Feature::NoRecursion(NoRecursion)); + } + MixedEnumContent::new( + variant, + root, + &container_rules, + rename_all.as_ref(), + variant_serde_rules, + variant_features, + ) + }) + .collect::<Result<Vec<MixedEnumContent>, Diagnostics>>()?; + + let schema_references = items + .iter_mut() + .flat_map(|item| std::mem::take(&mut item.schema_references)) + .collect::<Vec<_>>(); + + let one_of_enum = OneOf { + items: &Array::Owned(items), + discriminator, + }; + + let _ = pop_feature!(features => Feature::NoRecursion(_)); + let mut tokens = one_of_enum.to_token_stream(); + tokens.extend(features.to_token_stream()); + + Ok(Self { + root, + tokens, + description, + schema_references, + }) + } +} + +impl ToTokens for MixedEnum<'_> { + fn to_tokens(&self, tokens: &mut TokenStream) { + self.tokens.to_tokens(tokens); + } +} + +#[cfg_attr(feature = "debug", derive(Debug))] +struct MixedEnumContent { + tokens: TokenStream, + schema_references: Vec<SchemaReference>, +} + +impl MixedEnumContent { + fn new( + variant: &Variant, + root: &Root, + serde_container: &SerdeContainer, + rename_all: Option<&RenameAll>, + variant_serde_rules: SerdeValue, + mut variant_features: Vec<Feature>, + ) -> Result<Self, Diagnostics> { + let mut tokens = TokenStream::new(); + let name = variant.ident.to_string(); + // TODO support `description = ...` attribute via Feature::Description + // let description = + // pop_feature!(variant_features => Feature::Description(_) as Option<Description>); + let variant_description = + CommentAttributes::from_attributes(&variant.attrs).as_formatted_string(); + let description: Option<Description> = + (!variant_description.is_empty()).then(|| variant_description.into()); + if let Some(description) = description { + variant_features.push(Feature::Description(description)) + } + + if variant.attrs.has_deprecated() { + variant_features.push(Feature::Deprecated(true.into())) + } + + let mut schema_references: Vec<SchemaReference> = Vec::new(); + match &variant.fields { + Fields::Named(named) => { + let (variant_tokens, references) = + MixedEnumContent::get_named_tokens_with_schema_references( + root, + MixedEnumVariant { + variant, + fields: &named.named, + name, + }, + variant_features, + serde_container, + variant_serde_rules, + rename_all, + )?; + schema_references.extend(references); + variant_tokens.to_tokens(&mut tokens); + } + Fields::Unnamed(unnamed) => { + let (variant_tokens, references) = + MixedEnumContent::get_unnamed_tokens_with_schema_reference( + root, + MixedEnumVariant { + variant, + fields: &unnamed.unnamed, + name, + }, + variant_features, + serde_container, + variant_serde_rules, + rename_all, + )?; + + schema_references.extend(references); + variant_tokens.to_tokens(&mut tokens); + } + Fields::Unit => { + let variant_tokens = MixedEnumContent::get_unit_tokens( + name, + variant_features, + serde_container, + variant_serde_rules, + rename_all, + ); + variant_tokens.to_tokens(&mut tokens); + } + } + + Ok(Self { + tokens, + schema_references, + }) + } + + fn get_named_tokens_with_schema_references( + root: &Root, + variant: MixedEnumVariant, + mut variant_features: Vec<Feature>, + serde_container: &SerdeContainer, + variant_serde_rules: SerdeValue, + rename_all: Option<&RenameAll>, + ) -> Result<(TokenStream, Vec<SchemaReference>), Diagnostics> { + let MixedEnumVariant { + variant, + fields, + name, + } = variant; + + let renamed = super::rename_enum_variant( + &name, + &mut variant_features, + &variant_serde_rules, + serde_container, + rename_all, + ); + let name = renamed.unwrap_or(Cow::Owned(name)); + + let root = &Root { + ident: &variant.ident, + attributes: &variant.attrs, + generics: root.generics, + }; + + let tokens_with_schema_references = match &serde_container.enum_repr { + SerdeEnumRepr::ExternallyTagged => { + let (enum_features, variant_features) = + MixedEnumContent::split_enum_features(variant_features); + let schema = NamedStructSchema::new(root, fields, variant_features)?; + let schema_tokens = schema.to_token_stream(); + + ( + EnumSchema::<ObjectSchema>::new(name.as_ref(), schema_tokens) + .features(enum_features) + .to_token_stream(), + schema.fields_references, + ) + } + SerdeEnumRepr::InternallyTagged { tag } => { + let (enum_features, variant_features) = + MixedEnumContent::split_enum_features(variant_features); + let schema = NamedStructSchema::new(root, fields, variant_features)?; + + let mut schema_tokens = schema.to_token_stream(); + ( + if schema.is_all_of { + let object_builder_tokens = + quote! { fastapi::openapi::schema::Object::builder() }; + let enum_schema_tokens = + EnumSchema::<ObjectSchema>::tagged(object_builder_tokens) + .tag(tag, PlainSchema::for_name(name.as_ref())) + .features(enum_features) + .to_token_stream(); + schema_tokens.extend(quote! { + .item(#enum_schema_tokens) + }); + schema_tokens + } else { + EnumSchema::<ObjectSchema>::tagged(schema_tokens) + .tag(tag, PlainSchema::for_name(name.as_ref())) + .features(enum_features) + .to_token_stream() + }, + schema.fields_references, + ) + } + SerdeEnumRepr::Untagged => { + let schema = NamedStructSchema::new(root, fields, variant_features)?; + (schema.to_token_stream(), schema.fields_references) + } + SerdeEnumRepr::AdjacentlyTagged { tag, content } => { + let (enum_features, variant_features) = + MixedEnumContent::split_enum_features(variant_features); + let schema = NamedStructSchema::new(root, fields, variant_features)?; + + let schema_tokens = schema.to_token_stream(); + ( + EnumSchema::<ObjectSchema>::adjacently_tagged(schema_tokens, content) + .tag(tag, PlainSchema::for_name(name.as_ref())) + .features(enum_features) + .to_token_stream(), + schema.fields_references, + ) + } + SerdeEnumRepr::UnfinishedAdjacentlyTagged { .. } => unreachable!( + "Invalid serde enum repr, serde should have panicked before reaching here" + ), + }; + + Ok(tokens_with_schema_references) + } + + fn get_unnamed_tokens_with_schema_reference( + root: &Root, + variant: MixedEnumVariant, + mut variant_features: Vec<Feature>, + serde_container: &SerdeContainer, + variant_serde_rules: SerdeValue, + rename_all: Option<&RenameAll>, + ) -> Result<(TokenStream, Vec<SchemaReference>), Diagnostics> { + let MixedEnumVariant { + variant, + fields, + name, + } = variant; + + let renamed = super::rename_enum_variant( + &name, + &mut variant_features, + &variant_serde_rules, + serde_container, + rename_all, + ); + let name = renamed.unwrap_or(Cow::Owned(name)); + + let root = &Root { + ident: &variant.ident, + attributes: &variant.attrs, + generics: root.generics, + }; + + let tokens_with_schema_reference = match &serde_container.enum_repr { + SerdeEnumRepr::ExternallyTagged => { + let (enum_features, variant_features) = + MixedEnumContent::split_enum_features(variant_features); + let schema = UnnamedStructSchema::new(root, fields, variant_features)?; + + let schema_tokens = schema.to_token_stream(); + ( + EnumSchema::<ObjectSchema>::new(name.as_ref(), schema_tokens) + .features(enum_features) + .to_token_stream(), + schema.schema_references, + ) + } + SerdeEnumRepr::InternallyTagged { tag } => { + let (enum_features, variant_features) = + MixedEnumContent::split_enum_features(variant_features); + let schema = UnnamedStructSchema::new(root, fields, variant_features)?; + + let schema_tokens = schema.to_token_stream(); + + let is_reference = fields + .iter() + .map(|field| TypeTree::from_type(&field.ty)) + .collect::<Result<Vec<TypeTree>, Diagnostics>>()? + .iter() + .any(|type_tree| type_tree.value_type == ValueType::Object); + + ( + EnumSchema::<InternallyTaggedUnnamedSchema>::new(schema_tokens, is_reference) + .tag(tag, PlainSchema::for_name(name.as_ref())) + .features(enum_features) + .to_token_stream(), + schema.schema_references, + ) + } + SerdeEnumRepr::Untagged => { + let schema = UnnamedStructSchema::new(root, fields, variant_features)?; + (schema.to_token_stream(), schema.schema_references) + } + SerdeEnumRepr::AdjacentlyTagged { tag, content } => { + if fields.len() > 1 { + return Err(Diagnostics::with_span(variant.span(), + "Unnamed (tuple) enum variants are unsupported for internally tagged enums using the `tag = ` serde attribute") + .help("Try using a different serde enum representation") + .note("See more about enum limitations here: `https://serde.rs/enum-representations.html#internally-tagged`") + ); + } + + let (enum_features, variant_features) = + MixedEnumContent::split_enum_features(variant_features); + let schema = UnnamedStructSchema::new(root, fields, variant_features)?; + + let schema_tokens = schema.to_token_stream(); + ( + EnumSchema::<ObjectSchema>::adjacently_tagged(schema_tokens, content) + .tag(tag, PlainSchema::for_name(name.as_ref())) + .features(enum_features) + .to_token_stream(), + schema.schema_references, + ) + } + SerdeEnumRepr::UnfinishedAdjacentlyTagged { .. } => unreachable!( + "Invalid serde enum repr, serde should have panicked before reaching here" + ), + }; + + Ok(tokens_with_schema_reference) + } + + fn get_unit_tokens( + name: String, + mut variant_features: Vec<Feature>, + serde_container: &SerdeContainer, + variant_serde_rules: SerdeValue, + rename_all: Option<&RenameAll>, + ) -> TokenStream { + let renamed = super::rename_enum_variant( + &name, + &mut variant_features, + &variant_serde_rules, + serde_container, + rename_all, + ); + let name = renamed.unwrap_or(Cow::Owned(name)); + + match &serde_container.enum_repr { + SerdeEnumRepr::ExternallyTagged => EnumSchema::<PlainSchema>::new(name.as_ref()) + .features(variant_features) + .to_token_stream(), + SerdeEnumRepr::InternallyTagged { tag } => { + EnumSchema::<PlainSchema>::new(name.as_ref()) + .tagged(tag) + .features(variant_features) + .to_token_stream() + } + SerdeEnumRepr::Untagged => { + let v: EnumSchema = EnumSchema::untagged().features(variant_features); + v.to_token_stream() + } + SerdeEnumRepr::AdjacentlyTagged { tag, .. } => { + EnumSchema::<PlainSchema>::new(name.as_ref()) + .tagged(tag) + .features(variant_features) + .to_token_stream() + } + SerdeEnumRepr::UnfinishedAdjacentlyTagged { .. } => unreachable!( + "Invalid serde enum repr, serde should have panicked before reaching here" + ), + } + } + + fn split_enum_features(variant_features: Vec<Feature>) -> (Vec<Feature>, Vec<Feature>) { + let (enum_features, variant_features): (Vec<_>, Vec<_>) = + variant_features.into_iter().partition(|feature| { + matches!( + feature, + Feature::Title(_) + | Feature::Example(_) + | Feature::Examples(_) + | Feature::Default(_) + | Feature::Description(_) + | Feature::Deprecated(_) + ) + }); + + (enum_features, variant_features) + } +} + +impl ToTokens for MixedEnumContent { + fn to_tokens(&self, tokens: &mut TokenStream) { + self.tokens.to_tokens(tokens); + } +} + +#[cfg_attr(feature = "debug", derive(Debug))] +pub struct MixedEnumVariant<'v> { + variant: &'v syn::Variant, + fields: &'v Punctuated<syn::Field, Comma>, + name: String, +} + +#[cfg_attr(feature = "debug", derive(Debug))] +pub struct EnumSchema<T = TokenStream> { + features: Vec<Feature>, + untagged: bool, + content: Option<T>, +} + +impl<T> EnumSchema<T> { + fn untagged() -> EnumSchema<T> { + Self { + untagged: true, + features: Vec::new(), + content: None, + } + } + + fn features(mut self, features: Vec<Feature>) -> Self { + self.features = features; + + self + } +} + +impl<T> ToTokens for EnumSchema<T> +where + T: ToTokens, +{ + fn to_tokens(&self, tokens: &mut TokenStream) { + if let Some(content) = &self.content { + tokens.extend(content.to_token_stream()); + } + + if self.untagged { + tokens.extend(quote! { + fastapi::openapi::schema::Object::builder() + .schema_type(fastapi::openapi::schema::Type::Null) + .default(Some(serde_json::Value::Null)) + }) + } + + tokens.extend(self.features.to_token_stream()); + } +} + +impl<'a> EnumSchema<ObjectSchema> { + fn new<T: ToTokens>(name: &'a str, item: T) -> Self { + let content = quote! { + fastapi::openapi::schema::Object::builder() + .property(#name, #item) + .required(#name) + }; + + Self { + content: Some(ObjectSchema(content)), + features: Vec::new(), + untagged: false, + } + } + + fn tagged<T: ToTokens>(item: T) -> Self { + let content = item.to_token_stream(); + + Self { + content: Some(ObjectSchema(content)), + features: Vec::new(), + untagged: false, + } + } + + fn tag(mut self, tag: &'a str, tag_schema: PlainSchema) -> Self { + let content = self.content.get_or_insert(ObjectSchema::default()); + + content.0.extend(quote! { + .property(#tag, fastapi::openapi::schema::Object::builder() #tag_schema) + .required(#tag) + }); + + self + } + + fn adjacently_tagged<T: ToTokens>(item: T, content: &str) -> Self { + let content = quote! { + fastapi::openapi::schema::Object::builder() + .property(#content, #item) + .required(#content) + }; + + Self { + content: Some(ObjectSchema(content)), + features: Vec::new(), + untagged: false, + } + } +} + +impl EnumSchema<InternallyTaggedUnnamedSchema> { + fn new<T: ToTokens>(item: T, is_reference: bool) -> Self { + let schema = item.to_token_stream(); + + let tokens = if is_reference { + quote! { + fastapi::openapi::schema::AllOfBuilder::new() + .item(#schema) + } + } else { + quote! { + #schema + .schema_type(fastapi::openapi::schema::Type::Object) + } + }; + + Self { + content: Some(InternallyTaggedUnnamedSchema(tokens, is_reference)), + untagged: false, + features: Vec::new(), + } + } + + fn tag(mut self, tag: &str, tag_schema: PlainSchema) -> Self { + let content = self + .content + .get_or_insert(InternallyTaggedUnnamedSchema::default()); + let is_reference = content.1; + + if is_reference { + content.0.extend(quote! { + .item( + fastapi::openapi::schema::Object::builder() + .property(#tag, fastapi::openapi::schema::Object::builder() #tag_schema) + .required(#tag) + ) + }); + } else { + content.0.extend(quote! { + .property(#tag, fastapi::openapi::schema::Object::builder() #tag_schema) + .required(#tag) + }); + } + + self + } +} + +impl<'a> EnumSchema<PlainSchema> { + fn new<N: ToTokens>(name: N) -> Self { + let plain_schema = PlainSchema::for_name(name); + + Self { + content: Some(PlainSchema(quote! { + fastapi::openapi::schema::Object::builder() #plain_schema + })), + untagged: false, + features: Vec::new(), + } + } + + fn with_types<T: ToTokens>( + items: Roo<'a, Array<'a, T>>, + schema_type: Roo<'a, SchemaType<'a>>, + enum_type: Roo<'a, TokenStream>, + ) -> Self { + let plain_schema = PlainSchema::new(&items, schema_type, enum_type); + + Self { + content: Some(PlainSchema(quote! { + fastapi::openapi::schema::Object::builder() #plain_schema + })), + untagged: false, + features: Vec::new(), + } + } + + fn tagged(mut self, tag: &str) -> Self { + if let Some(content) = self.content { + let plain_schema = content.0; + self.content = Some(PlainSchema( + quote! { + fastapi::openapi::schema::Object::builder() + .property(#tag, #plain_schema ) + .required(#tag) + } + .to_token_stream(), + )); + } + + self + } +} + +#[derive(Default)] +struct ObjectSchema(TokenStream); + +impl ToTokens for ObjectSchema { + fn to_tokens(&self, tokens: &mut TokenStream) { + self.0.to_tokens(tokens); + } +} + +#[derive(Default)] +struct InternallyTaggedUnnamedSchema(TokenStream, bool); + +impl ToTokens for InternallyTaggedUnnamedSchema { + fn to_tokens(&self, tokens: &mut TokenStream) { + self.0.to_tokens(tokens); + } +} + +#[derive(Default)] +struct PlainSchema(TokenStream); + +impl PlainSchema { + fn get_default_types() -> (Roo<'static, SchemaType<'static>>, Roo<'static, TokenStream>) { + let type_path: TypePath = syn::parse_quote!(str); + let schema_type = SchemaType { + path: Cow::Owned(type_path.path), + nullable: false, + }; + let enum_type = quote! { &str }; + + (Roo::Owned(schema_type), Roo::Owned(enum_type)) + } + + fn new<'a, T: ToTokens>( + items: &[T], + schema_type: Roo<'a, SchemaType<'a>>, + enum_type: Roo<'a, TokenStream>, + ) -> Self { + let schema_type = schema_type.to_token_stream(); + let enum_type = enum_type.as_ref(); + let items = Array::Borrowed(items); + let len = items.len(); + + let plain_enum = quote! { + .schema_type(#schema_type) + .enum_values::<[#enum_type; #len], #enum_type>(Some(#items)) + }; + + Self(plain_enum.to_token_stream()) + } + + fn for_name<N: ToTokens>(name: N) -> Self { + let (schema_type, enum_type) = Self::get_default_types(); + let name = &[name.to_token_stream()]; + Self::new(name, schema_type, enum_type) + } +} + +impl ToTokens for PlainSchema { + fn to_tokens(&self, tokens: &mut TokenStream) { + self.0.to_tokens(tokens); + } +} + +#[cfg_attr(feature = "debug", derive(Debug))] +pub struct OneOf<'a, T: ToTokens> { + items: &'a Array<'a, T>, + discriminator: Option<Feature>, +} + +impl<'a, T> ToTokens for OneOf<'a, T> +where + T: ToTokens, +{ + fn to_tokens(&self, tokens: &mut TokenStream) { + let items = self.items; + let len = items.len(); + + // concat items + let items_as_tokens = items.iter().fold(TokenStream::new(), |mut items, item| { + items.extend(quote! { + .item(#item) + }); + + items + }); + + // discriminator tokens will not fail + let discriminator = self.discriminator.to_token_stream(); + + tokens.extend(quote! { + Into::<fastapi::openapi::schema::OneOfBuilder>::into(fastapi::openapi::OneOf::with_capacity(#len)) + #items_as_tokens + #discriminator + }); + } +} + +/// `RefOrOwned` is simple `Cow` like type to wrap either `ref` or owned value. This allows passing +/// either owned or referenced values as if they were owned like the `Cow` does but this works with +/// non cloneable types. Thus values cannot be modified but they can be passed down as re-referenced +/// values by dereffing the original value. `Roo::Ref(original.deref())`. +#[cfg_attr(feature = "debug", derive(Debug))] +pub enum Roo<'t, T> { + Ref(&'t T), + Owned(T), +} + +impl<'t, T> Deref for Roo<'t, T> { + type Target = T; + + fn deref(&self) -> &Self::Target { + match self { + Self::Ref(t) => t, + Self::Owned(t) => t, + } + } +} + +impl<'t, T> AsRef<T> for Roo<'t, T> { + fn as_ref(&self) -> &T { + self.deref() + } +} diff --git a/fastapi-gen/src/component/schema/features.rs b/fastapi-gen/src/component/schema/features.rs new file mode 100644 index 0000000..7db9126 --- /dev/null +++ b/fastapi-gen/src/component/schema/features.rs @@ -0,0 +1,273 @@ +use syn::{ + parse::{Parse, ParseBuffer, ParseStream}, + Attribute, +}; + +use crate::{ + component::features::{ + attributes::{ + AdditionalProperties, As, Bound, ContentEncoding, ContentMediaType, Deprecated, + Description, Discriminator, Example, Examples, Format, Ignore, Inline, NoRecursion, + Nullable, ReadOnly, Rename, RenameAll, Required, SchemaWith, Title, ValueType, + WriteOnly, XmlAttr, + }, + impl_into_inner, impl_merge, parse_features, + validation::{ + ExclusiveMaximum, ExclusiveMinimum, MaxItems, MaxLength, MaxProperties, Maximum, + MinItems, MinLength, MinProperties, Minimum, MultipleOf, Pattern, + }, + Feature, Merge, + }, + Diagnostics, +}; + +#[cfg_attr(feature = "debug", derive(Debug))] +pub struct NamedFieldStructFeatures(Vec<Feature>); + +impl Parse for NamedFieldStructFeatures { + fn parse(input: ParseStream) -> syn::Result<Self> { + Ok(NamedFieldStructFeatures(parse_features!( + input as Example, + Examples, + XmlAttr, + Title, + RenameAll, + MaxProperties, + MinProperties, + As, + crate::component::features::attributes::Default, + Deprecated, + Description, + Bound, + NoRecursion + ))) + } +} + +impl_into_inner!(NamedFieldStructFeatures); + +#[cfg_attr(feature = "debug", derive(Debug))] +pub struct UnnamedFieldStructFeatures(Vec<Feature>); + +impl Parse for UnnamedFieldStructFeatures { + fn parse(input: ParseStream) -> syn::Result<Self> { + Ok(UnnamedFieldStructFeatures(parse_features!( + input as Example, + Examples, + crate::component::features::attributes::Default, + Title, + Format, + ValueType, + As, + Deprecated, + Description, + ContentEncoding, + ContentMediaType, + Bound, + NoRecursion + ))) + } +} + +impl_into_inner!(UnnamedFieldStructFeatures); + +pub struct EnumFeatures(Vec<Feature>); + +impl Parse for EnumFeatures { + fn parse(input: ParseStream) -> syn::Result<Self> { + Ok(EnumFeatures(parse_features!( + input as Example, + Examples, + crate::component::features::attributes::Default, + Title, + RenameAll, + As, + Deprecated, + Description, + Bound + ))) + } +} + +impl_into_inner!(EnumFeatures); + +pub struct MixedEnumFeatures(Vec<Feature>); + +impl Parse for MixedEnumFeatures { + fn parse(input: ParseStream) -> syn::Result<Self> { + Ok(MixedEnumFeatures(parse_features!( + input as Example, + Examples, + crate::component::features::attributes::Default, + Title, + RenameAll, + As, + Deprecated, + Description, + Discriminator, + NoRecursion + ))) + } +} + +impl_into_inner!(MixedEnumFeatures); + +pub struct NamedFieldFeatures(Vec<Feature>); + +impl Parse for NamedFieldFeatures { + fn parse(input: ParseStream) -> syn::Result<Self> { + Ok(NamedFieldFeatures(parse_features!( + input as Example, + Examples, + ValueType, + Format, + crate::component::features::attributes::Default, + WriteOnly, + ReadOnly, + XmlAttr, + Inline, + Nullable, + Rename, + MultipleOf, + Maximum, + Minimum, + ExclusiveMaximum, + ExclusiveMinimum, + MaxLength, + MinLength, + Pattern, + MaxItems, + MinItems, + SchemaWith, + AdditionalProperties, + Required, + Deprecated, + ContentEncoding, + ContentMediaType, + Ignore, + NoRecursion + ))) + } +} + +impl_into_inner!(NamedFieldFeatures); + +pub struct EnumNamedFieldVariantFeatures(Vec<Feature>); + +impl Parse for EnumNamedFieldVariantFeatures { + fn parse(input: ParseStream) -> syn::Result<Self> { + Ok(EnumNamedFieldVariantFeatures(parse_features!( + input as Example, + Examples, + crate::component::features::attributes::Default, + XmlAttr, + Title, + Rename, + RenameAll, + Deprecated, + MaxProperties, + MinProperties, + NoRecursion + ))) + } +} + +impl_into_inner!(EnumNamedFieldVariantFeatures); + +pub struct EnumUnnamedFieldVariantFeatures(Vec<Feature>); + +impl Parse for EnumUnnamedFieldVariantFeatures { + fn parse(input: ParseStream) -> syn::Result<Self> { + Ok(EnumUnnamedFieldVariantFeatures(parse_features!( + input as Example, + Examples, + crate::component::features::attributes::Default, + Title, + Format, + ValueType, + Rename, + Deprecated, + NoRecursion + ))) + } +} + +impl_into_inner!(EnumUnnamedFieldVariantFeatures); + +pub trait FromAttributes { + fn parse_features<T>(&self) -> Result<Option<T>, Diagnostics> + where + T: Parse + Merge<T>; +} + +impl FromAttributes for &'_ [Attribute] { + fn parse_features<T>(&self) -> Result<Option<T>, Diagnostics> + where + T: Parse + Merge<T>, + { + parse_schema_features::<T>(self) + } +} + +impl FromAttributes for Vec<Attribute> { + fn parse_features<T>(&self) -> Result<Option<T>, Diagnostics> + where + T: Parse + Merge<T>, + { + parse_schema_features::<T>(self) + } +} + +impl_merge!( + NamedFieldStructFeatures, + UnnamedFieldStructFeatures, + EnumFeatures, + MixedEnumFeatures, + NamedFieldFeatures, + EnumNamedFieldVariantFeatures, + EnumUnnamedFieldVariantFeatures +); + +pub fn parse_schema_features<T: Sized + Parse + Merge<T>>( + attributes: &[Attribute], +) -> Result<Option<T>, Diagnostics> { + Ok(attributes + .iter() + .filter(|attribute| { + attribute + .path() + .get_ident() + .map(|ident| *ident == "schema") + .unwrap_or(false) + }) + .map(|attribute| attribute.parse_args::<T>().map_err(Diagnostics::from)) + .collect::<Result<Vec<T>, Diagnostics>>()? + .into_iter() + .reduce(|acc, item| acc.merge(item))) +} + +pub fn parse_schema_features_with< + T: Merge<T>, + P: for<'r> FnOnce(&'r ParseBuffer<'r>) -> syn::Result<T> + Copy, +>( + attributes: &[Attribute], + parser: P, +) -> Result<Option<T>, Diagnostics> { + Ok(attributes + .iter() + .filter(|attribute| { + attribute + .path() + .get_ident() + .map(|ident| *ident == "schema") + .unwrap_or(false) + }) + .map(|attributes| { + attributes + .parse_args_with(parser) + .map_err(Diagnostics::from) + }) + .collect::<Result<Vec<T>, Diagnostics>>()? + .into_iter() + .reduce(|acc, item| acc.merge(item))) +} diff --git a/fastapi-gen/src/component/schema/xml.rs b/fastapi-gen/src/component/schema/xml.rs new file mode 100644 index 0000000..9398f02 --- /dev/null +++ b/fastapi-gen/src/component/schema/xml.rs @@ -0,0 +1,134 @@ +use proc_macro2::Ident; +use quote::{quote, ToTokens}; +use syn::{parenthesized, parse::Parse, token::Paren, Error, LitStr, Token}; + +use crate::parse_utils; + +#[derive(Default, Clone)] +#[cfg_attr(feature = "debug", derive(Debug))] +pub struct XmlAttr { + pub name: Option<String>, + pub namespace: Option<String>, + pub prefix: Option<String>, + pub is_attribute: bool, + pub is_wrapped: Option<Ident>, + pub wrap_name: Option<String>, +} + +impl XmlAttr { + pub fn with_wrapped(is_wrapped: Option<Ident>, wrap_name: Option<String>) -> Self { + Self { + is_wrapped, + wrap_name, + ..Default::default() + } + } +} + +impl Parse for XmlAttr { + fn parse(input: syn::parse::ParseStream) -> syn::Result<Self> { + const EXPECTED_ATTRIBUTE_MESSAGE: &str = + "unexpected attribute, expected any of: name, namespace, prefix, attribute, wrapped"; + let mut xml = XmlAttr::default(); + + while !input.is_empty() { + let attribute = input + .parse::<Ident>() + .map_err(|error| Error::new(error.span(), EXPECTED_ATTRIBUTE_MESSAGE))?; + let attribute_name = &*attribute.to_string(); + + match attribute_name { + "name" => { + xml.name = + Some(parse_utils::parse_next(input, || input.parse::<LitStr>())?.value()) + } + "namespace" => { + xml.namespace = + Some(parse_utils::parse_next(input, || input.parse::<LitStr>())?.value()) + } + "prefix" => { + xml.prefix = + Some(parse_utils::parse_next(input, || input.parse::<LitStr>())?.value()) + } + "attribute" => xml.is_attribute = parse_utils::parse_bool_or_true(input)?, + "wrapped" => { + // wrapped or wrapped(name = "wrap_name") + if input.peek(Paren) { + let group; + parenthesized!(group in input); + + let wrapped_attribute = group.parse::<Ident>().map_err(|error| { + Error::new( + error.span(), + format!("unexpected attribute, expected: name, {error}"), + ) + })?; + if wrapped_attribute != "name" { + return Err(Error::new( + wrapped_attribute.span(), + "unexpected wrapped attribute, expected: name", + )); + } + group.parse::<Token![=]>()?; + xml.wrap_name = Some(group.parse::<LitStr>()?.value()); + } + xml.is_wrapped = Some(attribute); + } + _ => return Err(Error::new(attribute.span(), EXPECTED_ATTRIBUTE_MESSAGE)), + } + + if !input.is_empty() { + input.parse::<Token![,]>()?; + } + } + + Ok(xml) + } +} + +impl ToTokens for XmlAttr { + fn to_tokens(&self, tokens: &mut proc_macro2::TokenStream) { + tokens.extend(quote! { + fastapi::openapi::xml::XmlBuilder::new() + }); + + if let Some(ref name) = self.name { + tokens.extend(quote! { + .name(Some(#name)) + }) + } + + if let Some(ref namespace) = self.namespace { + tokens.extend(quote! { + .namespace(Some(#namespace)) + }) + } + + if let Some(ref prefix) = self.prefix { + tokens.extend(quote! { + .prefix(Some(#prefix)) + }) + } + + if self.is_attribute { + tokens.extend(quote! { + .attribute(Some(true)) + }) + } + + if self.is_wrapped.is_some() { + tokens.extend(quote! { + .wrapped(Some(true)) + }); + + // if is wrapped and wrap name is defined use wrap name instead + if let Some(ref wrap_name) = self.wrap_name { + tokens.extend(quote! { + .name(Some(#wrap_name)) + }) + } + } + + tokens.extend(quote! { .build() }) + } +} diff --git a/fastapi-gen/src/component/serde.rs b/fastapi-gen/src/component/serde.rs new file mode 100644 index 0000000..e20c613 --- /dev/null +++ b/fastapi-gen/src/component/serde.rs @@ -0,0 +1,510 @@ +//! Provides serde related features parsing serde attributes from types. + +use std::str::FromStr; + +use proc_macro2::{Ident, Span, TokenTree}; +use syn::{buffer::Cursor, Attribute, Error}; + +use crate::Diagnostics; + +#[inline] +fn parse_next_lit_str(next: Cursor) -> Option<(String, Span)> { + match next.token_tree() { + Some((tt, next)) => match tt { + TokenTree::Punct(punct) if punct.as_char() == '=' => parse_next_lit_str(next), + TokenTree::Literal(literal) => { + Some((literal.to_string().replace('\"', ""), literal.span())) + } + _ => None, + }, + _ => None, + } +} + +#[derive(Default)] +#[cfg_attr(feature = "debug", derive(Debug))] +#[cfg_attr(test, derive(PartialEq, Eq))] +pub struct SerdeValue { + pub skip: bool, + pub rename: Option<String>, + pub default: bool, + pub flatten: bool, + pub skip_serializing_if: bool, + pub double_option: bool, +} + +impl SerdeValue { + const SERDE_WITH_DOUBLE_OPTION: &'static str = "::serde_with::rust::double_option"; +} + +impl SerdeValue { + fn parse(input: syn::parse::ParseStream) -> syn::Result<Self> { + let mut value = Self::default(); + + input.step(|cursor| { + let mut rest = *cursor; + while let Some((tt, next)) = rest.token_tree() { + match tt { + TokenTree::Ident(ident) + if ident == "skip" + || ident == "skip_serializing" + || ident == "skip_deserializing" => + { + value.skip = true + } + TokenTree::Ident(ident) if ident == "skip_serializing_if" => { + value.skip_serializing_if = true + } + TokenTree::Ident(ident) if ident == "with" => { + value.double_option = parse_next_lit_str(next) + .and_then(|(literal, _)| { + if literal == SerdeValue::SERDE_WITH_DOUBLE_OPTION { + Some(true) + } else { + None + } + }) + .unwrap_or(false); + } + TokenTree::Ident(ident) if ident == "flatten" => value.flatten = true, + TokenTree::Ident(ident) if ident == "rename" => { + if let Some((literal, _)) = parse_next_lit_str(next) { + value.rename = Some(literal) + }; + } + TokenTree::Ident(ident) if ident == "default" => value.default = true, + _ => (), + } + + rest = next; + } + Ok(((), rest)) + })?; + + Ok(value) + } +} + +/// The [Serde Enum representation](https://serde.rs/enum-representations.html) being used +/// The default case (when no serde attributes are present) is `ExternallyTagged`. +#[derive(Clone, Default)] +#[cfg_attr(feature = "debug", derive(Debug))] +#[cfg_attr(test, derive(PartialEq, Eq))] +pub enum SerdeEnumRepr { + #[default] + ExternallyTagged, + InternallyTagged { + tag: String, + }, + AdjacentlyTagged { + tag: String, + content: String, + }, + Untagged, + /// This is a variant that can never happen because `serde` will not accept it. + /// With the current implementation it is necessary to have it as an intermediate state when parsing the + /// attributes + UnfinishedAdjacentlyTagged { + content: String, + }, +} + +/// Attributes defined within a `#[serde(...)]` container attribute. +#[derive(Default)] +#[cfg_attr(feature = "debug", derive(Debug))] +#[cfg_attr(test, derive(PartialEq, Eq))] +pub struct SerdeContainer { + pub rename_all: Option<RenameRule>, + pub enum_repr: SerdeEnumRepr, + pub default: bool, + pub deny_unknown_fields: bool, +} + +impl SerdeContainer { + /// Parse a single serde attribute, currently supported attributes are: + /// * `rename_all = ...` + /// * `tag = ...` + /// * `content = ...` + /// * `untagged = ...` + /// * `default = ...` + /// * `deny_unknown_fields` + fn parse_attribute(&mut self, ident: Ident, next: Cursor) -> syn::Result<()> { + match ident.to_string().as_str() { + "rename_all" => { + if let Some((literal, span)) = parse_next_lit_str(next) { + self.rename_all = Some( + literal + .parse::<RenameRule>() + .map_err(|error| Error::new(span, error.to_string()))?, + ); + } + } + "tag" => { + if let Some((literal, span)) = parse_next_lit_str(next) { + self.enum_repr = match &self.enum_repr { + SerdeEnumRepr::ExternallyTagged => { + SerdeEnumRepr::InternallyTagged { tag: literal } + } + SerdeEnumRepr::UnfinishedAdjacentlyTagged { content } => { + SerdeEnumRepr::AdjacentlyTagged { + tag: literal, + content: content.clone(), + } + } + SerdeEnumRepr::InternallyTagged { .. } + | SerdeEnumRepr::AdjacentlyTagged { .. } => { + return Err(syn::Error::new(span, "Duplicate serde tag argument")); + } + SerdeEnumRepr::Untagged => { + return Err(syn::Error::new(span, "Untagged enum cannot have tag")) + } + }; + } + } + "content" => { + if let Some((literal, span)) = parse_next_lit_str(next) { + self.enum_repr = match &self.enum_repr { + SerdeEnumRepr::InternallyTagged { tag } => { + SerdeEnumRepr::AdjacentlyTagged { + tag: tag.clone(), + content: literal, + } + } + SerdeEnumRepr::ExternallyTagged => { + SerdeEnumRepr::UnfinishedAdjacentlyTagged { content: literal } + } + SerdeEnumRepr::AdjacentlyTagged { .. } + | SerdeEnumRepr::UnfinishedAdjacentlyTagged { .. } => { + return Err(syn::Error::new(span, "Duplicate serde content argument")) + } + SerdeEnumRepr::Untagged => { + return Err(syn::Error::new(span, "Untagged enum cannot have content")) + } + }; + } + } + "untagged" => { + self.enum_repr = SerdeEnumRepr::Untagged; + } + "default" => { + self.default = true; + } + "deny_unknown_fields" => { + self.deny_unknown_fields = true; + } + _ => {} + } + Ok(()) + } + + /// Parse the attributes inside a `#[serde(...)]` container attribute. + fn parse(input: syn::parse::ParseStream) -> syn::Result<Self> { + let mut container = Self::default(); + + input.step(|cursor| { + let mut rest = *cursor; + while let Some((tt, next)) = rest.token_tree() { + if let TokenTree::Ident(ident) = tt { + container.parse_attribute(ident, next)? + } + + rest = next; + } + Ok(((), rest)) + })?; + + Ok(container) + } +} + +pub fn parse_value(attributes: &[Attribute]) -> Result<SerdeValue, Diagnostics> { + Ok(attributes + .iter() + .filter(|attribute| attribute.path().is_ident("serde")) + .map(|serde_attribute| { + serde_attribute + .parse_args_with(SerdeValue::parse) + .map_err(Diagnostics::from) + }) + .collect::<Result<Vec<_>, Diagnostics>>()? + .into_iter() + .fold(SerdeValue::default(), |mut acc, value| { + if value.skip { + acc.skip = value.skip; + } + if value.skip_serializing_if { + acc.skip_serializing_if = value.skip_serializing_if; + } + if value.rename.is_some() { + acc.rename = value.rename; + } + if value.flatten { + acc.flatten = value.flatten; + } + if value.default { + acc.default = value.default; + } + if value.double_option { + acc.double_option = value.double_option; + } + + acc + })) +} + +pub fn parse_container(attributes: &[Attribute]) -> Result<SerdeContainer, Diagnostics> { + Ok(attributes + .iter() + .filter(|attribute| attribute.path().is_ident("serde")) + .map(|serde_attribute| { + serde_attribute + .parse_args_with(SerdeContainer::parse) + .map_err(Diagnostics::from) + }) + .collect::<Result<Vec<_>, Diagnostics>>()? + .into_iter() + .fold(SerdeContainer::default(), |mut acc, value| { + if value.default { + acc.default = value.default; + } + if value.deny_unknown_fields { + acc.deny_unknown_fields = value.deny_unknown_fields; + } + match value.enum_repr { + SerdeEnumRepr::ExternallyTagged => {} + SerdeEnumRepr::Untagged + | SerdeEnumRepr::InternallyTagged { .. } + | SerdeEnumRepr::AdjacentlyTagged { .. } + | SerdeEnumRepr::UnfinishedAdjacentlyTagged { .. } => { + acc.enum_repr = value.enum_repr; + } + } + if value.rename_all.is_some() { + acc.rename_all = value.rename_all; + } + + acc + })) +} + +#[derive(Clone)] +#[cfg_attr(feature = "debug", derive(Debug))] +#[cfg_attr(test, derive(PartialEq, Eq))] +pub enum RenameRule { + Lower, + Upper, + Camel, + Snake, + ScreamingSnake, + Pascal, + Kebab, + ScreamingKebab, +} + +impl RenameRule { + pub fn rename(&self, value: &str) -> String { + match self { + RenameRule::Lower => value.to_ascii_lowercase(), + RenameRule::Upper => value.to_ascii_uppercase(), + RenameRule::Camel => { + let mut camel_case = String::new(); + + let mut upper = false; + for letter in value.chars() { + if letter == '_' { + upper = true; + continue; + } + + if upper { + camel_case.push(letter.to_ascii_uppercase()); + upper = false; + } else { + camel_case.push(letter) + } + } + + camel_case + } + RenameRule::Snake => value.to_string(), + RenameRule::ScreamingSnake => Self::Snake.rename(value).to_ascii_uppercase(), + RenameRule::Pascal => { + let mut pascal_case = String::from(&value[..1].to_ascii_uppercase()); + pascal_case.push_str(&Self::Camel.rename(&value[1..])); + + pascal_case + } + RenameRule::Kebab => Self::Snake.rename(value).replace('_', "-"), + RenameRule::ScreamingKebab => Self::Kebab.rename(value).to_ascii_uppercase(), + } + } + + pub fn rename_variant(&self, variant: &str) -> String { + match self { + RenameRule::Lower => variant.to_ascii_lowercase(), + RenameRule::Upper => variant.to_ascii_uppercase(), + RenameRule::Camel => { + let mut snake_case = String::from(&variant[..1].to_ascii_lowercase()); + snake_case.push_str(&variant[1..]); + + snake_case + } + RenameRule::Snake => { + let mut snake_case = String::new(); + + for (index, letter) in variant.char_indices() { + if index > 0 && letter.is_uppercase() { + snake_case.push('_'); + } + snake_case.push(letter); + } + + snake_case.to_ascii_lowercase() + } + RenameRule::ScreamingSnake => Self::Snake.rename_variant(variant).to_ascii_uppercase(), + RenameRule::Pascal => variant.to_string(), + RenameRule::Kebab => Self::Snake.rename_variant(variant).replace('_', "-"), + RenameRule::ScreamingKebab => Self::Kebab.rename_variant(variant).to_ascii_uppercase(), + } + } +} + +const RENAME_RULE_NAME_MAPPING: [(&str, RenameRule); 8] = [ + ("lowercase", RenameRule::Lower), + ("UPPERCASE", RenameRule::Upper), + ("PascalCase", RenameRule::Pascal), + ("camelCase", RenameRule::Camel), + ("snake_case", RenameRule::Snake), + ("SCREAMING_SNAKE_CASE", RenameRule::ScreamingSnake), + ("kebab-case", RenameRule::Kebab), + ("SCREAMING-KEBAB-CASE", RenameRule::ScreamingKebab), +]; + +impl FromStr for RenameRule { + type Err = Error; + + fn from_str(s: &str) -> Result<Self, Self::Err> { + let expected_one_of = RENAME_RULE_NAME_MAPPING + .into_iter() + .map(|(name, _)| format!(r#""{name}""#)) + .collect::<Vec<_>>() + .join(", "); + RENAME_RULE_NAME_MAPPING + .into_iter() + .find_map(|(case, rule)| if case == s { Some(rule) } else { None }) + .ok_or_else(|| { + Error::new( + Span::call_site(), + format!(r#"unexpected rename rule, expected one of: {expected_one_of}"#), + ) + }) + } +} + +#[cfg(test)] +mod tests { + use super::{parse_container, RenameRule, SerdeContainer, RENAME_RULE_NAME_MAPPING}; + use syn::{parse_quote, Attribute}; + + macro_rules! test_rename_rule { + ( $($case:expr=> $value:literal = $expected:literal)* ) => { + #[test] + fn rename_all_rename_rules() { + $( + let value = $case.rename($value); + assert_eq!(value, $expected, "expected case: {} => {} != {}", stringify!($case), $value, $expected); + )* + } + }; + } + + macro_rules! test_rename_variant_rule { + ( $($case:expr=> $value:literal = $expected:literal)* ) => { + #[test] + fn rename_all_rename_variant_rules() { + $( + let value = $case.rename_variant($value); + assert_eq!(value, $expected, "expected case: {} => {} != {}", stringify!($case), $value, $expected); + )* + } + }; + } + + test_rename_rule! { + RenameRule::Lower=> "single" = "single" + RenameRule::Upper=> "single" = "SINGLE" + RenameRule::Pascal=> "single" = "Single" + RenameRule::Camel=> "single" = "single" + RenameRule::Snake=> "single" = "single" + RenameRule::ScreamingSnake=> "single" = "SINGLE" + RenameRule::Kebab=> "single" = "single" + RenameRule::ScreamingKebab=> "single" = "SINGLE" + + RenameRule::Lower=> "multi_value" = "multi_value" + RenameRule::Upper=> "multi_value" = "MULTI_VALUE" + RenameRule::Pascal=> "multi_value" = "MultiValue" + RenameRule::Camel=> "multi_value" = "multiValue" + RenameRule::Snake=> "multi_value" = "multi_value" + RenameRule::ScreamingSnake=> "multi_value" = "MULTI_VALUE" + RenameRule::Kebab=> "multi_value" = "multi-value" + RenameRule::ScreamingKebab=> "multi_value" = "MULTI-VALUE" + } + + test_rename_variant_rule! { + RenameRule::Lower=> "Single" = "single" + RenameRule::Upper=> "Single" = "SINGLE" + RenameRule::Pascal=> "Single" = "Single" + RenameRule::Camel=> "Single" = "single" + RenameRule::Snake=> "Single" = "single" + RenameRule::ScreamingSnake=> "Single" = "SINGLE" + RenameRule::Kebab=> "Single" = "single" + RenameRule::ScreamingKebab=> "Single" = "SINGLE" + + RenameRule::Lower=> "MultiValue" = "multivalue" + RenameRule::Upper=> "MultiValue" = "MULTIVALUE" + RenameRule::Pascal=> "MultiValue" = "MultiValue" + RenameRule::Camel=> "MultiValue" = "multiValue" + RenameRule::Snake=> "MultiValue" = "multi_value" + RenameRule::ScreamingSnake=> "MultiValue" = "MULTI_VALUE" + RenameRule::Kebab=> "MultiValue" = "multi-value" + RenameRule::ScreamingKebab=> "MultiValue" = "MULTI-VALUE" + } + + #[test] + fn test_serde_rename_rule_from_str() { + for (s, _) in RENAME_RULE_NAME_MAPPING { + s.parse::<RenameRule>().unwrap(); + } + } + + #[test] + fn test_serde_parse_container() { + let default_attribute_1: syn::Attribute = parse_quote! { + #[serde(default)] + }; + let default_attribute_2: syn::Attribute = parse_quote! { + #[serde(default)] + }; + let deny_unknown_fields_attribute: syn::Attribute = parse_quote! { + #[serde(deny_unknown_fields)] + }; + let unsupported_attribute: syn::Attribute = parse_quote! { + #[serde(expecting = "...")] + }; + let attributes: &[Attribute] = &[ + default_attribute_1, + default_attribute_2, + deny_unknown_fields_attribute, + unsupported_attribute, + ]; + + let expected = SerdeContainer { + default: true, + deny_unknown_fields: true, + ..Default::default() + }; + + let result = parse_container(attributes).expect("parse success"); + assert_eq!(expected, result); + } +} diff --git a/fastapi-gen/src/doc_comment.rs b/fastapi-gen/src/doc_comment.rs new file mode 100644 index 0000000..1105136 --- /dev/null +++ b/fastapi-gen/src/doc_comment.rs @@ -0,0 +1,61 @@ +use syn::{Attribute, Expr, Lit, Meta}; + +const DOC_ATTRIBUTE_TYPE: &str = "doc"; + +/// CommentAttributes holds Vec of parsed doc comments +#[cfg_attr(feature = "debug", derive(Debug))] +pub(crate) struct CommentAttributes(pub(crate) Vec<String>); + +impl CommentAttributes { + /// Creates new [`CommentAttributes`] instance from [`Attribute`] slice filtering out all + /// other attributes which are not `doc` comments + pub(crate) fn from_attributes(attributes: &[Attribute]) -> Self { + let mut docs = attributes + .iter() + .filter_map(|attr| { + if !matches!(attr.path().get_ident(), Some(ident) if ident == DOC_ATTRIBUTE_TYPE) { + return None; + } + // ignore `#[doc(hidden)]` and similar tags. + if let Meta::NameValue(name_value) = &attr.meta { + if let Expr::Lit(ref doc_comment) = name_value.value { + if let Lit::Str(ref doc) = doc_comment.lit { + let mut doc = doc.value(); + // NB. Only trim trailing whitespaces. Leading whitespaces are handled + // below. + doc.truncate(doc.trim_end().len()); + return Some(doc); + } + } + } + None + }) + .collect::<Vec<_>>(); + // Calculate the minimum indentation of all non-empty lines and strip them. + // This can get rid of typical single space after doc comment start `///`, but not messing + // up indentation of markdown list or code. + let min_indent = docs + .iter() + .filter(|s| !s.is_empty()) + // Only recognize ASCII space, not unicode multi-bytes ones. + // `str::trim_ascii_start` requires 1.80 which is greater than our MSRV yet. + .map(|s| s.len() - s.trim_start_matches(' ').len()) + .min() + .unwrap_or(0); + for line in &mut docs { + if !line.is_empty() { + line.drain(..min_indent); + } + } + Self(docs) + } + + pub(crate) fn is_empty(&self) -> bool { + self.0.is_empty() + } + + /// Returns found `doc comments` as formatted `String` joining them all with `\n` _(new line)_. + pub(crate) fn as_formatted_string(&self) -> String { + self.0.join("\n") + } +} diff --git a/fastapi-gen/src/ext.rs b/fastapi-gen/src/ext.rs new file mode 100644 index 0000000..aee08d8 --- /dev/null +++ b/fastapi-gen/src/ext.rs @@ -0,0 +1,534 @@ +use std::borrow::Cow; + +use proc_macro2::TokenStream; +use quote::ToTokens; +use syn::spanned::Spanned; +use syn::Generics; +use syn::{punctuated::Punctuated, token::Comma, ItemFn}; + +use crate::component::{ComponentSchema, ComponentSchemaProps, Container, TypeTree}; +use crate::path::media_type::MediaTypePathExt; +use crate::path::{HttpMethod, PathTypeTree}; +use crate::{Diagnostics, ToTokensDiagnostics}; + +#[cfg(feature = "auto_into_responses")] +pub mod auto_types; + +#[cfg(feature = "actix_extras")] +pub mod actix; + +#[cfg(feature = "axum_extras")] +pub mod axum; + +#[cfg(feature = "rocket_extras")] +pub mod rocket; + +/// Represents single argument of handler operation. +#[cfg_attr( + not(any( + feature = "actix_extras", + feature = "rocket_extras", + feature = "axum_extras" + )), + allow(dead_code) +)] +#[cfg_attr(feature = "debug", derive(Debug))] +pub struct ValueArgument<'a> { + pub name: Option<Cow<'a, str>>, + #[cfg(any( + feature = "actix_extras", + feature = "rocket_extras", + feature = "axum_extras" + ))] + pub argument_in: ArgumentIn, + pub type_tree: Option<TypeTree<'a>>, +} + +#[cfg(feature = "actix_extras")] +impl<'v> From<(MacroArg, TypeTree<'v>)> for ValueArgument<'v> { + fn from((macro_arg, primitive_arg): (MacroArg, TypeTree<'v>)) -> Self { + Self { + name: match macro_arg { + MacroArg::Path(path) => Some(Cow::Owned(path.name)), + #[cfg(feature = "rocket_extras")] + MacroArg::Query(_) => None, + }, + type_tree: Some(primitive_arg), + argument_in: ArgumentIn::Path, + } + } +} + +#[cfg_attr( + not(any( + feature = "actix_extras", + feature = "rocket_extras", + feature = "axum_extras" + )), + allow(dead_code) +)] +/// Represents Identifier with `parameter_in` provider function which is used to +/// update the `parameter_in` to [`Parameter::Struct`]. +#[cfg_attr(feature = "debug", derive(Debug))] +pub struct IntoParamsType<'a> { + pub parameter_in_provider: TokenStream, + pub type_path: Option<Cow<'a, syn::Path>>, +} + +impl<'i> From<(Option<Cow<'i, syn::Path>>, TokenStream)> for IntoParamsType<'i> { + fn from((type_path, parameter_in_provider): (Option<Cow<'i, syn::Path>>, TokenStream)) -> Self { + IntoParamsType { + parameter_in_provider, + type_path, + } + } +} + +#[cfg(any( + feature = "actix_extras", + feature = "rocket_extras", + feature = "axum_extras" +))] +#[cfg_attr(feature = "debug", derive(Debug))] +#[derive(PartialEq, Eq)] +pub enum ArgumentIn { + Path, + #[cfg(feature = "rocket_extras")] + Query, +} + +#[cfg_attr(feature = "debug", derive(Debug))] +pub struct ExtSchema<'a>(TypeTree<'a>); + +impl<'t> From<TypeTree<'t>> for ExtSchema<'t> { + fn from(value: TypeTree<'t>) -> ExtSchema<'t> { + Self(value) + } +} + +impl ExtSchema<'_> { + fn get_actual_body(&self) -> Cow<'_, TypeTree<'_>> { + let actual_body_type = get_actual_body_type(&self.0); + + actual_body_type.map(|actual_body| { + if let Some(option_type) = find_option_type_tree(actual_body) { + let path = option_type.path.clone(); + Cow::Owned(TypeTree { + children: Some(vec![actual_body.clone()]), + generic_type: Some(crate::component::GenericType::Option), + value_type: crate::component::ValueType::Object, + span: Some(path.span()), + path, + }) + } else { + Cow::Borrowed(actual_body) + } + }).expect("ExtSchema must have actual request body resoved from TypeTree of handler fn argument") + } + + pub fn get_type_tree(&self) -> Result<Option<Cow<'_, TypeTree<'_>>>, Diagnostics> { + Ok(Some(Cow::Borrowed(&self.0))) + } + + pub fn get_default_content_type(&self) -> Result<Cow<'static, str>, Diagnostics> { + let type_tree = &self.0; + + let content_type = if type_tree.is("Bytes") { + Cow::Borrowed("application/octet-stream") + } else if type_tree.is("Form") { + Cow::Borrowed("application/x-www-form-urlencoded") + } else { + let get_actual_body = self.get_actual_body(); + let actual_body = get_actual_body.as_ref(); + + actual_body.get_default_content_type() + }; + + Ok(content_type) + } + + pub fn get_component_schema(&self) -> Result<Option<ComponentSchema>, Diagnostics> { + use crate::OptionExt; + + let type_tree = &self.0; + let actual_body_type = get_actual_body_type(type_tree); + + actual_body_type.and_then_try(|body_type| body_type.get_component_schema()) + } +} + +impl ToTokensDiagnostics for ExtSchema<'_> { + fn to_tokens(&self, tokens: &mut proc_macro2::TokenStream) -> Result<(), Diagnostics> { + let get_actual_body = self.get_actual_body(); + let type_tree = get_actual_body.as_ref(); + + let component_tokens = ComponentSchema::new(ComponentSchemaProps { + type_tree, + features: Vec::new(), + description: None, + container: &Container { + generics: &Generics::default(), + }, + })?; + component_tokens.to_tokens(tokens); + + Ok(()) + } +} + +fn get_actual_body_type<'t>(ty: &'t TypeTree<'t>) -> Option<&'t TypeTree<'t>> { + ty.path + .as_deref() + .expect("RequestBody TypeTree must have syn::Path") + .segments + .iter() + .find_map(|segment| match &*segment.ident.to_string() { + "Json" => Some( + ty.children + .as_deref() + .expect("Json must have children") + .first() + .expect("Json must have one child"), + ), + "Form" => Some( + ty.children + .as_deref() + .expect("Form must have children") + .first() + .expect("Form must have one child"), + ), + "Option" => get_actual_body_type( + ty.children + .as_deref() + .expect("Option must have children") + .first() + .expect("Option must have one child"), + ), + "Bytes" => Some(ty), + _ => match ty.children { + Some(ref children) => get_actual_body_type(children.first().expect( + "Must have first child when children has been defined in get_actual_body_type", + )), + None => None, + }, + }) +} + +fn find_option_type_tree<'t>(ty: &'t TypeTree) -> Option<&'t TypeTree<'t>> { + let eq = ty.generic_type == Some(crate::component::GenericType::Option); + + if !eq { + ty.children + .as_ref() + .and_then(|children| children.iter().find_map(find_option_type_tree)) + } else { + Some(ty) + } +} + +#[cfg_attr(feature = "debug", derive(Debug))] +pub struct MacroPath { + pub path: String, + #[allow(unused)] // this is needed only if axum, actix or rocket + pub args: Vec<MacroArg>, +} + +#[cfg_attr(feature = "debug", derive(Debug))] +pub enum MacroArg { + #[cfg_attr( + not(any(feature = "actix_extras", feature = "rocket_extras")), + allow(dead_code) + )] + Path(ArgValue), + #[cfg(feature = "rocket_extras")] + Query(ArgValue), +} + +impl MacroArg { + /// Get ordering by name + #[cfg(feature = "rocket_extras")] + fn by_name(a: &MacroArg, b: &MacroArg) -> std::cmp::Ordering { + a.get_value().name.cmp(&b.get_value().name) + } + + #[cfg(feature = "rocket_extras")] + fn get_value(&self) -> &ArgValue { + match self { + MacroArg::Path(path) => path, + MacroArg::Query(query) => query, + } + } +} + +#[derive(PartialEq, Eq, PartialOrd, Ord)] +#[cfg_attr(feature = "debug", derive(Debug))] +pub struct ArgValue { + pub name: String, + pub original_name: String, +} + +#[cfg_attr(feature = "debug", derive(Debug))] +pub struct ResolvedOperation { + pub methods: Vec<HttpMethod>, + pub path: String, + #[allow(unused)] // this is needed only if axum, actix or rocket + pub body: String, +} + +#[allow(unused)] +pub type Arguments<'a> = ( + Option<Vec<ValueArgument<'a>>>, + Option<Vec<IntoParamsType<'a>>>, + Option<ExtSchema<'a>>, +); + +#[allow(unused)] +pub trait ArgumentResolver { + fn resolve_arguments( + _: &'_ Punctuated<syn::FnArg, Comma>, + _: Option<Vec<MacroArg>>, + _: String, + ) -> Result<Arguments, Diagnostics> { + Ok((None, None, None)) + } +} + +pub trait PathResolver { + fn resolve_path(_: &Option<String>) -> Option<MacroPath> { + None + } +} + +pub trait PathOperationResolver { + fn resolve_operation(_: &ItemFn) -> Result<Option<ResolvedOperation>, Diagnostics> { + Ok(None) + } +} + +pub struct PathOperations; + +#[cfg(not(any( + feature = "actix_extras", + feature = "rocket_extras", + feature = "axum_extras" +)))] +impl ArgumentResolver for PathOperations {} + +#[cfg(not(any( + feature = "actix_extras", + feature = "rocket_extras", + feature = "axum_extras" +)))] +impl PathResolver for PathOperations {} + +#[cfg(not(any(feature = "actix_extras", feature = "rocket_extras")))] +impl PathOperationResolver for PathOperations {} + +#[cfg(any( + feature = "actix_extras", + feature = "axum_extras", + feature = "rocket_extras" +))] +pub mod fn_arg { + + use proc_macro2::Ident; + #[cfg(any(feature = "actix_extras", feature = "axum_extras"))] + use quote::quote; + use syn::spanned::Spanned; + use syn::PatStruct; + use syn::{punctuated::Punctuated, token::Comma, Pat, PatType}; + + use crate::component::TypeTree; + #[cfg(any(feature = "actix_extras", feature = "axum_extras"))] + use crate::component::ValueType; + use crate::Diagnostics; + + /// Http operation handler functions fn argument. + #[cfg_attr(feature = "debug", derive(Debug))] + pub struct FnArg<'a> { + pub ty: TypeTree<'a>, + pub arg_type: FnArgType<'a>, + } + + #[cfg_attr(feature = "debug", derive(Debug))] + #[derive(PartialEq, Eq, PartialOrd, Ord)] + pub enum FnArgType<'t> { + Single(&'t Ident), + Destructed(Vec<&'t Ident>), + } + + #[cfg(feature = "rocket_extras")] + impl FnArgType<'_> { + /// Get best effort name `Ident` for the type. For `FnArgType::Tuple` types it will take the first one + /// from `Vec`. + pub(super) fn get_name(&self) -> &Ident { + match self { + Self::Single(ident) => ident, + // perform best effort name, by just taking the first one from the list + Self::Destructed(tuple) => tuple + .first() + .expect("Expected at least one argument in FnArgType::Tuple"), + } + } + } + + impl<'a> From<(TypeTree<'a>, FnArgType<'a>)> for FnArg<'a> { + fn from((ty, arg_type): (TypeTree<'a>, FnArgType<'a>)) -> Self { + Self { ty, arg_type } + } + } + + impl<'a> Ord for FnArg<'a> { + fn cmp(&self, other: &Self) -> std::cmp::Ordering { + self.arg_type.cmp(&other.arg_type) + } + } + + impl<'a> PartialOrd for FnArg<'a> { + fn partial_cmp(&self, other: &Self) -> Option<std::cmp::Ordering> { + Some(self.arg_type.cmp(&other.arg_type)) + } + } + + impl<'a> PartialEq for FnArg<'a> { + fn eq(&self, other: &Self) -> bool { + self.ty == other.ty && self.arg_type == other.arg_type + } + } + + impl<'a> Eq for FnArg<'a> {} + + pub fn get_fn_args( + fn_args: &Punctuated<syn::FnArg, Comma>, + ) -> Result<impl Iterator<Item = FnArg>, Diagnostics> { + fn_args + .iter() + .filter_map(|arg| { + let pat_type = match get_fn_arg_pat_type(arg) { + Ok(pat_type) => pat_type, + Err(diagnostics) => return Some(Err(diagnostics)), + }; + + match pat_type.pat.as_ref() { + syn::Pat::Wild(_) => None, + _ => { + let arg_name = match get_pat_fn_arg_type(pat_type.pat.as_ref()) { + Ok(arg_type) => arg_type, + Err(diagnostics) => return Some(Err(diagnostics)), + }; + match TypeTree::from_type(&pat_type.ty) { + Ok(type_tree) => Some(Ok((type_tree, arg_name))), + Err(diagnostics) => Some(Err(diagnostics)), + } + } + } + }) + .map(|value| value.map(FnArg::from)) + .collect::<Result<Vec<FnArg>, Diagnostics>>() + .map(IntoIterator::into_iter) + } + + #[inline] + fn get_pat_fn_arg_type(pat: &Pat) -> Result<FnArgType<'_>, Diagnostics> { + let arg_name = match pat { + syn::Pat::Ident(ident) => Ok(FnArgType::Single(&ident.ident)), + syn::Pat::Tuple(tuple) => { + tuple.elems.iter().map(|item| { + match item { + syn::Pat::Ident(ident) => Ok(&ident.ident), + _ => Err(Diagnostics::with_span(item.span(), "expected syn::Ident in get_pat_fn_arg_type Pat::Tuple")) + } + }).collect::<Result<Vec<_>, Diagnostics>>().map(FnArgType::Destructed) + }, + syn::Pat::TupleStruct(tuple_struct) => { + get_pat_fn_arg_type(tuple_struct.elems.first().as_ref().expect( + "PatTuple expected to have at least one element, cannot get fn argument", + )) + }, + syn::Pat::Struct(PatStruct { fields, ..}) => { + let idents = fields.iter() + .flat_map(|field| Ok(match get_pat_fn_arg_type(&field.pat) { + Ok(field_type) => field_type, + Err(diagnostics) => return Err(diagnostics), + })) + .fold(Vec::<&'_ Ident>::new(), |mut idents, field_type| { + if let FnArgType::Single(ident) = field_type { + idents.push(ident) + } + idents + }); + + Ok(FnArgType::Destructed(idents)) + } + _ => Err(Diagnostics::with_span(pat.span(), "unexpected syn::Pat, expected syn::Pat::Ident,in get_fn_args, cannot get fn argument name")), + }; + arg_name + } + + #[inline] + fn get_fn_arg_pat_type(fn_arg: &syn::FnArg) -> Result<&PatType, Diagnostics> { + match fn_arg { + syn::FnArg::Typed(value) => Ok(value), + _ => Err(Diagnostics::with_span( + fn_arg.span(), + "unexpected fn argument type, expected FnArg::Typed", + )), + } + } + + #[cfg(any(feature = "actix_extras", feature = "axum_extras"))] + pub(super) fn with_parameter_in( + arg: FnArg<'_>, + ) -> Option<( + Option<std::borrow::Cow<'_, syn::Path>>, + proc_macro2::TokenStream, + )> { + let parameter_in_provider = if arg.ty.is("Path") { + quote! { || Some (fastapi::openapi::path::ParameterIn::Path) } + } else if arg.ty.is("Query") { + quote! { || Some(fastapi::openapi::path::ParameterIn::Query) } + } else { + quote! { || None } + }; + + let type_path = arg + .ty + .children + .expect("FnArg TypeTree generic type Path must have children") + .into_iter() + .next() + .unwrap() + .path; + + Some((type_path, parameter_in_provider)) + } + + // if type is either Path or Query with direct children as Object types without generics + #[cfg(any(feature = "actix_extras", feature = "axum_extras"))] + pub(super) fn is_into_params(fn_arg: &FnArg) -> bool { + use crate::component::GenericType; + let mut ty = &fn_arg.ty; + + if fn_arg.ty.generic_type == Some(GenericType::Option) { + ty = fn_arg + .ty + .children + .as_ref() + .expect("FnArg Option must have children") + .first() + .expect("FnArg Option must have 1 child"); + } + + (ty.is("Path") || ty.is("Query")) + && ty + .children + .as_ref() + .map(|children| { + children.iter().all(|child| { + matches!(child.value_type, ValueType::Object) + && child.generic_type.is_none() + }) + }) + .unwrap_or(false) + } +} diff --git a/fastapi-gen/src/ext/actix.rs b/fastapi-gen/src/ext/actix.rs new file mode 100644 index 0000000..ee741d7 --- /dev/null +++ b/fastapi-gen/src/ext/actix.rs @@ -0,0 +1,271 @@ +use std::borrow::Cow; + +use proc_macro2::{Ident, TokenTree}; +use regex::{Captures, Regex}; +use syn::{parse::Parse, punctuated::Punctuated, token::Comma, ItemFn, LitStr}; + +use crate::{ + component::{TypeTree, ValueType}, + ext::ArgValue, + path::HttpMethod, + Diagnostics, +}; + +use super::{ + fn_arg::{self, FnArg}, + ArgumentIn, ArgumentResolver, Arguments, MacroArg, MacroPath, PathOperationResolver, + PathOperations, PathResolver, ResolvedOperation, ValueArgument, +}; + +impl ArgumentResolver for PathOperations { + fn resolve_arguments( + fn_args: &Punctuated<syn::FnArg, Comma>, + macro_args: Option<Vec<MacroArg>>, + _: String, + ) -> Result<Arguments, Diagnostics> { + let (into_params_args, value_args): (Vec<FnArg>, Vec<FnArg>) = + fn_arg::get_fn_args(fn_args)?.partition(fn_arg::is_into_params); + + if let Some(macro_args) = macro_args { + let (primitive_args, body) = split_path_args_and_request(value_args); + + Ok(( + Some( + macro_args + .into_iter() + .zip(primitive_args) + .map(into_value_argument) + .collect(), + ), + Some( + into_params_args + .into_iter() + .flat_map(fn_arg::with_parameter_in) + .map(Into::into) + .collect(), + ), + body.into_iter().next().map(Into::into), + )) + } else { + let (_, body) = split_path_args_and_request(value_args); + Ok(( + None, + Some( + into_params_args + .into_iter() + .flat_map(fn_arg::with_parameter_in) + .map(Into::into) + .collect(), + ), + body.into_iter().next().map(Into::into), + )) + } + } +} + +fn split_path_args_and_request( + value_args: Vec<FnArg>, +) -> ( + impl Iterator<Item = TypeTree>, + impl Iterator<Item = TypeTree>, +) { + let (path_args, body_types): (Vec<FnArg>, Vec<FnArg>) = value_args + .into_iter() + .filter(|arg| { + arg.ty.is("Path") || arg.ty.is("Json") || arg.ty.is("Form") || arg.ty.is("Bytes") + }) + .partition(|arg| arg.ty.is("Path")); + + ( + path_args + .into_iter() + .flat_map(|path_arg| { + path_arg + .ty + .children + .expect("Path argument must have children") + }) + .flat_map(|path_arg| match path_arg.value_type { + ValueType::Primitive => vec![path_arg], + ValueType::Tuple => path_arg + .children + .expect("ValueType::Tuple will always have children"), + ValueType::Object | ValueType::Value => { + unreachable!("Value arguments does not have ValueType::Object arguments") + } + }), + body_types.into_iter().map(|json| json.ty), + ) +} + +fn into_value_argument((macro_arg, primitive_arg): (MacroArg, TypeTree)) -> ValueArgument { + ValueArgument { + name: match macro_arg { + MacroArg::Path(path) => Some(Cow::Owned(path.name)), + #[cfg(feature = "rocket_extras")] + MacroArg::Query(_) => None, + }, + type_tree: Some(primitive_arg), + argument_in: ArgumentIn::Path, + } +} + +impl PathOperationResolver for PathOperations { + fn resolve_operation(item_fn: &ItemFn) -> Result<Option<ResolvedOperation>, Diagnostics> { + item_fn + .attrs + .iter() + .find_map(|attribute| { + if is_valid_actix_route_attribute(attribute.path().get_ident()) { + match attribute.parse_args::<Route>() { + Ok(route) => { + let attribute_path = attribute.path().get_ident() + .expect("actix-web route macro must have ident"); + let methods: Vec<HttpMethod> = if *attribute_path == "route" { + route.methods.into_iter().map(|method| { + method.to_lowercase().parse::<HttpMethod>() + .expect("Should never fail, validity of HTTP method is checked before parsing") + }).collect() + } else { + // if user used #[connect(...)] macro, return error + match HttpMethod::from_ident(attribute_path) { + Ok(http_method) => { vec![http_method]}, + Err(error) => return Some( + Err( + error.help( + format!(r#"If you want operation to be documented and executed on `{method}` try using `#[route(...)]` e.g. `#[route("/path", method = "GET", method = "{method}")]`"#, method = attribute_path.to_string().to_uppercase()) + ) + ) + ) + } + }; + Some(Ok(ResolvedOperation { + path: route.path, + methods, + body: String::new(), + })) + } + Err(error) => Some(Err(Into::<Diagnostics>::into(error))), + } + } else { + None + } + }) + .transpose() + } +} + +#[cfg_attr(feature = "debug", derive(Debug))] +struct Route { + path: String, + methods: Vec<String>, +} + +impl Parse for Route { + fn parse(input: syn::parse::ParseStream) -> syn::Result<Self> { + const ALLOWED_METHODS: [&str; 8] = [ + "GET", "POST", "PUT", "DELETE", "HEAD", "OPTIONS", "TRACE", "PATCH", + ]; + // OpenAPI spec does not support CONNECT thus we do not resolve it + + enum PrevToken { + Method, + Equals, + } + + let path = input.parse::<LitStr>()?.value(); + let mut parsed_methods: Vec<String> = Vec::new(); + + input.step(|cursor| { + let mut rest = *cursor; + + let mut prev_token: Option<PrevToken> = None; + while let Some((tt, next)) = rest.token_tree() { + match &tt { + TokenTree::Ident(ident) if *ident == "method" => { + prev_token = Some(PrevToken::Method); + rest = next + } + TokenTree::Punct(punct) + if punct.as_char() == '=' + && matches!(prev_token, Some(PrevToken::Method)) => + { + prev_token = Some(PrevToken::Equals); + rest = next + } + TokenTree::Literal(literal) + if matches!(prev_token, Some(PrevToken::Equals)) => + { + let value = literal.to_string(); + let method = &value[1..value.len() - 1]; + + if ALLOWED_METHODS.contains(&method) { + parsed_methods.push(String::from(method)); + } + + prev_token = None; + rest = next; + } + _ => rest = next, + } + } + Ok(((), rest)) + })?; + + Ok(Route { + path, + methods: parsed_methods, + }) + } +} + +impl PathResolver for PathOperations { + fn resolve_path(path: &Option<String>) -> Option<MacroPath> { + path.as_ref().map(|path| { + let regex = Regex::new(r"\{[a-zA-Z0-9_][^{}]*}").unwrap(); + + let mut args = Vec::<MacroArg>::with_capacity(regex.find_iter(path).count()); + MacroPath { + path: regex + .replace_all(path, |captures: &Captures| { + let mut capture = &captures[0]; + let original_name = String::from(capture); + + if capture.contains("_:") { + // replace unnamed capture with generic 'arg0' name + args.push(MacroArg::Path(ArgValue { + name: String::from("arg0"), + original_name, + })); + "{arg0}".to_string() + } else if let Some(colon) = capture.find(':') { + // replace colon (:) separated regexp with empty string + capture = &capture[1..colon]; + + args.push(MacroArg::Path(ArgValue { + name: String::from(capture), + original_name, + })); + + format!("{{{capture}}}") + } else { + args.push(MacroArg::Path(ArgValue { + name: String::from(&capture[1..capture.len() - 1]), + original_name, + })); + // otherwise return the capture itself + capture.to_string() + } + }) + .to_string(), + args, + } + }) + } +} + +#[inline] +fn is_valid_actix_route_attribute(ident: Option<&Ident>) -> bool { + matches!(ident, Some(operation) if ["get", "post", "put", "delete", "head", "connect", "options", "trace", "patch", "route"] + .iter().any(|expected_operation| operation == expected_operation)) +} diff --git a/fastapi-gen/src/ext/auto_types.rs b/fastapi-gen/src/ext/auto_types.rs new file mode 100644 index 0000000..84f2ec5 --- /dev/null +++ b/fastapi-gen/src/ext/auto_types.rs @@ -0,0 +1,15 @@ +use syn::{ItemFn, TypePath}; + +pub fn parse_fn_operation_responses(fn_op: &ItemFn) -> Option<&TypePath> { + match &fn_op.sig.output { + syn::ReturnType::Type(_, item) => get_type_path(item.as_ref()), + syn::ReturnType::Default => None, // default return type () should result no responses + } +} + +fn get_type_path(ty: &syn::Type) -> Option<&TypePath> { + match ty { + syn::Type::Path(ty_path) => Some(ty_path), + _ => None, + } +} diff --git a/fastapi-gen/src/ext/axum.rs b/fastapi-gen/src/ext/axum.rs new file mode 100644 index 0000000..8147fa1 --- /dev/null +++ b/fastapi-gen/src/ext/axum.rs @@ -0,0 +1,141 @@ +use std::borrow::Cow; + +use regex::Captures; +use syn::{punctuated::Punctuated, token::Comma}; + +use crate::{ + component::{TypeTree, ValueType}, + Diagnostics, +}; + +use super::{ + fn_arg::{self, FnArg, FnArgType}, + ArgValue, ArgumentResolver, Arguments, MacroArg, MacroPath, PathOperations, PathResolver, + ValueArgument, +}; + +// axum framework is only able to resolve handler function arguments. +// `PathResolver` and `PathOperationResolver` is not supported in axum. +impl ArgumentResolver for PathOperations { + fn resolve_arguments( + args: &'_ Punctuated<syn::FnArg, Comma>, + macro_args: Option<Vec<super::MacroArg>>, + _: String, + ) -> Result<Arguments<'_>, Diagnostics> { + let (into_params_args, value_args): (Vec<FnArg>, Vec<FnArg>) = + fn_arg::get_fn_args(args)?.partition(fn_arg::is_into_params); + + let (value_args, body) = split_value_args_and_request_body(value_args); + + Ok(( + Some( + value_args + .zip(macro_args.unwrap_or_default()) + .map(|(value_arg, macro_arg)| ValueArgument { + name: match macro_arg { + MacroArg::Path(path) => Some(Cow::Owned(path.name)), + #[cfg(feature = "rocket_extras")] + MacroArg::Query(_) => None, + }, + argument_in: value_arg.argument_in, + type_tree: value_arg.type_tree, + }) + .collect(), + ), + Some( + into_params_args + .into_iter() + .flat_map(fn_arg::with_parameter_in) + .map(Into::into) + .collect(), + ), + body.into_iter().next().map(Into::into), + )) + } +} + +fn split_value_args_and_request_body( + value_args: Vec<FnArg>, +) -> ( + impl Iterator<Item = super::ValueArgument<'_>>, + impl Iterator<Item = TypeTree<'_>>, +) { + let (path_args, body_types): (Vec<FnArg>, Vec<FnArg>) = value_args + .into_iter() + .filter(|arg| { + arg.ty.is("Path") || arg.ty.is("Json") || arg.ty.is("Form") || arg.ty.is("Bytes") + }) + .partition(|arg| arg.ty.is("Path")); + + ( + path_args + .into_iter() + .filter(|arg| arg.ty.is("Path")) + .flat_map(|path_arg| { + match ( + path_arg.arg_type, + path_arg.ty.children.expect("Path must have children"), + ) { + (FnArgType::Single(name), path_children) => path_children + .into_iter() + .flat_map(|ty| match ty.value_type { + ValueType::Tuple => ty + .children + .expect("ValueType::Tuple will always have children") + .into_iter() + .map(|ty| to_value_argument(None, ty)) + .collect(), + ValueType::Primitive => { + vec![to_value_argument(Some(Cow::Owned(name.to_string())), ty)] + } + ValueType::Object | ValueType::Value => unreachable!("Cannot get here"), + }) + .collect::<Vec<_>>(), + (FnArgType::Destructed(tuple), path_children) => tuple + .iter() + .zip(path_children.into_iter().flat_map(|child| { + child + .children + .expect("ValueType::Tuple will always have children") + })) + .map(|(name, ty)| to_value_argument(Some(Cow::Owned(name.to_string())), ty)) + .collect::<Vec<_>>(), + } + }), + body_types.into_iter().map(|body| body.ty), + ) +} + +fn to_value_argument<'a>(name: Option<Cow<'a, str>>, ty: TypeTree<'a>) -> ValueArgument<'a> { + ValueArgument { + name, + type_tree: Some(ty), + argument_in: super::ArgumentIn::Path, + } +} + +impl PathResolver for PathOperations { + fn resolve_path(path: &Option<String>) -> Option<MacroPath> { + path.as_ref().map(|path| { + let regex = regex::Regex::new(r"\{[a-zA-Z0-9][^{}]*}").unwrap(); + + let mut args = Vec::<MacroArg>::with_capacity(regex.find_iter(path).count()); + MacroPath { + path: regex + .replace_all(path, |captures: &Captures| { + let capture = &captures[0]; + let original_name = String::from(capture); + + args.push(MacroArg::Path(ArgValue { + name: String::from(&capture[1..capture.len() - 1]), + original_name, + })); + // otherwise return the capture itself + capture.to_string() + }) + .to_string(), + args, + } + }) + } +} diff --git a/fastapi-gen/src/ext/rocket.rs b/fastapi-gen/src/ext/rocket.rs new file mode 100644 index 0000000..e8a70d8 --- /dev/null +++ b/fastapi-gen/src/ext/rocket.rs @@ -0,0 +1,345 @@ +use std::{borrow::Cow, str::FromStr}; + +use proc_macro2::{Ident, TokenStream}; +use quote::quote; +use regex::{Captures, Regex}; +use syn::{parse::Parse, LitStr, Token}; + +use crate::{ + component::{GenericType, ValueType}, + ext::{ArgValue, ArgumentIn, MacroArg, ValueArgument}, + path::HttpMethod, + Diagnostics, OptionExt, +}; + +use super::{ + fn_arg::{self, FnArg}, + ArgumentResolver, Arguments, MacroPath, PathOperationResolver, PathOperations, PathResolver, + ResolvedOperation, +}; + +const ANONYMOUS_ARG: &str = "<_>"; + +impl ArgumentResolver for PathOperations { + fn resolve_arguments( + fn_args: &syn::punctuated::Punctuated<syn::FnArg, syn::token::Comma>, + macro_args: Option<Vec<MacroArg>>, + body: String, + ) -> Result<Arguments<'_>, Diagnostics> { + let mut args = fn_arg::get_fn_args(fn_args)?.collect::<Vec<_>>(); + args.sort_unstable(); + let (into_params_args, value_args): (Vec<FnArg>, Vec<FnArg>) = + args.into_iter().partition(is_into_params); + + Ok(macro_args + .map(|args| { + let (anonymous_args, named_args): (Vec<MacroArg>, Vec<MacroArg>) = + args.into_iter().partition(is_anonymous_arg); + + let body = into_params_args + .iter() + .find(|arg| *arg.arg_type.get_name() == body) + .map(|arg| arg.ty.clone()) + .map(Into::into); + + ( + Some( + value_args + .into_iter() + .flat_map(with_argument_in(&named_args)) + .map(to_value_arg) + .chain(anonymous_args.into_iter().map(to_anonymous_value_arg)) + .collect(), + ), + Some( + into_params_args + .into_iter() + .flat_map(with_parameter_in(&named_args)) + .map(Into::into) + .collect(), + ), + body, + ) + }) + .unwrap_or_else(|| (None, None, None))) + } +} + +fn to_value_arg((arg, argument_in): (FnArg, ArgumentIn)) -> ValueArgument { + ValueArgument { + type_tree: Some(arg.ty), + argument_in, + name: Some(Cow::Owned(arg.arg_type.get_name().to_string())), + } +} + +fn to_anonymous_value_arg<'a>(macro_arg: MacroArg) -> ValueArgument<'a> { + let (name, argument_in) = match macro_arg { + MacroArg::Path(arg_value) => (arg_value.name, ArgumentIn::Path), + MacroArg::Query(arg_value) => (arg_value.name, ArgumentIn::Query), + }; + + ValueArgument { + type_tree: None, + argument_in, + name: Some(Cow::Owned(name)), + } +} + +fn with_parameter_in( + named_args: &[MacroArg], +) -> impl Fn(FnArg) -> Option<(Option<Cow<'_, syn::Path>>, TokenStream)> + '_ { + move |arg: FnArg| { + let parameter_in = named_args.iter().find_map(|macro_arg| match macro_arg { + MacroArg::Path(path) => { + if arg.arg_type.get_name() == &*path.name { + Some(quote! { || Some(fastapi::openapi::path::ParameterIn::Path) }) + } else { + None + } + } + MacroArg::Query(query) => { + if arg.arg_type.get_name() == &*query.name { + Some(quote! { || Some(fastapi::openapi::path::ParameterIn::Query) }) + } else { + None + } + } + }); + + Some(arg.ty.path).zip(parameter_in) + } +} + +fn with_argument_in(named_args: &[MacroArg]) -> impl Fn(FnArg) -> Option<(FnArg, ArgumentIn)> + '_ { + move |arg: FnArg| { + let argument_in = named_args.iter().find_map(|macro_arg| match macro_arg { + MacroArg::Path(path) => { + if arg.arg_type.get_name() == &*path.name { + Some(ArgumentIn::Path) + } else { + None + } + } + MacroArg::Query(query) => { + if arg.arg_type.get_name() == &*query.name { + Some(ArgumentIn::Query) + } else { + None + } + } + }); + + Some(arg).zip(argument_in) + } +} + +#[inline] +fn is_into_params(fn_arg: &FnArg) -> bool { + let mut ty = &fn_arg.ty; + + if fn_arg.ty.generic_type == Some(GenericType::Option) { + ty = fn_arg + .ty + .children + .as_ref() + .expect("FnArg Option must have children") + .first() + .expect("FnArg Option must have 1 child"); + } + matches!(ty.value_type, ValueType::Object) && ty.generic_type.is_none() +} + +#[inline] +fn is_anonymous_arg(arg: &MacroArg) -> bool { + matches!(arg, MacroArg::Path(path) if path.original_name == ANONYMOUS_ARG) + || matches!(arg, MacroArg::Query(query) if query.original_name == ANONYMOUS_ARG) +} + +impl PathOperationResolver for PathOperations { + fn resolve_operation( + ast_fn: &syn::ItemFn, + ) -> Result<Option<super::ResolvedOperation>, Diagnostics> { + ast_fn + .attrs + .iter() + .find(|attribute| is_valid_route_type(attribute.path().get_ident())) + .map_try( + |attribute| match attribute.parse_args::<Path>().map_err(Diagnostics::from) { + Ok(path) => Ok((path, attribute)), + Err(diagnostics) => Err(diagnostics), + }, + )? + .map_try( + |( + Path { + path, + operation, + body, + }, + attribute, + )| { + if !operation.is_empty() { + Ok(ResolvedOperation { + methods: vec![HttpMethod::from_str(&operation).unwrap()], + path, + body, + }) + } else { + Ok(ResolvedOperation { + methods: vec![HttpMethod::from_ident( + attribute.path().get_ident().unwrap(), + )?], + path, + body, + }) + } + }, + ) + } +} + +struct Path { + path: String, + operation: String, + body: String, +} + +impl Parse for Path { + fn parse(input: syn::parse::ParseStream) -> syn::Result<Self> { + let has_data = |input: syn::parse::ParseStream| -> bool { + let fork = input.fork(); + if fork.peek(syn::Ident) { + matches!(fork.parse::<syn::Ident>(), Ok(data) if data == "data") + } else { + false + } + }; + + let parse_body = |input: syn::parse::ParseStream| -> syn::Result<String> { + input.parse::<syn::Ident>()?; // data + input.parse::<Token![=]>()?; + + input + .parse::<LitStr>() + .map(|value| value.value().replace(['<', '>'], "")) + }; + + let (path, operation, body) = if input.peek(syn::Ident) { + // expect format (GET, uri = "url...", data = ...) + let ident = input.parse::<Ident>()?; + input.parse::<Token![,]>()?; + input.parse::<Ident>()?; // explicitly 'uri' + input.parse::<Token![=]>()?; + let uri = input.parse::<LitStr>()?.value(); + let operation = ident.to_string().to_lowercase(); + + if !input.is_empty() && input.peek(Token![,]) { + input.parse::<Token![,]>()?; + } + let body = if has_data(input) { + parse_body(input)? + } else { + String::new() + }; + + (uri, operation, body) + } else { + // expect format ("url...", data = ...) + let uri = input.parse::<LitStr>()?.value(); + if !input.is_empty() && input.peek(Token![,]) { + input.parse::<Token![,]>()?; + } + let body = if has_data(input) { + parse_body(input)? + } else { + String::new() + }; + + (uri, String::new(), body) + }; + + // ignore rest of the tokens from rocket path attribute macro + input.step(|cursor| { + let mut rest = *cursor; + while let Some((_, next)) = rest.token_tree() { + rest = next; + } + Ok(((), rest)) + })?; + + Ok(Self { + path, + operation, + body, + }) + } +} + +#[inline] +fn is_valid_route_type(ident: Option<&Ident>) -> bool { + matches!(ident, Some(operation) if ["get", "post", "put", "delete", "head", "options", "patch", "route"] + .iter().any(|expected_operation| operation == expected_operation)) +} + +impl PathResolver for PathOperations { + fn resolve_path(path: &Option<String>) -> Option<MacroPath> { + path.as_ref().map(|whole_path| { + let regex = Regex::new(r"<[a-zA-Z0-9_][^<>]*>").unwrap(); + + whole_path + .split_once('?') + .or(Some((whole_path, ""))) + .map(|(path, query)| { + let mut names = + Vec::<MacroArg>::with_capacity(regex.find_iter(whole_path).count()); + let mut underscore_count = 0; + + let mut format_arg = + |captures: &Captures, resolved_arg_op: fn(ArgValue) -> MacroArg| { + let capture = &captures[0]; + let original_name = String::from(capture); + + let mut arg = capture + .replace("..", "") + .replace('<', "{") + .replace('>', "}"); + + if arg == "{_}" { + arg = format!("{{arg{underscore_count}}}"); + names.push(resolved_arg_op(ArgValue { + name: String::from(&arg[1..arg.len() - 1]), + original_name, + })); + underscore_count += 1; + } else { + names.push(resolved_arg_op(ArgValue { + name: String::from(&arg[1..arg.len() - 1]), + original_name, + })) + } + + arg + }; + + let path = regex.replace_all(path, |captures: &Captures| { + format_arg(captures, MacroArg::Path) + }); + + if !query.is_empty() { + regex.replace_all(query, |captures: &Captures| { + format_arg(captures, MacroArg::Query) + }); + } + + names.sort_unstable_by(MacroArg::by_name); + + MacroPath { + args: names, + path: path.to_string(), + } + }) + .unwrap() + }) + } +} diff --git a/fastapi-gen/src/lib.rs b/fastapi-gen/src/lib.rs new file mode 100644 index 0000000..386bc65 --- /dev/null +++ b/fastapi-gen/src/lib.rs @@ -0,0 +1,3864 @@ +//! This is **private** fastapi codegen library and is not used alone. +//! +//! The library contains macro implementations for fastapi library. Content +//! of the library documentation is available through **fastapi** library itself. +//! Consider browsing via the **fastapi** crate so all links will work correctly. + +#![cfg_attr(doc_cfg, feature(doc_cfg))] +#![warn(missing_docs)] +#![warn(rustdoc::broken_intra_doc_links)] + +#[cfg(all(feature = "decimal", feature = "decimal_float"))] +compile_error!("`decimal` and `decimal_float` are mutually exclusive feature flags"); + +#[cfg(all( + feature = "actix_extras", + feature = "axum_extras", + feature = "rocket_extras" +))] +compile_error!( + "`actix_extras`, `axum_extras` and `rocket_extras` are mutually exclusive feature flags" +); + +use std::{ + borrow::{Borrow, Cow}, + error::Error, + fmt::Display, + mem, + ops::Deref, +}; + +use component::schema::Schema; +use doc_comment::CommentAttributes; + +use component::into_params::IntoParams; +use ext::{PathOperationResolver, PathOperations, PathResolver}; +use openapi::OpenApi; +use proc_macro::TokenStream; +use quote::{quote, quote_spanned, ToTokens, TokenStreamExt}; + +use proc_macro2::{Group, Ident, Punct, Span, TokenStream as TokenStream2}; +use syn::{ + bracketed, + parse::{Parse, ParseStream}, + punctuated::Punctuated, + token::Bracket, + DeriveInput, ExprPath, GenericParam, ItemFn, Lit, LitStr, Member, Token, +}; + +mod component; +mod doc_comment; +mod ext; +mod openapi; +mod path; +mod schema_type; +mod security_requirement; + +use crate::path::{Path, PathAttr}; + +use self::{ + component::{ + features::{self, Feature}, + ComponentSchema, ComponentSchemaProps, TypeTree, + }, + openapi::parse_openapi_attrs, + path::response::derive::{IntoResponses, ToResponse}, +}; + +#[cfg(feature = "config")] +static CONFIG: once_cell::sync::Lazy<fastapi_config::Config> = + once_cell::sync::Lazy::new(fastapi_config::Config::read_from_file); + +#[proc_macro_derive(ToSchema, attributes(schema))] +/// Generate reusable OpenAPI schema to be used +/// together with [`OpenApi`][openapi_derive]. +/// +/// This is `#[derive]` implementation for [`ToSchema`][to_schema] trait. The macro accepts one +/// `schema` +/// attribute optionally which can be used to enhance generated documentation. The attribute can be placed +/// at item level or field and variant levels in structs and enum. +/// +/// You can use the Rust's own `#[deprecated]` attribute on any struct, enum or field to mark it as deprecated and it will +/// reflect to the generated OpenAPI spec. +/// +/// `#[deprecated]` attribute supports adding additional details such as a reason and or since version but this is is not supported in +/// OpenAPI. OpenAPI has only a boolean flag to determine deprecation. While it is totally okay to declare deprecated with reason +/// `#[deprecated = "There is better way to do this"]` the reason would not render in OpenAPI spec. +/// +/// Doc comments on fields will resolve to field descriptions in generated OpenAPI doc. On struct +/// level doc comments will resolve to object descriptions. +/// +/// Schemas derived with `ToSchema` will be automatically collected from usage. In case of looping +/// schema tree _`no_recursion`_ attribute must be used to break from recurring into infinite loop. +/// See [more details from example][derive@ToSchema#examples]. All arguments of generic schemas +/// must implement `ToSchema` trait. +/// +/// ```rust +/// /// This is a pet +/// #[derive(fastapi::ToSchema)] +/// struct Pet { +/// /// Name for your pet +/// name: String, +/// } +/// ``` +/// +/// # Named Field Struct Optional Configuration Options for `#[schema(...)]` +/// +/// * `description = ...` Can be literal string or Rust expression e.g. _`const`_ reference or +/// `include_str!(...)` statement. This can be used to override **default** description what is +/// resolved from doc comments of the type. +/// * `example = ...` Can be any value e.g. literal, method reference or _`json!(...)`_. +/// **Deprecated since OpenAPI 3.0, using `examples` is preferred instead.** +/// * `examples(..., ...)` Comma separated list defining multiple _`examples`_ for the schema. Each +/// _`example`_ Can be any value e.g. literal, method reference or _`json!(...)`_. +/// * `xml(...)` Can be used to define [`Xml`][xml] object properties applicable to Structs. +/// * `title = ...` Literal string value. Can be used to define title for struct in OpenAPI +/// document. Some OpenAPI code generation libraries also use this field as a name for the +/// struct. +/// * `rename_all = ...` Supports same syntax as _serde_ _`rename_all`_ attribute. Will rename all fields +/// of the structs accordingly. If both _serde_ `rename_all` and _schema_ _`rename_all`_ are defined +/// __serde__ will take precedence. +/// * `as = ...` Can be used to define alternative path and name for the schema what will be used in +/// the OpenAPI. E.g _`as = path::to::Pet`_. This would make the schema appear in the generated +/// OpenAPI spec as _`path.to.Pet`_. This same name will be used throughout the OpenAPI generated +/// with `fastapi` when the type is being referenced in [`OpenApi`][openapi_derive] derive macro +/// or in [`fastapi::path(...)`][path_macro] macro. +/// * `bound = ...` Can be used to override default trait bounds on generated `impl`s. +/// See [Generic schemas section](#generic-schemas) below for more details. +/// * `default` Can be used to populate default values on all fields using the struct's +/// [`Default`] implementation. +/// * `deprecated` Can be used to mark all fields as deprecated in the generated OpenAPI spec but +/// not in the code. If you'd like to mark the fields as deprecated in the code as well use +/// Rust's own `#[deprecated]` attribute instead. +/// * `max_properties = ...` Can be used to define maximum number of properties this struct can +/// contain. Value must be a number. +/// * `min_properties = ...` Can be used to define minimum number of properties this struct can +/// contain. Value must be a number. +///* `no_recursion` Is used to break from recursion in case of looping schema tree e.g. `Pet` -> +/// `Owner` -> `Pet`. _`no_recursion`_ attribute must be used within `Ower` type not to allow +/// recurring into `Pet`. Failing to do so will cause infinite loop and runtime **panic**. On +/// struct level the _`no_recursion`_ rule will be applied to all of its fields. +/// +/// ## Named Fields Optional Configuration Options for `#[schema(...)]` +/// +/// * `example = ...` Can be any value e.g. literal, method reference or _`json!(...)`_. +/// **Deprecated since OpenAPI 3.0, using `examples` is preferred instead.** +/// * `examples(..., ...)` Comma separated list defining multiple _`examples`_ for the schema. Each +/// _`example`_ Can be any value e.g. literal, method reference or _`json!(...)`_. +/// * `default = ...` Can be any value e.g. literal, method reference or _`json!(...)`_. +/// * `format = ...` May either be variant of the [`KnownFormat`][known_format] enum, or otherwise +/// an open value as a string. By default the format is derived from the type of the property +/// according OpenApi spec. +/// * `write_only` Defines property is only used in **write** operations *POST,PUT,PATCH* but not in *GET* +/// * `read_only` Defines property is only used in **read** operations *GET* but not in *POST,PUT,PATCH* +/// * `xml(...)` Can be used to define [`Xml`][xml] object properties applicable to named fields. +/// See configuration options at xml attributes of [`ToSchema`][to_schema_xml] +/// * `value_type = ...` Can be used to override default type derived from type of the field used in OpenAPI spec. +/// This is useful in cases where the default type does not correspond to the actual type e.g. when +/// any third-party types are used which are not [`ToSchema`][to_schema]s nor [`primitive` types][primitive]. +/// The value can be any Rust type what normally could be used to serialize to JSON, or either virtual type _`Object`_ +/// or _`Value`_. +/// _`Object`_ will be rendered as generic OpenAPI object _(`type: object`)_. +/// _`Value`_ will be rendered as any OpenAPI value (i.e. no `type` restriction). +/// * `inline` If the type of this field implements [`ToSchema`][to_schema], then the schema definition +/// will be inlined. **warning:** Don't use this for recursive data types! +/// +/// **Note!**<br>Using `inline` with generic arguments might lead to incorrect spec generation. +/// This is due to the fact that during compilation we cannot know how to treat the generic +/// argument and there is difference whether it is a primitive type or another generic type. +/// * `required = ...` Can be used to enforce required status for the field. [See +/// rules][derive@ToSchema#field-nullability-and-required-rules] +/// * `nullable` Defines property is nullable (note this is different to non-required). +/// * `rename = ...` Supports same syntax as _serde_ _`rename`_ attribute. Will rename field +/// accordingly. If both _serde_ `rename` and _schema_ _`rename`_ are defined __serde__ will take +/// precedence. +/// * `multiple_of = ...` Can be used to define multiplier for a value. Value is considered valid +/// division will result an `integer`. Value must be strictly above _`0`_. +/// * `maximum = ...` Can be used to define inclusive upper bound to a `number` value. +/// * `minimum = ...` Can be used to define inclusive lower bound to a `number` value. +/// * `exclusive_maximum = ...` Can be used to define exclusive upper bound to a `number` value. +/// * `exclusive_minimum = ...` Can be used to define exclusive lower bound to a `number` value. +/// * `max_length = ...` Can be used to define maximum length for `string` types. +/// * `min_length = ...` Can be used to define minimum length for `string` types. +/// * `pattern = ...` Can be used to define valid regular expression in _ECMA-262_ dialect the field value must match. +/// * `max_items = ...` Can be used to define maximum items allowed for `array` fields. Value must +/// be non-negative integer. +/// * `min_items = ...` Can be used to define minimum items allowed for `array` fields. Value must +/// be non-negative integer. +/// * `schema_with = ...` Use _`schema`_ created by provided function reference instead of the +/// default derived _`schema`_. The function must match to `fn() -> Into<RefOr<Schema>>`. It does +/// not accept arguments and must return anything that can be converted into `RefOr<Schema>`. +/// * `additional_properties = ...` Can be used to define free form types for maps such as +/// [`HashMap`](std::collections::HashMap) and [`BTreeMap`](std::collections::BTreeMap). +/// Free form type enables use of arbitrary types within map values. +/// Supports formats _`additional_properties`_ and _`additional_properties = true`_. +/// * `deprecated` Can be used to mark the field as deprecated in the generated OpenAPI spec but +/// not in the code. If you'd like to mark the field as deprecated in the code as well use +/// Rust's own `#[deprecated]` attribute instead. +/// * `content_encoding = ...` Can be used to define content encoding used for underlying schema object. +/// See [`Object::content_encoding`][schema_object_encoding] +/// * `content_media_type = ...` Can be used to define MIME type of a string for underlying schema object. +/// See [`Object::content_media_type`][schema_object_media_type] +///* `ignore` or `ignore = ...` Can be used to skip the field from being serialized to OpenAPI schema. It accepts either a literal `bool` value +/// or a path to a function that returns `bool` (`Fn() -> bool`). +///* `no_recursion` Is used to break from recursion in case of looping schema tree e.g. `Pet` -> +/// `Owner` -> `Pet`. _`no_recursion`_ attribute must be used within `Ower` type not to allow +/// recurring into `Pet`. Failing to do so will cause infinite loop and runtime **panic**. +/// +/// #### Field nullability and required rules +/// +/// Field is considered _`required`_ if +/// * it is not `Option` field +/// * and it does not have _`skip_serializing_if`_ property +/// * and it does not have _`serde_with`_ _[`double_option`](https://docs.rs/serde_with/latest/serde_with/rust/double_option/index.html)_ +/// * and it does not have default value provided with serde _`default`_ +/// attribute +/// +/// Field is considered _`nullable`_ when field type is _`Option`_. +/// +/// ## Xml attribute Configuration Options +/// +/// * `xml(name = "...")` Will set name for property or type. +/// * `xml(namespace = "...")` Will set namespace for xml element which needs to be valid uri. +/// * `xml(prefix = "...")` Will set prefix for name. +/// * `xml(attribute)` Will translate property to xml attribute instead of xml element. +/// * `xml(wrapped)` Will make wrapped xml element. +/// * `xml(wrapped(name = "wrap_name"))` Will override the wrapper elements name. +/// +/// See [`Xml`][xml] for more details. +/// +/// # Unnamed Field Struct Optional Configuration Options for `#[schema(...)]` +/// +/// * `description = ...` Can be literal string or Rust expression e.g. [_`const`_][const] reference or +/// `include_str!(...)` statement. This can be used to override **default** description what is +/// resolved from doc comments of the type. +/// * `example = ...` Can be any value e.g. literal, method reference or _`json!(...)`_. +/// **Deprecated since OpenAPI 3.0, using `examples` is preferred instead.** +/// * `examples(..., ...)` Comma separated list defining multiple _`examples`_ for the schema. Each +/// _`example`_ Can be any value e.g. literal, method reference or _`json!(...)`_. +/// * `default = ...` Can be any value e.g. literal, method reference or _`json!(...)`_. If no value +/// is specified, and the struct has only one field, the field's default value in the schema will be +/// set from the struct's [`Default`] implementation. +/// * `format = ...` May either be variant of the [`KnownFormat`][known_format] enum, or otherwise +/// an open value as a string. By default the format is derived from the type of the property +/// according OpenApi spec. +/// * `value_type = ...` Can be used to override default type derived from type of the field used in OpenAPI spec. +/// This is useful in cases where the default type does not correspond to the actual type e.g. when +/// any third-party types are used which are not [`ToSchema`][to_schema]s nor [`primitive` types][primitive]. +/// The value can be any Rust type what normally could be used to serialize to JSON or either virtual type _`Object`_ +/// or _`Value`_. +/// _`Object`_ will be rendered as generic OpenAPI object _(`type: object`)_. +/// _`Value`_ will be rendered as any OpenAPI value (i.e. no `type` restriction). +/// * `title = ...` Literal string value. Can be used to define title for struct in OpenAPI +/// document. Some OpenAPI code generation libraries also use this field as a name for the +/// struct. +/// * `as = ...` Can be used to define alternative path and name for the schema what will be used in +/// the OpenAPI. E.g _`as = path::to::Pet`_. This would make the schema appear in the generated +/// OpenAPI spec as _`path.to.Pet`_. This same name will be used throughout the OpenAPI generated +/// with `fastapi` when the type is being referenced in [`OpenApi`][openapi_derive] derive macro +/// or in [`fastapi::path(...)`][path_macro] macro. +/// * `bound = ...` Can be used to override default trait bounds on generated `impl`s. +/// See [Generic schemas section](#generic-schemas) below for more details. +/// * `deprecated` Can be used to mark the field as deprecated in the generated OpenAPI spec but +/// not in the code. If you'd like to mark the field as deprecated in the code as well use +/// Rust's own `#[deprecated]` attribute instead. +/// * `content_encoding = ...` Can be used to define content encoding used for underlying schema object. +/// See [`Object::content_encoding`][schema_object_encoding] +/// * `content_media_type = ...` Can be used to define MIME type of a string for underlying schema object. +/// See [`Object::content_media_type`][schema_object_media_type] +///* `no_recursion` Is used to break from recursion in case of looping schema tree e.g. `Pet` -> +/// `Owner` -> `Pet`. _`no_recursion`_ attribute must be used within `Ower` type not to allow +/// recurring into `Pet`. Failing to do so will cause infinite loop and runtime **panic**. +/// +/// # Enum Optional Configuration Options for `#[schema(...)]` +/// +/// ## Plain Enum having only `Unit` variants Optional Configuration Options for `#[schema(...)]` +/// +/// * `description = ...` Can be literal string or Rust expression e.g. [_`const`_][const] reference or +/// `include_str!(...)` statement. This can be used to override **default** description what is +/// resolved from doc comments of the type. +/// * `example = ...` Can be any value e.g. literal, method reference or _`json!(...)`_. +/// **Deprecated since OpenAPI 3.0, using `examples` is preferred instead.** +/// * `examples(..., ...)` Comma separated list defining multiple _`examples`_ for the schema. Each +/// _`example`_ Can be any value e.g. literal, method reference or _`json!(...)`_. +/// * `default = ...` Can be any value e.g. literal, method reference or _`json!(...)`_. +/// * `title = ...` Literal string value. Can be used to define title for enum in OpenAPI +/// document. Some OpenAPI code generation libraries also use this field as a name for the +/// enum. +/// * `rename_all = ...` Supports same syntax as _serde_ _`rename_all`_ attribute. Will rename all +/// variants of the enum accordingly. If both _serde_ `rename_all` and _schema_ _`rename_all`_ +/// are defined __serde__ will take precedence. +/// * `as = ...` Can be used to define alternative path and name for the schema what will be used in +/// the OpenAPI. E.g _`as = path::to::Pet`_. This would make the schema appear in the generated +/// OpenAPI spec as _`path.to.Pet`_. This same name will be used throughout the OpenAPI generated +/// with `fastapi` when the type is being referenced in [`OpenApi`][openapi_derive] derive macro +/// or in [`fastapi::path(...)`][path_macro] macro. +/// * `bound = ...` Can be used to override default trait bounds on generated `impl`s. +/// See [Generic schemas section](#generic-schemas) below for more details. +/// * `deprecated` Can be used to mark the enum as deprecated in the generated OpenAPI spec but +/// not in the code. If you'd like to mark the enum as deprecated in the code as well use +/// Rust's own `#[deprecated]` attribute instead. +/// +/// ### Plain Enum Variant Optional Configuration Options for `#[schema(...)]` +/// +/// * `rename = ...` Supports same syntax as _serde_ _`rename`_ attribute. Will rename variant +/// accordingly. If both _serde_ `rename` and _schema_ _`rename`_ are defined __serde__ will take +/// precedence. **Note!** [`Repr enum`][macro@ToSchema#repr-attribute-support] variant does not +/// support _`rename`_. +/// +/// ## Mixed Enum Optional Configuration Options for `#[schema(...)]` +/// +/// * `description = ...` Can be literal string or Rust expression e.g. [_`const`_][const] reference or +/// `include_str!(...)` statement. This can be used to override **default** description what is +/// resolved from doc comments of the type. +/// * `example = ...` Can be any value e.g. literal, method reference or _`json!(...)`_. +/// **Deprecated since OpenAPI 3.0, using `examples` is preferred instead.** +/// * `examples(..., ...)` Comma separated list defining multiple _`examples`_ for the schema. Each +/// * `default = ...` Can be any value e.g. literal, method reference or _`json!(...)`_. +/// * `title = ...` Literal string value. Can be used to define title for enum in OpenAPI +/// document. Some OpenAPI code generation libraries also use this field as a name for the +/// enum. +/// * `rename_all = ...` Supports same syntax as _serde_ _`rename_all`_ attribute. Will rename all +/// variants of the enum accordingly. If both _serde_ `rename_all` and _schema_ _`rename_all`_ +/// are defined __serde__ will take precedence. +/// * `as = ...` Can be used to define alternative path and name for the schema what will be used in +/// the OpenAPI. E.g _`as = path::to::Pet`_. This would make the schema appear in the generated +/// OpenAPI spec as _`path.to.Pet`_. This same name will be used throughout the OpenAPI generated +/// with `fastapi` when the type is being referenced in [`OpenApi`][openapi_derive] derive macro +/// or in [`fastapi::path(...)`][path_macro] macro. +/// * `bound = ...` Can be used to override default trait bounds on generated `impl`s. +/// See [Generic schemas section](#generic-schemas) below for more details. +/// * `deprecated` Can be used to mark the enum as deprecated in the generated OpenAPI spec but +/// not in the code. If you'd like to mark the enum as deprecated in the code as well use +/// Rust's own `#[deprecated]` attribute instead. +/// * `discriminator = ...` or `discriminator(...)` Can be used to define OpenAPI discriminator +/// field for enums with single unnamed _`ToSchema`_ reference field. See the [discriminator +/// syntax][derive@ToSchema#schemadiscriminator-syntax]. +///* `no_recursion` Is used to break from recursion in case of looping schema tree e.g. `Pet` -> +/// `Owner` -> `Pet`. _`no_recursion`_ attribute must be used within `Ower` type not to allow +/// recurring into `Pet`. Failing to do so will cause infinite loop and runtime **panic**. On +/// enum level the _`no_recursion`_ rule will be applied to all of its variants. +/// +/// ### `#[schema(discriminator)]` syntax +/// +/// Discriminator can **only** be used with enums having **`#[serde(untagged)]`** attribute and +/// each variant must have only one unnamed field schema reference to type implementing +/// _`ToSchema`_. +/// +/// **Simple form `discriminator = ...`** +/// +/// Can be literal string or expression e.g. [_`const`_][const] reference. It can be defined as +/// _`discriminator = "value"`_ where the assigned value is the +/// discriminator field that must exists in each variant referencing schema. +/// +/// **Complex form `discriminator(...)`** +/// +/// * `property_name = ...` Can be literal string or expression e.g. [_`const`_][const] reference. +/// * mapping `key` Can be literal string or expression e.g. [_`const`_][const] reference. +/// * mapping `value` Can be literal string or expression e.g. [_`const`_][const] reference. +/// +/// Additionally discriminator can be defined with custom mappings as show below. The _`mapping`_ +/// values defines _**key = value**_ pairs where _**key**_ is the expected value for _**property_name**_ field +/// and _**value**_ is schema to map. +/// ```text +/// discriminator(property_name = "my_field", mapping( +/// ("value" = "#/components/schemas/Schema1"), +/// ("value2" = "#/components/schemas/Schema2") +/// )) +/// ``` +/// +/// ### Mixed Enum Named Field Variant Optional Configuration Options for `#[serde(schema)]` +/// +/// * `example = ...` Can be any value e.g. literal, method reference or _`json!(...)`_. +/// **Deprecated since OpenAPI 3.0, using `examples` is preferred instead.** +/// * `examples(..., ...)` Comma separated list defining multiple _`examples`_ for the schema. Each +/// * `default = ...` Can be any value e.g. literal, method reference or _`json!(...)`_. +/// * `title = ...` Literal string value. Can be used to define title for enum variant in OpenAPI +/// document. Some OpenAPI code generation libraries also use this field as a name for the +/// enum. +/// * `xml(...)` Can be used to define [`Xml`][xml] object properties applicable to Structs. +/// * `rename = ...` Supports same syntax as _serde_ _`rename`_ attribute. Will rename variant +/// accordingly. If both _serde_ `rename` and _schema_ _`rename`_ are defined __serde__ will take +/// precedence. +/// * `rename_all = ...` Supports same syntax as _serde_ _`rename_all`_ attribute. Will rename all +/// variant fields accordingly. If both _serde_ `rename_all` and _schema_ _`rename_all`_ +/// are defined __serde__ will take precedence. +/// * `deprecated` Can be used to mark the enum as deprecated in the generated OpenAPI spec but +/// not in the code. If you'd like to mark the enum as deprecated in the code as well use +/// Rust's own `#[deprecated]` attribute instead. +/// * `max_properties = ...` Can be used to define maximum number of properties this struct can +/// contain. Value must be a number. +/// * `min_properties = ...` Can be used to define minimum number of properties this struct can +/// contain. Value must be a number. +///* `no_recursion` Is used to break from recursion in case of looping schema tree e.g. `Pet` -> +/// `Owner` -> `Pet`. _`no_recursion`_ attribute must be used within `Ower` type not to allow +/// recurring into `Pet`. Failing to do so will cause infinite loop and runtime **panic**. On +/// named field variant level the _`no_recursion`_ rule will be applied to all of its fields. +/// +/// ## Mixed Enum Unnamed Field Variant Optional Configuration Options for `#[serde(schema)]` +/// +/// * `example = ...` Can be any value e.g. literal, method reference or _`json!(...)`_. +/// **Deprecated since OpenAPI 3.0, using `examples` is preferred instead.** +/// * `examples(..., ...)` Comma separated list defining multiple _`examples`_ for the schema. Each +/// _`example`_ Can be any value e.g. literal, method reference or _`json!(...)`_. +/// * `default = ...` Can be any value e.g. literal, method reference or _`json!(...)`_. +/// * `title = ...` Literal string value. Can be used to define title for enum variant in OpenAPI +/// document. Some OpenAPI code generation libraries also use this field as a name for the +/// struct. +/// * `rename = ...` Supports same syntax as _serde_ _`rename`_ attribute. Will rename variant +/// accordingly. If both _serde_ `rename` and _schema_ _`rename`_ are defined __serde__ will take +/// precedence. +/// * `format = ...` May either be variant of the [`KnownFormat`][known_format] enum, or otherwise +/// an open value as a string. By default the format is derived from the type of the property +/// according OpenApi spec. +/// * `value_type = ...` Can be used to override default type derived from type of the field used in OpenAPI spec. +/// This is useful in cases where the default type does not correspond to the actual type e.g. when +/// any third-party types are used which are not [`ToSchema`][to_schema]s nor [`primitive` types][primitive]. +/// The value can be any Rust type what normally could be used to serialize to JSON or either virtual type _`Object`_ +/// or _`Value`_. +/// _`Object`_ will be rendered as generic OpenAPI object _(`type: object`)_. +/// _`Value`_ will be rendered as any OpenAPI value (i.e. no `type` restriction). +/// * `deprecated` Can be used to mark the field as deprecated in the generated OpenAPI spec but +/// not in the code. If you'd like to mark the field as deprecated in the code as well use +/// Rust's own `#[deprecated]` attribute instead. +///* `no_recursion` Is used to break from recursion in case of looping schema tree e.g. `Pet` -> +/// `Owner` -> `Pet`. _`no_recursion`_ attribute must be used within `Ower` type not to allow +/// recurring into `Pet`. Failing to do so will cause infinite loop and runtime **panic**. +/// +/// #### Mixed Enum Unnamed Field Variant's Field Configuration Options +/// +/// * `inline` If the type of this field implements [`ToSchema`][to_schema], then the schema definition +/// will be inlined. **warning:** Don't use this for recursive data types! +/// +/// **Note!**<br>Using `inline` with generic arguments might lead to incorrect spec generation. +/// This is due to the fact that during compilation we cannot know how to treat the generic +/// argument and there is difference whether it is a primitive type or another generic type. +/// +/// _**Inline unnamed field variant schemas.**_ +/// ```rust +/// # use fastapi::ToSchema; +/// # #[derive(ToSchema)] +/// # enum Number { +/// # One, +/// # } +/// # +/// # #[derive(ToSchema)] +/// # enum Color { +/// # Spade, +/// # } +/// #[derive(ToSchema)] +/// enum Card { +/// Number(#[schema(inline)] Number), +/// Color(#[schema(inline)] Color), +/// } +/// ``` +/// +/// ## Mixed Enum Unit Field Variant Optional Configuration Options for `#[serde(schema)]` +/// +/// * `example = ...` Can be any value e.g. literal, method reference or _`json!(...)`_. +/// **Deprecated since OpenAPI 3.0, using `examples` is preferred instead.** +/// * `examples(..., ...)` Comma separated list defining multiple _`examples`_ for the schema. Each +/// _`example`_ Can be any value e.g. literal, method reference or _`json!(...)`_. +/// * `title = ...` Literal string value. Can be used to define title for enum variant in OpenAPI +/// document. Some OpenAPI code generation libraries also use this field as a name for the +/// struct. +/// * `rename = ...` Supports same syntax as _serde_ _`rename`_ attribute. Will rename variant +/// accordingly. If both _serde_ `rename` and _schema_ _`rename`_ are defined __serde__ will take +/// precedence. +/// * `deprecated` Can be used to mark the field as deprecated in the generated OpenAPI spec but +/// not in the code. If you'd like to mark the field as deprecated in the code as well use +/// Rust's own `#[deprecated]` attribute instead. +/// +/// # Partial `#[serde(...)]` attributes support +/// +/// ToSchema derive has partial support for [serde attributes]. These supported attributes will reflect to the +/// generated OpenAPI doc. For example if _`#[serde(skip)]`_ is defined the attribute will not show up in the OpenAPI spec at all since it will not never +/// be serialized anyway. Similarly the _`rename`_ and _`rename_all`_ will reflect to the generated OpenAPI doc. +/// +/// * `rename_all = "..."` Supported at the container level. +/// * `rename = "..."` Supported **only** at the field or variant level. +/// * `skip = "..."` Supported **only** at the field or variant level. +/// * `skip_serializing = "..."` Supported **only** at the field or variant level. +/// * `skip_deserializing = "..."` Supported **only** at the field or variant level. +/// * `skip_serializing_if = "..."` Supported **only** at the field level. +/// * `with = ...` Supported **only at field level.** +/// * `tag = "..."` Supported at the container level. +/// * `content = "..."` Supported at the container level, allows [adjacently-tagged enums](https://serde.rs/enum-representations.html#adjacently-tagged). +/// This attribute requires that a `tag` is present, otherwise serde will trigger a compile-time +/// failure. +/// * `untagged` Supported at the container level. Allows [untagged +/// enum representation](https://serde.rs/enum-representations.html#untagged). +/// * `default` Supported at the container level and field level according to [serde attributes]. +/// * `deny_unknown_fields` Supported at the container level. +/// * `flatten` Supported at the field level. +/// +/// Other _`serde`_ attributes works as is but does not have any effect on the generated OpenAPI doc. +/// +/// **Note!** `tag` attribute has some limitations like it cannot be used with **tuple types**. See more at +/// [enum representation docs](https://serde.rs/enum-representations.html). +/// +/// **Note!** `with` attribute is used in tandem with [serde_with](https://github.com/jonasbb/serde_with) to recognize +/// _[`double_option`](https://docs.rs/serde_with/latest/serde_with/rust/double_option/index.html)_ from **field value**. +/// _`double_option`_ is **only** supported attribute from _`serde_with`_ crate. +/// +/// ```rust +/// # use serde::Serialize; +/// # use fastapi::ToSchema; +/// #[derive(Serialize, ToSchema)] +/// struct Foo(String); +/// +/// #[derive(Serialize, ToSchema)] +/// #[serde(rename_all = "camelCase")] +/// enum Bar { +/// UnitValue, +/// #[serde(rename_all = "camelCase")] +/// NamedFields { +/// #[serde(rename = "id")] +/// named_id: &'static str, +/// name_list: Option<Vec<String>> +/// }, +/// UnnamedFields(Foo), +/// #[serde(skip)] +/// SkipMe, +/// } +/// ``` +/// +/// _**Add custom `tag` to change JSON representation to be internally tagged.**_ +/// ```rust +/// # use serde::Serialize; +/// # use fastapi::ToSchema; +/// #[derive(Serialize, ToSchema)] +/// struct Foo(String); +/// +/// #[derive(Serialize, ToSchema)] +/// #[serde(tag = "tag")] +/// enum Bar { +/// UnitValue, +/// NamedFields { +/// id: &'static str, +/// names: Option<Vec<String>> +/// }, +/// } +/// ``` +/// +/// _**Add serde `default` attribute for MyValue struct. Similarly `default` could be added to +/// individual fields as well. If `default` is given the field's affected will be treated +/// as optional.**_ +/// ```rust +/// #[derive(fastapi::ToSchema, serde::Deserialize, Default)] +/// #[serde(default)] +/// struct MyValue { +/// field: String +/// } +/// ``` +/// +/// # `#[repr(...)]` attribute support +/// +/// [Serde repr](https://github.com/dtolnay/serde-repr) allows field-less enums be represented by +/// their numeric value. +/// +/// * `repr(u*)` for unsigned integer. +/// * `repr(i*)` for signed integer. +/// +/// **Supported schema attributes** +/// +/// * `example = ...` Can be any value e.g. literal, method reference or _`json!(...)`_. +/// **Deprecated since OpenAPI 3.0, using `examples` is preferred instead.** +/// * `examples(..., ...)` Comma separated list defining multiple _`examples`_ for the schema. Each +/// _`example`_ Can be any value e.g. literal, method reference or _`json!(...)`_. +/// * `title = ...` Literal string value. Can be used to define title for enum in OpenAPI +/// document. Some OpenAPI code generation libraries also use this field as a name for the +/// struct. +/// * `as = ...` Can be used to define alternative path and name for the schema what will be used in +/// the OpenAPI. E.g _`as = path::to::Pet`_. This would make the schema appear in the generated +/// OpenAPI spec as _`path.to.Pet`_. This same name will be used throughout the OpenAPI generated +/// with `fastapi` when the type is being referenced in [`OpenApi`][openapi_derive] derive macro +/// or in [`fastapi::path(...)`][path_macro] macro. +/// +/// _**Create enum with numeric values.**_ +/// ```rust +/// # use fastapi::ToSchema; +/// #[derive(ToSchema)] +/// #[repr(u8)] +/// #[schema(default = default_value, example = 2)] +/// enum Mode { +/// One = 1, +/// Two, +/// } +/// +/// fn default_value() -> u8 { +/// 1 +/// } +/// ``` +/// +/// _**You can use `skip` and `tag` attributes from serde.**_ +/// ```rust +/// # use fastapi::ToSchema; +/// #[derive(ToSchema, serde::Serialize)] +/// #[repr(i8)] +/// #[serde(tag = "code")] +/// enum ExitCode { +/// Error = -1, +/// #[serde(skip)] +/// Unknown = 0, +/// Ok = 1, +/// } +/// ``` +/// +/// # Generic schemas +/// +/// Fastapi supports full set of deeply nested generics as shown below. The type will implement +/// [`ToSchema`][to_schema] if and only if all the generic types implement `ToSchema` by default. +/// That is in Rust `impl<T> ToSchema for MyType<T> where T: Schema { ... }`. +/// You can also specify `bound = ...` on the item to override the default auto bounds. +/// +/// The _`as = ...`_ attribute is used to define the prefixed or alternative name for the component +/// in question. This same name will be used throughout the OpenAPI generated with `fastapi` when +/// the type is being referenced in [`OpenApi`][openapi_derive] derive macro or in [`fastapi::path(...)`][path_macro] macro. +/// +/// ```rust +/// # use fastapi::ToSchema; +/// # use std::borrow::Cow; +/// #[derive(ToSchema)] +/// #[schema(as = path::MyType<T>)] +/// struct Type<T> { +/// t: T, +/// } +/// +/// #[derive(ToSchema)] +/// struct Person<'p, T: Sized, P> { +/// id: usize, +/// name: Option<Cow<'p, str>>, +/// field: T, +/// t: P, +/// } +/// +/// #[derive(ToSchema)] +/// #[schema(as = path::to::PageList)] +/// struct Page<T> { +/// total: usize, +/// page: usize, +/// pages: usize, +/// items: Vec<T>, +/// } +/// +/// #[derive(ToSchema)] +/// #[schema(as = path::to::Element<T>)] +/// enum E<T> { +/// One(T), +/// Many(Vec<T>), +/// } +/// ``` +/// When generic types are registered to the `OpenApi` the full type declaration must be provided. +/// See the full example in test [schema_generics.rs](https://github.com/nxpkg/fastapi/blob/master/fastapi-gen/tests/schema_generics.rs) +/// +/// # Examples +/// +/// _**Simple example of a Pet with descriptions and object level example.**_ +/// ```rust +/// # use fastapi::ToSchema; +/// /// This is a pet. +/// #[derive(ToSchema)] +/// #[schema(example = json!({"name": "bob the cat", "id": 0}))] +/// struct Pet { +/// /// Unique id of a pet. +/// id: u64, +/// /// Name of a pet. +/// name: String, +/// /// Age of a pet if known. +/// age: Option<i32>, +/// } +/// ``` +/// +/// _**The `schema` attribute can also be placed at field level as follows.**_ +/// ```rust +/// # use fastapi::ToSchema; +/// #[derive(ToSchema)] +/// struct Pet { +/// #[schema(example = 1, default = 0)] +/// id: u64, +/// name: String, +/// age: Option<i32>, +/// } +/// ``` +/// +/// _**You can also use method reference for attribute values.**_ +/// ```rust +/// # use fastapi::ToSchema; +/// #[derive(ToSchema)] +/// struct Pet { +/// #[schema(example = u64::default, default = u64::default)] +/// id: u64, +/// #[schema(default = default_name)] +/// name: String, +/// age: Option<i32>, +/// } +/// +/// fn default_name() -> String { +/// "bob".to_string() +/// } +/// ``` +/// +/// _**For enums and unnamed field structs you can define `schema` at type level.**_ +/// ```rust +/// # use fastapi::ToSchema; +/// #[derive(ToSchema)] +/// #[schema(example = "Bus")] +/// enum VehicleType { +/// Rocket, Car, Bus, Submarine +/// } +/// ``` +/// +/// _**Also you write mixed enum combining all above types.**_ +/// ```rust +/// # use fastapi::ToSchema; +/// #[derive(ToSchema)] +/// enum ErrorResponse { +/// InvalidCredentials, +/// #[schema(default = String::default, example = "Pet not found")] +/// NotFound(String), +/// System { +/// #[schema(example = "Unknown system failure")] +/// details: String, +/// } +/// } +/// ``` +/// +/// _**It is possible to specify the title of each variant to help generators create named structures.**_ +/// ```rust +/// # use fastapi::ToSchema; +/// #[derive(ToSchema)] +/// enum ErrorResponse { +/// #[schema(title = "InvalidCredentials")] +/// InvalidCredentials, +/// #[schema(title = "NotFound")] +/// NotFound(String), +/// } +/// ``` +/// +/// _**Use `xml` attribute to manipulate xml output.**_ +/// ```rust +/// # use fastapi::ToSchema; +/// #[derive(ToSchema)] +/// #[schema(xml(name = "user", prefix = "u", namespace = "https://user.xml.schema.test"))] +/// struct User { +/// #[schema(xml(attribute, prefix = "u"))] +/// id: i64, +/// #[schema(xml(name = "user_name", prefix = "u"))] +/// username: String, +/// #[schema(xml(wrapped(name = "linkList"), name = "link"))] +/// links: Vec<String>, +/// #[schema(xml(wrapped, name = "photo_url"))] +/// photos_urls: Vec<String> +/// } +/// ``` +/// +/// _**Use of Rust's own `#[deprecated]` attribute will reflect to generated OpenAPI spec.**_ +/// ```rust +/// # use fastapi::ToSchema; +/// #[derive(ToSchema)] +/// #[deprecated] +/// struct User { +/// id: i64, +/// username: String, +/// links: Vec<String>, +/// #[deprecated] +/// photos_urls: Vec<String> +/// } +/// ``` +/// +/// _**Enforce type being used in OpenAPI spec to [`String`] with `value_type` and set format to octet stream +/// with [`SchemaFormat::KnownFormat(KnownFormat::Binary)`][binary].**_ +/// ```rust +/// # use fastapi::ToSchema; +/// #[derive(ToSchema)] +/// struct Post { +/// id: i32, +/// #[schema(value_type = String, format = Binary)] +/// value: Vec<u8>, +/// } +/// ``` +/// +/// _**Enforce type being used in OpenAPI spec to [`String`] with `value_type` option.**_ +/// ```rust +/// # use fastapi::ToSchema; +/// #[derive(ToSchema)] +/// #[schema(value_type = String)] +/// struct Value(i64); +/// ``` +/// +/// _**Override the `Bar` reference with a `custom::NewBar` reference.**_ +/// ```rust +/// # use fastapi::ToSchema; +/// # mod custom { +/// # #[derive(fastapi::ToSchema)] +/// # pub struct NewBar; +/// # } +/// # +/// # struct Bar; +/// #[derive(ToSchema)] +/// struct Value { +/// #[schema(value_type = custom::NewBar)] +/// field: Bar, +/// }; +/// ``` +/// +/// _**Use a virtual `Object` type to render generic `object` _(`type: object`)_ in OpenAPI spec.**_ +/// ```rust +/// # use fastapi::ToSchema; +/// # mod custom { +/// # struct NewBar; +/// # } +/// # +/// # struct Bar; +/// #[derive(ToSchema)] +/// struct Value { +/// #[schema(value_type = Object)] +/// field: Bar, +/// }; +/// ``` +/// More examples for _`value_type`_ in [`IntoParams` derive docs][into_params]. +/// +/// _**Serde `rename` / `rename_all` will take precedence over schema `rename` / `rename_all`.**_ +/// ```rust +/// #[derive(fastapi::ToSchema, serde::Deserialize)] +/// #[serde(rename_all = "lowercase")] +/// #[schema(rename_all = "UPPERCASE")] +/// enum Random { +/// #[serde(rename = "string_value")] +/// #[schema(rename = "custom_value")] +/// String(String), +/// +/// Number { +/// id: i32, +/// } +/// } +/// ``` +/// +/// _**Add `title` to the enum.**_ +/// ```rust +/// #[derive(fastapi::ToSchema)] +/// #[schema(title = "UserType")] +/// enum UserType { +/// Admin, +/// Moderator, +/// User, +/// } +/// ``` +/// +/// _**Example with validation attributes.**_ +/// ```rust +/// #[derive(fastapi::ToSchema)] +/// struct Item { +/// #[schema(maximum = 10, minimum = 5, multiple_of = 2.5)] +/// id: i32, +/// #[schema(max_length = 10, min_length = 5, pattern = "[a-z]*")] +/// value: String, +/// #[schema(max_items = 5, min_items = 1)] +/// items: Vec<String>, +/// } +/// ```` +/// +/// _**Use `schema_with` to manually implement schema for a field.**_ +/// ```rust +/// # use fastapi::openapi::schema::{Object, ObjectBuilder}; +/// fn custom_type() -> Object { +/// ObjectBuilder::new() +/// .schema_type(fastapi::openapi::schema::Type::String) +/// .format(Some(fastapi::openapi::SchemaFormat::Custom( +/// "email".to_string(), +/// ))) +/// .description(Some("this is the description")) +/// .build() +/// } +/// +/// #[derive(fastapi::ToSchema)] +/// struct Value { +/// #[schema(schema_with = custom_type)] +/// id: String, +/// } +/// ``` +/// +/// _**Use `as` attribute to change the name and the path of the schema in the generated OpenAPI +/// spec.**_ +/// ```rust +/// #[derive(fastapi::ToSchema)] +/// #[schema(as = api::models::person::Person)] +/// struct Person { +/// name: String, +/// } +/// ``` +/// +/// _**Use `bound` attribute to override the default impl bounds.**_ +/// +/// `bound = ...` accepts a string containing zero or more where-predicates separated by comma, as +/// the similar syntax to [`serde(bound = ...)`](https://serde.rs/container-attrs.html#bound). +/// If `bound = ...` exists, the default auto bounds (requiring all generic types to implement +/// `ToSchema`) will not be applied anymore, and only the specified predicates are added to the +/// `where` clause of generated `impl` blocks. +/// +/// ```rust +/// // Override the default bounds to only require `T: ToSchema`, ignoring unused `U`. +/// #[derive(fastapi::ToSchema, serde::Serialize)] +/// #[schema(bound = "T: fastapi::ToSchema")] +/// struct Partial<T, U> { +/// used_in_api: T, +/// #[serde(skip)] +/// not_in_api: std::marker::PhantomData<U>, +/// } +/// +/// // Just remove the auto-bounds. So we got `Unused<T>: ToSchema` for any `T`. +/// #[derive(fastapi::ToSchema, serde::Serialize)] +/// #[schema(bound = "")] +/// struct Unused<T> { +/// #[serde(skip)] +/// _marker: std::marker::PhantomData<T>, +/// } +/// ``` +/// +/// _**Use `no_recursion` attribute to break from looping schema tree e.g. `Pet` -> `Owner` -> +/// `Pet`.**_ +/// +/// `no_recursion` attribute can be provided on named field of a struct, on unnamed struct or unnamed +/// enum variant. It must be provided in case of looping schema tree in order to stop recursion. +/// Failing to do so will cause runtime **panic**. +/// ```rust +/// # use fastapi::ToSchema; +/// # +/// #[derive(ToSchema)] +/// pub struct Pet { +/// name: String, +/// owner: Owner, +/// } +/// +/// #[derive(ToSchema)] +/// pub struct Owner { +/// name: String, +/// #[schema(no_recursion)] +/// pets: Vec<Pet>, +/// } +/// ``` +/// +/// [to_schema]: trait.ToSchema.html +/// [known_format]: openapi/schema/enum.KnownFormat.html +/// [binary]: openapi/schema/enum.KnownFormat.html#variant.Binary +/// [xml]: openapi/xml/struct.Xml.html +/// [into_params]: derive.IntoParams.html +/// [primitive]: https://doc.rust-lang.org/std/primitive/index.html +/// [serde attributes]: https://serde.rs/attributes.html +/// [discriminator]: openapi/schema/struct.Discriminator.html +/// [enum_schema]: derive.ToSchema.html#enum-optional-configuration-options-for-schema +/// [openapi_derive]: derive.OpenApi.html +/// [to_schema_xml]: macro@ToSchema#xml-attribute-configuration-options +/// [schema_object_encoding]: openapi/schema/struct.Object.html#structfield.content_encoding +/// [schema_object_media_type]: openapi/schema/struct.Object.html#structfield.content_media_type +/// [path_macro]: macro@path +/// [const]: https://doc.rust-lang.org/std/keyword.const.html +pub fn derive_to_schema(input: TokenStream) -> TokenStream { + let DeriveInput { + attrs, + ident, + data, + generics, + .. + } = syn::parse_macro_input!(input); + + Schema::new(&data, &attrs, &ident, &generics) + .as_ref() + .map_or_else(Diagnostics::to_token_stream, Schema::to_token_stream) + .into() +} + +#[proc_macro_attribute] +/// Path attribute macro implements OpenAPI path for the decorated function. +/// +/// This is a `#[derive]` implementation for [`Path`][path] trait. Macro accepts set of attributes that can +/// be used to configure and override default values what are resolved automatically. +/// +/// You can use the Rust's own `#[deprecated]` attribute on functions to mark it as deprecated and it will +/// reflect to the generated OpenAPI spec. Only **parameters** has a special **deprecated** attribute to define them as deprecated. +/// +/// `#[deprecated]` attribute supports adding additional details such as a reason and or since version but this is is not supported in +/// OpenAPI. OpenAPI has only a boolean flag to determine deprecation. While it is totally okay to declare deprecated with reason +/// `#[deprecated = "There is better way to do this"]` the reason would not render in OpenAPI spec. +/// +/// Doc comment at decorated function will be used for _`description`_ and _`summary`_ of the path. +/// First line of the doc comment will be used as the _`summary`_ while the remaining lines will be +/// used as _`description`_. +/// ```rust +/// /// This is a summary of the operation +/// /// +/// /// The rest of the doc comment will be included to operation description. +/// #[fastapi::path(get, path = "/operation")] +/// fn operation() {} +/// ``` +/// +/// # Path Attributes +/// +/// * `operation` _**Must be first parameter!**_ Accepted values are known HTTP operations such as +/// _`get, post, put, delete, head, options, patch, trace`_. +/// +/// * `method(get, head, ...)` Http methods for the operation. This allows defining multiple +/// HTTP methods at once for single operation. Either _`operation`_ or _`method(...)`_ _**must be +/// provided.**_ +/// +/// * `path = "..."` Must be OpenAPI format compatible str with arguments within curly braces. E.g _`{id}`_ +/// +/// * `impl_for = ...` Optional type to implement the [`Path`][path] trait. By default a new type +/// is used for the implementation. +/// +/// * `operation_id = ...` Unique operation id for the endpoint. By default this is mapped to function name. +/// The operation_id can be any valid expression (e.g. string literals, macro invocations, variables) so long +/// as its result can be converted to a `String` using `String::from`. +/// +/// * `context_path = "..."` Can add optional scope for **path**. The **context_path** will be prepended to beginning of **path**. +/// This is particularly useful when **path** does not contain the full path to the endpoint. For example if web framework +/// allows operation to be defined under some context path or scope which does not reflect to the resolved path then this +/// **context_path** can become handy to alter the path. +/// +/// * `tag = "..."` Can be used to group operations. Operations with same tag are grouped together. By default +/// this is derived from the module path of the handler that is given to [`OpenApi`][openapi]. +/// +/// * `tags = ["tag1", ...]` Can be used to group operations. Operations with same tag are grouped +/// together. Tags attribute can be used to add additional _tags_ for the operation. If both +/// _`tag`_ and _`tags`_ are provided then they will be combined to a single _`tags`_ array. +/// +/// * `request_body = ... | request_body(...)` Defining request body indicates that the request is expecting request body within +/// the performed request. +/// +/// * `responses(...)` Slice of responses the endpoint is going to possibly return to the caller. +/// +/// * `params(...)` Slice of params that the endpoint accepts. +/// +/// * `security(...)` List of [`SecurityRequirement`][security]s local to the path operation. +/// +/// # Request Body Attributes +/// +/// ## Simple format definition by `request_body = ...` +/// * _`request_body = Type`_, _`request_body = inline(Type)`_ or _`request_body = ref("...")`_. +/// The given _`Type`_ can be any Rust type that is JSON parseable. It can be Option, Vec or Map etc. +/// With _`inline(...)`_ the schema will be inlined instead of a referenced which is the default for +/// [`ToSchema`][to_schema] types. _`ref("./external.json")`_ can be used to reference external +/// json file for body schema. **Note!** Fastapi does **not** guarantee that free form _`ref`_ is accessible via +/// OpenAPI doc or Swagger UI, users are responsible for making these guarantees. +/// +/// ## Advanced format definition by `request_body(...)` +/// +/// With advanced format the request body supports defining either one or multiple request bodies by `content` attribute. +/// +/// ### Common request body attributes +/// +/// * `description = "..."` Define the description for the request body object as str. +/// +/// * `example = ...` Can be _`json!(...)`_. _`json!(...)`_ should be something that +/// _`serde_json::json!`_ can parse as a _`serde_json::Value`_. +/// +/// * `examples(...)` Define multiple examples for single request body. This attribute is mutually +/// exclusive to the _`example`_ attribute and if both are defined this will override the _`example`_. +/// This has same syntax as _`examples(...)`_ in [Response Attributes](#response-attributes) +/// _examples(...)_ +/// +/// ### Single request body content +/// +/// * `content = ...` Can be _`content = Type`_, _`content = inline(Type)`_ or _`content = ref("...")`_. The +/// given _`Type`_ can be any Rust type that is JSON parseable. It can be Option, Vec +/// or Map etc. With _`inline(...)`_ the schema will be inlined instead of a referenced +/// which is the default for [`ToSchema`][to_schema] types. _`ref("./external.json")`_ +/// can be used to reference external json file for body schema. **Note!** Fastapi does **not** guarantee +/// that free form _`ref`_ is accessible via OpenAPI doc or Swagger UI, users are responsible for making +/// these guarantees. +/// +/// * `content_type = "..."` Can be used to override the default behavior +/// of auto resolving the content type from the `content` attribute. If defined the value should be valid +/// content type such as _`application/json`_ . By default the content type is _`text/plain`_ +/// for [primitive Rust types][primitive], `application/octet-stream` for _`[u8]`_ and _`application/json`_ +/// for struct and mixed enum types. +/// +/// _**Example of single request body definitions.**_ +/// ```text +/// request_body(content = String, description = "Xml as string request", content_type = "text/xml"), +/// request_body(content_type = "application/json"), +/// request_body = Pet, +/// request_body = Option<[Pet]>, +/// ``` +/// +/// ### Multiple request body content +/// +/// * `content(...)` Can be tuple of content tuples according to format below. +/// ```text +/// ( schema ) +/// ( schema = "content/type", example = ..., examples(..., ...) ) +/// ( "content/type", ), +/// ( "content/type", example = ..., examples(..., ...) ) +/// ``` +/// +/// First argument of content tuple is _`schema`_, which is optional as long as either _`schema`_ +/// or _`content/type`_ is defined. The _`schema`_ and _`content/type`_ is separated with equals +/// (=) sign. Optionally content tuple supports defining _`example`_ and _`examples`_ arguments. See +/// [common request body attributes][macro@path#common-request-body-attributes] +/// +/// _**Example of multiple request body definitions.**_ +/// +/// ```text +/// // guess the content type for Pet and Pet2 +/// request_body(description = "Common description", +/// content( +/// (Pet), +/// (Pet2) +/// ) +/// ), +/// // define explicit content types +/// request_body(description = "Common description", +/// content( +/// (Pet = "application/json", examples(..., ...), example = ...), +/// (Pet2 = "text/xml", examples(..., ...), example = ...) +/// ) +/// ), +/// // omit schema and accept arbitrary content types +/// request_body(description = "Common description", +/// content( +/// ("application/json"), +/// ("text/xml", examples(..., ...), example = ...) +/// ) +/// ), +/// ``` +/// +/// # Response Attributes +/// +/// * `status = ...` Is either a valid http status code integer. E.g. _`200`_ or a string value representing +/// a range such as _`"4XX"`_ or `"default"` or a valid _`http::status::StatusCode`_. +/// _`StatusCode`_ can either be use path to the status code or _status code_ constant directly. +/// +/// * `description = "..."` Define description for the response as str. +/// +/// * `body = ...` Optional response body object type. When left empty response does not expect to send any +/// response body. Can be _`body = Type`_, _`body = inline(Type)`_, or _`body = ref("...")`_. +/// The given _`Type`_ can be any Rust type that is JSON parseable. It can be Option, Vec or Map etc. +/// With _`inline(...)`_ the schema will be inlined instead of a referenced which is the default for +/// [`ToSchema`][to_schema] types. _`ref("./external.json")`_ +/// can be used to reference external json file for body schema. **Note!** Fastapi does **not** guarantee +/// that free form _`ref`_ is accessible via OpenAPI doc or Swagger UI, users are responsible for making +/// these guarantees. +/// +/// * `content_type = "..."` Can be used to override the default behavior +/// of auto resolving the content type from the `body` attribute. If defined the value should be valid +/// content type such as _`application/json`_ . By default the content type is _`text/plain`_ +/// for [primitive Rust types][primitive], `application/octet-stream` for _`[u8]`_ and _`application/json`_ +/// for struct and mixed enum types. +/// +/// * `headers(...)` Slice of response headers that are returned back to a caller. +/// +/// * `example = ...` Can be _`json!(...)`_. _`json!(...)`_ should be something that +/// _`serde_json::json!`_ can parse as a _`serde_json::Value`_. +/// +/// * `response = ...` Type what implements [`ToResponse`][to_response_trait] trait. This can alternatively be used to +/// define response attributes. _`response`_ attribute cannot co-exist with other than _`status`_ attribute. +/// +/// * `content((...), (...))` Can be used to define multiple return types for single response status. Supports same syntax as +/// [multiple request body content][`macro@path#multiple-request-body-content`]. +/// +/// * `examples(...)` Define multiple examples for single response. This attribute is mutually +/// exclusive to the _`example`_ attribute and if both are defined this will override the _`example`_. +/// +/// * `links(...)` Define a map of operations links that can be followed from the response. +/// +/// ## Response `examples(...)` syntax +/// +/// * `name = ...` This is first attribute and value must be literal string. +/// * `summary = ...` Short description of example. Value must be literal string. +/// * `description = ...` Long description of example. Attribute supports markdown for rich text +/// representation. Value must be literal string. +/// * `value = ...` Example value. It must be _`json!(...)`_. _`json!(...)`_ should be something that +/// _`serde_json::json!`_ can parse as a _`serde_json::Value`_. +/// * `external_value = ...` Define URI to literal example value. This is mutually exclusive to +/// the _`value`_ attribute. Value must be literal string. +/// +/// _**Example of example definition.**_ +/// ```text +/// ("John" = (summary = "This is John", value = json!({"name": "John"}))) +/// ``` +/// +/// ## Response `links(...)` syntax +/// +/// * `operation_ref = ...` Define a relative or absolute URI reference to an OAS operation. This field is +/// mutually exclusive of the _`operation_id`_ field, and **must** point to an [Operation Object][operation]. +/// Value can be be [`str`] or an expression such as [`include_str!`][include_str] or static +/// [`const`][const] reference. +/// +/// * `operation_id = ...` Define the name of an existing, resolvable OAS operation, as defined with a unique +/// _`operation_id`_. This field is mutually exclusive of the _`operation_ref`_ field. +/// Value can be be [`str`] or an expression such as [`include_str!`][include_str] or static +/// [`const`][const] reference. +/// +/// * `parameters(...)` A map representing parameters to pass to an operation as specified with _`operation_id`_ +/// or identified by _`operation_ref`_. The key is parameter name to be used and value can +/// be any value supported by JSON or an [expression][expression] e.g. `$path.id` +/// * `name = ...` Define name for the parameter. +/// Value can be be [`str`] or an expression such as [`include_str!`][include_str] or static +/// [`const`][const] reference. +/// * `value` = Any value that can be supported by JSON or an [expression][expression]. +/// +/// _**Example of parameters syntax:**_ +/// ```text +/// parameters( +/// ("name" = value), +/// ("name" = value) +/// ), +/// ``` +/// +/// * `request_body = ...` Define a literal value or an [expression][expression] to be used as request body when +/// operation is called +/// +/// * `description = ...` Define description of the link. Value supports Markdown syntax.Value can be be [`str`] or +/// an expression such as [`include_str!`][include_str] or static [`const`][const] reference. +/// +/// * `server(...)` Define [Server][server] object to be used by the target operation. See +/// [server syntax][server_derive_syntax] +/// +/// **Links syntax example:** See the full example below in [examples](#examples). +/// ```text +/// responses( +/// (status = 200, description = "success response", +/// links( +/// ("link_name" = ( +/// operation_id = "test_links", +/// parameters(("key" = "value"), ("json_value" = json!(1))), +/// request_body = "this is body", +/// server(url = "http://localhost") +/// )) +/// ) +/// ) +/// ) +/// ``` +/// +/// **Minimal response format:** +/// ```text +/// responses( +/// (status = 200, description = "success response"), +/// (status = 404, description = "resource missing"), +/// (status = "5XX", description = "server error"), +/// (status = StatusCode::INTERNAL_SERVER_ERROR, description = "internal server error"), +/// (status = IM_A_TEAPOT, description = "happy easter") +/// ) +/// ``` +/// +/// **More complete Response:** +/// ```text +/// responses( +/// (status = 200, description = "Success response", body = Pet, content_type = "application/json", +/// headers(...), +/// example = json!({"id": 1, "name": "bob the cat"}) +/// ) +/// ) +/// ``` +/// +/// **Multiple response return types with _`content(...)`_ attribute:** +/// +/// _**Define multiple response return types for single response status with their own example.**_ +/// ```text +/// responses( +/// (status = 200, content( +/// (User = "application/vnd.user.v1+json", example = json!(User {id: "id".to_string()})), +/// (User2 = "application/vnd.user.v2+json", example = json!(User2 {id: 2})) +/// ) +/// ) +/// ) +/// ``` +/// +/// ### Using `ToResponse` for reusable responses +/// +/// _**`ReusableResponse` must be a type that implements [`ToResponse`][to_response_trait].**_ +/// ```text +/// responses( +/// (status = 200, response = ReusableResponse) +/// ) +/// ``` +/// +/// _**[`ToResponse`][to_response_trait] can also be inlined to the responses map.**_ +/// ```text +/// responses( +/// (status = 200, response = inline(ReusableResponse)) +/// ) +/// ``` +/// +/// ## Responses from `IntoResponses` +/// +/// _**Responses for a path can be specified with one or more types that implement +/// [`IntoResponses`][into_responses_trait].**_ +/// ```text +/// responses(MyResponse) +/// ``` +/// +/// # Response Header Attributes +/// +/// * `name` Name of the header. E.g. _`x-csrf-token`_ +/// +/// * `type` Additional type of the header value. Can be `Type` or `inline(Type)`. +/// The given _`Type`_ can be any Rust type that is JSON parseable. It can be Option, Vec or Map etc. +/// With _`inline(...)`_ the schema will be inlined instead of a referenced which is the default for +/// [`ToSchema`][to_schema] types. **Reminder!** It's up to the user to use valid type for the +/// response header. +/// +/// * `description = "..."` Can be used to define optional description for the response header as str. +/// +/// **Header supported formats:** +/// +/// ```text +/// ("x-csrf-token"), +/// ("x-csrf-token" = String, description = "New csrf token"), +/// ``` +/// +/// # Params Attributes +/// +/// The list of attributes inside the `params(...)` attribute can take two forms: [Tuples](#tuples) or [IntoParams +/// Type](#intoparams-type). +/// +/// ## Tuples +/// +/// In the tuples format, parameters are specified using the following attributes inside a list of +/// tuples separated by commas: +/// +/// * `name` _**Must be the first argument**_. Define the name for parameter. +/// +/// * `parameter_type` Define possible type for the parameter. Can be `Type` or `inline(Type)`. +/// The given _`Type`_ can be any Rust type that is JSON parseable. It can be Option, Vec or Map etc. +/// With _`inline(...)`_ the schema will be inlined instead of a referenced which is the default for +/// [`ToSchema`][to_schema] types. Parameter type is placed after `name` with +/// equals sign E.g. _`"id" = string`_ +/// +/// * `in` _**Must be placed after name or parameter_type**_. Define the place of the parameter. +/// This must be one of the variants of [`openapi::path::ParameterIn`][in_enum]. +/// E.g. _`Path, Query, Header, Cookie`_ +/// +/// * `deprecated` Define whether the parameter is deprecated or not. Can optionally be defined +/// with explicit `bool` value as _`deprecated = bool`_. +/// +/// * `description = "..."` Define possible description for the parameter as str. +/// +/// * `style = ...` Defines how parameters are serialized by [`ParameterStyle`][style]. Default values are based on _`in`_ attribute. +/// +/// * `explode` Defines whether new _`parameter=value`_ is created for each parameter within _`object`_ or _`array`_. +/// +/// * `allow_reserved` Defines whether reserved characters _`:/?#[]@!$&'()*+,;=`_ is allowed within value. +/// +/// * `example = ...` Can method reference or _`json!(...)`_. Given example +/// will override any example in underlying parameter type. +/// +/// ##### Parameter type attributes +/// +/// These attributes supported when _`parameter_type`_ is present. Either by manually providing one +/// or otherwise resolved e.g from path macro argument when _`actix_extras`_ crate feature is +/// enabled. +/// +/// * `format = ...` May either be variant of the [`KnownFormat`][known_format] enum, or otherwise +/// an open value as a string. By default the format is derived from the type of the property +/// according OpenApi spec. +/// +/// * `write_only` Defines property is only used in **write** operations *POST,PUT,PATCH* but not in *GET* +/// +/// * `read_only` Defines property is only used in **read** operations *GET* but not in *POST,PUT,PATCH* +/// +/// * `xml(...)` Can be used to define [`Xml`][xml] object properties for the parameter type. +/// See configuration options at xml attributes of [`ToSchema`][to_schema_xml] +/// +/// * `nullable` Defines property is nullable (note this is different to non-required). +/// +/// * `multiple_of = ...` Can be used to define multiplier for a value. Value is considered valid +/// division will result an `integer`. Value must be strictly above _`0`_. +/// +/// * `maximum = ...` Can be used to define inclusive upper bound to a `number` value. +/// +/// * `minimum = ...` Can be used to define inclusive lower bound to a `number` value. +/// +/// * `exclusive_maximum = ...` Can be used to define exclusive upper bound to a `number` value. +/// +/// * `exclusive_minimum = ...` Can be used to define exclusive lower bound to a `number` value. +/// +/// * `max_length = ...` Can be used to define maximum length for `string` types. +/// +/// * `min_length = ...` Can be used to define minimum length for `string` types. +/// +/// * `pattern = ...` Can be used to define valid regular expression in _ECMA-262_ dialect the field value must match. +/// +/// * `max_items = ...` Can be used to define maximum items allowed for `array` fields. Value must +/// be non-negative integer. +/// +/// * `min_items = ...` Can be used to define minimum items allowed for `array` fields. Value must +/// be non-negative integer. +/// +/// ##### Parameter Formats +/// ```test +/// ("name" = ParameterType, ParameterIn, ...) +/// ("name", ParameterIn, ...) +/// ``` +/// +/// **For example:** +/// +/// ```text +/// params( +/// ("limit" = i32, Query), +/// ("x-custom-header" = String, Header, description = "Custom header"), +/// ("id" = String, Path, deprecated, description = "Pet database id"), +/// ("name", Path, deprecated, description = "Pet name"), +/// ( +/// "value" = inline(Option<[String]>), +/// Query, +/// description = "Value description", +/// style = Form, +/// allow_reserved, +/// deprecated, +/// explode, +/// example = json!(["Value"])), +/// max_length = 10, +/// min_items = 1 +/// ) +/// ) +/// ``` +/// +/// ## IntoParams Type +/// +/// In the IntoParams parameters format, the parameters are specified using an identifier for a type +/// that implements [`IntoParams`][into_params]. See [`IntoParams`][into_params] for an +/// example. +/// +/// ```text +/// params(MyParameters) +/// ``` +/// +/// **Note!** that `MyParameters` can also be used in combination with the [tuples +/// representation](#tuples) or other structs. +/// ```text +/// params( +/// MyParameters1, +/// MyParameters2, +/// ("id" = String, Path, deprecated, description = "Pet database id"), +/// ) +/// ``` +/// +/// # Security Requirement Attributes +/// +/// * `name` Define the name for security requirement. This must match to name of existing +/// [`SecurityScheme`][security_scheme]. +/// * `scopes = [...]` Define the list of scopes needed. These must be scopes defined already in +/// existing [`SecurityScheme`][security_scheme]. +/// +/// **Security Requirement supported formats:** +/// +/// ```text +/// (), +/// ("name" = []), +/// ("name" = ["scope1", "scope2"]), +/// ("name" = ["scope1", "scope2"], "name2" = []), +/// ``` +/// +/// Leaving empty _`()`_ creates an empty [`SecurityRequirement`][security] this is useful when +/// security requirement is optional for operation. +/// +/// You can define multiple security requirements within same parenthesis separated by comma. This +/// allows you to define keys that must be simultaneously provided for the endpoint / API. +/// +/// _**Following could be explained as: Security is optional and if provided it must either contain +/// `api_key` or `key AND key2`.**_ +/// ```text +/// (), +/// ("api_key" = []), +/// ("key" = [], "key2" = []), +/// ``` +/// +/// # actix_extras feature support for actix-web +/// +/// **actix_extras** feature gives **fastapi** ability to parse path operation information from **actix-web** types and macros. +/// +/// 1. Ability to parse `path` from **actix-web** path attribute macros e.g. _`#[get(...)]`_ or +/// `#[route(...)]`. +/// 2. Ability to parse [`std::primitive`] or [`String`] or [`tuple`] typed `path` parameters from **actix-web** _`web::Path<...>`_. +/// 3. Ability to parse `path` and `query` parameters form **actix-web** _`web::Path<...>`_, _`web::Query<...>`_ types +/// with [`IntoParams`][into_params] trait. +/// +/// See the **actix_extras** in action in examples [todo-actix](https://github.com/nxpkg/fastapi/tree/master/examples/todo-actix). +/// +/// With **actix_extras** feature enabled the you can leave out definitions for **path**, **operation** +/// and **parameter types**. +/// ```rust +/// use actix_web::{get, web, HttpResponse, Responder}; +/// use serde_json::json; +/// +/// /// Get Pet by id +/// #[fastapi::path( +/// responses( +/// (status = 200, description = "Pet found from database") +/// ), +/// params( +/// ("id", description = "Pet id"), +/// ) +/// )] +/// #[get("/pet/{id}")] +/// async fn get_pet_by_id(id: web::Path<i32>) -> impl Responder { +/// HttpResponse::Ok().json(json!({ "pet": format!("{:?}", &id.into_inner()) })) +/// } +/// ``` +/// +/// With **actix_extras** you may also not to list any _**params**_ if you do not want to specify any description for them. Params are +/// resolved from path and the argument types of handler +/// ```rust +/// use actix_web::{get, web, HttpResponse, Responder}; +/// use serde_json::json; +/// +/// /// Get Pet by id +/// #[fastapi::path( +/// responses( +/// (status = 200, description = "Pet found from database") +/// ) +/// )] +/// #[get("/pet/{id}")] +/// async fn get_pet_by_id(id: web::Path<i32>) -> impl Responder { +/// HttpResponse::Ok().json(json!({ "pet": format!("{:?}", &id.into_inner()) })) +/// } +/// ``` +/// +/// # rocket_extras feature support for rocket +/// +/// **rocket_extras** feature enhances path operation parameter support. It gives **fastapi** ability to parse `path`, `path parameters` +/// and `query parameters` based on arguments given to **rocket** proc macros such as _**`#[get(...)]`**_. +/// +/// 1. It is able to parse parameter types for [primitive types][primitive], [`String`], [`Vec`], [`Option`] or [`std::path::PathBuf`] +/// type. +/// 2. It is able to determine `parameter_in` for [`IntoParams`][into_params] trait used for `FromForm` type of query parameters. +/// +/// See the **rocket_extras** in action in examples [rocket-todo](https://github.com/nxpkg/fastapi/tree/master/examples/rocket-todo). +/// +/// +/// # axum_extras feature support for axum +/// +/// **axum_extras** feature enhances parameter support for path operation in following ways. +/// +/// 1. It allows users to use tuple style path parameters e.g. _`Path((id, name)): Path<(i32, String)>`_ and resolves +/// parameter names and types from it. +/// 2. It enhances [`IntoParams` derive][into_params_derive] functionality by automatically resolving _`parameter_in`_ from +/// _`Path<...>`_ or _`Query<...>`_ handler function arguments. +/// +/// _**Resole path argument types from tuple style handler arguments.**_ +/// ```rust +/// # use axum::extract::Path; +/// /// Get todo by id and name. +/// #[fastapi::path( +/// get, +/// path = "/todo/{id}", +/// params( +/// ("id", description = "Todo id"), +/// ("name", description = "Todo name") +/// ), +/// responses( +/// (status = 200, description = "Get todo success", body = String) +/// ) +/// )] +/// async fn get_todo( +/// Path((id, name)): Path<(i32, String)> +/// ) -> String { +/// String::new() +/// } +/// ``` +/// +/// _**Use `IntoParams` to resolve query parameters.**_ +/// ```rust +/// # use serde::Deserialize; +/// # use fastapi::IntoParams; +/// # use axum::{extract::Query, Json}; +/// #[derive(Deserialize, IntoParams)] +/// struct TodoSearchQuery { +/// /// Search by value. Search is incase sensitive. +/// value: String, +/// /// Search by `done` status. +/// done: bool, +/// } +/// +/// /// Search Todos by query params. +/// #[fastapi::path( +/// get, +/// path = "/todo/search", +/// params( +/// TodoSearchQuery +/// ), +/// responses( +/// (status = 200, description = "List matching todos by query", body = [String]) +/// ) +/// )] +/// async fn search_todos( +/// query: Query<TodoSearchQuery>, +/// ) -> Json<Vec<String>> { +/// Json(vec![]) +/// } +/// ``` +/// +/// # Defining file uploads +/// +/// File uploads can be defined in accordance to Open API specification [file uploads][file_uploads]. +/// +/// +/// _**Example sending `jpg` and `png` images as `application/octet-stream`.**_ +/// ```rust +/// #[fastapi::path( +/// post, +/// request_body( +/// content( +/// ("image/png"), +/// ("image/jpg"), +/// ), +/// ), +/// path = "/test_images" +/// )] +/// async fn test_images(_body: Vec<u8>) {} +/// ``` +/// +/// _**Example of sending `multipart` form.**_ +/// ```rust +/// #[derive(fastapi::ToSchema)] +/// struct MyForm { +/// order_id: i32, +/// #[schema(content_media_type = "application/octet-stream")] +/// file_bytes: Vec<u8>, +/// } +/// +/// #[fastapi::path( +/// post, +/// request_body(content = inline(MyForm), content_type = "multipart/form-data"), +/// path = "/test_multipart" +/// )] +/// async fn test_multipart(_body: MyForm) {} +/// ``` +/// +/// _**Example of sending arbitrary binary content as `application/octet-stream`.**_ +/// ```rust +/// #[fastapi::path( +/// post, +/// request_body = Vec<u8>, +/// path = "/test-octet-stream", +/// responses( +/// (status = 200, description = "success response") +/// ), +/// )] +/// async fn test_octet_stream(_body: Vec<u8>) {} +/// ``` +/// +/// _**Example of sending `png` image as `base64` encoded.**_ +/// ```rust +/// #[derive(fastapi::ToSchema)] +/// #[schema(content_encoding = "base64")] +/// struct MyPng(String); +/// +/// #[fastapi::path( +/// post, +/// request_body(content = inline(MyPng), content_type = "image/png"), +/// path = "/test_png", +/// responses( +/// (status = 200, description = "success response") +/// ), +/// )] +/// async fn test_png(_body: MyPng) {} +/// ``` +/// +/// # Examples +/// +/// _**More complete example.**_ +/// ```rust +/// # #[derive(fastapi::ToSchema)] +/// # struct Pet { +/// # id: u64, +/// # name: String, +/// # } +/// # +/// #[fastapi::path( +/// post, +/// operation_id = "custom_post_pet", +/// path = "/pet", +/// tag = "pet_handlers", +/// request_body(content = Pet, description = "Pet to store the database", content_type = "application/json"), +/// responses( +/// (status = 200, description = "Pet stored successfully", body = Pet, content_type = "application/json", +/// headers( +/// ("x-cache-len" = String, description = "Cache length") +/// ), +/// example = json!({"id": 1, "name": "bob the cat"}) +/// ), +/// ), +/// params( +/// ("x-csrf-token" = String, Header, deprecated, description = "Current csrf token of user"), +/// ), +/// security( +/// (), +/// ("my_auth" = ["read:items", "edit:items"]), +/// ("token_jwt" = []) +/// ) +/// )] +/// fn post_pet(pet: Pet) -> Pet { +/// Pet { +/// id: 4, +/// name: "bob the cat".to_string(), +/// } +/// } +/// ``` +/// +/// _**More minimal example with the defaults.**_ +/// ```rust +/// # #[derive(fastapi::ToSchema)] +/// # struct Pet { +/// # id: u64, +/// # name: String, +/// # } +/// # +/// #[fastapi::path( +/// post, +/// path = "/pet", +/// request_body = Pet, +/// responses( +/// (status = 200, description = "Pet stored successfully", body = Pet, +/// headers( +/// ("x-cache-len", description = "Cache length") +/// ) +/// ), +/// ), +/// params( +/// ("x-csrf-token", Header, description = "Current csrf token of user"), +/// ) +/// )] +/// fn post_pet(pet: Pet) -> Pet { +/// Pet { +/// id: 4, +/// name: "bob the cat".to_string(), +/// } +/// } +/// ``` +/// +/// _**Use of Rust's own `#[deprecated]` attribute will reflect to the generated OpenAPI spec and mark this operation as deprecated.**_ +/// ```rust +/// # use actix_web::{get, web, HttpResponse, Responder}; +/// # use serde_json::json; +/// #[fastapi::path( +/// responses( +/// (status = 200, description = "Pet found from database") +/// ), +/// params( +/// ("id", description = "Pet id"), +/// ) +/// )] +/// #[get("/pet/{id}")] +/// #[deprecated] +/// async fn get_pet_by_id(id: web::Path<i32>) -> impl Responder { +/// HttpResponse::Ok().json(json!({ "pet": format!("{:?}", &id.into_inner()) })) +/// } +/// ``` +/// +/// _**Define context path for endpoint. The resolved **path** shown in OpenAPI doc will be `/api/pet/{id}`.**_ +/// ```rust +/// # use actix_web::{get, web, HttpResponse, Responder}; +/// # use serde_json::json; +/// #[fastapi::path( +/// context_path = "/api", +/// responses( +/// (status = 200, description = "Pet found from database") +/// ) +/// )] +/// #[get("/pet/{id}")] +/// async fn get_pet_by_id(id: web::Path<i32>) -> impl Responder { +/// HttpResponse::Ok().json(json!({ "pet": format!("{:?}", &id.into_inner()) })) +/// } +/// ``` +/// +/// _**Example with multiple return types**_ +/// ```rust +/// # trait User {} +/// # #[derive(fastapi::ToSchema)] +/// # struct User1 { +/// # id: String +/// # } +/// # impl User for User1 {} +/// # #[derive(fastapi::ToSchema)] +/// # struct User2 { +/// # id: String +/// # } +/// # impl User for User2 {} +/// #[fastapi::path( +/// get, +/// path = "/user", +/// responses( +/// (status = 200, content( +/// (User1 = "application/vnd.user.v1+json", example = json!({"id": "id".to_string()})), +/// (User2 = "application/vnd.user.v2+json", example = json!({"id": 2})) +/// ) +/// ) +/// ) +/// )] +/// fn get_user() -> Box<dyn User> { +/// Box::new(User1 {id: "id".to_string()}) +/// } +/// ```` +/// +/// _**Example with multiple examples on single response.**_ +/// ```rust +/// # #[derive(serde::Serialize, serde::Deserialize, fastapi::ToSchema)] +/// # struct User { +/// # name: String +/// # } +/// #[fastapi::path( +/// get, +/// path = "/user", +/// responses( +/// (status = 200, body = User, +/// examples( +/// ("Demo" = (summary = "This is summary", description = "Long description", +/// value = json!(User{name: "Demo".to_string()}))), +/// ("John" = (summary = "Another user", value = json!({"name": "John"}))) +/// ) +/// ) +/// ) +/// )] +/// fn get_user() -> User { +/// User {name: "John".to_string()} +/// } +/// ``` +/// +/// _**Example of using links in response.**_ +/// ```rust +/// # use serde_json::json; +/// #[fastapi::path( +/// get, +/// path = "/test-links", +/// responses( +/// (status = 200, description = "success response", +/// links( +/// ("getFoo" = ( +/// operation_id = "test_links", +/// parameters(("key" = "value"), ("json_value" = json!(1))), +/// request_body = "this is body", +/// server(url = "http://localhost") +/// )), +/// ("getBar" = ( +/// operation_ref = "this is ref" +/// )) +/// ) +/// ) +/// ), +/// )] +/// async fn test_links() -> &'static str { +/// "" +/// } +/// ``` +/// +/// [in_enum]: openapi/path/enum.ParameterIn.html +/// [path]: trait.Path.html +/// [to_schema]: trait.ToSchema.html +/// [openapi]: derive.OpenApi.html +/// [security]: openapi/security/struct.SecurityRequirement.html +/// [security_scheme]: openapi/security/enum.SecurityScheme.html +/// [primitive]: https://doc.rust-lang.org/std/primitive/index.html +/// [into_params]: trait.IntoParams.html +/// [style]: openapi/path/enum.ParameterStyle.html +/// [into_responses_trait]: trait.IntoResponses.html +/// [into_params_derive]: derive.IntoParams.html +/// [to_response_trait]: trait.ToResponse.html +/// [known_format]: openapi/schema/enum.KnownFormat.html +/// [xml]: openapi/xml/struct.Xml.html +/// [to_schema_xml]: macro@ToSchema#xml-attribute-configuration-options +/// [relative_references]: https://spec.openapis.org/oas/latest.html#relative-references-in-uris +/// [operation]: openapi/path/struct.Operation.html +/// [expression]: https://spec.openapis.org/oas/latest.html#runtime-expressions +/// [const]: https://doc.rust-lang.org/std/keyword.const.html +/// [include_str]: https://doc.rust-lang.org/std/macro.include_str.html +/// [server_derive_syntax]: derive.OpenApi.html#servers-attribute-syntax +/// [server]: openapi/server/struct.Server.html +/// [file_uploads]: <https://spec.openapis.org/oas/v3.1.0.html#considerations-for-file-uploads> +pub fn path(attr: TokenStream, item: TokenStream) -> TokenStream { + let path_attribute = syn::parse_macro_input!(attr as PathAttr); + + #[cfg(any( + feature = "actix_extras", + feature = "rocket_extras", + feature = "axum_extras", + feature = "auto_into_responses" + ))] + let mut path_attribute = path_attribute; + + let ast_fn = match syn::parse::<ItemFn>(item) { + Ok(ast_fn) => ast_fn, + Err(error) => return error.into_compile_error().into_token_stream().into(), + }; + + #[cfg(feature = "auto_into_responses")] + { + if let Some(responses) = ext::auto_types::parse_fn_operation_responses(&ast_fn) { + path_attribute.responses_from_into_responses(responses); + }; + } + + let mut resolved_methods = match PathOperations::resolve_operation(&ast_fn) { + Ok(operation) => operation, + Err(diagnostics) => return diagnostics.into_token_stream().into(), + }; + let resolved_path = PathOperations::resolve_path( + &resolved_methods + .as_mut() + .map(|operation| mem::take(&mut operation.path).to_string()) + .or_else(|| path_attribute.path.as_ref().map(|path| path.to_string())), // cannot use mem take because we need this later + ); + + #[cfg(any( + feature = "actix_extras", + feature = "rocket_extras", + feature = "axum_extras" + ))] + let mut resolved_path = resolved_path; + + #[cfg(any( + feature = "actix_extras", + feature = "rocket_extras", + feature = "axum_extras" + ))] + { + use ext::ArgumentResolver; + use path::parameter::Parameter; + let path_args = resolved_path.as_mut().map(|path| mem::take(&mut path.args)); + let body = resolved_methods + .as_mut() + .map(|path| mem::take(&mut path.body)) + .unwrap_or_default(); + + let (arguments, into_params_types, body) = + match PathOperations::resolve_arguments(&ast_fn.sig.inputs, path_args, body) { + Ok(args) => args, + Err(diagnostics) => return diagnostics.into_token_stream().into(), + }; + + let parameters = arguments + .into_iter() + .flatten() + .map(Parameter::from) + .chain(into_params_types.into_iter().flatten().map(Parameter::from)); + path_attribute.update_parameters_ext(parameters); + + path_attribute.update_request_body(body); + } + + let path = Path::new(path_attribute, &ast_fn.sig.ident) + .ext_methods(resolved_methods.map(|operation| operation.methods)) + .path(resolved_path.map(|path| path.path)) + .doc_comments(CommentAttributes::from_attributes(&ast_fn.attrs).0) + .deprecated(ast_fn.attrs.has_deprecated()); + + let handler = path::handler::Handler { + path, + handler_fn: &ast_fn, + }; + handler.to_token_stream().into() +} + +#[proc_macro_derive(OpenApi, attributes(openapi))] +/// Generate OpenApi base object with defaults from +/// project settings. +/// +/// This is `#[derive]` implementation for [`OpenApi`][openapi] trait. The macro accepts one `openapi` argument. +/// +/// # OpenApi `#[openapi(...)]` attributes +/// +/// * `paths(...)` List of method references having attribute [`#[fastapi::path]`][path] macro. +/// * `components(schemas(...), responses(...))` Takes available _`component`_ configurations. Currently only +/// _`schema`_ and _`response`_ components are supported. +/// * `schemas(...)` List of [`ToSchema`][to_schema]s in OpenAPI schema. +/// * `responses(...)` List of types that implement [`ToResponse`][to_response_trait]. +/// * `modifiers(...)` List of items implementing [`Modify`][modify] trait for runtime OpenApi modification. +/// See the [trait documentation][modify] for more details. +/// * `security(...)` List of [`SecurityRequirement`][security]s global to all operations. +/// See more details in [`#[fastapi::path(...)]`][path] [attribute macro security options][path_security]. +/// * `tags(...)` List of [`Tag`][tags]s which must match the tag _**path operation**_. Tags can be used to +/// define extra information for the API to produce richer documentation. See [tags attribute syntax][tags_syntax]. +/// * `external_docs(...)` Can be used to reference external resource to the OpenAPI doc for extended documentation. +/// External docs can be in [`OpenApi`][openapi_struct] or in [`Tag`][tags] level. +/// * `servers(...)` Define [`servers`][servers] as derive argument to the _`OpenApi`_. Servers +/// are completely optional and thus can be omitted from the declaration. See [servers attribute +/// syntax][servers_syntax] +/// * `info(...)` Declare [`Info`][info] attribute values used to override the default values +/// generated from Cargo environment variables. **Note!** Defined attributes will override the +/// whole attribute from generated values of Cargo environment variables. E.g. defining +/// `contact(name = ...)` will ultimately override whole contact of info and not just partially +/// the name. See [info attribute syntax][info_syntax] +/// * `nest(...)` Allows nesting [`OpenApi`][openapi_struct]s to this _`OpenApi`_ instance. Nest +/// takes comma separated list of tuples of nested `OpenApi`s. _`OpenApi`_ instance must +/// implement [`OpenApi`][openapi] trait. Nesting allows defining one `OpenApi` per defined path. +/// If more instances is defined only latest one will be rentained. +/// See the _[nest(...) attribute syntax below]( #nest-attribute-syntax )_ +/// +/// +/// OpenApi derive macro will also derive [`Info`][info] for OpenApi specification using Cargo +/// environment variables. +/// +/// * env `CARGO_PKG_NAME` map to info `title` +/// * env `CARGO_PKG_VERSION` map to info `version` +/// * env `CARGO_PKG_DESCRIPTION` map info `description` +/// * env `CARGO_PKG_AUTHORS` map to contact `name` and `email` **only first author will be used** +/// * env `CARGO_PKG_LICENSE` map to info `license` +/// +/// # `info(...)` attribute syntax +/// +/// * `title = ...` Define title of the API. It can be [`str`] or an +/// expression such as [`include_str!`][include_str] or static [`const`][const] reference. +/// * `terms_of_service = ...` Define URL to the Terms of Service for the API. It can be [`str`] or an +/// expression such as [`include_str!`][include_str] or static [`const`][const] reference. Value +/// must be valid URL. +/// * `description = ...` Define description of the API. Markdown can be used for rich text +/// representation. It can be [`str`] or an expression such as [`include_str!`][include_str] or static +/// [`const`][const] reference. +/// * `version = ...` Override default version from _`Cargo.toml`_. Value can be [`str`] or an +/// expression such as [`include_str!`][include_str] or static [`const`][const] reference. +/// * `contact(...)` Used to override the whole contact generated from environment variables. +/// * `name = ...` Define identifying name of contact person / organization. It Can be a literal string. +/// * `email = ...` Define email address of the contact person / organization. It can be a literal string. +/// * `url = ...` Define URL pointing to the contact information. It must be in URL formatted string. +/// * `license(...)` Used to override the whole license generated from environment variables. +/// * `name = ...` License name of the API. It can be a literal string. +/// * `url = ...` Define optional URL of the license. It must be URL formatted string. +/// +/// # `tags(...)` attribute syntax +/// +/// * `name = ...` Must be provided, can be [`str`] or an expression such as [`include_str!`][include_str] +/// or static [`const`][const] reference. +/// * `description = ...` Optional description for the tag. Can be either or static [`str`] +/// or an expression e.g. _`include_str!(...)`_ macro call or reference to static [`const`][const]. +/// * `external_docs(...)` Optional links to external documents. +/// * `url = ...` Mandatory URL for external documentation. +/// * `description = ...` Optional description for the _`url`_ link. +/// +/// # `servers(...)` attribute syntax +/// +/// * `url = ...` Define the url for server. It can be literal string. +/// * `description = ...` Define description for the server. It can be literal string. +/// * `variables(...)` Can be used to define variables for the url. +/// * `name = ...` Is the first argument within parentheses. It must be literal string. +/// * `default = ...` Defines a default value for the variable if nothing else will be +/// provided. If _`enum_values`_ is defined the _`default`_ must be found within the enum +/// options. It can be a literal string. +/// * `description = ...` Define the description for the variable. It can be a literal string. +/// * `enum_values(...)` Define list of possible values for the variable. Values must be +/// literal strings. +/// +/// _**Example server variable definition.**_ +/// ```text +/// ("username" = (default = "demo", description = "Default username for API")), +/// ("port" = (enum_values("8080", "5000", "4545"))) +/// ``` +/// +/// # `nest(...)` attribute syntax +/// +/// * `path = ...` Define mandatory path for nesting the [`OpenApi`][openapi_struct]. +/// * `api = ...` Define mandatory path to struct that implements [`OpenApi`][openapi] trait. +/// The fully qualified path (_`path::to`_) will become the default _`tag`_ for the nested +/// `OpenApi` endpoints if provided. +/// * `tags = [...]` Define optional tags what are appended to the existing list of tags. +/// +/// _**Example of nest definition**_ +/// ```text +/// (path = "path/to/nest", api = path::to::NestableApi), +/// (path = "path/to/nest", api = path::to::NestableApi, tags = ["nestableapi", ...]) +/// ``` +/// +/// # Examples +/// +/// _**Define OpenApi schema with some paths and components.**_ +/// ```rust +/// # use fastapi::{OpenApi, ToSchema}; +/// # +/// #[derive(ToSchema)] +/// struct Pet { +/// name: String, +/// age: i32, +/// } +/// +/// #[derive(ToSchema)] +/// enum Status { +/// Active, InActive, Locked, +/// } +/// +/// #[fastapi::path(get, path = "/pet")] +/// fn get_pet() -> Pet { +/// Pet { +/// name: "bob".to_string(), +/// age: 8, +/// } +/// } +/// +/// #[fastapi::path(get, path = "/status")] +/// fn get_status() -> Status { +/// Status::Active +/// } +/// +/// #[derive(OpenApi)] +/// #[openapi( +/// paths(get_pet, get_status), +/// components(schemas(Pet, Status)), +/// security( +/// (), +/// ("my_auth" = ["read:items", "edit:items"]), +/// ("token_jwt" = []) +/// ), +/// tags( +/// (name = "pets::api", description = "All about pets", +/// external_docs(url = "http://more.about.pets.api", description = "Find out more")) +/// ), +/// external_docs(url = "http://more.about.our.apis", description = "More about our APIs") +/// )] +/// struct ApiDoc; +/// ``` +/// +/// _**Define servers to OpenApi.**_ +/// ```rust +/// # use fastapi::OpenApi; +/// #[derive(OpenApi)] +/// #[openapi( +/// servers( +/// (url = "http://localhost:8989", description = "Local server"), +/// (url = "http://api.{username}:{port}", description = "Remote API", +/// variables( +/// ("username" = (default = "demo", description = "Default username for API")), +/// ("port" = (default = "8080", enum_values("8080", "5000", "3030"), description = "Supported ports for API")) +/// ) +/// ) +/// ) +/// )] +/// struct ApiDoc; +/// ``` +/// +/// _**Define info attribute values used to override auto generated ones from Cargo environment +/// variables.**_ +/// ```compile_fail +/// # use fastapi::OpenApi; +/// #[derive(OpenApi)] +/// #[openapi(info( +/// title = "title override", +/// description = include_str!("./path/to/content"), // fail compile cause no such file +/// contact(name = "Test") +/// ))] +/// struct ApiDoc; +/// ``` +/// +/// _**Create OpenAPI with reusable response.**_ +/// ```rust +/// #[derive(fastapi::ToSchema)] +/// struct Person { +/// name: String, +/// } +/// +/// /// Person list response +/// #[derive(fastapi::ToResponse)] +/// struct PersonList(Vec<Person>); +/// +/// #[fastapi::path( +/// get, +/// path = "/person-list", +/// responses( +/// (status = 200, response = PersonList) +/// ) +/// )] +/// fn get_persons() -> Vec<Person> { +/// vec![] +/// } +/// +/// #[derive(fastapi::OpenApi)] +/// #[openapi( +/// components( +/// schemas(Person), +/// responses(PersonList) +/// ) +/// )] +/// struct ApiDoc; +/// ``` +/// +/// _**Nest _`UserApi`_ to the current api doc instance.**_ +/// ```rust +/// # use fastapi::OpenApi; +/// # +/// #[fastapi::path(get, path = "/api/v1/status")] +/// fn test_path_status() {} +/// +/// #[fastapi::path(get, path = "/test")] +/// fn user_test_path() {} +/// +/// #[derive(OpenApi)] +/// #[openapi(paths(user_test_path))] +/// struct UserApi; +/// +/// #[derive(OpenApi)] +/// #[openapi( +/// paths( +/// test_path_status +/// ), +/// nest( +/// (path = "/api/v1/user", api = UserApi), +/// ) +/// )] +/// struct ApiDoc; +/// ``` +/// +/// [openapi]: trait.OpenApi.html +/// [openapi_struct]: openapi/struct.OpenApi.html +/// [to_schema]: derive.ToSchema.html +/// [path]: attr.path.html +/// [modify]: trait.Modify.html +/// [info]: openapi/info/struct.Info.html +/// [security]: openapi/security/struct.SecurityRequirement.html +/// [path_security]: attr.path.html#security-requirement-attributes +/// [tags]: openapi/tag/struct.Tag.html +/// [to_response_trait]: trait.ToResponse.html +/// [servers]: openapi/server/index.html +/// [const]: https://doc.rust-lang.org/std/keyword.const.html +/// [tags_syntax]: #tags-attribute-syntax +/// [info_syntax]: #info-attribute-syntax +/// [servers_syntax]: #servers-attribute-syntax +/// [include_str]: https://doc.rust-lang.org/std/macro.include_str.html +pub fn openapi(input: TokenStream) -> TokenStream { + let DeriveInput { attrs, ident, .. } = syn::parse_macro_input!(input); + + parse_openapi_attrs(&attrs) + .map(|openapi_attr| OpenApi(openapi_attr, ident).to_token_stream()) + .map_or_else(syn::Error::into_compile_error, ToTokens::into_token_stream) + .into() +} + +#[proc_macro_derive(IntoParams, attributes(param, into_params))] +/// Generate [path parameters][path_params] from struct's +/// fields. +/// +/// This is `#[derive]` implementation for [`IntoParams`][into_params] trait. +/// +/// Typically path parameters need to be defined within [`#[fastapi::path(...params(...))]`][path_params] section +/// for the endpoint. But this trait eliminates the need for that when [`struct`][struct]s are used to define parameters. +/// Still [`std::primitive`] and [`String`] path parameters or [`tuple`] style path parameters need to be defined +/// within `params(...)` section if description or other than default configuration need to be given. +/// +/// You can use the Rust's own `#[deprecated]` attribute on field to mark it as +/// deprecated and it will reflect to the generated OpenAPI spec. +/// +/// `#[deprecated]` attribute supports adding additional details such as a reason and or since version +/// but this is is not supported in OpenAPI. OpenAPI has only a boolean flag to determine deprecation. +/// While it is totally okay to declare deprecated with reason +/// `#[deprecated = "There is better way to do this"]` the reason would not render in OpenAPI spec. +/// +/// Doc comment on struct fields will be used as description for the generated parameters. +/// ```rust +/// #[derive(fastapi::IntoParams)] +/// struct Query { +/// /// Query todo items by name. +/// name: String +/// } +/// ``` +/// +/// # IntoParams Container Attributes for `#[into_params(...)]` +/// +/// The following attributes are available for use in on the container attribute `#[into_params(...)]` for the struct +/// deriving `IntoParams`: +/// +/// * `names(...)` Define comma separated list of names for unnamed fields of struct used as a path parameter. +/// __Only__ supported on __unnamed structs__. +/// * `style = ...` Defines how all parameters are serialized by [`ParameterStyle`][style]. Default +/// values are based on _`parameter_in`_ attribute. +/// * `parameter_in = ...` = Defines where the parameters of this field are used with a value from +/// [`openapi::path::ParameterIn`][in_enum]. There is no default value, if this attribute is not +/// supplied, then the value is determined by the `parameter_in_provider` in +/// [`IntoParams::into_params()`](trait.IntoParams.html#tymethod.into_params). +/// * `rename_all = ...` Can be provided to alternatively to the serde's `rename_all` attribute. Effectively provides same functionality. +/// +/// Use `names` to define name for single unnamed argument. +/// ```rust +/// # use fastapi::IntoParams; +/// # +/// #[derive(IntoParams)] +/// #[into_params(names("id"))] +/// struct Id(u64); +/// ``` +/// +/// Use `names` to define names for multiple unnamed arguments. +/// ```rust +/// # use fastapi::IntoParams; +/// # +/// #[derive(IntoParams)] +/// #[into_params(names("id", "name"))] +/// struct IdAndName(u64, String); +/// ``` +/// +/// # IntoParams Field Attributes for `#[param(...)]` +/// +/// The following attributes are available for use in the `#[param(...)]` on struct fields: +/// +/// * `style = ...` Defines how the parameter is serialized by [`ParameterStyle`][style]. Default values are based on _`parameter_in`_ attribute. +/// +/// * `explode` Defines whether new _`parameter=value`_ pair is created for each parameter within _`object`_ or _`array`_. +/// +/// * `allow_reserved` Defines whether reserved characters _`:/?#[]@!$&'()*+,;=`_ is allowed within value. +/// +/// * `example = ...` Can be method reference or _`json!(...)`_. Given example +/// will override any example in underlying parameter type. +/// +/// * `value_type = ...` Can be used to override default type derived from type of the field used in OpenAPI spec. +/// This is useful in cases where the default type does not correspond to the actual type e.g. when +/// any third-party types are used which are not [`ToSchema`][to_schema]s nor [`primitive` types][primitive]. +/// The value can be any Rust type what normally could be used to serialize to JSON, or either virtual type _`Object`_ +/// or _`Value`_. +/// _`Object`_ will be rendered as generic OpenAPI object _(`type: object`)_. +/// _`Value`_ will be rendered as any OpenAPI value (i.e. no `type` restriction). +/// +/// * `inline` If set, the schema for this field's type needs to be a [`ToSchema`][to_schema], and +/// the schema definition will be inlined. +/// +/// * `default = ...` Can be method reference or _`json!(...)`_. +/// +/// * `format = ...` May either be variant of the [`KnownFormat`][known_format] enum, or otherwise +/// an open value as a string. By default the format is derived from the type of the property +/// according OpenApi spec. +/// +/// * `write_only` Defines property is only used in **write** operations *POST,PUT,PATCH* but not in *GET*. +/// +/// * `read_only` Defines property is only used in **read** operations *GET* but not in *POST,PUT,PATCH*. +/// +/// * `xml(...)` Can be used to define [`Xml`][xml] object properties applicable to named fields. +/// See configuration options at xml attributes of [`ToSchema`][to_schema_xml] +/// +/// * `nullable` Defines property is nullable (note this is different to non-required). +/// +/// * `required = ...` Can be used to enforce required status for the parameter. [See +/// rules][derive@IntoParams#field-nullability-and-required-rules] +/// +/// * `rename = ...` Can be provided to alternatively to the serde's `rename` attribute. Effectively provides same functionality. +/// +/// * `multiple_of = ...` Can be used to define multiplier for a value. Value is considered valid +/// division will result an `integer`. Value must be strictly above _`0`_. +/// +/// * `maximum = ...` Can be used to define inclusive upper bound to a `number` value. +/// +/// * `minimum = ...` Can be used to define inclusive lower bound to a `number` value. +/// +/// * `exclusive_maximum = ...` Can be used to define exclusive upper bound to a `number` value. +/// +/// * `exclusive_minimum = ...` Can be used to define exclusive lower bound to a `number` value. +/// +/// * `max_length = ...` Can be used to define maximum length for `string` types. +/// +/// * `min_length = ...` Can be used to define minimum length for `string` types. +/// +/// * `pattern = ...` Can be used to define valid regular expression in _ECMA-262_ dialect the field value must match. +/// +/// * `max_items = ...` Can be used to define maximum items allowed for `array` fields. Value must +/// be non-negative integer. +/// +/// * `min_items = ...` Can be used to define minimum items allowed for `array` fields. Value must +/// be non-negative integer. +/// +/// * `schema_with = ...` Use _`schema`_ created by provided function reference instead of the +/// default derived _`schema`_. The function must match to `fn() -> Into<RefOr<Schema>>`. It does +/// not accept arguments and must return anything that can be converted into `RefOr<Schema>`. +/// +/// * `additional_properties = ...` Can be used to define free form types for maps such as +/// [`HashMap`](std::collections::HashMap) and [`BTreeMap`](std::collections::BTreeMap). +/// Free form type enables use of arbitrary types within map values. +/// Supports formats _`additional_properties`_ and _`additional_properties = true`_. +/// +/// * `ignore` or `ignore = ...` Can be used to skip the field from being serialized to OpenAPI schema. It accepts either a literal `bool` value +/// or a path to a function that returns `bool` (`Fn() -> bool`). +/// +/// #### Field nullability and required rules +/// +/// Same rules for nullability and required status apply for _`IntoParams`_ field attributes as for +/// _`ToSchema`_ field attributes. [See the rules][`derive@ToSchema#field-nullability-and-required-rules`]. +/// +/// # Partial `#[serde(...)]` attributes support +/// +/// IntoParams derive has partial support for [serde attributes]. These supported attributes will reflect to the +/// generated OpenAPI doc. The following attributes are currently supported: +/// +/// * `rename_all = "..."` Supported at the container level. +/// * `rename = "..."` Supported **only** at the field level. +/// * `default` Supported at the container level and field level according to [serde attributes]. +/// * `skip_serializing_if = "..."` Supported **only** at the field level. +/// * `with = ...` Supported **only** at field level. +/// * `skip_serializing = "..."` Supported **only** at the field or variant level. +/// * `skip_deserializing = "..."` Supported **only** at the field or variant level. +/// * `skip = "..."` Supported **only** at the field level. +/// +/// Other _`serde`_ attributes will impact the serialization but will not be reflected on the generated OpenAPI doc. +/// +/// # Examples +/// +/// _**Demonstrate [`IntoParams`][into_params] usage with resolving `Path` and `Query` parameters +/// with _`actix-web`_**_. +/// ```rust +/// use actix_web::{get, HttpResponse, Responder}; +/// use actix_web::web::{Path, Query}; +/// use serde::Deserialize; +/// use serde_json::json; +/// use fastapi::IntoParams; +/// +/// #[derive(Deserialize, IntoParams)] +/// struct PetPathArgs { +/// /// Id of pet +/// id: i64, +/// /// Name of pet +/// name: String, +/// } +/// +/// #[derive(Deserialize, IntoParams)] +/// struct Filter { +/// /// Age filter for pets +/// #[deprecated] +/// #[param(style = Form, explode, allow_reserved, example = json!([10]))] +/// age: Option<Vec<i32>>, +/// } +/// +/// #[fastapi::path( +/// params(PetPathArgs, Filter), +/// responses( +/// (status = 200, description = "success response") +/// ) +/// )] +/// #[get("/pet/{id}/{name}")] +/// async fn get_pet(pet: Path<PetPathArgs>, query: Query<Filter>) -> impl Responder { +/// HttpResponse::Ok().json(json!({ "id": pet.id })) +/// } +/// ``` +/// +/// _**Demonstrate [`IntoParams`][into_params] usage with the `#[into_params(...)]` container attribute to +/// be used as a path query, and inlining a schema query field:**_ +/// ```rust +/// use serde::Deserialize; +/// use fastapi::{IntoParams, ToSchema}; +/// +/// #[derive(Deserialize, ToSchema)] +/// #[serde(rename_all = "snake_case")] +/// enum PetKind { +/// Dog, +/// Cat, +/// } +/// +/// #[derive(Deserialize, IntoParams)] +/// #[into_params(style = Form, parameter_in = Query)] +/// struct PetQuery { +/// /// Name of pet +/// name: Option<String>, +/// /// Age of pet +/// age: Option<i32>, +/// /// Kind of pet +/// #[param(inline)] +/// kind: PetKind +/// } +/// +/// #[fastapi::path( +/// get, +/// path = "/get_pet", +/// params(PetQuery), +/// responses( +/// (status = 200, description = "success response") +/// ) +/// )] +/// async fn get_pet(query: PetQuery) { +/// // ... +/// } +/// ``` +/// +/// _**Override `String` with `i64` using `value_type` attribute.**_ +/// ```rust +/// # use fastapi::IntoParams; +/// # +/// #[derive(IntoParams)] +/// #[into_params(parameter_in = Query)] +/// struct Filter { +/// #[param(value_type = i64)] +/// id: String, +/// } +/// ``` +/// +/// _**Override `String` with `Object` using `value_type` attribute. _`Object`_ will render as `type: object` in OpenAPI spec.**_ +/// ```rust +/// # use fastapi::IntoParams; +/// # +/// #[derive(IntoParams)] +/// #[into_params(parameter_in = Query)] +/// struct Filter { +/// #[param(value_type = Object)] +/// id: String, +/// } +/// ``` +/// +/// _**You can use a generic type to override the default type of the field.**_ +/// ```rust +/// # use fastapi::IntoParams; +/// # +/// #[derive(IntoParams)] +/// #[into_params(parameter_in = Query)] +/// struct Filter { +/// #[param(value_type = Option<String>)] +/// id: String +/// } +/// ``` +/// +/// _**You can even override a [`Vec`] with another one.**_ +/// ```rust +/// # use fastapi::IntoParams; +/// # +/// #[derive(IntoParams)] +/// #[into_params(parameter_in = Query)] +/// struct Filter { +/// #[param(value_type = Vec<i32>)] +/// id: Vec<String> +/// } +/// ``` +/// +/// _**We can override value with another [`ToSchema`][to_schema].**_ +/// ```rust +/// # use fastapi::{IntoParams, ToSchema}; +/// # +/// #[derive(ToSchema)] +/// struct Id { +/// value: i64, +/// } +/// +/// #[derive(IntoParams)] +/// #[into_params(parameter_in = Query)] +/// struct Filter { +/// #[param(value_type = Id)] +/// id: String +/// } +/// ``` +/// +/// _**Example with validation attributes.**_ +/// ```rust +/// #[derive(fastapi::IntoParams)] +/// struct Item { +/// #[param(maximum = 10, minimum = 5, multiple_of = 2.5)] +/// id: i32, +/// #[param(max_length = 10, min_length = 5, pattern = "[a-z]*")] +/// value: String, +/// #[param(max_items = 5, min_items = 1)] +/// items: Vec<String>, +/// } +/// ```` +/// +/// _**Use `schema_with` to manually implement schema for a field.**_ +/// ```rust +/// # use fastapi::openapi::schema::{Object, ObjectBuilder}; +/// fn custom_type() -> Object { +/// ObjectBuilder::new() +/// .schema_type(fastapi::openapi::schema::Type::String) +/// .format(Some(fastapi::openapi::SchemaFormat::Custom( +/// "email".to_string(), +/// ))) +/// .description(Some("this is the description")) +/// .build() +/// } +/// +/// #[derive(fastapi::IntoParams)] +/// #[into_params(parameter_in = Query)] +/// struct Query { +/// #[param(schema_with = custom_type)] +/// email: String, +/// } +/// ``` +/// +/// [to_schema]: trait.ToSchema.html +/// [known_format]: openapi/schema/enum.KnownFormat.html +/// [xml]: openapi/xml/struct.Xml.html +/// [into_params]: trait.IntoParams.html +/// [path_params]: attr.path.html#params-attributes +/// [struct]: https://doc.rust-lang.org/std/keyword.struct.html +/// [style]: openapi/path/enum.ParameterStyle.html +/// [in_enum]: openapi/path/enum.ParameterIn.html +/// [primitive]: https://doc.rust-lang.org/std/primitive/index.html +/// [serde attributes]: https://serde.rs/attributes.html +/// [to_schema_xml]: macro@ToSchema#xml-attribute-configuration-options +pub fn into_params(input: TokenStream) -> TokenStream { + let DeriveInput { + attrs, + ident, + generics, + data, + .. + } = syn::parse_macro_input!(input); + + let into_params = IntoParams { + attrs, + generics, + data, + ident, + }; + + into_params.to_token_stream().into() +} + +#[proc_macro_derive(ToResponse, attributes(response, content, to_schema))] +/// Generate reusable OpenAPI response that can be used +/// in [`fastapi::path`][path] or in [`OpenApi`][openapi]. +/// +/// This is `#[derive]` implementation for [`ToResponse`][to_response] trait. +/// +/// +/// _`#[response]`_ attribute can be used to alter and add [response attributes](#toresponse-response-attributes). +/// +/// _`#[content]`_ attributes is used to make enum variant a content of a specific type for the +/// response. +/// +/// _`#[to_schema]`_ attribute is used to inline a schema for a response in unnamed structs or +/// enum variants with `#[content]` attribute. **Note!** [`ToSchema`] need to be implemented for +/// the field or variant type. +/// +/// Type derived with _`ToResponse`_ uses provided doc comment as a description for the response. It +/// can alternatively be overridden with _`description = ...`_ attribute. +/// +/// _`ToResponse`_ can be used in four different ways to generate OpenAPI response component. +/// +/// 1. By decorating `struct` or `enum` with [`derive@ToResponse`] derive macro. This will create a +/// response with inlined schema resolved from the fields of the `struct` or `variants` of the +/// enum. +/// +/// ```rust +/// # use fastapi::ToResponse; +/// #[derive(ToResponse)] +/// #[response(description = "Person response returns single Person entity")] +/// struct Person { +/// name: String, +/// } +/// ``` +/// +/// 2. By decorating unnamed field `struct` with [`derive@ToResponse`] derive macro. Unnamed field struct +/// allows users to use new type pattern to define one inner field which is used as a schema for +/// the generated response. This allows users to define `Vec` and `Option` response types. +/// Additionally these types can also be used with `#[to_schema]` attribute to inline the +/// field's type schema if it implements [`ToSchema`] derive macro. +/// +/// ```rust +/// # #[derive(fastapi::ToSchema)] +/// # struct Person { +/// # name: String, +/// # } +/// /// Person list response +/// #[derive(fastapi::ToResponse)] +/// struct PersonList(Vec<Person>); +/// ``` +/// +/// 3. By decorating unit struct with [`derive@ToResponse`] derive macro. Unit structs will produce a +/// response without body. +/// +/// ```rust +/// /// Success response which does not have body. +/// #[derive(fastapi::ToResponse)] +/// struct SuccessResponse; +/// ``` +/// +/// 4. By decorating `enum` with variants having `#[content(...)]` attribute. This allows users to +/// define multiple response content schemas to single response according to OpenAPI spec. +/// **Note!** Enum with _`content`_ attribute in variants cannot have enum level _`example`_ or +/// _`examples`_ defined. Instead examples need to be defined per variant basis. Additionally +/// these variants can also be used with `#[to_schema]` attribute to inline the variant's type schema +/// if it implements [`ToSchema`] derive macro. +/// +/// ```rust +/// #[derive(fastapi::ToSchema)] +/// struct Admin { +/// name: String, +/// } +/// #[derive(fastapi::ToSchema)] +/// struct Admin2 { +/// name: String, +/// id: i32, +/// } +/// +/// #[derive(fastapi::ToResponse)] +/// enum Person { +/// #[response(examples( +/// ("Person1" = (value = json!({"name": "name1"}))), +/// ("Person2" = (value = json!({"name": "name2"}))) +/// ))] +/// Admin(#[content("application/vnd-custom-v1+json")] Admin), +/// +/// #[response(example = json!({"name": "name3", "id": 1}))] +/// Admin2(#[content("application/vnd-custom-v2+json")] #[to_schema] Admin2), +/// } +/// ``` +/// +/// # ToResponse `#[response(...)]` attributes +/// +/// * `description = "..."` Define description for the response as str. This can be used to +/// override the default description resolved from doc comments if present. +/// +/// * `content_type = "..."` Can be used to override the default behavior +/// of auto resolving the content type from the `body` attribute. If defined the value should be valid +/// content type such as _`application/json`_ . By default the content type is _`text/plain`_ +/// for [primitive Rust types][primitive], `application/octet-stream` for _`[u8]`_ and _`application/json`_ +/// for struct and mixed enum types. +/// +/// * `headers(...)` Slice of response headers that are returned back to a caller. +/// +/// * `example = ...` Can be _`json!(...)`_. _`json!(...)`_ should be something that +/// _`serde_json::json!`_ can parse as a _`serde_json::Value`_. +/// +/// * `examples(...)` Define multiple examples for single response. This attribute is mutually +/// exclusive to the _`example`_ attribute and if both are defined this will override the _`example`_. +/// * `name = ...` This is first attribute and value must be literal string. +/// * `summary = ...` Short description of example. Value must be literal string. +/// * `description = ...` Long description of example. Attribute supports markdown for rich text +/// representation. Value must be literal string. +/// * `value = ...` Example value. It must be _`json!(...)`_. _`json!(...)`_ should be something that +/// _`serde_json::json!`_ can parse as a _`serde_json::Value`_. +/// * `external_value = ...` Define URI to literal example value. This is mutually exclusive to +/// the _`value`_ attribute. Value must be literal string. +/// +/// _**Example of example definition.**_ +/// ```text +/// ("John" = (summary = "This is John", value = json!({"name": "John"}))) +/// ``` +/// +/// # Examples +/// +/// _**Use reusable response in operation handler.**_ +/// ```rust +/// #[derive(fastapi::ToResponse)] +/// struct PersonResponse { +/// value: String +/// } +/// +/// #[derive(fastapi::OpenApi)] +/// #[openapi(components(responses(PersonResponse)))] +/// struct Doc; +/// +/// #[fastapi::path( +/// get, +/// path = "/api/person", +/// responses( +/// (status = 200, response = PersonResponse) +/// ) +/// )] +/// fn get_person() -> PersonResponse { +/// PersonResponse { value: "person".to_string() } +/// } +/// ``` +/// +/// _**Create a response from named struct.**_ +/// ```rust +/// /// This is description +/// /// +/// /// It will also be used in `ToSchema` if present +/// #[derive(fastapi::ToSchema, fastapi::ToResponse)] +/// #[response( +/// description = "Override description for response", +/// content_type = "text/xml" +/// )] +/// #[response( +/// example = json!({"name": "the name"}), +/// headers( +/// ("csrf-token", description = "response csrf token"), +/// ("random-id" = i32) +/// ) +/// )] +/// struct Person { +/// name: String, +/// } +/// ``` +/// +/// _**Create inlined person list response.**_ +/// ```rust +/// # #[derive(fastapi::ToSchema)] +/// # struct Person { +/// # name: String, +/// # } +/// /// Person list response +/// #[derive(fastapi::ToResponse)] +/// struct PersonList(#[to_schema] Vec<Person>); +/// ``` +/// +/// _**Create enum response from variants.**_ +/// ```rust +/// #[derive(fastapi::ToResponse)] +/// enum PersonType { +/// Value(String), +/// Foobar, +/// } +/// ``` +/// +/// [to_response]: trait.ToResponse.html +/// [primitive]: https://doc.rust-lang.org/std/primitive/index.html +/// [path]: attr.path.html +/// [openapi]: derive.OpenApi.html +pub fn to_response(input: TokenStream) -> TokenStream { + let DeriveInput { + attrs, + ident, + generics, + data, + .. + } = syn::parse_macro_input!(input); + + ToResponse::new(attrs, &data, generics, ident) + .as_ref() + .map_or_else(Diagnostics::to_token_stream, ToResponse::to_token_stream) + .into() +} + +#[proc_macro_derive( + IntoResponses, + attributes(response, to_schema, ref_response, to_response) +)] +/// Generate responses with status codes what +/// can be attached to the [`fastapi::path`][path_into_responses]. +/// +/// This is `#[derive]` implementation of [`IntoResponses`][into_responses] trait. [`derive@IntoResponses`] +/// can be used to decorate _`structs`_ and _`enums`_ to generate response maps that can be used in +/// [`fastapi::path`][path_into_responses]. If _`struct`_ is decorated with [`derive@IntoResponses`] it will be +/// used to create a map of responses containing single response. Decorating _`enum`_ with +/// [`derive@IntoResponses`] will create a map of responses with a response for each variant of the _`enum`_. +/// +/// Named field _`struct`_ decorated with [`derive@IntoResponses`] will create a response with inlined schema +/// generated from the body of the struct. This is a conveniency which allows users to directly +/// create responses with schemas without first creating a separate [response][to_response] type. +/// +/// Unit _`struct`_ behaves similarly to then named field struct. Only difference is that it will create +/// a response without content since there is no inner fields. +/// +/// Unnamed field _`struct`_ decorated with [`derive@IntoResponses`] will by default create a response with +/// referenced [schema][to_schema] if field is object or schema if type is [primitive +/// type][primitive]. _`#[to_schema]`_ attribute at field of unnamed _`struct`_ can be used to inline +/// the schema if type of the field implements [`ToSchema`][to_schema] trait. Alternatively +/// _`#[to_response]`_ and _`#[ref_response]`_ can be used at field to either reference a reusable +/// [response][to_response] or inline a reusable [response][to_response]. In both cases the field +/// type is expected to implement [`ToResponse`][to_response] trait. +/// +/// +/// Enum decorated with [`derive@IntoResponses`] will create a response for each variant of the _`enum`_. +/// Each variant must have it's own _`#[response(...)]`_ definition. Unit variant will behave same +/// as unit _`struct`_ by creating a response without content. Similarly named field variant and +/// unnamed field variant behaves the same as it was named field _`struct`_ and unnamed field +/// _`struct`_. +/// +/// _`#[response]`_ attribute can be used at named structs, unnamed structs, unit structs and enum +/// variants to alter [response attributes](#intoresponses-response-attributes) of responses. +/// +/// Doc comment on a _`struct`_ or _`enum`_ variant will be used as a description for the response. +/// It can also be overridden with _`description = "..."`_ attribute. +/// +/// # IntoResponses `#[response(...)]` attributes +/// +/// * `status = ...` Must be provided. Is either a valid http status code integer. E.g. _`200`_ or a +/// string value representing a range such as _`"4XX"`_ or `"default"` or a valid _`http::status::StatusCode`_. +/// _`StatusCode`_ can either be use path to the status code or _status code_ constant directly. +/// +/// * `description = "..."` Define description for the response as str. This can be used to +/// override the default description resolved from doc comments if present. +/// +/// * `content_type = "..."` Can be used to override the default behavior +/// of auto resolving the content type from the `body` attribute. If defined the value should be valid +/// content type such as _`application/json`_ . By default the content type is _`text/plain`_ +/// for [primitive Rust types][primitive], `application/octet-stream` for _`[u8]`_ and _`application/json`_ +/// for struct and mixed enum types. +/// +/// * `headers(...)` Slice of response headers that are returned back to a caller. +/// +/// * `example = ...` Can be _`json!(...)`_. _`json!(...)`_ should be something that +/// _`serde_json::json!`_ can parse as a _`serde_json::Value`_. +/// +/// * `examples(...)` Define multiple examples for single response. This attribute is mutually +/// exclusive to the _`example`_ attribute and if both are defined this will override the _`example`_. +/// * `name = ...` This is first attribute and value must be literal string. +/// * `summary = ...` Short description of example. Value must be literal string. +/// * `description = ...` Long description of example. Attribute supports markdown for rich text +/// representation. Value must be literal string. +/// * `value = ...` Example value. It must be _`json!(...)`_. _`json!(...)`_ should be something that +/// _`serde_json::json!`_ can parse as a _`serde_json::Value`_. +/// * `external_value = ...` Define URI to literal example value. This is mutually exclusive to +/// the _`value`_ attribute. Value must be literal string. +/// +/// _**Example of example definition.**_ +/// ```text +/// ("John" = (summary = "This is John", value = json!({"name": "John"}))) +/// ``` +/// +/// # Examples +/// +/// _**Use `IntoResponses` to define [`fastapi::path`][path] responses.**_ +/// ```rust +/// #[derive(fastapi::ToSchema)] +/// struct BadRequest { +/// message: String, +/// } +/// +/// #[derive(fastapi::IntoResponses)] +/// enum UserResponses { +/// /// Success response +/// #[response(status = 200)] +/// Success { value: String }, +/// +/// #[response(status = 404)] +/// NotFound, +/// +/// #[response(status = 400)] +/// BadRequest(BadRequest), +/// } +/// +/// #[fastapi::path( +/// get, +/// path = "/api/user", +/// responses( +/// UserResponses +/// ) +/// )] +/// fn get_user() -> UserResponses { +/// UserResponses::NotFound +/// } +/// ``` +/// _**Named struct response with inlined schema.**_ +/// ```rust +/// /// This is success response +/// #[derive(fastapi::IntoResponses)] +/// #[response(status = 200)] +/// struct SuccessResponse { +/// value: String, +/// } +/// ``` +/// +/// _**Unit struct response without content.**_ +/// ```rust +/// #[derive(fastapi::IntoResponses)] +/// #[response(status = NOT_FOUND)] +/// struct NotFound; +/// ``` +/// +/// _**Unnamed struct response with inlined response schema.**_ +/// ```rust +/// # #[derive(fastapi::ToSchema)] +/// # struct Foo; +/// #[derive(fastapi::IntoResponses)] +/// #[response(status = 201)] +/// struct CreatedResponse(#[to_schema] Foo); +/// ``` +/// +/// _**Enum with multiple responses.**_ +/// ```rust +/// # #[derive(fastapi::ToResponse)] +/// # struct Response { +/// # message: String, +/// # } +/// # #[derive(fastapi::ToSchema)] +/// # struct BadRequest {} +/// #[derive(fastapi::IntoResponses)] +/// enum UserResponses { +/// /// Success response description. +/// #[response(status = 200)] +/// Success { value: String }, +/// +/// #[response(status = 404)] +/// NotFound, +/// +/// #[response(status = 400)] +/// BadRequest(BadRequest), +/// +/// #[response(status = 500)] +/// ServerError(#[ref_response] Response), +/// +/// #[response(status = 418)] +/// TeaPot(#[to_response] Response), +/// } +/// ``` +/// +/// [into_responses]: trait.IntoResponses.html +/// [to_schema]: trait.ToSchema.html +/// [to_response]: trait.ToResponse.html +/// [path_into_responses]: attr.path.html#responses-from-intoresponses +/// [primitive]: https://doc.rust-lang.org/std/primitive/index.html +/// [path]: macro@crate::path +pub fn into_responses(input: TokenStream) -> TokenStream { + let DeriveInput { + attrs, + ident, + generics, + data, + .. + } = syn::parse_macro_input!(input); + + let into_responses = IntoResponses { + attributes: attrs, + ident, + generics, + data, + }; + + into_responses.to_token_stream().into() +} + +/// Create OpenAPI Schema from arbitrary type. +/// +/// This macro provides a quick way to render arbitrary types as OpenAPI Schema Objects. It +/// supports two call formats. +/// 1. With type only +/// 2. With _`#[inline]`_ attribute to inline the referenced schemas. +/// +/// By default the macro will create references `($ref)` for non primitive types like _`Pet`_. +/// However when used with _`#[inline]`_ the non [`primitive`][primitive] type schemas will +/// be inlined to the schema output. +/// +/// ```rust +/// # use fastapi::openapi::{RefOr, schema::Schema}; +/// # #[derive(fastapi::ToSchema)] +/// # struct Pet {id: i32}; +/// let schema: RefOr<Schema> = fastapi::schema!(Vec<Pet>).into(); +/// +/// // with inline +/// let schema: RefOr<Schema> = fastapi::schema!(#[inline] Vec<Pet>).into(); +/// ``` +/// +/// # Examples +/// +/// _**Create vec of pets schema.**_ +/// ```rust +/// # use fastapi::openapi::schema::{Schema, Array, Object, ObjectBuilder, SchemaFormat, +/// # KnownFormat, Type}; +/// # use fastapi::openapi::RefOr; +/// #[derive(fastapi::ToSchema)] +/// struct Pet { +/// id: i32, +/// name: String, +/// } +/// +/// let schema: RefOr<Schema> = fastapi::schema!(#[inline] Vec<Pet>).into(); +/// // will output +/// let generated = RefOr::T(Schema::Array( +/// Array::new( +/// ObjectBuilder::new() +/// .property("id", ObjectBuilder::new() +/// .schema_type(Type::Integer) +/// .format(Some(SchemaFormat::KnownFormat(KnownFormat::Int32))) +/// .build()) +/// .required("id") +/// .property("name", Object::with_type(Type::String)) +/// .required("name") +/// ) +/// )); +/// # assert_json_diff::assert_json_eq!(serde_json::to_value(&schema).unwrap(), serde_json::to_value(&generated).unwrap()); +/// ``` +/// +/// [primitive]: https://doc.rust-lang.org/std/primitive/index.html +#[proc_macro] +pub fn schema(input: TokenStream) -> TokenStream { + struct Schema { + inline: bool, + ty: syn::Type, + } + impl Parse for Schema { + fn parse(input: ParseStream) -> syn::Result<Self> { + let inline = if input.peek(Token![#]) && input.peek2(Bracket) { + input.parse::<Token![#]>()?; + + let inline; + bracketed!(inline in input); + let i = inline.parse::<Ident>()?; + i == "inline" + } else { + false + }; + + let ty = input.parse()?; + + Ok(Self { inline, ty }) + } + } + + let schema = syn::parse_macro_input!(input as Schema); + let type_tree = match TypeTree::from_type(&schema.ty) { + Ok(type_tree) => type_tree, + Err(diagnostics) => return diagnostics.into_token_stream().into(), + }; + + let generics = match type_tree.get_path_generics() { + Ok(generics) => generics, + Err(error) => return error.into_compile_error().into(), + }; + + let schema = ComponentSchema::new(ComponentSchemaProps { + features: vec![Feature::Inline(schema.inline.into())], + type_tree: &type_tree, + description: None, + container: &component::Container { + generics: &generics, + }, + }); + + let schema = match schema { + Ok(schema) => schema.to_token_stream(), + Err(diagnostics) => return diagnostics.to_token_stream().into(), + }; + + quote! { + { + let mut generics: Vec<fastapi::openapi::RefOr<fastapi::openapi::schema::Schema>> = Vec::new(); + #schema + } + } + .into() +} + +/// Tokenizes slice or Vec of tokenizable items as array either with reference (`&[...]`) +/// or without correctly to OpenAPI JSON. +#[cfg_attr(feature = "debug", derive(Debug))] +enum Array<'a, T> +where + T: Sized + ToTokens, +{ + Owned(Vec<T>), + #[allow(dead_code)] + Borrowed(&'a [T]), +} + +impl<V> FromIterator<V> for Array<'_, V> +where + V: Sized + ToTokens, +{ + fn from_iter<T: IntoIterator<Item = V>>(iter: T) -> Self { + Self::Owned(iter.into_iter().collect()) + } +} + +impl<'a, T> Deref for Array<'a, T> +where + T: Sized + ToTokens, +{ + type Target = [T]; + + fn deref(&self) -> &Self::Target { + match self { + Self::Owned(vec) => vec.as_slice(), + Self::Borrowed(slice) => slice, + } + } +} + +impl<T> ToTokens for Array<'_, T> +where + T: Sized + ToTokens, +{ + fn to_tokens(&self, tokens: &mut TokenStream2) { + let values = match self { + Self::Owned(values) => values.iter(), + Self::Borrowed(values) => values.iter(), + }; + + tokens.append(Group::new( + proc_macro2::Delimiter::Bracket, + values + .fold(Punctuated::new(), |mut punctuated, item| { + punctuated.push_value(item); + punctuated.push_punct(Punct::new(',', proc_macro2::Spacing::Alone)); + + punctuated + }) + .to_token_stream(), + )); + } +} + +#[cfg_attr(feature = "debug", derive(Debug))] +enum Deprecated { + True, + False, +} + +impl From<bool> for Deprecated { + fn from(bool: bool) -> Self { + if bool { + Self::True + } else { + Self::False + } + } +} + +impl ToTokens for Deprecated { + fn to_tokens(&self, tokens: &mut TokenStream2) { + tokens.extend(match self { + Self::False => quote! { fastapi::openapi::Deprecated::False }, + Self::True => quote! { fastapi::openapi::Deprecated::True }, + }) + } +} + +#[derive(PartialEq, Eq)] +#[cfg_attr(feature = "debug", derive(Debug))] +enum Required { + True, + False, +} + +impl From<bool> for Required { + fn from(bool: bool) -> Self { + if bool { + Self::True + } else { + Self::False + } + } +} + +impl From<features::attributes::Required> for Required { + fn from(value: features::attributes::Required) -> Self { + let features::attributes::Required(required) = value; + crate::Required::from(required) + } +} + +impl ToTokens for Required { + fn to_tokens(&self, tokens: &mut TokenStream2) { + tokens.extend(match self { + Self::False => quote! { fastapi::openapi::Required::False }, + Self::True => quote! { fastapi::openapi::Required::True }, + }) + } +} + +#[derive(Default)] +#[cfg_attr(feature = "debug", derive(Debug))] +struct ExternalDocs { + url: String, + description: Option<String>, +} + +impl Parse for ExternalDocs { + fn parse(input: ParseStream) -> syn::Result<Self> { + const EXPECTED_ATTRIBUTE: &str = "unexpected attribute, expected any of: url, description"; + + let mut external_docs = ExternalDocs::default(); + + while !input.is_empty() { + let ident = input.parse::<Ident>().map_err(|error| { + syn::Error::new(error.span(), format!("{EXPECTED_ATTRIBUTE}, {error}")) + })?; + let attribute_name = &*ident.to_string(); + + match attribute_name { + "url" => { + external_docs.url = parse_utils::parse_next_literal_str(input)?; + } + "description" => { + external_docs.description = Some(parse_utils::parse_next_literal_str(input)?); + } + _ => return Err(syn::Error::new(ident.span(), EXPECTED_ATTRIBUTE)), + } + + if !input.is_empty() { + input.parse::<Token![,]>()?; + } + } + + Ok(external_docs) + } +} + +impl ToTokens for ExternalDocs { + fn to_tokens(&self, tokens: &mut TokenStream2) { + let url = &self.url; + tokens.extend(quote! { + fastapi::openapi::external_docs::ExternalDocsBuilder::new() + .url(#url) + }); + + if let Some(ref description) = self.description { + tokens.extend(quote! { + .description(Some(#description)) + }); + } + + tokens.extend(quote! { .build() }) + } +} + +/// Represents OpenAPI Any value used in example and default fields. +#[derive(Clone)] +#[cfg_attr(feature = "debug", derive(Debug))] +enum AnyValue { + String(TokenStream2), + Json(TokenStream2), + DefaultTrait { + struct_ident: Ident, + field_ident: Member, + }, +} + +impl AnyValue { + /// Parse `json!(...)` as [`AnyValue::Json`] + fn parse_json(input: ParseStream) -> syn::Result<Self> { + parse_utils::parse_json_token_stream(input).map(AnyValue::Json) + } + + fn parse_any(input: ParseStream) -> syn::Result<Self> { + if input.peek(Lit) { + let punct = input.parse::<Option<Token![-]>>()?; + let lit = input.parse::<Lit>().unwrap(); + + Ok(AnyValue::Json(quote! { #punct #lit})) + } else { + let fork = input.fork(); + let is_json = if fork.peek(syn::Ident) && fork.peek2(Token![!]) { + let ident = fork.parse::<Ident>().unwrap(); + ident == "json" + } else { + false + }; + + if is_json { + let json = parse_utils::parse_json_token_stream(input)?; + + Ok(AnyValue::Json(json)) + } else { + let method = input.parse::<ExprPath>().map_err(|error| { + syn::Error::new( + error.span(), + "expected literal value, json!(...) or method reference", + ) + })?; + + Ok(AnyValue::Json(quote! { #method() })) + } + } + } + + fn parse_lit_str_or_json(input: ParseStream) -> syn::Result<Self> { + if input.peek(LitStr) { + Ok(AnyValue::String( + input.parse::<LitStr>().unwrap().to_token_stream(), + )) + } else { + Ok(AnyValue::Json(parse_utils::parse_json_token_stream(input)?)) + } + } + + fn new_default_trait(struct_ident: Ident, field_ident: Member) -> Self { + Self::DefaultTrait { + struct_ident, + field_ident, + } + } +} + +impl ToTokens for AnyValue { + fn to_tokens(&self, tokens: &mut TokenStream2) { + match self { + Self::Json(json) => tokens.extend(quote! { + serde_json::json!(#json) + }), + Self::String(string) => string.to_tokens(tokens), + Self::DefaultTrait { + struct_ident, + field_ident, + } => tokens.extend(quote! { + serde_json::to_value(#struct_ident::default().#field_ident).unwrap() + }), + } + } +} + +trait OptionExt<T> { + fn map_try<F, U, E>(self, f: F) -> Result<Option<U>, E> + where + F: FnOnce(T) -> Result<U, E>; + fn and_then_try<F, U, E>(self, f: F) -> Result<Option<U>, E> + where + F: FnOnce(T) -> Result<Option<U>, E>; + fn or_else_try<F, U>(self, f: F) -> Result<Option<T>, U> + where + F: FnOnce() -> Result<Option<T>, U>; +} + +impl<T> OptionExt<T> for Option<T> { + fn map_try<F, U, E>(self, f: F) -> Result<Option<U>, E> + where + F: FnOnce(T) -> Result<U, E>, + { + if let Some(v) = self { + f(v).map(Some) + } else { + Ok(None) + } + } + + fn and_then_try<F, U, E>(self, f: F) -> Result<Option<U>, E> + where + F: FnOnce(T) -> Result<Option<U>, E>, + { + if let Some(v) = self { + match f(v) { + Ok(inner) => Ok(inner), + Err(error) => Err(error), + } + } else { + Ok(None) + } + } + + fn or_else_try<F, U>(self, f: F) -> Result<Option<T>, U> + where + F: FnOnce() -> Result<Option<T>, U>, + { + if self.is_none() { + f() + } else { + Ok(self) + } + } +} + +trait GenericsExt { + /// Get index of `GenericParam::Type` ignoring other generic param types. + fn get_generic_type_param_index(&self, type_tree: &TypeTree) -> Option<usize>; +} + +impl<'g> GenericsExt for &'g syn::Generics { + fn get_generic_type_param_index(&self, type_tree: &TypeTree) -> Option<usize> { + let ident = &type_tree + .path + .as_ref() + .expect("TypeTree of generic object must have a path") + .segments + .last() + .expect("Generic object path must have at least one segment") + .ident; + + self.params + .iter() + .filter(|generic| matches!(generic, GenericParam::Type(_))) + .enumerate() + .find_map(|(index, generic)| { + if matches!(generic, GenericParam::Type(ty) if ty.ident == *ident) { + Some(index) + } else { + None + } + }) + } +} + +trait ToTokensDiagnostics { + fn to_tokens(&self, tokens: &mut TokenStream2) -> Result<(), Diagnostics>; + + #[allow(unused)] + fn into_token_stream(self) -> TokenStream2 + where + Self: std::marker::Sized, + { + ToTokensDiagnostics::to_token_stream(&self) + } + + fn to_token_stream(&self) -> TokenStream2 { + let mut tokens = TokenStream2::new(); + match ToTokensDiagnostics::to_tokens(self, &mut tokens) { + Ok(_) => tokens, + Err(error_stream) => Into::<Diagnostics>::into(error_stream).into_token_stream(), + } + } + + fn try_to_token_stream(&self) -> Result<TokenStream2, Diagnostics> { + let mut tokens = TokenStream2::new(); + match ToTokensDiagnostics::to_tokens(self, &mut tokens) { + Ok(_) => Ok(tokens), + Err(diagnostics) => Err(diagnostics), + } + } +} + +macro_rules! as_tokens_or_diagnostics { + ( $type:expr ) => {{ + let mut _tokens = proc_macro2::TokenStream::new(); + match crate::ToTokensDiagnostics::to_tokens($type, &mut _tokens) { + Ok(_) => _tokens, + Err(diagnostics) => return Err(diagnostics), + } + }}; +} + +use as_tokens_or_diagnostics; + +#[derive(Debug)] +struct Diagnostics { + diagnostics: Vec<DiangosticsInner>, +} + +#[derive(Debug)] +struct DiangosticsInner { + span: Span, + message: Cow<'static, str>, + suggestions: Vec<Suggestion>, +} + +#[derive(Debug, PartialEq, Eq, PartialOrd, Ord)] +enum Suggestion { + Help(Cow<'static, str>), + Note(Cow<'static, str>), +} + +impl Display for Diagnostics { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(f, "{}", self.message()) + } +} + +impl Display for Suggestion { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + match self { + Self::Help(help) => { + let s: &str = help.borrow(); + write!(f, "help = {}", s) + } + Self::Note(note) => { + let s: &str = note.borrow(); + write!(f, "note = {}", s) + } + } + } +} + +impl Diagnostics { + fn message(&self) -> Cow<'static, str> { + self.diagnostics + .first() + .as_ref() + .map(|diagnostics| diagnostics.message.clone()) + .unwrap_or_else(|| Cow::Borrowed("")) + } + + pub fn new<S: Into<Cow<'static, str>>>(message: S) -> Self { + Self::with_span(Span::call_site(), message) + } + + pub fn with_span<S: Into<Cow<'static, str>>>(span: Span, message: S) -> Self { + Self { + diagnostics: vec![DiangosticsInner { + span, + message: message.into(), + suggestions: Vec::new(), + }], + } + } + + pub fn help<S: Into<Cow<'static, str>>>(mut self, help: S) -> Self { + if let Some(diagnostics) = self.diagnostics.first_mut() { + diagnostics.suggestions.push(Suggestion::Help(help.into())); + diagnostics.suggestions.sort(); + } + + self + } + + pub fn note<S: Into<Cow<'static, str>>>(mut self, note: S) -> Self { + if let Some(diagnostics) = self.diagnostics.first_mut() { + diagnostics.suggestions.push(Suggestion::Note(note.into())); + diagnostics.suggestions.sort(); + } + + self + } +} + +impl From<syn::Error> for Diagnostics { + fn from(value: syn::Error) -> Self { + Self::with_span(value.span(), value.to_string()) + } +} + +impl ToTokens for Diagnostics { + fn to_tokens(&self, tokens: &mut TokenStream2) { + for diagnostics in &self.diagnostics { + let span = diagnostics.span; + let message: &str = diagnostics.message.borrow(); + + let suggestions = diagnostics + .suggestions + .iter() + .map(Suggestion::to_string) + .collect::<Vec<_>>() + .join("\n"); + + let diagnostics = if !suggestions.is_empty() { + Cow::Owned(format!("{message}\n\n{suggestions}")) + } else { + Cow::Borrowed(message) + }; + + tokens.extend(quote_spanned! {span=> + ::core::compile_error!(#diagnostics); + }) + } + } +} + +impl Error for Diagnostics {} + +impl FromIterator<Diagnostics> for Option<Diagnostics> { + fn from_iter<T: IntoIterator<Item = Diagnostics>>(iter: T) -> Self { + iter.into_iter().reduce(|mut acc, diagnostics| { + acc.diagnostics.extend(diagnostics.diagnostics); + acc + }) + } +} + +trait AttributesExt { + fn has_deprecated(&self) -> bool; +} + +impl AttributesExt for Vec<syn::Attribute> { + fn has_deprecated(&self) -> bool { + let this = &**self; + this.has_deprecated() + } +} + +impl<'a> AttributesExt for &'a [syn::Attribute] { + fn has_deprecated(&self) -> bool { + self.iter().any(|attr| { + matches!(attr.path().get_ident(), Some(ident) if &*ident.to_string() == "deprecated") + }) + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn diagnostics_ordering_help_comes_before_note() { + let diagnostics = Diagnostics::new("this an error") + .note("you could do this to solve the error") + .help("try this thing"); + + let tokens = diagnostics.into_token_stream(); + + let expected_tokens = quote::quote!(::core::compile_error!( + "this an error\n\nhelp = try this thing\nnote = you could do this to solve the error" + );); + + assert_eq!(tokens.to_string(), expected_tokens.to_string()); + } +} + +/// Parsing utils +mod parse_utils { + use std::fmt::Display; + + use proc_macro2::{Group, Ident, TokenStream}; + use quote::{quote, ToTokens}; + use syn::{ + parenthesized, + parse::{Parse, ParseStream}, + punctuated::Punctuated, + spanned::Spanned, + token::Comma, + Error, Expr, ExprPath, LitBool, LitStr, Token, + }; + + #[cfg_attr(feature = "debug", derive(Debug))] + #[derive(Clone)] + pub enum LitStrOrExpr { + LitStr(LitStr), + Expr(Expr), + } + + impl From<String> for LitStrOrExpr { + fn from(value: String) -> Self { + Self::LitStr(LitStr::new(&value, proc_macro2::Span::call_site())) + } + } + + impl LitStrOrExpr { + pub(crate) fn is_empty_litstr(&self) -> bool { + matches!(self, Self::LitStr(s) if s.value().is_empty()) + } + } + + impl Default for LitStrOrExpr { + fn default() -> Self { + Self::LitStr(LitStr::new("", proc_macro2::Span::call_site())) + } + } + + impl Parse for LitStrOrExpr { + fn parse(input: ParseStream) -> syn::Result<Self> { + if input.peek(LitStr) { + Ok::<LitStrOrExpr, Error>(LitStrOrExpr::LitStr(input.parse::<LitStr>()?)) + } else { + Ok(LitStrOrExpr::Expr(input.parse::<Expr>()?)) + } + } + } + + impl ToTokens for LitStrOrExpr { + fn to_tokens(&self, tokens: &mut TokenStream) { + match self { + Self::LitStr(str) => str.to_tokens(tokens), + Self::Expr(expr) => expr.to_tokens(tokens), + } + } + } + + impl Display for LitStrOrExpr { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + match self { + Self::LitStr(str) => write!(f, "{str}", str = str.value()), + Self::Expr(expr) => write!(f, "{expr}", expr = expr.into_token_stream()), + } + } + } + + pub fn parse_next<T: FnOnce() -> Result<R, syn::Error>, R: Sized>( + input: ParseStream, + next: T, + ) -> Result<R, syn::Error> { + input.parse::<Token![=]>()?; + next() + } + + pub fn parse_next_literal_str(input: ParseStream) -> syn::Result<String> { + Ok(parse_next(input, || input.parse::<LitStr>())?.value()) + } + + pub fn parse_next_literal_str_or_expr(input: ParseStream) -> syn::Result<LitStrOrExpr> { + parse_next(input, || LitStrOrExpr::parse(input)).map_err(|error| { + syn::Error::new( + error.span(), + format!("expected literal string or expression argument: {error}"), + ) + }) + } + + pub fn parse_groups_collect<T, R>(input: ParseStream) -> syn::Result<R> + where + T: Sized, + T: Parse, + R: FromIterator<T>, + { + Punctuated::<Group, Comma>::parse_terminated(input).and_then(|groups| { + groups + .into_iter() + .map(|group| syn::parse2::<T>(group.stream())) + .collect::<syn::Result<R>>() + }) + } + + pub fn parse_parethesized_terminated<T: Parse, S: Parse>( + input: ParseStream, + ) -> syn::Result<Punctuated<T, S>> { + let group; + syn::parenthesized!(group in input); + Punctuated::parse_terminated(&group) + } + + pub fn parse_comma_separated_within_parethesis_with<T>( + input: ParseStream, + with: fn(ParseStream) -> syn::Result<T>, + ) -> syn::Result<Punctuated<T, Comma>> + where + T: Parse, + { + let content; + parenthesized!(content in input); + Punctuated::<T, Comma>::parse_terminated_with(&content, with) + } + + pub fn parse_comma_separated_within_parenthesis<T>( + input: ParseStream, + ) -> syn::Result<Punctuated<T, Comma>> + where + T: Parse, + { + let content; + parenthesized!(content in input); + Punctuated::<T, Comma>::parse_terminated(&content) + } + + pub fn parse_bool_or_true(input: ParseStream) -> syn::Result<bool> { + if input.peek(Token![=]) && input.peek2(LitBool) { + input.parse::<Token![=]>()?; + + Ok(input.parse::<LitBool>()?.value()) + } else { + Ok(true) + } + } + + /// Parse `json!(...)` as a [`TokenStream`]. + pub fn parse_json_token_stream(input: ParseStream) -> syn::Result<TokenStream> { + if input.peek(syn::Ident) && input.peek2(Token![!]) { + input.parse::<Ident>().and_then(|ident| { + if ident != "json" { + return Err(Error::new( + ident.span(), + format!("unexpected token {ident}, expected: json!(...)"), + )); + } + + Ok(ident) + })?; + input.parse::<Token![!]>()?; + + Ok(input.parse::<Group>()?.stream()) + } else { + Err(Error::new( + input.span(), + "unexpected token, expected json!(...)", + )) + } + } + + #[cfg_attr(feature = "debug", derive(Debug))] + #[derive(Clone)] + pub enum LitBoolOrExprPath { + LitBool(LitBool), + ExprPath(ExprPath), + } + + impl From<bool> for LitBoolOrExprPath { + fn from(value: bool) -> Self { + Self::LitBool(LitBool::new(value, proc_macro2::Span::call_site())) + } + } + + impl Default for LitBoolOrExprPath { + fn default() -> Self { + Self::LitBool(LitBool::new(false, proc_macro2::Span::call_site())) + } + } + + impl Parse for LitBoolOrExprPath { + fn parse(input: ParseStream) -> syn::Result<Self> { + if input.peek(LitBool) { + Ok(LitBoolOrExprPath::LitBool(input.parse::<LitBool>()?)) + } else { + let expr = input.parse::<Expr>()?; + + match expr { + Expr::Path(expr_path) => Ok(LitBoolOrExprPath::ExprPath(expr_path)), + _ => Err(syn::Error::new( + expr.span(), + format!( + "expected literal bool or path to a function that returns bool, found: {}", + quote! {#expr} + ), + )), + } + } + } + } + + impl ToTokens for LitBoolOrExprPath { + fn to_tokens(&self, tokens: &mut TokenStream) { + match self { + Self::LitBool(bool) => bool.to_tokens(tokens), + Self::ExprPath(call) => call.to_tokens(tokens), + } + } + } + + pub fn parse_next_literal_bool_or_call(input: ParseStream) -> syn::Result<LitBoolOrExprPath> { + if input.peek(Token![=]) { + parse_next(input, || LitBoolOrExprPath::parse(input)) + } else { + Ok(LitBoolOrExprPath::from(true)) + } + } +} diff --git a/fastapi-gen/src/openapi.rs b/fastapi-gen/src/openapi.rs new file mode 100644 index 0000000..976e26f --- /dev/null +++ b/fastapi-gen/src/openapi.rs @@ -0,0 +1,826 @@ +use std::borrow::Cow; + +use proc_macro2::Ident; +use syn::{ + bracketed, parenthesized, + parse::{Parse, ParseStream}, + punctuated::Punctuated, + spanned::Spanned, + token::{And, Comma}, + Attribute, Error, ExprPath, LitStr, Token, TypePath, +}; + +use proc_macro2::TokenStream; +use quote::{format_ident, quote, quote_spanned, ToTokens}; + +use crate::{ + component::{features::Feature, ComponentSchema, Container, TypeTree}, + parse_utils, + security_requirement::SecurityRequirementsAttr, + Array, Diagnostics, ExternalDocs, ToTokensDiagnostics, +}; +use crate::{path, OptionExt}; + +use self::info::Info; + +mod info; + +#[derive(Default)] +#[cfg_attr(feature = "debug", derive(Debug))] +pub struct OpenApiAttr<'o> { + info: Option<Info<'o>>, + paths: Punctuated<ExprPath, Comma>, + components: Components, + modifiers: Punctuated<Modifier, Comma>, + security: Option<Array<'static, SecurityRequirementsAttr>>, + tags: Option<Array<'static, Tag>>, + external_docs: Option<ExternalDocs>, + servers: Punctuated<Server, Comma>, + nested: Vec<NestOpenApi>, +} + +impl<'o> OpenApiAttr<'o> { + fn merge(mut self, other: OpenApiAttr<'o>) -> Self { + if other.info.is_some() { + self.info = other.info; + } + if !other.paths.is_empty() { + self.paths = other.paths; + } + if !other.components.schemas.is_empty() { + self.components.schemas = other.components.schemas; + } + if !other.components.responses.is_empty() { + self.components.responses = other.components.responses; + } + if other.security.is_some() { + self.security = other.security; + } + if other.tags.is_some() { + self.tags = other.tags; + } + if other.external_docs.is_some() { + self.external_docs = other.external_docs; + } + if !other.servers.is_empty() { + self.servers = other.servers; + } + + self + } +} + +pub fn parse_openapi_attrs(attrs: &[Attribute]) -> Result<Option<OpenApiAttr>, Error> { + attrs + .iter() + .filter(|attribute| attribute.path().is_ident("openapi")) + .map(|attribute| attribute.parse_args::<OpenApiAttr>()) + .collect::<Result<Vec<_>, _>>() + .map(|attrs| attrs.into_iter().reduce(|acc, item| acc.merge(item))) +} + +impl Parse for OpenApiAttr<'_> { + fn parse(input: syn::parse::ParseStream) -> syn::Result<Self> { + const EXPECTED_ATTRIBUTE: &str = + "unexpected attribute, expected any of: handlers, components, modifiers, security, tags, external_docs, servers, nest"; + let mut openapi = OpenApiAttr::default(); + + while !input.is_empty() { + let ident = input.parse::<Ident>().map_err(|error| { + Error::new(error.span(), format!("{EXPECTED_ATTRIBUTE}, {error}")) + })?; + let attribute = &*ident.to_string(); + + match attribute { + "info" => { + let info_stream; + parenthesized!(info_stream in input); + openapi.info = Some(info_stream.parse()?) + } + "paths" => { + openapi.paths = parse_utils::parse_comma_separated_within_parenthesis(input)?; + } + "components" => { + openapi.components = input.parse()?; + } + "modifiers" => { + openapi.modifiers = + parse_utils::parse_comma_separated_within_parenthesis(input)?; + } + "security" => { + let security; + parenthesized!(security in input); + openapi.security = Some(parse_utils::parse_groups_collect(&security)?) + } + "tags" => { + let tags; + parenthesized!(tags in input); + openapi.tags = Some(parse_utils::parse_groups_collect(&tags)?); + } + "external_docs" => { + let external_docs; + parenthesized!(external_docs in input); + openapi.external_docs = Some(external_docs.parse()?); + } + "servers" => { + openapi.servers = parse_utils::parse_comma_separated_within_parenthesis(input)?; + } + "nest" => { + let nest; + parenthesized!(nest in input); + openapi.nested = parse_utils::parse_groups_collect(&nest)?; + } + _ => { + return Err(Error::new(ident.span(), EXPECTED_ATTRIBUTE)); + } + } + + if !input.is_empty() { + input.parse::<Token![,]>()?; + } + } + + Ok(openapi) + } +} + +#[cfg_attr(feature = "debug", derive(Debug))] +struct Schema(TypePath); + +impl Schema { + fn get_component(&self) -> Result<ComponentSchema, Diagnostics> { + let ty = syn::Type::Path(self.0.clone()); + let type_tree = TypeTree::from_type(&ty)?; + let generics = type_tree.get_path_generics()?; + + let container = Container { + generics: &generics, + }; + let component_schema = ComponentSchema::new(crate::component::ComponentSchemaProps { + container: &container, + type_tree: &type_tree, + features: vec![Feature::Inline(true.into())], + description: None, + })?; + + Ok(component_schema) + } +} + +impl Parse for Schema { + fn parse(input: ParseStream) -> syn::Result<Self> { + input.parse().map(Self) + } +} + +#[cfg_attr(feature = "debug", derive(Debug))] +struct Response(TypePath); + +impl Parse for Response { + fn parse(input: ParseStream) -> syn::Result<Self> { + input.parse().map(Self) + } +} + +#[cfg_attr(feature = "debug", derive(Debug))] +struct Modifier { + and: And, + ident: Ident, +} + +impl ToTokens for Modifier { + fn to_tokens(&self, tokens: &mut TokenStream) { + let and = &self.and; + let ident = &self.ident; + tokens.extend(quote! { + #and #ident + }) + } +} + +impl Parse for Modifier { + fn parse(input: ParseStream) -> syn::Result<Self> { + Ok(Self { + and: input.parse()?, + ident: input.parse()?, + }) + } +} + +#[derive(Default)] +#[cfg_attr(feature = "debug", derive(Debug))] +struct Tag { + name: parse_utils::LitStrOrExpr, + description: Option<parse_utils::LitStrOrExpr>, + external_docs: Option<ExternalDocs>, +} + +impl Parse for Tag { + fn parse(input: ParseStream) -> syn::Result<Self> { + const EXPECTED_ATTRIBUTE: &str = + "unexpected token, expected any of: name, description, external_docs"; + + let mut tag = Tag::default(); + + while !input.is_empty() { + let ident = input.parse::<Ident>().map_err(|error| { + syn::Error::new(error.span(), format!("{EXPECTED_ATTRIBUTE}, {error}")) + })?; + let attribute_name = &*ident.to_string(); + + match attribute_name { + "name" => tag.name = parse_utils::parse_next_literal_str_or_expr(input)?, + "description" => { + tag.description = Some(parse_utils::parse_next_literal_str_or_expr(input)?) + } + "external_docs" => { + let content; + parenthesized!(content in input); + tag.external_docs = Some(content.parse::<ExternalDocs>()?); + } + _ => return Err(syn::Error::new(ident.span(), EXPECTED_ATTRIBUTE)), + } + + if !input.is_empty() { + input.parse::<Token![,]>()?; + } + } + + Ok(tag) + } +} + +impl ToTokens for Tag { + fn to_tokens(&self, tokens: &mut TokenStream) { + let name = &self.name; + tokens.extend(quote! { + fastapi::openapi::tag::TagBuilder::new().name(#name) + }); + + if let Some(ref description) = self.description { + tokens.extend(quote! { + .description(Some(#description)) + }); + } + + if let Some(ref external_docs) = self.external_docs { + tokens.extend(quote! { + .external_docs(Some(#external_docs)) + }); + } + + tokens.extend(quote! { .build() }) + } +} + +// (url = "http:://url", description = "description", variables(...)) +#[derive(Default)] +#[cfg_attr(feature = "debug", derive(Debug))] +pub struct Server { + url: String, + description: Option<String>, + variables: Punctuated<ServerVariable, Comma>, +} + +impl Parse for Server { + fn parse(input: ParseStream) -> syn::Result<Self> { + let server_stream; + parenthesized!(server_stream in input); + let mut server = Server::default(); + while !server_stream.is_empty() { + let ident = server_stream.parse::<Ident>()?; + let attribute_name = &*ident.to_string(); + + match attribute_name { + "url" => { + server.url = parse_utils::parse_next(&server_stream, || server_stream.parse::<LitStr>())?.value() + } + "description" => { + server.description = + Some(parse_utils::parse_next(&server_stream, || server_stream.parse::<LitStr>())?.value()) + } + "variables" => { + server.variables = parse_utils::parse_comma_separated_within_parenthesis(&server_stream)? + } + _ => { + return Err(Error::new(ident.span(), format!("unexpected attribute: {attribute_name}, expected one of: url, description, variables"))) + } + } + + if !server_stream.is_empty() { + server_stream.parse::<Comma>()?; + } + } + + Ok(server) + } +} + +impl ToTokens for Server { + fn to_tokens(&self, tokens: &mut TokenStream) { + let url = &self.url; + let description = &self + .description + .as_ref() + .map(|description| quote! { .description(Some(#description)) }); + + let parameters = self + .variables + .iter() + .map(|variable| { + let name = &variable.name; + let default_value = &variable.default; + let description = &variable + .description + .as_ref() + .map(|description| quote! { .description(Some(#description)) }); + let enum_values = &variable.enum_values.as_ref().map(|enum_values| { + let enum_values = enum_values.iter().collect::<Array<&LitStr>>(); + + quote! { .enum_values(Some(#enum_values)) } + }); + + quote! { + .parameter(#name, fastapi::openapi::server::ServerVariableBuilder::new() + .default_value(#default_value) + #description + #enum_values + ) + } + }) + .collect::<TokenStream>(); + + tokens.extend(quote! { + fastapi::openapi::server::ServerBuilder::new() + .url(#url) + #description + #parameters + .build() + }) + } +} + +// ("username" = (default = "demo", description = "This is default username for the API")), +// ("port" = (enum_values = (8080, 5000, 4545))) +#[derive(Default)] +#[cfg_attr(feature = "debug", derive(Debug))] +struct ServerVariable { + name: String, + default: String, + description: Option<String>, + enum_values: Option<Punctuated<LitStr, Comma>>, +} + +impl Parse for ServerVariable { + fn parse(input: ParseStream) -> syn::Result<Self> { + let variable_stream; + parenthesized!(variable_stream in input); + let mut server_variable = ServerVariable { + name: variable_stream.parse::<LitStr>()?.value(), + ..ServerVariable::default() + }; + + variable_stream.parse::<Token![=]>()?; + let content; + parenthesized!(content in variable_stream); + + while !content.is_empty() { + let ident = content.parse::<Ident>()?; + let attribute_name = &*ident.to_string(); + + match attribute_name { + "default" => { + server_variable.default = + parse_utils::parse_next(&content, || content.parse::<LitStr>())?.value() + } + "description" => { + server_variable.description = + Some(parse_utils::parse_next(&content, || content.parse::<LitStr>())?.value()) + } + "enum_values" => { + server_variable.enum_values = + Some(parse_utils::parse_comma_separated_within_parenthesis(&content)?) + } + _ => { + return Err(Error::new(ident.span(), format!( "unexpected attribute: {attribute_name}, expected one of: default, description, enum_values"))) + } + } + + if !content.is_empty() { + content.parse::<Comma>()?; + } + } + + Ok(server_variable) + } +} + +pub(crate) struct OpenApi<'o>(pub Option<OpenApiAttr<'o>>, pub Ident); + +impl OpenApi<'_> { + fn nested_tokens(&self) -> Option<TokenStream> { + let nested = self.0.as_ref().map(|openapi| &openapi.nested)?; + let nest_tokens = nested.iter() + .map(|item| { + let path = &item.path; + let nest_api = &item + .open_api + .as_ref() + .expect("type path of nested api is mandatory"); + let nest_api_ident = &nest_api + .path + .segments + .last() + .expect("nest api must have at least one segment") + .ident; + let nest_api_config = format_ident!("{}Config", nest_api_ident.to_string()); + + let module_path = nest_api + .path + .segments + .iter() + .take(nest_api.path.segments.len() - 1) + .map(|segment| segment.ident.to_string()) + .collect::<Vec<_>>() + .join("::"); + let tags = &item.tags.iter().collect::<Array<_>>(); + + let span = nest_api.span(); + quote_spanned! {span=> + .nest(#path, { + #[allow(non_camel_case_types)] + struct #nest_api_config; + impl fastapi::__dev::NestedApiConfig for #nest_api_config { + fn config() -> (fastapi::openapi::OpenApi, Vec<&'static str>, &'static str) { + let api = <#nest_api as fastapi::OpenApi>::openapi(); + + (api, #tags.into(), #module_path) + } + } + <#nest_api_config as fastapi::OpenApi>::openapi() + }) + } + }) + .collect::<TokenStream>(); + + if nest_tokens.is_empty() { + None + } else { + Some(nest_tokens) + } + } +} + +impl ToTokensDiagnostics for OpenApi<'_> { + fn to_tokens(&self, tokens: &mut proc_macro2::TokenStream) -> Result<(), Diagnostics> { + let OpenApi(attributes, ident) = self; + + let info = Info::merge_with_env_args( + attributes + .as_ref() + .and_then(|attributes| attributes.info.clone()), + ); + + let components = attributes + .as_ref() + .map_try(|attributes| attributes.components.try_to_token_stream())? + .and_then(|tokens| { + if !tokens.is_empty() { + Some(quote! { .components(Some(#tokens)) }) + } else { + None + } + }); + + let Paths(path_items, handlers) = + impl_paths(attributes.as_ref().map(|attributes| &attributes.paths)); + + let handler_schemas = handlers.iter().fold( + quote! { + let components = openapi.components.get_or_insert(fastapi::openapi::Components::new()); + let mut schemas = Vec::<(String, fastapi::openapi::RefOr<fastapi::openapi::schema::Schema>)>::new(); + }, + |mut handler_schemas, (usage, ..)| { + handler_schemas.extend(quote! { + <#usage as fastapi::__dev::SchemaReferences>::schemas(&mut schemas); + }); + + handler_schemas + }, + ); + + let securities = attributes + .as_ref() + .and_then(|openapi_attributes| openapi_attributes.security.as_ref()) + .map(|securities| { + quote! { + .security(Some(#securities)) + } + }); + let tags = attributes + .as_ref() + .and_then(|attributes| attributes.tags.as_ref()) + .map(|tags| { + quote! { + .tags(Some(#tags)) + } + }); + let external_docs = attributes + .as_ref() + .and_then(|attributes| attributes.external_docs.as_ref()) + .map(|external_docs| { + quote! { + .external_docs(Some(#external_docs)) + } + }); + + let servers = match attributes.as_ref().map(|attributes| &attributes.servers) { + Some(servers) if !servers.is_empty() => { + let servers = servers.iter().collect::<Array<&Server>>(); + Some(quote! { .servers(Some(#servers)) }) + } + _ => None, + }; + + let modifiers_tokens = attributes + .as_ref() + .map(|attributes| &attributes.modifiers) + .map(|modifiers| { + let modifiers_len = modifiers.len(); + + quote! { + let _mods: [&dyn fastapi::Modify; #modifiers_len] = [#modifiers]; + _mods.iter().for_each(|modifier| modifier.modify(&mut openapi)); + } + }); + + let nested_tokens = self + .nested_tokens() + .map(|tokens| quote! {openapi = openapi #tokens;}); + tokens.extend(quote! { + impl fastapi::OpenApi for #ident { + fn openapi() -> fastapi::openapi::OpenApi { + use fastapi::{ToSchema, Path}; + let mut openapi = fastapi::openapi::OpenApiBuilder::new() + .info(#info) + .paths({ + #path_items + }) + #components + #securities + #tags + #servers + #external_docs + .build(); + #handler_schemas + components.schemas.extend(schemas); + #nested_tokens + + #modifiers_tokens + + openapi + } + } + }); + + Ok(()) + } +} + +#[derive(Default)] +#[cfg_attr(feature = "debug", derive(Debug))] +struct Components { + schemas: Vec<Schema>, + responses: Vec<Response>, +} + +impl Parse for Components { + fn parse(input: ParseStream) -> syn::Result<Self> { + let content; + parenthesized!(content in input); + const EXPECTED_ATTRIBUTE: &str = + "unexpected attribute. expected one of: schemas, responses"; + + let mut schemas: Vec<Schema> = Vec::new(); + let mut responses: Vec<Response> = Vec::new(); + + while !content.is_empty() { + let ident = content.parse::<Ident>().map_err(|error| { + Error::new(error.span(), format!("{EXPECTED_ATTRIBUTE}, {error}")) + })?; + let attribute = &*ident.to_string(); + + match attribute { + "schemas" => schemas.append( + &mut parse_utils::parse_comma_separated_within_parenthesis(&content)? + .into_iter() + .collect(), + ), + "responses" => responses.append( + &mut parse_utils::parse_comma_separated_within_parenthesis(&content)? + .into_iter() + .collect(), + ), + _ => return Err(syn::Error::new(ident.span(), EXPECTED_ATTRIBUTE)), + } + + if !content.is_empty() { + content.parse::<Token![,]>()?; + } + } + + Ok(Self { schemas, responses }) + } +} + +impl crate::ToTokensDiagnostics for Components { + fn to_tokens(&self, tokens: &mut TokenStream) -> Result<(), Diagnostics> { + if self.schemas.is_empty() && self.responses.is_empty() { + return Ok(()); + } + + let builder_tokens = self + .schemas + .iter() + .map(|schema| match schema.get_component() { + Ok(component_schema) => Ok((component_schema, &schema.0)), + Err(diagnostics) => Err(diagnostics), + }) + .collect::<Result<Vec<(ComponentSchema, &TypePath)>, Diagnostics>>()? + .into_iter() + .fold( + quote! { fastapi::openapi::ComponentsBuilder::new() }, + |mut components, (component_schema, type_path)| { + let schema = component_schema.to_token_stream(); + let name = &component_schema.name_tokens; + + components.extend(quote! { .schemas_from_iter( { + let mut schemas = Vec::<(String, fastapi::openapi::RefOr<fastapi::openapi::schema::Schema>)>::new(); + <#type_path as fastapi::ToSchema>::schemas(&mut schemas); + schemas + } )}); + components.extend(quote! { .schema(#name, #schema) }); + + components + }, + ); + + let builder_tokens = + self.responses + .iter() + .fold(builder_tokens, |mut builder_tokens, responses| { + let Response(path) = responses; + + builder_tokens.extend(quote_spanned! {path.span() => + .response_from::<#path>() + }); + builder_tokens + }); + + tokens.extend(quote! { #builder_tokens.build() }); + + Ok(()) + } +} + +struct Paths(TokenStream, Vec<(ExprPath, String, Ident)>); + +fn impl_paths(handler_paths: Option<&Punctuated<ExprPath, Comma>>) -> Paths { + let handlers = handler_paths + .into_iter() + .flatten() + .map(|handler| { + let segments = handler.path.segments.iter().collect::<Vec<_>>(); + let handler_config_name = segments + .iter() + .map(|segment| segment.ident.to_string()) + .collect::<Vec<_>>() + .join("_"); + let handler_fn = &segments.last().unwrap().ident; + let handler_ident = path::format_path_ident(Cow::Borrowed(handler_fn)); + let handler_ident_config = format_ident!("{}_config", handler_config_name); + + let tag = segments + .iter() + .take(segments.len() - 1) + .map(|part| part.ident.to_string()) + .collect::<Vec<_>>() + .join("::"); + + let usage = syn::parse_str::<ExprPath>( + &vec![ + if tag.is_empty() { None } else { Some(&*tag) }, + Some(&*handler_ident.as_ref().to_string()), + ] + .into_iter() + .flatten() + .collect::<Vec<_>>() + .join("::"), + ) + .unwrap(); + (usage, tag, handler_ident_config) + }) + .collect::<Vec<_>>(); + + let handlers_impls = handlers + .iter() + .map(|(usage, tag, handler_ident_nested)| { + quote! { + #[allow(non_camel_case_types)] + struct #handler_ident_nested; + #[allow(non_camel_case_types)] + impl fastapi::__dev::PathConfig for #handler_ident_nested { + fn path() -> String { + #usage::path() + } + fn methods() -> Vec<fastapi::openapi::path::HttpMethod> { + #usage::methods() + } + fn tags_and_operation() -> (Vec<&'static str>, fastapi::openapi::path::Operation) { + let item = #usage::operation(); + let mut tags = <#usage as fastapi::__dev::Tags>::tags(); + if !#tag.is_empty() && tags.is_empty() { + tags.push(#tag); + } + + (tags, item) + } + } + } + }) + .collect::<TokenStream>(); + + let tokens = handler_paths.into_iter().flatten().fold( + quote! { #handlers_impls fastapi::openapi::path::PathsBuilder::new() }, + |mut paths, handler| { + let segments = handler.path.segments.iter().collect::<Vec<_>>(); + let handler_config_name = segments + .iter() + .map(|segment| segment.ident.to_string()) + .collect::<Vec<_>>() + .join("_"); + let handler_ident_config = format_ident!("{}_config", handler_config_name); + + paths.extend(quote! { + .path_from::<#handler_ident_config>() + }); + + paths + }, + ); + + Paths(tokens, handlers) +} + +/// (path = "/nest/path", api = NestApi, tags = ["tag1", "tag2"]) +#[cfg_attr(feature = "debug", derive(Debug))] +#[derive(Default)] +struct NestOpenApi { + path: parse_utils::LitStrOrExpr, + open_api: Option<TypePath>, + tags: Punctuated<parse_utils::LitStrOrExpr, Comma>, +} + +impl Parse for NestOpenApi { + fn parse(input: ParseStream) -> syn::Result<Self> { + const ERROR_MESSAGE: &str = "unexpected identifier, expected any of: path, api, tags"; + let mut nest = NestOpenApi::default(); + + while !input.is_empty() { + let ident = input.parse::<Ident>().map_err(|error| { + syn::Error::new(error.span(), format!("{ERROR_MESSAGE}: {error}")) + })?; + + match &*ident.to_string() { + "path" => nest.path = parse_utils::parse_next_literal_str_or_expr(input)?, + "api" => nest.open_api = Some(parse_utils::parse_next(input, || input.parse())?), + "tags" => { + nest.tags = parse_utils::parse_next(input, || { + let tags; + bracketed!(tags in input); + Punctuated::parse_terminated(&tags) + })?; + } + _ => return Err(syn::Error::new(ident.span(), ERROR_MESSAGE)), + } + + if !input.is_empty() { + input.parse::<Token![,]>()?; + } + } + if nest.path.is_empty_litstr() { + return Err(syn::Error::new( + input.span(), + "`path = ...` argument is mandatory for nest(...) statement", + )); + } + if nest.open_api.is_none() { + return Err(syn::Error::new( + input.span(), + "`api = ...` argument is mandatory for nest(...) statement", + )); + } + + Ok(nest) + } +} diff --git a/fastapi-gen/src/openapi/info.rs b/fastapi-gen/src/openapi/info.rs new file mode 100644 index 0000000..3c84545 --- /dev/null +++ b/fastapi-gen/src/openapi/info.rs @@ -0,0 +1,430 @@ +use std::borrow::Cow; +use std::io; + +use proc_macro2::{Ident, TokenStream as TokenStream2}; +use quote::{quote, ToTokens}; +use syn::parse::Parse; +use syn::token::Comma; +use syn::{parenthesized, Error, LitStr}; + +use crate::parse_utils::{self, LitStrOrExpr}; + +#[derive(Default, Clone)] +#[cfg_attr(feature = "debug", derive(Debug))] +pub(super) struct Info<'i> { + title: Option<LitStrOrExpr>, + version: Option<LitStrOrExpr>, + description: Option<LitStrOrExpr>, + terms_of_service: Option<LitStrOrExpr>, + license: Option<License<'i>>, + contact: Option<Contact<'i>>, +} + +impl Info<'_> { + /// Construct new [`Info`] from _`cargo`_ env variables such as + /// * `CARGO_PGK_NAME` + /// * `CARGO_PGK_VERSION` + /// * `CARGO_PGK_DESCRIPTION` + /// * `CARGO_PGK_AUTHORS` + /// * `CARGO_PGK_LICENSE` + pub fn from_env() -> Self { + let name = std::env::var("CARGO_PKG_NAME").ok(); + let version = std::env::var("CARGO_PKG_VERSION").ok(); + let description = std::env::var("CARGO_PKG_DESCRIPTION").ok(); + let contact = std::env::var("CARGO_PKG_AUTHORS") + .ok() + .and_then(|authors| Contact::try_from(authors).ok()) + .and_then(|contact| { + if contact.name.is_none() && contact.email.is_none() && contact.url.is_none() { + None + } else { + Some(contact) + } + }); + let license = std::env::var("CARGO_PKG_LICENSE").ok().map(License::from); + + Info { + title: name.map(|name| name.into()), + version: version.map(|version| version.into()), + description: description.map(|description| description.into()), + contact, + license, + ..Default::default() + } + } + + /// Merge given info arguments to [`Info`] created from `CARGO_*` env arguments. + pub fn merge_with_env_args(info: Option<Info>) -> Info { + let mut from_env = Info::from_env(); + if let Some(info) = info { + if info.title.is_some() { + from_env.title = info.title; + } + + if info.terms_of_service.is_some() { + from_env.terms_of_service = info.terms_of_service; + } + + if info.description.is_some() { + from_env.description = info.description; + } + + if info.license.is_some() { + from_env.license = info.license; + } + + if info.contact.is_some() { + from_env.contact = info.contact; + } + + if info.version.is_some() { + from_env.version = info.version; + } + } + + from_env + } +} + +impl Parse for Info<'_> { + fn parse(input: syn::parse::ParseStream) -> syn::Result<Self> { + let mut info = Info::default(); + + while !input.is_empty() { + let ident = input.parse::<Ident>()?; + let attribute_name = &*ident.to_string(); + + match attribute_name { + "title" => { + info.title = Some(parse_utils::parse_next(input, || { + input.parse::<LitStrOrExpr>() + })?) + } + "version" => { + info.version = Some(parse_utils::parse_next(input, || { + input.parse::<LitStrOrExpr>() + })?) + } + "description" => { + info.description = Some(parse_utils::parse_next(input, || { + input.parse::<LitStrOrExpr>() + })?) + } + "terms_of_service" => { + info.terms_of_service = Some(parse_utils::parse_next(input, || { + input.parse::<LitStrOrExpr>() + })?) + } + "license" => { + let license_stream; + parenthesized!(license_stream in input); + info.license = Some(license_stream.parse()?) + } + "contact" => { + let contact_stream; + parenthesized!(contact_stream in input); + info.contact = Some(contact_stream.parse()?) + } + _ => { + return Err(Error::new(ident.span(), format!("unexpected attribute: {attribute_name}, expected one of: title, terms_of_service, version, description, license, contact"))); + } + } + if !input.is_empty() { + input.parse::<Comma>()?; + } + } + + Ok(info) + } +} + +impl ToTokens for Info<'_> { + fn to_tokens(&self, tokens: &mut TokenStream2) { + let title = self.title.as_ref().map(|title| quote! { .title(#title) }); + let version = self + .version + .as_ref() + .map(|version| quote! { .version(#version) }); + let terms_of_service = self + .terms_of_service + .as_ref() + .map(|terms_of_service| quote! {.terms_of_service(Some(#terms_of_service))}); + let description = self + .description + .as_ref() + .map(|description| quote! { .description(Some(#description)) }); + let license = self + .license + .as_ref() + .map(|license| quote! { .license(Some(#license)) }); + let contact = self + .contact + .as_ref() + .map(|contact| quote! { .contact(Some(#contact)) }); + + tokens.extend(quote! { + fastapi::openapi::InfoBuilder::new() + #title + #version + #terms_of_service + #description + #license + #contact + }) + } +} + +#[derive(Default, Clone)] +#[cfg_attr(feature = "debug", derive(Debug))] +pub(super) struct License<'l> { + name: Cow<'l, str>, + url: Option<Cow<'l, str>>, + identifier: Cow<'l, str>, +} + +impl Parse for License<'_> { + fn parse(input: syn::parse::ParseStream) -> syn::Result<Self> { + let mut license = License::default(); + + while !input.is_empty() { + let ident = input.parse::<Ident>()?; + let attribute_name = &*ident.to_string(); + + match attribute_name { + "name" => { + license.name = Cow::Owned( + parse_utils::parse_next(input, || input.parse::<LitStr>())?.value(), + ) + } + "url" => { + license.url = Some(Cow::Owned( + parse_utils::parse_next(input, || input.parse::<LitStr>())?.value(), + )) + } + "identifier" => { + license.identifier = Cow::Owned( + parse_utils::parse_next(input, || input.parse::<LitStr>())?.value(), + ) + } + _ => { + return Err(Error::new( + ident.span(), + format!( + "unexpected attribute: {attribute_name}, expected one of: name, url" + ), + )); + } + } + if !input.is_empty() { + input.parse::<Comma>()?; + } + } + + Ok(license) + } +} + +impl ToTokens for License<'_> { + fn to_tokens(&self, tokens: &mut TokenStream2) { + let name = &self.name; + let url = self.url.as_ref().map(|url| quote! { .url(Some(#url))}); + let identifier = if !self.identifier.is_empty() { + let identifier = self.identifier.as_ref(); + quote! { .identifier(Some(#identifier))} + } else { + TokenStream2::new() + }; + + tokens.extend(quote! { + fastapi::openapi::info::LicenseBuilder::new() + .name(#name) + #url + #identifier + .build() + }) + } +} + +impl From<String> for License<'_> { + fn from(string: String) -> Self { + License { + name: Cow::Owned(string), + ..Default::default() + } + } +} + +#[derive(Default, Clone)] +#[cfg_attr(feature = "debug", derive(Debug))] +pub(super) struct Contact<'c> { + name: Option<Cow<'c, str>>, + email: Option<Cow<'c, str>>, + url: Option<Cow<'c, str>>, +} + +impl Parse for Contact<'_> { + fn parse(input: syn::parse::ParseStream) -> syn::Result<Self> { + let mut contact = Contact::default(); + + while !input.is_empty() { + let ident = input.parse::<Ident>()?; + let attribute_name = &*ident.to_string(); + + match attribute_name { + "name" => { + contact.name = Some(Cow::Owned( + parse_utils::parse_next(input, || input.parse::<LitStr>())?.value(), + )) + } + "email" => { + contact.email = Some(Cow::Owned( + parse_utils::parse_next(input, || input.parse::<LitStr>())?.value(), + )) + } + "url" => { + contact.url = Some(Cow::Owned( + parse_utils::parse_next(input, || input.parse::<LitStr>())?.value(), + )) + } + _ => { + return Err(Error::new( + ident.span(), + format!("unexpected attribute: {attribute_name}, expected one of: name, email, url"), + )); + } + } + if !input.is_empty() { + input.parse::<Comma>()?; + } + } + + Ok(contact) + } +} + +impl ToTokens for Contact<'_> { + fn to_tokens(&self, tokens: &mut TokenStream2) { + let name = self.name.as_ref().map(|name| quote! { .name(Some(#name)) }); + let email = self + .email + .as_ref() + .map(|email| quote! { .email(Some(#email)) }); + let url = self.url.as_ref().map(|url| quote! { .url(Some(#url)) }); + + tokens.extend(quote! { + fastapi::openapi::info::ContactBuilder::new() + #name + #email + #url + .build() + }) + } +} + +impl TryFrom<String> for Contact<'_> { + type Error = io::Error; + + fn try_from(value: String) -> Result<Self, Self::Error> { + if let Some((name, email)) = get_parsed_author(value.split(':').next()) { + let non_empty = |value: &str| -> Option<Cow<'static, str>> { + if !value.is_empty() { + Some(Cow::Owned(value.to_string())) + } else { + None + } + }; + Ok(Contact { + name: non_empty(name), + email: non_empty(email), + ..Default::default() + }) + } else { + Err(io::Error::new( + io::ErrorKind::Other, + format!("invalid contact: {value}"), + )) + } + } +} + +fn get_parsed_author(author: Option<&str>) -> Option<(&str, &str)> { + author.map(|author| { + let mut author_iter = author.split('<'); + + let name = author_iter.next().unwrap_or_default(); + let mut email = author_iter.next().unwrap_or_default(); + if !email.is_empty() { + email = &email[..email.len() - 1]; + } + + (name.trim_end(), email) + }) +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn parse_author_with_email_success() { + let author = "Tessu Tester <tessu@steps.com>"; + + if let Some((name, email)) = get_parsed_author(Some(author)) { + assert_eq!( + name, "Tessu Tester", + "expected name {} != {}", + "Tessu Tester", name + ); + assert_eq!( + email, "tessu@steps.com", + "expected email {} != {}", + "tessu@steps.com", email + ); + } else { + panic!("Expected Some(Tessu Tester, tessu@steps.com), but was none") + } + } + + #[test] + fn parse_author_only_name() { + let author = "Tessu Tester"; + + if let Some((name, email)) = get_parsed_author(Some(author)) { + assert_eq!( + name, "Tessu Tester", + "expected name {} != {}", + "Tessu Tester", name + ); + assert_eq!(email, "", "expected email {} != {}", "", email); + } else { + panic!("Expected Some(Tessu Tester, ), but was none") + } + } + + #[test] + fn contact_from_only_name() { + let author = "Suzy Lin"; + let contanct = Contact::try_from(author.to_string()).unwrap(); + + assert!(contanct.name.is_some(), "Suzy should have name"); + assert!(contanct.email.is_none(), "Suzy should not have email"); + } + + #[test] + fn contact_from_name_and_email() { + let author = "Suzy Lin <suzy@lin.com>"; + let contanct = Contact::try_from(author.to_string()).unwrap(); + + assert!(contanct.name.is_some(), "Suzy should have name"); + assert!(contanct.email.is_some(), "Suzy should have email"); + } + + #[test] + fn contact_from_empty() { + let author = ""; + let contact = Contact::try_from(author.to_string()).unwrap(); + + assert!(contact.name.is_none(), "Contact name should be empty"); + assert!(contact.email.is_none(), "Contact email should be empty"); + } +} diff --git a/fastapi-gen/src/path.rs b/fastapi-gen/src/path.rs new file mode 100644 index 0000000..eb0a62e --- /dev/null +++ b/fastapi-gen/src/path.rs @@ -0,0 +1,806 @@ +use std::borrow::Cow; +use std::ops::Deref; +use std::{io::Error, str::FromStr}; + +use proc_macro2::{Ident, Span, TokenStream as TokenStream2}; +use quote::{quote, quote_spanned, ToTokens}; +use syn::punctuated::Punctuated; +use syn::spanned::Spanned; +use syn::token::Comma; +use syn::{parenthesized, parse::Parse, Token}; +use syn::{Expr, ExprLit, Lit, LitStr}; + +use crate::component::{ComponentSchema, GenericType, TypeTree}; +use crate::{ + as_tokens_or_diagnostics, parse_utils, Deprecated, Diagnostics, OptionExt, ToTokensDiagnostics, +}; +use crate::{schema_type::SchemaType, security_requirement::SecurityRequirementsAttr, Array}; + +use self::response::Response; +use self::{parameter::Parameter, request_body::RequestBodyAttr, response::Responses}; + +pub mod example; +pub mod handler; +pub mod media_type; +pub mod parameter; +mod request_body; +pub mod response; +mod status; + +const PATH_STRUCT_PREFIX: &str = "__path_"; + +#[inline] +pub fn format_path_ident(fn_name: Cow<'_, Ident>) -> Cow<'_, Ident> { + Cow::Owned(quote::format_ident!( + "{PATH_STRUCT_PREFIX}{}", + fn_name.as_ref() + )) +} + +#[derive(Default)] +#[cfg_attr(feature = "debug", derive(Debug))] +pub struct PathAttr<'p> { + methods: Vec<HttpMethod>, + request_body: Option<RequestBodyAttr<'p>>, + responses: Vec<Response<'p>>, + pub(super) path: Option<parse_utils::LitStrOrExpr>, + operation_id: Option<Expr>, + tag: Option<parse_utils::LitStrOrExpr>, + tags: Vec<parse_utils::LitStrOrExpr>, + params: Vec<Parameter<'p>>, + security: Option<Array<'p, SecurityRequirementsAttr>>, + context_path: Option<parse_utils::LitStrOrExpr>, + impl_for: Option<Ident>, + description: Option<parse_utils::LitStrOrExpr>, + summary: Option<parse_utils::LitStrOrExpr>, +} + +impl<'p> PathAttr<'p> { + #[cfg(feature = "auto_into_responses")] + pub fn responses_from_into_responses(&mut self, ty: &'p syn::TypePath) { + self.responses + .push(Response::IntoResponses(Cow::Borrowed(ty))) + } + + #[cfg(any( + feature = "actix_extras", + feature = "rocket_extras", + feature = "axum_extras" + ))] + pub fn update_request_body(&mut self, schema: Option<crate::ext::ExtSchema<'p>>) { + use self::media_type::Schema; + if self.request_body.is_none() { + if let Some(schema) = schema { + self.request_body = Some(RequestBodyAttr::from_schema(Schema::Ext(schema))); + } + } + } + + /// Update path with external parameters from extensions. + #[cfg(any( + feature = "actix_extras", + feature = "rocket_extras", + feature = "axum_extras" + ))] + pub fn update_parameters_ext<I: IntoIterator<Item = Parameter<'p>>>( + &mut self, + ext_parameters: I, + ) { + let ext_params = ext_parameters.into_iter(); + + let (existing_incoming_params, new_params): (Vec<Parameter>, Vec<Parameter>) = + ext_params.partition(|param| self.params.iter().any(|p| p == param)); + + for existing_incoming in existing_incoming_params { + if let Some(param) = self.params.iter_mut().find(|p| **p == existing_incoming) { + param.merge(existing_incoming); + } + } + + self.params.extend( + new_params + .into_iter() + .filter(|param| !matches!(param, Parameter::IntoParamsIdent(_))), + ); + } +} + +impl Parse for PathAttr<'_> { + fn parse(input: syn::parse::ParseStream) -> syn::Result<Self> { + const EXPECTED_ATTRIBUTE_MESSAGE: &str = "unexpected identifier, expected any of: method, get, post, put, delete, options, head, patch, trace, operation_id, path, request_body, responses, params, tag, security, context_path, description, summary"; + let mut path_attr = PathAttr::default(); + + while !input.is_empty() { + let ident = input.parse::<Ident>().map_err(|error| { + syn::Error::new( + error.span(), + format!("{EXPECTED_ATTRIBUTE_MESSAGE}, {error}"), + ) + })?; + let attribute_name = &*ident.to_string(); + + match attribute_name { + "method" => { + path_attr.methods = + parse_utils::parse_parethesized_terminated::<HttpMethod, Comma>(input)? + .into_iter() + .collect() + } + "operation_id" => { + path_attr.operation_id = + Some(parse_utils::parse_next(input, || Expr::parse(input))?); + } + "path" => { + path_attr.path = Some(parse_utils::parse_next_literal_str_or_expr(input)?); + } + "request_body" => { + path_attr.request_body = Some(input.parse::<RequestBodyAttr>()?); + } + "responses" => { + let responses; + parenthesized!(responses in input); + path_attr.responses = + Punctuated::<Response, Token![,]>::parse_terminated(&responses) + .map(|punctuated| punctuated.into_iter().collect::<Vec<Response>>())?; + } + "params" => { + let params; + parenthesized!(params in input); + path_attr.params = + Punctuated::<Parameter, Token![,]>::parse_terminated(¶ms) + .map(|punctuated| punctuated.into_iter().collect::<Vec<Parameter>>())?; + } + "tag" => { + path_attr.tag = Some(parse_utils::parse_next_literal_str_or_expr(input)?); + } + "tags" => { + path_attr.tags = parse_utils::parse_next(input, || { + let tags; + syn::bracketed!(tags in input); + Punctuated::<parse_utils::LitStrOrExpr, Token![,]>::parse_terminated(&tags) + })? + .into_iter() + .collect::<Vec<_>>(); + } + "security" => { + let security; + parenthesized!(security in input); + path_attr.security = Some(parse_utils::parse_groups_collect(&security)?) + } + "context_path" => { + path_attr.context_path = + Some(parse_utils::parse_next_literal_str_or_expr(input)?) + } + "impl_for" => { + path_attr.impl_for = + Some(parse_utils::parse_next(input, || input.parse::<Ident>())?); + } + "description" => { + path_attr.description = + Some(parse_utils::parse_next_literal_str_or_expr(input)?) + } + "summary" => { + path_attr.summary = Some(parse_utils::parse_next_literal_str_or_expr(input)?) + } + _ => { + if let Some(path_operation) = + attribute_name.parse::<HttpMethod>().into_iter().next() + { + path_attr.methods = vec![path_operation] + } else { + return Err(syn::Error::new(ident.span(), EXPECTED_ATTRIBUTE_MESSAGE)); + } + } + } + + if !input.is_empty() { + input.parse::<Token![,]>()?; + } + } + + Ok(path_attr) + } +} + +/// Path operation HTTP method +#[cfg_attr(feature = "debug", derive(Debug))] +pub enum HttpMethod { + Get, + Post, + Put, + Delete, + Options, + Head, + Patch, + Trace, +} + +impl Parse for HttpMethod { + fn parse(input: syn::parse::ParseStream) -> syn::Result<Self> { + let method = input + .parse::<Ident>() + .map_err(|error| syn::Error::new(error.span(), HttpMethod::ERROR_MESSAGE))?; + + method + .to_string() + .parse::<HttpMethod>() + .map_err(|_| syn::Error::new(method.span(), HttpMethod::ERROR_MESSAGE)) + } +} + +impl HttpMethod { + const ERROR_MESSAGE: &'static str = "unexpected http method, expected one of: get, post, put, delete, options, head, patch, trace"; + /// Create path operation from ident + /// + /// Ident must have value of http request type as lower case string such as `get`. + #[cfg(any(feature = "actix_extras", feature = "rocket_extras"))] + pub fn from_ident(ident: &Ident) -> Result<Self, Diagnostics> { + let name = &*ident.to_string(); + name + .parse::<HttpMethod>() + .map_err(|error| { + let mut diagnostics = Diagnostics::with_span(ident.span(), error.to_string()); + if name == "connect" { + diagnostics = diagnostics.note("HTTP method `CONNET` is not supported by OpenAPI spec <https://spec.openapis.org/oas/latest.html#path-item-object>"); + } + + diagnostics + }) + } +} + +impl FromStr for HttpMethod { + type Err = Error; + + fn from_str(s: &str) -> Result<Self, Self::Err> { + match s { + "get" => Ok(Self::Get), + "post" => Ok(Self::Post), + "put" => Ok(Self::Put), + "delete" => Ok(Self::Delete), + "options" => Ok(Self::Options), + "head" => Ok(Self::Head), + "patch" => Ok(Self::Patch), + "trace" => Ok(Self::Trace), + _ => Err(Error::new( + std::io::ErrorKind::Other, + HttpMethod::ERROR_MESSAGE, + )), + } + } +} + +impl ToTokens for HttpMethod { + fn to_tokens(&self, tokens: &mut proc_macro2::TokenStream) { + let path_item_type = match self { + Self::Get => quote! { fastapi::openapi::HttpMethod::Get }, + Self::Post => quote! { fastapi::openapi::HttpMethod::Post }, + Self::Put => quote! { fastapi::openapi::HttpMethod::Put }, + Self::Delete => quote! { fastapi::openapi::HttpMethod::Delete }, + Self::Options => quote! { fastapi::openapi::HttpMethod::Options }, + Self::Head => quote! { fastapi::openapi::HttpMethod::Head }, + Self::Patch => quote! { fastapi::openapi::HttpMethod::Patch }, + Self::Trace => quote! { fastapi::openapi::HttpMethod::Trace }, + }; + + tokens.extend(path_item_type); + } +} +pub struct Path<'p> { + path_attr: PathAttr<'p>, + fn_ident: &'p Ident, + ext_methods: Vec<HttpMethod>, + path: Option<String>, + doc_comments: Option<Vec<String>>, + deprecated: bool, +} + +impl<'p> Path<'p> { + pub fn new(path_attr: PathAttr<'p>, fn_ident: &'p Ident) -> Self { + Self { + path_attr, + fn_ident, + ext_methods: Vec::new(), + path: None, + doc_comments: None, + deprecated: false, + } + } + + pub fn ext_methods(mut self, methods: Option<Vec<HttpMethod>>) -> Self { + self.ext_methods = methods.unwrap_or_default(); + + self + } + + pub fn path(mut self, path: Option<String>) -> Self { + self.path = path; + + self + } + + pub fn doc_comments(mut self, doc_comments: Vec<String>) -> Self { + self.doc_comments = Some(doc_comments); + + self + } + + pub fn deprecated(mut self, deprecated: bool) -> Self { + self.deprecated = deprecated; + + self + } +} + +impl<'p> ToTokensDiagnostics for Path<'p> { + fn to_tokens(&self, tokens: &mut proc_macro2::TokenStream) -> Result<(), Diagnostics> { + let fn_name = &*self.fn_ident.to_string(); + let operation_id = self + .path_attr + .operation_id + .clone() + .or(Some( + ExprLit { + attrs: vec![], + lit: Lit::Str(LitStr::new(fn_name, Span::call_site())), + } + .into(), + )) + .ok_or_else(|| { + Diagnostics::new("operation id is not defined for path") + .help(format!( + "Try to define it in #[fastapi::path(operation_id = {})]", + &fn_name + )) + .help("Did you define the #[fastapi::path(...)] over function?") + })?; + + let methods = if !self.path_attr.methods.is_empty() { + &self.path_attr.methods + } else { + &self.ext_methods + }; + if methods.is_empty() { + let diagnostics = || { + Diagnostics::new("path operation(s) is not defined for path") + .help("Did you forget to define it, e.g. #[fastapi::path(get, ...)]") + .help("Or perhaps #[fastapi::path(method(head, get), ...)]") + }; + + #[cfg(any(feature = "actix_extras", feature = "rocket_extras"))] + { + return Err(diagnostics().help( + "Did you forget to define operation path attribute macro e.g #[get(...)]", + )); + } + + #[cfg(not(any(feature = "actix_extras", feature = "rocket_extras")))] + return Err(diagnostics()); + } + + let method_operations = methods.iter().collect::<Array<_>>(); + + let path = self + .path_attr + .path + .as_ref() + .map(|path| path.to_token_stream()) + .or(self.path.as_ref().map(|path| path.to_token_stream())) + .ok_or_else(|| { + let diagnostics = || { + Diagnostics::new("path is not defined for #[fastapi::path(...)]").help( + r#"Did you forget to define it in #[fastapi::path(..., path = "...")]"#, + ) + }; + + #[cfg(any(feature = "actix_extras", feature = "rocket_extras"))] + { + diagnostics().help( + "Did you forget to define operation path attribute macro e.g #[get(...)]", + ) + } + + #[cfg(not(any(feature = "actix_extras", feature = "rocket_extras")))] + diagnostics() + })?; + + let path_with_context_path = self + .path_attr + .context_path + .as_ref() + .map(|context_path| { + let context_path = context_path.to_token_stream(); + let context_path_tokens = quote! { + format!("{}{}", + #context_path, + #path + ) + }; + context_path_tokens + }) + .unwrap_or_else(|| { + quote! { + String::from(#path) + } + }); + + let split_comment = self.doc_comments.as_ref().map(|comments| { + let mut split = comments.split(|comment| comment.trim().is_empty()); + let summary = split + .by_ref() + .next() + .map(|summary| summary.join("\n")) + .unwrap_or_default(); + let description = split.map(|lines| lines.join("\n")).collect::<Vec<_>>(); + + (summary, description) + }); + + let summary = self + .path_attr + .summary + .as_ref() + .map(Summary::Value) + .or_else(|| { + split_comment + .as_ref() + .map(|(summary, _)| Summary::Str(summary)) + }); + + let description = self + .path_attr + .description + .as_ref() + .map(Description::Value) + .or_else(|| { + split_comment + .as_ref() + .map(|(_, description)| Description::Vec(description)) + }); + + let operation: Operation = Operation { + deprecated: self.deprecated, + operation_id, + summary, + description, + parameters: self.path_attr.params.as_ref(), + request_body: self.path_attr.request_body.as_ref(), + responses: self.path_attr.responses.as_ref(), + security: self.path_attr.security.as_ref(), + }; + let operation = as_tokens_or_diagnostics!(&operation); + + fn to_schema_references( + mut schemas: TokenStream2, + (is_inline, component_schema): (bool, ComponentSchema), + ) -> TokenStream2 { + for reference in component_schema.schema_references { + let name = &reference.name; + let tokens = &reference.tokens; + let references = &reference.references; + + #[cfg(feature = "config")] + let should_collect_schema = (matches!( + crate::CONFIG.schema_collect, + fastapi_config::SchemaCollect::NonInlined + ) && !is_inline) + || matches!( + crate::CONFIG.schema_collect, + fastapi_config::SchemaCollect::All + ); + #[cfg(not(feature = "config"))] + let should_collect_schema = !is_inline; + if should_collect_schema { + schemas.extend(quote!( schemas.push((#name, #tokens)); )); + } + schemas.extend(quote!( #references; )); + } + + schemas + } + + let response_schemas = self + .path_attr + .responses + .iter() + .map(|response| response.get_component_schemas()) + .collect::<Result<Vec<_>, Diagnostics>>()? + .into_iter() + .flatten() + .fold(TokenStream2::new(), to_schema_references); + + let schemas = self + .path_attr + .request_body + .as_ref() + .map_try(|request_body| request_body.get_component_schemas())? + .into_iter() + .flatten() + .fold(TokenStream2::new(), to_schema_references); + + let mut tags = self.path_attr.tags.clone(); + if let Some(tag) = self.path_attr.tag.as_ref() { + // if defined tag is the first before the additional tags + tags.insert(0, tag.clone()); + } + let tags_list = tags.into_iter().collect::<Array<_>>(); + + let impl_for = if let Some(impl_for) = &self.path_attr.impl_for { + Cow::Borrowed(impl_for) + } else { + let path_struct = format_path_ident(Cow::Borrowed(self.fn_ident)); + + tokens.extend(quote! { + #[allow(non_camel_case_types)] + #[doc(hidden)] + #[derive(Clone)] + pub struct #path_struct; + }); + + #[cfg(feature = "actix_extras")] + { + // Add supporting passthrough implementations only if actix-web service config + // is implemented and no impl_for has been defined + if self.path_attr.impl_for.is_none() && !self.ext_methods.is_empty() { + let fn_ident = self.fn_ident; + tokens.extend(quote! { + impl ::actix_web::dev::HttpServiceFactory for #path_struct { + fn register(self, __config: &mut actix_web::dev::AppService) { + ::actix_web::dev::HttpServiceFactory::register(#fn_ident, __config); + } + } + impl<'t> fastapi::__dev::Tags<'t> for #fn_ident { + fn tags() -> Vec<&'t str> { + #path_struct::tags() + } + } + impl fastapi::Path for #fn_ident { + fn path() -> String { + #path_struct::path() + } + + fn methods() -> Vec<fastapi::openapi::path::HttpMethod> { + #path_struct::methods() + } + + fn operation() -> fastapi::openapi::path::Operation { + #path_struct::operation() + } + } + + impl fastapi::__dev::SchemaReferences for #fn_ident { + fn schemas(schemas: &mut Vec<(String, fastapi::openapi::RefOr<fastapi::openapi::schema::Schema>)>) { + <#path_struct as fastapi::__dev::SchemaReferences>::schemas(schemas); + } + } + }) + } + } + + path_struct + }; + + tokens.extend(quote! { + impl<'t> fastapi::__dev::Tags<'t> for #impl_for { + fn tags() -> Vec<&'t str> { + #tags_list.into() + } + } + impl fastapi::Path for #impl_for { + fn path() -> String { + #path_with_context_path + } + + fn methods() -> Vec<fastapi::openapi::path::HttpMethod> { + #method_operations.into() + } + + fn operation() -> fastapi::openapi::path::Operation { + use fastapi::openapi::ToArray; + use std::iter::FromIterator; + #operation.into() + } + } + + impl fastapi::__dev::SchemaReferences for #impl_for { + fn schemas(schemas: &mut Vec<(String, fastapi::openapi::RefOr<fastapi::openapi::schema::Schema>)>) { + #schemas + #response_schemas + } + } + + }); + + Ok(()) + } +} + +#[cfg_attr(feature = "debug", derive(Debug))] +struct Operation<'a> { + operation_id: Expr, + summary: Option<Summary<'a>>, + description: Option<Description<'a>>, + deprecated: bool, + parameters: &'a Vec<Parameter<'a>>, + request_body: Option<&'a RequestBodyAttr<'a>>, + responses: &'a Vec<Response<'a>>, + security: Option<&'a Array<'a, SecurityRequirementsAttr>>, +} + +impl ToTokensDiagnostics for Operation<'_> { + fn to_tokens(&self, tokens: &mut TokenStream2) -> Result<(), Diagnostics> { + tokens.extend(quote! { fastapi::openapi::path::OperationBuilder::new() }); + + if let Some(request_body) = self.request_body { + let request_body = as_tokens_or_diagnostics!(request_body); + tokens.extend(quote! { + .request_body(Some(#request_body)) + }) + } + + let responses = Responses(self.responses); + let responses = as_tokens_or_diagnostics!(&responses); + tokens.extend(quote! { + .responses(#responses) + }); + if let Some(security_requirements) = self.security { + tokens.extend(quote! { + .securities(Some(#security_requirements)) + }) + } + let operation_id = &self.operation_id; + tokens.extend(quote_spanned! { operation_id.span() => + .operation_id(Some(#operation_id)) + }); + + if self.deprecated { + let deprecated: Deprecated = self.deprecated.into(); + tokens.extend(quote!( .deprecated(Some(#deprecated)))) + } + + if let Some(summary) = &self.summary { + summary.to_tokens(tokens); + } + + if let Some(description) = &self.description { + description.to_tokens(tokens); + } + + for parameter in self.parameters { + parameter.to_tokens(tokens)?; + } + + Ok(()) + } +} + +#[cfg_attr(feature = "debug", derive(Debug))] +enum Description<'a> { + Value(&'a parse_utils::LitStrOrExpr), + Vec(&'a [String]), +} + +impl ToTokens for Description<'_> { + fn to_tokens(&self, tokens: &mut TokenStream2) { + match self { + Self::Value(value) => tokens.extend(quote! { + .description(Some(#value)) + }), + Self::Vec(vec) => { + let description = vec.join("\n\n"); + + if !description.is_empty() { + tokens.extend(quote! { + .description(Some(#description)) + }) + } + } + } + } +} + +#[cfg_attr(feature = "debug", derive(Debug))] +enum Summary<'a> { + Value(&'a parse_utils::LitStrOrExpr), + Str(&'a str), +} + +impl ToTokens for Summary<'_> { + fn to_tokens(&self, tokens: &mut TokenStream2) { + match self { + Self::Value(value) => tokens.extend(quote! { + .summary(Some(#value)) + }), + Self::Str(str) if !str.is_empty() => tokens.extend(quote! { + .summary(Some(#str)) + }), + _ => (), + } + } +} + +pub trait PathTypeTree { + /// Resolve default content type based on current [`Type`]. + fn get_default_content_type(&self) -> Cow<'static, str>; + + /// Check whether [`TypeTree`] is a Vec, slice, array or other supported array type + fn is_array(&self) -> bool; +} + +impl<'p> PathTypeTree for TypeTree<'p> { + /// Resolve default content type based on current [`Type`]. + fn get_default_content_type(&self) -> Cow<'static, str> { + if self.is_array() + && self + .children + .as_ref() + .map(|children| { + children + .iter() + .flat_map(|child| child.path.as_ref().zip(Some(child.is_option()))) + .any(|(path, nullable)| { + SchemaType { + path: Cow::Borrowed(path), + nullable, + } + .is_byte() + }) + }) + .unwrap_or(false) + { + Cow::Borrowed("application/octet-stream") + } else if self + .path + .as_ref() + .map(|path| SchemaType { + path: Cow::Borrowed(path.deref()), + nullable: self.is_option(), + }) + .map(|schema_type| schema_type.is_primitive()) + .unwrap_or(false) + { + Cow::Borrowed("text/plain") + } else { + Cow::Borrowed("application/json") + } + } + + /// Check whether [`TypeTree`] is a Vec, slice, array or other supported array type + fn is_array(&self) -> bool { + match self.generic_type { + Some(GenericType::Vec | GenericType::Set) => true, + Some(_) => self + .children + .as_ref() + .unwrap() + .iter() + .any(|child| child.is_array()), + None => false, + } + } +} + +mod parse { + use syn::parse::ParseStream; + use syn::punctuated::Punctuated; + use syn::token::Comma; + use syn::Result; + + use crate::path::example::Example; + use crate::{parse_utils, AnyValue}; + + #[inline] + pub(super) fn description(input: ParseStream) -> Result<parse_utils::LitStrOrExpr> { + parse_utils::parse_next_literal_str_or_expr(input) + } + + #[inline] + pub(super) fn example(input: ParseStream) -> Result<AnyValue> { + parse_utils::parse_next(input, || AnyValue::parse_lit_str_or_json(input)) + } + + #[inline] + pub(super) fn examples(input: ParseStream) -> Result<Punctuated<Example, Comma>> { + parse_utils::parse_comma_separated_within_parenthesis(input) + } +} diff --git a/fastapi-gen/src/path/example.rs b/fastapi-gen/src/path/example.rs new file mode 100644 index 0000000..a9d3891 --- /dev/null +++ b/fastapi-gen/src/path/example.rs @@ -0,0 +1,106 @@ +use proc_macro2::{Ident, TokenStream}; +use quote::{quote, ToTokens}; +use syn::parse::{Parse, ParseStream}; +use syn::token::Comma; +use syn::{parenthesized, Error, LitStr, Token}; + +use crate::{parse_utils, AnyValue}; + +// (name = (summary = "...", description = "...", value = "..", external_value = "...")) +#[derive(Default)] +#[cfg_attr(feature = "debug", derive(Debug))] +pub struct Example { + pub(super) name: String, + pub(super) summary: Option<String>, + pub(super) description: Option<String>, + pub(super) value: Option<AnyValue>, + pub(super) external_value: Option<String>, +} + +impl Parse for Example { + fn parse(input: ParseStream) -> syn::Result<Self> { + let example_stream; + parenthesized!(example_stream in input); + let mut example = Example { + name: example_stream.parse::<LitStr>()?.value(), + ..Default::default() + }; + example_stream.parse::<Token![=]>()?; + + let content; + parenthesized!(content in example_stream); + + while !content.is_empty() { + let ident = content.parse::<Ident>()?; + let attribute_name = &*ident.to_string(); + match attribute_name { + "summary" => { + example.summary = Some( + parse_utils::parse_next(&content, || content.parse::<LitStr>())? + .value(), + ) + } + "description" => { + example.description = Some( + parse_utils::parse_next(&content, || content.parse::<LitStr>())? + .value(), + ) + } + "value" => { + example.value = Some(parse_utils::parse_next(&content, || { + AnyValue::parse_json(&content) + })?) + } + "external_value" => { + example.external_value = Some( + parse_utils::parse_next(&content, || content.parse::<LitStr>())? + .value(), + ) + } + _ => { + return Err( + Error::new( + ident.span(), + format!("unexpected attribute: {attribute_name}, expected one of: summary, description, value, external_value") + ) + ) + } + } + + if !content.is_empty() { + content.parse::<Comma>()?; + } + } + + Ok(example) + } +} + +impl ToTokens for Example { + fn to_tokens(&self, tokens: &mut TokenStream) { + let summary = self + .summary + .as_ref() + .map(|summary| quote!(.summary(#summary))); + let description = self + .description + .as_ref() + .map(|description| quote!(.description(#description))); + let value = self + .value + .as_ref() + .map(|value| quote!(.value(Some(#value)))); + let external_value = self + .external_value + .as_ref() + .map(|external_value| quote!(.external_value(#external_value))); + + tokens.extend(quote! { + fastapi::openapi::example::ExampleBuilder::new() + #summary + #description + #value + #external_value + }) + } +} diff --git a/fastapi-gen/src/path/handler.rs b/fastapi-gen/src/path/handler.rs new file mode 100644 index 0000000..30fbd1a --- /dev/null +++ b/fastapi-gen/src/path/handler.rs @@ -0,0 +1,24 @@ +use quote::quote; +use syn::ItemFn; + +use crate::{as_tokens_or_diagnostics, ToTokensDiagnostics}; + +use super::Path; + +pub struct Handler<'p> { + pub path: Path<'p>, + pub handler_fn: &'p ItemFn, +} + +impl<'p> ToTokensDiagnostics for Handler<'p> { + fn to_tokens(&self, tokens: &mut proc_macro2::TokenStream) -> Result<(), crate::Diagnostics> { + let ast_fn = &self.handler_fn; + let path = as_tokens_or_diagnostics!(&self.path); + tokens.extend(quote! { + #path + #ast_fn + }); + + Ok(()) + } +} diff --git a/fastapi-gen/src/path/media_type.rs b/fastapi-gen/src/path/media_type.rs new file mode 100644 index 0000000..d913775 --- /dev/null +++ b/fastapi-gen/src/path/media_type.rs @@ -0,0 +1,402 @@ +use std::borrow::Cow; + +use proc_macro2::TokenStream; +use quote::{quote, ToTokens}; +use syn::parse::{Parse, ParseStream}; +use syn::punctuated::Punctuated; +use syn::token::{Comma, Paren}; +use syn::{Error, Generics, Ident, Token, Type}; + +use crate::component::features::attributes::Inline; +use crate::component::features::Feature; +use crate::component::{ComponentSchema, ComponentSchemaProps, Container, TypeTree, ValueType}; +use crate::ext::ExtSchema; +use crate::{parse_utils, AnyValue, Array, Diagnostics, ToTokensDiagnostics}; + +use super::example::Example; +use super::PathTypeTree; + +/// Parse OpenAPI Media Type object params +/// ( Schema ) +/// ( Schema = "content/type" ) +/// ( "content/type", ), +/// ( "content/type", example = ..., examples(..., ...), encoding(...) ) +#[derive(Default)] +#[cfg_attr(feature = "debug", derive(Debug))] +pub struct MediaTypeAttr<'m> { + pub content_type: Option<parse_utils::LitStrOrExpr>, // if none, true guess + pub schema: Schema<'m>, + pub example: Option<AnyValue>, + pub examples: Punctuated<Example, Comma>, + // econding: String, // TODO parse encoding +} + +impl Parse for MediaTypeAttr<'_> { + fn parse(input: syn::parse::ParseStream) -> syn::Result<Self> { + let mut media_type = MediaTypeAttr::default(); + + let fork = input.fork(); + let is_schema = fork.parse::<DefaultSchema>().is_ok(); + if is_schema { + let schema = input.parse::<DefaultSchema>()?; + + let content_type = if input.parse::<Option<Token![=]>>()?.is_some() { + Some( + input + .parse::<parse_utils::LitStrOrExpr>() + .map_err(|error| { + Error::new( + error.span(), + format!( + r#"missing content type e.g. `"application/json"`, {error}"# + ), + ) + })?, + ) + } else { + None + }; + media_type.schema = Schema::Default(schema); + media_type.content_type = content_type; + } else { + // if schema, the content type is required + let content_type = input + .parse::<parse_utils::LitStrOrExpr>() + .map_err(|error| { + Error::new( + error.span(), + format!("unexpected content, should be `schema`, `schema = content_type` or `content_type`, {error}"), + ) + })?; + media_type.content_type = Some(content_type); + } + + if !input.is_empty() { + input.parse::<Comma>()?; + } + + while !input.is_empty() { + let attribute = input.parse::<Ident>()?; + MediaTypeAttr::parse_named_attributes(&mut media_type, input, &attribute)?; + } + + Ok(media_type) + } +} + +impl<'m> MediaTypeAttr<'m> { + pub fn parse_schema(input: ParseStream) -> syn::Result<DefaultSchema<'m>> { + input.parse() + } + + pub fn parse_named_attributes( + media_type: &mut MediaTypeAttr, + input: ParseStream, + attribute: &Ident, + ) -> syn::Result<()> { + let name = &*attribute.to_string(); + + match name { + "example" => { + media_type.example = Some(parse_utils::parse_next(input, || { + AnyValue::parse_any(input) + })?) + } + "examples" => { + media_type.examples = parse_utils::parse_comma_separated_within_parenthesis(input)? + } + // // TODO implement encoding support + // "encoding" => (), + unexpected => { + return Err(syn::Error::new( + attribute.span(), + format!( + "unexpected attribute: {unexpected}, expected any of: example, examples" + ), + )) + } + } + + if !input.is_empty() { + input.parse::<Comma>()?; + } + + Ok(()) + } +} + +impl ToTokensDiagnostics for MediaTypeAttr<'_> { + fn to_tokens(&self, tokens: &mut proc_macro2::TokenStream) -> Result<(), Diagnostics> { + let schema = &self.schema.try_to_token_stream()?; + let schema_tokens = if schema.is_empty() { + None + } else { + Some(quote! { .schema(Some(#schema)) }) + }; + let example = self + .example + .as_ref() + .map(|example| quote!( .example(Some(#example)) )); + + let examples = self + .examples + .iter() + .map(|example| { + let name = &example.name; + quote!( (#name, #example) ) + }) + .collect::<Array<TokenStream>>(); + let examples = if !examples.is_empty() { + Some(quote!( .examples_from_iter(#examples) )) + } else { + None + }; + + tokens.extend(quote! { + fastapi::openapi::content::ContentBuilder::new() + #schema_tokens + #example + #examples + .into() + }); + + Ok(()) + } +} + +pub trait MediaTypePathExt<'a> { + fn get_component_schema(&self) -> Result<Option<ComponentSchema>, Diagnostics>; +} + +#[cfg_attr(feature = "debug", derive(Debug))] +#[allow(unused)] +pub enum Schema<'a> { + Default(DefaultSchema<'a>), + Ext(ExtSchema<'a>), +} + +impl Default for Schema<'_> { + fn default() -> Self { + Self::Default(DefaultSchema::None) + } +} + +impl Schema<'_> { + pub fn get_type_tree(&self) -> Result<Option<Cow<TypeTree<'_>>>, Diagnostics> { + match self { + Self::Default(def) => def.get_type_tree(), + Self::Ext(ext) => ext.get_type_tree(), + } + } + + pub fn get_default_content_type(&self) -> Result<Cow<'static, str>, Diagnostics> { + match self { + Self::Default(def) => def.get_default_content_type(), + Self::Ext(ext) => ext.get_default_content_type(), + } + } + + pub fn get_component_schema(&self) -> Result<Option<ComponentSchema>, Diagnostics> { + match self { + Self::Default(def) => def.get_component_schema(), + Self::Ext(ext) => ext.get_component_schema(), + } + } + + pub fn is_inline(&self) -> bool { + match self { + Self::Default(def) => match def { + DefaultSchema::TypePath(parsed) => parsed.is_inline, + _ => false, + }, + Self::Ext(_) => false, + } + } +} + +impl ToTokensDiagnostics for Schema<'_> { + fn to_tokens(&self, tokens: &mut TokenStream) -> Result<(), Diagnostics> { + match self { + Self::Default(def) => def.to_tokens(tokens)?, + Self::Ext(ext) => ext.to_tokens(tokens)?, + } + + Ok(()) + } +} + +#[cfg_attr(feature = "debug", derive(Debug))] +#[derive(Default)] +pub enum DefaultSchema<'d> { + Ref(parse_utils::LitStrOrExpr), + TypePath(ParsedType<'d>), + /// for cases where the schema is irrelevant but we just want to return generic + /// `content_type` without actual schema. + #[default] + None, + /// Support for raw tokens as Schema. Used in response derive. + Raw { + tokens: TokenStream, + ty: Cow<'d, Type>, + }, +} + +impl ToTokensDiagnostics for DefaultSchema<'_> { + fn to_tokens(&self, tokens: &mut proc_macro2::TokenStream) -> Result<(), Diagnostics> { + match self { + Self::Ref(reference) => tokens.extend(quote! { + fastapi::openapi::schema::Ref::new(#reference) + }), + Self::TypePath(parsed) => { + let is_inline = parsed.is_inline; + let type_tree = &parsed.to_type_tree()?; + + let component_tokens = ComponentSchema::new(ComponentSchemaProps { + type_tree, + features: vec![Inline::from(is_inline).into()], + description: None, + container: &Container { + generics: &Generics::default(), + }, + })? + .to_token_stream(); + + component_tokens.to_tokens(tokens); + } + Self::Raw { + tokens: raw_tokens, .. + } => { + raw_tokens.to_tokens(tokens); + } + // nada + Self::None => (), + } + + Ok(()) + } +} + +impl<'a> MediaTypePathExt<'a> for TypeTree<'a> { + fn get_component_schema(&self) -> Result<Option<ComponentSchema>, Diagnostics> { + let generics = &if matches!(self.value_type, ValueType::Tuple) { + Generics::default() + } else { + self.get_path_generics()? + }; + + let component_schema = ComponentSchema::new(ComponentSchemaProps { + container: &Container { generics }, + type_tree: self, + description: None, + // get the actual schema, not the reference + features: vec![Feature::Inline(true.into())], + })?; + + Ok(Some(component_schema)) + } +} + +impl DefaultSchema<'_> { + pub fn get_default_content_type(&self) -> Result<Cow<'static, str>, Diagnostics> { + match self { + Self::TypePath(path) => { + let type_tree = path.to_type_tree()?; + Ok(type_tree.get_default_content_type()) + } + Self::Ref(_) => Ok(Cow::Borrowed("application/json")), + Self::Raw { ty, .. } => { + let type_tree = TypeTree::from_type(ty.as_ref())?; + Ok(type_tree.get_default_content_type()) + } + Self::None => Ok(Cow::Borrowed("")), + } + } + + pub fn get_component_schema(&self) -> Result<Option<ComponentSchema>, Diagnostics> { + match self { + Self::TypePath(path) => { + let type_tree = path.to_type_tree()?; + let v = type_tree.get_component_schema()?; + + Ok(v) + } + _ => Ok(None), + } + } + + pub fn get_type_tree(&self) -> Result<Option<Cow<'_, TypeTree<'_>>>, Diagnostics> { + match self { + Self::TypePath(path) => path + .to_type_tree() + .map(|type_tree| Some(Cow::Owned(type_tree))), + _ => Ok(None), + } + } +} + +impl Parse for DefaultSchema<'_> { + fn parse(input: syn::parse::ParseStream) -> syn::Result<Self> { + let fork = input.fork(); + let is_ref = if (fork.parse::<Option<Token![ref]>>()?).is_some() { + fork.peek(Paren) + } else { + false + }; + + if is_ref { + input.parse::<Token![ref]>()?; + let ref_stream; + syn::parenthesized!(ref_stream in input); + + ref_stream.parse().map(Self::Ref) + } else { + input.parse().map(Self::TypePath) + } + } +} + +impl<'r> From<ParsedType<'r>> for Schema<'r> { + fn from(value: ParsedType<'r>) -> Self { + Self::Default(DefaultSchema::TypePath(value)) + } +} + +// inline(syn::TypePath) | syn::TypePath +#[cfg_attr(feature = "debug", derive(Debug))] +pub struct ParsedType<'i> { + pub ty: Cow<'i, Type>, + pub is_inline: bool, +} + +impl ParsedType<'_> { + /// Get's the underlying [`syn::Type`] as [`TypeTree`]. + fn to_type_tree(&self) -> Result<TypeTree, Diagnostics> { + TypeTree::from_type(&self.ty) + } +} + +impl Parse for ParsedType<'_> { + fn parse(input: syn::parse::ParseStream) -> syn::Result<Self> { + let fork = input.fork(); + let is_inline = if let Some(ident) = fork.parse::<Option<syn::Ident>>()? { + ident == "inline" && fork.peek(Paren) + } else { + false + }; + + let ty = if is_inline { + input.parse::<syn::Ident>()?; + let inlined; + syn::parenthesized!(inlined in input); + + inlined.parse::<Type>()? + } else { + input.parse::<Type>()? + }; + + Ok(ParsedType { + ty: Cow::Owned(ty), + is_inline, + }) + } +} diff --git a/fastapi-gen/src/path/parameter.rs b/fastapi-gen/src/path/parameter.rs new file mode 100644 index 0000000..329021d --- /dev/null +++ b/fastapi-gen/src/path/parameter.rs @@ -0,0 +1,546 @@ +use std::{borrow::Cow, fmt::Display}; + +use proc_macro2::{Ident, TokenStream}; +use quote::{quote, quote_spanned, ToTokens}; +use syn::{ + parenthesized, + parse::{Parse, ParseBuffer, ParseStream}, + Error, Generics, LitStr, Token, TypePath, +}; + +use crate::{ + as_tokens_or_diagnostics, + component::{ + self, + features::{ + attributes::{ + AllowReserved, Description, Example, Explode, Format, Nullable, ReadOnly, Style, + WriteOnly, XmlAttr, + }, + impl_into_inner, parse_features, + validation::{ + ExclusiveMaximum, ExclusiveMinimum, MaxItems, MaxLength, Maximum, MinItems, + MinLength, Minimum, MultipleOf, Pattern, + }, + Feature, ToTokensExt, + }, + ComponentSchema, Container, TypeTree, + }, + parse_utils, Diagnostics, Required, ToTokensDiagnostics, +}; + +use super::media_type::ParsedType; + +/// Parameter of request such as in path, header, query or cookie +/// +/// For example path `/users/{id}` the path parameter is used to define +/// type, format and other details of the `{id}` parameter within the path +/// +/// Parse is executed for following formats: +/// +/// * ("id" = String, path, deprecated, description = "Users database id"), +/// * ("id", path, deprecated, description = "Users database id"), +/// +/// The `= String` type statement is optional if automatic resolution is supported. +#[cfg_attr(feature = "debug", derive(Debug))] +#[derive(PartialEq, Eq)] +pub enum Parameter<'a> { + Value(ValueParameter<'a>), + /// Identifier for a struct that implements `IntoParams` trait. + IntoParamsIdent(IntoParamsIdentParameter<'a>), +} + +#[cfg(any( + feature = "actix_extras", + feature = "rocket_extras", + feature = "axum_extras" +))] +impl<'p> Parameter<'p> { + pub fn merge(&mut self, other: Parameter<'p>) { + match (self, other) { + (Self::Value(value), Parameter::Value(other)) => { + let (schema_features, _) = &value.features; + // if value parameter schema has not been defined use the external one + if value.parameter_schema.is_none() { + value.parameter_schema = other.parameter_schema; + } + + if let Some(parameter_schema) = &mut value.parameter_schema { + parameter_schema.features.clone_from(schema_features); + } + } + (Self::IntoParamsIdent(into_params), Parameter::IntoParamsIdent(other)) => { + *into_params = other; + } + _ => (), + } + } +} + +impl Parse for Parameter<'_> { + fn parse(input: ParseStream) -> syn::Result<Self> { + if input.fork().parse::<TypePath>().is_ok() { + Ok(Self::IntoParamsIdent(IntoParamsIdentParameter { + path: Cow::Owned(input.parse::<TypePath>()?.path), + parameter_in_fn: None, + })) + } else { + Ok(Self::Value(input.parse()?)) + } + } +} + +impl ToTokensDiagnostics for Parameter<'_> { + fn to_tokens(&self, tokens: &mut TokenStream) -> Result<(), Diagnostics> { + match self { + Parameter::Value(parameter) => { + let parameter = as_tokens_or_diagnostics!(parameter); + tokens.extend(quote! { .parameter(#parameter) }); + } + Parameter::IntoParamsIdent(IntoParamsIdentParameter { + path, + parameter_in_fn, + }) => { + let last_ident = &path.segments.last().unwrap().ident; + + let default_parameter_in_provider = "e! { || None }; + let parameter_in_provider = parameter_in_fn + .as_ref() + .unwrap_or(default_parameter_in_provider); + tokens.extend(quote_spanned! {last_ident.span()=> + .parameters( + Some(<#path as fastapi::IntoParams>::into_params(#parameter_in_provider)) + ) + }) + } + } + + Ok(()) + } +} + +#[cfg(any( + feature = "actix_extras", + feature = "rocket_extras", + feature = "axum_extras" +))] +impl<'a> From<crate::ext::ValueArgument<'a>> for Parameter<'a> { + fn from(argument: crate::ext::ValueArgument<'a>) -> Self { + Self::Value(ValueParameter { + name: argument.name.unwrap_or_else(|| Cow::Owned(String::new())), + parameter_in: if argument.argument_in == crate::ext::ArgumentIn::Path { + ParameterIn::Path + } else { + ParameterIn::Query + }, + parameter_schema: argument.type_tree.map(|type_tree| ParameterSchema { + parameter_type: ParameterType::External(type_tree), + features: Vec::new(), + }), + ..Default::default() + }) + } +} + +#[cfg(any( + feature = "actix_extras", + feature = "rocket_extras", + feature = "axum_extras" +))] +impl<'a> From<crate::ext::IntoParamsType<'a>> for Parameter<'a> { + fn from(value: crate::ext::IntoParamsType<'a>) -> Self { + Self::IntoParamsIdent(IntoParamsIdentParameter { + path: value.type_path.expect("IntoParams type must have a path"), + parameter_in_fn: Some(value.parameter_in_provider), + }) + } +} + +#[cfg_attr(feature = "debug", derive(Debug))] +struct ParameterSchema<'p> { + parameter_type: ParameterType<'p>, + features: Vec<Feature>, +} + +impl ToTokensDiagnostics for ParameterSchema<'_> { + fn to_tokens(&self, tokens: &mut TokenStream) -> Result<(), Diagnostics> { + let mut to_tokens = |param_schema, required| { + tokens.extend(quote! { .schema(Some(#param_schema)).required(#required) }); + }; + + match &self.parameter_type { + #[cfg(any( + feature = "actix_extras", + feature = "rocket_extras", + feature = "axum_extras" + ))] + ParameterType::External(type_tree) => { + let required: Required = (!type_tree.is_option()).into(); + + to_tokens( + ComponentSchema::new(component::ComponentSchemaProps { + type_tree, + features: self.features.clone(), + description: None, + container: &Container { + generics: &Generics::default(), + }, + })? + .to_token_stream(), + required, + ); + Ok(()) + } + ParameterType::Parsed(inline_type) => { + let type_tree = TypeTree::from_type(inline_type.ty.as_ref())?; + let required: Required = (!type_tree.is_option()).into(); + let mut schema_features = Vec::<Feature>::new(); + schema_features.clone_from(&self.features); + schema_features.push(Feature::Inline(inline_type.is_inline.into())); + + to_tokens( + ComponentSchema::new(component::ComponentSchemaProps { + type_tree: &type_tree, + features: schema_features, + description: None, + container: &Container { + generics: &Generics::default(), + }, + })? + .to_token_stream(), + required, + ); + Ok(()) + } + } + } +} + +#[cfg_attr(feature = "debug", derive(Debug))] +enum ParameterType<'p> { + #[cfg(any( + feature = "actix_extras", + feature = "rocket_extras", + feature = "axum_extras" + ))] + External(crate::component::TypeTree<'p>), + Parsed(ParsedType<'p>), +} + +#[derive(Default)] +#[cfg_attr(feature = "debug", derive(Debug))] +pub struct ValueParameter<'a> { + pub name: Cow<'a, str>, + parameter_in: ParameterIn, + parameter_schema: Option<ParameterSchema<'a>>, + features: (Vec<Feature>, Vec<Feature>), +} + +impl PartialEq for ValueParameter<'_> { + fn eq(&self, other: &Self) -> bool { + self.name == other.name && self.parameter_in == other.parameter_in + } +} + +impl Eq for ValueParameter<'_> {} + +impl Parse for ValueParameter<'_> { + fn parse(input_with_parens: ParseStream) -> syn::Result<Self> { + let input: ParseBuffer; + parenthesized!(input in input_with_parens); + + let mut parameter = ValueParameter::default(); + + if input.peek(LitStr) { + // parse name + let name = input.parse::<LitStr>()?.value(); + parameter.name = Cow::Owned(name); + + if input.peek(Token![=]) { + parameter.parameter_schema = Some(ParameterSchema { + parameter_type: ParameterType::Parsed(parse_utils::parse_next(&input, || { + input.parse().map_err(|error| { + Error::new( + error.span(), + format!("unexpected token, expected type such as String, {error}"), + ) + }) + })?), + features: Vec::new(), + }); + } + } else { + return Err(input.error("unparsable parameter name, expected literal string")); + } + + input.parse::<Token![,]>()?; + + if input.fork().parse::<ParameterIn>().is_ok() { + parameter.parameter_in = input.parse()?; + if !input.is_empty() { + input.parse::<Token![,]>()?; + } + } + + let (schema_features, parameter_features) = input + .parse::<ParameterFeatures>()? + .split_for_parameter_type(); + + parameter.features = (schema_features.clone(), parameter_features); + if let Some(parameter_schema) = &mut parameter.parameter_schema { + parameter_schema.features = schema_features; + } + + Ok(parameter) + } +} + +#[derive(Default)] +#[cfg_attr(feature = "debug", derive(Debug))] +struct ParameterFeatures(Vec<Feature>); + +impl Parse for ParameterFeatures { + fn parse(input: ParseStream) -> syn::Result<Self> { + Ok(Self(parse_features!( + // param features + input as Style, + Explode, + AllowReserved, + Example, + crate::component::features::attributes::Deprecated, + Description, + // param schema features + Format, + WriteOnly, + ReadOnly, + Nullable, + XmlAttr, + MultipleOf, + Maximum, + Minimum, + ExclusiveMaximum, + ExclusiveMinimum, + MaxLength, + MinLength, + Pattern, + MaxItems, + MinItems + ))) + } +} + +impl ParameterFeatures { + /// Split parsed features to two `Vec`s of [`Feature`]s. + /// + /// * First vec contains parameter type schema features. + /// * Second vec contains generic parameter features. + fn split_for_parameter_type(self) -> (Vec<Feature>, Vec<Feature>) { + self.0.into_iter().fold( + (Vec::new(), Vec::new()), + |(mut schema_features, mut param_features), feature| { + match feature { + Feature::Format(_) + | Feature::WriteOnly(_) + | Feature::ReadOnly(_) + | Feature::Nullable(_) + | Feature::XmlAttr(_) + | Feature::MultipleOf(_) + | Feature::Maximum(_) + | Feature::Minimum(_) + | Feature::ExclusiveMaximum(_) + | Feature::ExclusiveMinimum(_) + | Feature::MaxLength(_) + | Feature::MinLength(_) + | Feature::Pattern(_) + | Feature::MaxItems(_) + | Feature::MinItems(_) => { + schema_features.push(feature); + } + _ => { + param_features.push(feature); + } + }; + + (schema_features, param_features) + }, + ) + } +} + +impl_into_inner!(ParameterFeatures); + +impl ToTokensDiagnostics for ValueParameter<'_> { + fn to_tokens(&self, tokens: &mut TokenStream) -> Result<(), Diagnostics> { + let name = &*self.name; + tokens.extend(quote! { + fastapi::openapi::path::ParameterBuilder::from(fastapi::openapi::path::Parameter::new(#name)) + }); + let parameter_in = &self.parameter_in; + tokens.extend(quote! { .parameter_in(#parameter_in) }); + + let (schema_features, param_features) = &self.features; + + tokens.extend(param_features.to_token_stream()?); + + if !schema_features.is_empty() && self.parameter_schema.is_none() { + return Err( + Diagnostics::new("Missing `parameter_type` attribute, cannot define schema features without it.") + .help("See docs for more details <https://docs.rs/fastapi/latest/fastapi/attr.path.html#parameter-type-attributes>") + ); + } + + if let Some(parameter_schema) = &self.parameter_schema { + parameter_schema.to_tokens(tokens)?; + } + + Ok(()) + } +} + +#[cfg_attr(feature = "debug", derive(Debug))] +pub struct IntoParamsIdentParameter<'i> { + pub path: Cow<'i, syn::Path>, + /// quote!{ ... } of function which should implement `parameter_in_provider` for [`fastapi::IntoParams::into_param`] + parameter_in_fn: Option<TokenStream>, +} + +// Compare paths loosely only by segment idents ignoring possible generics +impl PartialEq for IntoParamsIdentParameter<'_> { + fn eq(&self, other: &Self) -> bool { + self.path + .segments + .iter() + .map(|segment| &segment.ident) + .collect::<Vec<_>>() + == other + .path + .segments + .iter() + .map(|segment| &segment.ident) + .collect::<Vec<_>>() + } +} + +impl Eq for IntoParamsIdentParameter<'_> {} + +#[cfg_attr(feature = "debug", derive(Debug))] +#[derive(PartialEq, Eq, Clone, Copy)] +pub enum ParameterIn { + Query, + Path, + Header, + Cookie, +} + +impl ParameterIn { + pub const VARIANTS: &'static [Self] = &[Self::Query, Self::Path, Self::Header, Self::Cookie]; +} + +impl Display for ParameterIn { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + match self { + ParameterIn::Query => write!(f, "Query"), + ParameterIn::Path => write!(f, "Path"), + ParameterIn::Header => write!(f, "Header"), + ParameterIn::Cookie => write!(f, "Cookie"), + } + } +} + +impl Default for ParameterIn { + fn default() -> Self { + Self::Path + } +} + +impl Parse for ParameterIn { + fn parse(input: ParseStream) -> syn::Result<Self> { + fn expected_style() -> String { + let variants: String = ParameterIn::VARIANTS + .iter() + .map(ToString::to_string) + .collect::<Vec<_>>() + .join(", "); + format!("unexpected in, expected one of: {variants}") + } + let style = input.parse::<Ident>()?; + + match &*style.to_string() { + "Path" => Ok(Self::Path), + "Query" => Ok(Self::Query), + "Header" => Ok(Self::Header), + "Cookie" => Ok(Self::Cookie), + _ => Err(Error::new(style.span(), expected_style())), + } + } +} + +impl ToTokens for ParameterIn { + fn to_tokens(&self, tokens: &mut TokenStream) { + tokens.extend(match self { + Self::Path => quote! { fastapi::openapi::path::ParameterIn::Path }, + Self::Query => quote! { fastapi::openapi::path::ParameterIn::Query }, + Self::Header => quote! { fastapi::openapi::path::ParameterIn::Header }, + Self::Cookie => quote! { fastapi::openapi::path::ParameterIn::Cookie }, + }) + } +} + +/// See definitions from `fastapi` crate path.rs +#[derive(Copy, Clone)] +#[cfg_attr(feature = "debug", derive(Debug))] +pub enum ParameterStyle { + Matrix, + Label, + Form, + Simple, + SpaceDelimited, + PipeDelimited, + DeepObject, +} + +impl Parse for ParameterStyle { + fn parse(input: ParseStream) -> syn::Result<Self> { + const EXPECTED_STYLE: &str = "unexpected style, expected one of: Matrix, Label, Form, Simple, SpaceDelimited, PipeDelimited, DeepObject"; + let style = input.parse::<Ident>()?; + + match &*style.to_string() { + "Matrix" => Ok(ParameterStyle::Matrix), + "Label" => Ok(ParameterStyle::Label), + "Form" => Ok(ParameterStyle::Form), + "Simple" => Ok(ParameterStyle::Simple), + "SpaceDelimited" => Ok(ParameterStyle::SpaceDelimited), + "PipeDelimited" => Ok(ParameterStyle::PipeDelimited), + "DeepObject" => Ok(ParameterStyle::DeepObject), + _ => Err(Error::new(style.span(), EXPECTED_STYLE)), + } + } +} + +impl ToTokens for ParameterStyle { + fn to_tokens(&self, tokens: &mut TokenStream) { + match self { + ParameterStyle::Matrix => { + tokens.extend(quote! { fastapi::openapi::path::ParameterStyle::Matrix }) + } + ParameterStyle::Label => { + tokens.extend(quote! { fastapi::openapi::path::ParameterStyle::Label }) + } + ParameterStyle::Form => { + tokens.extend(quote! { fastapi::openapi::path::ParameterStyle::Form }) + } + ParameterStyle::Simple => { + tokens.extend(quote! { fastapi::openapi::path::ParameterStyle::Simple }) + } + ParameterStyle::SpaceDelimited => { + tokens.extend(quote! { fastapi::openapi::path::ParameterStyle::SpaceDelimited }) + } + ParameterStyle::PipeDelimited => { + tokens.extend(quote! { fastapi::openapi::path::ParameterStyle::PipeDelimited }) + } + ParameterStyle::DeepObject => { + tokens.extend(quote! { fastapi::openapi::path::ParameterStyle::DeepObject }) + } + } + } +} diff --git a/fastapi-gen/src/path/request_body.rs b/fastapi-gen/src/path/request_body.rs new file mode 100644 index 0000000..603f93f --- /dev/null +++ b/fastapi-gen/src/path/request_body.rs @@ -0,0 +1,270 @@ +use proc_macro2::{Ident, TokenStream}; +use quote::{quote, ToTokens}; +use syn::parse::ParseStream; +use syn::punctuated::Punctuated; +use syn::token::Paren; +use syn::{parse::Parse, Error, Token}; + +use crate::component::ComponentSchema; +use crate::{parse_utils, Diagnostics, Required, ToTokensDiagnostics}; + +use super::media_type::{MediaTypeAttr, Schema}; +use super::parse; + +/// Parsed information related to request body of path. +/// +/// Supported configuration options: +/// * **content** Request body content object type. Can also be array e.g. `content = [String]`. +/// * **content_type** Defines the actual content mime type of a request body such as `application/json`. +/// If not provided really rough guess logic is used. Basically all primitive types are treated as `text/plain` +/// and Object types are expected to be `application/json` by default. +/// * **description** Additional description for request body content type. +/// # Examples +/// +/// Request body in path with all supported info. Where content type is treated as a String and expected +/// to be xml. +/// ```text +/// #[fastapi::path( +/// request_body(content = String, description = "foobar", content_type = "text/xml"), +/// )] +/// +/// It is also possible to provide the request body type simply by providing only the content object type. +/// ```text +/// #[fastapi::path( +/// request_body = Foo, +/// )] +/// ``` +/// +/// Or the request body content can also be an array as well by surrounding it with brackets `[..]`. +/// ```text +/// #[fastapi::path( +/// request_body = [Foo], +/// )] +/// ``` +/// +/// To define optional request body just wrap the type in `Option<type>`. +/// ```text +/// #[fastapi::path( +/// request_body = Option<[Foo]>, +/// )] +/// ``` +/// +/// request_body( +/// description = "This is request body", +/// content_type = "content/type", +/// content = Schema, +/// example = ..., +/// examples(..., ...), +/// encoding(...) +/// ) +#[derive(Default)] +#[cfg_attr(feature = "debug", derive(Debug))] +pub struct RequestBodyAttr<'r> { + description: Option<parse_utils::LitStrOrExpr>, + content: Vec<MediaTypeAttr<'r>>, +} + +impl<'r> RequestBodyAttr<'r> { + fn new() -> Self { + Self { + description: Default::default(), + content: vec![MediaTypeAttr::default()], + } + } + + #[cfg(any( + feature = "actix_extras", + feature = "rocket_extras", + feature = "axum_extras" + ))] + pub fn from_schema(schema: Schema<'r>) -> RequestBodyAttr<'r> { + Self { + content: vec![MediaTypeAttr { + schema, + ..Default::default() + }], + ..Self::new() + } + } + + pub fn get_component_schemas( + &self, + ) -> Result<impl Iterator<Item = (bool, ComponentSchema)>, Diagnostics> { + Ok(self + .content + .iter() + .map( + |media_type| match media_type.schema.get_component_schema() { + Ok(component_schema) => { + Ok(Some(media_type.schema.is_inline()).zip(component_schema)) + } + Err(error) => Err(error), + }, + ) + .collect::<Result<Vec<_>, Diagnostics>>()? + .into_iter() + .flatten()) + } +} + +impl Parse for RequestBodyAttr<'_> { + fn parse(input: syn::parse::ParseStream) -> syn::Result<Self> { + const EXPECTED_ATTRIBUTE_MESSAGE: &str = + "unexpected attribute, expected any of: content, content_type, description, examples, example"; + let lookahead = input.lookahead1(); + + if lookahead.peek(Paren) { + let group; + syn::parenthesized!(group in input); + + let mut is_content_group = false; + let mut request_body_attr = RequestBodyAttr::new(); + while !group.is_empty() { + let ident = group + .parse::<Ident>() + .map_err(|error| Error::new(error.span(), EXPECTED_ATTRIBUTE_MESSAGE))?; + let attribute_name = &*ident.to_string(); + + match attribute_name { + "content" => { + if group.peek(Token![=]) { + group.parse::<Token![=]>()?; + let schema = MediaTypeAttr::parse_schema(&group)?; + if let Some(media_type) = request_body_attr.content.get_mut(0) { + media_type.schema = Schema::Default(schema); + } + } else if group.peek(Paren) { + is_content_group = true; + fn group_parser<'a>( + input: ParseStream, + ) -> syn::Result<MediaTypeAttr<'a>> { + let buf; + syn::parenthesized!(buf in input); + buf.call(MediaTypeAttr::parse) + } + + let media_type = + parse_utils::parse_comma_separated_within_parethesis_with( + &group, + group_parser, + )? + .into_iter() + .collect::<Vec<_>>(); + + request_body_attr.content = media_type; + } else { + return Err(Error::new(ident.span(), "unexpected content format, expected either `content = schema` or `content(...)`")); + } + } + "content_type" => { + if is_content_group { + return Err(Error::new(ident.span(), "cannot set `content_type` when content(...) is defined in group form")); + } + let content_type = parse_utils::parse_next(&group, || { + parse_utils::LitStrOrExpr::parse(&group) + }).map_err(|error| Error::new(error.span(), + format!(r#"invalid content_type, must be literal string or expression, e.g. "application/json", {error} "#) + ))?; + + if let Some(media_type) = request_body_attr.content.get_mut(0) { + media_type.content_type = Some(content_type); + } + } + "description" => { + request_body_attr.description = Some(parse::description(&group)?); + } + _ => { + MediaTypeAttr::parse_named_attributes( + request_body_attr + .content + .get_mut(0) + .expect("parse request body named attributes must have media type"), + &group, + &ident, + )?; + } + } + + if !group.is_empty() { + group.parse::<Token![,]>()?; + } + } + + Ok(request_body_attr) + } else if lookahead.peek(Token![=]) { + input.parse::<Token![=]>()?; + + let media_type = MediaTypeAttr { + schema: Schema::Default(MediaTypeAttr::parse_schema(input)?), + content_type: None, + example: None, + examples: Punctuated::default(), + }; + + Ok(RequestBodyAttr { + content: vec![media_type], + description: None, + }) + } else { + Err(lookahead.error()) + } + } +} + +impl ToTokensDiagnostics for RequestBodyAttr<'_> { + fn to_tokens(&self, tokens: &mut TokenStream) -> Result<(), Diagnostics> { + let media_types = self + .content + .iter() + .map(|media_type| { + let default_content_type_result = media_type.schema.get_default_content_type(); + let type_tree = media_type.schema.get_type_tree(); + + match (default_content_type_result, type_tree) { + (Ok(content_type), Ok(type_tree)) => Ok((content_type, media_type, type_tree)), + (Err(diagnostics), _) => Err(diagnostics), + (_, Err(diagnostics)) => Err(diagnostics), + } + }) + .collect::<Result<Vec<_>, Diagnostics>>()?; + + let any_required = media_types.iter().any(|(_, _, type_tree)| { + type_tree + .as_ref() + .map(|type_tree| !type_tree.is_option()) + .unwrap_or(false) + }); + + tokens.extend(quote! { + fastapi::openapi::request_body::RequestBodyBuilder::new() + }); + for (content_type, media_type, _) in media_types { + let content_type_tokens = media_type + .content_type + .as_ref() + .map(|content_type| content_type.to_token_stream()) + .unwrap_or_else(|| content_type.to_token_stream()); + let content_tokens = media_type.try_to_token_stream()?; + + tokens.extend(quote! { + .content(#content_type_tokens, #content_tokens) + }); + } + + if any_required { + let required: Required = any_required.into(); + tokens.extend(quote! { + .required(Some(#required)) + }) + } + if let Some(ref description) = self.description { + tokens.extend(quote! { + .description(Some(#description)) + }) + } + + tokens.extend(quote! { .build() }); + + Ok(()) + } +} diff --git a/fastapi-gen/src/path/response.rs b/fastapi-gen/src/path/response.rs new file mode 100644 index 0000000..02c2cc5 --- /dev/null +++ b/fastapi-gen/src/path/response.rs @@ -0,0 +1,773 @@ +use proc_macro2::{Ident, Span, TokenStream as TokenStream2}; +use quote::{quote, quote_spanned, ToTokens}; +use std::borrow::Cow; +use syn::{ + parenthesized, + parse::{Parse, ParseStream}, + punctuated::Punctuated, + spanned::Spanned, + token::Comma, + Attribute, Error, ExprPath, LitInt, LitStr, Token, TypePath, +}; + +use crate::{ + component::ComponentSchema, parse_utils, path::media_type::Schema, AnyValue, Diagnostics, + ToTokensDiagnostics, +}; + +use self::{header::Header, link::LinkTuple}; + +use super::{ + example::Example, + media_type::{DefaultSchema, MediaTypeAttr, ParsedType}, + parse, + status::STATUS_CODES, +}; + +pub mod derive; +mod header; +pub mod link; + +#[cfg_attr(feature = "debug", derive(Debug))] +pub enum Response<'r> { + /// A type that implements `fastapi::IntoResponses`. + IntoResponses(Cow<'r, TypePath>), + /// The tuple definition of a response. + Tuple(ResponseTuple<'r>), +} + +impl Parse for Response<'_> { + fn parse(input: ParseStream) -> syn::Result<Self> { + if input.fork().parse::<ExprPath>().is_ok() { + Ok(Self::IntoResponses(Cow::Owned(input.parse::<TypePath>()?))) + } else { + let response; + parenthesized!(response in input); + Ok(Self::Tuple(response.parse()?)) + } + } +} + +impl Response<'_> { + pub fn get_component_schemas( + &self, + ) -> Result<impl Iterator<Item = (bool, ComponentSchema)>, Diagnostics> { + match self { + Self::Tuple(tuple) => match &tuple.inner { + // Only tuple type will have `ComponentSchema`s as of now + Some(ResponseTupleInner::Value(value)) => { + Ok(ResponseComponentSchemaIter::Iter(Box::new( + value + .content + .iter() + .map( + |media_type| match media_type.schema.get_component_schema() { + Ok(component_schema) => { + Ok(Some(media_type.schema.is_inline()) + .zip(component_schema)) + } + Err(error) => Err(error), + }, + ) + .collect::<Result<Vec<_>, Diagnostics>>()? + .into_iter() + .flatten(), + ))) + } + _ => Ok(ResponseComponentSchemaIter::Empty), + }, + Self::IntoResponses(_) => Ok(ResponseComponentSchemaIter::Empty), + } + } +} + +pub enum ResponseComponentSchemaIter<'a, T> { + Iter(Box<dyn std::iter::Iterator<Item = T> + 'a>), + Empty, +} + +impl<'a, T> Iterator for ResponseComponentSchemaIter<'a, T> { + type Item = T; + + fn next(&mut self) -> Option<Self::Item> { + match self { + Self::Iter(iter) => iter.next(), + Self::Empty => None, + } + } + + fn size_hint(&self) -> (usize, Option<usize>) { + match self { + Self::Iter(iter) => iter.size_hint(), + Self::Empty => (0, None), + } + } +} + +/// Parsed representation of response attributes from `#[fastapi::path]` attribute. +#[derive(Default)] +#[cfg_attr(feature = "debug", derive(Debug))] +pub struct ResponseTuple<'r> { + status_code: ResponseStatus, + inner: Option<ResponseTupleInner<'r>>, +} + +const RESPONSE_INCOMPATIBLE_ATTRIBUTES_MSG: &str = + "The `response` attribute may only be used in conjunction with the `status` attribute"; + +impl<'r> ResponseTuple<'r> { + /// Set as `ResponseValue` the content. This will fail if `response` attribute is already + /// defined. + fn set_as_value<F: FnOnce(&mut ResponseValue) -> syn::Result<()>>( + &mut self, + ident: &Ident, + attribute: &str, + op: F, + ) -> syn::Result<()> { + match &mut self.inner { + Some(ResponseTupleInner::Value(value)) => { + op(value)?; + } + Some(ResponseTupleInner::Ref(_)) => { + return Err(Error::new(ident.span(), format!("Cannot use `{attribute}` in conjunction with `response`. The `response` attribute can only be used in conjunction with `status` attribute."))); + } + None => { + let mut value = ResponseValue { + content: vec![MediaTypeAttr::default()], + ..Default::default() + }; + op(&mut value)?; + self.inner = Some(ResponseTupleInner::Value(value)) + } + }; + + Ok(()) + } + + // Use with the `response` attribute, this will fail if an incompatible attribute has already been set + fn set_ref_type(&mut self, span: Span, ty: ParsedType<'r>) -> syn::Result<()> { + match &mut self.inner { + None => self.inner = Some(ResponseTupleInner::Ref(ty)), + Some(ResponseTupleInner::Ref(r)) => *r = ty, + Some(ResponseTupleInner::Value(_)) => { + return Err(Error::new(span, RESPONSE_INCOMPATIBLE_ATTRIBUTES_MSG)) + } + } + Ok(()) + } +} + +#[cfg_attr(feature = "debug", derive(Debug))] +enum ResponseTupleInner<'r> { + Value(ResponseValue<'r>), + Ref(ParsedType<'r>), +} + +impl Parse for ResponseTuple<'_> { + fn parse(input: ParseStream) -> syn::Result<Self> { + const EXPECTED_ATTRIBUTES: &str = + "status, description, body, content_type, headers, example, examples, response"; + + let mut response = ResponseTuple::default(); + + while !input.is_empty() { + let ident = input.parse::<Ident>().map_err(|error| { + Error::new( + error.span(), + format!( + "unexpected attribute, expected any of: {EXPECTED_ATTRIBUTES}, {error}" + ), + ) + })?; + let name = &*ident.to_string(); + match name { + "status" => { + response.status_code = + parse_utils::parse_next(input, || input.parse::<ResponseStatus>())?; + } + "response" => { + response.set_ref_type( + input.span(), + parse_utils::parse_next(input, || input.parse())?, + )?; + } + _ => { + response.set_as_value(&ident, name, |value| { + value.parse_named_attributes(input, &ident) + })?; + } + } + + if !input.is_empty() { + input.parse::<Token![,]>()?; + } + } + + Ok(response) + } +} + +impl<'r> From<ResponseValue<'r>> for ResponseTuple<'r> { + fn from(value: ResponseValue<'r>) -> Self { + ResponseTuple { + inner: Some(ResponseTupleInner::Value(value)), + ..Default::default() + } + } +} + +impl<'r> From<(ResponseStatus, ResponseValue<'r>)> for ResponseTuple<'r> { + fn from((status_code, response_value): (ResponseStatus, ResponseValue<'r>)) -> Self { + ResponseTuple { + inner: Some(ResponseTupleInner::Value(response_value)), + status_code, + } + } +} + +#[derive(Default)] +#[cfg_attr(feature = "debug", derive(Debug))] +pub struct ResponseValue<'r> { + description: parse_utils::LitStrOrExpr, + headers: Vec<Header>, + links: Punctuated<LinkTuple, Comma>, + content: Vec<MediaTypeAttr<'r>>, + is_content_group: bool, +} + +impl Parse for ResponseValue<'_> { + fn parse(input: ParseStream) -> syn::Result<Self> { + let mut response_value = ResponseValue::default(); + + while !input.is_empty() { + let ident = input.parse::<Ident>().map_err(|error| { + Error::new( + error.span(), + format!( + "unexpected attribute, expected any of: {expected_attributes}, {error}", + expected_attributes = ResponseValue::EXPECTED_ATTRIBUTES + ), + ) + })?; + response_value.parse_named_attributes(input, &ident)?; + + if !input.is_empty() { + input.parse::<Token![,]>()?; + } + } + + Ok(response_value) + } +} + +impl<'r> ResponseValue<'r> { + const EXPECTED_ATTRIBUTES: &'static str = + "description, body, content_type, headers, example, examples"; + + fn parse_named_attributes(&mut self, input: ParseStream, attribute: &Ident) -> syn::Result<()> { + let attribute_name = &*attribute.to_string(); + + match attribute_name { + "description" => { + self.description = parse::description(input)?; + } + "body" => { + if self.is_content_group { + return Err(Error::new( + attribute.span(), + "cannot set `body` when content(...) is defined in group form", + )); + } + + let schema = parse_utils::parse_next(input, || MediaTypeAttr::parse_schema(input))?; + if let Some(media_type) = self.content.get_mut(0) { + media_type.schema = Schema::Default(schema); + } + } + "content_type" => { + if self.is_content_group { + return Err(Error::new( + attribute.span(), + "cannot set `content_type` when content(...) is defined in group form", + )); + } + let content_type = parse_utils::parse_next(input, || { + parse_utils::LitStrOrExpr::parse(input) + }).map_err(|error| Error::new(error.span(), + format!(r#"invalid content_type, must be literal string or expression, e.g. "application/json", {error} "#) + ))?; + + if let Some(media_type) = self.content.get_mut(0) { + media_type.content_type = Some(content_type); + } + } + "headers" => { + self.headers = header::headers(input)?; + } + "content" => { + self.is_content_group = true; + fn group_parser<'a>(input: ParseStream) -> syn::Result<MediaTypeAttr<'a>> { + let buf; + syn::parenthesized!(buf in input); + buf.call(MediaTypeAttr::parse) + } + + let content = + parse_utils::parse_comma_separated_within_parethesis_with(input, group_parser)? + .into_iter() + .collect::<Vec<_>>(); + + self.content = content; + } + "links" => { + self.links = parse_utils::parse_comma_separated_within_parenthesis(input)?; + } + _ => { + MediaTypeAttr::parse_named_attributes( + self.content.get_mut(0).expect( + "parse named attributes response value must have one media type by default", + ), + input, + attribute, + )?; + } + } + Ok(()) + } + + fn from_schema<S: Into<Schema<'r>>>(schema: S, description: parse_utils::LitStrOrExpr) -> Self { + let media_type = MediaTypeAttr { + schema: schema.into(), + ..Default::default() + }; + + Self { + description, + content: vec![media_type], + ..Default::default() + } + } + + fn from_derive_to_response_value<S: Into<Schema<'r>>>( + derive_value: DeriveToResponseValue, + schema: S, + description: parse_utils::LitStrOrExpr, + ) -> Self { + let media_type = MediaTypeAttr { + content_type: derive_value.content_type, + schema: schema.into(), + example: derive_value.example.map(|(example, _)| example), + examples: derive_value + .examples + .map(|(examples, _)| examples) + .unwrap_or_default(), + }; + + Self { + description: if derive_value.description.is_empty_litstr() + && !description.is_empty_litstr() + { + description + } else { + derive_value.description + }, + headers: derive_value.headers, + content: vec![media_type], + ..Default::default() + } + } + + fn from_derive_into_responses_value<S: Into<Schema<'r>>>( + response_value: DeriveIntoResponsesValue, + schema: S, + description: parse_utils::LitStrOrExpr, + ) -> Self { + let media_type = MediaTypeAttr { + content_type: response_value.content_type, + schema: schema.into(), + example: response_value.example.map(|(example, _)| example), + examples: response_value + .examples + .map(|(examples, _)| examples) + .unwrap_or_default(), + }; + + ResponseValue { + description: if response_value.description.is_empty_litstr() + && !description.is_empty_litstr() + { + description + } else { + response_value.description + }, + headers: response_value.headers, + content: vec![media_type], + ..Default::default() + } + } +} + +impl ToTokensDiagnostics for ResponseTuple<'_> { + fn to_tokens(&self, tokens: &mut TokenStream2) -> Result<(), Diagnostics> { + match self.inner.as_ref() { + Some(ResponseTupleInner::Ref(res)) => { + let path = &res.ty; + if res.is_inline { + tokens.extend(quote_spanned! {path.span()=> + <#path as fastapi::ToResponse>::response().1 + }); + } else { + tokens.extend(quote! { + fastapi::openapi::Ref::from_response_name(<#path as fastapi::ToResponse>::response().0) + }); + } + } + Some(ResponseTupleInner::Value(value)) => { + let description = &value.description; + tokens.extend(quote! { + fastapi::openapi::ResponseBuilder::new().description(#description) + }); + + for media_type in value.content.iter().filter(|media_type| { + !(matches!(media_type.schema, Schema::Default(DefaultSchema::None)) + && media_type.content_type.is_none()) + }) { + let default_content_type = media_type.schema.get_default_content_type()?; + + let content_type_tokens = media_type + .content_type + .as_ref() + .map(|content_type| content_type.to_token_stream()) + .unwrap_or_else(|| default_content_type.to_token_stream()); + let content_tokens = media_type.try_to_token_stream()?; + + tokens.extend(quote! { + .content(#content_type_tokens, #content_tokens) + }); + } + + for header in &value.headers { + let name = &header.name; + let header = crate::as_tokens_or_diagnostics!(header); + tokens.extend(quote! { + .header(#name, #header) + }) + } + + for LinkTuple(name, link) in &value.links { + tokens.extend(quote! { + .link(#name, #link) + }) + } + + tokens.extend(quote! { .build() }); + } + None => tokens.extend(quote! { + fastapi::openapi::ResponseBuilder::new().description("") + }), + } + + Ok(()) + } +} + +trait DeriveResponseValue: Parse { + fn merge_from(self, other: Self) -> Self; + + fn from_attributes(attributes: &[Attribute]) -> Result<Option<Self>, Diagnostics> { + Ok(attributes + .iter() + .filter(|attribute| attribute.path().get_ident().unwrap() == "response") + .map(|attribute| attribute.parse_args::<Self>().map_err(Diagnostics::from)) + .collect::<Result<Vec<_>, Diagnostics>>()? + .into_iter() + .reduce(|acc, item| acc.merge_from(item))) + } +} + +#[derive(Default)] +#[cfg_attr(feature = "debug", derive(Debug))] +struct DeriveToResponseValue { + content_type: Option<parse_utils::LitStrOrExpr>, + headers: Vec<Header>, + description: parse_utils::LitStrOrExpr, + example: Option<(AnyValue, Ident)>, + examples: Option<(Punctuated<Example, Comma>, Ident)>, +} + +impl DeriveResponseValue for DeriveToResponseValue { + fn merge_from(mut self, other: Self) -> Self { + if other.content_type.is_some() { + self.content_type = other.content_type; + } + if !other.headers.is_empty() { + self.headers = other.headers; + } + if !other.description.is_empty_litstr() { + self.description = other.description; + } + if other.example.is_some() { + self.example = other.example; + } + if other.examples.is_some() { + self.examples = other.examples; + } + + self + } +} + +impl Parse for DeriveToResponseValue { + fn parse(input: ParseStream) -> syn::Result<Self> { + let mut response = DeriveToResponseValue::default(); + + while !input.is_empty() { + let ident = input.parse::<Ident>()?; + let attribute_name = &*ident.to_string(); + + match attribute_name { + "description" => { + response.description = parse::description(input)?; + } + "content_type" => { + response.content_type = + Some(parse_utils::parse_next_literal_str_or_expr(input)?); + } + "headers" => { + response.headers = header::headers(input)?; + } + "example" => { + response.example = Some((parse::example(input)?, ident)); + } + "examples" => { + response.examples = Some((parse::examples(input)?, ident)); + } + _ => { + return Err(Error::new( + ident.span(), + format!("unexpected attribute: {attribute_name}, expected any of: inline, description, content_type, headers, example"), + )); + } + } + + if !input.is_empty() { + input.parse::<Comma>()?; + } + } + + Ok(response) + } +} + +#[derive(Default)] +struct DeriveIntoResponsesValue { + status: ResponseStatus, + content_type: Option<parse_utils::LitStrOrExpr>, + headers: Vec<Header>, + description: parse_utils::LitStrOrExpr, + example: Option<(AnyValue, Ident)>, + examples: Option<(Punctuated<Example, Comma>, Ident)>, +} + +impl DeriveResponseValue for DeriveIntoResponsesValue { + fn merge_from(mut self, other: Self) -> Self { + self.status = other.status; + + if other.content_type.is_some() { + self.content_type = other.content_type; + } + if !other.headers.is_empty() { + self.headers = other.headers; + } + if !other.description.is_empty_litstr() { + self.description = other.description; + } + if other.example.is_some() { + self.example = other.example; + } + if other.examples.is_some() { + self.examples = other.examples; + } + + self + } +} + +impl Parse for DeriveIntoResponsesValue { + fn parse(input: ParseStream) -> syn::Result<Self> { + let mut response = DeriveIntoResponsesValue::default(); + const MISSING_STATUS_ERROR: &str = "missing expected `status` attribute"; + let first_span = input.span(); + + let status_ident = input + .parse::<Ident>() + .map_err(|error| Error::new(error.span(), MISSING_STATUS_ERROR))?; + + if status_ident == "status" { + response.status = parse_utils::parse_next(input, || input.parse::<ResponseStatus>())?; + } else { + return Err(Error::new(status_ident.span(), MISSING_STATUS_ERROR)); + } + + if response.status.to_token_stream().is_empty() { + return Err(Error::new(first_span, MISSING_STATUS_ERROR)); + } + + if !input.is_empty() { + input.parse::<Token![,]>()?; + } + + while !input.is_empty() { + let ident = input.parse::<Ident>()?; + let attribute_name = &*ident.to_string(); + + match attribute_name { + "description" => { + response.description = parse::description(input)?; + } + "content_type" => { + response.content_type = + Some(parse_utils::parse_next_literal_str_or_expr(input)?); + } + "headers" => { + response.headers = header::headers(input)?; + } + "example" => { + response.example = Some((parse::example(input)?, ident)); + } + "examples" => { + response.examples = Some((parse::examples(input)?, ident)); + } + _ => { + return Err(Error::new( + ident.span(), + format!("unexpected attribute: {attribute_name}, expected any of: description, content_type, headers, example, examples"), + )); + } + } + + if !input.is_empty() { + input.parse::<Token![,]>()?; + } + } + + Ok(response) + } +} + +#[derive(Default)] +#[cfg_attr(feature = "debug", derive(Debug))] +struct ResponseStatus(TokenStream2); + +impl Parse for ResponseStatus { + fn parse(input: ParseStream) -> syn::Result<Self> { + fn parse_lit_int(input: ParseStream) -> syn::Result<Cow<'_, str>> { + input.parse::<LitInt>()?.base10_parse().map(Cow::Owned) + } + + fn parse_lit_str_status_range(input: ParseStream) -> syn::Result<Cow<'_, str>> { + const VALID_STATUS_RANGES: [&str; 6] = ["default", "1XX", "2XX", "3XX", "4XX", "5XX"]; + + input + .parse::<LitStr>() + .and_then(|lit_str| { + let value = lit_str.value(); + if !VALID_STATUS_RANGES.contains(&value.as_str()) { + Err(Error::new( + value.span(), + format!( + "Invalid status range, expected one of: {}", + VALID_STATUS_RANGES.join(", "), + ), + )) + } else { + Ok(value) + } + }) + .map(Cow::Owned) + } + + fn parse_http_status_code(input: ParseStream) -> syn::Result<TokenStream2> { + let http_status_path = input.parse::<ExprPath>()?; + let last_segment = http_status_path + .path + .segments + .last() + .expect("Expected at least one segment in http StatusCode"); + + STATUS_CODES + .iter() + .find_map(|(code, name)| { + if last_segment.ident == name { + Some(code.to_string().to_token_stream()) + } else { + None + } + }) + .ok_or_else(|| { + Error::new( + last_segment.span(), + format!( + "No associate item `{}` found for struct `http::StatusCode`", + last_segment.ident + ), + ) + }) + } + + let lookahead = input.lookahead1(); + if lookahead.peek(LitInt) { + parse_lit_int(input).map(|status| Self(status.to_token_stream())) + } else if lookahead.peek(LitStr) { + parse_lit_str_status_range(input).map(|status| Self(status.to_token_stream())) + } else if lookahead.peek(syn::Ident) { + parse_http_status_code(input).map(Self) + } else { + Err(lookahead.error()) + } + } +} + +impl ToTokens for ResponseStatus { + fn to_tokens(&self, tokens: &mut TokenStream2) { + self.0.to_tokens(tokens); + } +} + +pub struct Responses<'a>(pub &'a [Response<'a>]); + +impl ToTokensDiagnostics for Responses<'_> { + fn to_tokens(&self, tokens: &mut proc_macro2::TokenStream) -> Result<(), Diagnostics> { + tokens.extend( + self.0 + .iter() + .map(|response| match response { + Response::IntoResponses(path) => { + let span = path.span(); + Ok(quote_spanned! {span => + .responses_from_into_responses::<#path>() + }) + } + Response::Tuple(response) => { + let code = &response.status_code; + let response = crate::as_tokens_or_diagnostics!(response); + Ok(quote! { .response(#code, #response) }) + } + }) + .collect::<Result<Vec<_>, Diagnostics>>()? + .into_iter() + .fold( + quote! { fastapi::openapi::ResponsesBuilder::new() }, + |mut acc, response| { + response.to_tokens(&mut acc); + + acc + }, + ), + ); + + tokens.extend(quote! { .build() }); + + Ok(()) + } +} diff --git a/fastapi-gen/src/path/response/derive.rs b/fastapi-gen/src/path/response/derive.rs new file mode 100644 index 0000000..9420202 --- /dev/null +++ b/fastapi-gen/src/path/response/derive.rs @@ -0,0 +1,761 @@ +use std::borrow::Cow; +use std::{iter, mem}; + +use proc_macro2::{Ident, Span, TokenStream}; +use quote::{quote, ToTokens}; +use syn::parse::ParseStream; +use syn::punctuated::Punctuated; +use syn::spanned::Spanned; +use syn::token::Comma; +use syn::{ + Attribute, Data, Field, Fields, Generics, Lifetime, LifetimeParam, LitStr, Path, Type, + TypePath, Variant, +}; + +use crate::component::schema::{EnumSchema, NamedStructSchema, Root}; +use crate::doc_comment::CommentAttributes; +use crate::path::media_type::{DefaultSchema, MediaTypeAttr, ParsedType, Schema}; +use crate::{ + as_tokens_or_diagnostics, parse_utils, Array, Diagnostics, OptionExt, ToTokensDiagnostics, +}; + +use super::{ + DeriveIntoResponsesValue, DeriveResponseValue, DeriveToResponseValue, ResponseTuple, + ResponseTupleInner, ResponseValue, +}; + +pub struct ToResponse<'r> { + ident: Ident, + lifetime: Lifetime, + generics: Generics, + response: ResponseTuple<'r>, +} + +impl<'r> ToResponse<'r> { + const LIFETIME: &'static str = "'__r"; + + pub fn new( + attributes: Vec<Attribute>, + data: &'r Data, + generics: Generics, + ident: Ident, + ) -> Result<ToResponse<'r>, Diagnostics> { + let response = match &data { + Data::Struct(struct_value) => match &struct_value.fields { + Fields::Named(fields) => { + ToResponseNamedStructResponse::new(&attributes, &ident, &fields.named)?.0 + } + Fields::Unnamed(fields) => { + let field = fields + .unnamed + .iter() + .next() + .expect("Unnamed struct must have 1 field"); + + ToResponseUnnamedStructResponse::new(&attributes, &field.ty, &field.attrs)?.0 + } + Fields::Unit => ToResponseUnitStructResponse::new(&attributes)?.0, + }, + Data::Enum(enum_value) => { + EnumResponse::new(&ident, &enum_value.variants, &attributes)?.0 + } + Data::Union(_) => { + return Err(Diagnostics::with_span( + ident.span(), + "`ToResponse` does not support `Union` type", + )) + } + }; + + let lifetime = Lifetime::new(ToResponse::LIFETIME, Span::call_site()); + + Ok(Self { + ident, + lifetime, + generics, + response, + }) + } +} + +impl ToTokensDiagnostics for ToResponse<'_> { + fn to_tokens(&self, tokens: &mut TokenStream) -> Result<(), Diagnostics> { + let (_, ty_generics, where_clause) = self.generics.split_for_impl(); + + let lifetime = &self.lifetime; + let ident = &self.ident; + let name = ident.to_string(); + let response = as_tokens_or_diagnostics!(&self.response); + + let mut to_response_generics = self.generics.clone(); + to_response_generics + .params + .push(syn::GenericParam::Lifetime(LifetimeParam::new( + lifetime.clone(), + ))); + let (to_response_impl_generics, _, _) = to_response_generics.split_for_impl(); + + tokens.extend(quote! { + impl #to_response_impl_generics fastapi::ToResponse <#lifetime> for #ident #ty_generics #where_clause { + fn response() -> (& #lifetime str, fastapi::openapi::RefOr<fastapi::openapi::response::Response>) { + (#name, #response.into()) + } + } + }); + + Ok(()) + } +} + +pub struct IntoResponses { + pub attributes: Vec<Attribute>, + pub data: Data, + pub generics: Generics, + pub ident: Ident, +} + +impl ToTokensDiagnostics for IntoResponses { + fn to_tokens(&self, tokens: &mut TokenStream) -> Result<(), Diagnostics> { + let responses = match &self.data { + Data::Struct(struct_value) => match &struct_value.fields { + Fields::Named(fields) => { + let response = + NamedStructResponse::new(&self.attributes, &self.ident, &fields.named)?.0; + let status = &response.status_code; + let response_tokens = as_tokens_or_diagnostics!(&response); + + Array::from_iter(iter::once(quote!((#status, #response_tokens)))) + } + Fields::Unnamed(fields) => { + let field = fields + .unnamed + .iter() + .next() + .expect("Unnamed struct must have 1 field"); + + let response = + UnnamedStructResponse::new(&self.attributes, &field.ty, &field.attrs)?.0; + let status = &response.status_code; + let response_tokens = as_tokens_or_diagnostics!(&response); + + Array::from_iter(iter::once(quote!((#status, #response_tokens)))) + } + Fields::Unit => { + let response = UnitStructResponse::new(&self.attributes)?.0; + let status = &response.status_code; + let response_tokens = as_tokens_or_diagnostics!(&response); + + Array::from_iter(iter::once(quote!((#status, #response_tokens)))) + } + }, + Data::Enum(enum_value) => enum_value + .variants + .iter() + .map(|variant| match &variant.fields { + Fields::Named(fields) => Ok(NamedStructResponse::new( + &variant.attrs, + &variant.ident, + &fields.named, + )? + .0), + Fields::Unnamed(fields) => { + let field = fields + .unnamed + .iter() + .next() + .expect("Unnamed enum variant must have 1 field"); + match UnnamedStructResponse::new(&variant.attrs, &field.ty, &field.attrs) { + Ok(response) => Ok(response.0), + Err(diagnostics) => Err(diagnostics), + } + } + Fields::Unit => Ok(UnitStructResponse::new(&variant.attrs)?.0), + }) + .collect::<Result<Vec<ResponseTuple>, Diagnostics>>()? + .iter() + .map(|response| { + let status = &response.status_code; + let response_tokens = as_tokens_or_diagnostics!(response); + Ok(quote!((#status, fastapi::openapi::RefOr::from(#response_tokens)))) + }) + .collect::<Result<Array<TokenStream>, Diagnostics>>()?, + Data::Union(_) => { + return Err(Diagnostics::with_span( + self.ident.span(), + "`IntoResponses` does not support `Union` type", + )) + } + }; + + let ident = &self.ident; + let (impl_generics, ty_generics, where_clause) = self.generics.split_for_impl(); + + let responses = if responses.len() > 0 { + Some(quote!( .responses_from_iter(#responses))) + } else { + None + }; + tokens.extend(quote!{ + impl #impl_generics fastapi::IntoResponses for #ident #ty_generics #where_clause { + fn responses() -> std::collections::BTreeMap<String, fastapi::openapi::RefOr<fastapi::openapi::response::Response>> { + fastapi::openapi::response::ResponsesBuilder::new() + #responses + .build() + .into() + } + } + }); + + Ok(()) + } +} + +trait Response { + fn to_type(ident: &Ident) -> Type { + let path = Path::from(ident.clone()); + let type_path = TypePath { path, qself: None }; + Type::Path(type_path) + } + + fn has_no_field_attributes(attribute: &Attribute) -> (bool, &'static str) { + const ERROR: &str = + "Unexpected field attribute, field attributes are only supported at unnamed fields"; + + let ident = attribute.path().get_ident().unwrap(); + match &*ident.to_string() { + "to_schema" => (false, ERROR), + "ref_response" => (false, ERROR), + "content" => (false, ERROR), + "to_response" => (false, ERROR), + _ => (true, ERROR), + } + } + + fn validate_attributes<'a, I: IntoIterator<Item = &'a Attribute>>( + attributes: I, + validate: impl Fn(&Attribute) -> (bool, &'static str) + 'a, + ) -> impl Iterator<Item = Diagnostics> { + attributes.into_iter().filter_map(move |attribute| { + let (valid, error_message) = validate(attribute); + if !valid { + Some(Diagnostics::with_span(attribute.span(), error_message)) + } else { + None + } + }) + } +} + +struct UnnamedStructResponse<'u>(ResponseTuple<'u>); + +impl Response for UnnamedStructResponse<'_> {} + +impl<'u> UnnamedStructResponse<'u> { + fn new( + attributes: &[Attribute], + ty: &'u Type, + inner_attributes: &[Attribute], + ) -> Result<Self, Diagnostics> { + let is_inline = inner_attributes + .iter() + .any(|attribute| attribute.path().get_ident().unwrap() == "to_schema"); + let ref_response = inner_attributes + .iter() + .any(|attribute| attribute.path().get_ident().unwrap() == "ref_response"); + let to_response = inner_attributes + .iter() + .any(|attribute| attribute.path().get_ident().unwrap() == "to_response"); + + if is_inline && (ref_response || to_response) { + return Err(Diagnostics::with_span(ty.span(), "Attribute `to_schema` cannot be used with `ref_response` and `to_response` attribute")); + } + let mut derive_value = DeriveIntoResponsesValue::from_attributes(attributes)? + .expect("`IntoResponses` must have `#[response(...)]` attribute"); + let description = { + let s = CommentAttributes::from_attributes(attributes).as_formatted_string(); + parse_utils::LitStrOrExpr::LitStr(LitStr::new(&s, Span::call_site())) + }; + let status_code = mem::take(&mut derive_value.status); + + let response = match (ref_response, to_response) { + (false, false) => Self( + ( + status_code, + ResponseValue::from_derive_into_responses_value( + derive_value, + ParsedType { + ty: Cow::Borrowed(ty), + is_inline, + }, + description, + ), + ) + .into(), + ), + (true, false) => Self(ResponseTuple { + inner: Some(ResponseTupleInner::Ref(ParsedType { + ty: Cow::Borrowed(ty), + is_inline: false, + })), + status_code, + }), + (false, true) => Self(ResponseTuple { + inner: Some(ResponseTupleInner::Ref(ParsedType { + ty: Cow::Borrowed(ty), + is_inline: true, + })), + status_code, + }), + (true, true) => { + return Err(Diagnostics::with_span( + ty.span(), + "Cannot define `ref_response` and `to_response` attribute simultaneously", + )) + } + }; + + Ok(response) + } +} + +struct NamedStructResponse<'n>(ResponseTuple<'n>); + +impl Response for NamedStructResponse<'_> {} + +impl NamedStructResponse<'_> { + fn new( + attributes: &[Attribute], + ident: &Ident, + fields: &Punctuated<Field, Comma>, + ) -> Result<Self, Diagnostics> { + if let Some(diagnostics) = + Self::validate_attributes(attributes, Self::has_no_field_attributes) + .chain(Self::validate_attributes( + fields.iter().flat_map(|field| &field.attrs), + Self::has_no_field_attributes, + )) + .collect::<Option<Diagnostics>>() + { + return Err(diagnostics); + } + + let mut derive_value = DeriveIntoResponsesValue::from_attributes(attributes)? + .expect("`IntoResponses` must have `#[response(...)]` attribute"); + let description = { + let s = CommentAttributes::from_attributes(attributes).as_formatted_string(); + parse_utils::LitStrOrExpr::LitStr(LitStr::new(&s, Span::call_site())) + }; + let status_code = mem::take(&mut derive_value.status); + let inline_schema = NamedStructSchema::new( + &Root { + ident, + attributes, + generics: &Generics::default(), + }, + fields, + Vec::new(), + )?; + + let ty = Self::to_type(ident); + + Ok(Self( + ( + status_code, + ResponseValue::from_derive_into_responses_value( + derive_value, + Schema::Default(DefaultSchema::Raw { + tokens: inline_schema.to_token_stream(), + ty: Cow::Owned(ty), + }), + description, + ), + ) + .into(), + )) + } +} + +struct UnitStructResponse<'u>(ResponseTuple<'u>); + +impl Response for UnitStructResponse<'_> {} + +impl UnitStructResponse<'_> { + fn new(attributes: &[Attribute]) -> Result<Self, Diagnostics> { + if let Some(diagnostics) = + Self::validate_attributes(attributes, Self::has_no_field_attributes) + .collect::<Option<Diagnostics>>() + { + return Err(diagnostics); + } + + let mut derive_value = DeriveIntoResponsesValue::from_attributes(attributes)? + .expect("`IntoResponses` must have `#[response(...)]` attribute"); + let status_code = mem::take(&mut derive_value.status); + let description = { + let s = CommentAttributes::from_attributes(attributes).as_formatted_string(); + parse_utils::LitStrOrExpr::LitStr(LitStr::new(&s, Span::call_site())) + }; + + Ok(Self( + ( + status_code, + ResponseValue::from_derive_into_responses_value( + derive_value, + Schema::Default(DefaultSchema::None), + description, + ), + ) + .into(), + )) + } +} + +struct ToResponseNamedStructResponse<'p>(ResponseTuple<'p>); + +impl Response for ToResponseNamedStructResponse<'_> {} + +impl<'p> ToResponseNamedStructResponse<'p> { + fn new( + attributes: &[Attribute], + ident: &Ident, + fields: &Punctuated<Field, Comma>, + ) -> Result<Self, Diagnostics> { + if let Some(diagnostics) = + Self::validate_attributes(attributes, Self::has_no_field_attributes) + .chain(Self::validate_attributes( + fields.iter().flat_map(|field| &field.attrs), + Self::has_no_field_attributes, + )) + .collect::<Option<Diagnostics>>() + { + return Err(diagnostics); + } + + let derive_value = DeriveToResponseValue::from_attributes(attributes)?; + let description = { + let s = CommentAttributes::from_attributes(attributes).as_formatted_string(); + parse_utils::LitStrOrExpr::LitStr(LitStr::new(&s, Span::call_site())) + }; + let ty = Self::to_type(ident); + + let inline_schema = NamedStructSchema::new( + &Root { + ident, + attributes, + generics: &Generics::default(), + }, + fields, + Vec::new(), + )?; + + let response_value = if let Some(derive_value) = derive_value { + ResponseValue::from_derive_to_response_value( + derive_value, + Schema::Default(DefaultSchema::Raw { + tokens: inline_schema.to_token_stream(), + ty: Cow::Owned(ty), + }), + description, + ) + } else { + ResponseValue::from_schema( + Schema::Default(DefaultSchema::Raw { + tokens: inline_schema.to_token_stream(), + ty: Cow::Owned(ty), + }), + description, + ) + }; + // response_value.response_type = Some(response_type); + + Ok(Self(response_value.into())) + } +} + +struct ToResponseUnnamedStructResponse<'c>(ResponseTuple<'c>); + +impl Response for ToResponseUnnamedStructResponse<'_> {} + +impl<'u> ToResponseUnnamedStructResponse<'u> { + fn new( + attributes: &[Attribute], + ty: &'u Type, + inner_attributes: &[Attribute], + ) -> Result<Self, Diagnostics> { + if let Some(diagnostics) = + Self::validate_attributes(attributes, Self::has_no_field_attributes) + .chain(Self::validate_attributes(inner_attributes, |attribute| { + const ERROR: &str = + "Unexpected attribute, `content` is only supported on unnamed field enum variant"; + if attribute.path().get_ident().unwrap() == "content" { + (false, ERROR) + } else { + (true, ERROR) + } + })) + .collect::<Option<Diagnostics>>() + { + return Err(diagnostics); + } + let derive_value = DeriveToResponseValue::from_attributes(attributes)?; + let description = { + let s = CommentAttributes::from_attributes(attributes).as_formatted_string(); + parse_utils::LitStrOrExpr::LitStr(LitStr::new(&s, Span::call_site())) + }; + + let is_inline = inner_attributes + .iter() + .any(|attribute| attribute.path().get_ident().unwrap() == "to_schema"); + + let response_value = if let Some(derive_value) = derive_value { + ResponseValue::from_derive_to_response_value( + derive_value, + ParsedType { + ty: Cow::Borrowed(ty), + is_inline, + }, + description, + ) + } else { + ResponseValue::from_schema( + ParsedType { + ty: Cow::Borrowed(ty), + is_inline, + }, + description, + ) + }; + + Ok(Self(response_value.into())) + } +} + +#[cfg_attr(feature = "debug", derive(Debug))] +struct VariantAttributes<'r> { + type_and_content: Option<(&'r Type, String)>, + derive_value: Option<DeriveToResponseValue>, + is_inline: bool, +} + +struct EnumResponse<'r>(ResponseTuple<'r>); + +impl Response for EnumResponse<'_> {} + +impl<'r> EnumResponse<'r> { + fn new( + ident: &Ident, + variants: &'r Punctuated<Variant, Comma>, + attributes: &[Attribute], + ) -> Result<Self, Diagnostics> { + if let Some(diagnostics) = + Self::validate_attributes(attributes, Self::has_no_field_attributes) + .chain(Self::validate_attributes( + variants.iter().flat_map(|variant| &variant.attrs), + Self::has_no_field_attributes, + )) + .collect::<Option<Diagnostics>>() + { + return Err(diagnostics); + } + + let ty = Self::to_type(ident); + let description = { + let s = CommentAttributes::from_attributes(attributes).as_formatted_string(); + parse_utils::LitStrOrExpr::LitStr(LitStr::new(&s, Span::call_site())) + }; + + let content = variants + .into_iter() + .map(Self::parse_variant_attributes) + .collect::<Result<Vec<VariantAttributes>, Diagnostics>>()? + .into_iter() + .filter(|variant| variant.type_and_content.is_some()) + .collect::<Vec<_>>(); + + let derive_value = DeriveToResponseValue::from_attributes(attributes)?; + if let Some(derive_value) = &derive_value { + if (!content.is_empty() && derive_value.example.is_some()) + || (!content.is_empty() && derive_value.examples.is_some()) + { + let ident = derive_value + .example + .as_ref() + .map(|(_, ident)| ident) + .or_else(|| derive_value.examples.as_ref().map(|(_, ident)| ident)) + .expect("Expected `example` or `examples` to be present"); + return Err( + Diagnostics::with_span(ident.span(), + "Enum with `#[content]` attribute in variant cannot have enum level `example` or `examples` defined") + .help(format!("Try defining `{}` on the enum variant", ident)) + ); + } + } + + let generics = Generics::default(); + let root = &Root { + ident, + attributes, + generics: &generics, + }; + let inline_schema = EnumSchema::new(root, variants)?; + + let response_value = if content.is_empty() { + if let Some(derive_value) = derive_value { + ResponseValue::from_derive_to_response_value( + derive_value, + Schema::Default(DefaultSchema::None), + description, + ) + } else { + ResponseValue::from_schema( + Schema::Default(DefaultSchema::Raw { + tokens: inline_schema.to_token_stream(), + ty: Cow::Owned(ty), + }), + description, + ) + } + } else { + let content = content + .into_iter() + .map( + |VariantAttributes { + type_and_content, + derive_value, + is_inline, + }| { + let (content_type, schema) = if let Some((ty, content)) = type_and_content { + ( + Some(content.into()), + Some(Schema::Default(DefaultSchema::TypePath(ParsedType { + ty: Cow::Borrowed(ty), + is_inline, + }))), + ) + } else { + (None, None) + }; + let (example, examples) = if let Some(derive_value) = derive_value { + ( + derive_value.example.map(|(example, _)| example), + derive_value.examples.map(|(examples, _)| examples), + ) + } else { + (None, None) + }; + + MediaTypeAttr { + content_type, + schema: schema.unwrap_or_else(|| Schema::Default(DefaultSchema::None)), + example, + examples: examples.unwrap_or_default(), + } + }, + ) + .collect::<Vec<_>>(); + + let mut response = if let Some(derive_value) = derive_value { + ResponseValue::from_derive_to_response_value( + derive_value, + Schema::Default(DefaultSchema::None), + description, + ) + } else { + ResponseValue::from_schema( + Schema::Default(DefaultSchema::Raw { + tokens: inline_schema.to_token_stream(), + ty: Cow::Owned(ty), + }), + description, + ) + }; + response.content = content; + + response + }; + + Ok(Self(response_value.into())) + } + + fn parse_variant_attributes(variant: &Variant) -> Result<VariantAttributes, Diagnostics> { + let variant_derive_response_value = + DeriveToResponseValue::from_attributes(variant.attrs.as_slice())?; + // named enum variant should not have field attributes + if let Fields::Named(named_fields) = &variant.fields { + if let Some(diagnostics) = Self::validate_attributes( + named_fields.named.iter().flat_map(|field| &field.attrs), + Self::has_no_field_attributes, + ) + .collect::<Option<Diagnostics>>() + { + return Err(diagnostics); + } + }; + + let field = variant.fields.iter().next(); + + let content_type = field.and_then_try(|field| { + field + .attrs + .iter() + .find(|attribute| attribute.path().get_ident().unwrap() == "content") + .map_try(|attribute| { + attribute + .parse_args_with(|input: ParseStream| input.parse::<LitStr>()) + .map(|content| content.value()) + .map_err(Diagnostics::from) + }) + })?; + + let is_inline = field + .map(|field| { + field + .attrs + .iter() + .any(|attribute| attribute.path().get_ident().unwrap() == "to_schema") + }) + .unwrap_or(false); + + Ok(VariantAttributes { + type_and_content: field.map(|field| &field.ty).zip(content_type), + derive_value: variant_derive_response_value, + is_inline, + }) + } +} + +struct ToResponseUnitStructResponse<'u>(ResponseTuple<'u>); + +impl Response for ToResponseUnitStructResponse<'_> {} + +impl ToResponseUnitStructResponse<'_> { + fn new(attributes: &[Attribute]) -> Result<Self, Diagnostics> { + if let Some(diagnostics) = + Self::validate_attributes(attributes, Self::has_no_field_attributes) + .collect::<Option<Diagnostics>>() + { + return Err(diagnostics); + } + + let derive_value = DeriveToResponseValue::from_attributes(attributes)?; + let description = { + let s = CommentAttributes::from_attributes(attributes).as_formatted_string(); + parse_utils::LitStrOrExpr::LitStr(LitStr::new(&s, Span::call_site())) + }; + + let response_value = if let Some(derive_value) = derive_value { + ResponseValue::from_derive_to_response_value( + derive_value, + Schema::Default(DefaultSchema::None), + description, + ) + } else { + ResponseValue { + description, + ..Default::default() + } + }; + + Ok(Self(response_value.into())) + } +} diff --git a/fastapi-gen/src/path/response/header.rs b/fastapi-gen/src/path/response/header.rs new file mode 100644 index 0000000..0e434a1 --- /dev/null +++ b/fastapi-gen/src/path/response/header.rs @@ -0,0 +1,165 @@ +use proc_macro2::TokenStream; +use quote::{quote, ToTokens}; +use syn::parse::{Parse, ParseStream}; +use syn::{Error, Generics, Ident, LitStr, Token}; + +use crate::component::features::attributes::Inline; +use crate::component::{ComponentSchema, Container, TypeTree}; +use crate::path::media_type::ParsedType; +use crate::{parse_utils, Diagnostics, ToTokensDiagnostics}; + +/// Parsed representation of response header defined in `#[fastapi::path(..)]` attribute. +/// +/// Supported configuration format is `("x-my-header-name" = type, description = "optional description of header")`. +/// The `= type` and the `description = ".."` are optional configurations thus so the same configuration +/// could be written as follows: `("x-my-header-name")`. +/// +/// The `type` can be any typical type supported as a header argument such as `String, i32, u64, bool` etc. +/// and if not provided it will default to `String`. +/// +/// # Examples +/// +/// Example of 200 success response which does return nothing back in response body, but returns a +/// new csrf token in response headers. +/// ```text +/// #[fastapi::path( +/// ... +/// responses = [ +/// (status = 200, description = "success response", +/// headers = [ +/// ("xrfs-token" = String, description = "New csrf token sent back in response header") +/// ] +/// ), +/// ] +/// )] +/// ``` +/// +/// Example with default values. +/// ```text +/// #[fastapi::path( +/// ... +/// responses = [ +/// (status = 200, description = "success response", +/// headers = [ +/// ("xrfs-token") +/// ] +/// ), +/// ] +/// )] +/// ``` +/// +/// Example with multiple headers with default values. +/// ```text +/// #[fastapi::path( +/// ... +/// responses = [ +/// (status = 200, description = "success response", +/// headers = [ +/// ("xrfs-token"), +/// ("another-header"), +/// ] +/// ), +/// ] +/// )] +/// ``` +#[derive(Default)] +#[cfg_attr(feature = "debug", derive(Debug))] +pub struct Header { + pub name: String, + value_type: Option<ParsedType<'static>>, + description: Option<String>, +} + +impl Parse for Header { + fn parse(input: syn::parse::ParseStream) -> syn::Result<Self> { + let mut header = Header { + name: input.parse::<LitStr>()?.value(), + ..Default::default() + }; + + if input.peek(Token![=]) { + input.parse::<Token![=]>()?; + + header.value_type = Some(input.parse().map_err(|error| { + Error::new( + error.span(), + format!("unexpected token, expected type such as String, {error}"), + ) + })?); + } + + if !input.is_empty() { + input.parse::<Token![,]>()?; + } + + if input.peek(syn::Ident) { + input + .parse::<Ident>() + .map_err(|error| { + Error::new( + error.span(), + format!("unexpected attribute, expected: description, {error}"), + ) + }) + .and_then(|ident| { + if ident != "description" { + return Err(Error::new( + ident.span(), + "unexpected attribute, expected: description", + )); + } + Ok(ident) + })?; + input.parse::<Token![=]>()?; + header.description = Some(input.parse::<LitStr>()?.value()); + } + + Ok(header) + } +} + +impl ToTokensDiagnostics for Header { + fn to_tokens(&self, tokens: &mut TokenStream) -> Result<(), Diagnostics> { + if let Some(header_type) = &self.value_type { + // header property with custom type + let type_tree = TypeTree::from_type(header_type.ty.as_ref())?; + + let media_type_schema = ComponentSchema::new(crate::component::ComponentSchemaProps { + type_tree: &type_tree, + features: vec![Inline::from(header_type.is_inline).into()], + description: None, + container: &Container { + generics: &Generics::default(), + }, + })? + .to_token_stream(); + + tokens.extend(quote! { + fastapi::openapi::HeaderBuilder::new().schema(#media_type_schema) + }) + } else { + // default header (string type) + tokens.extend(quote! { + Into::<fastapi::openapi::HeaderBuilder>::into(fastapi::openapi::Header::default()) + }) + }; + + if let Some(ref description) = self.description { + tokens.extend(quote! { + .description(Some(#description)) + }) + } + + tokens.extend(quote! { .build() }); + + Ok(()) + } +} + +#[inline] +pub fn headers(input: ParseStream) -> syn::Result<Vec<Header>> { + let headers; + syn::parenthesized!(headers in input); + + parse_utils::parse_groups_collect(&headers) +} diff --git a/fastapi-gen/src/path/response/link.rs b/fastapi-gen/src/path/response/link.rs new file mode 100644 index 0000000..61c61be --- /dev/null +++ b/fastapi-gen/src/path/response/link.rs @@ -0,0 +1,149 @@ +use proc_macro2::TokenStream; +use quote::{quote, ToTokens}; +use syn::parse::Parse; +use syn::punctuated::Punctuated; +use syn::token::Comma; +use syn::{Ident, Token}; + +use crate::openapi::Server; +use crate::{parse_utils, AnyValue}; + +/// ("name" = (link)) +#[cfg_attr(feature = "debug", derive(Debug))] +pub struct LinkTuple(pub parse_utils::LitStrOrExpr, pub Link); + +impl Parse for LinkTuple { + fn parse(input: syn::parse::ParseStream) -> syn::Result<Self> { + let inner; + syn::parenthesized!(inner in input); + + let name = inner.parse::<parse_utils::LitStrOrExpr>()?; + inner.parse::<Token![=]>()?; + let value = inner.parse::<Link>()?; + + Ok(LinkTuple(name, value)) + } +} + +/// (operation_ref = "", operation_id = "", +/// parameters( +/// ("name" = value), +/// ("name" = value) +/// ), +/// request_body = value, +/// description = "", +/// server(...) +/// ) +#[derive(Default)] +#[cfg_attr(feature = "debug", derive(Debug))] +pub struct Link { + operation_ref: Option<parse_utils::LitStrOrExpr>, + operation_id: Option<parse_utils::LitStrOrExpr>, + parameters: Punctuated<LinkParameter, Comma>, + request_body: Option<AnyValue>, + description: Option<parse_utils::LitStrOrExpr>, + server: Option<Server>, +} + +impl Parse for Link { + fn parse(input: syn::parse::ParseStream) -> syn::Result<Self> { + let inner; + syn::parenthesized!(inner in input); + let mut link = Link::default(); + + while !inner.is_empty() { + let ident = inner.parse::<Ident>()?; + let attribute = &*ident.to_string(); + + match attribute { + "operation_ref" => link.operation_ref = Some(parse_utils::parse_next_literal_str_or_expr(&inner)?), + "operation_id" => link.operation_id = Some(parse_utils::parse_next_literal_str_or_expr(&inner)?), + "parameters" => { + link.parameters = parse_utils::parse_comma_separated_within_parenthesis(&inner)?; + }, + "request_body" => link.request_body = Some(parse_utils::parse_next(&inner, || { AnyValue::parse_any(&inner)})?), + "description" => link.description = Some(parse_utils::parse_next_literal_str_or_expr(&inner)?), + "server" => link.server = Some(inner.call(Server::parse)?), + _ => return Err(syn::Error::new(ident.span(), format!("unexpected attribute: {attribute}, expected any of: operation_ref, operation_id, parameters, request_body, description, server"))) + } + + if !inner.is_empty() { + inner.parse::<Token![,]>()?; + } + } + + Ok(link) + } +} + +impl ToTokens for Link { + fn to_tokens(&self, tokens: &mut proc_macro2::TokenStream) { + let operation_ref = self + .operation_ref + .as_ref() + .map(|operation_ref| quote! { .operation_ref(#operation_ref)}); + + let operation_id = self + .operation_id + .as_ref() + .map(|operation_id| quote! { .operation_id(#operation_id)}); + + let parameters = + self.parameters + .iter() + .fold(TokenStream::new(), |mut params, parameter| { + let name = ¶meter.name; + let value = ¶meter.value; + params.extend(quote! { .parameter(#name, #value) }); + + params + }); + + let request_body = self + .request_body + .as_ref() + .map(|request_body| quote! { .request_body(Some(#request_body)) }); + + let description = self + .description + .as_ref() + .map(|description| quote! { .description(#description) }); + + let server = self + .server + .as_ref() + .map(|server| quote! { .server(Some(#server)) }); + + tokens.extend(quote! { + fastapi::openapi::link::Link::builder() + #operation_ref + #operation_id + #parameters + #request_body + #description + #server + .build() + }) + } +} + +/// ("foobar" = json!(...)) +#[cfg_attr(feature = "debug", derive(Debug))] +pub struct LinkParameter { + name: parse_utils::LitStrOrExpr, + value: parse_utils::LitStrOrExpr, +} + +impl Parse for LinkParameter { + fn parse(input: syn::parse::ParseStream) -> syn::Result<Self> { + let inner; + syn::parenthesized!(inner in input); + let name = inner.parse::<parse_utils::LitStrOrExpr>()?; + + inner.parse::<Token![=]>()?; + + let value = inner.parse::<parse_utils::LitStrOrExpr>()?; + + Ok(LinkParameter { name, value }) + } +} diff --git a/fastapi-gen/src/path/status.rs b/fastapi-gen/src/path/status.rs new file mode 100644 index 0000000..5a353a4 --- /dev/null +++ b/fastapi-gen/src/path/status.rs @@ -0,0 +1,63 @@ +/// Known http `StatusCode`s available in `http::status::StatusCode` struct in `http` crate. +pub const STATUS_CODES: [(i16, &str); 60] = [ + (100, "CONTINUE"), + (101, "SWITCHING_PROTOCOLS"), + (102, "PROCESSING"), + (200, "OK"), + (201, "CREATED"), + (202, "ACCEPTED"), + (203, "NON_AUTHORITATIVE_INFORMATION"), + (204, "NO_CONTENT"), + (205, "RESET_CONTENT"), + (206, "PARTIAL_CONTENT"), + (207, "MULTI_STATUS"), + (208, "ALREADY_REPORTED"), + (226, "IM_USED"), + (300, "MULTIPLE_CHOICES"), + (301, "MOVED_PERMANENTLY"), + (302, "FOUND"), + (303, "SEE_OTHER"), + (304, "NOT_MODIFIED"), + (305, "USE_PROXY"), + (307, "TEMPORARY_REDIRECT"), + (308, "PERMANENT_REDIRECT"), + (400, "BAD_REQUEST"), + (401, "UNAUTHORIZED"), + (402, "PAYMENT_REQUIRED"), + (403, "FORBIDDEN"), + (404, "NOT_FOUND"), + (405, "METHOD_NOT_ALLOWED"), + (406, "NOT_ACCEPTABLE"), + (407, "PROXY_AUTHENTICATION_REQUIRED"), + (408, "REQUEST_TIMEOUT"), + (409, "CONFLICT"), + (410, "GONE"), + (411, "LENGTH_REQUIRED"), + (412, "PRECONDITION_FAILED"), + (413, "PAYLOAD_TOO_LARGE"), + (414, "URI_TOO_LONG"), + (415, "UNSUPPORTED_MEDIA_TYPE"), + (416, "RANGE_NOT_SATISFIABLE"), + (417, "EXPECTATION_FAILED"), + (418, "IM_A_TEAPOT"), + (421, "MISDIRECTED_REQUEST"), + (422, "UNPROCESSABLE_ENTITY"), + (423, "LOCKED"), + (424, "FAILED_DEPENDENCY"), + (426, "UPGRADE_REQUIRED"), + (428, "PRECONDITION_REQUIRED"), + (429, "TOO_MANY_REQUESTS"), + (431, "REQUEST_HEADER_FIELDS_TOO_LARGE"), + (451, "UNAVAILABLE_FOR_LEGAL_REASONS"), + (500, "INTERNAL_SERVER_ERROR"), + (501, "NOT_IMPLEMENTED"), + (502, "BAD_GATEWAY"), + (503, "SERVICE_UNAVAILABLE"), + (504, "GATEWAY_TIMEOUT"), + (505, "HTTP_VERSION_NOT_SUPPORTED"), + (506, "VARIANT_ALSO_NEGOTIATES"), + (507, "INSUFFICIENT_STORAGE"), + (508, "LOOP_DETECTED"), + (510, "NOT_EXTENDED"), + (511, "NETWORK_AUTHENTICATION_REQUIRED"), +]; diff --git a/fastapi-gen/src/schema_type.rs b/fastapi-gen/src/schema_type.rs new file mode 100644 index 0000000..91b0989 --- /dev/null +++ b/fastapi-gen/src/schema_type.rs @@ -0,0 +1,744 @@ +use proc_macro2::TokenStream; +use quote::{quote, ToTokens}; +use syn::spanned::Spanned; +use syn::{parse::Parse, Error, Ident, LitStr, Path}; + +use crate::{Diagnostics, ToTokensDiagnostics}; + +/// Represents data type of [`Schema`]. +#[cfg_attr(feature = "debug", derive(Debug))] +#[allow(dead_code)] +pub enum SchemaTypeInner { + /// Generic schema type allows "properties" with custom types + Object, + /// Indicates string type of content. + String, + /// Indicates integer type of content. + Integer, + /// Indicates floating point number type of content. + Number, + /// Indicates boolean type of content. + Boolean, + /// Indicates array type of content. + Array, + /// Null type. Used together with other type to indicate nullable values. + Null, +} + +impl ToTokens for SchemaTypeInner { + fn to_tokens(&self, tokens: &mut TokenStream) { + let ty = match self { + Self::Object => quote! { fastapi::openapi::schema::Type::Object }, + Self::String => quote! { fastapi::openapi::schema::Type::String }, + Self::Integer => quote! { fastapi::openapi::schema::Type::Integer }, + Self::Number => quote! { fastapi::openapi::schema::Type::Number }, + Self::Boolean => quote! { fastapi::openapi::schema::Type::Boolean }, + Self::Array => quote! { fastapi::openapi::schema::Type::Array }, + Self::Null => quote! { fastapi::openapi::schema::Type::Null }, + }; + tokens.extend(ty) + } +} + +/// Tokenizes OpenAPI data type correctly according to the Rust type +#[cfg_attr(feature = "debug", derive(Debug))] +pub struct SchemaType<'a> { + pub path: std::borrow::Cow<'a, syn::Path>, + pub nullable: bool, +} + +impl SchemaType<'_> { + fn last_segment_to_string(&self) -> String { + self.path + .segments + .last() + .expect("Expected at least one segment is_integer") + .ident + .to_string() + } + + pub fn is_value(&self) -> bool { + matches!(&*self.last_segment_to_string(), "Value") + } + + /// Check whether type is known to be primitive in which case returns true. + pub fn is_primitive(&self) -> bool { + let SchemaType { path, .. } = self; + let last_segment = match path.segments.last() { + Some(segment) => segment, + None => return false, + }; + let name = &*last_segment.ident.to_string(); + + #[cfg(not(any( + feature = "chrono", + feature = "decimal", + feature = "decimal_float", + feature = "rocket_extras", + feature = "uuid", + feature = "ulid", + feature = "url", + feature = "time", + )))] + { + is_primitive(name) + } + + #[cfg(any( + feature = "chrono", + feature = "decimal", + feature = "decimal_float", + feature = "rocket_extras", + feature = "uuid", + feature = "ulid", + feature = "url", + feature = "time", + ))] + { + let mut primitive = is_primitive(name); + + #[cfg(feature = "chrono")] + if !primitive { + primitive = is_primitive_chrono(name); + } + + #[cfg(any(feature = "decimal", feature = "decimal_float"))] + if !primitive { + primitive = is_primitive_rust_decimal(name); + } + + #[cfg(feature = "rocket_extras")] + if !primitive { + primitive = matches!(name, "PathBuf"); + } + + #[cfg(feature = "uuid")] + if !primitive { + primitive = matches!(name, "Uuid"); + } + + #[cfg(feature = "ulid")] + if !primitive { + primitive = matches!(name, "Ulid"); + } + + #[cfg(feature = "url")] + if !primitive { + primitive = matches!(name, "Url"); + } + + #[cfg(feature = "time")] + if !primitive { + primitive = matches!( + name, + "Date" | "PrimitiveDateTime" | "OffsetDateTime" | "Duration" + ); + } + + primitive + } + } + + pub fn is_integer(&self) -> bool { + matches!( + &*self.last_segment_to_string(), + "i8" | "i16" + | "i32" + | "i64" + | "i128" + | "isize" + | "u8" + | "u16" + | "u32" + | "u64" + | "u128" + | "usize" + ) + } + + pub fn is_unsigned_integer(&self) -> bool { + matches!( + &*self.last_segment_to_string(), + "u8" | "u16" | "u32" | "u64" | "u128" | "usize" + ) + } + + pub fn is_number(&self) -> bool { + match &*self.last_segment_to_string() { + "f32" | "f64" => true, + _ if self.is_integer() => true, + _ => false, + } + } + + pub fn is_string(&self) -> bool { + matches!(&*self.last_segment_to_string(), "str" | "String") + } + + pub fn is_byte(&self) -> bool { + matches!(&*self.last_segment_to_string(), "u8") + } +} + +#[inline] +fn is_primitive(name: &str) -> bool { + matches!( + name, + "String" + | "str" + | "char" + | "bool" + | "usize" + | "u8" + | "u16" + | "u32" + | "u64" + | "u128" + | "isize" + | "i8" + | "i16" + | "i32" + | "i64" + | "i128" + | "f32" + | "f64" + ) +} + +#[inline] +#[cfg(feature = "chrono")] +fn is_primitive_chrono(name: &str) -> bool { + matches!( + name, + "DateTime" | "Date" | "NaiveDate" | "NaiveTime" | "Duration" | "NaiveDateTime" + ) +} + +#[inline] +#[cfg(any(feature = "decimal", feature = "decimal_float"))] +fn is_primitive_rust_decimal(name: &str) -> bool { + matches!(name, "Decimal") +} + +impl ToTokensDiagnostics for SchemaType<'_> { + fn to_tokens(&self, tokens: &mut proc_macro2::TokenStream) -> Result<(), Diagnostics> { + let last_segment = self.path.segments.last().ok_or_else(|| { + Diagnostics::with_span( + self.path.span(), + "schema type should have at least one segment in the path", + ) + })?; + let name = &*last_segment.ident.to_string(); + + fn schema_type_tokens( + tokens: &mut TokenStream, + schema_type: SchemaTypeInner, + nullable: bool, + ) { + if nullable { + tokens.extend(quote! { + { + use std::iter::FromIterator; + fastapi::openapi::schema::SchemaType::from_iter([ + #schema_type, + fastapi::openapi::schema::Type::Null + ]) + } + }) + } else { + tokens.extend(quote! { fastapi::openapi::schema::SchemaType::new(#schema_type)}); + } + } + + match name { + "String" | "str" | "char" => { + schema_type_tokens(tokens, SchemaTypeInner::String, self.nullable) + } + + "bool" => schema_type_tokens(tokens, SchemaTypeInner::Boolean, self.nullable), + + "i8" | "i16" | "i32" | "i64" | "i128" | "isize" | "u8" | "u16" | "u32" | "u64" + | "u128" | "usize" => { + schema_type_tokens(tokens, SchemaTypeInner::Integer, self.nullable) + } + "f32" | "f64" => schema_type_tokens(tokens, SchemaTypeInner::Number, self.nullable), + + #[cfg(feature = "chrono")] + "DateTime" | "NaiveDateTime" | "NaiveDate" | "NaiveTime" => { + schema_type_tokens(tokens, SchemaTypeInner::String, self.nullable) + } + + #[cfg(any(feature = "chrono", feature = "time"))] + "Date" | "Duration" => { + schema_type_tokens(tokens, SchemaTypeInner::String, self.nullable) + } + + #[cfg(feature = "decimal")] + "Decimal" => schema_type_tokens(tokens, SchemaTypeInner::String, self.nullable), + + #[cfg(feature = "decimal_float")] + "Decimal" => schema_type_tokens(tokens, SchemaTypeInner::Number, self.nullable), + + #[cfg(feature = "rocket_extras")] + "PathBuf" => schema_type_tokens(tokens, SchemaTypeInner::String, self.nullable), + + #[cfg(feature = "uuid")] + "Uuid" => schema_type_tokens(tokens, SchemaTypeInner::String, self.nullable), + + #[cfg(feature = "ulid")] + "Ulid" => schema_type_tokens(tokens, SchemaTypeInner::String, self.nullable), + + #[cfg(feature = "url")] + "Url" => schema_type_tokens(tokens, SchemaTypeInner::String, self.nullable), + + #[cfg(feature = "time")] + "PrimitiveDateTime" | "OffsetDateTime" => { + schema_type_tokens(tokens, SchemaTypeInner::String, self.nullable) + } + _ => schema_type_tokens(tokens, SchemaTypeInner::Object, self.nullable), + }; + + Ok(()) + } +} + +/// [`Parse`] and [`ToTokens`] implementation for [`fastapi::openapi::schema::SchemaFormat`]. +#[derive(Clone)] +#[cfg_attr(feature = "debug", derive(Debug))] +pub enum KnownFormat { + #[cfg(feature = "non_strict_integers")] + Int8, + #[cfg(feature = "non_strict_integers")] + Int16, + Int32, + Int64, + #[cfg(feature = "non_strict_integers")] + UInt8, + #[cfg(feature = "non_strict_integers")] + UInt16, + #[cfg(feature = "non_strict_integers")] + UInt32, + #[cfg(feature = "non_strict_integers")] + UInt64, + Float, + Double, + Byte, + Binary, + Date, + DateTime, + Duration, + Password, + #[cfg(feature = "uuid")] + Uuid, + #[cfg(feature = "ulid")] + Ulid, + #[cfg(feature = "url")] + Uri, + #[cfg(feature = "url")] + UriReference, + #[cfg(feature = "url")] + Iri, + #[cfg(feature = "url")] + IriReference, + Email, + IdnEmail, + Hostname, + IdnHostname, + Ipv4, + Ipv6, + UriTemplate, + JsonPointer, + RelativeJsonPointer, + Regex, + /// Custom format is reserved only for manual entry. + Custom(String), + /// This is not tokenized, but is present for purpose of having some format in + /// case we do not know the format. E.g. We cannot determine the format based on type path. + #[allow(unused)] + Unknown, +} + +impl KnownFormat { + pub fn from_path(path: &syn::Path) -> Result<Self, Diagnostics> { + let last_segment = path.segments.last().ok_or_else(|| { + Diagnostics::with_span( + path.span(), + "type should have at least one segment in the path", + ) + })?; + let name = &*last_segment.ident.to_string(); + + let variant = match name { + #[cfg(feature = "non_strict_integers")] + "i8" => Self::Int8, + #[cfg(feature = "non_strict_integers")] + "u8" => Self::UInt8, + #[cfg(feature = "non_strict_integers")] + "i16" => Self::Int16, + #[cfg(feature = "non_strict_integers")] + "u16" => Self::UInt16, + #[cfg(feature = "non_strict_integers")] + "u32" => Self::UInt32, + #[cfg(feature = "non_strict_integers")] + "u64" => Self::UInt64, + + #[cfg(not(feature = "non_strict_integers"))] + "i8" | "i16" | "u8" | "u16" | "u32" => Self::Int32, + + #[cfg(not(feature = "non_strict_integers"))] + "u64" => Self::Int64, + + "i32" => Self::Int32, + "i64" => Self::Int64, + "f32" => Self::Float, + "f64" => Self::Double, + + #[cfg(feature = "chrono")] + "NaiveDate" => Self::Date, + + #[cfg(feature = "chrono")] + "DateTime" | "NaiveDateTime" => Self::DateTime, + + #[cfg(any(feature = "chrono", feature = "time"))] + "Date" => Self::Date, + + #[cfg(feature = "decimal_float")] + "Decimal" => Self::Double, + + #[cfg(feature = "uuid")] + "Uuid" => Self::Uuid, + + #[cfg(feature = "ulid")] + "Ulid" => Self::Ulid, + + #[cfg(feature = "url")] + "Url" => Self::Uri, + + #[cfg(feature = "time")] + "PrimitiveDateTime" | "OffsetDateTime" => Self::DateTime, + _ => Self::Unknown, + }; + + Ok(variant) + } + + pub fn is_known_format(&self) -> bool { + !matches!(self, Self::Unknown) + } + + fn get_allowed_formats() -> String { + let default_formats = [ + "Int32", + "Int64", + "Float", + "Double", + "Byte", + "Binary", + "Date", + "DateTime", + "Duration", + "Password", + #[cfg(feature = "uuid")] + "Uuid", + #[cfg(feature = "ulid")] + "Ulid", + #[cfg(feature = "url")] + "Uri", + #[cfg(feature = "url")] + "UriReference", + #[cfg(feature = "url")] + "Iri", + #[cfg(feature = "url")] + "IriReference", + "Email", + "IdnEmail", + "Hostname", + "IdnHostname", + "Ipv4", + "Ipv6", + "UriTemplate", + "JsonPointer", + "RelativeJsonPointer", + "Regex", + ]; + #[cfg(feature = "non_strict_integers")] + let non_strict_integer_formats = [ + "Int8", "Int16", "Int32", "Int64", "UInt8", "UInt16", "UInt32", "UInt64", + ]; + + #[cfg(feature = "non_strict_integers")] + let formats = { + let mut formats = default_formats + .into_iter() + .chain(non_strict_integer_formats) + .collect::<Vec<_>>(); + formats.sort_unstable(); + formats.join(", ") + }; + #[cfg(not(feature = "non_strict_integers"))] + let formats = { + let formats = default_formats.into_iter().collect::<Vec<_>>(); + formats.join(", ") + }; + + formats + } +} + +impl Parse for KnownFormat { + fn parse(input: syn::parse::ParseStream) -> syn::Result<Self> { + let formats = KnownFormat::get_allowed_formats(); + + let lookahead = input.lookahead1(); + if lookahead.peek(Ident) { + let format = input.parse::<Ident>()?; + let name = &*format.to_string(); + + match name { + #[cfg(feature = "non_strict_integers")] + "Int8" => Ok(Self::Int8), + #[cfg(feature = "non_strict_integers")] + "Int16" => Ok(Self::Int16), + "Int32" => Ok(Self::Int32), + "Int64" => Ok(Self::Int64), + #[cfg(feature = "non_strict_integers")] + "UInt8" => Ok(Self::UInt8), + #[cfg(feature = "non_strict_integers")] + "UInt16" => Ok(Self::UInt16), + #[cfg(feature = "non_strict_integers")] + "UInt32" => Ok(Self::UInt32), + #[cfg(feature = "non_strict_integers")] + "UInt64" => Ok(Self::UInt64), + "Float" => Ok(Self::Float), + "Double" => Ok(Self::Double), + "Byte" => Ok(Self::Byte), + "Binary" => Ok(Self::Binary), + "Date" => Ok(Self::Date), + "DateTime" => Ok(Self::DateTime), + "Duration" => Ok(Self::Duration), + "Password" => Ok(Self::Password), + #[cfg(feature = "uuid")] + "Uuid" => Ok(Self::Uuid), + #[cfg(feature = "ulid")] + "Ulid" => Ok(Self::Ulid), + #[cfg(feature = "url")] + "Uri" => Ok(Self::Uri), + #[cfg(feature = "url")] + "UriReference" => Ok(Self::UriReference), + #[cfg(feature = "url")] + "Iri" => Ok(Self::Iri), + #[cfg(feature = "url")] + "IriReference" => Ok(Self::IriReference), + "Email" => Ok(Self::Email), + "IdnEmail" => Ok(Self::IdnEmail), + "Hostname" => Ok(Self::Hostname), + "IdnHostname" => Ok(Self::IdnHostname), + "Ipv4" => Ok(Self::Ipv4), + "Ipv6" => Ok(Self::Ipv6), + "UriTemplate" => Ok(Self::UriTemplate), + "JsonPointer" => Ok(Self::JsonPointer), + "RelativeJsonPointer" => Ok(Self::RelativeJsonPointer), + "Regex" => Ok(Self::Regex), + _ => Err(Error::new( + format.span(), + format!("unexpected format: {name}, expected one of: {formats}"), + )), + } + } else if lookahead.peek(LitStr) { + let value = input.parse::<LitStr>()?.value(); + Ok(Self::Custom(value)) + } else { + Err(lookahead.error()) + } + } +} + +impl ToTokens for KnownFormat { + fn to_tokens(&self, tokens: &mut TokenStream) { + match self { + #[cfg(feature = "non_strict_integers")] + Self::Int8 => tokens.extend(quote! {fastapi::openapi::schema::SchemaFormat::KnownFormat(fastapi::openapi::schema::KnownFormat::Int8)}), + #[cfg(feature = "non_strict_integers")] + Self::Int16 => tokens.extend(quote! {fastapi::openapi::schema::SchemaFormat::KnownFormat(fastapi::openapi::schema::KnownFormat::Int16)}), + Self::Int32 => tokens.extend(quote!(fastapi::openapi::schema::SchemaFormat::KnownFormat( + fastapi::openapi::schema::KnownFormat::Int32 + ))), + Self::Int64 => tokens.extend(quote!(fastapi::openapi::schema::SchemaFormat::KnownFormat( + fastapi::openapi::schema::KnownFormat::Int64 + ))), + #[cfg(feature = "non_strict_integers")] + Self::UInt8 => tokens.extend(quote! {fastapi::openapi::schema::SchemaFormat::KnownFormat(fastapi::openapi::schema::KnownFormat::UInt8)}), + #[cfg(feature = "non_strict_integers")] + Self::UInt16 => tokens.extend(quote! {fastapi::openapi::schema::SchemaFormat::KnownFormat(fastapi::openapi::schema::KnownFormat::UInt16)}), + #[cfg(feature = "non_strict_integers")] + Self::UInt32 => tokens.extend(quote!(fastapi::openapi::schema::SchemaFormat::KnownFormat( + fastapi::openapi::schema::KnownFormat::UInt32 + ))), + #[cfg(feature = "non_strict_integers")] + Self::UInt64 => tokens.extend(quote!(fastapi::openapi::schema::SchemaFormat::KnownFormat( + fastapi::openapi::schema::KnownFormat::UInt64 + ))), + Self::Float => tokens.extend(quote!(fastapi::openapi::schema::SchemaFormat::KnownFormat( + fastapi::openapi::schema::KnownFormat::Float + ))), + Self::Double => tokens.extend(quote!(fastapi::openapi::schema::SchemaFormat::KnownFormat( + fastapi::openapi::schema::KnownFormat::Double + ))), + Self::Byte => tokens.extend(quote!(fastapi::openapi::schema::SchemaFormat::KnownFormat( + fastapi::openapi::schema::KnownFormat::Byte + ))), + Self::Binary => tokens.extend(quote!(fastapi::openapi::schema::SchemaFormat::KnownFormat( + fastapi::openapi::schema::KnownFormat::Binary + ))), + Self::Date => tokens.extend(quote!(fastapi::openapi::schema::SchemaFormat::KnownFormat( + fastapi::openapi::schema::KnownFormat::Date + ))), + Self::DateTime => tokens.extend(quote!(fastapi::openapi::schema::SchemaFormat::KnownFormat( + fastapi::openapi::schema::KnownFormat::DateTime + ))), + Self::Duration => tokens.extend(quote! {fastapi::openapi::schema::SchemaFormat::KnownFormat( + fastapi::openapi::schema::KnownFormat::Duration + ) }), + Self::Password => tokens.extend(quote!(fastapi::openapi::schema::SchemaFormat::KnownFormat( + fastapi::openapi::schema::KnownFormat::Password + ))), + #[cfg(feature = "uuid")] + Self::Uuid => tokens.extend(quote!(fastapi::openapi::schema::SchemaFormat::KnownFormat( + fastapi::openapi::schema::KnownFormat::Uuid + ))), + #[cfg(feature = "ulid")] + Self::Ulid => tokens.extend(quote!(fastapi::openapi::schema::SchemaFormat::KnownFormat( + fastapi::openapi::schema::KnownFormat::Ulid + ))), + #[cfg(feature = "url")] + Self::Uri => tokens.extend(quote!(fastapi::openapi::schema::SchemaFormat::KnownFormat( + fastapi::openapi::schema::KnownFormat::Uri + ))), + #[cfg(feature = "url")] + Self::UriReference => tokens.extend(quote!(fastapi::openapi::schema::SchemaFormat::KnownFormat( + fastapi::openapi::schema::KnownFormat::UriReference + ))), + #[cfg(feature = "url")] + Self::Iri => tokens.extend(quote!(fastapi::openapi::schema::SchemaFormat::KnownFormat( + fastapi::openapi::schema::KnownFormat::Iri + ))), + #[cfg(feature = "url")] + Self::IriReference => tokens.extend(quote!(fastapi::openapi::schema::SchemaFormat::KnownFormat( + fastapi::openapi::schema::KnownFormat::IriReference + ))), + Self::Email => tokens.extend(quote!(fastapi::openapi::schema::SchemaFormat::KnownFormat( + fastapi::openapi::schema::KnownFormat::Email + ))), + Self::IdnEmail => tokens.extend(quote!(fastapi::openapi::schema::SchemaFormat::KnownFormat( + fastapi::openapi::schema::KnownFormat::IdnEmail + ))), + Self::Hostname => tokens.extend(quote!(fastapi::openapi::schema::SchemaFormat::KnownFormat( + fastapi::openapi::schema::KnownFormat::Hostname + ))), + Self::IdnHostname => tokens.extend(quote!(fastapi::openapi::schema::SchemaFormat::KnownFormat( + fastapi::openapi::schema::KnownFormat::IdnHostname + ))), + Self::Ipv4 => tokens.extend(quote!(fastapi::openapi::schema::SchemaFormat::KnownFormat( + fastapi::openapi::schema::KnownFormat::Ipv4 + ))), + Self::Ipv6 => tokens.extend(quote!(fastapi::openapi::schema::SchemaFormat::KnownFormat( + fastapi::openapi::schema::KnownFormat::Ipv6 + ))), + Self::UriTemplate => tokens.extend(quote!(fastapi::openapi::schema::SchemaFormat::KnownFormat( + fastapi::openapi::schema::KnownFormat::UriTemplate + ))), + Self::JsonPointer => tokens.extend(quote!(fastapi::openapi::schema::SchemaFormat::KnownFormat( + fastapi::openapi::schema::KnownFormat::JsonPointer + ))), + Self::RelativeJsonPointer => tokens.extend(quote!(fastapi::openapi::schema::SchemaFormat::KnownFormat( + fastapi::openapi::schema::KnownFormat::RelativeJsonPointer + ))), + Self::Regex => tokens.extend(quote!(fastapi::openapi::schema::SchemaFormat::KnownFormat( + fastapi::openapi::schema::KnownFormat::Regex + ))), + Self::Custom(value) => tokens.extend(quote!(fastapi::openapi::schema::SchemaFormat::Custom( + String::from(#value) + ))), + Self::Unknown => (), // unknown we just skip it + }; + } +} + +#[cfg_attr(feature = "debug", derive(Debug))] +pub struct PrimitiveType { + pub ty: syn::Type, +} + +impl PrimitiveType { + pub fn new(path: &Path) -> Option<PrimitiveType> { + let last_segment = path.segments.last().unwrap_or_else(|| { + panic!( + "Path for DefaultType must have at least one segment: `{path}`", + path = path.to_token_stream() + ) + }); + + let name = &*last_segment.ident.to_string(); + + let ty: syn::Type = match name { + "String" | "str" | "char" => syn::parse_quote!(#path), + + "bool" => syn::parse_quote!(#path), + + "i8" | "i16" | "i32" | "i64" | "i128" | "isize" | "u8" | "u16" | "u32" | "u64" + | "u128" | "usize" => syn::parse_quote!(#path), + "f32" | "f64" => syn::parse_quote!(#path), + + #[cfg(feature = "chrono")] + "DateTime" | "NaiveDateTime" | "NaiveDate" | "NaiveTime" => { + syn::parse_quote!(String) + } + + #[cfg(any(feature = "chrono", feature = "time"))] + "Date" | "Duration" => { + syn::parse_quote!(String) + } + + #[cfg(feature = "decimal")] + "Decimal" => { + syn::parse_quote!(String) + } + + #[cfg(feature = "decimal_float")] + "Decimal" => { + syn::parse_quote!(f64) + } + + #[cfg(feature = "rocket_extras")] + "PathBuf" => { + syn::parse_quote!(String) + } + + #[cfg(feature = "uuid")] + "Uuid" => { + syn::parse_quote!(String) + } + + #[cfg(feature = "ulid")] + "Ulid" => { + syn::parse_quote!(String) + } + + #[cfg(feature = "url")] + "Url" => { + syn::parse_quote!(String) + } + + #[cfg(feature = "time")] + "PrimitiveDateTime" | "OffsetDateTime" => { + syn::parse_quote!(String) + } + _ => { + // not a primitive type + return None; + } + }; + + Some(Self { ty }) + } +} diff --git a/fastapi-gen/src/security_requirement.rs b/fastapi-gen/src/security_requirement.rs new file mode 100644 index 0000000..03e15eb --- /dev/null +++ b/fastapi-gen/src/security_requirement.rs @@ -0,0 +1,69 @@ +use proc_macro2::TokenStream; +use quote::{quote, ToTokens}; +use syn::{ + bracketed, + parse::{Parse, ParseStream}, + punctuated::Punctuated, + token::Comma, + LitStr, Token, +}; + +use crate::Array; + +#[derive(Default)] +#[cfg_attr(feature = "debug", derive(Debug))] +pub struct SecurityRequirementsAttrItem { + pub name: Option<String>, + pub scopes: Option<Vec<String>>, +} + +#[derive(Default)] +#[cfg_attr(feature = "debug", derive(Debug))] +pub struct SecurityRequirementsAttr(Punctuated<SecurityRequirementsAttrItem, Comma>); + +impl Parse for SecurityRequirementsAttr { + fn parse(input: ParseStream) -> syn::Result<Self> { + Punctuated::<SecurityRequirementsAttrItem, Comma>::parse_terminated(input) + .map(|o| Self(o.into_iter().collect())) + } +} + +impl Parse for SecurityRequirementsAttrItem { + fn parse(input: ParseStream) -> syn::Result<Self> { + let name = input.parse::<LitStr>()?.value(); + + input.parse::<Token![=]>()?; + + let scopes_stream; + bracketed!(scopes_stream in input); + + let scopes = Punctuated::<LitStr, Comma>::parse_terminated(&scopes_stream)? + .iter() + .map(LitStr::value) + .collect::<Vec<_>>(); + + Ok(Self { + name: Some(name), + scopes: Some(scopes), + }) + } +} + +impl ToTokens for SecurityRequirementsAttr { + fn to_tokens(&self, tokens: &mut TokenStream) { + tokens.extend(quote! { + fastapi::openapi::security::SecurityRequirement::default() + }); + + for requirement in &self.0 { + if let (Some(name), Some(scopes)) = (&requirement.name, &requirement.scopes) { + let scopes = scopes.iter().collect::<Array<&String>>(); + let scopes_len = scopes.len(); + + tokens.extend(quote! { + .add::<&str, [&str; #scopes_len], &str>(#name, #scopes) + }); + } + } + } +} diff --git a/fastapi-gen/tests/common.rs b/fastapi-gen/tests/common.rs new file mode 100644 index 0000000..4fbbb6a --- /dev/null +++ b/fastapi-gen/tests/common.rs @@ -0,0 +1,40 @@ +use serde_json::Value; + +pub fn value_as_string(value: Option<&'_ Value>) -> String { + value.unwrap_or(&Value::Null).to_string() +} + +#[allow(unused)] +pub fn assert_json_array_len(value: &Value, len: usize) { + match value { + Value::Array(array) => assert_eq!( + len, + array.len(), + "wrong amount of parameters {} != {}", + len, + array.len() + ), + _ => unreachable!(), + } +} + +#[macro_export] +macro_rules! assert_value { + ($value:expr=> $( $path:literal = $expected:literal, $error:literal)* ) => {{ + $( + let p = &*format!("/{}", $path.replace(".", "/").replace("[", "").replace("]", "")); + let actual = $crate::common::value_as_string(Some($value.pointer(p).unwrap_or(&serde_json::Value::Null))); + assert_eq!(actual, $expected, "{}: {} expected to be: {} but was: {}", $error, $path, $expected, actual); + )* + }}; + + ($value:expr=> $( $path:literal = $expected:expr, $error:literal)*) => { + { + $( + let p = &*format!("/{}", $path.replace(".", "/").replace("[", "").replace("]", "")); + let actual = $value.pointer(p).unwrap_or(&serde_json::Value::Null); + assert!(actual == &$expected, "{}: {} expected to be: {:?} but was: {:?}", $error, $path, $expected, actual); + )* + } + } +} diff --git a/fastapi-gen/tests/fastapi_gen_test.rs b/fastapi-gen/tests/fastapi_gen_test.rs new file mode 100644 index 0000000..fe4fc29 --- /dev/null +++ b/fastapi-gen/tests/fastapi_gen_test.rs @@ -0,0 +1,163 @@ +#![allow(dead_code)] + +use fastapi::{ + openapi::{ + self, + security::{HttpAuthScheme, HttpBuilder, SecurityScheme}, + server::{ServerBuilder, ServerVariableBuilder}, + }, + Modify, OpenApi, ToSchema, +}; +use serde::{Deserialize, Serialize}; + +#[derive(Deserialize, Serialize, ToSchema)] +#[schema(example = json!({"name": "bob the cat", "id": 1}))] +struct Pet { + id: u64, + name: String, + age: Option<i32>, +} + +// #[derive(ToSchema)] +// struct Status<StatusType> { +// status: StatusType, +// } + +// #[derive(ToSchema)] +// enum StatusType { +// Ok, +// NotOk, +// } + +// #[derive(ToSchema)] +// enum Random { +// Response { id: String }, +// PetResponse(Pet), +// Ids(Vec<String>), +// UnitValue, +// } + +// #[derive(Serialize, Deserialize, ToSchema)] +// struct Simple { +// greeting: &'static str, +// cow: Cow<'static, str>, +// } + +mod pet_api { + use super::*; + + const ID: &str = "get_pet"; + + /// Get pet by id + /// + /// Get pet from database by pet database id + #[fastapi::path( + get, + operation_id = ID, + path = "/pets/{id}", + responses( + (status = 200, description = "Pet found successfully", body = Pet), + (status = 404, description = "Pet was not found") + ), + params( + ("id" = u64, Path, description = "Pet database id to get Pet for"), + ), + security( + (), + ("my_auth" = ["read:items", "edit:items"]), + ("token_jwt" = []) + ) + )] + #[allow(unused)] + async fn get_pet_by_id(pet_id: u64) -> Pet { + Pet { + id: pet_id, + age: None, + name: "lightning".to_string(), + } + } +} + +#[derive(Default, OpenApi)] +#[openapi( + paths(pet_api::get_pet_by_id), + components(schemas(Pet, C<A, B>, C<B, A>)), + modifiers(&Foo), + security( + (), + ("my_auth" = ["read:items", "edit:items"]), + ("token_jwt" = []) + ) +)] +struct ApiDoc; + +macro_rules! build_foo { + ($typ: ident, $d: ty, $r: ty) => { + #[derive(Debug, Serialize, ToSchema)] + struct $typ { + data: $d, + resources: $r, + } + }; +} + +#[derive(Deserialize, Serialize, ToSchema)] +struct A { + a: String, +} + +#[derive(Deserialize, Serialize, ToSchema)] +struct B { + b: i64, +} + +#[derive(Deserialize, Serialize, ToSchema)] +struct C<T, R> { + field_1: R, + field_2: T, +} + +impl Modify for Foo { + fn modify(&self, openapi: &mut openapi::OpenApi) { + if let Some(schema) = openapi.components.as_mut() { + schema.add_security_scheme( + "token_jwt", + SecurityScheme::Http( + HttpBuilder::new() + .scheme(HttpAuthScheme::Bearer) + .bearer_format("JWT") + .build(), + ), + ) + } + + openapi.servers = Some(vec![ServerBuilder::new() + .url("/api/bar/{username}") + .description(Some("this is description of the server")) + .parameter( + "username", + ServerVariableBuilder::new() + .default_value("the_user") + .description(Some("this is user")), + ) + .build()]); + } +} + +#[derive(Debug, Serialize, ToSchema)] +struct Foo; + +#[derive(Debug, Serialize, ToSchema)] +struct FooResources; + +#[test] +#[ignore = "this is just a test bed to run macros"] +fn derive_openapi() { + fastapi::openapi::OpenApi::new( + fastapi::openapi::Info::new("my application", "0.1.0"), + fastapi::openapi::Paths::new(), + ); + println!("{}", ApiDoc::openapi().to_pretty_json().unwrap()); + + build_foo!(GetFooBody, Foo, FooResources); +} diff --git a/fastapi-gen/tests/modify_test.rs b/fastapi-gen/tests/modify_test.rs new file mode 100644 index 0000000..bd697c0 --- /dev/null +++ b/fastapi-gen/tests/modify_test.rs @@ -0,0 +1,44 @@ +use fastapi::{ + openapi::{ + self, + security::{HttpAuthScheme, HttpBuilder, SecurityScheme}, + }, + Modify, OpenApi, +}; + +mod common; + +#[test] +fn modify_openapi_add_security_scheme() { + #[derive(Default, OpenApi)] + #[openapi(modifiers(&SecurityAddon))] + struct ApiDoc; + + struct SecurityAddon; + + impl Modify for SecurityAddon { + fn modify(&self, openapi: &mut openapi::OpenApi) { + openapi.components = Some( + fastapi::openapi::ComponentsBuilder::new() + .security_scheme( + "api_jwt_token", + SecurityScheme::Http( + HttpBuilder::new() + .scheme(HttpAuthScheme::Bearer) + .bearer_format("JWT") + .build(), + ), + ) + .build(), + ) + } + } + + let doc = serde_json::to_value(ApiDoc::openapi()).unwrap(); + + assert_value! {doc=> + "components.securitySchemes.api_jwt_token.scheme" = r###""bearer""###, "api_jwt_token scheme" + "components.securitySchemes.api_jwt_token.type" = r###""http""###, "api_jwt_token type" + "components.securitySchemes.api_jwt_token.bearerFormat" = r###""JWT""###, "api_jwt_token bearerFormat" + } +} diff --git a/fastapi-gen/tests/openapi_derive.rs b/fastapi-gen/tests/openapi_derive.rs new file mode 100644 index 0000000..1e3f15a --- /dev/null +++ b/fastapi-gen/tests/openapi_derive.rs @@ -0,0 +1,771 @@ +use std::{borrow::Cow, marker::PhantomData}; + +use assert_json_diff::{assert_json_eq, assert_json_include}; +use fastapi::{ + openapi::{RefOr, Response, ResponseBuilder}, + OpenApi, ToResponse, +}; +use fastapi_gen::ToSchema; +use serde::Serialize; +use serde_json::{json, Value}; + +mod common; + +#[test] +fn derive_openapi_with_security_requirement() { + #[derive(Default, OpenApi)] + #[openapi(security( + (), + ("my_auth" = ["read:items", "edit:items"]), + ("token_jwt" = []), + ("api_key1" = [], "api_key2" = []), + ))] + struct ApiDoc; + + let doc_value = serde_json::to_value(ApiDoc::openapi()).unwrap(); + + assert_value! {doc_value=> + "security.[0]" = "{}", "Optional security requirement" + "security.[1].my_auth.[0]" = r###""read:items""###, "api_oauth first scope" + "security.[1].my_auth.[1]" = r###""edit:items""###, "api_oauth second scope" + "security.[2].token_jwt" = "[]", "jwt_token auth scopes" + "security.[3].api_key1" = "[]", "api_key1 auth scopes" + "security.[3].api_key2" = "[]", "api_key2 auth scopes" + } +} + +#[test] +fn derive_logical_or_security_requirement() { + #[derive(Default, OpenApi)] + #[openapi(security( + ("oauth" = ["a"]), + ("oauth" = ["b"]), + ))] + struct ApiDoc; + + let doc_value = serde_json::to_value(ApiDoc::openapi()).unwrap(); + let security = doc_value + .pointer("/security") + .expect("should have security requirements"); + + assert_json_eq!( + security, + json!([ + {"oauth": ["a"]}, + {"oauth": ["b"]}, + ]) + ); +} + +#[test] +fn derive_openapi_tags() { + #[derive(OpenApi)] + #[openapi(tags( + (name = "random::api", description = "this is random api description"), + (name = "pets::api", description = "api all about pets", external_docs( + url = "http://localhost", description = "Find more about pets") + ) + ))] + struct ApiDoc; + + let doc = serde_json::to_value(ApiDoc::openapi()).unwrap(); + + assert_value! {doc=> + "tags.[0].name" = r###""random::api""###, "Tags random_api name" + "tags.[0].description" = r###""this is random api description""###, "Tags random_api description" + "tags.[0].externalDocs" = r###"null"###, "Tags random_api external docs" + "tags.[1].name" = r###""pets::api""###, "Tags pets_api name" + "tags.[1].description" = r###""api all about pets""###, "Tags pets_api description" + "tags.[1].externalDocs.url" = r###""http://localhost""###, "Tags pets_api external docs url" + "tags.[1].externalDocs.description" = r###""Find more about pets""###, "Tags pets_api external docs description" + } +} + +#[test] +fn derive_openapi_tags_include_str() { + #[derive(OpenApi)] + #[openapi(tags( + (name = "random::api", description = include_str!("testdata/openapi-derive-info-description")), + ))] + struct ApiDoc; + + let doc = serde_json::to_value(ApiDoc::openapi()).unwrap(); + + assert_value! {doc=> + "tags.[0].name" = r###""random::api""###, "Tags random_api name" + "tags.[0].description" = r###""this is include description\n""###, "Tags random_api description" + } +} + +#[test] +fn derive_openapi_tags_with_const_name() { + const TAG: &str = "random::api"; + #[derive(OpenApi)] + #[openapi(tags( + (name = TAG), + ))] + struct ApiDoc; + + let doc = serde_json::to_value(ApiDoc::openapi()).unwrap(); + + assert_value! {doc=> + "tags.[0].name" = r###""random::api""###, "Tags random_api name" + "tags.[0].description" = r###"null"###, "Tags random_api description" + } +} + +#[test] +fn derive_openapi_with_external_docs() { + #[derive(OpenApi)] + #[openapi(external_docs( + url = "http://localhost.more.about.api", + description = "Find out more" + ))] + struct ApiDoc; + + let doc = serde_json::to_value(ApiDoc::openapi()).unwrap(); + + assert_value! {doc=> + "externalDocs.url" = r###""http://localhost.more.about.api""###, "External docs url" + "externalDocs.description" = r###""Find out more""###, "External docs description" + } +} + +#[test] +fn derive_openapi_with_external_docs_only_url() { + #[derive(OpenApi)] + #[openapi(external_docs(url = "http://localhost.more.about.api"))] + struct ApiDoc; + + let doc = serde_json::to_value(ApiDoc::openapi()).unwrap(); + + assert_value! {doc=> + "externalDocs.url" = r###""http://localhost.more.about.api""###, "External docs url" + "externalDocs.description" = r###"null"###, "External docs description" + } +} + +#[test] +fn derive_openapi_with_components_in_different_module() { + mod custom { + use fastapi::ToSchema; + + #[derive(ToSchema)] + #[allow(unused)] + pub(super) struct Todo { + name: String, + } + } + + #[derive(OpenApi)] + #[openapi(components(schemas(custom::Todo)))] + struct ApiDoc; + + let doc = serde_json::to_value(ApiDoc::openapi()).unwrap(); + let todo = doc.pointer("/components/schemas/Todo").unwrap(); + + assert_ne!( + todo, + &Value::Null, + "Expected components.schemas.Todo not to be null" + ); +} + +#[test] +fn derive_openapi_with_responses() { + #[allow(unused)] + struct MyResponse; + + impl<'r> ToResponse<'r> for MyResponse { + fn response() -> (&'r str, RefOr<Response>) { + ( + "MyResponse", + ResponseBuilder::new().description("Ok").build().into(), + ) + } + } + + #[derive(OpenApi)] + #[openapi(components(responses(MyResponse)))] + struct ApiDoc; + + let doc = serde_json::to_value(ApiDoc::openapi()).unwrap(); + let responses = doc.pointer("/components/responses").unwrap(); + + assert_json_eq!( + responses, + json!({ + "MyResponse": { + "description": "Ok" + }, + }) + ) +} + +#[test] +fn derive_openapi_with_servers() { + #[derive(OpenApi)] + #[openapi( + servers( + (url = "http://localhost:8989", description = "this is description"), + (url = "http://api.{username}:{port}", description = "remote api", + variables( + ("username" = (default = "demo", description = "Default username for API")), + ("port" = (default = "8080", enum_values("8080", "5000", "3030"), description = "Supported ports for the API")) + ) + ) + ) + )] + struct ApiDoc; + + let value = serde_json::to_value(ApiDoc::openapi()).unwrap(); + let servers = value.pointer("/servers"); + + assert_json_eq!( + servers, + json!([ + { + "description": "this is description", + "url": "http://localhost:8989" + }, + { + "description": "remote api", + "url": "http://api.{username}:{port}", + "variables": { + "port": { + "default": "8080", + "enum": [ + "8080", + "5000", + "3030" + ], + "description": "Supported ports for the API" + }, + "username": { + "default": "demo", + "description": "Default username for API" + } + } + } + ]) + ) +} + +#[test] +fn derive_openapi_with_licence() { + #[derive(OpenApi)] + #[openapi(info(license(name = "licence_name", identifier = "MIT"), version = "1.0.0",))] + struct ApiDoc; + + let value = serde_json::to_value(ApiDoc::openapi()).unwrap(); + let info = value.pointer("/info/license"); + + assert_json_include!( + actual: info, + expected: + json!({ + "name": "licence_name", + "identifier": "MIT", + }) + ) +} + +#[test] +fn derive_openapi_with_custom_info() { + #[derive(OpenApi)] + #[openapi(info( + terms_of_service = "http://localhost/terms", + title = "title override", + description = "description override", + version = "1.0.0", + contact(name = "Test") + ))] + struct ApiDoc; + + let value = serde_json::to_value(ApiDoc::openapi()).unwrap(); + let info = value.pointer("/info"); + + assert_json_include!( + actual: info, + expected: + json!( + { + "title": "title override", + "termsOfService": "http://localhost/terms", + "description": "description override", + "license": { + "name": "MIT OR Apache-2.0", + }, + "contact": { + "name": "Test" + }, + "version": "1.0.0", + } + ) + ) +} + +#[test] +fn derive_openapi_with_include_str_description() { + #[derive(OpenApi)] + #[openapi(info( + title = "title override", + description = include_str!("./testdata/openapi-derive-info-description"), + contact(name = "Test") + ))] + struct ApiDoc; + + let value = serde_json::to_value(ApiDoc::openapi()).unwrap(); + let info = value.pointer("/info"); + + assert_json_include!( + actual: info, + expected: + json!( + { + "title": "title override", + "description": "this is include description\n", + "license": { + "name": "MIT OR Apache-2.0", + }, + "contact": { + "name": "Test" + } + } + ) + ) +} + +#[test] +fn derive_openapi_with_generic_response() { + struct Resp; + + #[derive(Serialize, ToResponse)] + struct Response<'a, Resp> { + #[serde(skip)] + _p: PhantomData<Resp>, + value: Cow<'a, str>, + } + + #[derive(OpenApi)] + #[openapi(components(responses(Response<Resp>)))] + struct ApiDoc; + + let doc = serde_json::to_value(ApiDoc::openapi()).unwrap(); + let response = doc.pointer("/components/responses/Response"); + + assert_json_eq!( + response, + json!({ + "content": { + "application/json": { + "schema": { + "properties": { + "value": { + "type": "string" + } + }, + "required": ["value"], + "type": "object" + } + } + }, + "description": "" + }) + ) +} + +#[test] +fn derive_openapi_with_generic_schema() { + #[derive(ToSchema)] + struct Value; + + #[derive(Serialize, ToSchema)] + struct Pet<'a, Resp> { + #[serde(skip)] + _p: PhantomData<Resp>, + value: Cow<'a, str>, + } + + #[derive(OpenApi)] + #[openapi(components(schemas(Pet<Value>)))] + struct ApiDoc; + + let doc = serde_json::to_value(ApiDoc::openapi()).unwrap(); + let schema = doc.pointer("/components/schemas/Pet_Value"); + + assert_json_eq!( + schema, + json!({ + "properties": { + "value": { + "type": "string" + } + }, + "required": ["value"], + "type": "object" + }) + ) +} + +#[test] +fn derive_openapi_with_generic_schema_with_as() { + #[derive(ToSchema)] + struct Value; + + #[derive(Serialize, ToSchema)] + #[schema(as = api::models::Pet)] + struct Pet<'a, Resp> { + #[serde(skip)] + _p: PhantomData<Resp>, + value: Cow<'a, str>, + } + + #[derive(OpenApi)] + #[openapi(components(schemas(Pet<Value>)))] + struct ApiDoc; + + let doc = serde_json::to_value(ApiDoc::openapi()).unwrap(); + let schema = doc.pointer("/components/schemas/api.models.Pet_Value"); + + assert_json_eq!( + schema, + json!({ + "properties": { + "value": { + "type": "string" + } + }, + "required": ["value"], + "type": "object" + }) + ) +} + +#[test] +fn derive_nest_openapi_with_tags() { + #[fastapi::path(get, path = "/api/v1/status")] + #[allow(dead_code)] + fn test_path_status() {} + + mod random { + #[fastapi::path(get, path = "/random")] + #[allow(dead_code)] + fn random() {} + } + + mod user_api { + #[fastapi::path(get, path = "/test")] + #[allow(dead_code)] + fn user_test_path() {} + + #[derive(super::OpenApi)] + #[openapi(paths(user_test_path))] + pub(super) struct UserApi; + } + + #[fastapi::path(get, path = "/", tag = "mytag", tags = ["yeah", "wowow"])] + #[allow(dead_code)] + fn foobar() {} + + #[fastapi::path(get, path = "/another", tag = "mytaganother")] + #[allow(dead_code)] + fn foobaranother() {} + + #[fastapi::path(get, path = "/", tags = ["yeah", "wowow"])] + #[allow(dead_code)] + fn foobar2() {} + + #[derive(OpenApi)] + #[openapi(paths(foobar, foobaranother), nest( + (path = "/nest2", api = FooBarNestedApi) + ))] + struct FooBarApi; + + #[derive(OpenApi)] + #[openapi(paths(foobar2))] + struct FooBarNestedApi; + + const TAG: &str = "tag1"; + + #[derive(OpenApi)] + #[openapi( + paths( + test_path_status, + random::random + ), + nest( + (path = "/api/v1/user", api = user_api::UserApi, tags = ["user", TAG]), + (path = "/api/v1/foobar", api = FooBarApi, tags = ["foobarapi"]) + ) + )] + struct ApiDoc; + + let api = serde_json::to_value(ApiDoc::openapi()).expect("should serialize to value"); + let paths = api.pointer("/paths"); + + assert_json_eq!( + paths, + json!({ + "/api/v1/foobar/": { + "get": { + "operationId": "foobar", + "responses": {}, + "tags": [ "mytag", "yeah", "wowow", "foobarapi" ] + } + }, + "/api/v1/foobar/another": { + "get": { + "operationId": "foobaranother", + "responses": {}, + "tags": [ "mytaganother", "foobarapi" ] + } + }, + "/api/v1/foobar/nest2/": { + "get": { + "operationId": "foobar2", + "responses": {}, + "tags": [ "yeah", "wowow", "foobarapi" ] + } + }, + "/api/v1/status": { + "get": { + "operationId": "test_path_status", + "responses": {}, + "tags": [] + } + }, + "/api/v1/user/test": { + "get": { + "operationId": "user_test_path", + "responses": {}, + "tags": [ "user", TAG ] + } + }, + "/random": { + "get": { + "operationId": "random", + "responses": {}, + "tags": [ "random" ] + } + } + }) + ) +} + +#[test] +fn openapi_schemas_resolve_generic_enum_schema() { + #![allow(dead_code)] + use fastapi::ToSchema; + + #[derive(ToSchema)] + enum Element<T> { + One(T), + Many(Vec<T>), + } + + #[derive(OpenApi)] + #[openapi(components(schemas(Element<String>)))] + struct ApiDoc; + + let doc = ApiDoc::openapi(); + + let value = serde_json::to_value(&doc).expect("OpenAPI is JSON serializable"); + let schemas = value.pointer("/components/schemas").unwrap(); + let json = serde_json::to_string_pretty(&schemas).expect("OpenAPI is json serializable"); + println!("{json}"); + + assert_json_eq!( + schemas, + json!({ + "Element_String": { + "oneOf": [ + { + "properties": { + "One": { + "type": "string" + } + }, + "required": [ + "One" + ], + "type": "object" + }, + { + "properties": { + "Many": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "Many" + ], + "type": "object" + } + ] + } + }) + ) +} + +#[test] +fn openapi_schemas_resolve_schema_references() { + #![allow(dead_code)] + use fastapi::ToSchema; + + #[derive(ToSchema)] + enum Element<T> { + One(T), + Many(Vec<T>), + } + + #[derive(ToSchema)] + struct Foobar; + + #[derive(ToSchema)] + struct Account { + id: i32, + } + + #[derive(ToSchema)] + struct Person { + name: String, + foo_bar: Foobar, + accounts: Vec<Option<Account>>, + } + + #[derive(ToSchema)] + struct Yeah { + name: String, + foo_bar: Foobar, + accounts: Vec<Option<Account>>, + } + + #[derive(ToSchema)] + struct Boo { + boo: bool, + } + + #[derive(ToSchema)] + struct OneOfOne(Person); + + #[derive(ToSchema)] + struct OneOfYeah(Yeah); + + #[derive(ToSchema)] + struct ThisIsNone; + + #[derive(ToSchema)] + enum EnumMixedContent { + ContentZero, + One(Foobar), + NamedSchema { + value: Account, + value2: Boo, + foo: ThisIsNone, + int: i32, + f: bool, + }, + Many(Vec<Person>), + } + + #[derive(ToSchema)] + struct Foob { + item: Element<String>, + item2: Element<Yeah>, + } + + #[derive(OpenApi)] + #[openapi(components(schemas(Person, Foob, OneOfYeah, OneOfOne, EnumMixedContent, Element<String>)))] + struct ApiDoc; + + let doc = ApiDoc::openapi(); + + let value = serde_json::to_value(&doc).expect("OpenAPI is JSON serializable"); + let schemas = value.pointer("/components").unwrap(); + let json = serde_json::to_string_pretty(&schemas).expect("OpenAPI is json serializable"); + println!("{json}"); + + let expected = + include_str!("./testdata/openapi_schemas_resolve_inner_schema_references").trim(); + assert_eq!(expected, json.trim()); +} + +#[test] +fn openapi_resolvle_recursive_references() { + #![allow(dead_code)] + use fastapi::ToSchema; + + #[derive(ToSchema)] + struct Foobar; + + #[derive(ToSchema)] + struct Account { + id: i32, + foobar: Foobar, + } + + #[derive(ToSchema)] + struct Person { + name: String, + accounts: Vec<Option<Account>>, + } + + #[derive(OpenApi)] + #[openapi(components(schemas(Person)))] + struct ApiDoc; + + let doc = ApiDoc::openapi(); + + let value = serde_json::to_value(doc).expect("OpenAPI is serde serializable"); + let schemas = value + .pointer("/components/schemas") + .expect("OpenAPI must have schemas"); + + assert_json_eq!( + schemas, + json!({ + "Account": { + "properties": { + "id": { + "type": "integer", + "format": "int32", + }, + "foobar": { + "$ref": "#/components/schemas/Foobar" + } + }, + "type": "object", + "required": [ "id" , "foobar" ], + }, + "Foobar": { + "default": null, + }, + "Person": { + "properties": { + "accounts": { + "items": { + "oneOf": [ + { + "type": "null", + }, + { + "$ref": "#/components/schemas/Account", + } + ] + }, + "type": "array", + }, + "name": { + "type": "string" + }, + }, + "type": "object", + "required": [ "name" , "accounts" ], + } + }) + ) +} diff --git a/fastapi-gen/tests/openapi_derive_test.rs b/fastapi-gen/tests/openapi_derive_test.rs new file mode 100644 index 0000000..6eff5da --- /dev/null +++ b/fastapi-gen/tests/openapi_derive_test.rs @@ -0,0 +1,128 @@ +#![allow(dead_code)] + +use fastapi::{ + openapi::{ + self, + security::{HttpAuthScheme, HttpBuilder, SecurityScheme}, + server::{ServerBuilder, ServerVariableBuilder}, + }, + Modify, OpenApi, ToSchema, +}; +use serde::{Deserialize, Serialize}; + +#[derive(Deserialize, Serialize, ToSchema)] +#[schema(example = json!({"name": "bob the cat", "id": 1}))] +struct Pet { + id: u64, + name: String, + age: Option<i32>, +} + +mod pet_api { + use super::*; + + /// Get pet by id + /// + /// Get pet from database by pet database id + #[fastapi::path( + get, + path = "/pets/{id}", + responses( + (status = 200, description = "Pet found successfully", body = Pet), + (status = 404, description = "Pet was not found") + ), + params( + ("id" = u64, Path, description = "Pet database id to get Pet for"), + ), + security( + (), + ("my_auth1" = ["read:items", "edit:items"], "my_auth2" = ["read:items"]), + ("token_jwt" = []) + ) + )] + #[allow(unused)] + async fn get_pet_by_id(pet_id: u64) -> Pet { + Pet { + id: pet_id, + age: None, + name: "lightning".to_string(), + } + } +} + +#[derive(Default, OpenApi)] +#[openapi( + paths(pet_api::get_pet_by_id), + components(schemas(Pet, C<A, B>, C<B, A>)), + modifiers(&Foo), + security( + (), + ("my_auth1" = ["read:items", "edit:items"], "my_auth2" = ["read:items"]), + ("token_jwt" = []) + ) +)] +struct ApiDoc; + +#[derive(Deserialize, Serialize, ToSchema)] +struct A { + a: String, +} + +#[derive(Deserialize, Serialize, ToSchema)] +struct B { + b: i64, +} + +#[derive(Deserialize, Serialize, ToSchema)] +struct C<T, R> { + field_1: R, + field_2: T, +} + +#[derive(Debug, Serialize)] +struct Foo; + +#[derive(Debug, Serialize)] +struct FooResources; + +impl Modify for Foo { + fn modify(&self, openapi: &mut openapi::OpenApi) { + if let Some(schema) = openapi.components.as_mut() { + schema.add_security_scheme( + "token_jwt", + SecurityScheme::Http( + HttpBuilder::new() + .scheme(HttpAuthScheme::Bearer) + .bearer_format("JWT") + .build(), + ), + ) + } + + openapi.servers = Some(vec![ServerBuilder::new() + .url("/api/bar/{username}") + .description(Some("this is description of the server")) + .parameter( + "username", + ServerVariableBuilder::new() + .default_value("the_user") + .description(Some("this is user")), + ) + .build()]); + } +} + +#[test] +#[cfg(feature = "yaml")] +fn stable_yaml() { + let left = ApiDoc::openapi().to_yaml().unwrap(); + let right = ApiDoc::openapi().to_yaml().unwrap(); + assert_eq!(left, right); +} + +#[test] +fn stable_json() { + let left = ApiDoc::openapi().to_json().unwrap(); + let right = ApiDoc::openapi().to_json().unwrap(); + assert_eq!(left, right); +} diff --git a/fastapi-gen/tests/path_derive.rs b/fastapi-gen/tests/path_derive.rs new file mode 100644 index 0000000..b0b1f4a --- /dev/null +++ b/fastapi-gen/tests/path_derive.rs @@ -0,0 +1,3169 @@ +use std::collections::BTreeMap; + +use assert_json_diff::{assert_json_eq, assert_json_matches, CompareMode, Config, NumericMode}; +use fastapi::openapi::RefOr; +use fastapi::openapi::{Object, ObjectBuilder}; +use fastapi::Path; +use fastapi::{ + openapi::{Response, ResponseBuilder, ResponsesBuilder}, + IntoParams, IntoResponses, OpenApi, ToSchema, +}; +use paste::paste; +use serde::Serialize; +use serde_json::{json, Value}; +use std::collections::HashMap; + +mod common; + +macro_rules! test_api_fn_doc { + ( $handler:path, operation: $operation:expr, path: $path:literal ) => {{ + use fastapi::OpenApi; + #[derive(OpenApi, Default)] + #[openapi(paths($handler))] + struct ApiDoc; + + let doc = &serde_json::to_value(ApiDoc::openapi()).unwrap(); + let operation = doc + .pointer(&format!( + "/paths/{}/{}", + $path.replace("/", "~1"), + stringify!($operation) + )) + .unwrap_or(&serde_json::Value::Null); + operation.clone() + }}; +} + +macro_rules! test_api_fn { + (name: $name:ident, module: $module:ident, + operation: $operation:ident, + path: $path:expr + $(, params: $params:expr )? + $(, operation_id: $operation_id:expr )? + $(, tag: $tag:expr )? + $(; $( #[$meta:meta] )* )? ) => { + mod $module { + $( $(#[$meta])* )* + #[fastapi::path( + $operation, + $( operation_id = $operation_id, )* + path = $path, + responses( + (status = 200, description = "success response") + ), + $( params $params, )* + $( tag = $tag, )* + )] + #[allow(unused)] + async fn $name() -> String { + "foo".to_string() + } + } + }; +} +macro_rules! test_path_operation { + ( $($name:ident: $operation:ident)* ) => { + $(paste! { + test_api_fn! { + name: test_operation, + module: [<mod_ $name>], + operation: $operation, + path: "/foo" + } + } + #[test] + fn $name() { + paste!{ + use fastapi::OpenApi; + #[derive(OpenApi, Default)] + #[openapi(paths( + [<mod_ $name>]::test_operation + ))] + struct ApiDoc; + } + + let doc = serde_json::to_value(ApiDoc::openapi()).unwrap(); + let operation_value = doc.pointer(&*format!("/paths/~1foo/{}", stringify!($operation))).unwrap_or(&serde_json::Value::Null); + assert!(operation_value != &serde_json::Value::Null, + "expected to find operation with: {}", &format!("paths./foo.{}", stringify!($operation))); + })* + }; +} + +test_path_operation! { + derive_path_post: post + derive_path_get: get + derive_path_delete: delete + derive_path_put: put + derive_path_options: options + derive_path_head: head + derive_path_patch: patch + derive_path_trace: trace +} + +macro_rules! api_fn_doc_with_params { + ( $method:ident: $path:literal => $( #[$attr:meta] )* $key:ident $name:ident $body:tt ) => {{ + #[allow(dead_code)] + #[derive(serde::Deserialize, fastapi::IntoParams)] + $(#[$attr])* + $key $name $body + + #[fastapi::path( + $method, + path = $path, + responses( + (status = 200, description = "success response") + ), + params( + $name, + ) + )] + #[allow(unused)] + async fn my_operation(params: MyParams) -> String { + "".to_string() + } + + let operation: Value = test_api_fn_doc! { + my_operation, + operation: $method, + path: $path + }; + + operation + }}; +} + +test_api_fn! { + name: test_operation2, + module: derive_path_with_all_info, + operation: post, + path: "/foo/bar/{id}", + params: (("id", description = "Foo bar id")), + operation_id: "foo_bar_id", + tag: "custom_tag"; + /// This is test operation long multiline + /// summary. That need to be correctly split. + /// + /// Additional info in long description + /// + /// With more info on separate lines + /// containing markdown: + /// - A + /// Indented. + /// - B + #[deprecated] +} + +#[test] +fn derive_path_with_all_info_success() { + let operation = test_api_fn_doc! { + derive_path_with_all_info::test_operation2, + operation: post, + path: "/foo/bar/{id}" + }; + + common::assert_json_array_len(operation.pointer("/parameters").unwrap(), 1); + assert_value! {operation=> + "deprecated" = r#"true"#, "Api fn deprecated status" + "description" = r#""Additional info in long description\n\nWith more info on separate lines\ncontaining markdown:\n- A\n Indented.\n- B""#, "Api fn description" + "summary" = r#""This is test operation long multiline\nsummary. That need to be correctly split.""#, "Api fn summary" + "operationId" = r#""foo_bar_id""#, "Api fn operation_id" + "tags.[0]" = r#""custom_tag""#, "Api fn tag" + + "parameters.[0].deprecated" = r#"null"#, "Path parameter deprecated" + "parameters.[0].description" = r#""Foo bar id""#, "Path parameter description" + "parameters.[0].in" = r#""path""#, "Path parameter in" + "parameters.[0].name" = r#""id""#, "Path parameter name" + "parameters.[0].required" = r#"true"#, "Path parameter required" + } +} + +#[test] +fn derive_path_with_defaults_success() { + test_api_fn! { + name: test_operation3, + module: derive_path_with_defaults, + operation: post, + path: "/foo/bar"; + } + let operation = test_api_fn_doc! { + derive_path_with_defaults::test_operation3, + operation: post, + path: "/foo/bar" + }; + + assert_value! {operation=> + "deprecated" = r#"null"#, "Api fn deprecated status" + "operationId" = r#""test_operation3""#, "Api fn operation_id" + "tags.[0]" = r#""derive_path_with_defaults""#, "Api fn tag" + "parameters" = r#"null"#, "Api parameters" + } +} + +#[test] +fn derive_path_with_extra_attributes_without_nested_module() { + /// This is test operation + /// + /// This is long description for test operation + #[fastapi::path( + get, + path = "/foo/{id}", + responses( + ( + status = 200, description = "success response") + ), + params( + ("id" = i64, deprecated = false, description = "Foo database id"), + ("since" = Option<String>, Query, deprecated = false, description = "Datetime since foo is updated") + ) + )] + #[allow(unused)] + async fn get_foos_by_id_since() -> String { + "".to_string() + } + + let operation = test_api_fn_doc! { + get_foos_by_id_since, + operation: get, + path: "/foo/{id}" + }; + + common::assert_json_array_len(operation.pointer("/parameters").unwrap(), 2); + assert_value! {operation=> + "deprecated" = r#"null"#, "Api operation deprecated" + "description" = r#""This is long description for test operation""#, "Api operation description" + "operationId" = r#""get_foos_by_id_since""#, "Api operation operation_id" + "summary" = r#""This is test operation""#, "Api operation summary" + "tags.[0]" = r#"null"#, "Api operation tag" + + "parameters.[0].deprecated" = r#"false"#, "Parameter 0 deprecated" + "parameters.[0].description" = r#""Foo database id""#, "Parameter 0 description" + "parameters.[0].in" = r#""path""#, "Parameter 0 in" + "parameters.[0].name" = r#""id""#, "Parameter 0 name" + "parameters.[0].required" = r#"true"#, "Parameter 0 required" + "parameters.[0].schema.format" = r#""int64""#, "Parameter 0 schema format" + "parameters.[0].schema.type" = r#""integer""#, "Parameter 0 schema type" + + "parameters.[1].deprecated" = r#"false"#, "Parameter 1 deprecated" + "parameters.[1].description" = r#""Datetime since foo is updated""#, "Parameter 1 description" + "parameters.[1].in" = r#""query""#, "Parameter 1 in" + "parameters.[1].name" = r#""since""#, "Parameter 1 name" + "parameters.[1].required" = r#"false"#, "Parameter 1 required" + "parameters.[1].schema.allOf.[0].format" = r#"null"#, "Parameter 1 schema format" + "parameters.[1].schema.allOf.[0].type" = r#"null"#, "Parameter 1 schema type" + "parameters.[1].schema.allOf.nullable" = r#"null"#, "Parameter 1 schema type" + } +} + +#[test] +fn derive_path_with_security_requirements() { + #[fastapi::path( + get, + path = "/items", + responses( + (status = 200, description = "success response") + ), + security( + (), + ("api_oauth" = ["read:items", "edit:items"]), + ("jwt_token" = []) + ) + )] + #[allow(unused)] + fn get_items() -> String { + "".to_string() + } + let operation = test_api_fn_doc! { + get_items, + operation: get, + path: "/items" + }; + + assert_value! {operation=> + "security.[0]" = "{}", "Optional security requirement" + "security.[1].api_oauth.[0]" = r###""read:items""###, "api_oauth first scope" + "security.[1].api_oauth.[1]" = r###""edit:items""###, "api_oauth second scope" + "security.[2].jwt_token" = "[]", "jwt_token auth scopes" + } +} + +#[test] +fn derive_path_with_datetime_format_query_parameter() { + #[derive(serde::Deserialize, fastapi::ToSchema)] + struct Since { + /// Some date + #[allow(dead_code)] + date: String, + /// Some time + #[allow(dead_code)] + time: String, + } + + /// This is test operation + /// + /// This is long description for test operation + #[fastapi::path( + get, + path = "/foo/{id}/{start}", + responses( + (status = 200, description = "success response") + ), + params( + ("id" = i64, Path, description = "Foo database id"), + ("start" = String, Path, description = "Datetime since foo is updated", format = DateTime) + ) + )] + #[allow(unused)] + async fn get_foos_by_id_date() -> String { + "".to_string() + } + + let operation: Value = test_api_fn_doc! { + get_foos_by_id_date, + operation: get, + path: "/foo/{id}/{start}" + }; + + let parameters: &Value = operation.get("parameters").unwrap(); + + assert_json_eq!( + parameters, + json!([ + { + "description": "Foo database id", + "in": "path", + "name": "id", + "required": true, + "schema": { + "format": "int64", + "type": "integer", + } + }, + { + "description": "Datetime since foo is updated", + "in": "path", + "name": "start", + "required": true, + "schema": { + "format": "date-time", + "type": "string", + } + } + ]) + ); +} + +#[test] +fn derive_path_with_datetime_format_path_parameter() { + #[derive(serde::Deserialize, fastapi::ToSchema)] + struct Since { + /// Some date + #[allow(dead_code)] + date: String, + /// Some time + #[allow(dead_code)] + time: String, + } + + /// This is test operation + /// + /// This is long description for test operation + #[fastapi::path( + get, + path = "/foo/{id}", + responses( + (status = 200, description = "success response") + ), + params( + ("id" = i64, description = "Foo database id"), + ("start" = String, Query, description = "Datetime since foo is updated", format = DateTime) + ) + )] + #[allow(unused)] + async fn get_foos_by_id_date() -> String { + "".to_string() + } + + let operation: Value = test_api_fn_doc! { + get_foos_by_id_date, + operation: get, + path: "/foo/{id}" + }; + + let parameters: &Value = operation.get("parameters").unwrap(); + + assert_json_eq!( + parameters, + json!([ + { + "description": "Foo database id", + "in": "path", + "name": "id", + "required": true, + "schema": { + "format": "int64", + "type": "integer", + } + }, + { + "description": "Datetime since foo is updated", + "in": "query", + "name": "start", + "required": true, + "schema": { + "format": "date-time", + "type": "string", + } + } + ]) + ); +} + +#[test] +fn derive_path_with_parameter_schema() { + #[derive(serde::Deserialize, fastapi::ToSchema)] + struct Since { + /// Some date + #[allow(dead_code)] + date: String, + /// Some time + #[allow(dead_code)] + time: String, + } + + /// This is test operation + /// + /// This is long description for test operation + #[fastapi::path( + get, + path = "/foo/{id}", + responses( + (status = 200, description = "success response") + ), + params( + ("id" = i64, description = "Foo database id"), + ("since" = Option<Since>, Query, description = "Datetime since foo is updated") + ) + )] + #[allow(unused)] + async fn get_foos_by_id_since() -> String { + "".to_string() + } + + let operation: Value = test_api_fn_doc! { + get_foos_by_id_since, + operation: get, + path: "/foo/{id}" + }; + + let parameters: &Value = operation.get("parameters").unwrap(); + + assert_json_eq!( + parameters, + json!([ + { + "description": "Foo database id", + "in": "path", + "name": "id", + "required": true, + "schema": { + "format": "int64", + "type": "integer", + } + }, + { + "description": "Datetime since foo is updated", + "in": "query", + "name": "since", + "required": false, + "schema": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/Since" + } + ], + } + } + ]) + ); +} + +#[test] +fn derive_path_with_parameter_inline_schema() { + #[derive(serde::Deserialize, fastapi::ToSchema)] + struct Since { + /// Some date + #[allow(dead_code)] + date: String, + /// Some time + #[allow(dead_code)] + time: String, + } + + /// This is test operation + /// + /// This is long description for test operation + #[fastapi::path( + get, + path = "/foo/{id}", + responses( + (status = 200, description = "success response") + ), + params( + ("id" = i64, description = "Foo database id"), + ("since" = inline(Option<Since>), Query, description = "Datetime since foo is updated") + ) + )] + #[allow(unused)] + async fn get_foos_by_id_since() -> String { + "".to_string() + } + + let operation: Value = test_api_fn_doc! { + get_foos_by_id_since, + operation: get, + path: "/foo/{id}" + }; + + let parameters: &Value = operation.get("parameters").unwrap(); + + assert_json_eq!( + parameters, + json!([ + { + "description": "Foo database id", + "in": "path", + "name": "id", + "required": true, + "schema": { + "format": "int64", + "type": "integer", + } + }, + { + "description": "Datetime since foo is updated", + "in": "query", + "name": "since", + "required": false, + "schema": { + "oneOf": [ + { + "type": "null" + }, + { + "properties": { + "date": { + "description": "Some date", + "type": "string" + }, + "time": { + "description": "Some time", + "type": "string" + } + }, + "required": [ + "date", + "time" + ], + "type": "object" + } + ], + } + } + ]) + ); +} + +#[test] +fn derive_path_params_map() { + #[derive(serde::Deserialize, ToSchema)] + enum Foo { + Bar, + Baz, + } + + #[derive(serde::Deserialize, IntoParams)] + #[allow(unused)] + struct MyParams { + with_ref: HashMap<String, Foo>, + with_type: HashMap<String, String>, + } + + #[fastapi::path( + get, + path = "/foo", + responses( + (status = 200, description = "success response") + ), + params( + MyParams, + ) + )] + #[allow(unused)] + fn use_maps(params: MyParams) -> String { + "".to_string() + } + + let operation: Value = test_api_fn_doc! { + use_maps, + operation: get, + path: "/foo" + }; + + let parameters = operation.get("parameters").unwrap(); + + assert_json_eq! { + parameters, + json!{[ + { + "in": "path", + "name": "with_ref", + "required": true, + "schema": { + "propertyNames": { + "type": "string" + }, + "additionalProperties": { + "$ref": "#/components/schemas/Foo" + }, + "type": "object" + } + }, + { + "in": "path", + "name": "with_type", + "required": true, + "schema": { + "propertyNames": { + "type": "string" + }, + "additionalProperties": { + "type": "string" + }, + "type": "object" + } + } + ]} + } +} + +#[test] +fn derive_path_params_with_examples() { + let operation = api_fn_doc_with_params! {get: "/foo" => + struct MyParams { + #[param(example = json!({"key": "value"}))] + map: HashMap<String, String>, + #[param(example = json!(["value1", "value2"]))] + vec: Vec<String>, + } + }; + let parameters = operation.get("parameters").unwrap(); + + assert_json_eq! { + parameters, + json!{[ + { + "in": "path", + "name": "map", + "required": true, + "example": { + "key": "value" + }, + "schema": { + "propertyNames": { + "type": "string" + }, + "additionalProperties": { + "type": "string" + }, + "type": "object" + } + }, + { + "in": "path", + "name": "vec", + "required": true, + "example": ["value1", "value2"], + "schema": { + "items": { + "type": "string" + }, + "type": "array" + } + } + ]} + } +} + +#[test] +fn path_parameters_with_free_form_properties() { + let operation = api_fn_doc_with_params! {get: "/foo" => + struct MyParams { + #[param(additional_properties)] + map: HashMap<String, String>, + } + }; + let parameters = operation.get("parameters").unwrap(); + + assert_json_eq! { + parameters, + json!{[ + { + "in": "path", + "name": "map", + "required": true, + "schema": { + "additionalProperties": true, + "type": "object" + } + } + ]} + } +} + +#[test] +fn derive_path_query_params_with_schema_features() { + let operation = api_fn_doc_with_params! {get: "/foo" => + #[into_params(parameter_in = Query)] + struct MyParams { + #[serde(default)] + #[param(write_only, read_only, default = "value", nullable, xml(name = "xml_value"))] + value: String, + #[param(value_type = String, format = Binary)] + int: i64, + } + }; + let parameters = operation.get("parameters").unwrap(); + + assert_json_eq! { + parameters, + json!{[ + { + "in": "query", + "name": "value", + "required": false, + "schema": { + "default": "value", + "type": ["string", "null"], + "readOnly": true, + "writeOnly": true, + "xml": { + "name": "xml_value" + } + } + }, + { + "in": "query", + "name": "int", + "required": true, + "schema": { + "type": "string", + "format": "binary" + } + } + ]} + } +} + +#[test] +fn derive_path_params_always_required() { + let operation = api_fn_doc_with_params! {get: "/foo" => + #[into_params(parameter_in = Path)] + struct MyParams { + #[serde(default)] + value: String, + } + }; + let parameters = operation.get("parameters").unwrap(); + + assert_json_eq! { + parameters, + json!{[ + { + "in": "path", + "name": "value", + "required": true, + "schema": { + "type": "string", + } + } + ]} + } +} + +#[test] +fn derive_required_path_params() { + let operation = api_fn_doc_with_params! {get: "/list/{id}" => + #[into_params(parameter_in = Query)] + struct MyParams { + #[serde(default)] + vec_default: Option<Vec<String>>, + + #[serde(default)] + string_default: Option<String>, + + #[serde(default)] + vec_default_required: Vec<String>, + + #[serde(default)] + string_default_required: String, + + vec_option: Option<Vec<String>>, + + string_option: Option<String>, + + vec: Vec<String>, + + string: String, + } + }; + + let parameters = operation.get("parameters").unwrap(); + + assert_json_eq!( + parameters, + json!([ + { + "in": "query", + "name": "vec_default", + "required": false, + "schema": { + "type": ["array", "null"], + "items": { + "type": "string" + } + }, + }, + { + "in": "query", + "name": "string_default", + "required": false, + "schema": { + "type": ["string", "null"] + } + }, + { + "in": "query", + "name": "vec_default_required", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + }, + }, + { + "in": "query", + "name": "string_default_required", + "required": false, + "schema": { + "type": "string" + }, + }, + { + "in": "query", + "name": "vec_option", + "required": false, + "schema": { + "items": { + "type": "string" + }, + "type": ["array", "null"], + }, + }, + { + "in": "query", + "name": "string_option", + "required": false, + "schema": { + "type": ["string", "null"] + } + }, + { + "in": "query", + "name": "vec", + "required": true, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "in": "query", + "name": "string", + "required": true, + "schema": { + "type": "string" + } + } + ]) + ) +} + +#[test] +fn derive_path_params_with_serde_and_custom_rename() { + let operation = api_fn_doc_with_params! {get: "/list/{id}" => + #[into_params(parameter_in = Query)] + #[serde(rename_all = "camelCase")] + struct MyParams { + vec_default: Option<Vec<String>>, + + #[serde(default, rename = "STRING")] + string_default: Option<String>, + + #[serde(default, rename = "VEC")] + #[param(rename = "vec2")] + vec_default_required: Vec<String>, + + #[serde(default)] + #[param(rename = "string_r2")] + string_default_required: String, + + string: String, + } + }; + let parameters = operation.get("parameters").unwrap(); + + assert_json_eq!( + parameters, + json!([ + { + "in": "query", + "name": "vecDefault", + "required": false, + "schema": { + "type": ["array", "null"], + "items": { + "type": "string" + } + }, + }, + { + "in": "query", + "name": "STRING", + "required": false, + "schema": { + "type": ["string", "null"] + } + }, + { + "in": "query", + "name": "VEC", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + }, + }, + { + "in": "query", + "name": "string_r2", + "required": false, + "schema": { + "type": "string" + }, + }, + { + "in": "query", + "name": "string", + "required": true, + "schema": { + "type": "string" + } + } + ]) + ) +} + +#[test] +fn derive_path_params_custom_rename_all() { + let operation = api_fn_doc_with_params! {get: "/list/{id}" => + #[into_params(rename_all = "camelCase", parameter_in = Query)] + struct MyParams { + vec_default: Option<Vec<String>>, + } + }; + let parameters = operation.get("parameters").unwrap(); + + assert_json_eq!( + parameters, + json!([ + { + "in": "query", + "name": "vecDefault", + "required": false, + "schema": { + "type": ["array", "null"], + "items": { + "type": "string" + } + }, + }, + ]) + ) +} + +#[test] +fn derive_path_params_custom_rename_all_serde_will_override() { + let operation = api_fn_doc_with_params! {get: "/list/{id}" => + #[into_params(rename_all = "camelCase", parameter_in = Query)] + #[serde(rename_all = "UPPERCASE")] + struct MyParams { + vec_default: Option<Vec<String>>, + } + }; + let parameters = operation.get("parameters").unwrap(); + + assert_json_eq!( + parameters, + json!([ + { + "in": "query", + "name": "VEC_DEFAULT", + "required": false, + "schema": { + "type": ["array", "null"], + "items": { + "type": "string" + } + }, + }, + ]) + ) +} + +#[test] +fn derive_path_parameters_container_level_default() { + let operation = api_fn_doc_with_params! {get: "/list/{id}" => + #[derive(Default)] + #[into_params(parameter_in = Query)] + #[serde(default)] + struct MyParams { + vec_default: Vec<String>, + string: String, + } + }; + let parameters = operation.get("parameters").unwrap(); + + assert_json_eq!( + parameters, + json!([ + { + "in": "query", + "name": "vec_default", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + }, + }, + { + "in": "query", + "name": "string", + "required": false, + "schema": { + "type": "string" + }, + } + ]) + ) +} + +#[test] +fn derive_path_params_intoparams() { + #[derive(serde::Deserialize, ToSchema)] + #[schema(default = "foo1", example = "foo1")] + #[serde(rename_all = "snake_case")] + enum Foo { + Foo1, + Foo2, + } + + #[derive(serde::Deserialize, IntoParams)] + #[into_params(style = Form, parameter_in = Query)] + struct MyParams { + /// Foo database id. + #[param(example = 1)] + #[allow(unused)] + id: i64, + /// Datetime since foo is updated. + #[param(example = "2020-04-12T10:23:00Z")] + #[allow(unused)] + since: Option<String>, + /// A Foo item ref. + #[allow(unused)] + foo_ref: Foo, + /// A Foo item inline. + #[param(inline)] + #[allow(unused)] + foo_inline: Foo, + /// An optional Foo item inline. + #[param(inline)] + #[allow(unused)] + foo_inline_option: Option<Foo>, + /// A vector of Foo item inline. + #[param(inline)] + #[allow(unused)] + foo_inline_vec: Vec<Foo>, + } + + #[fastapi::path( + get, + path = "/list/{id}", + responses( + (status = 200, description = "success response") + ), + params( + MyParams, + ("id" = i64, Path, description = "Id of some items to list") + ) + )] + #[allow(unused)] + fn list(id: i64, params: MyParams) -> String { + "".to_string() + } + + let operation: Value = test_api_fn_doc! { + list, + operation: get, + path: "/list/{id}" + }; + + let parameters = operation.get("parameters").unwrap(); + + assert_json_eq!( + parameters, + json!([ + { + "description": "Foo database id.", + "example": 1, + "in": "query", + "name": "id", + "required": true, + "schema": { + "format": "int64", + "type": "integer", + }, + "style": "form" + }, + { + "description": "Datetime since foo is updated.", + "example": "2020-04-12T10:23:00Z", + "in": "query", + "name": "since", + "required": false, + "schema": { + "type": ["string", "null"] + }, + "style": "form" + }, + { + "description": "A Foo item ref.", + "in": "query", + "name": "foo_ref", + "required": true, + "schema": { + "$ref": "#/components/schemas/Foo" + }, + "style": "form" + }, + { + "description": "A Foo item inline.", + "in": "query", + "name": "foo_inline", + "required": true, + "schema": { + "default": "foo1", + "example": "foo1", + "enum": ["foo1", "foo2"], + "type": "string", + }, + "style": "form" + }, + { + "description": "An optional Foo item inline.", + "in": "query", + "name": "foo_inline_option", + "required": false, + "schema": { + "oneOf": [ + { + "type": "null", + }, + { + "default": "foo1", + "example": "foo1", + "enum": ["foo1", "foo2"], + "type": "string", + } + ], + }, + "style": "form" + }, + { + "description": "A vector of Foo item inline.", + "in": "query", + "name": "foo_inline_vec", + "required": true, + "schema": { + "items": { + "default": "foo1", + "example": "foo1", + "enum": ["foo1", "foo2"], + "type": "string", + }, + "type": "array", + }, + "style": "form", + }, + { + "description": "Id of some items to list", + "in": "path", + "name": "id", + "required": true, + "schema": { + "format": "int64", + "type": "integer" + } + } + ]) + ) +} + +#[test] +fn derive_path_params_into_params_with_value_type() { + use fastapi::OpenApi; + + #[derive(ToSchema)] + #[allow(dead_code)] + struct Foo { + #[allow(unused)] + value: String, + } + + #[derive(IntoParams)] + #[into_params(parameter_in = Query)] + #[allow(unused)] + struct Filter { + #[param(value_type = i64, style = Simple)] + id: String, + #[param(value_type = Object)] + another_id: String, + #[param(value_type = Vec<Vec<String>>)] + value1: Vec<i64>, + #[param(value_type = Vec<String>)] + value2: Vec<i64>, + #[param(value_type = Option<String>)] + value3: i64, + #[param(value_type = Option<Object>)] + value4: i64, + #[param(value_type = Vec<Object>)] + value5: i64, + #[param(value_type = Vec<Foo>)] + value6: i64, + } + + #[fastapi::path( + get, + path = "foo", + responses( + (status = 200, description = "success response") + ), + params( + Filter + ) + )] + #[allow(unused)] + fn get_foo(query: Filter) {} + + #[derive(OpenApi, Default)] + #[openapi(paths(get_foo))] + struct ApiDoc; + + let doc = serde_json::to_value(ApiDoc::openapi()).unwrap(); + let parameters = doc.pointer("/paths/foo/get/parameters").unwrap(); + + assert_json_eq!( + parameters, + json!([{ + "in": "query", + "name": "id", + "required": true, + "style": "simple", + "schema": { + "format": "int64", + "type": "integer" + } + }, + { + "in": "query", + "name": "another_id", + "required": true, + "schema": { + "type": "object" + } + }, + { + "in": "query", + "name": "value1", + "required": true, + "schema": { + "items": { + "items": { + "type": "string" + }, + "type": "array" + }, + "type": "array" + } + }, + { + "in": "query", + "name": "value2", + "required": true, + "schema": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + { + "in": "query", + "name": "value3", + "required": false, + "schema": { + "type": ["string", "null"] + } + }, + { + "in": "query", + "name": "value4", + "required": false, + "schema": { + "type": ["object", "null"] + } + }, + { + "in": "query", + "name": "value5", + "required": true, + "schema": { + "items": { + "type": "object" + }, + "type": "array" + } + }, + { + "in": "query", + "name": "value6", + "required": true, + "schema": { + "items": { + "$ref": "#/components/schemas/Foo" + }, + "type": "array" + } + }]) + ) +} + +#[test] +fn derive_path_params_into_params_with_raw_identifier() { + #[derive(IntoParams)] + #[into_params(parameter_in = Path)] + struct Filter { + #[allow(unused)] + r#in: String, + } + + #[fastapi::path( + get, + path = "foo", + responses( + (status = 200, description = "success response") + ), + params( + Filter + ) + )] + #[allow(unused)] + fn get_foo(query: Filter) {} + + #[derive(OpenApi, Default)] + #[openapi(paths(get_foo))] + struct ApiDoc; + + let doc = serde_json::to_value(ApiDoc::openapi()).unwrap(); + let parameters = doc.pointer("/paths/foo/get/parameters").unwrap(); + + assert_json_eq!( + parameters, + json!([{ + "in": "path", + "name": "in", + "required": true, + "schema": { + "type": "string" + } + }]) + ) +} + +#[test] +fn derive_path_params_into_params_with_unit_type() { + #[derive(IntoParams)] + #[into_params(parameter_in = Path)] + struct Filter { + #[allow(unused)] + r#in: (), + } + + #[fastapi::path( + get, + path = "foo", + responses( + (status = 200, description = "success response") + ), + params( + Filter + ) + )] + #[allow(unused)] + fn get_foo(query: Filter) {} + + #[derive(OpenApi, Default)] + #[openapi(paths(get_foo))] + struct ApiDoc; + + let doc = serde_json::to_value(ApiDoc::openapi()).unwrap(); + let parameters = doc.pointer("/paths/foo/get/parameters").unwrap(); + + assert_json_eq!( + parameters, + json!([{ + "in": "path", + "name": "in", + "required": true, + "schema": { + "default": null, + } + }]) + ) +} + +#[test] +fn arbitrary_expr_in_operation_id() { + #[fastapi::path( + get, + path = "foo", + operation_id=format!("{}", 3+5), + responses( + (status = 200, description = "success response") + ), + )] + #[allow(unused)] + fn get_foo() {} + + #[derive(OpenApi, Default)] + #[openapi(paths(get_foo))] + struct ApiDoc; + + let doc = serde_json::to_value(ApiDoc::openapi()).unwrap(); + let operation_id = doc.pointer("/paths/foo/get/operationId").unwrap(); + + assert_json_eq!(operation_id, json!("8")) +} + +#[test] +fn derive_path_with_validation_attributes() { + #[derive(IntoParams)] + #[allow(dead_code)] + struct Query { + #[param(maximum = 10, minimum = 5, multiple_of = 2.5)] + id: i32, + + #[param(max_length = 10, min_length = 5, pattern = "[a-z]*")] + value: String, + + #[param(max_items = 5, min_items = 1)] + items: Vec<String>, + } + + #[fastapi::path( + get, + path = "foo", + responses( + (status = 200, description = "success response") + ), + params( + Query + ) + )] + #[allow(unused)] + fn get_foo(query: Query) {} + + #[derive(OpenApi, Default)] + #[openapi(paths(get_foo))] + struct ApiDoc; + + let doc = serde_json::to_value(ApiDoc::openapi()).unwrap(); + let parameters = doc.pointer("/paths/foo/get/parameters").unwrap(); + + let config = Config::new(CompareMode::Strict).numeric_mode(NumericMode::AssumeFloat); + + assert_json_matches!( + parameters, + json!([ + { + "schema": { + "format": "int32", + "type": "integer", + "maximum": 10.0, + "minimum": 5.0, + "multipleOf": 2.5, + }, + "required": true, + "name": "id", + "in": "path" + }, + { + "schema": { + "type": "string", + "maxLength": 10, + "minLength": 5, + "pattern": "[a-z]*" + }, + "required": true, + "name": "value", + "in": "path" + }, + { + "schema": { + "type": "array", + "items": { + "type": "string", + }, + "maxItems": 5, + "minItems": 1, + }, + "required": true, + "name": "items", + "in": "path" + } + ]), + config + ); +} + +#[test] +fn derive_path_with_into_responses() { + #[allow(unused)] + enum MyResponse { + Ok, + NotFound, + } + + impl IntoResponses for MyResponse { + fn responses() -> BTreeMap<String, RefOr<Response>> { + let responses = ResponsesBuilder::new() + .response("200", ResponseBuilder::new().description("Ok")) + .response("404", ResponseBuilder::new().description("Not Found")) + .build(); + + responses.responses + } + } + + #[fastapi::path(get, path = "foo", responses(MyResponse))] + #[allow(unused)] + fn get_foo() {} + + #[derive(OpenApi, Default)] + #[openapi(paths(get_foo))] + struct ApiDoc; + + let doc = serde_json::to_value(ApiDoc::openapi()).unwrap(); + let parameters = doc.pointer("/paths/foo/get/responses").unwrap(); + + assert_json_eq!( + parameters, + json!({ + "200": { + "description": "Ok" + }, + "404": { + "description": "Not Found" + } + }) + ) +} + +#[cfg(feature = "uuid")] +#[test] +fn derive_path_with_uuid() { + use uuid::Uuid; + + #[fastapi::path( + get, + path = "/items/{id}", + responses( + (status = 200, description = "success response") + ), + params( + ("id" = Uuid, description = "Foo uuid"), + ) + )] + #[allow(unused)] + fn get_items(id: Uuid) -> String { + "".to_string() + } + let operation = test_api_fn_doc! { + get_items, + operation: get, + path: "/items/{id}" + }; + + assert_value! {operation=> + "parameters.[0].schema.type" = r#""string""#, "Parameter id type" + "parameters.[0].schema.format" = r#""uuid""#, "Parameter id format" + "parameters.[0].description" = r#""Foo uuid""#, "Parameter id description" + "parameters.[0].name" = r#""id""#, "Parameter id id" + "parameters.[0].in" = r#""path""#, "Parameter in" + } +} + +#[cfg(feature = "ulid")] +#[test] +fn derive_path_with_ulid() { + use ulid::Ulid; + + #[fastapi::path( + get, + path = "/items/{id}", + responses( + (status = 200, description = "success response") + ), + params( + ("id" = Ulid, description = "Foo ulid"), + ) + )] + #[allow(unused)] + fn get_items(id: Ulid) -> String { + "".to_string() + } + let operation = test_api_fn_doc! { + get_items, + operation: get, + path: "/items/{id}" + }; + + assert_value! {operation=> + "parameters.[0].schema.type" = r#""string""#, "Parameter id type" + "parameters.[0].schema.format" = r#""ulid""#, "Parameter id format" + "parameters.[0].description" = r#""Foo ulid""#, "Parameter id description" + "parameters.[0].name" = r#""id""#, "Parameter id id" + "parameters.[0].in" = r#""path""#, "Parameter in" + } +} + +#[test] +fn derive_path_with_into_params_custom_schema() { + fn custom_type() -> Object { + ObjectBuilder::new() + .schema_type(fastapi::openapi::Type::String) + .format(Some(fastapi::openapi::SchemaFormat::Custom( + "email".to_string(), + ))) + .description(Some("this is the description")) + .build() + } + + #[derive(IntoParams)] + #[into_params(parameter_in = Query)] + #[allow(unused)] + struct Query { + #[param(schema_with = custom_type)] + email: String, + } + + #[fastapi::path( + get, + path = "/items", + responses( + (status = 200, description = "success response") + ), + params( + Query + ) + )] + #[allow(unused)] + fn get_items(query: Query) -> String { + "".to_string() + } + let operation = test_api_fn_doc! { + get_items, + operation: get, + path: "/items" + }; + + let value = operation.pointer("/parameters"); + + assert_json_eq!( + value, + json!([ + { + "in": "query", + "name": "email", + "required": false, + "schema": { + "description": "this is the description", + "type": "string", + "format": "email" + } + } + ]) + ) +} + +#[test] +fn derive_into_params_required() { + #[derive(IntoParams)] + #[into_params(parameter_in = Query)] + #[allow(unused)] + struct Params { + name: String, + name2: Option<String>, + #[param(required)] + name3: Option<String>, + } + + #[fastapi::path(get, path = "/params", params(Params))] + #[allow(unused)] + fn get_params() {} + let operation = test_api_fn_doc! { + get_params, + operation: get, + path: "/params" + }; + + let value = operation.pointer("/parameters"); + + assert_json_eq!( + value, + json!([ + { + "in": "query", + "name": "name", + "required": true, + "schema": { + "type": "string", + }, + }, + { + "in": "query", + "name": "name2", + "required": false, + "schema": { + "type": ["string", "null"], + }, + }, + { + "in": "query", + "name": "name3", + "required": true, + "schema": { + "type": ["string", "null"], + }, + }, + ]) + ) +} + +#[test] +fn derive_into_params_with_serde_skip() { + #[derive(IntoParams, Serialize)] + #[into_params(parameter_in = Query)] + #[allow(unused)] + struct Params { + name: String, + name2: Option<String>, + #[serde(skip)] + name3: Option<String>, + } + + #[fastapi::path(get, path = "/params", params(Params))] + #[allow(unused)] + fn get_params() {} + let operation = test_api_fn_doc! { + get_params, + operation: get, + path: "/params" + }; + + let value = operation.pointer("/parameters"); + + assert_json_eq!( + value, + json!([ + { + "in": "query", + "name": "name", + "required": true, + "schema": { + "type": "string", + }, + }, + { + "in": "query", + "name": "name2", + "required": false, + "schema": { + "type": ["string", "null"], + }, + }, + ]) + ) +} + +// TODO: IntoParams seems not to follow Option<T> is automatically nullable rule! + +#[test] +fn derive_into_params_with_serde_skip_deserializing() { + #[derive(IntoParams, Serialize)] + #[into_params(parameter_in = Query)] + #[allow(unused)] + struct Params { + name: String, + name2: Option<String>, + #[serde(skip_deserializing)] + name3: Option<String>, + } + + #[fastapi::path(get, path = "/params", params(Params))] + #[allow(unused)] + fn get_params() {} + let operation = test_api_fn_doc! { + get_params, + operation: get, + path: "/params" + }; + + let value = operation.pointer("/parameters"); + + assert_json_eq!( + value, + json!([ + { + "in": "query", + "name": "name", + "required": true, + "schema": { + "type": "string", + }, + }, + { + "in": "query", + "name": "name2", + "required": false, + "schema": { + "type": ["string", "null"], + }, + }, + ]) + ) +} + +#[test] +fn derive_into_params_with_serde_skip_serializing() { + #[derive(IntoParams, Serialize)] + #[into_params(parameter_in = Query)] + #[allow(unused)] + struct Params { + name: String, + name2: Option<String>, + #[serde(skip_serializing)] + name3: Option<String>, + } + + #[fastapi::path(get, path = "/params", params(Params))] + #[allow(unused)] + fn get_params() {} + let operation = test_api_fn_doc! { + get_params, + operation: get, + path: "/params" + }; + + let value = operation.pointer("/parameters"); + + assert_json_eq!( + value, + json!([ + { + "in": "query", + "name": "name", + "required": true, + "schema": { + "type": "string", + }, + }, + { + "in": "query", + "name": "name2", + "required": false, + "schema": { + "type": ["string", "null"], + }, + }, + ]) + ) +} + +#[test] +fn derive_path_with_const_expression_context_path() { + const FOOBAR: &str = "/api/v1/prefix"; + + #[fastapi::path( + get, + context_path = FOOBAR, + path = "/items", + responses( + (status = 200, description = "success response") + ), + )] + #[allow(unused)] + fn get_items() -> String { + "".to_string() + } + + let operation = test_api_fn_doc! { + get_items, + operation: get, + path: "/api/v1/prefix/items" + }; + + assert_ne!(operation, Value::Null); +} + +#[test] +fn derive_path_with_const_expression_reference_context_path() { + const FOOBAR: &str = "/api/v1/prefix"; + + #[fastapi::path( + get, + context_path = &FOOBAR, + path = "/items", + responses( + (status = 200, description = "success response") + ), + )] + #[allow(unused)] + fn get_items() -> String { + "".to_string() + } + + let operation = test_api_fn_doc! { + get_items, + operation: get, + path: "/api/v1/prefix/items" + }; + + assert_ne!(operation, Value::Null); +} + +#[test] +fn derive_path_with_const_expression() { + const FOOBAR: &str = "/items"; + + #[fastapi::path( + get, + path = FOOBAR, + responses( + (status = 200, description = "success response") + ), + )] + #[allow(unused)] + fn get_items() -> String { + "".to_string() + } + + let operation = test_api_fn_doc! { + get_items, + operation: get, + path: "/items" + }; + + assert_ne!(operation, Value::Null); +} + +#[test] +fn derive_path_with_tag_constant() { + const TAG: &str = "mytag"; + + #[fastapi::path( + get, + tag = TAG, + path = "/items", + responses( + (status = 200, description = "success response") + ), + )] + #[allow(unused)] + fn get_items() -> String { + "".to_string() + } + + let operation = test_api_fn_doc! { + get_items, + operation: get, + path: "/items" + }; + + assert_ne!(operation, Value::Null); + assert_json_eq!( + &operation, + json!({ + "operationId": "get_items", + "responses": { + "200": { + "description": "success response", + }, + }, + "tags": ["mytag"] + }) + ); +} + +#[test] +fn derive_path_with_multiple_tags() { + #[allow(dead_code)] + const TAG: &str = "mytag"; + const ANOTHER: &str = "another"; + + #[fastapi::path( + get, + tag = TAG, + tags = ["one", "two", ANOTHER], + path = "/items", + responses( + (status = 200, description = "success response") + ), + )] + #[allow(unused)] + async fn get_items() -> String { + "".to_string() + } + + let operation = test_api_fn_doc! { + get_items, + operation: get, + path: "/items" + }; + + assert_ne!(operation, Value::Null); + assert_json_eq!( + &operation, + json!({ + "operationId": "get_items", + "responses": { + "200": { + "description": "success response", + }, + }, + "tags": ["mytag", "one", "two","another"] + }) + ); +} + +#[test] +fn derive_path_with_description_and_summary_override() { + const SUMMARY: &str = "This is summary override that is +split to multiple lines"; + /// This is long summary + /// split to multiple lines + /// + /// This is description + /// split to multiple lines + #[allow(dead_code)] + #[fastapi::path( + get, + path = "/test-description", + summary = SUMMARY, + description = "This is description override", + responses( + (status = 200, description = "success response") + ), + )] + #[allow(unused)] + async fn test_description_summary() -> &'static str { + "" + } + + let operation = test_api_fn_doc! { + test_description_summary, + operation: get, + path: "/test-description" + }; + + assert_json_eq!( + &operation, + json!({ + "description": "This is description override", + "operationId": "test_description_summary", + "responses": { + "200": { + "description": "success response", + }, + }, + "summary": "This is summary override that is\nsplit to multiple lines", + "tags": [] + }) + ); +} + +#[test] +fn derive_path_include_str_description() { + #[allow(dead_code)] + #[fastapi::path( + get, + path = "/test-description", + description = include_str!("./testdata/description_override"), + responses( + (status = 200, description = "success response") + ), + )] + #[allow(unused)] + async fn test_description_summary() -> &'static str { + "" + } + + let operation = test_api_fn_doc! { + test_description_summary, + operation: get, + path: "/test-description" + }; + + assert_json_eq!( + &operation, + json!({ + "description": "This is description from include_str!\n", + "operationId": "test_description_summary", + "responses": { + "200": { + "description": "success response", + }, + }, + "tags": [] + }) + ); +} + +#[test] +fn path_and_nest_with_default_tags_from_path() { + mod test_path { + #[allow(dead_code)] + #[fastapi::path(get, path = "/test")] + #[allow(unused)] + fn test_path() -> &'static str { + "" + } + } + + mod test_nest { + #[derive(fastapi::OpenApi)] + #[openapi(paths(test_path_nested))] + pub struct NestApi; + + #[allow(dead_code)] + #[fastapi::path(get, path = "/test")] + #[allow(unused)] + fn test_path_nested() -> &'static str { + "" + } + } + + #[derive(fastapi::OpenApi)] + #[openapi( + paths(test_path::test_path), + nest( + (path = "/api/nest", api = test_nest::NestApi) + ) + )] + struct ApiDoc; + let value = serde_json::to_value(ApiDoc::openapi()).expect("should be able to serialize json"); + let paths = value + .pointer("/paths") + .expect("should find /paths from the OpenAPI spec"); + + assert_json_eq!( + &paths, + json!({ + "/api/nest/test": { + "get": { + "operationId": "test_path_nested", + "responses": {}, + "tags": ["test_nest"] + } + }, + "/test": { + "get": { + "operationId": "test_path", + "responses": {}, + "tags": ["test_path"] + } + } + }) + ); +} + +#[test] +fn path_and_nest_with_additional_tags() { + mod test_path { + #[allow(dead_code)] + #[fastapi::path(get, path = "/test", tag = "this_is_tag", tags = ["additional"])] + #[allow(unused)] + fn test_path() -> &'static str { + "" + } + } + + mod test_nest { + #[derive(fastapi::OpenApi)] + #[openapi(paths(test_path_nested))] + pub struct NestApi; + + #[allow(dead_code)] + #[fastapi::path(get, path = "/test", tag = "this_is_tag:nest", tags = ["additional:nest"])] + #[allow(unused)] + fn test_path_nested() -> &'static str { + "" + } + } + + #[derive(fastapi::OpenApi)] + #[openapi( + paths(test_path::test_path), + nest( + (path = "/api/nest", api = test_nest::NestApi) + ) + )] + struct ApiDoc; + let value = serde_json::to_value(ApiDoc::openapi()).expect("should be able to serialize json"); + let paths = value + .pointer("/paths") + .expect("should find /paths from the OpenAPI spec"); + + assert_json_eq!( + &paths, + json!({ + "/api/nest/test": { + "get": { + "operationId": "test_path_nested", + "responses": {}, + "tags": ["this_is_tag:nest", "additional:nest"] + }, + }, + "/test": { + "get": { + "operationId": "test_path", + "responses": {}, + "tags": ["this_is_tag", "additional"] + }, + } + }) + ); +} + +#[test] +fn path_nest_without_any_tags() { + mod test_path { + #[allow(dead_code)] + #[fastapi::path(get, path = "/test")] + #[allow(unused)] + pub fn test_path() -> &'static str { + "" + } + } + + mod test_nest { + #[derive(fastapi::OpenApi)] + #[openapi(paths(test_path_nested))] + pub struct NestApi; + + #[allow(dead_code)] + #[fastapi::path(get, path = "/test")] + #[allow(unused)] + fn test_path_nested() -> &'static str { + "" + } + } + + use test_nest::NestApi; + use test_path::__path_test_path; + #[derive(fastapi::OpenApi)] + #[openapi( + paths(test_path), + nest( + (path = "/api/nest", api = NestApi) + ) + )] + struct ApiDoc; + let value = serde_json::to_value(ApiDoc::openapi()).expect("should be able to serialize json"); + let paths = value + .pointer("/paths") + .expect("should find /paths from the OpenAPI spec"); + + assert_json_eq!( + &paths, + json!({ + "/api/nest/test": { + "get": { + "operationId": "test_path_nested", + "responses": {}, + "tags": [] + }, + }, + "/test": { + "get": { + "operationId": "test_path", + "responses": {}, + "tags": [] + }, + } + }) + ); +} + +#[test] +fn derive_path_with_multiple_methods() { + #[allow(dead_code)] + #[fastapi::path( + method(head, get), + path = "/test-multiple", + responses( + (status = 200, description = "success response") + ), + )] + #[allow(unused)] + async fn test_multiple() -> &'static str { + "" + } + use fastapi::OpenApi; + #[derive(OpenApi, Default)] + #[openapi(paths(test_multiple))] + struct ApiDoc; + + let doc = &serde_json::to_value(ApiDoc::openapi()).unwrap(); + let paths = doc.pointer("/paths").expect("OpenApi must have paths"); + + assert_json_eq!( + &paths, + json!({ + "/test-multiple": { + "get": { + "operationId": "test_multiple", + "responses": { + "200": { + "description": "success response", + }, + }, + "tags": [] + }, + "head": { + "operationId": "test_multiple", + "responses": { + "200": { + "description": "success response", + }, + }, + "tags": [] + } + } + }) + ); +} + +#[test] +fn derive_path_with_response_links() { + #![allow(dead_code)] + + #[fastapi::path( + get, + path = "/test-links", + responses( + (status = 200, description = "success response", + links( + ("getFoo" = ( + operation_id = "test_links", + parameters(("key" = "value"), ("json_value" = json!(1))), + request_body = "this is body", + server(url = "http://localhost") + )), + ("getBar" = ( + operation_ref = "this is ref" + )) + ) + ) + ), + )] + #[allow(unused)] + async fn test_links() -> &'static str { + "" + } + use fastapi::OpenApi; + #[derive(OpenApi, Default)] + #[openapi(paths(test_links))] + struct ApiDoc; + + let doc = &serde_json::to_value(ApiDoc::openapi()).unwrap(); + let paths = doc.pointer("/paths").expect("OpenApi must have paths"); + + assert_json_eq!( + &paths, + json!({ + "/test-links": { + "get": { + "operationId": "test_links", + "responses": { + "200": { + "description": "success response", + "links": { + "getFoo": { + "operation_id": "test_links", + "parameters": { + "json_value": 1, + "key": "value" + }, + "request_body": "this is body", + "server": { + "url": "http://localhost" + } + }, + "getBar": { + "operation_ref": "this is ref" + } + }, + }, + }, + "tags": [] + }, + } + }) + ); +} + +#[test] +fn derive_path_test_collect_request_body() { + #![allow(dead_code)] + + #[derive(ToSchema)] + struct Account { + id: i32, + } + + #[derive(ToSchema)] + struct Person { + name: String, + account: Account, + } + + #[fastapi::path( + post, + request_body = Person, + path = "/test-collect-schemas", + responses( + (status = 200, description = "success response") + ), + )] + async fn test_collect_schemas(_body: Person) -> &'static str { + "" + } + + use fastapi::OpenApi; + #[derive(OpenApi)] + #[openapi(paths(test_collect_schemas))] + struct ApiDoc; + + let doc = serde_json::to_value(ApiDoc::openapi()).unwrap(); + let schemas = doc + .pointer("/components/schemas") + .expect("OpenApi must have schemas"); + + assert_json_eq!( + &schemas, + json!({ + "Person": { + "properties": { + "name": { + "type": "string", + }, + "account": { + "$ref": "#/components/schemas/Account" + } + }, + "required": ["name", "account"], + "type": "object" + }, + "Account": { + "properties": { + "id": { + "type": "integer", + "format": "int32", + }, + }, + "required": ["id"], + "type": "object" + } + }) + ); +} + +#[test] +fn derive_path_test_do_not_collect_inlined_schema() { + #![allow(dead_code)] + + #[derive(ToSchema)] + struct Account { + id: i32, + } + + #[derive(ToSchema)] + struct Person { + name: String, + account: Account, + } + + #[fastapi::path( + post, + request_body = inline(Person), + path = "/test-collect-schemas", + )] + async fn test_collect_schemas(_body: Person) {} + + use fastapi::OpenApi; + #[derive(OpenApi)] + #[openapi(paths(test_collect_schemas))] + struct ApiDoc; + + let doc = serde_json::to_value(ApiDoc::openapi()).unwrap(); + let schemas = doc + .pointer("/components/schemas") + .expect("OpenApi must have schemas"); + + assert_json_eq!( + &schemas, + json!({ + "Account": { + "properties": { + "id": { + "type": "integer", + "format": "int32", + }, + }, + "required": ["id"], + "type": "object" + } + }) + ); +} + +#[test] +fn derive_path_test_do_not_collect_recursive_inlined() { + #![allow(dead_code)] + + #[derive(ToSchema)] + struct Account { + id: i32, + } + + #[derive(ToSchema)] + struct Person { + name: String, + #[schema(inline)] + account: Account, + } + + #[fastapi::path( + post, + request_body = inline(Person), + path = "/test-collect-schemas", + )] + async fn test_collect_schemas(_body: Person) {} + + use fastapi::OpenApi; + #[derive(OpenApi)] + #[openapi(paths(test_collect_schemas))] + struct ApiDoc; + + let doc = serde_json::to_value(ApiDoc::openapi()).unwrap(); + let schemas = doc.pointer("/components/schemas"); + let body = doc + .pointer("/paths/~1test-collect-schemas/post/requestBody/content/application~1json/schema") + .expect("request body must have schema"); + + assert_eq!(None, schemas); + assert_json_eq!( + body, + json!({ + "properties": { + "name": { + "type": "string", + }, + "account": { + "properties": { + "id": { + "type": "integer", + "format": "int32", + }, + }, + "required": ["id"], + "type": "object" + } + }, + "required": ["name", "account"], + "type": "object" + }) + ) +} + +#[test] +fn derive_path_test_collect_generic_array_request_body() { + #![allow(dead_code)] + + #[derive(ToSchema)] + struct Account { + id: i32, + } + + #[derive(ToSchema)] + struct Person { + name: String, + account: Account, + } + + #[derive(ToSchema)] + struct CreateRequest<T> { + value: T, + } + + #[fastapi::path( + post, + request_body = [ CreateRequest<Person> ], + path = "/test-collect-schemas", + responses( + (status = 200, description = "success response") + ), + )] + async fn test_collect_schemas(_body: Person) -> &'static str { + "" + } + + use fastapi::OpenApi; + #[derive(OpenApi)] + #[openapi(paths(test_collect_schemas))] + struct ApiDoc; + + let doc = serde_json::to_value(ApiDoc::openapi()).unwrap(); + let schemas = doc + .pointer("/components/schemas") + .expect("OpenApi must have schemas"); + + assert_json_eq!( + &schemas, + json!({ + "CreateRequest_Person": { + "properties": { + "value": { + "properties": { + "name": { + "type": "string", + }, + "account": { + "$ref": "#/components/schemas/Account" + } + }, + "required": ["name", "account"], + "type": "object" + } + }, + "required": ["value"], + "type": "object" + }, + "Person": { + "properties": { + "name": { + "type": "string", + }, + "account": { + "$ref": "#/components/schemas/Account" + } + }, + "required": ["name", "account"], + "type": "object" + }, + "Account": { + "properties": { + "id": { + "type": "integer", + "format": "int32", + }, + }, + "required": ["id"], + "type": "object" + } + }) + ); +} + +#[test] +fn derive_path_test_collect_generic_request_body() { + #![allow(dead_code)] + + #[derive(ToSchema)] + struct Account { + id: i32, + } + + #[derive(ToSchema)] + struct Person { + name: String, + account: Account, + } + + #[derive(ToSchema)] + struct CreateRequest<T> { + value: T, + } + + #[fastapi::path( + post, + request_body = CreateRequest<Person>, + path = "/test-collect-schemas", + responses( + (status = 200, description = "success response") + ), + )] + async fn test_collect_schemas(_body: Person) -> &'static str { + "" + } + + use fastapi::OpenApi; + #[derive(OpenApi)] + #[openapi(paths(test_collect_schemas))] + struct ApiDoc; + + let doc = serde_json::to_value(ApiDoc::openapi()).unwrap(); + let schemas = doc + .pointer("/components/schemas") + .expect("OpenApi must have schemas"); + + assert_json_eq!( + &schemas, + json!({ + "CreateRequest_Person": { + "properties": { + "value": { + "properties": { + "name": { + "type": "string", + }, + "account": { + "$ref": "#/components/schemas/Account" + } + }, + "required": ["name", "account"], + "type": "object" + } + }, + "required": ["value"], + "type": "object" + }, + "Person": { + "properties": { + "name": { + "type": "string", + }, + "account": { + "$ref": "#/components/schemas/Account" + } + }, + "required": ["name", "account"], + "type": "object" + }, + "Account": { + "properties": { + "id": { + "type": "integer", + "format": "int32", + }, + }, + "required": ["id"], + "type": "object" + } + }) + ); +} + +#[test] +fn path_derive_with_body_ref_using_as_attribute_schema() { + #![allow(unused)] + + #[derive(Serialize, serde::Deserialize, Debug, Clone, ToSchema)] + #[schema(as = types::calculation::calculation_assembly_cost::v1::CalculationAssemblyCostResponse)] + pub struct CalculationAssemblyCostResponse { + #[schema(value_type = uuid::Uuid)] + pub id: String, + } + + #[fastapi::path( + get, + path = "/calculations/assembly-costs", + responses( + (status = 200, description = "Get calculated cost of an assembly.", + body = CalculationAssemblyCostResponse) + ), + )] + async fn handler() {} + + let operation = __path_handler::operation(); + let operation = serde_json::to_value(&operation).expect("operation is JSON serializable"); + + assert_json_eq!( + operation, + json!({ + "operationId": "handler", + "responses": { + "200": { + "description": "Get calculated cost of an assembly.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/types.calculation.calculation_assembly_cost.v1.CalculationAssemblyCostResponse" + }, + } + } + } + } + }) + ); +} + +#[test] +fn derive_into_params_with_ignored_field() { + #![allow(unused)] + + #[derive(IntoParams)] + #[into_params(parameter_in = Query)] + struct Params { + name: String, + #[param(ignore)] + __this_is_private: String, + } + + #[fastapi::path(get, path = "/params", params(Params))] + #[allow(unused)] + fn get_params() {} + let operation = test_api_fn_doc! { + get_params, + operation: get, + path: "/params" + }; + + let value = operation.pointer("/parameters"); + + assert_json_eq!( + value, + json!([ + { + "in": "query", + "name": "name", + "required": true, + "schema": { + "type": "string" + } + } + ]) + ) +} + +#[test] +fn derive_into_params_with_ignored_eq_false_field() { + #![allow(unused)] + + #[derive(IntoParams)] + #[into_params(parameter_in = Query)] + struct Params { + name: String, + #[param(ignore = false)] + __this_is_private: String, + } + + #[fastapi::path(get, path = "/params", params(Params))] + #[allow(unused)] + fn get_params() {} + let operation = test_api_fn_doc! { + get_params, + operation: get, + path: "/params" + }; + + let value = operation.pointer("/parameters"); + + assert_json_eq!( + value, + json!([ + { + "in": "query", + "name": "name", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "__this_is_private", + "required": true, + "schema": { + "type": "string" + } + } + ]) + ) +} + +#[test] +fn derive_octet_stream_request_body() { + #![allow(dead_code)] + + #[fastapi::path( + post, + request_body = Vec<u8>, + path = "/test-octet-stream", + responses( + (status = 200, description = "success response") + ), + )] + async fn test_octet_stream(_body: Vec<u8>) {} + + let operation = serde_json::to_value(__path_test_octet_stream::operation()) + .expect("Operation is JSON serializable"); + let request_body = operation + .pointer("/requestBody") + .expect("must have request body"); + + assert_json_eq!( + &request_body, + json!({ + "content": { + "application/octet-stream": { + "schema": { + "items": { + "type": "integer", + "format": "int32", + "minimum": 0, + }, + "type": "array", + }, + }, + }, + "required": true, + }) + ); +} + +#[test] +fn derive_img_png_request_body() { + #![allow(dead_code)] + + #[derive(fastapi::ToSchema)] + #[schema(content_encoding = "base64")] + struct MyPng(String); + + #[fastapi::path( + post, + request_body(content = inline(MyPng), content_type = "image/png"), + path = "/test_png", + responses( + (status = 200, description = "success response") + ), + )] + async fn test_png(_body: MyPng) {} + + let operation = + serde_json::to_value(__path_test_png::operation()).expect("Operation is JSON serializable"); + let request_body = operation + .pointer("/requestBody") + .expect("must have request body"); + + assert_json_eq!( + &request_body, + json!({ + "content": { + "image/png": { + "schema": { + "type": "string", + "contentEncoding": "base64" + }, + }, + }, + "required": true, + }) + ); +} + +#[test] +fn derive_multipart_form_data() { + #![allow(dead_code)] + + #[derive(fastapi::ToSchema)] + struct MyForm { + order_id: i32, + #[schema(content_media_type = "application/octet-stream")] + file_bytes: Vec<u8>, + } + + #[fastapi::path( + post, + request_body(content = inline(MyForm), content_type = "multipart/form-data"), + path = "/test_multipart", + responses( + (status = 200, description = "success response") + ), + )] + async fn test_multipart(_body: MyForm) {} + + let operation = serde_json::to_value(__path_test_multipart::operation()) + .expect("Operation is JSON serializable"); + let request_body = operation + .pointer("/requestBody") + .expect("must have request body"); + + assert_json_eq!( + &request_body, + json!({ + "content": { + "multipart/form-data": { + "schema": { + "type": "object", + "properties": { + "order_id": { + "type": "integer", + "format": "int32" + }, + "file_bytes": { + "type": "array", + "items": { + "type": "integer", + "format": "int32", + "minimum": 0, + }, + "contentMediaType": "application/octet-stream" + }, + }, + "required": ["order_id", "file_bytes"] + }, + }, + }, + "required": true, + }) + ); +} + +#[test] +fn derive_images_as_application_octet_stream() { + #![allow(dead_code)] + + #[fastapi::path( + post, + request_body( + content( + ("image/png"), + ("image/jpg"), + ), + ), + path = "/test_images", + responses( + (status = 200, description = "success response") + ), + )] + async fn test_multipart(_body: Vec<u8>) {} + + let operation = serde_json::to_value(__path_test_multipart::operation()) + .expect("Operation is JSON serializable"); + let request_body = operation + .pointer("/requestBody") + .expect("must have request body"); + + assert_json_eq!( + &request_body, + json!({ + "content": { + "image/jpg": {}, + "image/png": {}, + }, + }) + ); +} + +#[test] +fn derive_const_generic_request_body_compiles() { + #![allow(unused)] + + #[derive(ToSchema)] + pub struct ArrayResponse<T: ToSchema, const N: usize> { + array: [T; N], + } + + #[derive(ToSchema)] + struct CombinedResponse<T: ToSchema, const N: usize> { + pub array_response: ArrayResponse<T, N>, + } + + #[fastapi::path( + post, + request_body = CombinedResponse<String, 3>, + path = "/test_const_generic", + )] + async fn test_const_generic(_body: Vec<u8>) {} + + let _ = serde_json::to_value(__path_test_const_generic::operation()) + .expect("Operation is JSON serializable"); +} + +#[test] +fn derive_lifetime_generic_request_body_compiles() { + #![allow(unused)] + + #[derive(ToSchema)] + pub struct ArrayResponse<'a, T: ToSchema, const N: usize> { + array: &'a [T; N], + } + + #[derive(ToSchema)] + struct CombinedResponse<'a, T: ToSchema, const N: usize> { + pub array_response: ArrayResponse<'a, T, N>, + } + + #[fastapi::path( + post, + request_body = CombinedResponse<String, 3>, + path = "/test_const_generic", + )] + async fn test_const_generic(_body: Vec<u8>) {} + + let _ = serde_json::to_value(__path_test_const_generic::operation()) + .expect("Operation is JSON serializable"); +} diff --git a/fastapi-gen/tests/path_derive_actix.rs b/fastapi-gen/tests/path_derive_actix.rs new file mode 100644 index 0000000..4422be5 --- /dev/null +++ b/fastapi-gen/tests/path_derive_actix.rs @@ -0,0 +1,1161 @@ +#![cfg(feature = "actix_extras")] + +use actix_web::{ + get, post, route, + web::{Json, Path, Query}, + FromRequest, Responder, ResponseError, +}; +use assert_json_diff::assert_json_eq; +use fastapi::{ + openapi::{ + path::{Parameter, ParameterBuilder, ParameterIn}, + Array, KnownFormat, ObjectBuilder, SchemaFormat, + }, + IntoParams, OpenApi, ToSchema, +}; +use serde::{Deserialize, Serialize}; +use serde_json::{json, Value}; +use std::{fmt::Display, future::Ready, todo}; + +mod common; + +mod mod_derive_path_actix { + use actix_web::{get, web, HttpResponse, Responder}; + use serde_json::json; + + /// Get foo by id + /// + /// Get foo by id long description + #[fastapi::path( + responses( + (status = 200, description = "success response") + ), + params( + ("id", description = "Foo id"), + ) + )] + #[get("/foo/{id}")] + #[allow(unused)] + async fn get_foo_by_id(id: web::Path<i32>) -> impl Responder { + HttpResponse::Ok().json(json!({ "foo": format!("{:?}", &id.into_inner()) })) + } +} + +#[test] +fn derive_path_one_value_actix_success() { + #[derive(OpenApi, Default)] + #[openapi(paths(mod_derive_path_actix::get_foo_by_id))] + struct ApiDoc; + + let doc = serde_json::to_value(ApiDoc::openapi()).unwrap(); + let parameters = doc.pointer("/paths/~1foo~1{id}/get/parameters").unwrap(); + + common::assert_json_array_len(parameters, 1); + assert_value! {parameters=> + "[0].in" = r#""path""#, "Parameter in" + "[0].name" = r#""id""#, "Parameter name" + "[0].description" = r#""Foo id""#, "Parameter description" + "[0].required" = r#"true"#, "Parameter required" + "[0].deprecated" = r#"null"#, "Parameter deprecated" + "[0].schema.type" = r#""integer""#, "Parameter schema type" + "[0].schema.format" = r#""int32""#, "Parameter schema format" + }; +} + +mod mod_derive_path_unnamed_regex_actix { + use actix_web::{get, web, HttpResponse, Responder}; + use serde_json::json; + + /// Get foo by id + /// + /// Get foo by id long description + #[fastapi::path( + responses( + (status = 200, description = "success"), + ), + params( + ("arg0", description = "Foo path unnamed regex tail") + ) + )] + #[get("/foo/{_:.*}")] + #[allow(unused)] + async fn get_foo_by_id(arg0: web::Path<String>) -> impl Responder { + HttpResponse::Ok().json(json!({ "foo": &format!("{:?}", arg0.into_inner()) })) + } +} + +#[test] +fn derive_path_with_unnamed_regex_actix_success() { + #[derive(OpenApi, Default)] + #[openapi(paths(mod_derive_path_unnamed_regex_actix::get_foo_by_id))] + struct ApiDoc; + + let doc = serde_json::to_value(ApiDoc::openapi()).unwrap(); + let parameters = doc.pointer("/paths/~1foo~1{arg0}/get/parameters").unwrap(); + + common::assert_json_array_len(parameters, 1); + assert_value! {parameters=> + "[0].in" = r#""path""#, "Parameter in" + "[0].name" = r#""arg0""#, "Parameter name" + "[0].description" = r#""Foo path unnamed regex tail""#, "Parameter description" + "[0].required" = r#"true"#, "Parameter required" + "[0].deprecated" = r#"null"#, "Parameter deprecated" + "[0].schema.type" = r#""string""#, "Parameter schema type" + "[0].schema.format" = r#"null"#, "Parameter schema format" + }; +} + +mod mod_derive_path_named_regex_actix { + use actix_web::{get, web, HttpResponse, Responder}; + use serde_json::json; + + /// Get foo by id + /// + /// Get foo by id long description + #[fastapi::path( + responses( + (status = 200, description = "success response") + ), + params( + ("tail", description = "Foo path named regex tail") + ) + )] + #[get("/foo/{tail:.*}")] + #[allow(unused)] + async fn get_foo_by_id(tail: web::Path<String>) -> impl Responder { + HttpResponse::Ok().json(json!({ "foo": &format!("{:?}", tail.into_inner()) })) + } +} + +#[test] +fn derive_path_with_named_regex_actix_success() { + #[derive(OpenApi, Default)] + #[openapi(paths(mod_derive_path_named_regex_actix::get_foo_by_id))] + struct ApiDoc; + + let doc = serde_json::to_value(ApiDoc::openapi()).unwrap(); + + let parameters = doc.pointer("/paths/~1foo~1{tail}/get/parameters").unwrap(); + + common::assert_json_array_len(parameters, 1); + assert_value! {parameters=> + "[0].in" = r#""path""#, "Parameter in" + "[0].name" = r#""tail""#, "Parameter name" + "[0].description" = r#""Foo path named regex tail""#, "Parameter description" + "[0].required" = r#"true"#, "Parameter required" + "[0].deprecated" = r#"null"#, "Parameter deprecated" + "[0].schema.type" = r#""string""#, "Parameter schema type" + "[0].schema.format" = r#"null"#, "Parameter schema format" + }; +} + +#[test] +fn derive_path_with_multiple_args() { + mod mod_derive_path_multiple_args { + use actix_web::{get, web, HttpResponse, Responder}; + use serde_json::json; + + #[fastapi::path( + responses( + (status = 200, description = "success response") + ), + )] + #[get("/foo/{id}/bar/{digest}")] + #[allow(unused)] + async fn get_foo_by_id(path: web::Path<(i64, String)>) -> impl Responder { + let (id, digest) = path.into_inner(); + HttpResponse::Ok().json(json!({ "id": &format!("{:?} {:?}", id, digest) })) + } + } + + #[derive(OpenApi, Default)] + #[openapi(paths(mod_derive_path_multiple_args::get_foo_by_id))] + struct ApiDoc; + + let doc = serde_json::to_value(ApiDoc::openapi()).unwrap(); + let parameters = doc + .pointer("/paths/~1foo~1{id}~1bar~1{digest}/get/parameters") + .unwrap(); + + common::assert_json_array_len(parameters, 2); + assert_value! {parameters=> + "[0].in" = r#""path""#, "Parameter in" + "[0].name" = r#""id""#, "Parameter name" + "[0].description" = r#"null"#, "Parameter description" + "[0].required" = r#"true"#, "Parameter required" + "[0].deprecated" = r#"null"#, "Parameter deprecated" + "[0].schema.type" = r#""integer""#, "Parameter schema type" + "[0].schema.format" = r#""int64""#, "Parameter schema format" + + "[1].in" = r#""path""#, "Parameter in" + "[1].name" = r#""digest""#, "Parameter name" + "[1].description" = r#"null"#, "Parameter description" + "[1].required" = r#"true"#, "Parameter required" + "[1].deprecated" = r#"null"#, "Parameter deprecated" + "[1].schema.type" = r#""string""#, "Parameter schema type" + "[1].schema.format" = r#"null"#, "Parameter schema format" + }; +} + +#[test] +fn derive_path_with_dyn_trait_compiles() { + use actix_web::{get, web, HttpResponse, Responder}; + use serde_json::json; + + trait Store {} + + #[fastapi::path( + responses( + (status = 200, description = "success response") + ), + )] + #[get("/foo/{id}/bar/{digest}")] + #[allow(unused)] + async fn get_foo_by_id( + path: web::Path<(i64, String)>, + data: web::Data<&dyn Store>, + ) -> impl Responder { + let (id, digest) = path.into_inner(); + HttpResponse::Ok().json(json!({ "id": &format!("{:?} {:?}", id, digest) })) + } +} + +#[test] +fn derive_complex_actix_web_path() { + mod mod_derive_complex_actix_path { + use actix_web::{get, web, HttpResponse, Responder}; + use serde_json::json; + + #[fastapi::path( + responses( + (status = 200, description = "success response") + ), + )] + #[get("/foo/{id}", name = "api_name")] + #[allow(unused)] + async fn get_foo_by_id(path: web::Path<i64>) -> impl Responder { + let id = path.into_inner(); + HttpResponse::Ok().json(json!({ "id": &format!("{}", id) })) + } + } + + #[derive(OpenApi, Default)] + #[openapi(paths(mod_derive_complex_actix_path::get_foo_by_id))] + struct ApiDoc; + + let doc = serde_json::to_value(ApiDoc::openapi()).unwrap(); + let parameters = doc.pointer("/paths/~1foo~1{id}/get/parameters").unwrap(); + + common::assert_json_array_len(parameters, 1); + assert_value! {parameters=> + "[0].in" = r#""path""#, "Parameter in" + "[0].name" = r#""id""#, "Parameter name" + "[0].description" = r#"null"#, "Parameter description" + "[0].required" = r#"true"#, "Parameter required" + "[0].deprecated" = r#"null"#, "Parameter deprecated" + "[0].schema.type" = r#""integer""#, "Parameter schema type" + "[0].schema.format" = r#""int64""#, "Parameter schema format" + }; +} + +#[test] +fn derive_path_with_multiple_args_with_descriptions() { + mod mod_derive_path_multiple_args { + use actix_web::{get, web, HttpResponse, Responder}; + use serde_json::json; + + #[fastapi::path( + responses( + (status = 200, description = "success response") + ), + params( + ("id", description = "Foo id"), + ("digest", description = "Foo digest") + ) + )] + #[get("/foo/{id}/bar/{digest}")] + #[allow(unused)] + async fn get_foo_by_id(path: web::Path<(i64, String)>) -> impl Responder { + let (id, digest) = path.into_inner(); + HttpResponse::Ok().json(json!({ "id": &format!("{:?} {:?}", id, digest) })) + } + } + + #[derive(OpenApi, Default)] + #[openapi(paths(mod_derive_path_multiple_args::get_foo_by_id))] + struct ApiDoc; + + let doc = serde_json::to_value(ApiDoc::openapi()).unwrap(); + let parameters = doc + .pointer("/paths/~1foo~1{id}~1bar~1{digest}/get/parameters") + .unwrap(); + + common::assert_json_array_len(parameters, 2); + assert_value! {parameters=> + "[0].in" = r#""path""#, "Parameter in" + "[0].name" = r#""id""#, "Parameter name" + "[0].description" = r#""Foo id""#, "Parameter description" + "[0].required" = r#"true"#, "Parameter required" + "[0].deprecated" = r#"null"#, "Parameter deprecated" + "[0].schema.type" = r#""integer""#, "Parameter schema type" + "[0].schema.format" = r#""int64""#, "Parameter schema format" + + "[1].in" = r#""path""#, "Parameter in" + "[1].name" = r#""digest""#, "Parameter name" + "[1].description" = r#""Foo digest""#, "Parameter description" + "[1].required" = r#"true"#, "Parameter required" + "[1].deprecated" = r#"null"#, "Parameter deprecated" + "[1].schema.type" = r#""string""#, "Parameter schema type" + "[1].schema.format" = r#"null"#, "Parameter schema format" + }; +} + +#[test] +fn derive_path_with_context_path() { + use actix_web::{get, HttpResponse, Responder}; + use serde_json::json; + + #[fastapi::path( + context_path = "/api", + responses( + (status = 200, description = "success response") + ) + )] + #[get("/foo")] + #[allow(unused)] + async fn get_foo() -> impl Responder { + HttpResponse::Ok().json(json!({ "id": "foo" })) + } + + #[derive(OpenApi, Default)] + #[openapi(paths(get_foo))] + struct ApiDoc; + + let doc = serde_json::to_value(ApiDoc::openapi()).unwrap(); + let path = doc.pointer("/paths/~1api~1foo/get").unwrap(); + + assert_ne!(path, &Value::Null, "expected path with context path /api"); +} + +#[test] +fn derive_path_with_context_path_from_const() { + use actix_web::{get, HttpResponse, Responder}; + use serde_json::json; + const CONTEXT: &str = "/api"; + + #[fastapi::path( + context_path = CONTEXT, + responses( + (status = 200, description = "success response") + ) + )] + #[get("/foo")] + #[allow(unused)] + async fn get_foo() -> impl Responder { + HttpResponse::Ok().json(json!({ "id": "foo" })) + } + + #[derive(OpenApi, Default)] + #[openapi(paths(get_foo))] + struct ApiDoc; + + let doc = serde_json::to_value(ApiDoc::openapi()).unwrap(); + let path = doc.pointer("/paths/~1api~1foo/get").unwrap(); + + assert_ne!(path, &Value::Null, "expected path with context path /api"); +} + +#[test] +fn path_with_struct_variables_with_into_params() { + use actix_web::{get, HttpResponse, Responder}; + use serde_json::json; + + #[derive(Deserialize)] + #[allow(unused)] + struct Person { + id: i64, + name: String, + } + + impl IntoParams for Person { + fn into_params( + _: impl Fn() -> Option<fastapi::openapi::path::ParameterIn>, + ) -> Vec<Parameter> { + vec![ + ParameterBuilder::new() + .name("name") + .schema(Some( + ObjectBuilder::new().schema_type(fastapi::openapi::schema::Type::String), + )) + .parameter_in(ParameterIn::Path) + .build(), + ParameterBuilder::new() + .name("id") + .schema(Some( + ObjectBuilder::new() + .schema_type(fastapi::openapi::schema::Type::Integer) + .format(Some(SchemaFormat::KnownFormat(KnownFormat::Int64))), + )) + .parameter_in(ParameterIn::Path) + .build(), + ] + } + } + + #[derive(Deserialize)] + #[allow(unused)] + struct Filter { + age: Vec<String>, + } + + impl IntoParams for Filter { + fn into_params( + _: impl Fn() -> Option<fastapi::openapi::path::ParameterIn>, + ) -> Vec<Parameter> { + vec![ParameterBuilder::new() + .name("age") + .schema(Some(Array::new( + ObjectBuilder::new().schema_type(fastapi::openapi::schema::Type::String), + ))) + .parameter_in(ParameterIn::Query) + .build()] + } + } + + #[fastapi::path( + params( + Person, + Filter + ), + responses( + (status = 200, description = "success response") + ) + )] + #[get("/foo/{id}/{name}")] + #[allow(unused)] + async fn get_foo(person: Path<Person>, query: Query<Filter>) -> impl Responder { + HttpResponse::Ok().json(json!({ "id": "foo" })) + } + + #[derive(OpenApi, Default)] + #[openapi(paths(get_foo))] + struct ApiDoc; + + let doc = serde_json::to_value(ApiDoc::openapi()).unwrap(); + let parameters = doc + .pointer("/paths/~1foo~1{id}~1{name}/get/parameters") + .unwrap(); + + common::assert_json_array_len(parameters, 3); + assert_value! {parameters=> + "[0].in" = r#""path""#, "Parameter in" + "[0].name" = r#""name""#, "Parameter name" + "[0].required" = r#"false"#, "Parameter required" + "[0].schema.type" = r#""string""#, "Parameter schema type" + "[0].schema.format" = r#"null"#, "Parameter schema format" + + "[1].in" = r#""path""#, "Parameter in" + "[1].name" = r#""id""#, "Parameter name" + "[1].required" = r#"false"#, "Parameter required" + "[1].schema.type" = r#""integer""#, "Parameter schema type" + "[1].schema.format" = r#""int64""#, "Parameter schema format" + + "[2].in" = r#""query""#, "Parameter in" + "[2].name" = r#""age""#, "Parameter name" + "[2].required" = r#"false"#, "Parameter required" + "[2].schema.type" = r#""array""#, "Parameter schema type" + "[2].schema.items.type" = r#""string""#, "Parameter items schema type" + } +} + +#[test] +fn derive_path_with_struct_variables_with_into_params() { + use actix_web::{get, HttpResponse, Responder}; + use serde_json::json; + + #[derive(Deserialize, IntoParams)] + #[allow(unused)] + struct Person { + /// Id of person + id: i64, + /// Name of person + name: String, + } + + #[derive(Deserialize, IntoParams)] + #[allow(unused)] + struct Filter { + /// Age filter for user + #[deprecated] + age: Option<Vec<String>>, + } + + #[fastapi::path( + params( + Person, + Filter + ), + responses( + (status = 200, description = "success response") + ) + )] + #[get("/foo/{id}/{name}")] + #[allow(unused)] + async fn get_foo(person: Path<Person>, query: Query<Filter>) -> impl Responder { + HttpResponse::Ok().json(json!({ "id": "foo" })) + } + + #[derive(OpenApi, Default)] + #[openapi(paths(get_foo))] + struct ApiDoc; + + let doc = serde_json::to_value(ApiDoc::openapi()).unwrap(); + let parameters = doc + .pointer("/paths/~1foo~1{id}~1{name}/get/parameters") + .unwrap(); + + common::assert_json_array_len(parameters, 3); + assert_value! {parameters=> + "[0].in" = r#""path""#, "Parameter in" + "[0].name" = r#""id""#, "Parameter name" + "[0].description" = r#""Id of person""#, "Parameter description" + "[0].required" = r#"true"#, "Parameter required" + "[0].deprecated" = r#"null"#, "Parameter deprecated" + "[0].schema.type" = r#""integer""#, "Parameter schema type" + "[0].schema.format" = r#""int64""#, "Parameter schema format" + + "[1].in" = r#""path""#, "Parameter in" + "[1].name" = r#""name""#, "Parameter name" + "[1].description" = r#""Name of person""#, "Parameter description" + "[1].required" = r#"true"#, "Parameter required" + "[1].deprecated" = r#"null"#, "Parameter deprecated" + "[1].schema.type" = r#""string""#, "Parameter schema type" + "[1].schema.format" = r#"null"#, "Parameter schema format" + + "[2].in" = r#""query""#, "Parameter in" + "[2].name" = r#""age""#, "Parameter name" + "[2].description" = r#""Age filter for user""#, "Parameter description" + "[2].required" = r#"false"#, "Parameter required" + "[2].deprecated" = r#"true"#, "Parameter deprecated" + "[2].schema.type" = r#"["array","null"]"#, "Parameter schema type" + "[2].schema.items.type" = r#""string""#, "Parameter items schema type" + } +} + +#[test] +fn derive_path_with_multiple_instances_same_path_params() { + use actix_web::{delete, get, HttpResponse, Responder}; + use serde_json::json; + + #[derive(Deserialize, Serialize, ToSchema, IntoParams)] + #[into_params(names("id"))] + struct Id(u64); + + #[fastapi::path( + params( + Id + ), + responses( + (status = 200, description = "success response") + ) + )] + #[get("/foo/{id}")] + #[allow(unused)] + async fn get_foo(id: Path<Id>) -> impl Responder { + HttpResponse::Ok().json(json!({ "id": "foo" })) + } + + #[fastapi::path( + params( + Id + ), + responses( + (status = 200, description = "success response") + ) + )] + #[delete("/foo/{id}")] + #[allow(unused)] + async fn delete_foo(id: Path<Id>) -> impl Responder { + HttpResponse::Ok().json(json!({ "id": "foo" })) + } + + #[derive(OpenApi, Default)] + #[openapi(paths(get_foo, delete_foo))] + struct ApiDoc; + + let doc = serde_json::to_value(ApiDoc::openapi()).unwrap(); + + for operation in ["get", "delete"] { + let parameters = doc + .pointer(&format!("/paths/~1foo~1{{id}}/{operation}/parameters")) + .unwrap(); + + common::assert_json_array_len(parameters, 1); + assert_value! {parameters=> + "[0].in" = r#""path""#, "Parameter in" + "[0].name" = r#""id""#, "Parameter name" + "[0].required" = r#"true"#, "Parameter required" + "[0].deprecated" = r#"null"#, "Parameter deprecated" + "[0].schema.type" = r#""integer""#, "Parameter schema type" + "[0].schema.format" = r#""int64""#, "Parameter schema format" + } + } +} + +#[test] +fn derive_path_with_multiple_into_params_names() { + use actix_web::{get, HttpResponse, Responder}; + + #[derive(Deserialize, Serialize, IntoParams)] + #[into_params(names("id", "name"))] + struct IdAndName(u64, String); + + #[fastapi::path( + params(IdAndName), + responses( + (status = 200, description = "success response") + ) + )] + #[get("/foo/{id}/{name}")] + #[allow(unused)] + async fn get_foo(path: Path<IdAndName>) -> impl Responder { + HttpResponse::Ok() + } + + #[derive(OpenApi, Default)] + #[openapi(paths(get_foo))] + struct ApiDoc; + + let doc = serde_json::to_value(ApiDoc::openapi()).unwrap(); + + let parameters = doc + .pointer("/paths/~1foo~1{id}~1{name}/get/parameters") + .unwrap(); + + common::assert_json_array_len(parameters, 2); + assert_value! {parameters=> + "[0].in" = r#""path""#, "Parameter in" + "[0].name" = r#""id""#, "Parameter name" + "[0].required" = r#"true"#, "Parameter required" + "[0].deprecated" = r#"null"#, "Parameter deprecated" + "[0].schema.type" = r#""integer""#, "Parameter schema type" + "[0].schema.format" = r#""int64""#, "Parameter schema format" + + "[1].in" = r#""path""#, "Parameter in" + "[1].name" = r#""name""#, "Parameter name" + "[1].required" = r#"true"#, "Parameter required" + "[1].deprecated" = r#"null"#, "Parameter deprecated" + "[1].schema.type" = r#""string""#, "Parameter schema type" + "[1].schema.format" = r#"null"#, "Parameter schema format" + } +} + +#[test] +fn derive_into_params_with_custom_attributes() { + use actix_web::{get, HttpResponse, Responder}; + use serde_json::json; + + #[derive(Deserialize, IntoParams)] + #[allow(unused)] + struct Person { + /// Id of person + id: i64, + /// Name of person + #[param(style = Simple, example = "John")] + name: String, + } + + #[derive(Deserialize, IntoParams)] + #[allow(unused)] + struct Filter { + /// Age filter for user + #[param(style = Form, explode, allow_reserved, example = json!(["10"]))] + age: Option<Vec<String>>, + sort: Sort, + } + + #[derive(Deserialize, ToSchema)] + enum Sort { + Asc, + Desc, + } + + #[fastapi::path( + params( + Person, + Filter + ), + responses( + (status = 200, description = "success response") + ) + )] + #[get("/foo/{id}/{name}")] + #[allow(unused)] + async fn get_foo(person: Path<Person>, query: Query<Filter>) -> impl Responder { + HttpResponse::Ok().json(json!({ "id": "foo" })) + } + + #[derive(OpenApi, Default)] + #[openapi(paths(get_foo), components(schemas(Sort)))] + struct ApiDoc; + + let doc = serde_json::to_value(ApiDoc::openapi()).unwrap(); + let parameters = doc + .pointer("/paths/~1foo~1{id}~1{name}/get/parameters") + .unwrap(); + + common::assert_json_array_len(parameters, 4); + assert_value! {parameters=> + "[0].in" = r#""path""#, "Parameter in" + "[0].name" = r#""id""#, "Parameter name" + "[0].description" = r#""Id of person""#, "Parameter description" + "[0].required" = r#"true"#, "Parameter required" + "[0].deprecated" = r#"null"#, "Parameter deprecated" + "[0].style" = r#"null"#, "Parameter style" + "[0].example" = r#"null"#, "Parameter example" + "[0].allowReserved" = r#"null"#, "Parameter allowReserved" + "[0].explode" = r#"null"#, "Parameter explode" + "[0].schema.type" = r#""integer""#, "Parameter schema type" + "[0].schema.format" = r#""int64""#, "Parameter schema format" + + "[1].in" = r#""path""#, "Parameter in" + "[1].name" = r#""name""#, "Parameter name" + "[1].description" = r#""Name of person""#, "Parameter description" + "[1].required" = r#"true"#, "Parameter required" + "[1].deprecated" = r#"null"#, "Parameter deprecated" + "[1].style" = r#""simple""#, "Parameter style" + "[1].allowReserved" = r#"null"#, "Parameter allowReserved" + "[1].explode" = r#"null"#, "Parameter explode" + "[1].example" = r#""John""#, "Parameter example" + "[1].schema.type" = r#""string""#, "Parameter schema type" + "[1].schema.format" = r#"null"#, "Parameter schema format" + + "[2].in" = r#""query""#, "Parameter in" + "[2].name" = r#""age""#, "Parameter name" + "[2].description" = r#""Age filter for user""#, "Parameter description" + "[2].required" = r#"false"#, "Parameter required" + "[2].deprecated" = r#"null"#, "Parameter deprecated" + "[2].style" = r#""form""#, "Parameter style" + "[2].example" = r#"["10"]"#, "Parameter example" + "[2].allowReserved" = r#"true"#, "Parameter allowReserved" + "[2].explode" = r#"true"#, "Parameter explode" + "[2].schema.type" = r#"["array","null"]"#, "Parameter schema type" + "[2].schema.items.type" = r#""string""#, "Parameter items schema type" + + "[3].in" = r#""query""#, "Parameter in" + "[3].name" = r#""sort""#, "Parameter name" + "[3].description" = r#"null"#, "Parameter description" + "[3].required" = r#"true"#, "Parameter required" + "[3].deprecated" = r#"null"#, "Parameter deprecated" + "[3].schema.$ref" = r###""#/components/schemas/Sort""###, "Parameter schema type" + } +} + +#[test] +fn derive_into_params_in_another_module() { + use actix_web::{get, HttpResponse, Responder}; + use fastapi::OpenApi; + pub mod params { + use fastapi::IntoParams; + use serde::Deserialize; + + #[derive(Deserialize, IntoParams)] + pub struct FooParams { + #[allow(unused)] + pub id: String, + } + } + + /// Foo test + #[fastapi::path( + params( + params::FooParams, + ), + responses( + (status = 200, description = "Todo foo operation success"), + ) + )] + #[get("/todo/foo/{id}")] + pub async fn foo_todos(_path: Path<params::FooParams>) -> impl Responder { + HttpResponse::Ok() + } + + #[derive(OpenApi, Default)] + #[openapi(paths(foo_todos))] + struct ApiDoc; + + let doc = serde_json::to_value(ApiDoc::openapi()).unwrap(); + let parameters = doc + .pointer("/paths/~1todo~1foo~1{id}/get/parameters") + .unwrap(); + + common::assert_json_array_len(parameters, 1); + assert_value! {parameters=> + "[0].in" = r#""path""#, "Parameter in" + "[0].name" = r#""id""#, "Parameter name" + } +} + +#[test] +fn path_with_all_args() { + #![allow(unused)] + #[derive(fastapi::ToSchema, serde::Serialize, serde::Deserialize)] + struct Item(String); + + /// Error + #[derive(Debug)] + struct Error; + + impl Display for Error { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(f, "Error") + } + } + + impl ResponseError for Error {} + + #[derive(serde::Serialize, serde::Deserialize, IntoParams)] + struct Filter { + age: i32, + status: String, + } + + // NOTE! temporarily disable automatic parameter recognition + #[fastapi::path(params(Filter))] + #[post("/item/{id}/{name}")] + async fn post_item( + _path: Path<(i32, String)>, + _query: Query<Filter>, + _body: Json<Item>, + ) -> Result<Json<Item>, Error> { + Ok(Json(Item(String::new()))) + } + + #[derive(fastapi::OpenApi)] + #[openapi(paths(post_item))] + struct Doc; + + let doc = serde_json::to_value(Doc::openapi()).unwrap(); + let operation = doc.pointer("/paths/~1item~1{id}~1{name}/post").unwrap(); + + assert_json_eq!( + &operation.pointer("/parameters").unwrap(), + json!([ + { + "in": "query", + "name": "age", + "required": true, + "schema": { + "format": "int32", + "type": "integer" + } + }, + { + "in": "query", + "name": "status", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "format": "int32", + "type": "integer" + } + }, + { + "in": "path", + "name": "name", + "required": true, + "schema": { + "type": "string" + } + } + ]) + ); + assert_json_eq!( + &operation.pointer("/requestBody"), + json!({ + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Item" + } + } + }, + "required": true, + }) + ) +} + +#[test] +#[cfg(feature = "uuid")] +fn path_with_all_args_using_uuid() { + #![allow(unused)] + + #[derive(fastapi::ToSchema, serde::Serialize, serde::Deserialize)] + struct Item(String); + + /// Error + #[derive(Debug)] + struct Error; + + impl Display for Error { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(f, "Error") + } + } + + impl ResponseError for Error {} + + #[fastapi::path] + #[post("/item/{uuid}")] + async fn post_item(_path: Path<uuid::Uuid>, _body: Json<Item>) -> Result<Json<Item>, Error> { + Ok(Json(Item(String::new()))) + } + + #[derive(fastapi::OpenApi)] + #[openapi(paths(post_item))] + struct Doc; + + let doc = serde_json::to_value(Doc::openapi()).unwrap(); + let operation = doc.pointer("/paths/~1item~1{uuid}/post").unwrap(); + + assert_json_eq!( + &operation.pointer("/parameters").unwrap(), + json!([ + { + "in": "path", + "name": "uuid", + "required": true, + "schema": { + "format": "uuid", + "type": "string" + } + }, + ]) + ); + assert_json_eq!( + &operation.pointer("/requestBody"), + json!({ + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Item" + } + } + }, + "required": true, + }) + ) +} + +#[test] +#[cfg(feature = "uuid")] +fn path_with_all_args_using_custom_uuid() { + #[derive(fastapi::ToSchema, serde::Serialize, serde::Deserialize)] + struct Item(String); + + /// Error + #[derive(Debug)] + struct Error; + + impl Display for Error { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(f, "Error") + } + } + + impl ResponseError for Error {} + + #[derive(Serialize, Deserialize, IntoParams)] + #[into_params(names("custom_uuid"))] + struct Id(uuid::Uuid); + + impl FromRequest for Id { + type Error = Error; + + type Future = Ready<Result<Self, Self::Error>>; + + fn from_request( + _: &actix_web::HttpRequest, + _: &mut actix_web::dev::Payload, + ) -> Self::Future { + todo!() + } + } + + // NOTE! temporarily disable automatic parameter recognition + #[fastapi::path(params(Id))] + #[post("/item/{custom_uuid}")] + async fn post_item(_path: Path<Id>, _body: Json<Item>) -> Result<Json<Item>, Error> { + Ok(Json(Item(String::new()))) + } + + #[derive(fastapi::OpenApi)] + #[openapi(paths(post_item))] + struct Doc; + + let doc = serde_json::to_value(Doc::openapi()).unwrap(); + let operation = doc.pointer("/paths/~1item~1{custom_uuid}/post").unwrap(); + + assert_json_eq!( + &operation.pointer("/parameters").unwrap(), + json!([ + { + "in": "path", + "name": "custom_uuid", + "required": true, + "schema": { + "format": "uuid", + "type": "string" + } + }, + ]) + ); + assert_json_eq!( + &operation.pointer("/requestBody"), + json!({ + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Item" + } + } + }, + "required": true, + }) + ) +} + +macro_rules! test_derive_path_operations { + ( $( $name:ident, $mod:ident: $operation:ident)* ) => { + $( + mod $mod { + use actix_web::{$operation, HttpResponse, Responder}; + use serde_json::json; + + #[fastapi::path( + responses( + (status = 200, description = "success response") + ) + )] + #[$operation("/foo")] + #[allow(unused)] + async fn test_operation() -> impl Responder { + HttpResponse::Ok().json(json!({ "foo": "".to_string() })) + } + } + + #[test] + fn $name() { + #[derive(OpenApi, Default)] + #[openapi(paths($mod::test_operation))] + struct ApiDoc; + + let doc = serde_json::to_value(ApiDoc::openapi()).unwrap(); + + let op_str = stringify!($operation); + let path = format!("/paths/~1foo/{}", op_str); + let value = doc.pointer(&path).unwrap_or(&serde_json::Value::Null); + assert!(value != &Value::Null, "expected to find operation with: {}", path); + } + )* + }; +} + +#[test] +fn path_derive_custom_generic_wrapper() { + #[derive(serde::Serialize, serde::Deserialize)] + struct Validated<T>(T); + + impl<T> FromRequest for Validated<T> { + type Error = actix_web::Error; + + type Future = Ready<Result<Self, Self::Error>>; + + fn from_request( + _req: &actix_web::HttpRequest, + _payload: &mut actix_web::dev::Payload, + ) -> Self::Future { + todo!() + } + } + + #[derive(fastapi::ToSchema, serde::Serialize, serde::Deserialize)] + struct Item(String); + + #[fastapi::path()] + #[post("/item")] + async fn post_item(_body: Validated<Json<Item>>) -> Json<Item> { + Json(Item(String::new())) + } + + #[derive(fastapi::OpenApi)] + #[openapi(paths(post_item))] + struct Doc; + + let doc = serde_json::to_value(Doc::openapi()).unwrap(); + let schemas = doc.pointer("/components/schemas").unwrap(); + let operation = doc.pointer("/paths/~1item/post").unwrap(); + + assert_json_eq!( + &schemas, + json!({ + "Item": { + "type": "string" + } + }) + ); + assert_json_eq!( + &operation.pointer("/requestBody"), + json!({ + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Item" + } + } + }, + "required": true, + }) + ) +} + +test_derive_path_operations! { + derive_path_operation_post, mod_test_post: post + derive_path_operation_get, mod_test_get: get + derive_path_operation_delete, mod_test_delete: delete + derive_path_operation_put, mod_test_put: put + derive_path_operation_head, mod_test_head: head + derive_path_operation_options, mod_test_options: options + derive_path_operation_trace, mod_test_trace: trace + derive_path_operation_patch, mod_test_patch: patch +} + +#[test] +fn derive_path_with_multiple_methods_skip_connect() { + #[fastapi::path( + responses( + (status = 200, description = "success response") + ) + )] + #[route("/route foo", method = "GET", method = "HEAD", method = "CONNECT")] + #[allow(unused)] + async fn multiple_methods() -> impl Responder { + String::new() + } + + use fastapi::Path; + assert_eq!( + vec![ + fastapi::openapi::path::HttpMethod::Get, + fastapi::openapi::path::HttpMethod::Head + ], + __path_multiple_methods::methods() + ) +} diff --git a/fastapi-gen/tests/path_derive_auto_into_responses.rs b/fastapi-gen/tests/path_derive_auto_into_responses.rs new file mode 100644 index 0000000..3dc2787 --- /dev/null +++ b/fastapi-gen/tests/path_derive_auto_into_responses.rs @@ -0,0 +1,74 @@ +#![cfg(feature = "auto_into_responses")] + +use assert_json_diff::assert_json_eq; +use fastapi::OpenApi; + +#[test] +fn path_operation_auto_types_responses() { + /// Test item to to return + #[derive(serde::Serialize, serde::Deserialize, fastapi::ToSchema)] + struct Item<'s> { + value: &'s str, + } + + #[derive(fastapi::IntoResponses)] + #[allow(unused)] + enum ItemResponse<'s> { + /// Item found + #[response(status = 200)] + Success(Item<'s>), + /// No item found + #[response(status = NOT_FOUND)] + NotFound, + } + + #[fastapi::path(get, path = "/item")] + #[allow(unused)] + async fn get_item() -> ItemResponse<'static> { + ItemResponse::Success(Item { value: "super" }) + } + + #[derive(OpenApi)] + #[openapi(paths(get_item))] + struct ApiDoc; + + let doc = ApiDoc::openapi(); + let value = serde_json::to_value(&doc).unwrap(); + let path = value.pointer("/paths/~1item/get").unwrap(); + + assert_json_eq!( + &path.pointer("/responses").unwrap(), + serde_json::json!({ + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Item" + } + } + }, + "description": "Item found", + }, + "404": { + "description": "No item found" + } + }) + ) +} + +#[test] +fn path_operation_auto_types_default_response_type() { + #[fastapi::path(get, path = "/item")] + #[allow(unused)] + async fn post_item() {} + + #[derive(OpenApi)] + #[openapi(paths(post_item))] + struct ApiDoc; + + let doc = ApiDoc::openapi(); + let value = serde_json::to_value(&doc).unwrap(); + let path = value.pointer("/paths/~1item/get").unwrap(); + + assert_json_eq!(&path.pointer("/responses").unwrap(), serde_json::json!({})) +} diff --git a/fastapi-gen/tests/path_derive_auto_into_responses_actix.rs b/fastapi-gen/tests/path_derive_auto_into_responses_actix.rs new file mode 100644 index 0000000..7168533 --- /dev/null +++ b/fastapi-gen/tests/path_derive_auto_into_responses_actix.rs @@ -0,0 +1,474 @@ +#![cfg(all(feature = "auto_into_responses", feature = "actix_extras"))] + +use actix_web::web::{Form, Json}; +use fastapi::OpenApi; +use std::fmt::Display; + +use actix_web::body::BoxBody; +use actix_web::http::header::ContentType; +use actix_web::{get, post, HttpResponse, Responder, ResponseError}; +use assert_json_diff::assert_json_eq; + +#[test] +fn path_operation_auto_types_responses() { + /// Test item to to return + #[derive(serde::Serialize, serde::Deserialize, fastapi::ToSchema)] + struct Item<'s> { + value: &'s str, + } + + #[derive(fastapi::IntoResponses)] + #[allow(unused)] + enum ItemResponse<'s> { + /// Item found + #[response(status = 200)] + Success(Item<'s>), + /// No item found + #[response(status = NOT_FOUND)] + NotFound, + } + + /// Error + #[derive(Debug, fastapi::IntoResponses)] + #[response(status = 500)] + struct Error; + + impl Display for Error { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(f, "Error") + } + } + + impl ResponseError for Error {} + + impl Responder for ItemResponse<'static> { + type Body = BoxBody; + + fn respond_to(self, _: &actix_web::HttpRequest) -> actix_web::HttpResponse<Self::Body> { + match self { + Self::Success(item) => HttpResponse::Ok() + .content_type(ContentType::json()) + .body(serde_json::to_string(&item).expect("Item must serialize to json")), + Self::NotFound => HttpResponse::NotFound().finish(), + } + } + } + + #[fastapi::path] + #[get("/item")] + async fn get_item() -> Result<ItemResponse<'static>, Error> { + Ok(ItemResponse::Success(Item { value: "super" })) + } + + #[derive(OpenApi)] + #[openapi(paths(get_item))] + struct ApiDoc; + + let doc = ApiDoc::openapi(); + let value = serde_json::to_value(&doc).unwrap(); + let path = value.pointer("/paths/~1item/get").unwrap(); + + assert_json_eq!( + &path.pointer("/responses").unwrap(), + serde_json::json!({ + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Item" + } + } + }, + "description": "Item found", + }, + "404": { + "description": "No item found" + }, + "500": { + "description": "Error" + } + }) + ) +} + +#[test] +fn path_operation_auto_types_fn_parameters() { + /// Test item to to return + #[derive(serde::Serialize, serde::Deserialize, fastapi::ToSchema)] + struct Item<'s> { + value: &'s str, + } + + #[derive(fastapi::IntoResponses)] + #[allow(unused)] + enum ItemResponse<'s> { + /// Item found + #[response(status = 200)] + Success(Item<'s>), + /// No item found + #[response(status = NOT_FOUND)] + NotFound, + } + + impl Responder for ItemResponse<'static> { + type Body = BoxBody; + + fn respond_to(self, _: &actix_web::HttpRequest) -> actix_web::HttpResponse<Self::Body> { + match self { + Self::Success(item) => HttpResponse::Ok() + .content_type(ContentType::json()) + .body(serde_json::to_string(&item).expect("Item must serialize to json")), + Self::NotFound => HttpResponse::NotFound().finish(), + } + } + } + + #[derive(serde::Serialize, serde::Deserialize, fastapi::ToSchema)] + struct ItemBody { + value: String, + } + + #[fastapi::path] + #[post("/item")] + #[allow(unused)] + async fn post_item(item: Json<ItemBody>) -> ItemResponse<'static> { + ItemResponse::Success(Item { value: "super" }) + } + + #[derive(OpenApi)] + #[openapi(paths(post_item), components(schemas(ItemBody)))] + struct ApiDoc; + + let doc = ApiDoc::openapi(); + let value = serde_json::to_value(&doc).unwrap(); + let path = value.pointer("/paths/~1item/post").unwrap(); + + assert_json_eq!( + &path.pointer("/responses").unwrap(), + serde_json::json!({ + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Item" + } + } + }, + "description": "Item found", + }, + "404": { + "description": "No item found" + }, + }) + ); + + assert_json_eq!( + &path.pointer("/requestBody"), + serde_json::json!({ + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ItemBody" + } + } + }, + "description": "", + "required": true, + }) + ) +} + +#[test] +fn path_operation_optional_json_body() { + /// Test item to to return + #[derive(serde::Serialize, serde::Deserialize, fastapi::ToSchema)] + struct Item<'s> { + value: &'s str, + } + + #[derive(fastapi::IntoResponses)] + #[allow(unused)] + enum ItemResponse<'s> { + /// Item found + #[response(status = 200)] + Success(Item<'s>), + /// No item found + #[response(status = NOT_FOUND)] + NotFound, + } + + impl Responder for ItemResponse<'static> { + type Body = BoxBody; + + fn respond_to(self, _: &actix_web::HttpRequest) -> actix_web::HttpResponse<Self::Body> { + match self { + Self::Success(item) => HttpResponse::Ok() + .content_type(ContentType::json()) + .body(serde_json::to_string(&item).expect("Item must serialize to json")), + Self::NotFound => HttpResponse::NotFound().finish(), + } + } + } + + #[derive(serde::Serialize, serde::Deserialize, fastapi::ToSchema)] + struct ItemBody { + value: String, + } + + #[fastapi::path] + #[post("/item")] + #[allow(unused)] + async fn post_item(item: Option<Json<ItemBody>>) -> ItemResponse<'static> { + ItemResponse::Success(Item { value: "super" }) + } + + #[derive(OpenApi)] + #[openapi(paths(post_item), components(schemas(ItemBody)))] + struct ApiDoc; + + let doc = ApiDoc::openapi(); + let value = serde_json::to_value(&doc).unwrap(); + let path = value.pointer("/paths/~1item/post").unwrap(); + + assert_json_eq!( + &path.pointer("/responses").unwrap(), + serde_json::json!({ + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Item" + } + } + }, + "description": "Item found", + }, + "404": { + "description": "No item found" + }, + }) + ); + + assert_json_eq!( + &path.pointer("/requestBody"), + serde_json::json!({ + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/ItemBody" + } + ], + "nullable": true, + } + } + }, + "description": "", + "required": false, + }) + ) +} + +#[test] +fn path_operation_auto_types_tuple() { + /// Test item to to return + #[derive(serde::Serialize, serde::Deserialize, fastapi::ToSchema)] + struct Item<'s> { + value: &'s str, + } + + #[derive(fastapi::IntoResponses)] + #[allow(unused)] + enum ItemResponse<'s> { + /// Item found + #[response(status = 200)] + Success(Item<'s>), + } + + impl Responder for ItemResponse<'static> { + type Body = BoxBody; + + fn respond_to(self, _: &actix_web::HttpRequest) -> actix_web::HttpResponse<Self::Body> { + match self { + Self::Success(item) => HttpResponse::Ok() + .content_type(ContentType::json()) + .body(serde_json::to_string(&item).expect("Item must serialize to json")), + } + } + } + + #[derive(serde::Serialize, serde::Deserialize, fastapi::ToSchema)] + struct ItemBody { + value: String, + } + + #[fastapi::path] + #[post("/item")] + #[allow(unused)] + async fn post_item(item: Json<(ItemBody, String)>) -> ItemResponse<'static> { + ItemResponse::Success(Item { value: "super" }) + } + + #[derive(OpenApi)] + #[openapi(paths(post_item), components(schemas(ItemBody)))] + struct ApiDoc; + + let doc = ApiDoc::openapi(); + let value = serde_json::to_value(&doc).unwrap(); + let path = value.pointer("/paths/~1item/post").unwrap(); + + assert_json_eq!( + &path.pointer("/requestBody"), + serde_json::json!({ + "content": { + "application/json": { + "schema": { + "items": { + "allOf": [ + { + "$ref": "#/components/schemas/ItemBody" + }, + { + "type": "string" + } + ] + }, + "type": "array", + } + } + }, + "description": "", + "required": true, + }) + ) +} + +#[test] +fn path_operation_request_body_bytes() { + /// Test item to to return + #[derive(serde::Serialize, serde::Deserialize, fastapi::ToSchema)] + struct Item<'s> { + value: &'s str, + } + + #[derive(fastapi::IntoResponses)] + #[allow(unused)] + enum ItemResponse<'s> { + /// Item found + #[response(status = 200)] + Success(Item<'s>), + } + + impl Responder for ItemResponse<'static> { + type Body = BoxBody; + + fn respond_to(self, _: &actix_web::HttpRequest) -> actix_web::HttpResponse<Self::Body> { + match self { + Self::Success(item) => HttpResponse::Ok() + .content_type(ContentType::json()) + .body(serde_json::to_string(&item).expect("Item must serialize to json")), + } + } + } + + #[derive(serde::Serialize, serde::Deserialize, fastapi::ToSchema)] + struct ItemBody { + value: String, + } + + #[fastapi::path] + #[post("/item")] + #[allow(unused)] + async fn post_item(item: actix_web::web::Bytes) -> ItemResponse<'static> { + ItemResponse::Success(Item { value: "super" }) + } + + #[derive(OpenApi)] + #[openapi(paths(post_item), components(schemas(ItemBody)))] + struct ApiDoc; + + let doc = ApiDoc::openapi(); + let value = serde_json::to_value(&doc).unwrap(); + let path = value.pointer("/paths/~1item/post").unwrap(); + + assert_json_eq!( + &path.pointer("/requestBody"), + serde_json::json!({ + "content": { + "application/octet-stream": { + "schema": { + "type": "string", + "format": "binary", + } + } + }, + "description": "", + "required": true, + }) + ) +} + +#[test] +fn path_operation_request_body_form() { + /// Test item to to return + #[derive(serde::Serialize, serde::Deserialize, fastapi::ToSchema)] + struct Item<'s> { + value: &'s str, + } + + #[derive(fastapi::IntoResponses)] + #[allow(unused)] + enum ItemResponse<'s> { + /// Item found + #[response(status = 200)] + Success(Item<'s>), + } + + impl Responder for ItemResponse<'static> { + type Body = BoxBody; + + fn respond_to(self, _: &actix_web::HttpRequest) -> actix_web::HttpResponse<Self::Body> { + match self { + Self::Success(item) => HttpResponse::Ok() + .content_type(ContentType::json()) + .body(serde_json::to_string(&item).expect("Item must serialize to json")), + } + } + } + + #[derive(serde::Serialize, serde::Deserialize, fastapi::ToSchema)] + struct ItemBody { + value: String, + } + + #[fastapi::path] + #[post("/item")] + #[allow(unused)] + async fn post_item(item: Form<ItemBody>) -> ItemResponse<'static> { + ItemResponse::Success(Item { value: "super" }) + } + + #[derive(OpenApi)] + #[openapi(paths(post_item), components(schemas(ItemBody)))] + struct ApiDoc; + + let doc = ApiDoc::openapi(); + let value = serde_json::to_value(&doc).unwrap(); + let path = value.pointer("/paths/~1item/post").unwrap(); + + assert_json_eq!( + &path.pointer("/requestBody"), + serde_json::json!({ + "content": { + "application/x-www-form-urlencoded": { + "schema": { + "$ref": "#/components/schemas/ItemBody" + } + } + }, + "description": "", + "required": true, + }) + ) +} diff --git a/fastapi-gen/tests/path_derive_auto_into_responses_axum.rs b/fastapi-gen/tests/path_derive_auto_into_responses_axum.rs new file mode 100644 index 0000000..a801a73 --- /dev/null +++ b/fastapi-gen/tests/path_derive_auto_into_responses_axum.rs @@ -0,0 +1,57 @@ +#![cfg(all(feature = "auto_into_responses", feature = "axum_extras"))] + +use assert_json_diff::assert_json_eq; +use fastapi::OpenApi; + +#[test] +fn path_operation_auto_types_responses() { + /// Test item to to return + #[derive(serde::Serialize, serde::Deserialize, fastapi::ToSchema)] + struct Item<'s> { + value: &'s str, + } + + #[derive(fastapi::IntoResponses)] + #[allow(unused)] + enum ItemResponse<'s> { + /// Item found + #[response(status = 200)] + Success(Item<'s>), + /// No item found + #[response(status = NOT_FOUND)] + NotFound, + } + + #[fastapi::path(get, path = "/item")] + #[allow(unused)] + async fn get_item() -> ItemResponse<'static> { + ItemResponse::Success(Item { value: "super" }) + } + + #[derive(OpenApi)] + #[openapi(paths(get_item))] + struct ApiDoc; + + let doc = ApiDoc::openapi(); + let value = serde_json::to_value(&doc).unwrap(); + let path = value.pointer("/paths/~1item/get").unwrap(); + + assert_json_eq!( + &path.pointer("/responses").unwrap(), + serde_json::json!({ + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Item" + } + } + }, + "description": "Item found", + }, + "404": { + "description": "No item found" + } + }) + ) +} diff --git a/fastapi-gen/tests/path_derive_axum_test.rs b/fastapi-gen/tests/path_derive_axum_test.rs new file mode 100644 index 0000000..19a7e03 --- /dev/null +++ b/fastapi-gen/tests/path_derive_axum_test.rs @@ -0,0 +1,809 @@ +#![cfg(feature = "axum_extras")] + +use std::sync::{Arc, Mutex}; + +use assert_json_diff::{assert_json_eq, assert_json_matches, CompareMode, Config, NumericMode}; +use axum::{ + extract::{Path, Query}, + Extension, Json, +}; +use fastapi::{IntoParams, OpenApi}; +use serde::Deserialize; +use serde_json::json; + +#[test] +fn derive_path_params_into_params_axum() { + #[derive(Deserialize, IntoParams)] + #[allow(unused)] + struct Person { + /// Id of person + id: i64, + /// Name of person + name: String, + } + + pub mod custom { + use fastapi::IntoParams; + use serde::Deserialize; + #[derive(Deserialize, IntoParams)] + #[allow(unused)] + pub(super) struct Filter { + /// Age filter for user + #[deprecated] + age: Option<Vec<String>>, + } + } + + #[fastapi::path( + get, + path = "/person/{id}/{name}", + params(Person, custom::Filter), + responses( + (status = 200, description = "success response") + ) + )] + #[allow(unused)] + async fn get_person(person: Path<Person>, query: Query<custom::Filter>) {} + + #[derive(OpenApi)] + #[openapi(paths(get_person))] + struct ApiDoc; + + let doc = serde_json::to_value(ApiDoc::openapi()).unwrap(); + let parameters = doc + .pointer("/paths/~1person~1{id}~1{name}/get/parameters") + .unwrap(); + + assert_json_eq!( + parameters, + &json!([ + { + "description": "Id of person", + "in": "path", + "name": "id", + "required": true, + "schema": { + "format": "int64", + "type": "integer", + }, + }, + { + "description": "Name of person", + "in": "path", + "name": "name", + "required": true, + "schema": { + "type": "string", + }, + }, + { + "deprecated": true, + "description": "Age filter for user", + "in": "query", + "name": "age", + "required": false, + "schema": { + "items": { + "type": "string", + }, + "type": ["array", "null"], + } + }, + ]) + ) +} + +#[test] +fn get_todo_with_path_tuple() { + #[fastapi::path( + get, + path = "/person/{id}/{name}", + params( + ("id", description = "Person id"), + ("name", description = "Person name") + ), + responses( + (status = 200, description = "success response") + ) + )] + #[allow(unused)] + async fn get_person(Path((id, name)): Path<(String, String)>) {} + + #[derive(OpenApi)] + #[openapi(paths(get_person))] + struct ApiDoc; + + let doc = serde_json::to_value(ApiDoc::openapi()).unwrap(); + let parameters = doc + .pointer("/paths/~1person~1{id}~1{name}/get/parameters") + .unwrap(); + + assert_json_eq!( + parameters, + &json!([ + { + "description": "Person id", + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + }, + { + "description": "Person name", + "in": "path", + "name": "name", + "required": true, + "schema": { + "type": "string", + }, + }, + ]) + ) +} + +#[test] +fn get_todo_with_extension() { + #[derive(fastapi::ToSchema)] + struct Todo { + #[allow(unused)] + id: i32, + } + /// In-memory todo store + type Store = Mutex<Vec<Todo>>; + + /// List all Todo items + /// + /// List all Todo items from in-memory storage. + #[fastapi::path( + get, + path = "/todo", + responses( + (status = 200, description = "List all todos successfully", body = [Todo]) + ) + )] + #[allow(unused)] + async fn list_todos(Extension(store): Extension<Arc<Store>>) {} + + #[derive(OpenApi)] + #[openapi(paths(list_todos))] + struct ApiDoc; + + serde_json::to_value(ApiDoc::openapi()) + .unwrap() + .pointer("/paths/~1todo/get") + .expect("Expected to find /paths/todo/get"); +} + +#[test] +fn derive_path_params_into_params_unnamed() { + #[derive(Deserialize, IntoParams)] + #[into_params(names("id", "name"))] + #[allow(dead_code)] + struct IdAndName(u64, String); + + #[fastapi::path( + get, + path = "/person/{id}/{name}", + params(IdAndName), + responses( + (status = 200, description = "success response") + ) + )] + #[allow(unused)] + async fn get_person(person: Path<IdAndName>) {} + + #[derive(OpenApi)] + #[openapi(paths(get_person))] + struct ApiDoc; + + let doc = serde_json::to_value(ApiDoc::openapi()).unwrap(); + let parameters = doc + .pointer("/paths/~1person~1{id}~1{name}/get/parameters") + .unwrap(); + + let config = Config::new(CompareMode::Strict).numeric_mode(NumericMode::AssumeFloat); + + assert_json_matches!( + parameters, + &json!([ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "format": "int64", + "type": "integer", + "minimum": 0.0, + }, + }, + { + "in": "path", + "name": "name", + "required": true, + "schema": { + "type": "string", + }, + }, + ]), + config + ) +} + +#[test] +fn derive_path_params_with_ignored_parameter() { + struct Auth; + #[derive(Deserialize, IntoParams)] + #[into_params(names("id", "name"))] + #[allow(dead_code)] + struct IdAndName(u64, String); + + #[fastapi::path( + get, + path = "/person/{id}/{name}", + params(IdAndName), + responses( + (status = 200, description = "success response") + ) + )] + #[allow(unused)] + async fn get_person(_: Auth, person: Path<IdAndName>) {} + + #[derive(OpenApi)] + #[openapi(paths(get_person))] + struct ApiDoc; + + let doc = serde_json::to_value(ApiDoc::openapi()).unwrap(); + let parameters = doc + .pointer("/paths/~1person~1{id}~1{name}/get/parameters") + .unwrap(); + + let config = Config::new(CompareMode::Strict).numeric_mode(NumericMode::AssumeFloat); + + assert_json_matches!( + parameters, + &json!([ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "format": "int64", + "type": "integer", + "minimum": 0.0, + }, + }, + { + "in": "path", + "name": "name", + "required": true, + "schema": { + "type": "string", + }, + }, + ]), + config + ) +} + +#[test] +fn derive_path_params_with_unnamed_struct_destructed() { + #[derive(Deserialize, IntoParams)] + #[into_params(names("id", "name"))] + struct IdAndName(u64, String); + + #[fastapi::path( + get, + path = "/person/{id}/{name}", + params(IdAndName), + responses( + (status = 200, description = "success response") + ) + )] + #[allow(unused)] + async fn get_person(Path(IdAndName(id, name)): Path<IdAndName>) {} + + #[derive(OpenApi)] + #[openapi(paths(get_person))] + struct ApiDoc; + + let doc = serde_json::to_value(ApiDoc::openapi()).unwrap(); + let parameters = doc + .pointer("/paths/~1person~1{id}~1{name}/get/parameters") + .unwrap(); + + let config = Config::new(CompareMode::Strict).numeric_mode(NumericMode::AssumeFloat); + assert_json_matches!( + parameters, + &json!([ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "format": "int64", + "type": "integer", + "minimum": 0.0, + }, + }, + { + "in": "path", + "name": "name", + "required": true, + "schema": { + "type": "string", + }, + }, + ]), + config + ) +} + +#[test] +fn derive_path_query_params_with_named_struct_destructed() { + #[derive(IntoParams)] + #[allow(unused)] + struct QueryParmas<'q> { + name: &'q str, + } + + #[fastapi::path(get, path = "/item", params(QueryParmas))] + #[allow(unused)] + async fn get_item(Query(QueryParmas { name }): Query<QueryParmas<'static>>) {} + + #[derive(OpenApi)] + #[openapi(paths(get_item))] + struct ApiDoc; + + let doc = serde_json::to_value(ApiDoc::openapi()).unwrap(); + let parameters = doc.pointer("/paths/~1item/get/parameters").unwrap(); + + assert_json_eq!( + parameters, + &json!([ + { + "in": "query", + "name": "name", + "required": true, + "schema": { + "type": "string", + }, + }, + ]) + ) +} + +#[test] +fn path_with_path_query_body_resolved() { + #[derive(fastapi::ToSchema, serde::Serialize, serde::Deserialize)] + struct Item(String); + + #[allow(unused)] + struct Error; + + #[derive(serde::Serialize, serde::Deserialize, IntoParams)] + struct Filter { + age: i32, + status: String, + } + + #[fastapi::path(path = "/item/{id}/{name}", params(Filter), post)] + #[allow(unused)] + async fn post_item( + _path: Path<(i32, String)>, + _query: Query<Filter>, + _body: Json<Item>, + ) -> Result<Json<Item>, Error> { + Ok(Json(Item(String::new()))) + } + + #[derive(fastapi::OpenApi)] + #[openapi(paths(post_item))] + struct Doc; + + let doc = serde_json::to_value(Doc::openapi()).unwrap(); + let operation = doc.pointer("/paths/~1item~1{id}~1{name}/post").unwrap(); + + assert_json_eq!( + &operation.pointer("/parameters").unwrap(), + json!([ + { + "in": "query", + "name": "age", + "required": true, + "schema": { + "format": "int32", + "type": "integer" + } + }, + { + "in": "query", + "name": "status", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "format": "int32", + "type": "integer" + } + }, + { + "in": "path", + "name": "name", + "required": true, + "schema": { + "type": "string" + } + } + ]) + ); + assert_json_eq!( + &operation.pointer("/requestBody"), + json!({ + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Item" + } + } + }, + "required": true, + }) + ) +} + +#[test] +fn test_into_params_for_option_query_type() { + #[fastapi::path( + get, + path = "/items", + params(("id" = u32, Query, description = "")), + responses( + (status = 200, description = "success response") + ) + )] + #[allow(unused)] + async fn get_item(id: Option<Query<u32>>) {} + + #[derive(OpenApi)] + #[openapi(paths(get_item))] + struct ApiDoc; + + let doc = serde_json::to_value(ApiDoc::openapi()).unwrap(); + let operation = doc.pointer("/paths/~1items/get").unwrap(); + + assert_json_eq!( + operation.pointer("/parameters"), + json!([ + { + "description": "", + "in": "query", + "name": "id", + "required": true, + "schema": { + "format": "int32", + "type": "integer", + "minimum": 0 + } + } + ]) + ) +} + +#[test] +fn path_param_single_arg_primitive_type() { + #[fastapi::path( + get, + path = "/items/{id}", + params(("id" = u32, Path, description = "")), + responses( + (status = 200, description = "success response") + ) + )] + #[allow(unused)] + async fn get_item(id: Path<u32>) {} + + #[derive(OpenApi)] + #[openapi(paths(get_item))] + struct ApiDoc; + + let doc = serde_json::to_value(ApiDoc::openapi()).unwrap(); + let operation = doc.pointer("/paths/~1items~1{id}/get").unwrap(); + + assert_json_eq!( + operation.pointer("/parameters"), + json!([ + { + "description": "", + "in": "path", + "name": "id", + "required": true, + "schema": { + "format": "int32", + "type": "integer", + "minimum": 0 + } + } + ]) + ) +} + +#[test] +fn path_param_single_arg_non_primitive_type() { + #[derive(fastapi::ToSchema)] + #[allow(dead_code)] + struct Id(String); + + #[fastapi::path( + get, + path = "/items/{id}", + params(("id" = inline(Id), Path, description = "")), + responses( + (status = 200, description = "success response") + ) + )] + #[allow(unused)] + async fn get_item(id: Path<Id>) {} + + #[derive(OpenApi)] + #[openapi(paths(get_item))] + struct ApiDoc; + + let doc = serde_json::to_value(ApiDoc::openapi()).unwrap(); + let operation = doc.pointer("/paths/~1items~1{id}/get").unwrap(); + + assert_json_eq!( + operation.pointer("/parameters"), + json!([ + { + "description": "", + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string", + } + } + ]) + ) +} + +#[test] +fn path_param_single_arg_non_primitive_type_into_params() { + #[derive(fastapi::ToSchema, fastapi::IntoParams)] + #[into_params(names("id"))] + #[allow(dead_code)] + struct Id(String); + + #[fastapi::path( + get, + path = "/items/{id}", + params(Id), + responses( + (status = 200, description = "success response") + ) + )] + #[allow(unused)] + async fn get_item(id: Path<Id>) {} + + #[derive(OpenApi)] + #[openapi(paths(get_item))] + struct ApiDoc; + + let doc = serde_json::to_value(ApiDoc::openapi()).unwrap(); + let operation = doc.pointer("/paths/~1items~1{id}/get").unwrap(); + + assert_json_eq!( + operation.pointer("/parameters"), + json!([ + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string", + } + } + ]) + ) +} + +#[test] +fn derive_path_with_validation_attributes_axum() { + #[derive(IntoParams)] + #[allow(dead_code)] + struct Params { + #[param(maximum = 10, minimum = 5, multiple_of = 2.5)] + id: i32, + + #[param(max_length = 10, min_length = 5, pattern = "[a-z]*")] + value: String, + + #[param(max_items = 5, min_items = 1)] + items: Vec<String>, + } + + #[fastapi::path( + get, + path = "foo/{foo_id}", + responses( + (status = 200, description = "success response") + ), + params( + ("foo_id" = String, min_length = 1, description = "Id of Foo to get"), + Params, + ("name" = Option<String>, description = "Foo name", min_length = 3), + ("nonnullable" = String, description = "Foo nonnullable", min_length = 3, max_length = 10), + ("namequery" = Option<String>, Query, description = "Foo name", min_length = 3), + ("nonnullablequery" = String, Query, description = "Foo nonnullable", min_length = 3, max_length = 10), + ) + )] + #[allow(unused)] + async fn get_foo(path: Path<String>, query: Query<Params>) {} + + #[derive(OpenApi, Default)] + #[openapi(paths(get_foo))] + struct ApiDoc; + + let doc = serde_json::to_value(ApiDoc::openapi()).unwrap(); + let parameters = doc.pointer("/paths/foo~1{foo_id}/get/parameters").unwrap(); + + let config = Config::new(CompareMode::Strict).numeric_mode(NumericMode::AssumeFloat); + + assert_json_matches!( + parameters, + json!([ + { + "schema": { + "type": "string", + "minLength": 1, + }, + "required": true, + "name": "foo_id", + "in": "path", + "description": "Id of Foo to get" + }, + { + "schema": { + "format": "int32", + "type": "integer", + "maximum": 10.0, + "minimum": 5.0, + "multipleOf": 2.5, + }, + "required": true, + "name": "id", + "in": "query" + }, + { + "schema": { + "type": "string", + "maxLength": 10, + "minLength": 5, + "pattern": "[a-z]*" + }, + "required": true, + "name": "value", + "in": "query" + }, + { + "schema": { + "type": "array", + "items": { + "type": "string", + }, + "maxItems": 5, + "minItems": 1, + }, + "required": true, + "name": "items", + "in": "query" + }, + { + "schema": { + "type": ["string", "null"], + "minLength": 3, + }, + "required": true, + "name": "name", + "in": "path", + "description": "Foo name" + }, + { + "schema": { + "type": "string", + "minLength": 3, + "maxLength": 10, + }, + "required": true, + "name": "nonnullable", + "in": "path", + "description": "Foo nonnullable" + }, + { + "schema": { + "type": ["string", "null"], + "minLength": 3, + }, + "required": false, + "name": "namequery", + "in": "query", + "description": "Foo name" + }, + { + "schema": { + "type": "string", + "minLength": 3, + "maxLength": 10, + }, + "required": true, + "name": "nonnullablequery", + "in": "query", + "description": "Foo nonnullable" + } + ]), + config + ); +} + +#[test] +fn path_derive_inline_with_tuple() { + #[derive(fastapi::ToSchema)] + #[allow(unused)] + pub enum ResourceType { + Type1, + Type2, + } + + #[fastapi::path( + get, + path = "/test_2params_separated/{resource_type}/{id}", + params( + ("resource_type" = inline(ResourceType), Path), + ("id" = String, Path) + ) + )] + #[allow(unused)] + pub async fn inline_tuple( + Path((resource_type, id)): axum::extract::Path<(ResourceType, String)>, + ) { + } + + use fastapi::Path; + let value = __path_inline_tuple::operation(); + let value = serde_json::to_value(value).expect("operation should serialize to json"); + + assert_json_eq!( + value, + json!({ + "operationId": "inline_tuple", + "parameters": [ + { + "in": "path", + "name": "resource_type", + "required": true, + "schema": { + "enum": ["Type1", "Type2"], + "type": "string" + }, + }, + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + } + ], + "responses": {} + }) + ) +} diff --git a/fastapi-gen/tests/path_derive_rocket.rs b/fastapi-gen/tests/path_derive_rocket.rs new file mode 100644 index 0000000..fa304f0 --- /dev/null +++ b/fastapi-gen/tests/path_derive_rocket.rs @@ -0,0 +1,744 @@ +#![cfg(feature = "rocket_extras")] + +use std::io::Error; + +use assert_json_diff::assert_json_eq; +use fastapi::openapi::path::ParameterBuilder; +use fastapi::{IntoParams, OpenApi, Path, ToSchema}; +use fastapi_gen::schema; +use rocket::request::FromParam; +use rocket::serde::json::Json; +use rocket::{get, post, FromForm}; +use serde_json::{json, Value}; + +mod common; + +#[test] +fn resolve_route_with_simple_url() { + mod rocket_route_operation { + use rocket::route; + + #[fastapi::path(responses( + (status = 200, description = "Hello from server") + ))] + #[route(GET, uri = "/hello")] + #[allow(unused)] + fn hello() -> String { + "Hello".to_string() + } + } + + #[derive(OpenApi)] + #[openapi(paths(rocket_route_operation::hello))] + struct ApiDoc; + + let openapi = ApiDoc::openapi(); + let value = &serde_json::to_value(&openapi).unwrap(); + let operation = value.pointer("/paths/~1hello/get").unwrap(); + + assert_ne!(operation, &Value::Null, "expected paths.hello.get not null"); +} + +#[test] +fn resolve_get_with_multiple_args() { + mod rocket_get_operation { + use rocket::get; + + #[fastapi::path(responses( + (status = 200, description = "Hello from server") + ))] + #[get("/hello/<id>/<name>?<colors>")] + #[allow(unused)] + fn hello(id: i32, name: &str, colors: Vec<&str>) -> String { + "Hello".to_string() + } + } + + #[derive(OpenApi)] + #[openapi(paths(rocket_get_operation::hello))] + struct ApiDoc; + + let openapi = ApiDoc::openapi(); + let value = &serde_json::to_value(&openapi).unwrap(); + let parameters = value + .pointer("/paths/~1hello~1{id}~1{name}/get/parameters") + .unwrap(); + + common::assert_json_array_len(parameters, 3); + assert_ne!( + parameters, + &Value::Null, + "expected paths.hello.{{id}}.name.get.parameters not null" + ); + assert_value! {parameters=> + "[0].schema.type" = r#""array""#, "Query parameter type" + "[0].schema.format" = r#"null"#, "Query parameter format" + "[0].schema.items.type" = r#""string""#, "Query items parameter type" + "[0].schema.items.format" = r#"null"#, "Query items parameter format" + "[0].name" = r#""colors""#, "Query parameter name" + "[0].required" = r#"true"#, "Query parameter required" + "[0].deprecated" = r#"null"#, "Query parameter required" + "[0].in" = r#""query""#, "Query parameter in" + + "[1].schema.type" = r#""integer""#, "Id parameter type" + "[1].schema.format" = r#""int32""#, "Id parameter format" + "[1].name" = r#""id""#, "Id parameter name" + "[1].required" = r#"true"#, "Id parameter required" + "[1].deprecated" = r#"null"#, "Id parameter required" + "[1].in" = r#""path""#, "Id parameter in" + + "[2].schema.type" = r#""string""#, "Name parameter type" + "[2].schema.format" = r#"null"#, "Name parameter format" + "[2].name" = r#""name""#, "Name parameter name" + "[2].required" = r#"true"#, "Name parameter required" + "[2].deprecated" = r#"null"#, "Name parameter required" + "[2].in" = r#""path""#, "Name parameter in" + } +} + +#[test] +fn resolve_get_with_optional_query_args() { + mod rocket_get_operation { + use rocket::get; + + #[fastapi::path(responses( + (status = 200, description = "Hello from server") + ))] + #[get("/hello?<colors>")] + #[allow(unused)] + fn hello(colors: Option<Vec<&str>>) -> String { + "Hello".to_string() + } + } + + #[derive(OpenApi)] + #[openapi(paths(rocket_get_operation::hello))] + struct ApiDoc; + + let openapi = ApiDoc::openapi(); + let value = &serde_json::to_value(&openapi).unwrap(); + let parameters = value.pointer("/paths/~1hello/get/parameters").unwrap(); + + common::assert_json_array_len(parameters, 1); + assert_ne!( + parameters, + &Value::Null, + "expected paths.hello.get.parameters not null" + ); + + assert_json_eq!( + parameters, + json!([ + { + "in": "query", + "name": "colors", + "required": false, + "schema": { + "items": { + "type": "string", + }, + "type": ["array", "null"], + } + } + ]) + ); +} + +#[test] +fn resolve_path_arguments_not_same_order() { + mod rocket_get_operation { + use rocket::get; + + #[fastapi::path(responses( + (status = 200, description = "Hello from server") + ))] + #[get("/hello/<id>/<name>")] + #[allow(unused)] + fn hello(name: &str, id: i64) -> String { + "Hello".to_string() + } + } + + #[derive(OpenApi)] + #[openapi(paths(rocket_get_operation::hello))] + struct ApiDoc; + + let openapi = ApiDoc::openapi(); + let value = &serde_json::to_value(&openapi).unwrap(); + let parameters = value + .pointer("/paths/~1hello~1{id}~1{name}/get/parameters") + .unwrap(); + + common::assert_json_array_len(parameters, 2); + assert_ne!( + parameters, + &Value::Null, + r"expected paths.hello/{{id}}/{{name}}.get.parameters not null" + ); + + assert_value! {parameters=> + "[0].schema.type" = r#""integer""#, "Id parameter type" + "[0].schema.format" = r#""int64""#, "Id parameter format" + "[0].name" = r#""id""#, "Id parameter name" + "[0].required" = r#"true"#, "Id parameter required" + "[0].deprecated" = r#"null"#, "Id parameter required" + "[0].in" = r#""path""#, "Id parameter in" + + "[1].schema.type" = r#""string""#, "Name parameter type" + "[1].schema.format" = r#"null"#, "Name parameter format" + "[1].name" = r#""name""#, "Name parameter name" + "[1].required" = r#"true"#, "Name parameter required" + "[1].deprecated" = r#"null"#, "Name parameter required" + "[1].in" = r#""path""#, "Name parameter in" + } +} + +#[test] +fn resolve_get_path_with_anonymous_parts() { + mod rocket_get_operation { + use rocket::get; + + #[fastapi::path(responses( + (status = 200, description = "Hello from server") + ))] + #[get("/hello/<_>/<_>/<id>")] + #[allow(unused)] + fn hello(id: i64) -> String { + "Hello".to_string() + } + } + + #[derive(OpenApi)] + #[openapi(paths(rocket_get_operation::hello))] + struct ApiDoc; + + let openapi = ApiDoc::openapi(); + let value = &serde_json::to_value(&openapi).unwrap(); + let parameters = value + .pointer("/paths/~1hello~1{arg0}~1{arg1}~1{id}/get/parameters") + .unwrap(); + + common::assert_json_array_len(parameters, 3); + assert_ne!( + parameters, + &Value::Null, + r"expected paths.hello/{{arg0}}/{{arg1}}/{{id}}.get.parameters not null" + ); + + assert_value! {parameters=> + "[0].schema.type" = r#""integer""#, "Id parameter type" + "[0].schema.format" = r#""int64""#, "Id parameter format" + "[0].name" = r#""id""#, "Id parameter name" + "[0].required" = r#"true"#, "Id parameter required" + "[0].deprecated" = r#"null"#, "Id parameter required" + "[0].in" = r#""path""#, "Id parameter in" + + "[1].schema.type" = r#"null"#, "Arg0 parameter type" + "[1].schema.format" = r#"null"#, "Arg0 parameter format" + "[1].name" = r#""arg0""#, "Arg0 parameter name" + "[1].required" = r#"true"#, "Arg0 parameter required" + "[1].deprecated" = r#"null"#, "Arg0 parameter required" + "[1].in" = r#""path""#, "Arg0 parameter in" + + "[2].schema.type" = r#"null"#, "Arg1 parameter type" + "[2].schema.format" = r#"null"#, "Arg1 parameter format" + "[2].name" = r#""arg1""#, "Arg1 parameter name" + "[2].required" = r#"true"#, "Arg1 parameter required" + "[2].deprecated" = r#"null"#, "Arg1 parameter required" + "[2].in" = r#""path""#, "Arg1 parameter in" + } +} + +#[test] +fn resolve_get_path_with_tail() { + mod rocket_get_operation { + use std::path::PathBuf; + + use rocket::get; + + #[fastapi::path(responses( + (status = 200, description = "Hello from server") + ))] + #[get("/hello/<tail..>")] + #[allow(unused)] + fn hello(tail: PathBuf) -> String { + "Hello".to_string() + } + } + + #[derive(OpenApi)] + #[openapi(paths(rocket_get_operation::hello))] + struct ApiDoc; + + let openapi = ApiDoc::openapi(); + let value = &serde_json::to_value(&openapi).unwrap(); + let parameters = value + .pointer("/paths/~1hello~1{tail}/get/parameters") + .unwrap(); + + common::assert_json_array_len(parameters, 1); + assert_ne!( + parameters, + &Value::Null, + r"expected paths.hello/{{tail}}.get.parameters not null" + ); + + assert_value! {parameters=> + "[0].schema.type" = r#""string""#, "Tail parameter type" + "[0].schema.format" = r#"null"#, "Tail parameter format" + "[0].name" = r#""tail""#, "Tail parameter name" + "[0].required" = r#"true"#, "Tail parameter required" + "[0].deprecated" = r#"null"#, "Tail parameter required" + "[0].in" = r#""path""#, "Tail parameter in" + } +} + +#[test] +fn resolve_get_path_and_update_params() { + mod rocket_get_operation { + use rocket::get; + + #[fastapi::path( + responses( + (status = 200, description = "Hello from server") + ), + params( + ("id", description = "Hello id") + ) + )] + #[get("/hello/<id>/<name>")] + #[allow(unused)] + fn hello(id: i32, name: String) -> String { + "Hello".to_string() + } + } + + #[derive(OpenApi)] + #[openapi(paths(rocket_get_operation::hello))] + struct ApiDoc; + + let openapi = ApiDoc::openapi(); + let value = &serde_json::to_value(&openapi).unwrap(); + let parameters = value + .pointer("/paths/~1hello~1{id}~1{name}/get/parameters") + .unwrap(); + + common::assert_json_array_len(parameters, 2); + assert_ne!( + parameters, + &Value::Null, + r"expected paths.hello/{{id}}/{{name}}.get.parameters not null" + ); + + assert_value! {parameters=> + "[0].schema.type" = r#""integer""#, "Id parameter type" + "[0].schema.format" = r#""int32""#, "Id parameter format" + "[0].description" = r#""Hello id""#, "Id parameter format" + "[0].name" = r#""id""#, "Id parameter name" + "[0].required" = r#"true"#, "Id parameter required" + "[0].deprecated" = r#"null"#, "Id parameter required" + "[0].in" = r#""path""#, "Id parameter in" + + "[1].schema.type" = r#""string""#, "Name parameter type" + "[1].schema.format" = r#"null"#, "Name parameter format" + "[1].description" = r#"null"#, "Name parameter format" + "[1].name" = r#""name""#, "Name parameter name" + "[1].required" = r#"true"#, "Name parameter required" + "[1].deprecated" = r#"null"#, "Name parameter required" + "[1].in" = r#""path""#, "Name parameter in" + } +} + +#[test] +fn resolve_path_query_params_from_form() { + mod rocket_get_operation { + use fastapi::IntoParams; + use rocket::{get, FromForm}; + + #[derive(serde::Deserialize, FromForm, IntoParams)] + #[allow(unused)] + struct QueryParams { + foo: String, + bar: i64, + } + + #[fastapi::path( + responses( + (status = 200, description = "Hello from server") + ), + params( + ("id", description = "Hello id"), + QueryParams + ) + )] + #[get("/hello/<id>?<rest..>")] + #[allow(unused)] + fn hello(id: i32, rest: QueryParams) -> String { + "Hello".to_string() + } + } + + #[derive(OpenApi)] + #[openapi(paths(rocket_get_operation::hello))] + struct ApiDoc; + + let openapi = ApiDoc::openapi(); + let value = &serde_json::to_value(&openapi).unwrap(); + let parameters = value + .pointer("/paths/~1hello~1{id}/get/parameters") + .unwrap(); + + assert_json_eq!( + parameters, + json!([ + { + "description": "Hello id", + "in": "path", + "name": "id", + "required": true, + "schema": { + "format": "int32", + "type": "integer" + } + }, + { + "in": "query", + "name": "foo", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "bar", + "required": true, + "schema": { + "format": "int64", + "type": "integer" + } + } + ]) + ) +} + +#[test] +fn path_with_all_args_and_body() { + use fastapi::IntoParams; + use rocket::FromForm; + + #[derive(serde::Serialize, serde::Deserialize, fastapi::ToSchema)] + struct Hello<'a> { + message: &'a str, + } + + #[derive(serde::Deserialize, FromForm, IntoParams)] + #[allow(unused)] + struct QueryParams { + foo: String, + bar: i64, + } + + // NOTE! temporarily disable automatic parameter recognition + #[fastapi::path( + responses( + (status = 200, description = "Hello from server")), + params( + ("id", description = "Hello id"), + QueryParams + ) + )] + #[post("/hello/<id>/<name>?<colors>&<rest..>", data = "<hello>")] + #[allow(unused)] + fn post_hello( + id: i32, + name: &str, + colors: Vec<&str>, + rest: QueryParams, + hello: Json<Hello>, + ) -> String { + "Hello".to_string() + } + + #[derive(OpenApi)] + #[openapi(paths(post_hello))] + struct ApiDoc; + + let openapi = ApiDoc::openapi(); + let value = &serde_json::to_value(&openapi).unwrap(); + let operation = value.pointer("/paths/~1hello~1{id}~1{name}/post").unwrap(); + + assert_json_eq!( + operation.pointer("/parameters"), + json!([ + { + "description": "Hello id", + "in": "path", + "name": "id", + "required": true, + "schema": { + "format": "int32", + "type": "integer" + } + }, + { + "in": "query", + "name": "foo", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "bar", + "required": true, + "schema": { + "format": "int64", + "type": "integer" + } + }, + { + "in": "query", + "name": "colors", + "required": true, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "in": "path", + "name": "name", + "required": true, + "schema": { + "type": "string" + } + } + + ]) + ); + assert_json_eq!( + &operation.pointer("/requestBody"), + json!({ + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Hello" + } + } + }, + "required": true + }) + ); +} + +#[test] +fn path_with_enum_path_param() { + #[derive(ToSchema)] + #[allow(unused)] + enum ApiVersion { + V1, + } + + impl IntoParams for ApiVersion { + fn into_params( + _: impl Fn() -> Option<fastapi::openapi::path::ParameterIn>, + ) -> Vec<fastapi::openapi::path::Parameter> { + vec![ParameterBuilder::new() + .description(Some("")) + .name("api_version") + .required(fastapi::openapi::Required::True) + .parameter_in(fastapi::openapi::path::ParameterIn::Path) + .schema(Some(schema!( + #[inline] + ApiVersion + ))) + .build()] + } + } + + impl<'a> FromParam<'a> for ApiVersion { + type Error = Error; + + fn from_param(_param: &'a str) -> Result<Self, Self::Error> { + todo!() + } + } + + // NOTE! temporarily disable automatic parameter recognition + #[fastapi::path( + post, + path = "/item", + params( + ApiVersion + ), + responses( + (status = 201, description = "Item created successfully"), + ), + )] + #[post("/<api_version>/item", format = "json")] + #[allow(unused)] + async fn create_item(api_version: ApiVersion) -> String { + todo!() + } + + #[derive(OpenApi)] + #[openapi(paths(create_item))] + struct ApiDoc; + + let openapi = ApiDoc::openapi(); + let value = &serde_json::to_value(&openapi).unwrap(); + let operation = value.pointer("/paths/~1item/post").unwrap(); + + assert_json_eq!( + operation.pointer("/parameters"), + json!([ + { + "description": "", + "in": "path", + "name": "api_version", + "required": true, + "schema": { + "type": "string", + "enum": [ + "V1" + ] + } + } + ]) + ) +} + +macro_rules! test_derive_path_operations { + ( $($name:ident: $operation:ident)* ) => { + $( + #[test] + fn $name() { + mod rocket_operation { + use rocket::$operation; + + #[fastapi::path( + responses( + (status = 200, description = "Hello from server") + ) + )] + #[$operation("/hello")] + #[allow(unused)] + fn hello() -> String { + "Hello".to_string() + } + } + + #[derive(OpenApi)] + #[openapi(paths(rocket_operation::hello))] + struct ApiDoc; + + let openapi = ApiDoc::openapi(); + let value = &serde_json::to_value(&openapi).unwrap(); + let op = value + .pointer(&*format!("/paths/~1hello/{}", stringify!($operation))) + .unwrap(); + + assert_ne!( + op, + &Value::Null, + "expected paths./hello.{}", stringify!($operation) + ); + } + )* + }; +} + +test_derive_path_operations! { + derive_path_get: get + derive_path_post: post + derive_path_put: put + derive_path_delete: delete + derive_path_head: head + derive_path_options: options + derive_path_patch: patch +} + +#[test] +fn derive_rocket_path_with_query_params_in_option() { + #![allow(unused)] + + #[derive(FromForm, IntoParams)] + #[into_params(parameter_in = Query, style = Form)] + pub struct PageParams { + pub page: u64, + pub per_page: u64, + } + + #[fastapi::path( + context_path = "/user/api_keys", + params( + PageParams, + ), + responses( + (status = 200, body = ()), + (status = 400, body = ()), + ), + )] + #[get("/list?<page..>")] + async fn list_items(page: Option<PageParams>) {} + + let operation = __path_list_items::operation(); + let value = serde_json::to_value(&operation).expect("operation is JSON serializable"); + + assert_json_eq!( + value, + json!({ + "operationId": "list_items", + "parameters": [ + { + "in": "query", + "name": "page", + "required": true, + "schema": { + "format": "int64", + "minimum": 0, + "type": "integer" + }, + "style": "form" + }, + { + "in": "query", + "name": "per_page", + "required": true, + "schema": { + "format": "int64", + "minimum": 0, + "type": "integer" + }, + "style": "form" + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "default": null, + } + } + }, + "description": "" + }, + "400": { + "content": { + "application/json": { + "schema": { + "default": null, + } + } + }, + "description": "" + } + } + }) + ) +} diff --git a/fastapi-gen/tests/path_parameter_derive_actix.rs b/fastapi-gen/tests/path_parameter_derive_actix.rs new file mode 100644 index 0000000..979a667 --- /dev/null +++ b/fastapi-gen/tests/path_parameter_derive_actix.rs @@ -0,0 +1,277 @@ +#![cfg(feature = "actix_extras")] + +use fastapi::OpenApi; + +mod common; + +mod derive_params_multiple_actix { + use actix_web::{web, HttpResponse, Responder}; + use serde_json::json; + + /// Get foo by id + /// + /// Get foo by id long description + #[fastapi::path( + get, + path = "/foo/{id}/{digest}", + responses( + (status = 200, description = "success response") + ), + params( + ("id", description = "Foo id"), + ("digest", description = "Digest of foo"), + ) + )] + #[allow(unused)] + async fn get_foo_by_id(path: web::Path<(i32, String)>) -> impl Responder { + let (id, digest) = path.into_inner(); + HttpResponse::Ok().json(json!({ "foo": format!("{:?}{:?}", &id, &digest) })) + } +} + +#[test] +fn derive_path_parameter_multiple_with_matching_names_and_types_actix_success() { + #[derive(OpenApi, Default)] + #[openapi(paths(derive_params_multiple_actix::get_foo_by_id))] + struct ApiDoc; + + let doc = serde_json::to_value(ApiDoc::openapi()).unwrap(); + let parameters = doc + .pointer("/paths/~1foo~1{id}~1{digest}/get/parameters") + .unwrap(); + + common::assert_json_array_len(parameters, 2); + assert_value! {parameters=> + "[0].in" = r#""path""#, "Parameter in" + "[0].name" = r#""id""#, "Parameter name" + "[0].description" = r#""Foo id""#, "Parameter description" + "[0].required" = r#"true"#, "Parameter required" + "[0].deprecated" = r#"null"#, "Parameter deprecated" + "[0].schema.type" = r#""integer""#, "Parameter schema type" + "[0].schema.format" = r#""int32""#, "Parameter schema format" + + "[1].in" = r#""path""#, "Parameter in" + "[1].name" = r#""digest""#, "Parameter name" + "[1].description" = r#""Digest of foo""#, "Parameter description" + "[1].required" = r#"true"#, "Parameter required" + "[1].deprecated" = r#"null"#, "Parameter deprecated" + "[1].schema.type" = r#""string""#, "Parameter schema type" + "[1].schema.format" = r#"null"#, "Parameter schema format" + }; +} + +mod derive_parameters_multiple_no_matching_names_actix { + use actix_web::{web, HttpResponse, Responder}; + use serde_json::json; + + /// Get foo by id + /// + /// Get foo by id long description + #[fastapi::path( + get, + path = "/foo/{id}/{digest}", + responses( + (status = 200, description = "success response") + ), + params( + ("id" = i32, description = "Foo id"), + ("digest" = String, description = "Digest of foo"), + ) + )] + #[allow(unused)] + async fn get_foo_by_id(info: web::Path<(i32, String)>) -> impl Responder { + // is no matching names since the parameter name does not match to amount of types + HttpResponse::Ok().json(json!({ "foo": format!("{:?}{:?}", &info.0, &info.1) })) + } +} + +#[test] +fn derive_path_parameter_multiple_no_matching_names_actix_success() { + #[derive(OpenApi, Default)] + #[openapi(paths(derive_parameters_multiple_no_matching_names_actix::get_foo_by_id))] + struct ApiDoc; + + let doc = serde_json::to_value(ApiDoc::openapi()).unwrap(); + let parameters = doc + .pointer("/paths/~1foo~1{id}~1{digest}/get/parameters") + .unwrap(); + + common::assert_json_array_len(parameters, 2); + assert_value! {parameters=> + "[0].in" = r#""path""#, "Parameter in" + "[0].name" = r#""id""#, "Parameter name" + "[0].description" = r#""Foo id""#, "Parameter description" + "[0].required" = r#"true"#, "Parameter required" + "[0].deprecated" = r#"null"#, "Parameter deprecated" + "[0].schema.type" = r#""integer""#, "Parameter schema type" + "[0].schema.format" = r#""int32""#, "Parameter schema format" + + "[1].in" = r#""path""#, "Parameter in" + "[1].name" = r#""digest""#, "Parameter name" + "[1].description" = r#""Digest of foo""#, "Parameter description" + "[1].required" = r#"true"#, "Parameter required" + "[1].deprecated" = r#"null"#, "Parameter deprecated" + "[1].schema.type" = r#""string""#, "Parameter schema type" + "[1].schema.format" = r#"null"#, "Parameter schema format" + }; +} + +mod derive_params_from_method_args_actix { + use actix_web::{web, HttpResponse, Responder}; + use serde_json::json; + + #[fastapi::path( + get, + path = "/foo/{id}/{digest}", + responses( + (status = 200, description = "success response") + ), + )] + #[allow(unused)] + async fn get_foo_by_id(path: web::Path<(i32, String)>) -> impl Responder { + let (id, digest) = path.into_inner(); + HttpResponse::Ok().json(json!({ "foo": format!("{:?}{:?}", &id, &digest) })) + } +} + +#[test] +fn derive_params_from_method_args_actix_success() { + #[derive(OpenApi, Default)] + #[openapi(paths(derive_params_from_method_args_actix::get_foo_by_id))] + struct ApiDoc; + + let doc = serde_json::to_value(ApiDoc::openapi()).unwrap(); + let parameters = doc + .pointer("/paths/~1foo~1{id}~1{digest}/get/parameters") + .unwrap(); + + common::assert_json_array_len(parameters, 2); + assert_value! {parameters=> + "[0].in" = r#""path""#, "Parameter in" + "[0].name" = r#""id""#, "Parameter name" + "[0].description" = r#"null"#, "Parameter description" + "[0].required" = r#"true"#, "Parameter required" + "[0].deprecated" = r#"null"#, "Parameter deprecated" + "[0].schema.type" = r#""integer""#, "Parameter schema type" + "[0].schema.format" = r#""int32""#, "Parameter schema format" + + "[1].in" = r#""path""#, "Parameter in" + "[1].name" = r#""digest""#, "Parameter name" + "[1].description" = r#"null"#, "Parameter description" + "[1].required" = r#"true"#, "Parameter required" + "[1].deprecated" = r#"null"#, "Parameter deprecated" + "[1].schema.type" = r#""string""#, "Parameter schema type" + "[1].schema.format" = r#"null"#, "Parameter schema format" + }; +} + +#[test] +#[cfg(feature = "chrono")] +fn derive_path_with_date_params_chrono_implicit() { + mod mod_derive_path_with_date_params { + use actix_web::{get, web, HttpResponse, Responder}; + use chrono::{DateTime, Utc}; + use serde_json::json; + use time::Date; + + #[fastapi::path( + responses( + (status = 200, description = "success response") + ), + params( + ("start_date", description = "Start date filter"), + ("end_date", description = "End date filter"), + ) + )] + #[get("/visitors/v1/{start_date}/{end_date}")] + #[allow(unused)] + async fn get_foo_by_date(path: web::Path<(Date, DateTime<Utc>)>) -> impl Responder { + let (start_date, end_date) = path.into_inner(); + HttpResponse::Ok() + .json(json!({ "params": &format!("{:?} {:?}", start_date, end_date) })) + } + } + + #[derive(OpenApi, Default)] + #[openapi(paths(mod_derive_path_with_date_params::get_foo_by_date))] + struct ApiDoc; + + let doc = serde_json::to_value(ApiDoc::openapi()).unwrap(); + let parameters = doc + .pointer("/paths/~1visitors~1v1~1{start_date}~1{end_date}/get/parameters") + .unwrap(); + + common::assert_json_array_len(parameters, 2); + assert_value! {parameters=> + "[0].in" = r#""path""#, "Parameter in" + "[0].name" = r#""start_date""#, "Parameter name" + "[0].description" = r#""Start date filter""#, "Parameter description" + "[0].required" = r#"true"#, "Parameter required" + "[0].deprecated" = r#"null"#, "Parameter deprecated" + "[0].schema.type" = r#""string""#, "Parameter schema type" + "[0].schema.format" = r#""date""#, "Parameter schema format" + + "[1].in" = r#""path""#, "Parameter in" + "[1].name" = r#""end_date""#, "Parameter name" + "[1].description" = r#""End date filter""#, "Parameter description" + "[1].required" = r#"true"#, "Parameter required" + "[1].deprecated" = r#"null"#, "Parameter deprecated" + "[1].schema.type" = r#""string""#, "Parameter schema type" + "[1].schema.format" = r#""date-time""#, "Parameter schema format" + }; +} + +#[test] +#[cfg(feature = "time")] +fn derive_path_with_date_params_explicit_ignored_time() { + mod mod_derive_path_with_date_params { + use actix_web::{get, web, HttpResponse, Responder}; + use serde_json::json; + use time::Date; + + #[fastapi::path( + responses( + (status = 200, description = "success response") + ), + params( + ("start_date", description = "Start date filter", format = Date), + ("end_date", description = "End date filter", format = DateTime), + ) + )] + #[get("/visitors/v1/{start_date}/{end_date}")] + #[allow(unused)] + async fn get_foo_by_date(path: web::Path<(Date, String)>) -> impl Responder { + let (start_date, end_date) = path.into_inner(); + HttpResponse::Ok() + .json(json!({ "params": &format!("{:?} {:?}", start_date, end_date) })) + } + } + + #[derive(OpenApi, Default)] + #[openapi(paths(mod_derive_path_with_date_params::get_foo_by_date))] + struct ApiDoc; + + let doc = serde_json::to_value(ApiDoc::openapi()).unwrap(); + let parameters = doc + .pointer("/paths/~1visitors~1v1~1{start_date}~1{end_date}/get/parameters") + .unwrap(); + + common::assert_json_array_len(parameters, 2); + assert_value! {parameters=> + "[0].in" = r#""path""#, "Parameter in" + "[0].name" = r#""start_date""#, "Parameter name" + "[0].description" = r#""Start date filter""#, "Parameter description" + "[0].required" = r#"true"#, "Parameter required" + "[0].deprecated" = r#"null"#, "Parameter deprecated" + "[0].schema.type" = r#""string""#, "Parameter schema type" + "[0].schema.format" = r#""date""#, "Parameter schema format" + + "[1].in" = r#""path""#, "Parameter in" + "[1].name" = r#""end_date""#, "Parameter name" + "[1].description" = r#""End date filter""#, "Parameter description" + "[1].required" = r#"true"#, "Parameter required" + "[1].deprecated" = r#"null"#, "Parameter deprecated" + "[1].schema.type" = r#""string""#, "Parameter schema type" + "[1].schema.format" = r#""date-time""#, "Parameter schema format" + }; +} diff --git a/fastapi-gen/tests/path_parameter_derive_test.rs b/fastapi-gen/tests/path_parameter_derive_test.rs new file mode 100644 index 0000000..9ec865e --- /dev/null +++ b/fastapi-gen/tests/path_parameter_derive_test.rs @@ -0,0 +1,450 @@ +use assert_json_diff::assert_json_eq; +use fastapi::{OpenApi, Path}; +use serde_json::json; + +mod common; + +mod derive_params_all_options { + /// Get foo by id + /// + /// Get foo by id long description + #[fastapi::path( + get, + path = "/foo/{id}", + responses( + (status = 200, description = "success"), + ), + params( + ("id" = i32, Path, deprecated, description = "Search foos by ids"), + ) + )] + #[allow(unused)] + async fn get_foo_by_id(id: i32) -> i32 { + id + } +} + +#[test] +fn derive_path_parameters_with_all_options_success() { + #[derive(OpenApi, Default)] + #[openapi(paths(derive_params_all_options::get_foo_by_id))] + struct ApiDoc; + + let doc = serde_json::to_value(ApiDoc::openapi()).unwrap(); + let parameters = doc.pointer("/paths/~1foo~1{id}/get/parameters").unwrap(); + + common::assert_json_array_len(parameters, 1); + assert_value! {parameters=> + "[0].in" = r#""path""#, "Parameter in" + "[0].name" = r#""id""#, "Parameter name" + "[0].description" = r#""Search foos by ids""#, "Parameter description" + "[0].required" = r#"true"#, "Parameter required" + "[0].deprecated" = r#"true"#, "Parameter deprecated" + "[0].schema.type" = r#""integer""#, "Parameter schema type" + "[0].schema.format" = r#""int32""#, "Parameter schema format" + }; +} + +mod derive_params_minimal { + /// Get foo by id + /// + /// Get foo by id long description + #[fastapi::path( + get, + path = "/foo/{id}", + responses( + (status = 200, description = "success"), + ), + params( + ("id" = i32, description = "Search foos by ids"), + ) + )] + #[allow(unused)] + async fn get_foo_by_id(id: i32) -> i32 { + id + } +} + +#[test] +fn derive_path_parameters_minimal_success() { + #[derive(OpenApi, Default)] + #[openapi(paths(derive_params_minimal::get_foo_by_id))] + struct ApiDoc; + + let doc = serde_json::to_value(ApiDoc::openapi()).unwrap(); + let parameters = doc.pointer("/paths/~1foo~1{id}/get/parameters").unwrap(); + + common::assert_json_array_len(parameters, 1); + assert_value! {parameters=> + "[0].in" = r#""path""#, "Parameter in" + "[0].name" = r#""id""#, "Parameter name" + "[0].description" = r#""Search foos by ids""#, "Parameter description" + "[0].required" = r#"true"#, "Parameter required" + "[0].deprecated" = r#"null"#, "Parameter deprecated" + "[0].schema.type" = r#""integer""#, "Parameter schema type" + "[0].schema.format" = r#""int32""#, "Parameter schema format" + }; +} + +mod derive_params_multiple { + /// Get foo by id + /// + /// Get foo by id long description + #[fastapi::path( + get, + path = "/foo/{id}/{digest}", + responses( + (status = 200, description = "success"), + ), + params( + ("id" = i32, description = "Foo id"), + ("digest" = String, description = "Digest of foo"), + ) + )] + #[allow(unused)] + async fn get_foo_by_id(id: i32, digest: String) -> String { + format!("{:?}{:?}", &id, &digest) + } +} + +#[test] +fn derive_path_parameter_multiple_success() { + #[derive(OpenApi, Default)] + #[openapi(paths(derive_params_multiple::get_foo_by_id))] + struct ApiDoc; + + let doc = serde_json::to_value(ApiDoc::openapi()).unwrap(); + let parameters = doc + .pointer("/paths/~1foo~1{id}~1{digest}/get/parameters") + .unwrap(); + + common::assert_json_array_len(parameters, 2); + assert_value! {parameters=> + "[0].in" = r#""path""#, "Parameter in" + "[0].name" = r#""id""#, "Parameter name" + "[0].description" = r#""Foo id""#, "Parameter description" + "[0].required" = r#"true"#, "Parameter required" + "[0].deprecated" = r#"null"#, "Parameter deprecated" + "[0].schema.type" = r#""integer""#, "Parameter schema type" + "[0].schema.format" = r#""int32""#, "Parameter schema format" + + "[1].in" = r#""path""#, "Parameter in" + "[1].name" = r#""digest""#, "Parameter name" + "[1].description" = r#""Digest of foo""#, "Parameter description" + "[1].required" = r#"true"#, "Parameter required" + "[1].deprecated" = r#"null"#, "Parameter deprecated" + "[1].schema.type" = r#""string""#, "Parameter schema type" + "[1].schema.format" = r#"null"#, "Parameter schema format" + }; +} + +mod mod_derive_parameters_all_types { + /// Get foo by id + /// + /// Get foo by id long description + #[fastapi::path( + get, + path = "/foo/{id}", + responses( + (status = 200, description = "success"), + ), + params( + ("id" = i32, Path, description = "Foo id"), + ("since" = String, Query, deprecated, description = "Datetime since"), + ("numbers" = Option<[i64]>, Query, description = "Foo numbers list"), + ("token" = String, Header, deprecated, description = "Token of foo"), + ("cookieval" = String, Cookie, deprecated, description = "Foo cookie"), + ) + )] + #[allow(unused)] + async fn get_foo_by_id(id: i32) -> i32 { + id + } +} + +#[test] +fn derive_parameters_with_all_types() { + #[derive(OpenApi, Default)] + #[openapi(paths(mod_derive_parameters_all_types::get_foo_by_id))] + struct ApiDoc; + + let doc = serde_json::to_value(ApiDoc::openapi()).unwrap(); + let parameters = doc.pointer("/paths/~1foo~1{id}/get/parameters").unwrap(); + + common::assert_json_array_len(parameters, 5); + assert_value! {parameters=> + "[0].in" = r#""path""#, "Parameter in" + "[0].name" = r#""id""#, "Parameter name" + "[0].description" = r#""Foo id""#, "Parameter description" + "[0].required" = r#"true"#, "Parameter required" + "[0].deprecated" = r#"null"#, "Parameter deprecated" + "[0].schema.type" = r#""integer""#, "Parameter schema type" + "[0].schema.format" = r#""int32""#, "Parameter schema format" + + "[1].in" = r#""query""#, "Parameter in" + "[1].name" = r#""since""#, "Parameter name" + "[1].description" = r#""Datetime since""#, "Parameter description" + "[1].required" = r#"true"#, "Parameter required" + "[1].deprecated" = r#"true"#, "Parameter deprecated" + "[1].schema.type" = r#""string""#, "Parameter schema type" + "[1].schema.format" = r#"null"#, "Parameter schema format" + + "[2].in" = r#""query""#, "Parameter in" + "[2].name" = r#""numbers""#, "Parameter name" + "[2].description" = r#""Foo numbers list""#, "Parameter description" + "[2].required" = r#"false"#, "Parameter required" + "[2].deprecated" = r#"null"#, "Parameter deprecated" + "[2].schema.type" = r#"["array","null"]"#, "Parameter schema type" + "[2].schema.format" = r#"null"#, "Parameter schema format" + "[2].schema.items.type" = r#""integer""#, "Parameter schema items type" + "[2].schema.items.format" = r#""int64""#, "Parameter schema items format" + + "[3].in" = r#""header""#, "Parameter in" + "[3].name" = r#""token""#, "Parameter name" + "[3].description" = r#""Token of foo""#, "Parameter description" + "[3].required" = r#"true"#, "Parameter required" + "[3].deprecated" = r#"true"#, "Parameter deprecated" + "[3].schema.type" = r#""string""#, "Parameter schema type" + "[3].schema.format" = r#"null"#, "Parameter schema format" + + "[4].in" = r#""cookie""#, "Parameter in" + "[4].name" = r#""cookieval""#, "Parameter name" + "[4].description" = r#""Foo cookie""#, "Parameter description" + "[4].required" = r#"true"#, "Parameter required" + "[4].deprecated" = r#"true"#, "Parameter deprecated" + "[4].schema.type" = r#""string""#, "Parameter schema type" + "[4].schema.format" = r#"null"#, "Parameter schema format" + }; +} + +mod derive_params_without_args { + #[fastapi::path( + get, + path = "/foo/{id}", + responses( + (status = 200, description = "success"), + ), + params( + ("id" = i32, Path, description = "Foo id"), + ) + )] + #[allow(unused)] + async fn get_foo_by_id() -> String { + "".to_string() + } +} + +#[test] +fn derive_params_without_fn_args() { + #[derive(OpenApi, Default)] + #[openapi(paths(derive_params_without_args::get_foo_by_id))] + struct ApiDoc; + + let doc = serde_json::to_value(ApiDoc::openapi()).unwrap(); + let parameters = doc.pointer("/paths/~1foo~1{id}/get/parameters").unwrap(); + + common::assert_json_array_len(parameters, 1); + assert_value! {parameters=> + "[0].in" = r#""path""#, "Parameter in" + "[0].name" = r#""id""#, "Parameter name" + "[0].description" = r#""Foo id""#, "Parameter description" + "[0].required" = r#"true"#, "Parameter required" + "[0].deprecated" = r#"null"#, "Parameter deprecated" + "[0].schema.type" = r#""integer""#, "Parameter schema type" + "[0].schema.format" = r#""int32""#, "Parameter schema format" + }; +} + +#[test] +fn derive_params_with_params_ext() { + #[fastapi::path( + get, + path = "/foo", + responses( + (status = 200, description = "success"), + ), + params( + ("value" = Option<[String]>, Query, description = "Foo value description", style = Form, allow_reserved, deprecated, explode) + ) + )] + #[allow(unused)] + async fn get_foo_by_id() -> String { + "".to_string() + } + + #[derive(OpenApi, Default)] + #[openapi(paths(get_foo_by_id))] + struct ApiDoc; + + let doc = serde_json::to_value(ApiDoc::openapi()).unwrap(); + let parameters = doc.pointer("/paths/~1foo/get/parameters").unwrap(); + + common::assert_json_array_len(parameters, 1); + assert_value! {parameters=> + "[0].in" = r#""query""#, "Parameter in" + "[0].name" = r#""value""#, "Parameter name" + "[0].description" = r#""Foo value description""#, "Parameter description" + "[0].required" = r#"false"#, "Parameter required" + "[0].deprecated" = r#"true"#, "Parameter deprecated" + "[0].schema.type" = r#"["array","null"]"#, "Parameter schema type" + "[0].schema.items.type" = r#""string""#, "Parameter schema items type" + "[0].style" = r#""form""#, "Parameter style" + "[0].allowReserved" = r#"true"#, "Parameter allowReserved" + "[0].explode" = r#"true"#, "Parameter explode" + }; +} + +#[test] +fn derive_path_params_with_parameter_type_args() { + #[fastapi::path( + get, + path = "/foo", + responses( + (status = 200, description = "success"), + ), + params( + ("value" = Option<[String]>, Query, description = "Foo value description", style = Form, allow_reserved, deprecated, explode, max_items = 1, max_length = 20, pattern = r"\w") + ) + )] + #[allow(unused)] + async fn get_foo_by_id() -> String { + "".to_string() + } + + #[derive(OpenApi, Default)] + #[openapi(paths(get_foo_by_id))] + struct ApiDoc; + + let doc = serde_json::to_value(ApiDoc::openapi()).unwrap(); + let parameters = doc.pointer("/paths/~1foo/get/parameters").unwrap(); + + common::assert_json_array_len(parameters, 1); + + assert_json_eq!( + parameters, + json!([ + { + "in": "query", + "name": "value", + "required": false, + "deprecated": true, + "description": "Foo value description", + "schema": { + "type": ["array", "null"], + "items": { + "maxLength": 20, + "pattern": r"\w", + "type": "string" + }, + "maxItems": 1, + }, + "style": "form", + "allowReserved": true, + "explode": true + } + ]) + ); +} + +macro_rules! into_params { + ( $( #[$me:meta] )* $key:ident $name:ident $( $tt:tt )*) => { + { + #[derive(fastapi::IntoParams)] + $(#[$me])* + $key $name $( $tt )* + + #[fastapi::path(get, path = "/handler", params($name))] + #[allow(unused)] + fn handler() {} + + let value = serde_json::to_value(__path_handler::operation()) + .expect("path item should serialize to json"); + value.pointer("/parameters").expect("operation should have parameters").clone() + } + }; +} + +#[test] +fn derive_into_params_required_custom_query_parameter_required() { + #[allow(unused)] + struct Param<T>(T); + + let value = into_params! { + #[into_params(parameter_in = Query)] + #[allow(unused)] + struct TasksFilterQuery { + /// Maximum number of results to return. + #[param(required = false, value_type = u32, example = 12)] + pub limit: Param<u32>, + /// Maximum number of results to return. + #[param(required = true, value_type = u32, example = 12)] + pub limit_explisit_required: Param<u32>, + /// Maximum number of results to return. + #[param(value_type = Option<u32>, example = 12)] + pub not_required: Param<u32>, + /// Maximum number of results to return. + #[param(required = true, value_type = Option<u32>, example = 12)] + pub option_required: Param<u32>, + } + }; + + assert_json_eq!( + value, + json!([ + { + "description": "Maximum number of results to return.", + "example": 12, + "in": "query", + "name": "limit", + "required": false, + "schema": { + "format": "int32", + "minimum": 0, + "type": "integer" + } + }, + { + "description": "Maximum number of results to return.", + "example": 12, + "in": "query", + "name": "limit_explisit_required", + "required": true, + "schema": { + "format": "int32", + "minimum": 0, + "type": "integer" + } + }, + { + "description": "Maximum number of results to return.", + "example": 12, + "in": "query", + "name": "not_required", + "required": false, + "schema": { + "format": "int32", + "minimum": 0, + "type": [ + "integer", + "null" + ] + } + }, + { + "description": "Maximum number of results to return.", + "example": 12, + "in": "query", + "name": "option_required", + "required": true, + "schema": { + "format": "int32", + "minimum": 0, + "type": [ + "integer", + "null" + ] + } + } + ]) + ); +} diff --git a/fastapi-gen/tests/path_response_derive_test.rs b/fastapi-gen/tests/path_response_derive_test.rs new file mode 100644 index 0000000..b300019 --- /dev/null +++ b/fastapi-gen/tests/path_response_derive_test.rs @@ -0,0 +1,717 @@ +use assert_json_diff::assert_json_eq; +use fastapi::openapi::{RefOr, Response}; +use fastapi::{OpenApi, Path, ToResponse}; +use serde_json::{json, Value}; + +mod common; + +macro_rules! test_fn { + ( module: $name:ident, responses: $($responses:tt)* ) => { + #[allow(unused)] + mod $name { + #[allow(unused)] + #[derive(fastapi::ToSchema)] + struct Foo { + name: String, + } + + #[fastapi::path(get,path = "/foo",responses $($responses)*)] + fn get_foo() {} + } + }; +} + +macro_rules! api_doc { + ( module: $module:expr ) => {{ + use fastapi::OpenApi; + #[derive(OpenApi, Default)] + #[openapi(paths($module::get_foo))] + struct ApiDoc; + + let doc = serde_json::to_value(ApiDoc::openapi()).unwrap(); + doc.pointer("/paths/~1foo/get") + .unwrap_or(&serde_json::Value::Null) + .clone() + }}; +} + +test_fn! { + module: simple_success_response, + responses: ( + (status = 200, description = "success") + ) +} + +#[test] +fn derive_path_with_simple_success_response() { + let doc = api_doc!(module: simple_success_response); + + assert_value! {doc=> + "responses.200.description" = r#""success""#, "Response description" + "responses.200.content" = r#"null"#, "Response content" + "responses.200.headers" = r#"null"#, "Response headers" + } +} + +test_fn! { + module: multiple_simple_responses, + responses: ( + (status = 200, description = "success"), + (status = 401, description = "unauthorized"), + (status = 404, description = "not found"), + (status = 500, description = "server error"), + (status = "5XX", description = "all other server errors"), + (status = "default", description = "default") + ) +} + +#[test] +fn derive_path_with_multiple_simple_responses() { + let doc = api_doc!(module: multiple_simple_responses); + + assert_value! {doc=> + "responses.200.description" = r#""success""#, "Response description" + "responses.200.content" = r#"null"#, "Response content" + "responses.200.headers" = r#"null"#, "Response headers" + "responses.401.description" = r#""unauthorized""#, "Response description" + "responses.401.content" = r#"null"#, "Response content" + "responses.401.headers" = r#"null"#, "Response headers" + "responses.404.description" = r#""not found""#, "Response description" + "responses.404.content" = r#"null"#, "Response content" + "responses.404.headers" = r#"null"#, "Response headers" + "responses.500.description" = r#""server error""#, "Response description" + "responses.500.content" = r#"null"#, "Response content" + "responses.500.headers" = r#"null"#, "Response headers" + "responses.5XX.description" = r#""all other server errors""#, "Response description" + "responses.5XX.content" = r#"null"#, "Response content" + "responses.5XX.headers" = r#"null"#, "Response headers" + "responses.default.description" = r#""default""#, "Response description" + "responses.default.content" = r#"null"#, "Response content" + "responses.default.headers" = r#"null"#, "Response headers" + } +} + +test_fn! { + module: http_status_code_responses, + responses: ( + (status = OK, description = "success"), + (status = http::status::StatusCode::NOT_FOUND, description = "not found"), + ) +} + +#[test] +fn derive_http_status_code_responses() { + let doc = api_doc!(module: http_status_code_responses); + let responses = doc.pointer("/responses"); + + assert_json_eq!( + responses, + json!({ + "200": { + "description": "success" + }, + "404": { + "description": "not found" + } + }) + ) +} + +struct ReusableResponse; + +impl<'r> ToResponse<'r> for ReusableResponse { + fn response() -> (&'r str, RefOr<Response>) { + ( + "ReusableResponseName", + Response::new("reusable response").into(), + ) + } +} + +test_fn! { + module: reusable_responses, + responses: ( + (status = 200, description = "success"), + (status = "default", response = crate::ReusableResponse) + ) +} + +#[test] +fn derive_path_with_reusable_responses() { + let doc = api_doc!(module: reusable_responses); + + assert_value! {doc=> + "responses.200.description" = r#""success""#, "Response description" + "responses.default.$ref" = "\"#/components/responses/ReusableResponseName\"", "Response reference" + } +} + +macro_rules! test_response_types { + ( $( $name:ident=> $(body: $expected:expr,)? $( $content_type:literal, )? $( headers: $headers:expr, )? + assert: $( $path:literal = $expectation:literal, $comment:literal )* )* ) => { + $( + paste::paste! { + test_fn! { + module: [<mod_ $name>], + responses: ( + (status = 200, description = "success", + $(body = $expected ,)* + $(content_type = $content_type,)* + $(headers $headers, )* + ), + ) + } + } + + #[test] + fn $name() { + paste::paste! { + let doc = api_doc!(module: [<mod_ $name>]); + } + + assert_value! {doc=> + "responses.200.description" = r#""success""#, "Response description" + $($path = $expectation, $comment)* + } + } + )* + }; +} + +test_response_types! { +primitive_string_body => body: String, assert: + "responses.200.content.text~1plain.schema.type" = r#""string""#, "Response content type" + "responses.200.headers" = r###"null"###, "Response headers" +primitive_string_slice_body => body: [String], assert: + "responses.200.content.application~1json.schema.items.type" = r#""string""#, "Response content items type" + "responses.200.content.application~1json.schema.type" = r#""array""#, "Response content type" + "responses.200.headers" = r###"null"###, "Response headers" +primitive_integer_slice_body => body: [i32], assert: + "responses.200.content.application~1json.schema.items.type" = r#""integer""#, "Response content items type" + "responses.200.content.application~1json.schema.items.format" = r#""int32""#, "Response content items format" + "responses.200.content.application~1json.schema.type" = r#""array""#, "Response content type" + "responses.200.headers" = r###"null"###, "Response headers" +primitive_integer_body => body: i64, assert: + "responses.200.content.text~1plain.schema.type" = r#""integer""#, "Response content type" + "responses.200.content.text~1plain.schema.format" = r#""int64""#, "Response content format" + "responses.200.headers" = r###"null"###, "Response headers" +primitive_big_integer_body => body: u128, assert: + "responses.200.content.text~1plain.schema.type" = r#""integer""#, "Response content type" + "responses.200.content.text~1plain.schema.format" = r#"null"#, "Response content format" + "responses.200.headers" = r###"null"###, "Response headers" +primitive_bool_body => body: bool, assert: + "responses.200.content.text~1plain.schema.type" = r#""boolean""#, "Response content type" + "responses.200.headers" = r###"null"###, "Response headers" +object_body => body: Foo, assert: + "responses.200.content.application~1json.schema.$ref" = r###""#/components/schemas/Foo""###, "Response content type" + "responses.200.headers" = r###"null"###, "Response headers" +object_slice_body => body: [Foo], assert: + "responses.200.content.application~1json.schema.type" = r###""array""###, "Response content type" + "responses.200.content.application~1json.schema.items.$ref" = r###""#/components/schemas/Foo""###, "Response content items type" + "responses.200.headers" = r###"null"###, "Response headers" +object_body_override_content_type_to_xml => body: Foo, "text/xml", assert: + "responses.200.content.application~1json.schema.$ref" = r###"null"###, "Response content type" + "responses.200.content.text~1xml.schema.$ref" = r###""#/components/schemas/Foo""###, "Response content type" + "responses.200.headers" = r###"null"###, "Response headers" +object_body_with_simple_header => body: Foo, headers: ( + ("xsrf-token") +), assert: + "responses.200.content.application~1json.schema.$ref" = r###""#/components/schemas/Foo""###, "Response content type" + "responses.200.headers.xsrf-token.schema.type" = r###""string""###, "xsrf-token header type" + "responses.200.headers.xsrf-token.description" = r###"null"###, "xsrf-token header description" +object_body_with_multiple_headers => body: Foo, headers: ( + ("xsrf-token"), + ("another-header") +), assert: + "responses.200.content.application~1json.schema.$ref" = r###""#/components/schemas/Foo""###, "Response content type" + "responses.200.headers.xsrf-token.schema.type" = r###""string""###, "xsrf-token header type" + "responses.200.headers.xsrf-token.description" = r###"null"###, "xsrf-token header description" + "responses.200.headers.another-header.schema.type" = r###""string""###, "another-header header type" + "responses.200.headers.another-header.description" = r###"null"###, "another-header header description" +object_body_with_header_with_type => body: Foo, headers: ( + ("random-digits" = [i64]), +), assert: + "responses.200.content.application~1json.schema.$ref" = r###""#/components/schemas/Foo""###, "Response content type" + "responses.200.headers.random-digits.schema.type" = r###""array""###, "random-digits header type" + "responses.200.headers.random-digits.description" = r###"null"###, "random-digits header description" + "responses.200.headers.random-digits.schema.items.type" = r###""integer""###, "random-digits header items type" + "responses.200.headers.random-digits.schema.items.format" = r###""int64""###, "random-digits header items format" +response_no_body_with_complex_header_with_description => headers: ( + ("random-digits" = [i64], description = "Random digits response header"), +), assert: + "responses.200.content" = r###"null"###, "Response content type" + "responses.200.headers.random-digits.description" = r###""Random digits response header""###, "random-digits header description" + "responses.200.headers.random-digits.schema.type" = r###""array""###, "random-digits header type" + "responses.200.headers.random-digits.schema.items.type" = r###""integer""###, "random-digits header items type" + "responses.200.headers.random-digits.schema.items.format" = r###""int64""###, "random-digits header items format" +binary_octet_stream => body: [u8], assert: + "responses.200.content.application~1octet-stream.schema.type" = r#""array""#, "Response content type" + "responses.200.content.application~1octet-stream.schema.format" = r#"null"#, "Response content format" + "responses.200.headers" = r###"null"###, "Response headers" +} + +test_fn! { + module: response_with_json_example, + responses: ( + (status = 200, description = "success", body = Foo, example = json!({"foo": "bar"})) + ) +} + +#[test] +fn derive_response_with_json_example_success() { + let doc = api_doc!(module: response_with_json_example); + + assert_value! {doc=> + "responses.200.description" = r#""success""#, "Response description" + "responses.200.content.application~1json.schema.$ref" = r###""#/components/schemas/Foo""###, "Response content ref" + "responses.200.content.application~1json.example" = r###"{"foo":"bar"}"###, "Response content example" + "responses.200.headers" = r#"null"#, "Response headers" + } +} + +#[test] +fn derive_response_body_inline_schema_component() { + test_fn! { + module: response_body_inline_schema, + responses: ( + (status = 200, description = "success", body = inline(Foo), content_type = "application/json") + ) + } + + let doc: Value = api_doc!(module: response_body_inline_schema); + + assert_json_eq!( + doc, + json!({ + "operationId": "get_foo", + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "properties": { + "name": { + "type": "string" + } + }, + "required": [ + "name" + ], + "type": "object" + } + } + }, + "description": "success" + } + }, + "tags": [ + "response_body_inline_schema" + ] + }) + ); +} + +#[test] +fn derive_path_with_multiple_responses_via_content_attribute_auto_collect_responses() { + #[derive(serde::Serialize, fastapi::ToSchema)] + #[allow(unused)] + struct User { + id: String, + } + + #[derive(serde::Serialize, fastapi::ToSchema)] + #[allow(unused)] + struct User2 { + id: i32, + } + + #[fastapi::path( + get, + path = "/foo", + responses( + (status = 200, content( + (User = "application/vnd.user.v1+json" , example = json!(User {id: "id".to_string()})), + (User2 = "application/vnd.user.v2+json", example = json!(User2 {id: 2})) + ) + ) + ) + )] + #[allow(unused)] + fn get_item() {} + + #[derive(fastapi::OpenApi)] + #[openapi(paths(get_item))] + struct ApiDoc; + + let doc = serde_json::to_value(ApiDoc::openapi()).unwrap(); + let responses = doc.pointer("/paths/~1foo/get/responses").unwrap(); + let schemas = doc + .pointer("/components/schemas") + .expect("doc must have schemas"); + + assert_json_eq!( + schemas, + json!({ + "User": { + "properties": { + "id": { + "type": "string", + } + }, + "required": ["id"], + "type": "object", + }, + "User2": { + "properties": { + "id": { + "type": "integer", + "format": "int32", + } + }, + "required": ["id"], + "type": "object", + } + }) + ); + + assert_json_eq!( + responses, + json!({ + "200": { + "content": { + "application/vnd.user.v1+json": { + "example": { + "id": "id", + }, + "schema": { + "$ref": + "#/components/schemas/User", + }, + }, + "application/vnd.user.v2+json": { + "example": { + "id": 2, + }, + "schema": { + "$ref": "#/components/schemas/User2", + }, + }, + }, + "description": "", + }, + }) + ) +} + +#[test] +fn derive_path_with_multiple_examples_auto_collect_schemas() { + #[derive(serde::Serialize, fastapi::ToSchema)] + #[allow(unused)] + struct User { + name: String, + } + + #[fastapi::path( + get, + path = "/foo", + responses( + (status = 200, body = User, + examples( + ("Demo" = (summary = "This is summary", description = "Long description", + value = json!(User{name: "Demo".to_string()}))), + ("John" = (summary = "Another user", value = json!({"name": "John"}))) + ) + ) + ) + )] + #[allow(unused)] + fn get_item() {} + + #[derive(fastapi::OpenApi)] + #[openapi(paths(get_item))] + struct ApiDoc; + + let doc = serde_json::to_value(ApiDoc::openapi()).unwrap(); + let responses = doc.pointer("/paths/~1foo/get/responses").unwrap(); + let schemas = doc + .pointer("/components/schemas") + .expect("doc must have schemas"); + + assert_json_eq!( + schemas, + json!({ + "User": { + "properties": { + "name": { + "type": "string", + } + }, + "required": ["name"], + "type": "object", + } + }) + ); + assert_json_eq!( + responses, + json!({ + "200": { + "content": { + "application/json": { + "examples": { + "Demo": { + "summary": "This is summary", + "description": "Long description", + "value": { + "name": "Demo" + } + }, + "John": { + "summary": "Another user", + "value": { + "name": "John" + } + } + }, + "schema": { + "$ref": + "#/components/schemas/User", + }, + }, + }, + "description": "", + }, + }) + ) +} + +#[test] +fn derive_path_with_multiple_responses_with_multiple_examples() { + #[derive(serde::Serialize, fastapi::ToSchema)] + #[allow(unused)] + struct User { + id: String, + } + + #[derive(serde::Serialize, fastapi::ToSchema)] + #[allow(unused)] + struct User2 { + id: i32, + } + + #[fastapi::path( + get, + path = "/foo", + responses( + (status = 200, content( + (User = "application/vnd.user.v1+json", + examples( + ("StringUser" = (value = json!({"id": "1"}))), + ("StringUser2" = (value = json!({"id": "2"}))) + ), + ), + (User2 = "application/vnd.user.v2+json", + examples( + ("IntUser" = (value = json!({"id": 1}))), + ("IntUser2" = (value = json!({"id": 2}))) + ), + ) + ) + ) + ) + )] + #[allow(unused)] + fn get_item() {} + + #[derive(fastapi::OpenApi)] + #[openapi(paths(get_item), components(schemas(User, User2)))] + struct ApiDoc; + + let doc = serde_json::to_value(ApiDoc::openapi()).unwrap(); + let responses = doc.pointer("/paths/~1foo/get/responses").unwrap(); + + assert_json_eq!( + responses, + json!({ + "200": { + "content": { + "application/vnd.user.v1+json": { + "examples": { + "StringUser": { + "value": { + "id": "1" + } + }, + "StringUser2": { + "value": { + "id": "2" + } + } + }, + "schema": { + "$ref": + "#/components/schemas/User", + }, + }, + "application/vnd.user.v2+json": { + "examples": { + "IntUser": { + "value": { + "id": 1 + } + }, + "IntUser2": { + "value": { + "id": 2 + } + } + }, + "schema": { + "$ref": "#/components/schemas/User2", + }, + }, + }, + "description": "", + }, + }) + ) +} + +#[test] +fn path_response_with_external_ref() { + #[fastapi::path( + get, + path = "/foo", + responses( + (status = 200, body = ref("./MyUser.json")) + ) + )] + #[allow(unused)] + fn get_item() {} + + #[derive(fastapi::OpenApi)] + #[openapi(paths(get_item))] + struct ApiDoc; + + let doc = serde_json::to_value(ApiDoc::openapi()).unwrap(); + let responses = doc.pointer("/paths/~1foo/get/responses").unwrap(); + + assert_json_eq!( + responses, + json!({ + "200": { + "content": { + "application/json": { + "schema": { + "$ref": + "./MyUser.json", + }, + }, + }, + "description": "", + }, + }) + ) +} + +#[test] +fn path_response_with_inline_ref_type() { + #[derive(serde::Serialize, fastapi::ToSchema, fastapi::ToResponse)] + #[allow(unused)] + struct User { + name: String, + } + + #[fastapi::path( + get, + path = "/foo", + responses( + (status = 200, response = inline(User)) + ) + )] + #[allow(unused)] + fn get_item() {} + + #[derive(fastapi::OpenApi)] + #[openapi(paths(get_item), components(schemas(User)))] + struct ApiDoc; + + let doc = serde_json::to_value(ApiDoc::openapi()).unwrap(); + let responses = doc.pointer("/paths/~1foo/get/responses").unwrap(); + + assert_json_eq!( + responses, + json!({ + "200": { + "content": { + "application/json": { + "schema": { + "properties": { + "name": { + "type": "string" + } + }, + "required": ["name"], + "type": "object", + }, + }, + }, + "description": "", + }, + }) + ) +} + +#[test] +fn path_response_default_no_value_nor_ref() { + #![allow(unused)] + + /// Post some secret inner handler + #[fastapi::path(post, path = "/api/inner/secret", responses((status = OK)))] + pub async fn post_secret() {} + + let operation = __path_post_secret::operation(); + let value = serde_json::to_value(operation).expect("operation is JSON serializable"); + + assert_json_eq!( + value, + json!({ + "operationId": "post_secret", + "responses": { + "200": { + "description": "" + } + }, + "summary": "Post some secret inner handler" + }) + ) +} + +#[test] +fn path_response_with_no_schema() { + #![allow(unused)] + + /// Post some secret inner handler + #[fastapi::path(post, path = "/api/inner/secret", responses( + (status = OK, content_type = "application/octet-stream") + ))] + pub async fn post_secret() {} + + let operation = __path_post_secret::operation(); + let value = serde_json::to_value(operation).expect("operation is JSON serializable"); + + assert_json_eq!( + value, + json!({ + "operationId": "post_secret", + "responses": { + "200": { + "content": { + "application/octet-stream": {} + }, + "description": "" + } + }, + "summary": "Post some secret inner handler" + }) + ) +} diff --git a/fastapi-gen/tests/request_body_derive_test.rs b/fastapi-gen/tests/request_body_derive_test.rs new file mode 100644 index 0000000..08fdf19 --- /dev/null +++ b/fastapi-gen/tests/request_body_derive_test.rs @@ -0,0 +1,892 @@ +use assert_json_diff::assert_json_eq; +use fastapi::{OpenApi, Path}; +use fastapi_gen::ToSchema; +use serde_json::{json, Value}; + +mod common; + +macro_rules! test_fn { + ( module: $name:ident, body: $($body:tt)* ) => { + #[allow(unused)] + mod $name { + #[derive(fastapi::ToSchema)] + /// Some struct + pub struct Foo { + /// Some name + name: String, + } + #[fastapi::path( + post, + path = "/foo", + request_body $($body)*, + responses( + (status = 200, description = "success response") + ) + )] + fn post_foo() {} + } + }; +} + +test_fn! { + module: derive_request_body_simple, + body: = Foo +} + +#[test] +fn derive_path_request_body_simple_success() { + #[derive(OpenApi, Default)] + #[openapi(paths(derive_request_body_simple::post_foo))] + struct ApiDoc; + + let doc = serde_json::to_value(ApiDoc::openapi()).unwrap(); + + assert_value! {doc=> + "paths.~1foo.post.requestBody.content.application~1json.schema.$ref" = r###""#/components/schemas/Foo""###, "Request body content object type" + "paths.~1foo.post.requestBody.content.text~1plain" = r###"null"###, "Request body content object type not text/plain" + "paths.~1foo.post.requestBody.required" = r###"true"###, "Request body required" + "paths.~1foo.post.requestBody.description" = r###"null"###, "Request body description" + } +} + +#[test] +fn derive_path_request_body_simple_array_success() { + #![allow(unused)] + + #[derive(fastapi::ToSchema)] + /// Some struct + pub struct Foo { + /// Some name + name: String, + } + #[fastapi::path( + post, + path = "/foo", + request_body = [Foo], + responses( + (status = 200, description = "success response") + ) + )] + fn post_foo() {} + #[derive(OpenApi, Default)] + #[openapi(paths(post_foo))] + struct ApiDoc; + + let doc = serde_json::to_value(ApiDoc::openapi()).unwrap(); + + assert_value! {doc=> + "paths.~1foo.post.requestBody.content.application~1json.schema.$ref" = r###"null"###, "Request body content object type" + "paths.~1foo.post.requestBody.content.application~1json.schema.items.$ref" = r###""#/components/schemas/Foo""###, "Request body content items object type" + "paths.~1foo.post.requestBody.content.application~1json.schema.type" = r###""array""###, "Request body content items type" + "paths.~1foo.post.requestBody.content.text~1plain" = r###"null"###, "Request body content object type not text/plain" + "paths.~1foo.post.requestBody.required" = r###"true"###, "Request body required" + "paths.~1foo.post.requestBody.description" = r###"null"###, "Request body description" + } +} + +test_fn! { + module: derive_request_body_option_array, + body: = Option<[Foo]> +} + +#[test] +fn derive_request_body_option_array_success() { + #[derive(OpenApi, Default)] + #[openapi(paths(derive_request_body_option_array::post_foo))] + struct ApiDoc; + + let doc = serde_json::to_value(ApiDoc::openapi()).unwrap(); + let body = doc.pointer("/paths/~1foo/post/requestBody").unwrap(); + + assert_json_eq!( + body, + json!({ + "content": { + "application/json": { + "schema": { + "items": { + "$ref": "#/components/schemas/Foo" + }, + "type": ["array", "null"], + }, + } + }, + }) + ); +} + +test_fn! { + module: derive_request_body_primitive_simple, + body: = String +} + +#[test] +fn derive_request_body_primitive_simple_success() { + #[derive(OpenApi, Default)] + #[openapi(paths(derive_request_body_primitive_simple::post_foo))] + struct ApiDoc; + + let doc = serde_json::to_value(ApiDoc::openapi()).unwrap(); + + assert_value! {doc=> + "paths.~1foo.post.requestBody.content.application~1json.schema.$ref" = r###"null"###, "Request body content object type not application/json" + "paths.~1foo.post.requestBody.content.application~1json.schema.items.$ref" = r###"null"###, "Request body content items object type" + "paths.~1foo.post.requestBody.content.application~1json.schema.type" = r###"null"###, "Request body content items type" + "paths.~1foo.post.requestBody.content.text~1plain.schema.type" = r###""string""###, "Request body content object type" + "paths.~1foo.post.requestBody.required" = r###"true"###, "Request body required" + "paths.~1foo.post.requestBody.description" = r###"null"###, "Request body description" + } +} + +#[test] +fn request_body_with_only_single_content_type() { + #![allow(unused)] + + #[derive(fastapi::ToSchema)] + /// Some struct + pub struct Foo { + /// Some name + name: String, + } + #[fastapi::path(post, path = "/foo", request_body(content_type = "application/json"))] + fn post_foo() {} + + #[derive(OpenApi, Default)] + #[openapi(paths(post_foo))] + struct ApiDoc; + + let doc = serde_json::to_value(ApiDoc::openapi()).unwrap(); + let content = doc + .pointer("/paths/~1foo/post/requestBody/content") + .unwrap(); + + assert_json_eq!( + content, + json!({ + "application/json": {} + }) + ); +} + +test_fn! { + module: derive_request_body_primitive_simple_array, + body: = [i64] +} + +#[test] +fn derive_request_body_primitive_array_success() { + #[derive(OpenApi, Default)] + #[openapi(paths(derive_request_body_primitive_simple_array::post_foo))] + struct ApiDoc; + + let doc = serde_json::to_value(ApiDoc::openapi()).unwrap(); + let content = doc + .pointer("/paths/~1foo/post/requestBody/content") + .unwrap(); + + assert_json_eq!( + content, + json!( + { + "application/json": { + "schema": { + "type": "array", + "items": { + "type": "integer", + "format": "int64", + } + } + } + } + ) + ); +} + +test_fn! { + module: derive_request_body_complex, + body: (content = Foo, description = "Create new Foo", content_type = "text/xml") +} + +#[test] +fn derive_request_body_complex_success() { + #[derive(OpenApi, Default)] + #[openapi(paths(derive_request_body_complex::post_foo))] + struct ApiDoc; + + let doc = serde_json::to_value(ApiDoc::openapi()).unwrap(); + + let request_body: &Value = doc.pointer("/paths/~1foo/post/requestBody").unwrap(); + + assert_json_eq!( + request_body, + json!({ + "content": { + "text/xml": { + "schema": { + "$ref": "#/components/schemas/Foo" + } + } + }, + "description": "Create new Foo", + "required": true + }) + ); +} + +#[test] +fn derive_request_body_complex_multi_content_type_success() { + #![allow(unused)] + + #[derive(fastapi::ToSchema)] + /// Some struct + pub struct Foo { + /// Some name + name: String, + } + + #[fastapi::path( + post, + path = "/foo", + request_body(content( ( Foo = "application/json" ), ( Foo = "text/xml") ), description = "Create new Foo" ), + responses( + (status = 200, description = "success response") + ) + )] + fn post_foo() {} + + let operation = serde_json::to_value(__path_post_foo::operation()).unwrap(); + let request_body: &Value = operation.pointer("/requestBody").unwrap(); + + assert_json_eq!( + request_body, + json!({ + "content": { + "text/xml": { + "schema": { + "$ref": "#/components/schemas/Foo" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/Foo" + } + } + }, + "description": "Create new Foo", + "required": true + }) + ); +} + +#[test] +fn derive_request_body_with_multiple_content_type_guess_default_content_type() { + #![allow(unused)] + + #[derive(fastapi::ToSchema)] + /// Some struct + pub struct Foo { + /// Some name + name: String, + } + + #[fastapi::path( + post, + path = "/foo", + request_body(content( ( Foo ), ( Foo = "text/xml") ), description = "Create new Foo" ), + responses( + (status = 200, description = "success response") + ) + )] + fn post_foo() {} + + let operation = serde_json::to_value(__path_post_foo::operation()).unwrap(); + let request_body: &Value = operation.pointer("/requestBody").unwrap(); + + assert_json_eq!( + request_body, + json!({ + "content": { + "text/xml": { + "schema": { + "$ref": "#/components/schemas/Foo" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/Foo" + } + } + }, + "description": "Create new Foo", + "required": true + }) + ); +} + +#[test] +fn multiple_request_body_with_only_content_type() { + #![allow(unused)] + + #[derive(fastapi::ToSchema)] + /// Some struct + pub struct Foo { + /// Some name + name: String, + } + + #[fastapi::path( + post, + path = "/foo", + request_body(content( ( "application/json" ), ( Foo = "text/xml") ), description = "Create new Foo" ), + responses( + (status = 200, description = "success response") + ) + )] + fn post_foo() {} + + let operation = serde_json::to_value(__path_post_foo::operation()).unwrap(); + let request_body = operation.pointer("/requestBody").unwrap(); + + assert_json_eq!( + request_body, + json!({ + "content": { + "text/xml": { + "schema": { + "$ref": "#/components/schemas/Foo" + } + }, + "application/json": { }, + }, + "description": "Create new Foo", + "required": true + }) + ); +} + +#[test] +fn multiple_content_with_examples() { + #![allow(unused)] + + #[derive(fastapi::ToSchema)] + /// Some struct + pub struct Foo { + /// Some name + name: String, + } + + #[fastapi::path( + post, + path = "/foo", + request_body( + description = "Create new Foo", + content( + ( Foo, examples( + ("example1" = (value = json!("Foo name"), description = "Foo name example") ), + ("example2" = (value = json!("example value"), description = "example value") ), + ), + ), + ( Foo = "text/xml", example = "Value" ) + ), + ), + responses( + (status = 200, description = "success response") + ) + )] + fn post_foo() {} + + let operation = serde_json::to_value(__path_post_foo::operation()).unwrap(); + let request_body = operation.pointer("/requestBody").unwrap(); + + assert_json_eq!( + request_body, + json!({ + "content": { + "text/xml": { + "schema": { + "$ref": "#/components/schemas/Foo" + }, + "example": "Value" + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/Foo" + }, + "examples": { + "example1": { + "description": "Foo name example", + "value": "Foo name" + }, + "example2": { + "description": "example value", + "value": "example value" + } + } + }, + }, + "description": "Create new Foo", + "required": true + }) + ); +} + +test_fn! { + module: derive_request_body_complex_inline, + body: (content = inline(Foo), description = "Create new Foo", content_type = "text/xml") +} + +#[test] +fn derive_request_body_complex_success_inline() { + #[derive(OpenApi, Default)] + #[openapi(paths(derive_request_body_complex_inline::post_foo))] + struct ApiDoc; + + let doc = serde_json::to_value(ApiDoc::openapi()).unwrap(); + + let request_body: &Value = doc.pointer("/paths/~1foo/post/requestBody").unwrap(); + + assert_json_eq!( + request_body, + json!({ + "content": { + "text/xml": { + "schema": { + "description": "Some struct", + "properties": { + "name": { + "description": "Some name", + "type": "string" + } + }, + "required": [ + "name" + ], + "type": "object" + } + } + }, + "description": "Create new Foo", + "required": true + }) + ); +} + +test_fn! { + module: derive_request_body_complex_array, + body: (content = [Foo], description = "Create new Foo", content_type = "text/xml") +} + +#[test] +fn derive_request_body_complex_success_array() { + #[derive(OpenApi, Default)] + #[openapi(paths(derive_request_body_complex_array::post_foo))] + struct ApiDoc; + + let doc = serde_json::to_value(ApiDoc::openapi()).unwrap(); + + let request_body: &Value = doc.pointer("/paths/~1foo/post/requestBody").unwrap(); + + assert_json_eq!( + request_body, + json!({ + "content": { + "text/xml": { + "schema": { + "items": { + "$ref": "#/components/schemas/Foo" + }, + "type": "array" + } + } + }, + "description": "Create new Foo", + "required": true + }) + ); +} + +test_fn! { + module: derive_request_body_complex_inline_array, + body: (content = inline([Foo]), description = "Create new Foo", content_type = "text/xml") +} + +#[test] +fn derive_request_body_complex_success_inline_array() { + #[derive(OpenApi, Default)] + #[openapi(paths(derive_request_body_complex_inline_array::post_foo))] + struct ApiDoc; + + let doc = serde_json::to_value(ApiDoc::openapi()).unwrap(); + + let request_body: &Value = doc.pointer("/paths/~1foo/post/requestBody").unwrap(); + + assert_json_eq!( + request_body, + json!({ + "content": { + "text/xml": { + "schema": { + "items": { + "description": "Some struct", + "properties": { + "name": { + "description": "Some name", + "type": "string" + } + }, + "required": [ + "name" + ], + "type": "object" + }, + "type": "array" + } + } + }, + "description": "Create new Foo", + "required": true + }) + ); +} + +test_fn! { + module: derive_request_body_simple_inline, + body: = inline(Foo) +} + +#[test] +fn derive_request_body_simple_inline_success() { + #[derive(OpenApi, Default)] + #[openapi(paths(derive_request_body_simple_inline::post_foo))] + struct ApiDoc; + + let doc = serde_json::to_value(ApiDoc::openapi()).unwrap(); + let request_body: &Value = doc.pointer("/paths/~1foo/post/requestBody").unwrap(); + + assert_json_eq!( + request_body, + json!({ + "content": { + "application/json": { + "schema": { + "description": "Some struct", + "properties": { + "name": { + "description": "Some name", + "type": "string" + } + }, + "required": [ + "name" + ], + "type": "object" + } + } + }, + "required": true + }) + ); +} + +#[test] +fn derive_request_body_complex_required_explicit_false_success() { + #![allow(unused)] + + #[derive(fastapi::ToSchema)] + /// Some struct + pub struct Foo { + /// Some name + name: String, + } + #[fastapi::path( + post, + path = "/foo", + request_body(content = Option<Foo>, description = "Create new Foo", content_type = "text/xml"), + responses( + (status = 200, description = "success response") + ) + )] + fn post_foo() {} + #[derive(OpenApi, Default)] + #[openapi(paths(post_foo))] + struct ApiDoc; + + let doc = serde_json::to_value(ApiDoc::openapi()).unwrap(); + let body = doc.pointer("/paths/~1foo/post/requestBody").unwrap(); + + assert_json_eq!( + body, + json!({ + "content": { + "text/xml": { + "schema": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/Foo" + } + ], + } + } + }, + "description": "Create new Foo", + }) + ); +} + +test_fn! { + module: derive_request_body_complex_primitive_array, + body: (content = [i32], description = "Create new foo references") +} + +#[test] +fn derive_request_body_complex_primitive_array_success() { + #[derive(OpenApi, Default)] + #[openapi(paths(derive_request_body_complex_primitive_array::post_foo))] + struct ApiDoc; + + let doc = serde_json::to_value(ApiDoc::openapi()).unwrap(); + let content = doc + .pointer("/paths/~1foo/post/requestBody/content") + .unwrap(); + assert_json_eq!( + content, + json!( + { + "application/json": { + "schema": { + "type": "array", + "items": { + "type": "integer", + "format": "int32", + } + } + } + } + ) + ); +} + +#[test] +fn derive_request_body_ref_path_success() { + /// Some struct + #[derive(ToSchema)] + #[schema(as = path::to::Foo)] + #[allow(unused)] + pub struct Foo { + /// Some name + name: String, + } + + #[fastapi::path( + post, + path = "/foo", + request_body = Foo, + responses( + (status = 200, description = "success response") + ) + )] + #[allow(unused)] + fn post_foo() {} + + #[derive(OpenApi, Default)] + #[openapi(paths(post_foo), components(schemas(Foo)))] + struct ApiDoc; + + let doc = serde_json::to_value(ApiDoc::openapi()).unwrap(); + let schemas = doc.pointer("/components/schemas").unwrap(); + assert!(schemas.get("path.to.Foo").is_some()); + + let component_ref: &str = doc + .pointer("/paths/~1foo/post/requestBody/content/application~1json/schema/$ref") + .unwrap() + .as_str() + .unwrap(); + assert_eq!(component_ref, "#/components/schemas/path.to.Foo"); +} + +#[test] +fn unit_type_request_body() { + #[fastapi::path( + post, + path = "/unit_type_test", + request_body = () + )] + #[allow(unused)] + fn unit_type_test() {} + + #[derive(OpenApi)] + #[openapi(paths(unit_type_test))] + struct ApiDoc; + + let doc = serde_json::to_value(ApiDoc::openapi()).unwrap(); + let request_body = doc + .pointer("/paths/~1unit_type_test/post/requestBody") + .unwrap(); + + assert_json_eq!( + request_body, + json!({ + "content": { + "application/json": { + "schema": { + "default": null, + } + } + }, + "required": true + }) + ) +} + +#[test] +fn request_body_with_example() { + #[derive(ToSchema)] + #[allow(unused)] + struct Foo<'v> { + value: &'v str, + } + + #[fastapi::path(get, path = "/item", request_body(content = Foo, example = json!({"value": "this is value"})))] + #[allow(dead_code)] + fn get_item() {} + + #[derive(OpenApi)] + #[openapi(components(schemas(Foo)), paths(get_item))] + struct ApiDoc; + + let doc = serde_json::to_value(ApiDoc::openapi()).unwrap(); + + let content = doc + .pointer("/paths/~1item/get/requestBody/content") + .unwrap(); + assert_json_eq!( + content, + json!( + {"application/json": { + "example": { + "value": "this is value" + }, + "schema": { + "$ref": "#/components/schemas/Foo" + } + } + }) + ) +} + +#[test] +fn request_body_with_examples() { + #[derive(ToSchema)] + #[allow(unused)] + struct Foo<'v> { + value: &'v str, + } + + #[fastapi::path( + get, + path = "/item", + request_body(content = Foo, + examples( + ("Value1" = (value = json!({"value": "this is value"}) ) ), + ("Value2" = (value = json!({"value": "this is value2"}) ) ) + ) + ) + )] + #[allow(dead_code)] + fn get_item() {} + + #[derive(OpenApi)] + #[openapi(components(schemas(Foo)), paths(get_item))] + struct ApiDoc; + + let doc = serde_json::to_value(ApiDoc::openapi()).unwrap(); + + let content = doc + .pointer("/paths/~1item/get/requestBody/content") + .unwrap(); + assert_json_eq!( + content, + json!( + {"application/json": { + "examples": { + "Value1": { + "value": { + "value": "this is value" + } + }, + "Value2": { + "value": { + "value": "this is value2" + } + } + }, + "schema": { + "$ref": "#/components/schemas/Foo" + } + } + }) + ) +} + +#[test] +fn request_body_with_binary() { + #[fastapi::path(get, path = "/item", request_body(content = [u8]))] + #[allow(dead_code)] + fn get_item() {} + + #[derive(OpenApi)] + #[openapi(paths(get_item))] + struct ApiDoc; + + let doc = serde_json::to_value(ApiDoc::openapi()).unwrap(); + + let content = doc + .pointer("/paths/~1item/get/requestBody/content") + .unwrap(); + + assert_json_eq!( + content, + json!( + {"application/octet-stream": { + "schema": { + "type": "array", + "items": { + "format": "int32", + "minimum": 0, + "type": "integer" + } + } + } + }) + ) +} + +#[test] +fn request_body_with_external_ref() { + #[fastapi::path(get, path = "/item", request_body(content = ref("./MyUser.json")))] + #[allow(dead_code)] + fn get_item() {} + + #[derive(fastapi::OpenApi)] + #[openapi(paths(get_item))] + struct ApiDoc; + + let doc = serde_json::to_value(ApiDoc::openapi()).unwrap(); + + let content = doc + .pointer("/paths/~1item/get/requestBody/content") + .unwrap(); + assert_json_eq!( + content, + json!( + {"application/json": { + "schema": { + "$ref": "./MyUser.json" + } + } + }) + ) +} diff --git a/fastapi-gen/tests/response_derive_test.rs b/fastapi-gen/tests/response_derive_test.rs new file mode 100644 index 0000000..bb48fab --- /dev/null +++ b/fastapi-gen/tests/response_derive_test.rs @@ -0,0 +1,760 @@ +use assert_json_diff::assert_json_eq; +use fastapi::ToSchema; +use fastapi_gen::ToResponse; +use serde_json::json; + +#[test] +fn derive_name_struct_response() { + #[derive(ToResponse)] + #[allow(unused)] + struct Person { + name: String, + } + let (name, v) = <Person as fastapi::ToResponse>::response(); + let value = serde_json::to_value(v).unwrap(); + + assert_eq!("Person", name); + assert_json_eq!( + value, + json!({ + "content": { + "application/json": { + "schema": { + "properties": { + "name": { + "type": "string" + } + }, + "type": "object", + "required": ["name"] + } + } + }, + "description": "" + }) + ) +} + +#[test] +fn derive_unnamed_struct_response() { + #[derive(ToResponse)] + #[allow(unused)] + struct Person(Vec<String>); + + let (name, v) = <Person as fastapi::ToResponse>::response(); + let value = serde_json::to_value(v).unwrap(); + + assert_eq!("Person", name); + assert_json_eq!( + value, + json!({ + "content": { + "application/json": { + "schema": { + "items": { + "type": "string" + }, + "type": "array" + } + } + }, + "description": "" + }) + ) +} + +#[test] +fn derive_enum_response() { + #[derive(ToResponse)] + #[allow(unused)] + enum PersonType { + Value(String), + Foobar, + } + let (name, v) = <PersonType as fastapi::ToResponse>::response(); + let value = serde_json::to_value(v).unwrap(); + + assert_eq!("PersonType", name); + assert_json_eq!( + value, + json!({ + "content": { + "application/json": { + "schema": { + "oneOf": [ + { + "properties": { + "Value": { + "type": "string" + } + }, + "required": ["Value"], + "type": "object", + }, + { + "enum": ["Foobar"], + "type": "string" + } + ] + } + } + }, + "description": "" + }) + ) +} + +#[test] +fn derive_struct_response_with_description() { + /// This is description + /// + /// It will also be used in `ToSchema` if present + #[derive(ToResponse)] + #[allow(unused)] + struct Person { + name: String, + } + let (name, v) = <Person as fastapi::ToResponse>::response(); + let value = serde_json::to_value(v).unwrap(); + + assert_eq!("Person", name); + assert_json_eq!( + value, + json!({ + "content": { + "application/json": { + "schema": { + "description": "This is description\n\nIt will also be used in `ToSchema` if present", + "properties": { + "name": { + "type": "string" + } + }, + "type": "object", + "required": ["name"] + } + } + }, + "description": "This is description\n\nIt will also be used in `ToSchema` if present" + }) + ) +} + +#[test] +fn derive_response_with_attributes() { + /// This is description + /// + /// It will also be used in `ToSchema` if present + #[derive(ToSchema, ToResponse)] + #[response( + description = "Override description for response", + content_type = "text/xml" + )] + #[response( + example = json!({"name": "the name"}), + headers( + ("csrf-token", description = "response csrf token"), + ("random-id" = i32) + ) + )] + #[allow(unused)] + struct Person { + name: String, + } + let (name, v) = <Person as fastapi::ToResponse>::response(); + let value = serde_json::to_value(v).unwrap(); + + assert_eq!("Person", name); + assert_json_eq!( + value, + json!({ + "content": { + "text/xml": { + "example": { + "name": "the name" + }, + "schema": { + "description": "This is description\n\nIt will also be used in `ToSchema` if present", + "properties": { + "name": { + "type": "string" + } + }, + "type": "object", + "required": ["name"] + } + } + }, + "description": "Override description for response", + "headers": { + "csrf-token": { + "description": "response csrf token", + "schema": { + "type": "string" + } + }, + "random-id": { + "schema": { + "type": "integer", + "format": "int32" + } + } + } + }) + ) +} + +#[test] +fn derive_response_multiple_examples() { + #[derive(ToSchema, ToResponse)] + #[response(examples( + ("Person1" = (value = json!({"name": "name1"}))), + ("Person2" = (value = json!({"name": "name2"}))) + ))] + #[allow(unused)] + struct Person { + name: String, + } + let (name, v) = <Person as fastapi::ToResponse>::response(); + let value = serde_json::to_value(v).unwrap(); + + assert_eq!("Person", name); + assert_json_eq!( + value, + json!({ + "content": { + "application/json": { + "examples": { + "Person1": { + "value": { + "name": "name1" + } + }, + "Person2": { + "value": { + "name": "name2" + } + } + }, + "schema": { + "properties": { + "name": { + "type": "string" + } + }, + "type": "object", + "required": ["name"] + } + }, + }, + "description": "" + }) + ) +} + +#[test] +fn derive_response_with_enum_contents() { + #[derive(fastapi::ToSchema)] + #[allow(unused)] + struct Admin { + name: String, + } + #[allow(unused)] + #[derive(fastapi::ToSchema)] + struct Moderator { + name: String, + } + #[derive(ToSchema, ToResponse)] + #[allow(unused)] + enum Person { + #[response(examples( + ("Person1" = (value = json!({"name": "name1"}))), + ("Person2" = (value = json!({"name": "name2"}))) + ))] + Admin(#[content("application/json/1")] Admin), + #[response(example = json!({"name": "name3"}))] + Moderator(#[content("application/json/2")] Moderator), + } + let (name, v) = <Person as fastapi::ToResponse>::response(); + let value = serde_json::to_value(v).unwrap(); + + assert_eq!("Person", name); + assert_json_eq!( + value, + json!({ + "content": { + "application/json/1": { + "examples": { + "Person1": { + "value": { + "name": "name1" + } + }, + "Person2": { + "value": { + "name": "name2" + } + } + }, + "schema": { + "$ref": "#/components/schemas/Admin" + } + }, + "application/json/2": { + "example": { + "name": "name3" + }, + "schema": { + "$ref": "#/components/schemas/Moderator" + } + } + }, + "description": "" + }) + ) +} + +#[test] +fn derive_response_with_enum_contents_inlined() { + #[allow(unused)] + #[derive(ToSchema)] + struct Admin { + name: String, + } + + #[derive(ToSchema)] + #[allow(unused)] + struct Moderator { + name: String, + } + #[derive(ToSchema, ToResponse)] + #[allow(unused)] + enum Person { + #[response(examples( + ("Person1" = (value = json!({"name": "name1"}))), + ("Person2" = (value = json!({"name": "name2"}))) + ))] + Admin( + #[content("application/json/1")] + #[to_schema] + Admin, + ), + #[response(example = json!({"name": "name3"}))] + Moderator( + #[content("application/json/2")] + #[to_schema] + Moderator, + ), + } + let (name, v) = <Person as fastapi::ToResponse>::response(); + let value = serde_json::to_value(v).unwrap(); + + assert_eq!("Person", name); + assert_json_eq!( + value, + json!({ + "content": { + "application/json/1": { + "examples": { + "Person1": { + "value": { + "name": "name1" + } + }, + "Person2": { + "value": { + "name": "name2" + } + } + }, + "schema": { + "properties": { + "name": { + "type": "string" + } + }, + "required": ["name"], + "type": "object" + } + }, + "application/json/2": { + "example": { + "name": "name3" + }, + "schema": { + "properties": { + "name": { + "type": "string" + } + }, + "required": ["name"], + "type": "object" + } + } + }, + "description": "" + }) + ) +} + +#[test] +fn derive_response_with_unit_type() { + #[derive(ToSchema, ToResponse)] + #[allow(unused)] + struct PersonSuccessResponse; + + let (name, v) = <PersonSuccessResponse as fastapi::ToResponse>::response(); + let value = serde_json::to_value(v).unwrap(); + + assert_eq!("PersonSuccessResponse", name); + assert_json_eq!( + value, + json!({ + "description": "" + }) + ) +} + +#[test] +fn derive_response_with_inline_unnamed_schema() { + #[allow(unused)] + #[derive(ToSchema)] + struct Person { + name: String, + } + #[derive(ToResponse)] + #[allow(unused)] + struct PersonSuccessResponse(#[to_schema] Vec<Person>); + + let (name, v) = <PersonSuccessResponse as fastapi::ToResponse>::response(); + let value = serde_json::to_value(v).unwrap(); + + assert_eq!("PersonSuccessResponse", name); + assert_json_eq!( + value, + json!({ + "content": { + "application/json": { + "schema": { + "items": { + "properties": { + "name": { + "type": "string" + } + }, + "required": ["name"], + "type": "object", + }, + "type": "array" + } + }, + }, + "description": "" + }) + ) +} + +macro_rules! into_responses { + ( $(#[$meta:meta])* $key:ident $ident:ident $($tt:tt)* ) => { + { + #[derive(fastapi::IntoResponses)] + $(#[$meta])* + #[allow(unused)] + $key $ident $( $tt )* + + let responses = <$ident as fastapi::IntoResponses>::responses(); + serde_json::to_value(responses).unwrap() + } + }; +} + +#[test] +fn derive_into_responses_inline_named_struct_response() { + let responses = into_responses! { + /// This is success response + #[response(status = 200)] + struct SuccessResponse { + value: String, + } + }; + + assert_json_eq!( + responses, + json!({ + "200": { + "content": { + "application/json": { + "schema": { + "description": "This is success response", + "properties": { + "value": { + "type": "string" + }, + }, + "required": ["value"], + "type": "object" + } + } + }, + "description": "This is success response" + } + }) + ) +} + +#[test] +fn derive_into_responses_unit_struct() { + let responses = into_responses! { + /// Not found response + #[response(status = NOT_FOUND)] + struct NotFound; + }; + + assert_json_eq!( + responses, + json!({ + "404": { + "description": "Not found response" + } + }) + ) +} + +#[test] +fn derive_into_responses_unnamed_struct_inline_schema() { + #[derive(fastapi::ToSchema)] + #[allow(unused)] + struct Foo { + bar: String, + } + + let responses = into_responses! { + #[response(status = 201)] + struct CreatedResponse(#[to_schema] Foo); + }; + + assert_json_eq!( + responses, + json!({ + "201": { + "content": { + "application/json": { + "schema": { + "properties": { + "bar": { + "type": "string" + }, + }, + "required": ["bar"], + "type": "object" + } + } + }, + "description": "" + } + }) + ) +} + +#[test] +fn derive_into_responses_unnamed_struct_with_primitive_schema() { + let responses = into_responses! { + #[response(status = 201)] + struct CreatedResponse(String); + }; + + assert_json_eq!( + responses, + json!({ + "201": { + "content": { + "text/plain": { + "schema": { + "type": "string", + } + } + }, + "description": "" + } + }) + ) +} + +#[test] +fn derive_into_responses_unnamed_struct_ref_schema() { + #[derive(fastapi::ToSchema)] + #[allow(unused)] + struct Foo { + bar: String, + } + + let responses = into_responses! { + #[response(status = 201)] + struct CreatedResponse(Foo); + }; + + assert_json_eq!( + responses, + json!({ + "201": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Foo", + } + } + }, + "description": "" + } + }) + ) +} + +#[test] +fn derive_into_responses_unnamed_struct_ref_response() { + #[derive(fastapi::ToResponse)] + #[allow(unused)] + struct Foo { + bar: String, + } + + let responses = into_responses! { + #[response(status = 201)] + struct CreatedResponse(#[ref_response] Foo); + }; + + assert_json_eq!( + responses, + json!({ + "201": { + "$ref": "#/components/responses/Foo" + } + }) + ) +} + +#[test] +fn derive_into_responses_unnamed_struct_to_response() { + #[derive(fastapi::ToResponse)] + #[allow(unused)] + struct Foo { + bar: String, + } + + let responses = into_responses! { + #[response(status = 201)] + struct CreatedResponse(#[to_response] Foo); + }; + + assert_json_eq!( + responses, + json!({ + "201": { + "content": { + "application/json": { + "schema": { + "properties": { + "bar": { + "type": "string" + } + }, + "required": ["bar"], + "type": "object", + } + } + }, + "description": "" + } + }) + ) +} + +#[test] +fn derive_into_responses_enum_with_multiple_responses() { + #[derive(fastapi::ToSchema)] + #[allow(unused)] + struct BadRequest { + value: String, + } + + #[derive(fastapi::ToResponse)] + #[allow(unused)] + struct Response { + message: String, + } + + let responses = into_responses! { + enum UserResponses { + /// Success response + #[response(status = 200)] + Success { value: String }, + + #[response(status = 404)] + NotFound, + + #[response(status = 400)] + BadRequest(BadRequest), + + #[response(status = 500)] + ServerError(#[ref_response] Response), + + #[response(status = 418)] + TeaPot(#[to_response] Response), + } + }; + + assert_json_eq!( + responses, + json!({ + "200": { + "content": { + "application/json": { + "schema": { + "properties": { + "value": { + "type": "string" + } + }, + "description": "Success response", + "required": ["value"], + "type": "object", + } + } + }, + "description": "Success response" + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BadRequest" + } + } + }, + "description": "", + }, + "404": { + "description": "" + }, + "418": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "type": "string" + } + }, + "required": ["message"], + "type": "object", + } + } + }, + "description": "", + }, + "500": { + "$ref": "#/components/responses/Response" + } + }) + ) +} diff --git a/fastapi-gen/tests/schema_derive_test.rs b/fastapi-gen/tests/schema_derive_test.rs new file mode 100644 index 0000000..fc462fe --- /dev/null +++ b/fastapi-gen/tests/schema_derive_test.rs @@ -0,0 +1,6129 @@ +use std::{borrow::Cow, cell::RefCell, collections::HashMap, marker::PhantomData}; + +use assert_json_diff::{assert_json_eq, assert_json_matches, CompareMode, Config, NumericMode}; +use fastapi::openapi::{Object, ObjectBuilder}; +use fastapi::{OpenApi, ToSchema}; +use serde::Serialize; +use serde_json::{json, Value}; + +mod common; + +macro_rules! api_doc { + ( $(#[$meta:meta])* $key:ident $ident:ident $($tt:tt)* ) => { + { + #[derive(ToSchema)] + $(#[$meta])* + #[allow(unused)] + $key $ident $( $tt )* + + let schema = api_doc!( @schema $ident $($tt)* ); + serde_json::to_value(schema).unwrap() + } + }; + ( @schema $ident:ident < $($life:lifetime , )? $generic:ident > $($tt:tt)* ) => { + <$ident<$generic> as fastapi::PartialSchema>::schema() + }; + ( @schema $ident:ident $($tt:tt)* ) => { + <$ident as fastapi::PartialSchema>::schema() + }; +} + +#[test] +fn derive_map_type() { + let map = api_doc! { + struct Map { + map: HashMap<String, String>, + } + }; + + assert_value! { map=> + "properties.map.additionalProperties.type" = r#""string""#, "Additional Property Type" + }; +} + +#[test] +fn derive_map_ref() { + #[derive(ToSchema)] + #[allow(unused)] + enum Foo { + Variant, + } + + let map = api_doc! { + struct Map { + map: HashMap<String, Foo>, + #[schema(inline)] + map2: HashMap<String, Foo> + } + }; + + assert_json_eq!( + map, + json!({ + "properties": { + "map": { + "propertyNames": { + "type": "string" + }, + "additionalProperties": { + "$ref": "#/components/schemas/Foo" + }, + "type": "object", + }, + "map2": { + "propertyNames": { + "type": "string" + }, + "additionalProperties": { + "type": "string", + "enum": ["Variant"] + }, + "type": "object" + } + }, + "required": ["map", "map2"], + "type": "object" + }) + ) +} + +#[test] +fn derive_map_free_form_property() { + let map = api_doc! { + struct Map { + #[schema(additional_properties)] + map: HashMap<String, String>, + } + }; + + assert_json_eq!( + map, + json!({ + "properties": { + "map": { + "additionalProperties": true, + "type": "object", + }, + }, + "required": ["map"], + "type": "object" + }) + ) +} + +#[test] +fn derive_flattened_map_string_property() { + let map = api_doc! { + #[derive(Serialize)] + struct Map { + #[serde(flatten)] + map: HashMap<String, String>, + } + }; + + assert_json_eq!( + map, + json!({ + "additionalProperties": {"type": "string"}, + "type": "object" + }) + ) +} + +#[test] +fn derive_flattened_map_ref_property() { + #[derive(Serialize, ToSchema)] + #[allow(unused)] + enum Foo { + Variant, + } + + let map = api_doc! { + #[derive(Serialize)] + struct Map { + #[serde(flatten)] + map: HashMap<String, Foo>, + } + }; + + assert_json_eq!( + map, + json!({ + "additionalProperties": {"$ref": "#/components/schemas/Foo"}, + "type": "object" + }) + ) +} + +#[test] +fn derive_enum_with_additional_properties_success() { + let mode = api_doc! { + #[schema(default = "Mode1", example = "Mode2")] + enum Mode { + Mode1, Mode2 + } + }; + + assert_value! {mode=> + "default" = r#""Mode1""#, "Mode default" + "example" = r#""Mode2""#, "Mode example" + "enum" = r#"["Mode1","Mode2"]"#, "Mode enum variants" + "type" = r#""string""#, "Mode type" + }; +} + +#[test] +fn derive_enum_with_defaults_success() { + let mode = api_doc! { + enum Mode { + Mode1, + Mode2 + } + }; + + assert_value! {mode=> + "enum" = r#"["Mode1","Mode2"]"#, "Mode enum variants" + "type" = r#""string""#, "Mode type" + }; + assert_value! {mode=> + "default" = Value::Null, "Mode default" + "example" = Value::Null, "Mode example" + } +} + +#[test] +fn derive_enum_with_with_custom_default_fn_success() { + let mode = api_doc! { + #[schema(default = mode_custom_default_fn)] + enum Mode { + Mode1, + Mode2 + } + }; + + assert_value! {mode=> + "default" = r#""Mode2""#, "Mode default" + "enum" = r#"["Mode1","Mode2"]"#, "Mode enum variants" + "type" = r#""string""#, "Mode type" + }; + assert_value! {mode=> + "example" = Value::Null, "Mode example" + } +} + +fn mode_custom_default_fn() -> String { + "Mode2".to_string() +} + +#[test] +fn derive_struct_with_defaults_success() { + let book = api_doc! { + struct Book { + name: String, + hash: String, + } + }; + + assert_value! {book=> + "type" = r#""object""#, "Book type" + "properties.name.type" = r#""string""#, "Book name type" + "properties.hash.type" = r#""string""#, "Book hash type" + "required" = r#"["name","hash"]"#, "Book required fields" + }; +} + +#[test] +fn derive_struct_with_custom_properties_success() { + let book = api_doc! { + struct Book { + #[schema(default = String::default)] + name: String, + #[schema( + default = "testhash", + example = "base64 text", + format = Byte, + )] + hash: String, + } + }; + + assert_value! {book=> + "type" = r#""object""#, "Book type" + "properties.name.type" = r#""string""#, "Book name type" + "properties.name.default" = r#""""#, "Book name default" + "properties.hash.type" = r#""string""#, "Book hash type" + "properties.hash.format" = r#""byte""#, "Book hash format" + "properties.hash.example" = r#""base64 text""#, "Book hash example" + "properties.hash.default" = r#""testhash""#, "Book hash default" + "required" = r#"["name","hash"]"#, "Book required fields" + }; +} + +#[test] +fn derive_struct_with_default_attr() { + let book = api_doc! { + #[schema(default)] + struct Book { + name: String, + #[schema(default = 0)] + id: u64, + year: u64, + hash: String, + } + + impl Default for Book { + fn default() -> Self { + Self { + name: "No name".to_string(), + id: 999, + year: 2020, + hash: "Test hash".to_string(), + } + } + } + }; + + assert_value! { book => + "properties.name.default" = r#""No name""#, "Book name default" + "properties.id.default" = r#"0"#, "Book id default" + "properties.year.default" = r#"2020"#, "Book year default" + "properties.hash.default" = r#""Test hash""#, "Book hash default" + }; +} + +#[test] +fn derive_struct_with_default_attr_field() { + #[derive(ToSchema)] + struct Book; + let owner = api_doc! { + struct Owner { + #[schema(default = json!({ "name": "Dune" }))] + favorite_book: Book, + #[schema(default = json!([{ "name": "The Fellowship Of The Ring" }]))] + books: Vec<Book>, + #[schema(default = json!({ "National Library": { "name": "The Stranger" } }))] + leases: HashMap<String, Book>, + #[schema(default = json!({ "name": "My Book" }))] + authored: Option<Book>, + } + }; + + assert_json_eq!( + owner, + json!({ + "properties": { + "favorite_book": { + "oneOf": [ + { + "$ref": "#/components/schemas/Book", + }, + ], + "default": { + "name": "Dune", + }, + }, + "books": { + "items": { + "$ref": "#/components/schemas/Book", + }, + "type": "array", + "default": [ + { + "name": "The Fellowship Of The Ring" + } + ] + }, + "leases": { + "propertyNames": { + "type": "string" + }, + "additionalProperties": { + "$ref": "#/components/schemas/Book", + }, + "default": { + "National Library": { + "name": "The Stranger", + }, + }, + "type": "object", + }, + "authored": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/Book", + }, + ], + "default": { + "name": "My Book", + } + }, + }, + "required": [ + "favorite_book", + "books", + "leases", + ], + "type": "object", + }) + ); +} + +#[test] +fn derive_struct_with_serde_default_attr() { + let book = api_doc! { + #[derive(serde::Deserialize)] + #[serde(default)] + struct Book { + name: String, + #[schema(default = 0)] + id: u64, + year: u64, + hash: String, + } + + impl Default for Book { + fn default() -> Self { + Self { + name: "No name".to_string(), + id: 999, + year: 2020, + hash: "Test hash".to_string(), + } + } + } + }; + + assert_value! { book => + "properties.name.default" = r#""No name""#, "Book name default" + "properties.id.default" = r#"0"#, "Book id default" + "properties.year.default" = r#"2020"#, "Book year default" + "properties.hash.default" = r#""Test hash""#, "Book hash default" + }; +} + +#[test] +fn derive_struct_with_optional_properties() { + #[derive(ToSchema)] + struct Book; + let owner = api_doc! { + struct Owner { + #[schema(default = 1)] + id: i64, + enabled: Option<bool>, + books: Option<Vec<Book>>, + metadata: Option<HashMap<String, String>>, + optional_book: Option<Book> + } + }; + + assert_json_eq!( + owner, + json!({ + "properties": { + "id": { + "type": "integer", + "format": "int64", + "default": 1, + }, + "enabled": { + "type": ["boolean", "null"], + }, + "books": { + "items": { + "$ref": "#/components/schemas/Book", + }, + "type": ["array", "null"] + }, + "metadata": { + "type": ["object", "null"], + "propertyNames": { + "type": "string" + }, + "additionalProperties": { + "type": "string" + } + }, + "optional_book": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/Book" + } + ] + } + }, + "required": [ + "id", + ], + "type": "object" + }) + ); +} + +#[test] +fn derive_struct_with_comments() { + #[derive(ToSchema)] + struct Foobar; + let account = api_doc! { + /// This is user account dto object + /// + /// Detailed documentation here. + /// More than the first line is added to the description as well. + struct Account { + /// Database autogenerated id + id: i64, + /// Users username + username: String, + /// Role ids + role_ids: Vec<i32>, + /// Foobars + foobars: Vec<Foobar>, + /// Map description + map: HashMap<String, String> + } + }; + + assert_json_eq!( + account, + json!({ + "description": "This is user account dto object\n\nDetailed documentation here.\nMore than the first line is added to the description as well.", + "properties": { + "foobars": { + "description": "Foobars", + "type": "array", + "items": { + "$ref": "#/components/schemas/Foobar" + } + }, + "id": { + "type": "integer", + "format": "int64", + "description": "Database autogenerated id", + }, + "role_ids": { + "description": "Role ids", + "type": "array", + "items": { + "type": "integer", + "format": "int32", + } + }, + "username": { + "type": "string", + "description": "Users username", + }, + "map": { + "description": "Map description", + "type": "object", + "propertyNames": { + "type": "string" + }, + "additionalProperties": { + "type": "string" + }, + } + }, + "required": ["id", "username", "role_ids", "foobars", "map"], + "type": "object" + }) + ) +} + +#[test] +fn derive_enum_with_comments_success() { + let account = api_doc! { + /// This is user account status enum + /// + /// Detailed documentation here. + /// More than the first line is added to the description as well. + enum AccountStatus { + /// When user is valid to login, these enum variant level docs are omitted!!!!! + /// Since the OpenAPI spec does not have a place to put such information. + Enabled, + /// Login failed too many times + Locked, + Disabled + } + }; + + assert_value! {account=> + "description" = r#""This is user account status enum\n\nDetailed documentation here.\nMore than the first line is added to the description as well.""#, "AccountStatus description" + } +} + +#[test] +fn derive_struct_unnamed_field_single_value_type_success() { + let point = api_doc! { + struct Point(f32); + }; + + assert_value! {point=> + "type" = r#""number""#, "Point type" + "format" = r#""float""#, "Point format" + } +} + +#[test] +fn derive_struct_unnamed_fields_tuple_with_same_type_success() { + let point = api_doc! { + /// Contains x and y coordinates + /// + /// Coordinates are used to pinpoint location on a map + struct Point(f64, f64); + }; + + assert_value! {point=> + "type" = r#""array""#, "Point type" + "items.type" = r#""number""#, "Point items type" + "items.format" = r#""double""#, "Point items format" + "items.description" = r#""Contains x and y coordinates\n\nCoordinates are used to pinpoint location on a map""#, "Point items description" + "maxItems" = r#"2"#, "Wrapper max items" + "minItems" = r#"2"#, "Wrapper min items" + } +} + +#[test] +fn derive_struct_unnamed_fields_tuple_with_different_types_success() { + let point = api_doc! { + struct Point(f64, String); + }; + + assert_value! {point=> + "type" = r#""array""#, "Point type" + "items.type" = r#""object""#, "Point items type" + "items.format" = r#"null"#, "Point items format" + } +} + +#[test] +fn derive_struct_unnamed_field_with_generic_types_success() { + let point = api_doc! { + struct Wrapper(Option<String>); + }; + + assert_value! {point=> + "type" = r#"["string","null"]"#, "Wrapper type" + } +} + +#[test] +fn derive_struct_unnamed_field_with_nested_generic_type_success() { + let point = api_doc! { + /// Some description + struct Wrapper(Option<Vec<i32>>); + }; + + assert_value! {point=> + "type" = r#"["array","null"]"#, "Wrapper type" + "items.type" = r#""integer""#, "Wrapper items type" + "items.format" = r#""int32""#, "Wrapper items format" + "description" = r#""Some description""#, "Wrapper description" + } +} + +#[test] +fn derive_struct_unnamed_field_with_multiple_nested_generic_type_success() { + let point = api_doc! { + /// Some documentation + struct Wrapper(Option<Vec<i32>>, String); + }; + + assert_value! {point=> + "type" = r#""array""#, "Wrapper type" + "items.type" = r#""object""#, "Wrapper items type" + "items.format" = r#"null"#, "Wrapper items format" + "description" = r#""Some documentation""#, "Wrapper description" + } +} + +#[test] +fn derive_struct_unnamed_field_vec_type_success() { + let point = api_doc! { + /// Some documentation + /// more documentation + struct Wrapper(Vec<i32>); + }; + + assert_value! {point=> + "type" = r#""array""#, "Wrapper type" + "items.type" = r#""integer""#, "Wrapper items type" + "items.format" = r#""int32""#, "Wrapper items format" + "maxItems" = r#"null"#, "Wrapper max items" + "minItems" = r#"null"#, "Wrapper min items" + "description" = r#""Some documentation\nmore documentation""#, "Wrapper description" + } +} + +#[test] +fn derive_struct_unnamed_field_single_value_default_success() { + let point = api_doc! { + #[schema(default)] + struct Point(f32); + + impl Default for Point { + fn default() -> Self { + Self(3.5) + } + } + }; + + assert_value! {point=> + "type" = r#""number""#, "Point type" + "format" = r#""float""#, "Point format" + "default" = r#"3.5"#, "Point default" + } +} + +#[test] +fn derive_struct_unnamed_field_multiple_value_default_ignored() { + let point = api_doc! { + #[schema(default)] + struct Point(f32, f32); + + impl Default for Point { + fn default() -> Self { + Self(3.5, 6.4) + } + } + }; + // Default values shouldn't be assigned as the struct is represented + // as an array + assert!(!point.to_string().contains("default")) +} + +#[test] +fn derive_struct_nested_vec_success() { + let vecs = api_doc! { + struct VecTest { + vecs: Vec<Vec<String>> + } + }; + + assert_value! {vecs=> + "properties.vecs.type" = r#""array""#, "Vecs property type" + "properties.vecs.items.type" = r#""array""#, "Vecs property items type" + "properties.vecs.items.items.type" = r#""string""#, "Vecs property items item type" + "type" = r#""object""#, "Property type" + "required.[0]" = r#""vecs""#, "Required properties" + } + common::assert_json_array_len(vecs.get("required").unwrap(), 1); +} + +#[test] +fn derive_struct_with_example() { + let pet = api_doc! { + #[schema(example = json!({"name": "bob the cat", "age": 8}))] + struct Pet { + name: String, + age: i32 + } + }; + + assert_value! {pet=> + "example.name" = r#""bob the cat""#, "Pet example name" + "example.age" = r#"8"#, "Pet example age" + } +} + +#[test] +fn derive_struct_with_deprecated() { + #[allow(deprecated)] + let pet = api_doc! { + #[deprecated] + struct Pet { + name: String, + #[deprecated] + age: i32 + } + }; + + assert_value! {pet=> + "deprecated" = r#"true"#, "Pet deprecated" + "properties.name.type" = r#""string""#, "Pet properties name type" + "properties.name.deprecated" = r#"null"#, "Pet properties name deprecated" + "properties.age.type" = r#""integer""#, "Pet properties age type" + "properties.age.deprecated" = r#"true"#, "Pet properties age deprecated" + "example" = r#"null"#, "Pet example" + } +} + +#[test] +fn derive_struct_with_schema_deprecated() { + let pet = api_doc! { + #[schema(deprecated)] + struct Pet { + name: String, + #[schema(deprecated)] + age: i32 + } + }; + + assert_value! {pet=> + "deprecated" = r#"true"#, "Pet deprecated" + "properties.name.type" = r#""string""#, "Pet properties name type" + "properties.name.deprecated" = r#"null"#, "Pet properties name deprecated" + "properties.age.type" = r#""integer""#, "Pet properties age type" + "properties.age.deprecated" = r#"true"#, "Pet properties age deprecated" + "example" = r#"null"#, "Pet example" + } +} + +#[test] +fn derive_unnamed_struct_deprecated_success() { + #[allow(deprecated)] + let pet_age = api_doc! { + #[deprecated] + #[schema(example = 8)] + struct PetAge(u64); + }; + + assert_value! {pet_age=> + "deprecated" = r#"true"#, "PetAge deprecated" + "example" = r#"8"#, "PetAge example" + } +} + +#[test] +fn derive_unnamed_struct_schema_deprecated_success() { + let pet_age = api_doc! { + #[schema(deprecated, example = 8)] + struct PetAge(u64); + }; + + assert_value! {pet_age=> + "deprecated" = r#"true"#, "PetAge deprecated" + "example" = r#"8"#, "PetAge example" + } +} + +#[test] +fn derive_unnamed_struct_example_json_array_success() { + let pet_age = api_doc! { + #[schema(example = "0", default = i64::default)] + struct PetAge(i64, i64); + }; + + assert_value! {pet_age=> + "type" = r#""array""#, "PetAge type" + "items.example" = r#""0""#, "PetAge example" + "items.default" = r#"0"#, "PetAge default" + "items.type" = r#""integer""#, "PetAge default" + "items.format" = r#""int64""#, "PetAge default" + "maxItems" = r#"2"#, "PetAge max items" + "minItems" = r#"2"#, "PetAge min items" + } +} + +#[test] +fn derive_enum_with_deprecated() { + #[allow(deprecated)] + let mode = api_doc! { + #[deprecated] + enum Mode { + Mode1, Mode2 + } + }; + + assert_value! {mode=> + "enum" = r#"["Mode1","Mode2"]"#, "Mode enum variants" + "type" = r#""string""#, "Mode type" + "deprecated" = r#"true"#, "Mode deprecated" + }; +} + +#[test] +fn derive_enum_with_schema_deprecated() { + let mode = api_doc! { + #[schema(deprecated)] + enum Mode { + Mode1, Mode2 + } + }; + + assert_value! {mode=> + "enum" = r#"["Mode1","Mode2"]"#, "Mode enum variants" + "type" = r#""string""#, "Mode type" + "deprecated" = r#"true"#, "Mode deprecated" + }; +} + +#[test] +fn derive_struct_with_lifetime_generics() { + #[allow(unused)] + let greeting = api_doc! { + struct Greeting<'a> { + greeting: &'a str + } + }; + + assert_value! {greeting=> + "properties.greeting.type" = r###""string""###, "Greeting greeting field type" + }; +} + +#[test] +fn derive_struct_with_cow() { + #[allow(unused)] + let greeting = api_doc! { + struct Greeting<'a> { + greeting: Cow<'a, str> + } + }; + + common::assert_json_array_len(greeting.get("required").unwrap(), 1); + assert_value! {greeting=> + "properties.greeting.type" = r###""string""###, "Greeting greeting field type" + "required.[0]" = r###""greeting""###, "Greeting required" + }; +} + +#[test] +fn derive_with_box_and_refcell() { + #[allow(unused)] + #[derive(ToSchema)] + struct Foo { + name: &'static str, + } + + let greeting = api_doc! { + struct Greeting { + foo: Box<Foo>, + ref_cell_foo: RefCell<Foo> + } + }; + + common::assert_json_array_len(greeting.get("required").unwrap(), 2); + assert_value! {greeting=> + "properties.foo.$ref" = r###""#/components/schemas/Foo""###, "Greeting foo field" + "properties.ref_cell_foo.$ref" = r###""#/components/schemas/Foo""###, "Greeting ref_cell_foo field" + "required.0" = r###""foo""###, "Greeting required 0" + "required.1" = r###""ref_cell_foo""###, "Greeting required 1" + }; +} + +#[test] +fn derive_struct_with_inline() { + #[derive(fastapi::ToSchema)] + #[allow(unused)] + struct Foo { + name: &'static str, + } + + let greeting = api_doc! { + struct Greeting { + #[schema(inline)] + foo1: Foo, + #[schema(inline)] + foo2: Option<Foo>, + #[schema(inline)] + foo3: Option<Box<Foo>>, + #[schema(inline)] + foo4: Vec<Foo>, + } + }; + + assert_json_eq!( + &greeting, + json!({ + "properties": { + "foo1": { + "properties": { + "name": { + "type": "string" + }, + }, + "required": [ + "name" + ], + "type": "object" + }, + "foo2": { + "oneOf": [ + { + "type": "null" + }, + { + "properties": { + "name": { + "type": "string" + }, + }, + "required": [ + "name" + ], + "type": "object" + } + ] + }, + "foo3": { + "oneOf": [ + { + "type": "null" + }, + { + "properties": { + "name": { + "type": "string" + }, + }, + "required": [ + "name" + ], + "type": "object" + } + ] + }, + "foo4": { + "items": { + "properties": { + "name": { + "type": "string" + }, + }, + "required": [ + "name" + ], + "type": "object" + }, + "type": "array" + }, + }, + "required": [ + "foo1", + "foo4", + ], + "type": "object" + }) + ); +} + +#[test] +fn derive_simple_enum() { + let value: Value = api_doc! { + #[derive(Serialize)] + enum Bar { + A, + B, + C, + } + }; + + assert_json_eq!( + value, + json!({ + "enum": [ + "A", + "B", + "C", + ], + "type": "string", + }) + ); +} + +#[test] +fn derive_simple_enum_serde_tag() { + let value: Value = api_doc! { + #[derive(Serialize)] + #[serde(tag = "tag")] + enum Bar { + A, + B, + C, + } + }; + + assert_json_eq!( + value, + json!({ + "oneOf": [ + { + "type": "object", + "properties": { + "tag": { + "type": "string", + "enum": [ + "A", + ], + }, + }, + "required": [ + "tag", + ], + }, + { + "type": "object", + "properties": { + "tag": { + "type": "string", + "enum": [ + "B", + ], + }, + }, + "required": [ + "tag", + ], + }, + { + "type": "object", + "properties": { + "tag": { + "type": "string", + "enum": [ + "C", + ], + }, + }, + "required": [ + "tag", + ], + }, + ], + }) + ); +} + +#[test] +fn derive_simple_enum_serde_tag_with_flatten_content() { + #[derive(Serialize, ToSchema)] + #[allow(unused)] + struct Foo { + name: &'static str, + } + + let value: Value = api_doc! { + #[derive(Serialize)] + #[serde(tag = "tag")] + enum Bar { + One { + #[serde(flatten)] + foo: Foo, + }, + } + }; + + assert_json_eq!( + value, + json!({ + "oneOf": [ + { + "allOf": [ + { + "$ref": "#/components/schemas/Foo", + }, + { + "type": "object", + "properties": { + "tag": { + "type": "string", + "enum": [ + "One", + ], + }, + }, + "required": [ + "tag", + ], + }, + ], + }, + ], + }) + ); +} + +#[test] +fn derive_simple_enum_serde_untagged() { + let value: Value = api_doc! { + #[derive(Serialize)] + #[serde(untagged)] + enum Foo { + One, + Two, + } + }; + + assert_json_eq!( + value, + json!({ + "type": "null", + "default": null, + }) + ); +} + +#[test] +fn derive_struct_unnamed_field_reference_with_comment() { + #[derive(ToSchema, Serialize)] + struct Bar { + value: String, + } + + let value = api_doc! { + #[derive(Serialize)] + /// Since OpenAPI 3.1 the description can be applied to Ref types + struct Foo(Bar); + }; + + assert_json_eq!( + value, + json!({ + "$ref": "#/components/schemas/Bar", + "description": "Since OpenAPI 3.1 the description can be applied to Ref types" + }) + ); +} + +/// Derive a mixed enum with named and unnamed fields. +#[test] +fn derive_complex_unnamed_field_reference_with_comment() { + #[derive(Serialize, ToSchema)] + struct CommentedReference(String); + + let value: Value = api_doc! { + #[derive(Serialize)] + enum EnumWithReference { + /// Since OpenAPI 3.1 the comments can be added to the Ref types as well + UnnamedFieldWithCommentReference(CommentedReference), + } + }; + + assert_json_eq!( + value, + json!({ + "oneOf": [ + { + "type": "object", + "description": "Since OpenAPI 3.1 the comments can be added to the Ref types as well", + "properties": { + "UnnamedFieldWithCommentReference": { + "$ref": "#/components/schemas/CommentedReference", + "description": "Since OpenAPI 3.1 the comments can be added to the Ref types as well" + }, + }, + "required": ["UnnamedFieldWithCommentReference"], + }, + ], + }) + ); +} + +#[test] +fn derive_enum_with_unnamed_primitive_field_with_tag() { + let value: Value = api_doc! { + #[derive(Serialize)] + #[serde(tag = "tag")] + enum EnumWithReference { + Value(String), + } + }; + + assert_json_eq!( + value, + json!({ + "oneOf": [ + { + "type": "object", + "properties": { + "tag": { + "type": "string", + "enum": ["Value"] + }, + }, + "required": ["tag"] + }, + ], + }) + ); +} + +#[test] +fn derive_mixed_enum_with_schema_properties() { + let value: Value = api_doc! { + /// This is the description + #[derive(Serialize)] + #[schema(example = json!(EnumWithProperties::Variant2{name: String::from("foobar")}), + default = json!(EnumWithProperties::Variant{id: String::from("1")}))] + enum EnumWithProperties { + Variant { + id: String + }, + Variant2{ + name: String + } + } + }; + + assert_json_eq!( + value, + json!({ + "description": "This is the description", + "default": { + "Variant": { + "id": "1" + } + }, + "example": { + "Variant2": { + "name": "foobar" + } + }, + "oneOf": [ + { + "properties": { + "Variant": { + "properties": { + "id": { + "type": "string" + } + }, + "required": ["id"], + "type": "object" + } + }, + "required": ["Variant"], + "type": "object" + }, + { + "properties": { + "Variant2": { + "properties": { + "name": { + "type": "string" + } + }, + "required": ["name"], + "type": "object" + } + }, + "required": ["Variant2"], + "type": "object" + } + ] + }) + ) +} + +// TODO fixme https://github.com/nxpkg/fastapi/issues/285#issuecomment-1249625860 +#[test] +fn derive_enum_with_unnamed_single_field_with_tag() { + #[derive(Serialize, ToSchema)] + struct ReferenceValue(String); + + let value: Value = api_doc! { + #[derive(Serialize)] + #[serde(tag = "enum")] + enum EnumWithReference { + Value(ReferenceValue), + } + }; + + assert_json_eq!( + value, + json!({ + "oneOf": [ + { + "allOf": [ + { + "$ref": "#/components/schemas/ReferenceValue", + }, + { + "type": "object", + "properties": { + "enum": { + "type": "string", + "enum": ["Value"] + + }, + }, + "required": ["enum"] + }, + ], + } + ] + }) + ); +} + +#[test] +fn derive_enum_with_named_fields_with_reference_with_tag() { + #[derive(Serialize, ToSchema)] + struct ReferenceValue(String); + + let value: Value = api_doc! { + #[derive(Serialize)] + #[serde(tag = "enum")] + enum EnumWithReference { + Value { + field: ReferenceValue, + a: String + }, + UnnamedValue(ReferenceValue), + UnitValue, + } + }; + + assert_json_eq!( + value, + json!({ + "oneOf": [ + { + "properties": { + "a": { + "type": "string" + }, + "enum": { + "enum": [ + "Value" + ], + "type": "string" + }, + "field": { + "$ref": "#/components/schemas/ReferenceValue" + } + }, + "required": [ + "field", + "a", + "enum" + ], + "type": "object" + }, + { + "allOf": [ + { + "$ref": "#/components/schemas/ReferenceValue", + }, + { + "type": "object", + "properties": { + "enum": { + "type": "string", + "enum": ["UnnamedValue"] + + }, + }, + "required": ["enum"] + } + ], + }, + { + "properties": { + "enum": { + "enum": [ + "UnitValue" + ], + "type": "string" + } + }, + "required": [ + "enum" + ], + "type": "object" + } + ], + }) + ); +} + +#[test] +fn derive_mixed_enum() { + #[derive(Serialize, ToSchema)] + struct Foo(String); + + let value: Value = api_doc! { + #[derive(Serialize)] + enum Bar { + UnitValue, + NamedFields { + id: &'static str, + names: Option<Vec<String>> + }, + UnnamedFields(Foo), + } + }; + + assert_json_eq!( + value, + json!({ + "oneOf": [ + { + "type": "string", + "enum": [ + "UnitValue", + ], + }, + { + "type": "object", + "properties": { + "NamedFields": { + "type": "object", + "properties": { + "id": { + "type": "string", + }, + "names": { + "type": ["array", "null"], + "items": { + "type": "string", + }, + }, + }, + "required": [ + "id", + ], + }, + }, + "required": ["NamedFields"], + }, + { + "type": "object", + "properties": { + "UnnamedFields": { + "$ref": "#/components/schemas/Foo", + }, + }, + "required": ["UnnamedFields"], + }, + ], + }) + ); +} + +#[test] +fn derive_mixed_enum_deprecated_variants() { + #![allow(deprecated)] + + #[derive(Serialize, ToSchema)] + struct Foo(String); + + let value: Value = api_doc! { + #[derive(Serialize)] + enum Bar { + #[schema(deprecated)] + UnitValue, + #[deprecated] + NamedFields { + id: &'static str, + names: Option<Vec<String>> + }, + #[deprecated] + UnnamedFields(Foo), + } + }; + + assert_json_eq!( + value, + json!({ + "oneOf": [ + { + "deprecated": true, + "type": "string", + "enum": [ + "UnitValue", + ], + }, + { + "deprecated": true, + "type": "object", + "properties": { + "NamedFields": { + "deprecated": true, + "type": "object", + "properties": { + "id": { + "type": "string", + }, + "names": { + "type": ["array", "null"], + "items": { + "type": "string", + }, + }, + }, + "required": [ + "id", + ], + }, + }, + "required": ["NamedFields"], + }, + { + "deprecated": true, + "type": "object", + "properties": { + "UnnamedFields": { + "$ref": "#/components/schemas/Foo", + }, + }, + "required": ["UnnamedFields"], + }, + ], + }) + ); +} +#[test] +fn derive_mixed_enum_title() { + #[derive(Serialize, ToSchema)] + struct Foo(String); + + let value: Value = api_doc! { + #[derive(Serialize)] + enum Bar { + #[schema(title = "Unit")] + UnitValue, + #[schema(title = "Named")] + NamedFields { + id: &'static str, + }, + #[schema(title = "Unnamed")] + UnnamedFields(Foo), + } + }; + + assert_json_eq!( + value, + json!({ + "oneOf": [ + { + "type": "string", + "title": "Unit", + "enum": [ + "UnitValue", + ], + }, + { + "type": "object", + "title": "Named", + "properties": { + "NamedFields": { + "type": "object", + "properties": { + "id": { + "type": "string", + }, + }, + "required": [ + "id", + ], + }, + }, + "required": ["NamedFields"], + }, + { + "type": "object", + "title": "Unnamed", + "properties": { + "UnnamedFields": { + "$ref": "#/components/schemas/Foo", + }, + }, + "required": ["UnnamedFields"] + }, + ], + }) + ); +} + +#[test] +fn derive_mixed_enum_example() { + #[derive(Serialize, ToSchema)] + struct Foo(String); + + let value: Value = api_doc! { + #[derive(Serialize)] + enum EnumWithExample { + #[schema(example = "EX: Unit")] + UnitValue, + #[schema(example = "EX: Named")] + NamedFields { + #[schema(example = "EX: Named id field")] + id: &'static str, + }, + #[schema(example = "EX: Unnamed")] + UnnamedFields(Foo), + } + }; + + assert_json_eq!( + value, + json!({ + "oneOf": [ + { + "type": "string", + "example": "EX: Unit", + "enum": [ + "UnitValue", + ], + }, + { + "type": "object", + "example": "EX: Named", + "properties": { + "NamedFields": { + "type": "object", + "properties": { + "id": { + "type": "string", + "example": "EX: Named id field", + }, + }, + "required": [ + "id", + ], + }, + }, + "required": ["NamedFields"] + }, + { + "type": "object", + "example": "EX: Unnamed", + "properties": { + "UnnamedFields": { + "$ref": "#/components/schemas/Foo", + }, + }, + "required": ["UnnamedFields"] + }, + ], + }) + ); +} + +#[test] +fn derive_mixed_enum_serde_rename_all() { + #[derive(Serialize, ToSchema)] + struct Foo(String); + + let value: Value = api_doc! { + #[derive(Serialize)] + #[serde(rename_all = "snake_case")] + enum Bar { + UnitValue, + NamedFields { + id: &'static str, + names: Option<Vec<String>> + }, + UnnamedFields(Foo), + } + }; + + assert_json_eq!( + value, + json!({ + "oneOf": [ + { + "type": "string", + "enum": [ + "unit_value", + ], + }, + { + "type": "object", + "properties": { + "named_fields": { + "type": "object", + "properties": { + "id": { + "type": "string", + }, + "names": { + "type": ["array", "null"], + "items": { + "type": "string", + }, + }, + }, + "required": [ + "id", + ], + }, + }, + "required": ["named_fields"] + }, + { + "type": "object", + "properties": { + "unnamed_fields": { + "$ref": "#/components/schemas/Foo", + }, + }, + "required": ["unnamed_fields"] + }, + ], + }) + ); +} + +#[test] +fn derive_mixed_enum_serde_rename_variant() { + #[derive(Serialize, ToSchema)] + struct Foo(String); + + let value: Value = api_doc! { + #[derive(Serialize)] + enum Bar { + #[serde(rename = "renamed_unit_value")] + UnitValue, + #[serde(rename = "renamed_named_fields")] + NamedFields { + #[serde(rename = "renamed_id")] + id: &'static str, + #[serde(rename = "renamed_names")] + names: Option<Vec<String>> + }, + #[serde(rename = "renamed_unnamed_fields")] + UnnamedFields(Foo), + } + }; + + assert_json_eq!( + value, + json!({ + "oneOf": [ + { + "type": "string", + "enum": [ + "renamed_unit_value", + ], + }, + { + "type": "object", + "properties": { + "renamed_named_fields": { + "type": "object", + "properties": { + "renamed_id": { + "type": "string", + }, + "renamed_names": { + "type": [ "array", "null" ], + "items": { + "type": "string", + }, + }, + }, + "required": [ + "renamed_id", + ], + }, + }, + "required": ["renamed_named_fields"] + }, + { + "type": "object", + "properties": { + "renamed_unnamed_fields": { + "$ref": "#/components/schemas/Foo", + }, + }, + "required": ["renamed_unnamed_fields"] + }, + ], + }) + ); +} + +#[test] +fn derive_struct_custom_rename() { + let value: Value = api_doc! { + #[schema(rename_all = "SCREAMING-KEBAB-CASE")] + struct Post { + post_id: i64, + created_at: i64, + #[schema(rename = "post_comment")] + comment: String, + } + }; + + assert_json_eq!( + value, + json!({ + "properties": { + "POST-ID": { + "type": "integer", + "format": "int64", + }, + "CREATED-AT": { + "type": "integer", + "format": "int64", + }, + "post_comment": { + "type": "string", + }, + }, + "type": "object", + "required": [ + "POST-ID", + "CREATED-AT", + "post_comment" + ] + }) + ) +} + +#[test] +fn derive_mixed_enum_custom_rename() { + let value: Value = api_doc! { + #[schema(rename_all = "UPPERCASE")] + enum PostType { + NewPost(String), + + #[schema(rename = "update_post", rename_all = "PascalCase")] + Update { + post_id: i64, + created_at: i64, + #[schema(rename = "post_comment")] + comment: String, + }, + + RandomValue { + id: i64, + }, + } + }; + + assert_json_eq!( + value, + json!({ + "oneOf": [ + { + "properties": { + "NEWPOST": { + "type": "string" + } + }, + "required": ["NEWPOST"], + "type": "object", + }, + { + "properties": { + "update_post": { + "properties": { + "PostId": { + "type": "integer", + "format": "int64", + }, + "CreatedAt": { + "type": "integer", + "format": "int64", + }, + "post_comment": { + "type": "string", + }, + }, + "type": "object", + "required": [ + "PostId", + "CreatedAt", + "post_comment" + ] + } + }, + "required": ["update_post"], + "type": "object", + }, + { + "properties": { + "RANDOMVALUE": { + "properties": { + "id": { + "type": "integer", + "format": "int64", + }, + }, + "type": "object", + "required": [ + "id", + ] + } + }, + "required": ["RANDOMVALUE"], + "type": "object", + } + ] + }) + ) +} + +#[test] +fn derive_mixed_enum_use_serde_rename_over_custom_rename() { + let value: Value = api_doc! { + #[derive(serde::Deserialize)] + #[serde(rename_all = "lowercase")] + #[schema(rename_all = "UPPERCASE")] + enum Random { + #[serde(rename = "string_value")] + #[schema(rename = "custom_value")] + String(String), + + Number { + id: i32, + } + } + }; + + assert_json_eq!( + value, + json!({ + "oneOf": [ + { + "properties": { + "string_value": { + "type": "string", + }, + }, + "type": "object", + "required": ["string_value"] + }, + { + "properties": { + "number": { + "properties": { + "id": { + "type": "integer", + "format": "int32", + } + }, + "type": "object", + "required": ["id"] + } + }, + "type": "object", + "required": ["number"] + } + ] + }) + ) +} + +#[test] +fn derive_struct_with_title() { + let value: Value = api_doc! { + #[schema(title = "Post")] + struct Post { + id: i64, + } + }; + + assert_json_eq!( + value, + json!({ + "properties": { + "id": { + "type": "integer", + "format": "int64", + } + }, + "title": "Post", + "required": ["id"], + "type": "object", + }) + ) +} + +#[test] +fn derive_enum_with_title() { + let value: Value = api_doc! { + #[schema(title = "UserType")] + enum UserType { + Admin, + Moderator, + User, + } + }; + + assert_json_eq!( + value, + json!({ + "enum": ["Admin", "Moderator", "User"], + "title": "UserType", + "type": "string", + }) + ) +} + +#[test] +fn derive_mixed_enum_with_title() { + let value: Value = api_doc! { + enum UserType { + #[schema(title = "admin")] + Admin(String), + #[schema(title = "moderator")] + Moderator{id: i32}, + #[schema(title = "user")] + User, + } + }; + + assert_json_eq!( + value, + json!({ + "oneOf": [ + { + "properties": { + "Admin": { + "type": "string" + } + }, + "title": "admin", + "type": "object", + "required": ["Admin"] + }, + { + "properties": { + "Moderator": { + "properties": { + "id": { + "type": "integer", + "format": "int32", + } + }, + "required": ["id"], + "type": "object", + } + }, + "required": ["Moderator"], + "title": "moderator", + "type": "object", + }, + { + "enum": ["User"], + "title": "user", + "type": "string" + } + ] + }) + ) +} + +/// Derive a mixed enum with the serde `tag` container attribute applied for internal tagging. +/// Note that tuple fields are not supported. +#[test] +fn derive_mixed_enum_serde_tag() { + #[derive(Serialize)] + #[allow(dead_code)] + struct Foo(String); + + let value: Value = api_doc! { + #[derive(Serialize)] + #[serde(tag = "tag")] + enum Bar { + UnitValue, + NamedFields { + id: &'static str, + names: Option<Vec<String>> + }, + } + }; + + assert_json_eq!( + value, + json!({ + "oneOf": [ + { + "type": "object", + "properties": { + "tag": { + "type": "string", + "enum": [ + "UnitValue", + ], + }, + }, + "required": [ + "tag", + ], + }, + { + "type": "object", + "properties": { + "id": { + "type": "string", + }, + "names": { + "type": ["array", "null"], + "items": { + "type": "string", + }, + }, + "tag": { + "type": "string", + "enum": [ + "NamedFields", + ], + }, + }, + "required": [ + "id", + "tag", + ], + }, + ], + }) + ); +} + +#[test] +fn derive_serde_flatten() { + #[derive(Serialize, ToSchema)] + struct Metadata { + category: String, + total: u64, + } + + #[derive(Serialize, ToSchema)] + struct Record { + amount: i64, + description: String, + #[serde(flatten)] + metadata: Metadata, + } + + #[derive(Serialize, ToSchema)] + struct Pagination { + page: i64, + next_page: i64, + per_page: i64, + } + + // Single flatten field + let value: Value = api_doc! { + #[derive(Serialize)] + struct Record { + amount: i64, + description: String, + #[serde(flatten)] + metadata: Metadata, + } + }; + + assert_json_eq!( + value, + json!({ + "allOf": [ + { + "$ref": "#/components/schemas/Metadata" + }, + { + "type": "object", + "properties": { + "amount": { + "type": "integer", + "format": "int64" + }, + "description": { + "type": "string", + }, + }, + "required": [ + "amount", + "description" + ], + }, + ] + }) + ); + + // Multiple flatten fields, with field that contain flatten as well. + // Record contain Metadata that is flatten as well, but it doesn't matter + // here as the generated spec will reference to Record directly. + let value: Value = api_doc! { + #[derive(Serialize)] + struct NamedFields { + id: &'static str, + #[serde(flatten)] + record: Record, + #[serde(flatten)] + pagination: Pagination + } + }; + + assert_json_eq!( + value, + json!({ + "allOf": [ + { + "$ref": "#/components/schemas/Record" + }, + { + "$ref": "#/components/schemas/Pagination" + }, + { + "type": "object", + "properties": { + "id": { + "type": "string", + }, + }, + "required": [ + "id", + ], + }, + ] + }) + ); +} + +#[test] +fn derive_mixed_enum_serde_untagged() { + let value: Value = api_doc! { + #[derive(Serialize)] + #[serde(untagged)] + #[schema(title = "FooTitle")] + enum Foo { + Bar(i32), + Baz(String), + } + }; + + assert_json_eq!( + value, + json!({ + "title": "FooTitle", + "oneOf": [ + { + "format": "int32", + "type": "integer", + }, + { + "type": "string", + }, + ], + }) + ); +} + +#[test] +fn derive_untagged_with_unit_variant() { + let value: Value = api_doc! { + #[derive(Serialize)] + #[serde(untagged)] + enum EnumWithUnit { + ValueNumber(i32), + ThisIsUnit, + } + }; + + assert_json_eq!( + value, + json!({ + "oneOf": [ + { + "format": "int32", + "type": "integer", + }, + { + "type": "null", + "default": null, + }, + ], + }) + ); +} + +#[test] +fn derive_mixed_enum_with_ref_serde_untagged() { + #[derive(Serialize, ToSchema)] + struct Foo { + name: String, + age: u32, + } + + let value: Value = api_doc! { + #[derive(Serialize)] + #[serde(untagged)] + enum Bar { + Baz(i32), + FooBar(Foo), + } + }; + + assert_json_eq!( + value, + json!({ + "oneOf": [ + { + "format": "int32", + "type": "integer", + }, + { + "$ref": "#/components/schemas/Foo", + }, + ], + }) + ); +} + +#[test] +fn derive_mixed_enum_with_ref_serde_untagged_named_fields() { + #[derive(Serialize, ToSchema)] + struct Bar { + name: String, + age: u32, + } + + let value: Value = api_doc! { + #[derive(Serialize)] + #[serde(untagged)] + enum Foo { + One { n: i32 }, + Two { bar: Bar }, + } + }; + + assert_json_eq!( + value, + json!({ + "oneOf": [ + { + "properties": { + "n": { + "format": "int32", + "type": "integer" + } + }, + "required": [ + "n" + ], + "type": "object" + }, + { + "properties": { + "bar": { + "$ref": "#/components/schemas/Bar" + } + }, + "required": [ + "bar" + ], + "type": "object" + } + ] + }) + ); +} + +#[test] +fn derive_mixed_enum_with_ref_serde_untagged_named_fields_rename_all() { + #[derive(Serialize, ToSchema)] + struct Bar { + name: String, + age: u32, + } + + let value: Value = api_doc! { + #[derive(Serialize)] + #[serde(untagged)] + enum Foo { + #[serde(rename_all = "camelCase")] + One { some_number: i32 }, + #[serde(rename_all = "camelCase")] + Two { some_bar: Bar }, + } + }; + + assert_json_eq!( + value, + json!({ + "oneOf": [ + { + "properties": { + "someNumber": { + "format": "int32", + "type": "integer" + } + }, + "required": [ + "someNumber" + ], + "type": "object" + }, + { + "properties": { + "someBar": { + "$ref": "#/components/schemas/Bar" + } + }, + "required": [ + "someBar" + ], + "type": "object" + } + ] + }) + ); +} + +#[test] +fn derive_mixed_enum_serde_adjacently_tagged() { + let value: Value = api_doc! { + #[derive(Serialize)] + #[serde(tag = "tag", content = "content")] + enum Foo { + Bar(i32), + Baz(String), + } + }; + + assert_json_eq!( + value, + json!({ + "oneOf": [ + { + "type": "object", + "properties": { + "tag": { + "type": "string", + "enum": [ + "Bar", + ], + }, + "content": { + "format": "int32", + "type": "integer", + }, + }, + "required": [ + "content", + "tag", + ], + }, + { + "type": "object", + "properties": { + "tag": { + "type": "string", + "enum": [ + "Baz", + ] + }, + "content": { + "type": "string", + }, + }, + "required": [ + "content", + "tag", + ], + }, + ], + }) + ); +} + +#[test] +fn derive_mixed_enum_with_ref_serde_adjacently_tagged() { + #[derive(Serialize, ToSchema)] + struct Foo { + name: String, + age: u32, + } + + let value: Value = api_doc! { + #[derive(Serialize)] + #[serde(tag = "tag", content = "content")] + enum Bar { + Baz(i32), + FooBar(Foo), + } + }; + + assert_json_eq!( + value, + json!({ + "oneOf": [ + { + "type": "object", + "properties": { + "tag": { + "type": "string", + "enum": [ + "Baz", + ], + }, + "content": { + "type": "integer", + "format": "int32", + }, + }, + "required": [ + "content", + "tag", + ], + }, + { + "type": "object", + "properties": { + "tag": { + "type": "string", + "enum": [ + "FooBar", + ], + }, + "content": { + "$ref": "#/components/schemas/Foo" + }, + }, + "required": [ + "content", + "tag", + ], + }, + ], + }) + ); +} + +#[test] +fn derive_mixed_enum_with_discriminator_simple_form() { + #[derive(Serialize, ToSchema)] + struct FooInternal { + name: String, + age: u32, + bar: String, + } + + #[derive(ToSchema, Serialize)] + struct BarBarInternal { + value: String, + bar: String, + } + let value: Value = api_doc! { + #[derive(Serialize)] + #[serde(untagged)] + #[schema(discriminator = "bar")] + enum BarInternal { + Baz(BarBarInternal), + FooBar(FooInternal), + } + }; + + assert_json_eq!( + value, + json!({ + "oneOf": [ + { + "$ref": "#/components/schemas/BarBarInternal" + }, + { + "$ref": "#/components/schemas/FooInternal" + }, + ], + "discriminator": { + "propertyName": "bar", + } + }) + ); +} + +#[test] +fn derive_mixed_enum_with_discriminator_with_mapping() { + #[derive(Serialize, ToSchema)] + struct FooInternal { + name: String, + age: u32, + bar_type: String, + } + + #[derive(ToSchema, Serialize)] + struct BarBarInternal { + value: String, + bar_type: String, + } + + let value: Value = api_doc! { + #[derive(Serialize)] + #[serde(untagged)] + #[schema(discriminator(property_name = "bar_type", mapping( + ("bar" = "#/components/schemas/BarBarInternal"), + ("foo" = "#/components/schemas/FooInternal"), + )))] + enum BarInternal { + Baz(BarBarInternal), + FooBar(FooInternal), + } + }; + + assert_json_eq!( + value, + json!({ + "oneOf": [ + { + "$ref": "#/components/schemas/BarBarInternal" + }, + { + "$ref": "#/components/schemas/FooInternal" + }, + ], + "discriminator": { + "propertyName": "bar_type", + "mapping": { + "bar": "#/components/schemas/BarBarInternal", + "foo": "#/components/schemas/FooInternal" + } + } + }) + ); +} + +#[test] +fn derive_mixed_enum_with_ref_serde_adjacently_tagged_named_fields() { + #[derive(Serialize, ToSchema)] + struct Bar { + name: String, + age: u32, + } + + let value: Value = api_doc! { + #[derive(Serialize)] + #[serde(tag = "tag", content = "content")] + enum Foo { + One { n: i32 }, + Two { bar: Bar }, + } + }; + + assert_json_eq!( + value, + json!({ + "oneOf": [ + { + "type": "object", + "properties": { + "tag": { + "type": "string", + "enum": [ + "One", + ], + }, + "content": { + "type": "object", + "properties": { + "n": { + "format": "int32", + "type": "integer", + }, + }, + "required": [ + "n", + ], + }, + }, + "required": [ + "content", + "tag", + ], + }, + { + "type": "object", + "properties": { + "tag": { + "type": "string", + "enum": [ + "Two", + ], + }, + "content": { + "type": "object", + "properties": { + "bar": { + "$ref": "#/components/schemas/Bar", + }, + }, + "required": [ + "bar", + ], + }, + }, + "required": [ + "content", + "tag", + ], + }, + ], + }) + ); +} + +#[test] +fn derive_mixed_enum_with_ref_serde_adjacently_tagged_named_fields_rename_all() { + #[derive(Serialize, ToSchema)] + struct Bar { + name: String, + age: u32, + } + + let value: Value = api_doc! { + #[derive(Serialize)] + #[serde(tag = "tag", content = "content")] + enum Foo { + #[serde(rename_all = "camelCase")] + One { some_number: i32 }, + #[serde(rename_all = "camelCase")] + Two { some_bar: Bar }, + } + }; + + assert_json_eq!( + value, + json!({ + "oneOf": [ + { + "type": "object", + "properties": { + "tag": { + "type": "string", + "enum": [ + "One", + ], + }, + "content": { + "type": "object", + "properties": { + "someNumber": { + "format": "int32", + "type": "integer", + }, + }, + "required": [ + "someNumber", + ], + }, + }, + "required": [ + "content", + "tag", + ], + }, + { + "type": "object", + "properties": { + "tag": { + "type": "string", + "enum": [ + "Two", + ], + }, + "content": { + "type": "object", + "properties": { + "someBar": { + "$ref": "#/components/schemas/Bar", + }, + }, + "required": [ + "someBar", + ], + }, + }, + "required": [ + "content", + "tag", + ], + }, + ], + }) + ); +} + +#[test] +fn derive_mixed_enum_serde_tag_title() { + #[derive(Serialize)] + #[allow(dead_code)] + struct Foo(String); + + let value: Value = api_doc! { + #[derive(Serialize)] + #[serde(tag = "tag")] + enum Bar { + #[schema(title = "Unit")] + UnitValue, + #[schema(title = "Named")] + NamedFields { + id: &'static str, + }, + } + }; + + assert_json_eq!( + value, + json!({ + "oneOf": [ + { + "type": "object", + "title": "Unit", + "properties": { + "tag": { + "type": "string", + "enum": [ + "UnitValue", + ], + }, + }, + "required": [ + "tag", + ], + }, + { + "type": "object", + "title": "Named", + "properties": { + "id": { + "type": "string", + }, + "tag": { + "type": "string", + "enum": [ + "NamedFields", + ], + }, + }, + "required": [ + "id", + "tag", + ], + }, + ], + }) + ); +} + +#[test] +fn derive_struct_with_read_only_and_write_only() { + let user = api_doc! { + struct User { + #[schema(read_only)] + username: String, + #[schema(write_only)] + password: String + } + }; + + assert_value! {user=> + "properties.password.type" = r###""string""###, "User password type" + "properties.password.writeOnly" = r###"true"###, "User password write only" + "properties.password.readOnly" = r###"null"###, "User password read only" + "properties.username.type" = r###""string""###, "User username type" + "properties.username.readOnly" = r###"true"###, "User username read only" + "properties.username.writeOnly" = r###"null"###, "User username write only" + } +} + +#[test] +fn derive_struct_with_nullable_and_required() { + let user = api_doc! { + #[derive(Serialize)] + struct User { + #[schema(nullable)] + #[serde(with = "::serde_with::rust::double_option")] + fax: Option<Option<String>>, + #[schema(nullable)] + phone: Option<Option<String>>, + #[schema(nullable = false)] + email: String, + name: String, + #[schema(nullable)] + edit_history: Vec<String>, + #[serde(skip_serializing_if = "Vec::is_empty")] + friends: Vec<Option<String>>, + #[schema(required)] + updated: Option<String>, + } + }; + + assert_json_eq!( + user, + json!({ + "properties": { + "fax": { + "type": ["string", "null"], + }, + "phone": { + "type": ["string", "null"], + }, + "email": { + "type": "string", + }, + "name": { + "type": "string", + }, + "edit_history": { + "type": ["array", "null"], + "items": { + "type": "string" + }, + }, + "friends": { + "type": "array", + "items": { + "type": ["string", "null"], + }, + }, + "updated": { + "type": ["string", "null"], + } + }, + "required": [ + "email", + "name", + "edit_history", + "updated", + ], + "type": "object" + }) + ) +} + +#[test] +fn derive_enum_with_inline_variant() { + #[allow(dead_code)] + #[derive(ToSchema)] + enum Number { + One, + Two, + Three, + Four, + Five, + Six, + Seven, + Height, + Nine, + } + + #[allow(dead_code)] + #[derive(ToSchema)] + enum Color { + Spade, + Heart, + Club, + Diamond, + } + + let card = api_doc! { + enum Card { + Number(#[schema(inline)] Number), + Color(#[schema(inline)] Color), + } + }; + + assert_json_eq!( + card, + json!({ + "oneOf": [ + { + "properties": { + "Number": { + "enum": [ + "One", + "Two", + "Three", + "Four", + "Five", + "Six", + "Seven", + "Height", + "Nine", + ], + "type": "string", + }, + }, + "required": [ + "Number", + ], + "type": "object", + }, + { + "properties": { + "Color": { + "enum": [ + "Spade", + "Heart", + "Club", + "Diamond", + ], + "type": "string", + }, + }, + "required": [ + "Color", + ], + "type": "object", + }, + ], + }) + ); +} + +#[test] +fn derive_struct_xml() { + let user = api_doc! { + #[schema(xml(name = "user", prefix = "u", namespace = "https://mynamespace.test"))] + struct User { + #[schema(xml(attribute, prefix = "u"))] + id: i64, + #[schema(xml(name = "user_name", prefix = "u"))] + username: String, + #[schema(xml(wrapped(name = "linkList"), name = "link"))] + links: Vec<String>, + #[schema(xml(wrapped, name = "photo_url"))] + photos_urls: Vec<String> + } + }; + + assert_value! {user=> + "xml.attribute" = r###"null"###, "User xml attribute" + "xml.name" = r###""user""###, "User xml name" + "xml.prefix" = r###""u""###, "User xml prefix" + "xml.namespace" = r###""https://mynamespace.test""###, "User xml namespace" + "properties.id.xml.attribute" = r###"true"###, "User id xml attribute" + "properties.id.xml.name" = r###"null"###, "User id xml name" + "properties.id.xml.prefix" = r###""u""###, "User id xml prefix" + "properties.id.xml.namespace" = r###"null"###, "User id xml namespace" + "properties.username.xml.attribute" = r###"null"###, "User username xml attribute" + "properties.username.xml.name" = r###""user_name""###, "User username xml name" + "properties.username.xml.prefix" = r###""u""###, "User username xml prefix" + "properties.username.xml.namespace" = r###"null"###, "User username xml namespace" + "properties.links.xml.attribute" = r###"null"###, "User links xml attribute" + "properties.links.xml.name" = r###""linkList""###, "User links xml name" + "properties.links.xml.prefix" = r###"null"###, "User links xml prefix" + "properties.links.xml.namespace" = r###"null"###, "User links xml namespace" + "properties.links.xml.wrapped" = r###"true"###, "User links xml wrapped" + "properties.links.items.xml.attribute" = r###"null"###, "User links xml items attribute" + "properties.links.items.xml.name" = r###""link""###, "User links xml items name" + "properties.links.items.xml.prefix" = r###"null"###, "User links xml items prefix" + "properties.links.items.xml.namespace" = r###"null"###, "User links xml items namespace" + "properties.links.items.xml.wrapped" = r###"null"###, "User links xml items wrapped" + "properties.photos_urls.xml.attribute" = r###"null"###, "User photos_urls xml attribute" + "properties.photos_urls.xml.name" = r###"null"###, "User photos_urls xml name" + "properties.photos_urls.xml.prefix" = r###"null"###, "User photos_urls xml prefix" + "properties.photos_urls.xml.namespace" = r###"null"###, "User photos_urls xml namespace" + "properties.photos_urls.xml.wrapped" = r###"true"###, "User photos_urls xml wrapped" + "properties.photos_urls.items.xml.attribute" = r###"null"###, "User photos_urls xml items attribute" + "properties.photos_urls.items.xml.name" = r###""photo_url""###, "User photos_urls xml items name" + "properties.photos_urls.items.xml.prefix" = r###"null"###, "User photos_urls xml items prefix" + "properties.photos_urls.items.xml.namespace" = r###"null"###, "User photos_urls xml items namespace" + "properties.photos_urls.items.xml.wrapped" = r###"null"###, "User photos_urls links xml items wrapped" + } +} + +#[test] +fn derive_struct_xml_with_optional_vec() { + let user = api_doc! { + #[schema(xml(name = "user"))] + struct User { + #[schema(xml(attribute, prefix = "u"))] + id: i64, + #[schema(xml(wrapped(name = "linkList"), name = "link"))] + links: Option<Vec<String>>, + } + }; + + assert_json_eq!( + user, + json!({ + "properties": { + "id": { + "type": "integer", + "format": "int64", + "xml": { + "attribute": true, + "prefix": "u" + } + }, + "links": { + "type": ["array", "null"], + "items": { + "type": "string", + "xml": { + "name": "link" + } + }, + "xml": { + "name": "linkList", + "wrapped": true, + } + } + }, + "required": ["id"], + "type": "object", + "xml": { + "name": "user" + } + }) + ); +} + +#[cfg(feature = "chrono")] +#[test] +fn derive_component_with_chrono_feature() { + #![allow(deprecated)] // allow deprecated Date in tests as long as it is available from chrono + use chrono::{Date, DateTime, Duration, NaiveDate, NaiveDateTime, NaiveTime, Utc}; + + let post = api_doc! { + struct Post { + id: i32, + value: String, + datetime: DateTime<Utc>, + naive_datetime: NaiveDateTime, + date: Date<Utc>, + naive_date: NaiveDate, + naive_time: NaiveTime, + duration: Duration, + } + }; + + assert_value! {post=> + "properties.datetime.type" = r#""string""#, "Post datetime type" + "properties.datetime.format" = r#""date-time""#, "Post datetime format" + "properties.naive_datetime.type" = r#""string""#, "Post datetime type" + "properties.naive_datetime.format" = r#""date-time""#, "Post datetime format" + "properties.date.type" = r#""string""#, "Post date type" + "properties.date.format" = r#""date""#, "Post date format" + "properties.naive_date.type" = r#""string""#, "Post date type" + "properties.naive_date.format" = r#""date""#, "Post date format" + "properties.naive_time.type" = r#""string""#, "Post time type" + "properties.naive_time.format" = r#"null"#, "Post time format" + "properties.duration.type" = r#""string""#, "Post duration type" + "properties.duration.format" = r#"null"#, "Post duration format" + "properties.id.type" = r#""integer""#, "Post id type" + "properties.id.format" = r#""int32""#, "Post id format" + "properties.value.type" = r#""string""#, "Post value type" + "properties.value.format" = r#"null"#, "Post value format" + } +} + +#[cfg(feature = "time")] +#[test] +fn derive_component_with_time_feature() { + use time::{Date, Duration, OffsetDateTime, PrimitiveDateTime}; + + let times = api_doc! { + struct Timetest { + datetime: OffsetDateTime, + primitive_date_time: PrimitiveDateTime, + date: Date, + duration: Duration, + } + }; + + assert_json_eq!( + ×, + json!({ + "properties": { + "date": { + "format": "date", + "type": "string" + }, + "datetime": { + "format": "date-time", + "type": "string" + }, + "primitive_date_time": { + "format": "date-time", + "type": "string" + }, + "duration": { + "type": "string" + } + }, + "required": [ + "datetime", + "primitive_date_time", + "date", + "duration" + ], + "type": "object" + }) + ) +} + +#[test] +fn derive_struct_component_field_type_override() { + let post = api_doc! { + struct Post { + id: i32, + #[schema(value_type = String)] + value: i64, + } + }; + + assert_value! {post=> + "properties.id.type" = r#""integer""#, "Post id type" + "properties.id.format" = r#""int32""#, "Post id format" + "properties.value.type" = r#""string""#, "Post value type" + "properties.value.format" = r#"null"#, "Post value format" + } +} + +#[test] +fn derive_struct_component_field_type_path_override_returns_default_name() { + mod path { + pub mod to { + #[derive(fastapi::ToSchema)] + pub struct Foo(()); + } + } + let post = api_doc! { + struct Post { + id: i32, + #[schema(value_type = path::to::Foo)] + value: i64, + } + }; + + let component_ref: &str = post + .pointer("/properties/value/$ref") + .unwrap() + .as_str() + .unwrap(); + assert_eq!(component_ref, "#/components/schemas/Foo"); +} + +#[test] +fn derive_struct_component_field_type_path_override_with_as_returns_custom_name() { + mod path { + pub mod to { + #[derive(fastapi::ToSchema)] + #[schema(as = path::to::Foo)] + pub struct Foo(()); + } + } + let post = api_doc! { + struct Post { + id: i32, + #[schema(value_type = path::to::Foo)] + value: i64, + } + }; + + let component_ref: &str = post + .pointer("/properties/value/$ref") + .unwrap() + .as_str() + .unwrap(); + assert_eq!(component_ref, "#/components/schemas/path.to.Foo"); +} + +#[test] +fn derive_struct_component_field_type_override_with_format() { + let post = api_doc! { + struct Post { + id: i32, + #[schema(value_type = String, format = Byte)] + value: i64, + } + }; + + assert_value! {post=> + "properties.id.type" = r#""integer""#, "Post id type" + "properties.id.format" = r#""int32""#, "Post id format" + "properties.value.type" = r#""string""#, "Post value type" + "properties.value.format" = r#""byte""#, "Post value format" + } +} + +#[test] +fn derive_struct_component_field_type_override_with_custom_format() { + let post = api_doc! { + struct Post { + #[schema(value_type = String, format = "uri")] + value: String, + } + }; + + assert_value! {post=> + "properties.value.type" = r#""string""#, "Post value type" + "properties.value.format" = r#""uri""#, "Post value format" + } +} + +#[test] +fn derive_struct_component_field_type_override_with_format_with_vec() { + let post = api_doc! { + struct Post { + id: i32, + #[schema(value_type = String, format = Binary)] + value: Vec<u8>, + } + }; + + assert_value! {post=> + "properties.id.type" = r#""integer""#, "Post id type" + "properties.id.format" = r#""int32""#, "Post id format" + "properties.value.type" = r#""string""#, "Post value type" + "properties.value.format" = r#""binary""#, "Post value format" + } +} + +#[test] +fn derive_unnamed_struct_schema_type_override() { + let value = api_doc! { + #[schema(value_type = String)] + struct Value(i64); + }; + + assert_value! {value=> + "type" = r#""string""#, "Value type" + "format" = r#"null"#, "Value format" + } +} + +#[test] +fn derive_unnamed_struct_schema_type_override_with_format() { + let value = api_doc! { + #[schema(value_type = String, format = Byte)] + struct Value(i64); + }; + + assert_value! {value=> + "type" = r#""string""#, "Value type" + "format" = r#""byte""#, "Value format" + } +} + +#[test] +fn derive_unnamed_struct_schema_ipv4() { + let value = api_doc! { + #[schema(format = Ipv4)] + struct Ipv4(String); + }; + + assert_value! {value=> + "type" = r#""string""#, "Value type" + "format" = r#""ipv4""#, "Value format" + } +} + +#[test] +fn derive_struct_override_type_with_object_type() { + let value = api_doc! { + struct Value { + #[schema(value_type = Object)] + field: String, + } + }; + + assert_json_eq!( + value, + json!({ + "type": "object", + "properties": { + "field": { + "type": "object" + } + }, + "required": ["field"] + }) + ) +} + +#[test] +fn derive_struct_override_type_with_a_reference() { + mod custom { + #[derive(fastapi::ToSchema)] + #[allow(dead_code)] + pub struct NewBar(()); + } + + let value = api_doc! { + struct Value { + #[schema(value_type = custom::NewBar)] + field: String, + } + }; + + assert_json_eq!( + value, + json!({ + "type": "object", + "properties": { + "field": { + "$ref": "#/components/schemas/NewBar" + } + }, + "required": ["field"] + }) + ) +} + +#[cfg(feature = "decimal")] +#[test] +fn derive_struct_with_rust_decimal() { + use rust_decimal::Decimal; + + let post = api_doc! { + struct Post { + id: i32, + rating: Decimal, + } + }; + + assert_value! {post=> + "properties.id.type" = r#""integer""#, "Post id type" + "properties.id.format" = r#""int32""#, "Post id format" + "properties.rating.type" = r#""string""#, "Post rating type" + "properties.rating.format" = r#"null"#, "Post rating format" + } +} + +#[cfg(feature = "decimal")] +#[test] +fn derive_struct_with_rust_decimal_with_type_override() { + use rust_decimal::Decimal; + + let post = api_doc! { + struct Post { + id: i32, + #[schema(value_type = f64)] + rating: Decimal, + } + }; + + assert_value! {post=> + "properties.id.type" = r#""integer""#, "Post id type" + "properties.id.format" = r#""int32""#, "Post id format" + "properties.rating.type" = r#""number""#, "Post rating type" + "properties.rating.format" = r#""double""#, "Post rating format" + } +} + +#[cfg(feature = "decimal_float")] +#[test] +fn derive_struct_with_rust_decimal_float() { + use rust_decimal::Decimal; + + let post = api_doc! { + struct Post { + id: i32, + rating: Decimal, + } + }; + + assert_value! {post=> + "properties.id.type" = r#""integer""#, "Post id type" + "properties.id.format" = r#""int32""#, "Post id format" + "properties.rating.type" = r#""number""#, "Post rating type" + "properties.rating.format" = r#""double""#, "Post rating format" + } +} + +#[cfg(feature = "decimal_float")] +#[test] +fn derive_struct_with_rust_decimal_float_with_type_override() { + use rust_decimal::Decimal; + + let post = api_doc! { + struct Post { + id: i32, + #[schema(value_type = String)] + rating: Decimal, + } + }; + + assert_value! {post=> + "properties.id.type" = r#""integer""#, "Post id type" + "properties.id.format" = r#""int32""#, "Post id format" + "properties.rating.type" = r#""string""#, "Post rating type" + "properties.rating.format" = r#"null"#, "Post rating format" + } +} + +#[cfg(feature = "uuid")] +#[test] +fn derive_struct_with_uuid_type() { + use uuid::Uuid; + + let post = api_doc! { + struct Post { + id: Uuid, + } + }; + + assert_value! {post=> + "properties.id.type" = r#""string""#, "Post id type" + "properties.id.format" = r#""uuid""#, "Post id format" + } +} + +#[cfg(feature = "ulid")] +#[test] +fn derive_struct_with_ulid_type() { + use ulid::Ulid; + + let post = api_doc! { + struct Post { + id: Ulid, + } + }; + + assert_value! {post=> + "properties.id.type" = r#""string""#, "Post id type" + "properties.id.format" = r#""ulid""#, "Post id format" + } +} + +#[cfg(feature = "url")] +#[test] +fn derive_struct_with_url_type() { + use url::Url; + + let post = api_doc! { + struct Post { + id: Url, + } + }; + + assert_value! {post=> + "properties.id.type" = r#""string""#, "Post id type" + "properties.id.format" = r#""uri""#, "Post id format" + } +} + +#[test] +fn derive_parse_serde_field_attributes() { + struct S; + let post = api_doc! { + #[derive(Serialize)] + #[serde(rename_all = "camelCase")] + #[schema(bound = "")] + struct Post<S> { + #[serde(rename = "uuid")] + id: String, + #[serde(skip)] + _p: PhantomData<S>, + #[serde(skip_serializing)] + _p2: PhantomData<S>, + long_field_num: i64, + } + }; + + assert_json_eq!( + post, + json!({ + "properties": { + "longFieldNum": { + "format": "int64", + "type": "integer" + }, + "uuid": { + "type": "string" + } + }, + "required": [ + "uuid", + "longFieldNum" + ], + "type": "object" + }) + ) +} + +#[test] +fn derive_parse_serde_simple_enum_attributes() { + let value = api_doc! { + #[derive(Serialize)] + #[serde(rename_all = "camelCase")] + enum Value { + A, + B, + #[serde(skip)] + C, + } + }; + + assert_value! {value=> + "enum" = r#"["a","b"]"#, "Value enum variants" + } +} + +#[test] +fn derive_parse_serde_mixed_enum() { + #[derive(Serialize, ToSchema)] + struct Foo; + let mixed_enum = api_doc! { + #[derive(Serialize)] + #[serde(rename_all = "camelCase")] + enum Bar { + UnitValue, + #[serde(rename_all = "camelCase")] + NamedFields { + #[serde(rename = "id")] + named_id: &'static str, + name_list: Option<Vec<String>> + }, + UnnamedFields(Foo), + #[serde(skip)] + Random, + } + }; + + assert_value! {mixed_enum=> + "oneOf.[0].enum" = r#"["unitValue"]"#, "Unit value enum" + "oneOf.[0].type" = r#""string""#, "Unit value type" + + "oneOf.[1].properties.namedFields.properties.id.type" = r#""string""#, "Named fields id type" + "oneOf.[1].properties.namedFields.properties.nameList.type" = r#"["array","null"]"#, "Named fields nameList type" + "oneOf.[1].properties.namedFields.properties.nameList.items.type" = r#""string""#, "Named fields nameList items type" + "oneOf.[1].properties.namedFields.required" = r#"["id"]"#, "Named fields required" + + "oneOf.[2].properties.unnamedFields.$ref" = r###""#/components/schemas/Foo""###, "Unnamed fields ref" + } +} + +#[test] +fn derive_component_with_generic_types_having_path_expression() { + let ty = api_doc! { + struct Bar { + args: Vec<std::vec::Vec<std::string::String>> + } + }; + + let args = ty.pointer("/properties/args").unwrap(); + + assert_json_eq!( + args, + json!({ + "items": { + "items": { + "type": "string" + }, + "type": "array" + }, + "type": "array" + }) + ); +} + +#[test] +fn derive_mixed_enum_as() { + #[derive(ToSchema)] + struct Foobar; + + #[derive(ToSchema)] + #[schema(as = named::BarBar)] + #[allow(unused)] + enum BarBar { + Foo { foo: Foobar }, + } + + #[derive(OpenApi)] + #[openapi(components(schemas(BarBar)))] + struct ApiDoc; + + let doc = serde_json::to_value(ApiDoc::openapi()).unwrap(); + let value = doc + .pointer("/components/schemas/named.BarBar") + .expect("Should have BarBar named to named.BarBar"); + + assert_json_eq!( + &value, + json!({ + "oneOf": [ + { + "properties": { + "Foo": { + "properties": { + "foo": { + "$ref": "#/components/schemas/Foobar" + } + }, + "required": ["foo"], + "type": "object" + } + }, + "required": ["Foo"], + "type": "object", + } + ] + }) + ) +} + +#[test] +fn derive_component_with_to_schema_value_type() { + #[derive(ToSchema)] + #[allow(dead_code)] + struct Foo { + #[allow(unused)] + value: String, + } + + let doc = api_doc! { + #[allow(unused)] + struct Random { + #[schema(value_type = i64)] + id: String, + #[schema(value_type = Object)] + another_id: String, + #[schema(value_type = Vec<Vec<String>>)] + value1: Vec<i64>, + #[schema(value_type = Vec<String>)] + value2: Vec<i64>, + #[schema(value_type = Option<String>)] + value3: i64, + #[schema(value_type = Option<Object>)] + value4: i64, + #[schema(value_type = Vec<Object>)] + value5: i64, + #[schema(value_type = Vec<Foo>)] + value6: i64, + } + }; + + assert_json_eq!( + doc, + json!({ + "properties": { + "another_id": { + "type": "object" + }, + "id": { + "type": "integer", + "format": "int64" + }, + "value1": { + "items": { + "items": { + "type": "string" + }, + "type": "array" + }, + "type": "array" + }, + "value2": { + "items": { + "type": "string" + }, + "type": "array" + }, + "value3": { + "type": ["string", "null"], + }, + "value4": { + "type": ["object", "null"], + }, + "value5": { + "items": { + "type": "object" + }, + "type": "array" + }, + "value6": { + "items": { + "$ref": "#/components/schemas/Foo" + }, + "type": "array" + } + }, + "required": [ + "id", + "another_id", + "value1", + "value2", + "value5", + "value6", + ], + "type": "object" + }) + ) +} + +#[test] +fn derive_component_with_mixed_enum_lifetimes() { + #[derive(ToSchema)] + struct Foo<'foo> { + #[allow(unused)] + field: &'foo str, + } + + let doc = api_doc! { + enum Bar<'bar> { + A { foo: Foo<'bar> }, + B, + C, + } + }; + + assert_json_eq!( + doc, + json!({ + "oneOf": [ + { + "properties": { + "A": { + "properties": { + "foo": { + "$ref": "#/components/schemas/Foo" + } + }, + "required": ["foo"], + "type": "object" + }, + }, + "required": ["A"], + "type": "object" + }, + { + "enum": ["B"], + "type": "string" + }, + { + "enum": ["C"], + "type": "string" + } + ] + }) + ) +} + +#[test] +fn derive_component_with_raw_identifier() { + let doc = api_doc! { + struct Bar { + r#in: String + } + }; + + assert_json_eq!( + doc, + json!({ + "properties": { + "in": { + "type": "string" + } + }, + "required": ["in"], + "type": "object" + }) + ) +} + +#[test] +fn derive_component_with_linked_list() { + use std::collections::LinkedList; + + let example_schema = api_doc! { + struct ExampleSchema { + values: LinkedList<f64> + } + }; + + assert_json_eq!( + example_schema, + json!({ + "properties": { + "values": { + "items": { + "type": "number", + "format": "double" + }, + "type": "array" + } + }, + "required": ["values"], + "type": "object" + }) + ) +} + +#[test] +#[cfg(feature = "smallvec")] +fn derive_component_with_smallvec_feature() { + use smallvec::SmallVec; + + let bar = api_doc! { + struct Bar<'b> { + links: SmallVec<[&'b str; 2]> + } + }; + + assert_json_eq!( + bar, + json!({ + "properties": { + "links": { + "items": { + "type": "string" + }, + "type": "array", + } + }, + "required": ["links"], + "type": "object" + }) + ) +} + +#[test] +fn derive_schema_with_default_field() { + let value = api_doc! { + #[derive(serde::Deserialize)] + struct MyValue { + #[serde(default)] + field: String + } + }; + + assert_json_eq!( + value, + json!({ + "properties": { + "field": { + "type": "string" + } + }, + "type": "object" + }) + ) +} + +#[test] +fn derive_schema_with_default_struct() { + let value = api_doc! { + #[derive(serde::Deserialize, Default)] + #[serde(default)] + struct MyValue { + field: String + } + }; + + assert_json_eq!( + value, + json!({ + "properties": { + "field": { + "type": "string", + "default": "" + } + }, + "type": "object" + }) + ) +} + +#[test] +fn derive_struct_with_no_additional_properties() { + let value = api_doc! { + #[derive(serde::Deserialize, Default)] + #[serde(deny_unknown_fields)] + struct MyValue { + field: String + } + }; + + assert_json_eq!( + value, + json!({ + "properties": { + "field": { + "type": "string", + } + }, + "required": ["field"], + "additionalProperties": false, + "type": "object" + }) + ) +} + +#[test] +#[cfg(feature = "repr")] +fn derive_schema_for_repr_enum() { + let value = api_doc! { + #[derive(serde::Deserialize)] + #[repr(i32)] + #[schema(example = 1, default = 0)] + enum ExitCode { + Error = -1, + Ok = 0, + Unknow = 1, + } + }; + + assert_json_eq!( + value, + json!({ + "enum": [-1, 0, 1], + "type": "integer", + "default": 0, + "example": 1, + }) + ); +} + +#[test] +#[cfg(feature = "repr")] +fn derive_schema_for_tagged_repr_enum() { + let value: Value = api_doc! { + #[derive(serde::Deserialize, serde::Serialize)] + #[serde(tag = "tag")] + #[repr(u8)] + enum TaggedEnum { + One = 0, + Two, + Three, + } + }; + + assert_json_eq!( + value, + json!({ + "oneOf": [ + { + "type": "object", + "properties": { + "tag": { + "type": "integer", + "enum": [ + 0, + ], + }, + }, + "required": [ + "tag", + ], + }, + { + "type": "object", + "properties": { + "tag": { + "type": "integer", + "enum": [ + 1, + ], + }, + }, + "required": [ + "tag", + ], + }, + { + "type": "object", + "properties": { + "tag": { + "type": "integer", + "enum": [ + 2, + ], + }, + }, + "required": [ + "tag", + ], + }, + ], + }) + ); +} + +#[test] +#[cfg(feature = "repr")] +fn derive_schema_for_skipped_repr_enum() { + let value: Value = api_doc! { + #[derive(serde::Deserialize, serde::Serialize)] + #[repr(i32)] + enum SkippedEnum { + Error = -1, + Ok = 0, + #[serde(skip)] + Unknown = 1, + } + }; + + assert_value! {value=> + "enum" = r#"[-1,0]"#, "SkippedEnum enum variants" + "type" = r#""integer""#, "SkippedEnum enum type" + }; +} + +#[test] +#[cfg(feature = "repr")] +fn derive_repr_enum_with_with_custom_default_fn_success() { + let mode = api_doc! { + #[schema(default = repr_mode_default_fn)] + #[repr(u16)] + enum ReprDefaultMode { + Mode1 = 0, + Mode2 + } + }; + + assert_value! {mode=> + "default" = r#"1"#, "ReprDefaultMode default" + "enum" = r#"[0,1]"#, "ReprDefaultMode enum variants" + "type" = r#""integer""#, "ReprDefaultMode type" + }; + assert_value! {mode=> + "example" = Value::Null, "ReprDefaultMode example" + } +} + +#[cfg(feature = "repr")] +fn repr_mode_default_fn() -> u16 { + 1 +} + +#[test] +#[cfg(feature = "repr")] +fn derive_repr_enum_with_with_custom_default_fn_and_example() { + let mode = api_doc! { + #[schema(default = repr_mode_default_fn, example = 1)] + #[repr(u16)] + enum ReprDefaultMode { + Mode1 = 0, + Mode2 + } + }; + + assert_value! {mode=> + "default" = r#"1"#, "ReprDefaultMode default" + "enum" = r#"[0,1]"#, "ReprDefaultMode enum variants" + "type" = r#""integer""#, "ReprDefaultMode type" + "example" = r#"1"#, "ReprDefaultMode example" + }; +} + +#[test] +fn derive_struct_with_vec_field_with_example() { + let post = api_doc! { + struct Post { + id: i32, + #[schema(example = json!(["foobar", "barfoo"]))] + value: Vec<String>, + } + }; + + assert_json_eq!( + post, + json!({ + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32" + }, + "value": { + "type": "array", + "example": ["foobar", "barfoo"], + "items": { + "type": "string" + } + } + }, + "required": ["id", "value"] + }) + ); +} + +#[test] +fn derive_struct_field_with_example() { + #[derive(ToSchema)] + struct MyStruct; + let doc = api_doc! { + struct MyValue { + #[schema(example = "test")] + field1: String, + #[schema(example = json!("test"))] + field2: String, + #[schema(example = json!({ + "key1": "value1" + }))] + field3: HashMap<String, String>, + #[schema(example = json!({ + "key1": "value1" + }))] + field4: HashMap<String, MyStruct> + } + }; + + assert_json_eq!( + doc, + json!({ + "properties": { + "field1": { + "type": "string", + "example": "test" + }, + "field2": { + "type": "string", + "example": "test" + }, + "field3": { + "type": "object", + "propertyNames": { + "type": "string" + }, + "additionalProperties": { + "type": "string", + }, + "example": { + "key1": "value1" + } + }, + "field4": { + "type": "object", + "propertyNames": { + "type": "string" + }, + "additionalProperties": { + "$ref": "#/components/schemas/MyStruct", + }, + "example": { + "key1": "value1" + } + } + }, + "required": [ + "field1", + "field2", + "field3", + "field4" + ], + "type": "object" + }) + ) +} + +#[test] +fn derive_unnamed_structs_with_examples() { + let doc = api_doc! { + #[derive(serde::Serialize, serde::Deserialize)] + #[schema(examples(json!("kim"), json!("jim")))] + struct UsernameRequestWrapper(String); + }; + + assert_json_eq!( + doc, + json!({ + "type": "string", + "examples": ["kim", "jim"] + }) + ); + + #[derive(ToSchema, serde::Serialize, serde::Deserialize)] + struct Username(String); + + // Refs cannot have examples + let doc = api_doc! { + #[derive(serde::Serialize, serde::Deserialize)] + #[schema(examples(json!("kim"), json!("jim")))] + struct UsernameRequestWrapper(Username); + }; + + assert_json_eq!( + doc, + json!({ + "$ref": "#/components/schemas/Username", + }) + ) +} + +#[test] +fn derive_struct_with_examples() { + let doc = api_doc! { + #[derive(serde::Serialize, serde::Deserialize)] + #[schema(examples(json!({"username": "kim"}), json!(UsernameRequest {username: "jim".to_string()})))] + struct UsernameRequest { + #[schema(examples(json!("foobar"), "barfoo"))] + username: String, + } + }; + + assert_json_eq!( + doc, + json!({ + "properties": { + "username": { + "type": "string", + "examples": ["foobar", "barfoo"] + }, + }, + "required": [ + "username", + ], + "type": "object", + "examples": [ + {"username": "kim"}, + {"username": "jim"} + ] + }) + ) +} + +#[test] +fn derive_struct_with_self_reference() { + let value = api_doc! { + struct Item { + id: String, + previous: Box<Self>, + } + }; + + assert_json_eq!( + value, + json!({ + "properties": { + "id": { + "type": "string", + }, + "previous": { + "$ref": "#/components/schemas/Item", + }, + }, + "type": "object", + "required": ["id", "previous"] + }) + ) +} + +#[test] +fn derive_unnamed_struct_with_self_reference() { + let value = api_doc! { + struct Item(Box<Item>); + }; + + assert_json_eq!( + value, + json!({ + "$ref": "#/components/schemas/Item" + }) + ) +} + +#[test] +fn derive_enum_with_self_reference() { + let value = api_doc! { + enum EnumValue { + Item(Box<Self>), + Item2 { + value: Box<Self> + } + } + }; + + assert_json_eq!( + value, + json!({ + "oneOf": [ + { + "properties": { + "Item": { + "$ref": "#/components/schemas/EnumValue" + } + }, + "type": "object", + "required": ["Item"], + }, + { + "properties": { + "Item2": { + "properties": { + "value": { + "$ref": "#/components/schemas/EnumValue" + } + }, + "required": ["value"], + "type": "object", + } + }, + "required": ["Item2"], + "type": "object", + } + ] + }) + ) +} + +#[test] +fn derive_struct_with_validation_fields() { + let value = api_doc! { + struct Item { + #[schema(maximum = 10, minimum = 5, multiple_of = 2.5)] + id: i32, + + #[schema(max_length = 10, min_length = 5, pattern = "[a-z]*")] + value: String, + + #[schema(max_items = 5, min_items = 1, min_length = 1)] + items: Vec<String>, + + unsigned: u16, + + #[schema(minimum = 2)] + unsigned_value: u32, + + } + }; + + let config = Config::new(CompareMode::Strict).numeric_mode(NumericMode::AssumeFloat); + + #[cfg(feature = "non_strict_integers")] + assert_json_matches!( + value, + json!({ + "properties": { + "id": { + "format": "int32", + "type": "integer", + "maximum": 10.0, + "minimum": 5.0, + "multipleOf": 2.5, + }, + "value": { + "type": "string", + "maxLength": 10, + "minLength": 5, + "pattern": "[a-z]*" + }, + "items": { + "type": "array", + "items": { + "type": "string", + "minLength": 1, + }, + "maxItems": 5, + "minItems": 1, + }, + "unsigned": { + "type": "integer", + "format": "uint16", + "minimum": 0.0 + }, + "unsigned_value": { + "type": "integer", + "format": "uint32", + "minimum": 2.0, + } + }, + "type": "object", + "required": [ + "id", + "value", + "items", + "unsigned", + "unsigned_value" + ] + }), + config + ); + + #[cfg(not(feature = "non_strict_integers"))] + assert_json_matches!( + value, + json!({ + "properties": { + "id": { + "format": "int32", + "type": "integer", + "maximum": 10.0, + "minimum": 5.0, + "multipleOf": 2.5, + }, + "value": { + "type": "string", + "maxLength": 10, + "minLength": 5, + "pattern": "[a-z]*" + }, + "items": { + "type": "array", + "items": { + "type": "string", + "minLength": 1, + }, + "maxItems": 5, + "minItems": 1, + }, + "unsigned": { + "type": "integer", + "format": "int32", + "minimum": 0.0 + }, + "unsigned_value": { + "type": "integer", + "format": "int32", + "minimum": 2.0, + } + }, + "type": "object", + "required": [ + "id", + "value", + "items", + "unsigned", + "unsigned_value" + ] + }), + config + ); +} + +#[test] +#[cfg(feature = "non_strict_integers")] +fn uint_non_strict_integers_format() { + let value = api_doc! { + struct Numbers { + #[schema(format = UInt8)] + ui8: String, + #[schema(format = UInt16)] + ui16: String, + #[schema(format = UInt32)] + ui32: String, + #[schema(format = UInt64)] + ui64: String, + #[schema(format = UInt16)] + i16: String, + #[schema(format = Int8)] + i8: String, + } + }; + + assert_json_eq!( + value, + json!({ + "properties": { + "ui8": { + "type": "integer", + "format": "uint8" + }, + "ui16": { + "type": "integer", + "format": "uint16" + }, + "ui32": { + "type": "integer", + "format": "uint32" + }, + "ui64": { + "type": "integer", + "format": "uint64" + }, + "i16": { + "type": "integer", + "format": "int16" + }, + "i8": { + "type": "integer", + "format": "int8" + } + } + }) + ) +} + +#[test] +fn derive_schema_with_slice_and_array() { + let value = api_doc! { + struct Item<'a> { + array: [&'a str; 10], + slice: &'a [&'a str], + } + }; + + assert_json_eq!( + value, + json!({ + "properties": { + "array": { + "type": "array", + "items": { + "type": "string" + } + }, + "slice": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": [ + "array", + "slice" + ], + "type": "object" + }) + ) +} + +#[test] +fn derive_schema_multiple_serde_definitions() { + let value = api_doc! { + #[derive(serde::Deserialize)] + struct Value { + #[serde(default)] + #[serde(rename = "ID")] + id: String + } + }; + + assert_json_eq!( + value, + json!({ + "properties": { + "ID": { + "type": "string", + } + }, + "type": "object", + }) + ); +} + +#[test] +fn derive_schema_with_custom_field_with_schema() { + fn custom_type() -> Object { + ObjectBuilder::new() + .schema_type(fastapi::openapi::Type::String) + .format(Some(fastapi::openapi::SchemaFormat::Custom( + "email".to_string(), + ))) + .description(Some("this is the description")) + .build() + } + let value = api_doc! { + struct Value { + #[schema(schema_with = custom_type)] + id: String, + } + }; + + assert_json_eq!( + value, + json!({ + "properties": { + "id": { + "description": "this is the description", + "type": "string", + "format": "email" + } + }, + "required": [ "id" ], + "type": "object" + }) + ) +} + +#[test] +fn derive_unit_type() { + let data = api_doc! { + struct Data { + unit_type: () + } + }; + + assert_json_eq!( + data, + json!({ + "type": "object", + "required": [ "unit_type" ], + "properties": { + "unit_type": { + "default": null, + } + } + }) + ) +} + +#[test] +fn derive_unit_struct_schema() { + let value = api_doc! { + struct UnitValue; + }; + + assert_json_eq!( + value, + json!({ + "default": null, + }) + ) +} + +#[test] +fn derive_schema_with_multiple_schema_attributes() { + let value = api_doc! { + struct UserName { + #[schema(min_length = 5)] + #[schema(max_length = 10)] + name: String, + } + }; + + assert_json_eq!( + value, + json!({ + "type": "object", + "properties": { + "name": { + "type": "string", + "minLength": 5, + "maxLength": 10, + } + }, + "required": ["name"] + }) + ) +} + +#[test] +fn derive_struct_with_deprecated_fields() { + #[derive(ToSchema)] + struct Foobar; + let account = api_doc! { + struct Account { + #[deprecated] + id: i64, + #[deprecated] + username: String, + #[deprecated] + role_ids: Vec<i32>, + #[deprecated] + foobars: Vec<Foobar>, + #[deprecated] + map: HashMap<String, String> + } + }; + + assert_json_eq!( + account, + json!({ + "properties": { + "id": { + "type": "integer", + "format": "int64", + "deprecated": true + }, + "username": { + "type": "string", + "deprecated": true + }, + "role_ids": { + "type": "array", + "deprecated": true, + "items": { + "type": "integer", + "format": "int32" + } + }, + "foobars": { + "type": "array", + "deprecated": true, + "items": { + "$ref": "#/components/schemas/Foobar" + } + }, + "map": { + "propertyNames": { + "type": "string" + }, + "additionalProperties": { + "type": "string" + }, + "deprecated": true, + "type": "object" + } + }, + "required": ["id", "username", "role_ids", "foobars", "map"], + "type": "object" + }) + ) +} + +#[test] +fn derive_struct_with_schema_deprecated_fields() { + #[derive(ToSchema)] + struct Foobar; + let account = api_doc! { + struct AccountA { + #[schema(deprecated)] + id: i64, + #[schema(deprecated)] + username: String, + #[schema(deprecated)] + role_ids: Vec<i32>, + #[schema(deprecated)] + foobars: Vec<Foobar>, + #[schema(deprecated)] + map: HashMap<String, String> + } + }; + + assert_json_eq!( + account, + json!({ + "properties": { + "id": { + "type": "integer", + "format": "int64", + "deprecated": true + }, + "username": { + "type": "string", + "deprecated": true + }, + "role_ids": { + "type": "array", + "deprecated": true, + "items": { + "type": "integer", + "format": "int32" + } + }, + "foobars": { + "type": "array", + "deprecated": true, + "items": { + "$ref": "#/components/schemas/Foobar" + } + }, + "map": { + "propertyNames": { + "type": "string" + }, + "additionalProperties": { + "type": "string" + }, + "deprecated": true, + "type": "object" + } + }, + "required": ["id", "username", "role_ids", "foobars", "map"], + "type": "object" + }) + ) +} + +#[test] +fn derive_schema_with_object_type_description() { + let value = api_doc! { + struct Value { + /// This is object value + #[schema(value_type = Object)] + object: String, + } + }; + + assert_json_eq!( + value, + json!({ + "properties": { + "object": { + "description": "This is object value", + "type": "object" + }, + }, + "required": ["object"], + "type": "object" + }) + ) +} + +#[test] +fn derive_schema_with_explicit_value_type() { + let value = api_doc! { + struct Value { + #[schema(value_type = Value)] + any: String, + } + }; + + assert_json_eq!( + value, + json!({ + "properties": { + "any": { + }, + }, + "required": ["any"], + "type": "object" + }) + ) +} + +#[test] +fn derive_schema_with_implicit_value_type() { + let value = api_doc! { + struct Value { + any: serde_json::Value, + } + }; + + assert_json_eq!( + value, + json!({ + "properties": { + "any": { + }, + }, + "required": ["any"], + "type": "object" + }) + ) +} + +#[test] +fn derive_tuple_named_struct_field() { + #[derive(ToSchema)] + #[allow(unused)] + struct Person { + name: String, + } + + let value = api_doc! { + struct Post { + info: (String, i64, bool, Person) + } + }; + + assert_json_eq!( + value, + json!({ + "properties": { + "info": { + "prefixItems": [ + { + "type": "string" + }, + { + "type": "integer", + "format": "int64", + }, + { + "type": "boolean", + }, + { + "properties": { + "name": { + "type": "string" + } + }, + "required": ["name"], + "type": "object" + } + ], + "items": false, + "type": "array" + } + }, + "type": "object", + "required": ["info"] + }) + ) +} + +#[test] +fn derive_nullable_tuple() { + let value = api_doc! { + struct Post { + /// This is description + #[deprecated] + info: Option<(String, i64)> + } + }; + + assert_json_eq!( + value, + json!({ + "properties": { + "info": { + "prefixItems": [ + { + "type": "string" + }, + { + "type": "integer", + "format": "int64", + }, + ], + "items": false, + "type": ["array", "null"], + "deprecated": true, + "description": "This is description", + } + }, + "type": "object", + }) + ) +} + +#[test] +fn derive_unit_type_untagged_enum() { + #[derive(Serialize, ToSchema)] + struct AggregationRequest; + + let value = api_doc! { + #[derive(Serialize)] + #[serde(untagged)] + enum ComputeRequest { + Aggregation(AggregationRequest), + Breakdown, + } + }; + + assert_json_eq!( + value, + json!({ + "oneOf": [ + { + "$ref": "#/components/schemas/AggregationRequest" + }, + { + "type": "null", + "default": null, + } + ] + }) + ) +} + +#[test] +fn derive_schema_with_unit_hashmap() { + let value = api_doc! { + struct Container { + volumes: HashMap<String, HashMap<(), ()>> + } + }; + + assert_json_eq!( + value, + json!({ + "properties": { + "volumes": { + "propertyNames": { + "type": "string" + }, + "additionalProperties": { + "propertyNames": { + "default": null, + }, + "additionalProperties": { + "default": null, + }, + "type": "object" + }, + "type": "object" + }, + }, + "required": [ + "volumes" + ], + "type": "object" + }) + ) +} + +#[test] +#[cfg(feature = "rc_schema")] +fn derive_struct_with_arc() { + use std::sync::Arc; + + let greeting = api_doc! { + struct Greeting { + greeting: Arc<String> + } + }; + + assert_json_eq!( + greeting, + json!({ + "properties": { + "greeting": { + "type": "string" + }, + }, + "required": [ + "greeting" + ], + "type": "object" + }) + ) +} + +#[test] +#[cfg(feature = "rc_schema")] +fn derive_struct_with_nested_arc() { + use std::sync::Arc; + + let greeting = api_doc! { + struct Greeting { + #[allow(clippy::redundant_allocation)] + greeting: Arc<Arc<String>> + } + }; + + assert_json_eq!( + greeting, + json!({ + "properties": { + "greeting": { + "type": "string" + }, + }, + "required": [ + "greeting" + ], + "type": "object" + }) + ) +} + +#[test] +#[cfg(feature = "rc_schema")] +fn derive_struct_with_collection_of_arcs() { + use std::sync::Arc; + + let greeting = api_doc! { + struct Greeting { + greeting: Arc<Vec<String>> + } + }; + + assert_json_eq!( + greeting, + json!({ + "properties": { + "greeting": { + "items": { + "type": "string", + }, + "type": "array" + }, + }, + "required": [ + "greeting" + ], + "type": "object" + }) + ) +} + +#[test] +#[cfg(feature = "rc_schema")] +fn derive_struct_with_rc() { + use std::rc::Rc; + + let greeting = api_doc! { + struct Greeting { + greeting: Rc<String> + } + }; + + assert_json_eq!( + greeting, + json!({ + "properties": { + "greeting": { + "type": "string" + }, + }, + "required": [ + "greeting" + ], + "type": "object" + }) + ) +} + +#[test] +fn derive_btreeset() { + use std::collections::BTreeSet; + + let greeting = api_doc! { + struct Greeting { + values: BTreeSet<String>, + } + }; + + assert_json_eq!( + greeting, + json!({ + "properties": { + "values": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + }, + "required": [ + "values" + ], + "type": "object" + }) + ) +} + +#[test] +fn derive_hashset() { + use std::collections::HashSet; + + let greeting = api_doc! { + struct Greeting { + values: HashSet<String>, + } + }; + + assert_json_eq!( + greeting, + json!({ + "properties": { + "values": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + }, + "required": [ + "values" + ], + "type": "object" + }) + ) +} + +#[test] +fn derive_doc_hidden() { + let map = api_doc! { + #[doc(hidden)] + struct Map { + map: HashMap<String, String>, + } + }; + + assert_value! { map=> + "properties.map.additionalProperties.type" = r#""string""#, "Additional Property Type" + }; +} + +#[test] +fn derive_schema_with_docstring_on_unit_variant_of_enum() { + let value: Value = api_doc! { + /// top level doc for My enum + #[derive(Serialize)] + enum MyEnum { + /// unit variant doc + UnitVariant, + /// non-unit doc + NonUnitVariant(String), + } + }; + + assert_json_eq!( + value, + json!({ + "description": "top level doc for My enum", + "oneOf": [ + { + "description": "unit variant doc", + "enum": [ + "UnitVariant" + ], + "type": "string" + }, + { + "description": "non-unit doc", + "properties": { + "NonUnitVariant": { + "description": "non-unit doc", + "type": "string" + } + }, + "required": [ + "NonUnitVariant" + ], + "type": "object" + } + ] + }) + ); +} + +#[test] +fn derive_schema_with_docstring_on_tuple_variant_first_element_option() { + let value: Value = api_doc! { + /// top level doc for My enum + enum MyEnum { + /// doc for tuple variant with Option as first element - I now produce a description + TupleVariantWithOptionFirst(Option<String>), + + /// doc for tuple variant without Option as first element - I produce a description + TupleVariantWithNoOption(String), + } + }; + + assert_json_eq!( + value, + json!( + { + "oneOf": [ + { + "type": "object", + "required": [ "TupleVariantWithOptionFirst" ], + "description": "doc for tuple variant with Option as first element - I now produce a description", + "properties": { + "TupleVariantWithOptionFirst": { + "type": ["string", "null"], + "description": "doc for tuple variant with Option as first element - I now produce a description" + } + } + }, + { + "type": "object", + "required": [ "TupleVariantWithNoOption" ], + "description": "doc for tuple variant without Option as first element - I produce a description", + "properties": { + "TupleVariantWithNoOption": { + "type": "string", + "description": "doc for tuple variant without Option as first element - I produce a description" + } + } + } + ], + "description": "top level doc for My enum" + } + ) + ); + + let value: Value = api_doc! { + /// top level doc for My enum + enum MyEnum { + /// doc for tuple variant with Option as first element - I now produce a description + TupleVariantWithOptionFirst(Option<String>, String), + + /// doc for tuple variant without Option as first element - I produce a description + TupleVariantWithOptionSecond(String, Option<String>), + } + }; + + assert_json_eq!( + value, + json!({ + "description": "top level doc for My enum", + "oneOf": [ + { + "description": "doc for tuple variant with Option as first element - I now produce a description", + "properties": { + "TupleVariantWithOptionFirst": { + "description": "doc for tuple variant with Option as first element - I now produce a description", + "items": { + "type": "object" + }, + "maxItems": 2, + "minItems": 2, + "type": "array" + } + }, + "required": [ + "TupleVariantWithOptionFirst" + ], + "type": "object" + }, + { + "description": "doc for tuple variant without Option as first element - I produce a description", + "properties": { + "TupleVariantWithOptionSecond": { + "description": "doc for tuple variant without Option as first element - I produce a description", + "items": { + "type": "object" + }, + "maxItems": 2, + "minItems": 2, + "type": "array" + } + }, + "required": [ + "TupleVariantWithOptionSecond" + ], + "type": "object" + } + ] + }) + ); +} + +#[test] +fn derive_struct_with_description_override() { + let value = api_doc! { + /// Normal description + #[schema( + description = "This is overridden description" + )] + struct SchemaDescOverride { + field1: &'static str + } + }; + + assert_json_eq!( + value, + json!({ + "properties": { + "field1": { + "type": "string" + } + }, + "required": ["field1"], + "description": "This is overridden description", + "type": "object" + }) + ) +} + +#[test] +fn derive_unnamed_struct_with_description_override() { + let value = api_doc! { + /// Normal description + #[schema( + description = include_str!("./testdata/description_override") + )] + struct SchemaDescOverride(&'static str); + }; + + assert_json_eq!( + value, + json!({ + "description": "This is description from include_str!\n", + "type": "string" + }) + ) +} + +#[test] +fn derive_simple_enum_description_override() { + let value = api_doc! { + /// Normal description + #[schema( + description = include_str!("./testdata/description_override") + )] + enum SimpleEnum { + Value1 + } + }; + + assert_json_eq!( + value, + json!({ + "description": "This is description from include_str!\n", + "type": "string", + "enum": [ "Value1" ] + }) + ) +} + +#[test] +fn derive_mixed_enum_description_override() { + #[allow(unused)] + #[derive(ToSchema)] + struct User { + name: &'static str, + } + let value = api_doc! { + /// Normal description + #[schema( + description = include_str!("./testdata/description_override") + )] + enum UserEnumComplex { + Value1, + User(User) + } + }; + + assert_json_eq!( + value, + json!({ + "description": "This is description from include_str!\n", + "oneOf": [ + { + "type": "string", + "enum": [ "Value1" ] + }, + { + "type": "object", + "properties": { + "User": { + "$ref": "#/components/schemas/User" + } + }, + "required": [ "User" ] + } + ] + }) + ) +} + +#[test] +fn content_encoding_named_field() { + let item = api_doc! { + struct PersonRequest { + #[schema(content_encoding = "bas64", value_type = String)] + picture: Vec<u8> + } + }; + + assert_json_eq!( + item, + json!({ + "properties": { + "picture": { + "type": "string", + "contentEncoding": "bas64" + } + }, + "required": [ + "picture" + ], + "type": "object" + }) + ) +} + +#[test] +fn content_media_type_named_field() { + let item = api_doc! { + struct PersonRequest { + #[schema(content_media_type = "application/octet-stream", value_type = String)] + doc: Vec<u8> + } + }; + + assert_json_eq!( + item, + json!({ + "properties": { + "doc": { + "type": "string", + "contentMediaType": "application/octet-stream" + } + }, + "required": [ + "doc" + ], + "type": "object" + }) + ) +} + +#[test] +fn derive_schema_required_custom_type_required() { + #[allow(unused)] + struct Param<T>(T); + + let value = api_doc! { + #[allow(unused)] + struct Params { + /// Maximum number of results to return. + #[schema(required = false, value_type = u32, example = 12)] + limit: Param<u32>, + /// Maximum number of results to return. + #[schema(required = true, value_type = u32, example = 12)] + limit_explisit_required: Param<u32>, + /// Maximum number of results to return. + #[schema(value_type = Option<u32>, example = 12)] + not_required: Param<u32>, + /// Maximum number of results to return. + #[schema(required = true, value_type = Option<u32>, example = 12)] + option_required: Param<u32>, + } + }; + + assert_json_eq!( + value, + json!({ + "properties": { + "limit": { + "description": "Maximum number of results to return.", + "example": 12, + "format": "int32", + "minimum": 0, + "type": "integer" + }, + "limit_explisit_required": { + "description": "Maximum number of results to return.", + "example": 12, + "format": "int32", + "minimum": 0, + "type": "integer" + }, + "not_required": { + "description": "Maximum number of results to return.", + "example": 12, + "format": "int32", + "minimum": 0, + "type": [ + "integer", + "null" + ] + }, + "option_required": { + "description": "Maximum number of results to return.", + "example": 12, + "format": "int32", + "minimum": 0, + "type": [ + "integer", + "null" + ] + } + }, + "type": "object", + "required": [ + "limit_explisit_required", + "option_required" + ] + }) + ); +} + +#[test] +fn derive_negative_numbers() { + let value = api_doc! { + #[schema(default)] + #[derive(Default)] + struct Negative { + #[schema(default = -1, minimum = -2.1)] + number: f64, + #[schema(default = -2, maximum = -3)] + solid_number: i64, + } + }; + + assert_json_eq! { + value, + json!({ + "properties": { + "number": { + "type": "number", + "format": "double", + "default": -1, + "minimum": -2.1 + }, + "solid_number": { + "format": "int64", + "type": "integer", + "default": -2, + "maximum": -3, + } + }, + "required": [ "number", "solid_number" ], + "type": "object" + }) + } +} + +#[test] +fn derive_map_with_property_names() { + #![allow(unused)] + + #[derive(ToSchema)] + enum Names { + Foo, + Bar, + } + + let value = api_doc! { + struct Mapped(std::collections::BTreeMap<Names, String>); + }; + + assert_json_eq!( + value, + json!({ + "propertyNames": { + "type": "string", + "enum": ["Foo", "Bar"] + }, + "additionalProperties": { + "type": "string" + }, + "type": "object" + }) + ) +} + +#[test] +fn derive_schema_with_ignored_field() { + #![allow(unused)] + + let value = api_doc! { + struct SchemaIgnoredField { + value: String, + #[schema(ignore)] + __this_is_private: String, + } + }; + + assert_json_eq!( + value, + json!({ + "properties": { + "value": { + "type": "string" + } + }, + "required": [ "value" ], + "type": "object" + }) + ) +} + +#[test] +fn derive_schema_with_ignore_eq_false_field() { + #![allow(unused)] + let value = api_doc! { + struct SchemaIgnoredField { + value: String, + #[schema(ignore = false)] + this_is_not_private: String, + } + }; + + assert_json_eq!( + value, + json!({ + "properties": { + "value": { + "type": "string" + }, + "this_is_not_private": { + "type": "string" + } + }, + "required": [ "value", "this_is_not_private" ], + "type": "object" + }) + ) +} + +#[test] +fn derive_schema_with_ignore_eq_call_field() { + #![allow(unused)] + + let value = api_doc! { + struct SchemaIgnoredField { + value: String, + #[schema(ignore = Self::ignore)] + this_is_not_private: String, + } + + impl SchemaIgnoredField { + fn ignore() -> bool { + false + } + } + }; + + assert_json_eq!( + value, + json!({ + "properties": { + "value": { + "type": "string" + }, + "this_is_not_private": { + "type": "string" + } + }, + "required": [ "value", "this_is_not_private" ], + "type": "object" + }) + ) +} + +#[test] +fn derive_schema_unnamed_title() { + #![allow(unused)] + + let value = api_doc! { + #[schema(title = "This is vec title")] + struct SchemaIgnoredField (Vec<String>); + }; + + assert_json_eq!( + value, + json!({ + "title": "This is vec title", + "items": { + "type": "string" + }, + "type": "array" + }) + ); + + #[derive(ToSchema)] + enum UnnamedEnum { + One, + Two, + } + + let enum_value = api_doc! { + #[schema(title = "This is enum ref title")] + struct SchemaIgnoredField (UnnamedEnum); + }; + + assert_json_eq!( + enum_value, + json!({ + "title": "This is enum ref title", + "oneOf": [ + { + "$ref": "#/components/schemas/UnnamedEnum" + } + ], + }) + ) +} + +#[test] +fn derive_struct_inline_with_description() { + #[derive(fastapi::ToSchema)] + #[allow(unused)] + struct Foo { + name: &'static str, + } + + let value = api_doc! { + struct FooInlined { + /// This is description + #[schema(inline)] + with_description: Foo, + + #[schema(inline)] + no_description_inline: Foo, + } + }; + + assert_json_eq!( + &value, + json!({ + "properties": { + "no_description_inline": { + "properties": { + "name": { + "type": "string" + }, + }, + "required": [ + "name" + ], + "type": "object" + }, + "with_description": { + "description": "This is description", + "oneOf": [ + { + "properties": { + "name": { + "type": "string" + }, + }, + "required": [ + "name" + ], + "type": "object" + } + ] + }, + }, + "required": [ + "with_description", + "no_description_inline", + ], + "type": "object" + }) + ); +} + +#[test] +fn schema_manual_impl() { + #![allow(unused)] + + struct Newtype(String); + + impl ToSchema for Newtype { + fn name() -> std::borrow::Cow<'static, str> { + std::borrow::Cow::Borrowed("Newtype") + } + } + + impl fastapi::PartialSchema for Newtype { + fn schema() -> fastapi::openapi::RefOr<fastapi::openapi::schema::Schema> { + String::schema() + } + } + + let value = api_doc! { + struct Dto { + customer: Newtype + } + }; + + assert_json_eq!( + value, + json!({ + "properties": { + "customer": { + "$ref": "#/components/schemas/Newtype" + } + }, + "required": ["customer"], + "type": "object" + }) + ) +} + +#[test] +fn const_generic_test() { + #![allow(unused)] + + #[derive(ToSchema)] + pub struct ArrayResponse<T: ToSchema, const N: usize> { + array: [T; N], + } + + #[derive(ToSchema)] + struct CombinedResponse<T: ToSchema, const N: usize> { + pub array_response: ArrayResponse<T, N>, + } + + use fastapi::PartialSchema; + let schema = <CombinedResponse<String, 1> as PartialSchema>::schema(); + let value = serde_json::to_value(schema).expect("schema is JSON serializable"); + + assert_json_eq! { + value, + json!({ + "properties": { + "array_response": { + "$ref": "#/components/schemas/ArrayResponse_String" + } + }, + "required": ["array_response"], + "type": "object" + }) + } +} + +#[test] +fn unit_struct_schema() { + #![allow(unused)] + + /// This is description + #[derive(ToSchema)] + #[schema(title = "Title")] + struct UnitType; + + use fastapi::PartialSchema; + let schema = <UnitType as PartialSchema>::schema(); + let value = serde_json::to_value(schema).expect("schema is JSON serializable"); + + assert_json_eq! { + value, + json!({ + "description": "This is description", + "title": "Title", + "default": null, + }) + } +} + +#[test] +fn test_recursion_compiles() { + #![allow(unused)] + + #[derive(ToSchema)] + pub struct Instance { + #[schema(no_recursion)] + kind: Kind, + } + + #[derive(ToSchema)] + pub enum Kind { + MultipleNested(Vec<Instance>), + } + + #[derive(ToSchema)] + pub struct Error { + instance: Instance, + } + + #[derive(ToSchema)] + pub enum Recursion { + Named { + #[schema(no_recursion)] + foobar: Box<Recur>, + }, + #[schema(no_recursion)] + Unnamed(Box<Recur>), + NoValue, + } + + #[derive(ToSchema)] + pub struct Recur { + unname: UnnamedError, + e: Recursion, + } + + #[derive(ToSchema)] + #[schema(no_recursion)] + pub struct UnnamedError(Kind); + + #[derive(OpenApi)] + #[openapi(components(schemas(Error, Recur)))] + pub struct ApiDoc {} + + let json = ApiDoc::openapi() + .to_pretty_json() + .expect("OpenApi is JSON serializable"); + println!("{json}") +} + +#[test] +fn test_named_and_enum_container_recursion_compiles() { + #![allow(unused)] + + #[derive(ToSchema)] + #[schema(no_recursion)] + pub struct Tree { + left: Box<Tree>, + right: Box<Tree>, + map: HashMap<String, Tree>, + } + + #[derive(ToSchema)] + #[schema(no_recursion)] + pub enum TreeRecursion { + Named { left: Box<TreeRecursion> }, + Unnamed(Box<TreeRecursion>), + NoValue, + } + + #[derive(ToSchema)] + pub enum Recursion { + #[schema(no_recursion)] + Named { + left: Box<Recursion>, + right: Box<Recursion>, + }, + #[schema(no_recursion)] + Unnamed(HashMap<String, Recursion>), + NoValue, + } + + #[derive(OpenApi)] + #[openapi(components(schemas(Recursion, Tree, TreeRecursion)))] + pub struct ApiDoc {} + + let json = ApiDoc::openapi() + .to_pretty_json() + .expect("OpenApi is JSON serializable"); + println!("{json}") +} diff --git a/fastapi-gen/tests/schema_generics.rs b/fastapi-gen/tests/schema_generics.rs new file mode 100644 index 0000000..1d3ab87 --- /dev/null +++ b/fastapi-gen/tests/schema_generics.rs @@ -0,0 +1,506 @@ +use std::borrow::Cow; +use std::marker::PhantomData; + +use assert_json_diff::assert_json_eq; +use fastapi::openapi::{Info, RefOr, Schema}; +use fastapi::{schema, OpenApi, PartialSchema, ToSchema}; +use serde::Serialize; +use serde_json::json; + +#[test] +fn generic_schema_custom_bound() { + #![allow(unused)] + + #[derive(Serialize, ToSchema)] + #[schema(bound = "T: Clone + Sized, T: Sized")] + struct Type<T> { + #[serde(skip)] + t: PhantomData<T>, + } + + #[derive(Clone)] + struct NoToSchema; + fn assert_is_to_schema<T: ToSchema>() {} + + assert_is_to_schema::<Type<NoToSchema>>(); +} + +#[test] +fn generic_request_body_schema() { + #![allow(unused)] + + #[derive(ToSchema)] + #[schema(as = path::MyType<T>)] + struct Type<T> { + #[schema(inline)] + t: T, + } + + #[derive(ToSchema)] + struct Person<T: Sized, P> { + field: T, + #[schema(inline)] + t: P, + } + + #[fastapi::path( + get, + path = "/handler", + request_body = inline(Person<String, Type<i32>>), + )] + async fn handler() {} + + #[derive(OpenApi)] + #[openapi( + components( + schemas( + Person::<String, Type<i32>>, + ) + ), + paths( + handler + ) + )] + struct ApiDoc; + + let mut doc = ApiDoc::openapi(); + doc.info = Info::new("title", "version"); + + let actual = serde_json::to_value(&doc).expect("operation is JSON serializable"); + let json = serde_json::to_string_pretty(&actual).unwrap(); + + println!("{json}"); + + assert_json_eq!( + actual, + json!({ + "openapi": "3.1.0", + "info": { + "title": "title", + "version": "version" + }, + "paths": { + "/handler": { + "get": { + "tags": [], + "operationId": "handler", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "field", + "t" + ], + "properties": { + "field": { + "type": "string" + }, + "t": { + "type": "object", + "required": [ + "t" + ], + "properties": { + "t": { + "type": "integer", + "format": "int32" + } + } + } + } + } + } + }, + "required": true + }, + "responses": {} + } + } + }, + "components": { + "schemas": { + "Person_String_path.MyType_i32": { + "type": "object", + "required": [ + "field", + "t" + ], + "properties": { + "field": { + "type": "string" + }, + "t": { + "type": "object", + "required": [ + "t" + ], + "properties": { + "t": { + "type": "integer", + "format": "int32" + } + } + } + } + } + } + } + }) + ); +} + +#[test] +fn generic_schema_full_api() { + #![allow(unused)] + + #[derive(ToSchema)] + #[schema(as = path::MyType<T>)] + struct Type<T> { + t: T, + } + + #[derive(ToSchema)] + struct Person<'p, T: Sized, P> { + id: usize, + name: Option<Cow<'p, str>>, + field: T, + t: P, + } + + #[derive(ToSchema)] + #[schema(as = path::to::PageList)] + struct Page<T> { + total: usize, + page: usize, + pages: usize, + items: Vec<T>, + } + + #[derive(ToSchema)] + #[schema(as = path::to::Element<T>)] + enum E<T> { + One(T), + Many(Vec<T>), + } + + struct NoToSchema; + fn assert_no_need_to_schema_outside_api(_: Type<NoToSchema>) {} + + #[fastapi::path( + get, + path = "/handler", + request_body = inline(Person<'_, String, Type<i32>>), + responses( + (status = OK, body = inline(Page<Person<'_, String, Type<i32>>>)), + (status = 400, body = Page<Person<'_, String, Type<i32>>>) + ) + )] + async fn handler() {} + + #[derive(OpenApi)] + #[openapi( + components( + schemas( + Person::<'_, String, Type<i32>>, + Page::<Person<'_, String, Type<i32>>>, + E::<String>, + ) + ), + paths( + handler + ) + )] + struct ApiDoc; + + let mut doc = ApiDoc::openapi(); + doc.info = Info::new("title", "version"); + + let actual = doc.to_pretty_json().expect("OpenApi is JSON serializable"); + println!("{actual}"); + let expected = include_str!("./testdata/schema_generics_openapi"); + + assert_eq!(expected.trim(), actual.trim()); +} + +#[test] +fn schema_with_non_generic_root() { + #![allow(unused)] + + #[derive(ToSchema)] + struct Foo<T> { + bar: Bar<T>, + } + + #[derive(ToSchema)] + struct Bar<T> { + #[schema(inline)] + value: T, + } + + #[derive(ToSchema)] + struct Top { + foo1: Foo<String>, + foo2: Foo<i32>, + } + + #[derive(OpenApi)] + #[openapi(components(schemas(Top)))] + struct ApiDoc; + let mut api = ApiDoc::openapi(); + api.info = Info::new("title", "version"); + + let actual = api.to_pretty_json().expect("schema is JSON serializable"); + println!("{actual}"); + let expected = include_str!("./testdata/schema_non_generic_root_generic_references"); + + assert_eq!(actual.trim(), expected.trim()) +} + +#[test] +fn derive_generic_schema_enum_variants() { + #![allow(unused)] + + #[derive(ToSchema)] + pub struct FooStruct<B> { + pub foo: B, + } + + #[derive(ToSchema)] + enum FoosEnum { + ThingNoAliasOption(FooStruct<Option<i32>>), + FooEnumThing(#[schema(inline)] FooStruct<Vec<i32>>), + FooThingOptionVec(#[schema(inline)] FooStruct<Option<Vec<i32>>>), + FooThingLinkedList(#[schema(inline)] FooStruct<std::collections::LinkedList<i32>>), + FooThingBTreeMap(#[schema(inline)] FooStruct<std::collections::BTreeMap<String, String>>), + FooThingHashMap(#[schema(inline)] FooStruct<std::collections::HashMap<i32, String>>), + FooThingHashSet(#[schema(inline)] FooStruct<std::collections::HashSet<i32>>), + FooThingBTreeSet(#[schema(inline)] FooStruct<std::collections::BTreeSet<i32>>), + } + + let schema = FoosEnum::schema(); + let json = serde_json::to_string_pretty(&schema).expect("Schema is JSON serializable"); + let value = json.trim(); + + #[derive(OpenApi)] + #[openapi(components(schemas(FoosEnum)))] + struct Api; + + let mut api = Api::openapi(); + api.info = Info::new("title", "version"); + let api_json = api.to_pretty_json().expect("OpenAPI is JSON serializable"); + println!("{api_json}"); + let expected = include_str!("./testdata/schema_generic_enum_variant_with_generic_type"); + assert_eq!(expected.trim(), api_json.trim()); +} + +#[test] +fn derive_generic_schema_collect_recursive_schema_not_inlined() { + #![allow(unused)] + + #[derive(ToSchema)] + pub struct FooStruct<B> { + pub foo: B, + } + + #[derive(ToSchema)] + pub struct Value(String); + + #[derive(ToSchema)] + pub struct Person<T> { + name: String, + account: Account, + t: T, + } + + #[derive(ToSchema)] + pub struct Account { + name: String, + } + + #[derive(ToSchema, PartialEq, Eq, PartialOrd, Ord, Hash)] + pub struct Ty<T> { + t: T, + } + + #[derive(ToSchema, PartialEq, Eq, PartialOrd, Ord, Hash)] + enum Ky { + One, + Two, + } + + #[derive(ToSchema)] + enum FoosEnum { + LinkedList(std::collections::LinkedList<Person<Value>>), + BTreeMap(FooStruct<std::collections::BTreeMap<String, Person<Value>>>), + HashMap(FooStruct<std::collections::HashMap<i32, Person<i64>>>), + HashSet(FooStruct<std::collections::HashSet<i32>>), + Btre(FooStruct<std::collections::BTreeMap<Ty<Ky>, Person<Value>>>), + } + let schema = FoosEnum::schema(); + let json = serde_json::to_string_pretty(&schema).expect("Schema is JSON serializable"); + let value = json.trim(); + + #[derive(OpenApi)] + #[openapi(components(schemas(FoosEnum)))] + struct Api; + + let mut api = Api::openapi(); + api.info = Info::new("title", "version"); + let api_json = api.to_pretty_json().expect("OpenAPI is JSON serializable"); + println!("{api_json}"); + let expected = include_str!("./testdata/schema_generic_collect_non_inlined_schema"); + assert_eq!(expected.trim(), api_json.trim()); +} + +#[test] +fn high_order_types() { + #![allow(unused)] + + #[derive(ToSchema)] + pub struct High<T> { + #[schema(inline)] + high: T, + } + + #[derive(ToSchema)] + pub struct HighBox { + value: High<Box<i32>>, + } + + #[derive(ToSchema)] + pub struct HighCow(High<Cow<'static, i32>>); + + #[derive(ToSchema)] + pub struct HighRefCell(High<std::cell::RefCell<i32>>); + + #[derive(OpenApi)] + #[openapi(components(schemas(HighBox, HighCow, HighRefCell)))] + struct Api; + + let mut api = Api::openapi(); + api.info = Info::new("title", "version"); + let api_json = api.to_pretty_json().expect("OpenAPI is JSON serializable"); + println!("{api_json}"); + let expected = include_str!("./testdata/schema_high_order_types"); + assert_eq!(expected.trim(), api_json.trim()); +} + +#[test] +#[cfg(feature = "rc_schema")] +fn rc_schema_high_order_types() { + #![allow(unused)] + + #[derive(ToSchema)] + pub struct High<T> { + high: T, + } + + #[derive(ToSchema)] + pub struct HighArc(High<std::sync::Arc<i32>>); + + #[derive(ToSchema)] + pub struct HighRc(High<std::rc::Rc<i32>>); + + #[derive(OpenApi)] + #[openapi(components(schemas(HighArc, HighRc)))] + struct Api; + + let mut api = Api::openapi(); + api.info = Info::new("title", "version"); + let api_json = api.to_pretty_json().expect("OpenAPI is JSON serializable"); + println!("{api_json}"); + + let expected = include_str!("./testdata/rc_schema_high_order_types"); + assert_eq!(expected.trim(), api_json.trim()); +} + +#[test] +#[cfg(feature = "uuid")] +fn uuid_type_generic_argument() { + #![allow(unused)] + + #[derive(ToSchema)] + pub struct High<T> { + high: T, + } + + #[derive(ToSchema)] + pub struct HighUuid(High<Option<uuid::Uuid>>); + + #[derive(OpenApi)] + #[openapi(components(schemas(HighUuid)))] + struct Api; + + let mut api = Api::openapi(); + api.info = Info::new("title", "version"); + let api_json = api.to_pretty_json().expect("OpenAPI is JSON serializable"); + println!("{api_json}"); + + let expected = include_str!("./testdata/uuid_type_generic_argument"); + assert_eq!(expected.trim(), api_json.trim()); +} + +#[test] +#[ignore = "arrays, slices, tuples as generic argument is not supported at the moment"] +fn slice_generic_args() { + #![allow(unused)] + + #[derive(ToSchema)] + pub struct High<T> { + high: T, + } + + // // #[derive(ToSchema)] + // pub struct HighSlice(High<&'static [i32]>); + // + // #[derive(OpenApi)] + // // #[openapi(components(schemas(HighSlice)))] + // struct Api; + // + // let mut api = Api::openapi(); + // api.info = Info::new("title", "version"); + // let api_json = api.to_pretty_json().expect("OpenAPI is JSON serializable"); + // println!("{api_json}"); + // + // let expected = include_str!("./testdata/rc_schema_high_order_types"); + // assert_eq!(expected.trim(), api_json.trim()); +} + +#[test] +#[ignore = "For debugging only"] +fn schema_macro_run() { + #![allow(unused)] + + #[derive(ToSchema)] + #[schema(as = path::MyType<T>)] + struct Type<T> { + t: T, + } + + #[derive(ToSchema)] + struct Person<'p, T: Sized, P> { + id: usize, + name: Option<Cow<'p, str>>, + field: T, + t: P, + } + + #[derive(ToSchema)] + #[schema(as = path::to::PageList)] + struct Page<T> { + total: usize, + page: usize, + pages: usize, + items: Vec<T>, + } + + let schema: RefOr<Schema> = schema!(Page<Person<'_, String, Type<i32>>>).into(); + // let schema: RefOr<Schema> = schema!(Person<'_, String, Type<i32>>).into(); + // let schema: RefOr<Schema> = schema!(Vec<Person<'_, String, Type<i32>>>).into(); + println!( + "{}", + serde_json::to_string_pretty(&schema).expect("schema is JSON serializable") + ); +} diff --git a/fastapi-gen/tests/testdata/description_override b/fastapi-gen/tests/testdata/description_override new file mode 100644 index 0000000..2e263bf --- /dev/null +++ b/fastapi-gen/tests/testdata/description_override @@ -0,0 +1 @@ +This is description from include_str! diff --git a/fastapi-gen/tests/testdata/openapi-derive-info-description b/fastapi-gen/tests/testdata/openapi-derive-info-description new file mode 100644 index 0000000..ee70662 --- /dev/null +++ b/fastapi-gen/tests/testdata/openapi-derive-info-description @@ -0,0 +1 @@ +this is include description diff --git a/fastapi-gen/tests/testdata/openapi_schemas_resolve_inner_schema_references b/fastapi-gen/tests/testdata/openapi_schemas_resolve_inner_schema_references new file mode 100644 index 0000000..9e0cd74 --- /dev/null +++ b/fastapi-gen/tests/testdata/openapi_schemas_resolve_inner_schema_references @@ -0,0 +1,293 @@ +{ + "schemas": { + "Account": { + "properties": { + "id": { + "format": "int32", + "type": "integer" + } + }, + "required": [ + "id" + ], + "type": "object" + }, + "Boo": { + "properties": { + "boo": { + "type": "boolean" + } + }, + "required": [ + "boo" + ], + "type": "object" + }, + "Element_String": { + "oneOf": [ + { + "properties": { + "One": { + "type": "string" + } + }, + "required": [ + "One" + ], + "type": "object" + }, + { + "properties": { + "Many": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "Many" + ], + "type": "object" + } + ] + }, + "Element_Yeah": { + "oneOf": [ + { + "properties": { + "One": { + "properties": { + "accounts": { + "items": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/Account" + } + ] + }, + "type": "array" + }, + "foo_bar": { + "$ref": "#/components/schemas/Foobar" + }, + "name": { + "type": "string" + } + }, + "required": [ + "name", + "foo_bar", + "accounts" + ], + "type": "object" + } + }, + "required": [ + "One" + ], + "type": "object" + }, + { + "properties": { + "Many": { + "items": { + "properties": { + "accounts": { + "items": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/Account" + } + ] + }, + "type": "array" + }, + "foo_bar": { + "$ref": "#/components/schemas/Foobar" + }, + "name": { + "type": "string" + } + }, + "required": [ + "name", + "foo_bar", + "accounts" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "Many" + ], + "type": "object" + } + ] + }, + "EnumMixedContent": { + "oneOf": [ + { + "enum": [ + "ContentZero" + ], + "type": "string" + }, + { + "properties": { + "One": { + "$ref": "#/components/schemas/Foobar" + } + }, + "required": [ + "One" + ], + "type": "object" + }, + { + "properties": { + "NamedSchema": { + "properties": { + "f": { + "type": "boolean" + }, + "foo": { + "$ref": "#/components/schemas/ThisIsNone" + }, + "int": { + "format": "int32", + "type": "integer" + }, + "value": { + "$ref": "#/components/schemas/Account" + }, + "value2": { + "$ref": "#/components/schemas/Boo" + } + }, + "required": [ + "value", + "value2", + "foo", + "int", + "f" + ], + "type": "object" + } + }, + "required": [ + "NamedSchema" + ], + "type": "object" + }, + { + "properties": { + "Many": { + "items": { + "$ref": "#/components/schemas/Person" + }, + "type": "array" + } + }, + "required": [ + "Many" + ], + "type": "object" + } + ] + }, + "Foob": { + "properties": { + "item": { + "$ref": "#/components/schemas/Element_String" + }, + "item2": { + "$ref": "#/components/schemas/Element_Yeah" + } + }, + "required": [ + "item", + "item2" + ], + "type": "object" + }, + "Foobar": { + "default": null + }, + "OneOfOne": { + "$ref": "#/components/schemas/Person" + }, + "OneOfYeah": { + "$ref": "#/components/schemas/Yeah" + }, + "Person": { + "properties": { + "accounts": { + "items": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/Account" + } + ] + }, + "type": "array" + }, + "foo_bar": { + "$ref": "#/components/schemas/Foobar" + }, + "name": { + "type": "string" + } + }, + "required": [ + "name", + "foo_bar", + "accounts" + ], + "type": "object" + }, + "ThisIsNone": { + "default": null + }, + "Yeah": { + "properties": { + "accounts": { + "items": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/Account" + } + ] + }, + "type": "array" + }, + "foo_bar": { + "$ref": "#/components/schemas/Foobar" + }, + "name": { + "type": "string" + } + }, + "required": [ + "name", + "foo_bar", + "accounts" + ], + "type": "object" + } + } +} diff --git a/fastapi-gen/tests/testdata/rc_schema_high_order_types b/fastapi-gen/tests/testdata/rc_schema_high_order_types new file mode 100644 index 0000000..fec4ce5 --- /dev/null +++ b/fastapi-gen/tests/testdata/rc_schema_high_order_types @@ -0,0 +1,42 @@ +{ + "openapi": "3.1.0", + "info": { + "title": "title", + "version": "version" + }, + "paths": {}, + "components": { + "schemas": { + "HighArc": { + "$ref": "#/components/schemas/High_Arc_i32" + }, + "HighRc": { + "$ref": "#/components/schemas/High_Rc_i32" + }, + "High_Arc_i32": { + "type": "object", + "required": [ + "high" + ], + "properties": { + "high": { + "type": "integer", + "format": "int32" + } + } + }, + "High_Rc_i32": { + "type": "object", + "required": [ + "high" + ], + "properties": { + "high": { + "type": "integer", + "format": "int32" + } + } + } + } + } +} diff --git a/fastapi-gen/tests/testdata/schema_generic_collect_non_inlined_schema b/fastapi-gen/tests/testdata/schema_generic_collect_non_inlined_schema new file mode 100644 index 0000000..d91775c --- /dev/null +++ b/fastapi-gen/tests/testdata/schema_generic_collect_non_inlined_schema @@ -0,0 +1,233 @@ +{ + "openapi": "3.1.0", + "info": { + "title": "title", + "version": "version" + }, + "paths": {}, + "components": { + "schemas": { + "Account": { + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "type": "string" + } + } + }, + "FooStruct_BTreeMap_String_Person_Value": { + "type": "object", + "required": [ + "foo" + ], + "properties": { + "foo": { + "type": "object", + "additionalProperties": { + "type": "object", + "required": [ + "name", + "account", + "t" + ], + "properties": { + "account": { + "$ref": "#/components/schemas/Account" + }, + "name": { + "type": "string" + }, + "t": { + "type": "string" + } + } + }, + "propertyNames": { + "type": "string" + } + } + } + }, + "FooStruct_BTreeMap_Ty_Ky_Person_Value": { + "type": "object", + "required": [ + "foo" + ], + "properties": { + "foo": { + "type": "object", + "additionalProperties": { + "type": "object", + "required": [ + "name", + "account", + "t" + ], + "properties": { + "account": { + "$ref": "#/components/schemas/Account" + }, + "name": { + "type": "string" + }, + "t": { + "type": "string" + } + } + }, + "propertyNames": { + "type": "object", + "required": [ + "t" + ], + "properties": { + "t": { + "type": "string", + "enum": [ + "One", + "Two" + ] + } + } + } + } + } + }, + "FooStruct_HashMap_i32_Person_i64": { + "type": "object", + "required": [ + "foo" + ], + "properties": { + "foo": { + "type": "object", + "additionalProperties": { + "type": "object", + "required": [ + "name", + "account", + "t" + ], + "properties": { + "account": { + "$ref": "#/components/schemas/Account" + }, + "name": { + "type": "string" + }, + "t": { + "type": "integer", + "format": "int64" + } + } + }, + "propertyNames": { + "type": "integer", + "format": "int32" + } + } + } + }, + "FooStruct_HashSet_i32": { + "type": "object", + "required": [ + "foo" + ], + "properties": { + "foo": { + "type": "array", + "items": { + "type": "integer", + "format": "int32" + }, + "uniqueItems": true + } + } + }, + "FoosEnum": { + "oneOf": [ + { + "type": "object", + "required": [ + "LinkedList" + ], + "properties": { + "LinkedList": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Person_Value" + } + } + } + }, + { + "type": "object", + "required": [ + "BTreeMap" + ], + "properties": { + "BTreeMap": { + "$ref": "#/components/schemas/FooStruct_BTreeMap_String_Person_Value" + } + } + }, + { + "type": "object", + "required": [ + "HashMap" + ], + "properties": { + "HashMap": { + "$ref": "#/components/schemas/FooStruct_HashMap_i32_Person_i64" + } + } + }, + { + "type": "object", + "required": [ + "HashSet" + ], + "properties": { + "HashSet": { + "$ref": "#/components/schemas/FooStruct_HashSet_i32" + } + } + }, + { + "type": "object", + "required": [ + "Btre" + ], + "properties": { + "Btre": { + "$ref": "#/components/schemas/FooStruct_BTreeMap_Ty_Ky_Person_Value" + } + } + } + ] + }, + "Person_Value": { + "type": "object", + "required": [ + "name", + "account", + "t" + ], + "properties": { + "account": { + "$ref": "#/components/schemas/Account" + }, + "name": { + "type": "string" + }, + "t": { + "type": "string" + } + } + } + } + } +} diff --git a/fastapi-gen/tests/testdata/schema_generic_enum_variant_with_generic_type b/fastapi-gen/tests/testdata/schema_generic_enum_variant_with_generic_type new file mode 100644 index 0000000..83fb8be --- /dev/null +++ b/fastapi-gen/tests/testdata/schema_generic_enum_variant_with_generic_type @@ -0,0 +1,221 @@ +{ + "openapi": "3.1.0", + "info": { + "title": "title", + "version": "version" + }, + "paths": {}, + "components": { + "schemas": { + "FooStruct_Option_i32": { + "type": "object", + "required": [ + "foo" + ], + "properties": { + "foo": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "integer", + "format": "int32" + } + ] + } + } + }, + "FoosEnum": { + "oneOf": [ + { + "type": "object", + "required": [ + "ThingNoAliasOption" + ], + "properties": { + "ThingNoAliasOption": { + "$ref": "#/components/schemas/FooStruct_Option_i32" + } + } + }, + { + "type": "object", + "required": [ + "FooEnumThing" + ], + "properties": { + "FooEnumThing": { + "type": "object", + "required": [ + "foo" + ], + "properties": { + "foo": { + "type": "array", + "items": { + "type": "integer", + "format": "int32" + } + } + } + } + } + }, + { + "type": "object", + "required": [ + "FooThingOptionVec" + ], + "properties": { + "FooThingOptionVec": { + "type": "object", + "required": [ + "foo" + ], + "properties": { + "foo": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "array", + "items": { + "type": "integer", + "format": "int32" + } + } + ] + } + } + } + } + }, + { + "type": "object", + "required": [ + "FooThingLinkedList" + ], + "properties": { + "FooThingLinkedList": { + "type": "object", + "required": [ + "foo" + ], + "properties": { + "foo": { + "type": "array", + "items": { + "type": "integer", + "format": "int32" + } + } + } + } + } + }, + { + "type": "object", + "required": [ + "FooThingBTreeMap" + ], + "properties": { + "FooThingBTreeMap": { + "type": "object", + "required": [ + "foo" + ], + "properties": { + "foo": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "propertyNames": { + "type": "string" + } + } + } + } + } + }, + { + "type": "object", + "required": [ + "FooThingHashMap" + ], + "properties": { + "FooThingHashMap": { + "type": "object", + "required": [ + "foo" + ], + "properties": { + "foo": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "propertyNames": { + "type": "integer", + "format": "int32" + } + } + } + } + } + }, + { + "type": "object", + "required": [ + "FooThingHashSet" + ], + "properties": { + "FooThingHashSet": { + "type": "object", + "required": [ + "foo" + ], + "properties": { + "foo": { + "type": "array", + "items": { + "type": "integer", + "format": "int32" + }, + "uniqueItems": true + } + } + } + } + }, + { + "type": "object", + "required": [ + "FooThingBTreeSet" + ], + "properties": { + "FooThingBTreeSet": { + "type": "object", + "required": [ + "foo" + ], + "properties": { + "foo": { + "type": "array", + "items": { + "type": "integer", + "format": "int32" + }, + "uniqueItems": true + } + } + } + } + } + ] + } + } + } +} diff --git a/fastapi-gen/tests/testdata/schema_generics_openapi b/fastapi-gen/tests/testdata/schema_generics_openapi new file mode 100644 index 0000000..f69eda2 --- /dev/null +++ b/fastapi-gen/tests/testdata/schema_generics_openapi @@ -0,0 +1,266 @@ +{ + "openapi": "3.1.0", + "info": { + "title": "title", + "version": "version" + }, + "paths": { + "/handler": { + "get": { + "tags": [], + "operationId": "handler", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "id", + "field", + "t" + ], + "properties": { + "field": { + "type": "string" + }, + "id": { + "type": "integer", + "minimum": 0 + }, + "name": { + "type": [ + "string", + "null" + ] + }, + "t": { + "type": "object", + "required": [ + "t" + ], + "properties": { + "t": { + "type": "integer", + "format": "int32" + } + } + } + } + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "total", + "page", + "pages", + "items" + ], + "properties": { + "items": { + "type": "array", + "items": { + "type": "object", + "required": [ + "id", + "field", + "t" + ], + "properties": { + "field": { + "type": "string" + }, + "id": { + "type": "integer", + "minimum": 0 + }, + "name": { + "type": [ + "string", + "null" + ] + }, + "t": { + "type": "object", + "required": [ + "t" + ], + "properties": { + "t": { + "type": "integer", + "format": "int32" + } + } + } + } + } + }, + "page": { + "type": "integer", + "minimum": 0 + }, + "pages": { + "type": "integer", + "minimum": 0 + }, + "total": { + "type": "integer", + "minimum": 0 + } + } + } + } + } + }, + "400": { + "description": "", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/path.to.PageList_Person_String_path.MyType_i32" + } + } + } + } + } + } + } + }, + "components": { + "schemas": { + "Person_String_path.MyType_i32": { + "type": "object", + "required": [ + "id", + "field", + "t" + ], + "properties": { + "field": { + "type": "string" + }, + "id": { + "type": "integer", + "minimum": 0 + }, + "name": { + "type": [ + "string", + "null" + ] + }, + "t": { + "type": "object", + "required": [ + "t" + ], + "properties": { + "t": { + "type": "integer", + "format": "int32" + } + } + } + } + }, + "path.to.Element_String": { + "oneOf": [ + { + "type": "object", + "required": [ + "One" + ], + "properties": { + "One": { + "type": "string" + } + } + }, + { + "type": "object", + "required": [ + "Many" + ], + "properties": { + "Many": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + ] + }, + "path.to.PageList_Person_String_path.MyType_i32": { + "type": "object", + "required": [ + "total", + "page", + "pages", + "items" + ], + "properties": { + "items": { + "type": "array", + "items": { + "type": "object", + "required": [ + "id", + "field", + "t" + ], + "properties": { + "field": { + "type": "string" + }, + "id": { + "type": "integer", + "minimum": 0 + }, + "name": { + "type": [ + "string", + "null" + ] + }, + "t": { + "type": "object", + "required": [ + "t" + ], + "properties": { + "t": { + "type": "integer", + "format": "int32" + } + } + } + } + } + }, + "page": { + "type": "integer", + "minimum": 0 + }, + "pages": { + "type": "integer", + "minimum": 0 + }, + "total": { + "type": "integer", + "minimum": 0 + } + } + } + } + } +} diff --git a/fastapi-gen/tests/testdata/schema_high_order_types b/fastapi-gen/tests/testdata/schema_high_order_types new file mode 100644 index 0000000..35c0f83 --- /dev/null +++ b/fastapi-gen/tests/testdata/schema_high_order_types @@ -0,0 +1,65 @@ +{ + "openapi": "3.1.0", + "info": { + "title": "title", + "version": "version" + }, + "paths": {}, + "components": { + "schemas": { + "HighBox": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "$ref": "#/components/schemas/High_Box_i32" + } + } + }, + "HighCow": { + "$ref": "#/components/schemas/High_Cow_i32" + }, + "HighRefCell": { + "$ref": "#/components/schemas/High_RefCell_i32" + }, + "High_Box_i32": { + "type": "object", + "required": [ + "high" + ], + "properties": { + "high": { + "type": "integer", + "format": "int32" + } + } + }, + "High_Cow_i32": { + "type": "object", + "required": [ + "high" + ], + "properties": { + "high": { + "type": "integer", + "format": "int32" + } + } + }, + "High_RefCell_i32": { + "type": "object", + "required": [ + "high" + ], + "properties": { + "high": { + "type": "integer", + "format": "int32" + } + } + } + } + } +} diff --git a/fastapi-gen/tests/testdata/schema_non_generic_root_generic_references b/fastapi-gen/tests/testdata/schema_non_generic_root_generic_references new file mode 100644 index 0000000..f41b53a --- /dev/null +++ b/fastapi-gen/tests/testdata/schema_non_generic_root_generic_references @@ -0,0 +1,72 @@ +{ + "openapi": "3.1.0", + "info": { + "title": "title", + "version": "version" + }, + "paths": {}, + "components": { + "schemas": { + "Bar_String": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + } + } + }, + "Bar_i32": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "integer", + "format": "int32" + } + } + }, + "Foo_String": { + "type": "object", + "required": [ + "bar" + ], + "properties": { + "bar": { + "$ref": "#/components/schemas/Bar_String" + } + } + }, + "Foo_i32": { + "type": "object", + "required": [ + "bar" + ], + "properties": { + "bar": { + "$ref": "#/components/schemas/Bar_i32" + } + } + }, + "Top": { + "type": "object", + "required": [ + "foo1", + "foo2" + ], + "properties": { + "foo1": { + "$ref": "#/components/schemas/Foo_String" + }, + "foo2": { + "$ref": "#/components/schemas/Foo_i32" + } + } + } + } + } +} diff --git a/fastapi-gen/tests/testdata/uuid_type_generic_argument b/fastapi-gen/tests/testdata/uuid_type_generic_argument new file mode 100644 index 0000000..cc03373 --- /dev/null +++ b/fastapi-gen/tests/testdata/uuid_type_generic_argument @@ -0,0 +1,33 @@ +{ + "openapi": "3.1.0", + "info": { + "title": "title", + "version": "version" + }, + "paths": {}, + "components": { + "schemas": { + "HighUuid": { + "$ref": "#/components/schemas/High_Option_String" + }, + "High_Option_String": { + "type": "object", + "required": [ + "high" + ], + "properties": { + "high": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] + } + } + } + } + } +} diff --git a/fastapi-rapidoc/Cargo.toml b/fastapi-rapidoc/Cargo.toml new file mode 100644 index 0000000..da6e8fb --- /dev/null +++ b/fastapi-rapidoc/Cargo.toml @@ -0,0 +1,34 @@ +[package] +name = "fastapi-rapidoc" +description = "RapiDoc for fastapi" +edition = "2021" +version = "0.1.1" +license = "MIT OR Apache-2.0" +readme = "README.md" +keywords = ["rapidoc", "openapi", "documentation"] +repository = "https://github.com/nxpkg/fastapi" +categories = ["web-programming"] +authors = ["Md Sulaiman <dev.sulaiman@icloud.com>"] +rust-version.workspace = true + +[package.metadata.docs.rs] +features = ["actix-web", "axum", "rocket"] +rustdoc-args = ["--cfg", "doc_cfg"] + +[dependencies] +serde = { version = "1.0", features = ["derive"] } +serde_json = { version = "1.0" } +fastapi = { version = "0.1.1", path = "../fastapi", default-features = false, features = [ + "macros", +] } +actix-web = { version = "4", optional = true, default-features = false } +rocket = { version = "0.5", features = ["json"], optional = true } +axum = { version = "0.7", default-features = false, features = [ + "json", +], optional = true } + +[dev-dependencies] +fastapi-rapidoc = { path = ".", features = ["actix-web", "axum", "rocket"] } + +[lints.rust] +unexpected_cfgs = { level = "warn", check-cfg = ['cfg(doc_cfg)'] } diff --git a/fastapi-rapidoc/LICENSE-APACHE b/fastapi-rapidoc/LICENSE-APACHE new file mode 120000 index 0000000..965b606 --- /dev/null +++ b/fastapi-rapidoc/LICENSE-APACHE @@ -0,0 +1 @@ +../LICENSE-APACHE \ No newline at end of file diff --git a/fastapi-rapidoc/LICENSE-MIT b/fastapi-rapidoc/LICENSE-MIT new file mode 120000 index 0000000..76219eb --- /dev/null +++ b/fastapi-rapidoc/LICENSE-MIT @@ -0,0 +1 @@ +../LICENSE-MIT \ No newline at end of file diff --git a/fastapi-rapidoc/README.md b/fastapi-rapidoc/README.md new file mode 100644 index 0000000..055c4de --- /dev/null +++ b/fastapi-rapidoc/README.md @@ -0,0 +1,116 @@ +# fastapi-rapidoc + +This crate works as a bridge between [fastapi](https://docs.rs/fastapi/latest/fastapi/) and [RapiDoc](https://rapidocweb.com/) OpenAPI visualizer. + +[![Fastapi build](https://github.com/nxpkg/fastapi/actions/workflows/build.yaml/badge.svg)](https://github.com/nxpkg/fastapi/actions/workflows/build.yaml) +[![crates.io](https://img.shields.io/crates/v/fastapi-rapidoc.svg?label=crates.io&color=orange&logo=rust)](https://crates.io/crates/fastapi-rapidoc) +[![docs.rs](https://img.shields.io/static/v1?label=docs.rs&message=fastapi-rapidoc&color=blue&logo=data:image/svg+xml;base64,PHN2ZyByb2xlPSJpbWciIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDUxMiA1MTIiPjxwYXRoIGZpbGw9IiNmNWY1ZjUiIGQ9Ik00ODguNiAyNTAuMkwzOTIgMjE0VjEwNS41YzAtMTUtOS4zLTI4LjQtMjMuNC0zMy43bC0xMDAtMzcuNWMtOC4xLTMuMS0xNy4xLTMuMS0yNS4zIDBsLTEwMCAzNy41Yy0xNC4xIDUuMy0yMy40IDE4LjctMjMuNCAzMy43VjIxNGwtOTYuNiAzNi4yQzkuMyAyNTUuNSAwIDI2OC45IDAgMjgzLjlWMzk0YzAgMTMuNiA3LjcgMjYuMSAxOS45IDMyLjJsMTAwIDUwYzEwLjEgNS4xIDIyLjEgNS4xIDMyLjIgMGwxMDMuOS01MiAxMDMuOSA1MmMxMC4xIDUuMSAyMi4xIDUuMSAzMi4yIDBsMTAwLTUwYzEyLjItNi4xIDE5LjktMTguNiAxOS45LTMyLjJWMjgzLjljMC0xNS05LjMtMjguNC0yMy40LTMzLjd6TTM1OCAyMTQuOGwtODUgMzEuOXYtNjguMmw4NS0zN3Y3My4zek0xNTQgMTA0LjFsMTAyLTM4LjIgMTAyIDM4LjJ2LjZsLTEwMiA0MS40LTEwMi00MS40di0uNnptODQgMjkxLjFsLTg1IDQyLjV2LTc5LjFsODUtMzguOHY3NS40em0wLTExMmwtMTAyIDQxLjQtMTAyLTQxLjR2LS42bDEwMi0zOC4yIDEwMiAzOC4ydi42em0yNDAgMTEybC04NSA0Mi41di03OS4xbDg1LTM4Ljh2NzUuNHptMC0xMTJsLTEwMiA0MS40LTEwMi00MS40di0uNmwxMDItMzguMiAxMDIgMzguMnYuNnoiPjwvcGF0aD48L3N2Zz4K)](https://docs.rs/fastapi-rapidoc/latest/) +![rustc](https://img.shields.io/static/v1?label=rustc&message=1.75&color=orange&logo=rust) + +Fastapi-rapidoc provides simple mechanism to transform OpenAPI spec resource to a servable HTML +file which can be served via [predefined framework integration](#examples) or used +[standalone](#using-standalone) and served manually. + +You may find fullsize examples from fastapi's Github [repository][examples]. + +# Crate Features + +* **actix-web** Allows serving `RapiDoc` via _**`actix-web`**_. `version >= 4` +* **rocket** Allows serving `RapiDoc` via _**`rocket`**_. `version >=0.5` +* **axum** Allows serving `RapiDoc` via _**`axum`**_. `version >=0.7` + +# Install + +Use RapiDoc only without any boiler plate implementation. +```toml +[dependencies] +fastapi-rapidoc = "5" +``` + +Enable actix-web integration with RapiDoc. +```toml +[dependencies] +fastapi-rapidoc = { version = "5", features = ["actix-web"] } +``` + +# Using standalone + +Fastapi-rapidoc can be used standalone as simply as creating a new `RapiDoc` instance and then +serving it by what ever means available as `text/html` from http handler in your favourite web +framework. + +`RapiDoc::to_html` method can be used to convert the `RapiDoc` instance to a servable html +file. +```rust +let rapidoc = RapiDoc::new("/api-docs/openapi.json"); + +// Then somewhere in your application that handles http operation. +// Make sure you return correct content type `text/html`. +let rapidoc_handler = move || { + rapidoc.to_html() +}; +``` + +# Customization + +Fastapi-rapidoc can be customized and configured only via `RapiDoc::custom_html` method. This +method empowers users to use a custom HTML template to modify the looks of the RapiDoc UI. + +* [All allowed RapiDoc configuration options][rapidoc_api] +* [Default HTML template][rapidoc_quickstart] + +The template should contain _**`$specUrl`**_ variable which will be replaced with user defined +OpenAPI spec url provided with `RapiDoc::new` function when creating a new `RapiDoc` +instance. Variable will be replaced during `RapiDoc::to_html` function execution. + +_**Overriding the HTML template with a custom one.**_ +```rust +let html = "..."; +RapiDoc::new("/api-docs/openapi.json").custom_html(html); +``` + +# Examples + +_**Serve `RapiDoc` via `actix-web` framework.**_ +```rust +use actix_web::App; +use fastapi_rapidoc::RapiDoc; + +App::new() + .service( + RapiDoc::with_openapi("/api-docs/openapi.json", ApiDoc::openapi()).path("/rapidoc") + ); +``` + +_**Serve `RapiDoc` via `rocket` framework.**_ +```rust +use fastapi_rapidoc::RapiDoc; + +rocket::build() + .mount( + "/", + RapiDoc::with_openapi("/api-docs/openapi.json", ApiDoc::openapi()).path("/rapidoc"), + ); +``` + +_**Serve `RapiDoc` via `axum` framework.**_ +```rust +use axum::Router; +use fastapi_rapidoc::RapiDoc; + +let app = Router::<S>::new() + .merge( + RapiDoc::with_openapi("/api-docs/openapi.json", ApiDoc::openapi()).path("/rapidoc") + ); +``` + +# License + +Licensed under either of [Apache 2.0](LICENSE-APACHE) or [MIT](LICENSE-MIT) license at your option. + +Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in this crate +by you, shall be dual licensed, without any additional terms or conditions. + +[rapidoc_api]: <https://rapidocweb.com/api.html> +[examples]: <https://github.com/nxpkg/fastapi/tree/master/examples> +[rapidoc_quickstart]: <https://rapidocweb.com/quickstart.html> diff --git a/fastapi-rapidoc/res/rapidoc.html b/fastapi-rapidoc/res/rapidoc.html new file mode 100644 index 0000000..104ef19 --- /dev/null +++ b/fastapi-rapidoc/res/rapidoc.html @@ -0,0 +1,10 @@ +<!doctype html> +<html> + <head> + <meta charset="utf-8"> + <script type="module" src="https://unpkg.com/rapidoc/dist/rapidoc-min.js"></script> + </head> + <body> + <rapi-doc spec-url="$specUrl"></rapi-doc> + </body> +</html> diff --git a/fastapi-rapidoc/src/lib.rs b/fastapi-rapidoc/src/lib.rs new file mode 100644 index 0000000..4b3feb2 --- /dev/null +++ b/fastapi-rapidoc/src/lib.rs @@ -0,0 +1,455 @@ +#![warn(missing_docs)] +#![warn(rustdoc::broken_intra_doc_links)] +#![cfg_attr(doc_cfg, feature(doc_cfg))] +//! This crate works as a bridge between [fastapi](https://docs.rs/fastapi/latest/fastapi/) and [RapiDoc](https://rapidocweb.com/) OpenAPI visualizer. +//! +//! Fastapi-rapidoc provides simple mechanism to transform OpenAPI spec resource to a servable HTML +//! file which can be served via [predefined framework integration][Self#examples] or used +//! [standalone][Self#using-standalone] and served manually. +//! +//! You may find fullsize examples from fastapi's Github [repository][examples]. +//! +//! # Crate Features +//! +//! * **actix-web** Allows serving [`RapiDoc`] via _**`actix-web`**_. +//! * **rocket** Allows serving [`RapiDoc`] via _**`rocket`**_. +//! * **axum** Allows serving [`RapiDoc`] via _**`axum`**_. +//! +//! # Install +//! +//! Use RapiDoc only without any boiler plate implementation. +//! ```toml +//! [dependencies] +//! fastapi-rapidoc = "4" +//! ``` +//! +//! Enable actix-web integration with RapiDoc. +//! ```toml +//! [dependencies] +//! fastapi-rapidoc = { version = "4", features = ["actix-web"] } +//! ``` +//! +//! # Using standalone +//! +//! Fastapi-rapidoc can be used standalone as simply as creating a new [`RapiDoc`] instance and then +//! serving it by what ever means available as `text/html` from http handler in your favourite web +//! framework. +//! +//! [`RapiDoc::to_html`] method can be used to convert the [`RapiDoc`] instance to a servable html +//! file. +//! ``` +//! # use fastapi_rapidoc::RapiDoc; +//! # use fastapi::OpenApi; +//! # use serde_json::json; +//! # #[derive(OpenApi)] +//! # #[openapi()] +//! # struct ApiDoc; +//! # +//! let rapidoc = RapiDoc::new("/api-docs/openapi.json"); +//! +//! // Then somewhere in your application that handles http operation. +//! // Make sure you return correct content type `text/html`. +//! let rapidoc_handler = move || { +//! rapidoc.to_html() +//! }; +//! ``` +//! +//! # Customization +//! +//! Fastapi-rapidoc can be customized and configured only via [`RapiDoc::custom_html`] method. This +//! method empowers users to use a custom HTML template to modify the looks of the RapiDoc UI. +//! +//! * [All allowed RapiDoc configuration options][rapidoc_api] +//! * [Default HTML template][rapidoc_quickstart] +//! +//! The template should contain _**`$specUrl`**_ variable which will be replaced with user defined +//! OpenAPI spec url provided with [`RapiDoc::new`] function when creating a new [`RapiDoc`] +//! instance. Variable will be replaced during [`RapiDoc::to_html`] function execution. +//! +//! _**Overriding the HTML template with a custom one.**_ +//! ```rust +//! # use fastapi_rapidoc::RapiDoc; +//! # use fastapi::OpenApi; +//! # use serde_json::json; +//! # #[derive(OpenApi)] +//! # #[openapi()] +//! # struct ApiDoc; +//! # +//! let html = "..."; +//! RapiDoc::new("/api-docs/openapi.json").custom_html(html); +//! ``` +//! +//! # Examples +//! +//! _**Serve [`RapiDoc`] via `actix-web` framework.**_ +//! ```no_run +//! use actix_web::App; +//! use fastapi_rapidoc::RapiDoc; +//! +//! # use fastapi::OpenApi; +//! # use std::net::Ipv4Addr; +//! # #[derive(OpenApi)] +//! # #[openapi()] +//! # struct ApiDoc; +//! App::new() +//! .service( +//! RapiDoc::with_openapi("/api-docs/openapi.json", ApiDoc::openapi()).path("/rapidoc") +//! ); +//! ``` +//! +//! _**Serve [`RapiDoc`] via `rocket` framework.**_ +//! ```no_run +//! # use rocket; +//! use fastapi_rapidoc::RapiDoc; +//! +//! # use fastapi::OpenApi; +//! # #[derive(OpenApi)] +//! # #[openapi()] +//! # struct ApiDoc; +//! rocket::build() +//! .mount( +//! "/", +//! RapiDoc::with_openapi("/api-docs/openapi.json", ApiDoc::openapi()).path("/rapidoc"), +//! ); +//! ``` +//! +//! _**Serve [`RapiDoc`] via `axum` framework.**_ +//! ```no_run +//! use axum::Router; +//! use fastapi_rapidoc::RapiDoc; +//! # use fastapi::OpenApi; +//! # #[derive(OpenApi)] +//! # #[openapi()] +//! # struct ApiDoc; +//! # +//! # fn inner<S>() +//! # where +//! # S: Clone + Send + Sync + 'static, +//! # { +//! +//! let app = Router::<S>::new() +//! .merge( +//! RapiDoc::with_openapi("/api-docs/openapi.json", ApiDoc::openapi()).path("/rapidoc") +//! ); +//! # } +//! ``` +//! +//! [rapidoc_api]: <https://rapidocweb.com/api.html> +//! [examples]: <https://github.com/nxpkg/fastapi/tree/master/examples> +//! [rapidoc_quickstart]: <https://rapidocweb.com/quickstart.html> + +use std::borrow::Cow; + +const DEFAULT_HTML: &str = include_str!("../res/rapidoc.html"); + +/// Is [RapiDoc][rapidoc] UI. +/// +/// This is an entry point for serving [RapiDoc][rapidoc] via predefined framework integration or +/// in standalone fashion by calling [`RapiDoc::to_html`] within custom HTTP handler handles +/// serving the [RapiDoc][rapidoc] UI. See more at [running standalone][standalone] +/// +/// [rapidoc]: <https://rapidocweb.com> +/// [standalone]: index.html#using-standalone +#[non_exhaustive] +pub struct RapiDoc { + #[allow(unused)] + path: Cow<'static, str>, + spec_url: Cow<'static, str>, + html: Cow<'static, str>, + #[cfg(any(feature = "actix-web", feature = "rocket", feature = "axum"))] + openapi: Option<fastapi::openapi::OpenApi>, +} + +impl RapiDoc { + /// Construct a new [`RapiDoc`] that points to given `spec_url`. Spec url must be valid URL and + /// available for RapiDoc to consume. + /// + /// # Examples + /// + /// _**Create new [`RapiDoc`].**_ + /// + /// ``` + /// # use fastapi_rapidoc::RapiDoc; + /// RapiDoc::new("https://petstore3.swagger.io/api/v3/openapi.json"); + /// ``` + pub fn new<U: Into<Cow<'static, str>>>(spec_url: U) -> Self { + Self { + path: Cow::Borrowed(""), + spec_url: spec_url.into(), + html: Cow::Borrowed(DEFAULT_HTML), + #[cfg(any(feature = "actix-web", feature = "rocket", feature = "axum"))] + openapi: None, + } + } + + /// Construct a new [`RapiDoc`] with given `spec_url` and `openapi`. The spec url must point to + /// the location where the `openapi` will be served. + /// + /// [`RapiDoc`] is only able to create endpoint that serves the `openapi` JSON for predefined + /// frameworks. _**For other frameworks such endpoint must be created manually.**_ + /// + /// # Examples + /// + /// _**Create new [`RapiDoc`].**_ + /// + /// ``` + /// # use fastapi_rapidoc::RapiDoc; + /// # use fastapi::OpenApi; + /// # #[derive(OpenApi)] + /// # #[openapi()] + /// # struct ApiDoc; + /// RapiDoc::with_openapi( + /// "/api-docs/openapi.json", + /// ApiDoc::openapi() + /// ); + /// ``` + #[cfg(any(feature = "actix-web", feature = "rocket", feature = "axum"))] + #[cfg_attr( + doc_cfg, + doc(cfg(any(feature = "actix-web", feature = "rocket", feature = "axum"))) + )] + pub fn with_openapi<U: Into<Cow<'static, str>>>( + spec_url: U, + openapi: fastapi::openapi::OpenApi, + ) -> Self { + Self { + path: Cow::Borrowed(""), + spec_url: spec_url.into(), + html: Cow::Borrowed(DEFAULT_HTML), + openapi: Some(openapi), + } + } + + /// Construct a new [`RapiDoc`] with given `url`, `spec_url` and `openapi`. The `url` defines + /// the location where the RapiDoc UI will be served. The spec url must point to the location + /// where the `openapi` will be served. + /// + /// [`RapiDoc`] is only able to create an endpoint that serves the `openapi` JSON for predefined + /// frameworks. _**For other frameworks such an endpoint must be created manually.**_ + /// + /// # Examples + /// + /// _**Create new [`RapiDoc`] with custom location.**_ + /// + /// ``` + /// # use fastapi_rapidoc::RapiDoc; + /// # use fastapi::OpenApi; + /// # #[derive(OpenApi)] + /// # #[openapi()] + /// # struct ApiDoc; + /// RapiDoc::with_url( + /// "/rapidoc", + /// "/api-docs/openapi.json", + /// ApiDoc::openapi() + /// ); + /// ``` + #[cfg(any(feature = "actix-web", feature = "rocket", feature = "axum"))] + #[cfg_attr( + doc_cfg, + doc(cfg(any(feature = "actix-web", feature = "rocket", feature = "axum"))) + )] + pub fn with_url<U: Into<Cow<'static, str>>, S: Into<Cow<'static, str>>>( + url: U, + spec_url: S, + openapi: fastapi::openapi::OpenApi, + ) -> Self { + Self { + path: url.into(), + spec_url: spec_url.into(), + html: Cow::Borrowed(DEFAULT_HTML), + openapi: Some(openapi), + } + } + + /// Override the [default HTML template][rapidoc_quickstart] with new one. See + /// [customization] for more details. + /// + /// [rapidoc_quickstart]: <https://rapidocweb.com/quickstart.html> + /// [customization]: index.html#customization + pub fn custom_html<H: Into<Cow<'static, str>>>(mut self, html: H) -> Self { + self.html = html.into(); + + self + } + + /// Add `path` the [`RapiDoc`] will be served from. + /// + /// # Examples + /// + /// _**Make [`RapiDoc`] servable from `/rapidoc` path.**_ + /// ``` + /// # use fastapi_rapidoc::RapiDoc; + /// + /// RapiDoc::new("https://petstore3.swagger.io/api/v3/openapi.json") + /// .path("/rapidoc"); + /// ``` + #[cfg(any(feature = "actix-web", feature = "rocket", feature = "axum"))] + pub fn path<U: Into<Cow<'static, str>>>(mut self, path: U) -> Self { + self.path = path.into(); + + self + } + + /// Converts this [`RapiDoc`] instance to servable HTML file. + /// + /// This will replace _**`$specUrl`**_ variable placeholder with the spec + /// url provided to the [`RapiDoc`] instance. If HTML template is not overridden with + /// [`RapiDoc::custom_html`] then the [default HTML template][rapidoc_quickstart] + /// will be used. + /// + /// See more details in [customization][customization]. + /// + /// [rapidoc_quickstart]: <https://rapidocweb.com/quickstart.html> + /// [customization]: index.html#customization + pub fn to_html(&self) -> String { + self.html.replace("$specUrl", self.spec_url.as_ref()) + } +} + +mod actix { + #![cfg(feature = "actix-web")] + + use actix_web::dev::HttpServiceFactory; + use actix_web::guard::Get; + use actix_web::web::Data; + use actix_web::{HttpResponse, Resource, Responder}; + + use crate::RapiDoc; + + impl HttpServiceFactory for RapiDoc { + fn register(self, config: &mut actix_web::dev::AppService) { + let html = self.to_html(); + + async fn serve_rapidoc(rapidoc: Data<String>) -> impl Responder { + HttpResponse::Ok() + .content_type("text/html") + .body(rapidoc.to_string()) + } + + Resource::new(self.path.as_ref()) + .guard(Get()) + .app_data(Data::new(html)) + .to(serve_rapidoc) + .register(config); + + if let Some(openapi) = self.openapi { + async fn serve_openapi(openapi: Data<String>) -> impl Responder { + HttpResponse::Ok() + .content_type("application/json") + .body(openapi.into_inner().to_string()) + } + + Resource::new(self.spec_url.as_ref()) + .guard(Get()) + .app_data(Data::new( + openapi.to_json().expect("Should serialize to JSON"), + )) + .to(serve_openapi) + .register(config); + } + } + } +} + +mod axum { + #![cfg(feature = "axum")] + + use axum::response::Html; + use axum::{routing, Json, Router}; + + use crate::RapiDoc; + + impl<R> From<RapiDoc> for Router<R> + where + R: Clone + Send + Sync + 'static, + { + fn from(value: RapiDoc) -> Self { + let html = value.to_html(); + let openapi = value.openapi; + + let path = value.path.as_ref(); + let path = if path.is_empty() { "/" } else { path }; + let mut router = + Router::<R>::new().route(path, routing::get(move || async { Html(html) })); + + if let Some(openapi) = openapi { + router = router.route( + value.spec_url.as_ref(), + routing::get(move || async { Json(openapi) }), + ); + } + + router + } + } +} + +mod rocket { + #![cfg(feature = "rocket")] + + use rocket::http::Method; + use rocket::response::content::RawHtml; + use rocket::route::{Handler, Outcome}; + use rocket::serde::json::Json; + use rocket::{Data, Request, Route}; + + use crate::RapiDoc; + + impl From<RapiDoc> for Vec<Route> { + fn from(value: RapiDoc) -> Self { + let mut routes = vec![Route::new( + Method::Get, + value.path.as_ref(), + RapiDocHandler(value.to_html()), + )]; + + if let Some(openapi) = value.openapi { + routes.push(Route::new( + Method::Get, + value.spec_url.as_ref(), + OpenApiHandler(openapi), + )); + } + + routes + } + } + + #[derive(Clone)] + struct RapiDocHandler(String); + + #[rocket::async_trait] + impl Handler for RapiDocHandler { + async fn handle<'r>(&self, request: &'r Request<'_>, _: Data<'r>) -> Outcome<'r> { + Outcome::from(request, RawHtml(self.0.clone())) + } + } + + #[derive(Clone)] + struct OpenApiHandler(fastapi::openapi::OpenApi); + + #[rocket::async_trait] + impl Handler for OpenApiHandler { + async fn handle<'r>(&self, request: &'r Request<'_>, _: Data<'r>) -> Outcome<'r> { + Outcome::from(request, Json(self.0.clone())) + } + } +} + +#[cfg(test)] +mod tests { + #[test] + #[cfg(feature = "axum")] + fn test_axum_with_empty_path() { + use ::axum::Router; + use fastapi::OpenApi; + + use super::RapiDoc; + + #[derive(fastapi::OpenApi)] + #[openapi()] + struct ApiDoc; + + let _: Router = Router::new().merge(RapiDoc::with_openapi("/rapidoc", ApiDoc::openapi())); + } +} diff --git a/fastapi-redoc/Cargo.toml b/fastapi-redoc/Cargo.toml new file mode 100644 index 0000000..d8c3639 --- /dev/null +++ b/fastapi-redoc/Cargo.toml @@ -0,0 +1,32 @@ +[package] +name = "fastapi-redoc" +description = "Redoc for fastapi" +version = "0.1.1" +edition = "2021" +license = "MIT OR Apache-2.0" +readme = "README.md" +keywords = ["redoc", "openapi", "documentation"] +repository = "https://github.com/nxpkg/fastapi" +categories = ["web-programming"] +authors = ["Md Sulaiman <dev.sulaiman@icloud.com>"] +rust-version.workspace = true + +[package.metadata.docs.rs] +features = ["actix-web", "axum", "rocket"] +rustdoc-args = ["--cfg", "doc_cfg"] + +[dependencies] +serde = { version = "1.0", features = ["derive"] } +serde_json = { version = "1.0" } +fastapi = { version = "0.1.1", path = "../fastapi", default-features = false, features = [ + "macros", +] } +actix-web = { version = "4", optional = true } +rocket = { version = "0.5", features = ["json"], optional = true } +axum = { version = "0.7", default-features = false, optional = true } + +[dev-dependencies] +fastapi-redoc = { path = ".", features = ["actix-web", "axum", "rocket"] } + +[lints.rust] +unexpected_cfgs = { level = "warn", check-cfg = ['cfg(doc_cfg)'] } diff --git a/fastapi-redoc/LICENSE-APACHE b/fastapi-redoc/LICENSE-APACHE new file mode 120000 index 0000000..965b606 --- /dev/null +++ b/fastapi-redoc/LICENSE-APACHE @@ -0,0 +1 @@ +../LICENSE-APACHE \ No newline at end of file diff --git a/fastapi-redoc/LICENSE-MIT b/fastapi-redoc/LICENSE-MIT new file mode 120000 index 0000000..76219eb --- /dev/null +++ b/fastapi-redoc/LICENSE-MIT @@ -0,0 +1 @@ +../LICENSE-MIT \ No newline at end of file diff --git a/fastapi-redoc/README.md b/fastapi-redoc/README.md new file mode 100644 index 0000000..259a1dd --- /dev/null +++ b/fastapi-redoc/README.md @@ -0,0 +1,142 @@ +# fastapi-redoc + +[![Fastapi build](https://github.com/nxpkg/fastapi/actions/workflows/build.yaml/badge.svg)](https://github.com/nxpkg/fastapi/actions/workflows/build.yaml) +[![crates.io](https://img.shields.io/crates/v/fastapi-redoc.svg?label=crates.io&color=orange&logo=rust)](https://crates.io/crates/fastapi-redoc) +[![docs.rs](https://img.shields.io/static/v1?label=docs.rs&message=fastapi-redoc&color=blue&logo=data:image/svg+xml;base64,PHN2ZyByb2xlPSJpbWciIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDUxMiA1MTIiPjxwYXRoIGZpbGw9IiNmNWY1ZjUiIGQ9Ik00ODguNiAyNTAuMkwzOTIgMjE0VjEwNS41YzAtMTUtOS4zLTI4LjQtMjMuNC0zMy43bC0xMDAtMzcuNWMtOC4xLTMuMS0xNy4xLTMuMS0yNS4zIDBsLTEwMCAzNy41Yy0xNC4xIDUuMy0yMy40IDE4LjctMjMuNCAzMy43VjIxNGwtOTYuNiAzNi4yQzkuMyAyNTUuNSAwIDI2OC45IDAgMjgzLjlWMzk0YzAgMTMuNiA3LjcgMjYuMSAxOS45IDMyLjJsMTAwIDUwYzEwLjEgNS4xIDIyLjEgNS4xIDMyLjIgMGwxMDMuOS01MiAxMDMuOSA1MmMxMC4xIDUuMSAyMi4xIDUuMSAzMi4yIDBsMTAwLTUwYzEyLjItNi4xIDE5LjktMTguNiAxOS45LTMyLjJWMjgzLjljMC0xNS05LjMtMjguNC0yMy40LTMzLjd6TTM1OCAyMTQuOGwtODUgMzEuOXYtNjguMmw4NS0zN3Y3My4zek0xNTQgMTA0LjFsMTAyLTM4LjIgMTAyIDM4LjJ2LjZsLTEwMiA0MS40LTEwMi00MS40di0uNnptODQgMjkxLjFsLTg1IDQyLjV2LTc5LjFsODUtMzguOHY3NS40em0wLTExMmwtMTAyIDQxLjQtMTAyLTQxLjR2LS42bDEwMi0zOC4yIDEwMiAzOC4ydi42em0yNDAgMTEybC04NSA0Mi41di03OS4xbDg1LTM4Ljh2NzUuNHptMC0xMTJsLTEwMiA0MS40LTEwMi00MS40di0uNmwxMDItMzguMiAxMDIgMzguMnYuNnoiPjwvcGF0aD48L3N2Zz4K)](https://docs.rs/fastapi-redoc/latest/) +![rustc](https://img.shields.io/static/v1?label=rustc&message=1.75&color=orange&logo=rust) + +This crate works as a bridge between [fastapi](https://docs.rs/fastapi/latest/fastapi/) and [Redoc](https://redocly.com/) OpenAPI visualizer. + +Fastapi-redoc provides simple mechanism to transform OpenAPI spec resource to a servable HTML +file which can be served via [predefined framework integration](#examples) or used +[standalone](#using-standalone) and served manually. + +You may find fullsize examples from fastapi's Github [repository][examples]. + +# Crate Features + +* **actix-web** Allows serving `Redoc` via _**`actix-web`**_. `version >= 4` +* **rocket** Allows serving `Redoc` via _**`rocket`**_. `version >=0.5` +* **axum** Allows serving `Redoc` via _**`axum`**_. `version >=0.7` + +# Install + +Use Redoc only without any boiler plate implementation. +```toml +[dependencies] +fastapi-redoc = "5" +``` + +Enable actix-web integration with Redoc. +```toml +[dependencies] +fastapi-redoc = { version = "5", features = ["actix-web"] } +``` + +# Using standalone + +Fastapi-redoc can be used standalone as simply as creating a new `Redoc` instance and then +serving it by what ever means available as `text/html` from http handler in your favourite web +framework. + +`Redoc::to_html` method can be used to convert the `Redoc` instance to a servable html +file. +```rust +let redoc = Redoc::new(ApiDoc::openapi()); + +// Then somewhere in your application that handles http operation. +// Make sure you return correct content type `text/html`. +let redoc_handler = move || async { + redoc.to_html() +}; +``` + +# Customization + +Fastapi-redoc enables full customization support for [Redoc][redoc] according to what can be +customized by modifying the HTML template and [configuration options](#configuration). + +The default [HTML template][redoc_html_quickstart] can be fully overridden to ones liking with +`Redoc::custom_html` method. The HTML template **must** contain **`$spec`** and **`$config`** +variables which are replaced during `Redoc::to_html` execution. + +* **`$spec`** Will be the `Spec` that will be rendered via [Redoc][redoc]. +* **`$config`** Will be the current `Config`. By default this is `EmptyConfig`. + +_**Overriding the HTML template with a custom one.**_ +```rust +let html = "..."; +Redoc::new(ApiDoc::openapi()).custom_html(html); +``` + +# Configuration + +Redoc can be configured with JSON either inlined with the `Redoc` declaration or loaded from +user defined file with `FileConfig`. + +* [All supported Redoc configuration options][redoc_config]. + +_**Inlining the configuration.**_ +```rust +Redoc::with_config(ApiDoc::openapi(), || json!({ "disableSearch": true })); +``` + +_**Using `FileConfig`.**_ +```rust +Redoc::with_config(ApiDoc::openapi(), FileConfig); +``` + +Read more details in `Config`. + +# Examples + +_**Serve `Redoc` via `actix-web` framework.**_ +```rust +use actix_web::App; +use fastapi_redoc::{Redoc, Servable}; + +App::new().service(Redoc::with_url("/redoc", ApiDoc::openapi())); +``` + +_**Serve `Redoc` via `rocket` framework.**_ +```rust +use fastapi_redoc::{Redoc, Servable}; + +rocket::build() + .mount( + "/", + Redoc::with_url("/redoc", ApiDoc::openapi()), + ); +``` + +_**Serve `Redoc` via `axum` framework.**_ + ```rust + use axum::Router; + use fastapi_redoc::{Redoc, Servable}; + + let app = Router::<S>::new() + .merge(Redoc::with_url("/redoc", ApiDoc::openapi())); +``` + +_**Use `Redoc` to serve OpenAPI spec from url.**_ +```rust +Redoc::new( + "https://github.com/swagger-api/swagger-petstore/blob/master/src/main/resources/openapi.yaml") +``` + +_**Use `Redoc` to serve custom OpenAPI spec using serde's `json!()` macro.**_ +```rust +Redoc::new(json!({"openapi": "3.1.0"})); +``` + +# License + +Licensed under either of [Apache 2.0](LICENSE-APACHE) or [MIT](LICENSE-MIT) license at your option. + +Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in this crate +by you, shall be dual licensed, without any additional terms or conditions. + +[redoc]: <https://redocly.com/> +[redoc_html_quickstart]: <https://redocly.com/docs/redoc/quickstart/> +[redoc_config]: <https://redocly.com/docs/api-reference-docs/configuration/functionality/#configuration-options-for-api-docs> +[examples]: <https://github.com/nxpkg/fastapi/tree/master/examples> diff --git a/fastapi-redoc/res/redoc.html b/fastapi-redoc/res/redoc.html new file mode 100644 index 0000000..6f51126 --- /dev/null +++ b/fastapi-redoc/res/redoc.html @@ -0,0 +1,31 @@ +<!DOCTYPE html> +<html> + <head> + <title>Redoc + + + + + + + + +
+ + + + diff --git a/fastapi-redoc/src/actix.rs b/fastapi-redoc/src/actix.rs new file mode 100644 index 0000000..53a0fdb --- /dev/null +++ b/fastapi-redoc/src/actix.rs @@ -0,0 +1,26 @@ +#![cfg(feature = "actix-web")] + +use actix_web::dev::HttpServiceFactory; +use actix_web::guard::Get; +use actix_web::web::Data; +use actix_web::{HttpResponse, Resource, Responder}; + +use crate::{Redoc, Spec}; + +impl HttpServiceFactory for Redoc { + fn register(self, config: &mut actix_web::dev::AppService) { + let html = self.to_html(); + + async fn serve_redoc(redoc: Data) -> impl Responder { + HttpResponse::Ok() + .content_type("text/html") + .body(redoc.to_string()) + } + + Resource::new(self.url.as_ref()) + .guard(Get()) + .app_data(Data::new(html)) + .to(serve_redoc) + .register(config); + } +} diff --git a/fastapi-redoc/src/axum.rs b/fastapi-redoc/src/axum.rs new file mode 100644 index 0000000..6f42cf3 --- /dev/null +++ b/fastapi-redoc/src/axum.rs @@ -0,0 +1,19 @@ +#![cfg(feature = "axum")] + +use axum::response::Html; +use axum::{routing, Router}; + +use crate::{Redoc, Spec}; + +impl From> for Router +where + R: Clone + Send + Sync + 'static, +{ + fn from(value: Redoc) -> Self { + let html = value.to_html(); + Router::::new().route( + value.url.as_ref(), + routing::get(move || async { Html(html) }), + ) + } +} diff --git a/fastapi-redoc/src/lib.rs b/fastapi-redoc/src/lib.rs new file mode 100644 index 0000000..496b86e --- /dev/null +++ b/fastapi-redoc/src/lib.rs @@ -0,0 +1,490 @@ +#![warn(missing_docs)] +#![warn(rustdoc::broken_intra_doc_links)] +#![cfg_attr(doc_cfg, feature(doc_cfg))] +//! This crate works as a bridge between [fastapi](https://docs.rs/fastapi/latest/fastapi/) and [Redoc](https://redocly.com/) OpenAPI visualizer. +//! +//! Fastapi-redoc provides simple mechanism to transform OpenAPI spec resource to a servable HTML +//! file which can be served via [predefined framework integration][Self#examples] or used +//! [standalone][Self#using-standalone] and served manually. +//! +//! You may find fullsize examples from fastapi's Github [repository][examples]. +//! +//! # Crate Features +//! +//! * **actix-web** Allows serving [`Redoc`] via _**`actix-web`**_. +//! * **rocket** Allows serving [`Redoc`] via _**`rocket`**_. +//! * **axum** Allows serving [`Redoc`] via _**`axum`**_. +//! +//! # Install +//! +//! Use Redoc only without any boiler plate implementation. +//! ```toml +//! [dependencies] +//! fastapi-redoc = "4" +//! ``` +//! +//! Enable actix-web integration with Redoc. +//! ```toml +//! [dependencies] +//! fastapi-redoc = { version = "4", features = ["actix-web"] } +//! ``` +//! +//! # Using standalone +//! +//! Fastapi-redoc can be used standalone as simply as creating a new [`Redoc`] instance and then +//! serving it by what ever means available as `text/html` from http handler in your favourite web +//! framework. +//! +//! [`Redoc::to_html`] method can be used to convert the [`Redoc`] instance to a servable html +//! file. +//! ``` +//! # use fastapi_redoc::Redoc; +//! # use fastapi::OpenApi; +//! # use serde_json::json; +//! # #[derive(OpenApi)] +//! # #[openapi()] +//! # struct ApiDoc; +//! # +//! let redoc = Redoc::new(ApiDoc::openapi()); +//! +//! // Then somewhere in your application that handles http operation. +//! // Make sure you return correct content type `text/html`. +//! let redoc_handler = move || { +//! redoc.to_html() +//! }; +//! ``` +//! +//! # Customization +//! +//! Fastapi-redoc enables full customization support for [Redoc][redoc] according to what can be +//! customized by modifying the HTML template and [configuration options][Self#configuration]. +//! +//! The default [HTML template][redoc_html_quickstart] can be fully overridden to ones liking with +//! [`Redoc::custom_html`] method. The HTML template **must** contain **`$spec`** and **`$config`** +//! variables which are replaced during [`Redoc::to_html`] execution. +//! +//! * **`$spec`** Will be the [`Spec`] that will be rendered via [Redoc][redoc]. +//! * **`$config`** Will be the current [`Config`]. By default this is [`EmptyConfig`]. +//! +//! _**Overriding the HTML template with a custom one.**_ +//! ```rust +//! # use fastapi_redoc::Redoc; +//! # use fastapi::OpenApi; +//! # use serde_json::json; +//! # #[derive(OpenApi)] +//! # #[openapi()] +//! # struct ApiDoc; +//! # +//! let html = "..."; +//! Redoc::new(ApiDoc::openapi()).custom_html(html); +//! ``` +//! +//! # Configuration +//! +//! Redoc can be configured with JSON either inlined with the [`Redoc`] declaration or loaded from +//! user defined file with [`FileConfig`]. +//! +//! * [All supported Redoc configuration options][redoc_config]. +//! +//! _**Inlining the configuration.**_ +//! ```rust +//! # use fastapi_redoc::Redoc; +//! # use fastapi::OpenApi; +//! # use serde_json::json; +//! # #[derive(OpenApi)] +//! # #[openapi()] +//! # struct ApiDoc; +//! # +//! Redoc::with_config(ApiDoc::openapi(), || json!({ "disableSearch": true })); +//! ``` +//! +//! _**Using [`FileConfig`].**_ +//! ```no_run +//! # use fastapi_redoc::{Redoc, FileConfig}; +//! # use fastapi::OpenApi; +//! # use serde_json::json; +//! # #[derive(OpenApi)] +//! # #[openapi()] +//! # struct ApiDoc; +//! # +//! Redoc::with_config(ApiDoc::openapi(), FileConfig); +//! ``` +//! +//! Read more details in [`Config`]. +//! +//! # Examples +//! +//! _**Serve [`Redoc`] via `actix-web` framework.**_ +//! ```no_run +//! use actix_web::App; +//! use fastapi_redoc::{Redoc, Servable}; +//! +//! # use fastapi::OpenApi; +//! # use std::net::Ipv4Addr; +//! # #[derive(OpenApi)] +//! # #[openapi()] +//! # struct ApiDoc; +//! App::new().service(Redoc::with_url("/redoc", ApiDoc::openapi())); +//! ``` +//! +//! _**Serve [`Redoc`] via `rocket` framework.**_ +//! ```no_run +//! # use rocket; +//! use fastapi_redoc::{Redoc, Servable}; +//! +//! # use fastapi::OpenApi; +//! # #[derive(OpenApi)] +//! # #[openapi()] +//! # struct ApiDoc; +//! rocket::build() +//! .mount( +//! "/", +//! Redoc::with_url("/redoc", ApiDoc::openapi()), +//! ); +//! ``` +//! +//! _**Serve [`Redoc`] via `axum` framework.**_ +//! ```no_run +//! use axum::Router; +//! use fastapi_redoc::{Redoc, Servable}; +//! # use fastapi::OpenApi; +//! # #[derive(OpenApi)] +//! # #[openapi()] +//! # struct ApiDoc; +//! # +//! # fn inner() +//! # where +//! # S: Clone + Send + Sync + 'static, +//! # { +//! +//! let app = Router::::new() +//! .merge(Redoc::with_url("/redoc", ApiDoc::openapi())); +//! # } +//! ``` +//! +//! _**Use [`Redoc`] to serve OpenAPI spec from url.**_ +//! ``` +//! # use fastapi_redoc::Redoc; +//! Redoc::new( +//! "https://github.com/swagger-api/swagger-petstore/blob/master/src/main/resources/openapi.yaml"); +//! ``` +//! +//! _**Use [`Redoc`] to serve custom OpenAPI spec using serde's `json!()` macro.**_ +//! ```rust +//! # use fastapi_redoc::Redoc; +//! # use serde_json::json; +//! Redoc::new(json!({"openapi": "3.1.0"})); +//! ``` +//! +//! [redoc]: +//! [redoc_html_quickstart]: +//! [redoc_config]: +//! [examples]: + +use std::fs::OpenOptions; +use std::{borrow::Cow, env}; + +use fastapi::openapi::OpenApi; +use serde::Serialize; +use serde_json::{json, Value}; + +mod actix; +mod axum; +mod rocket; + +const DEFAULT_HTML: &str = include_str!("../res/redoc.html"); + +/// Trait makes [`Redoc`] to accept an _`URL`_ the [Redoc][redoc] will be served via predefined web +/// server. +/// +/// This is used **only** with **`actix-web`**, **`rocket`** or **`axum`** since they have implicit +/// implementation for serving the [`Redoc`] via the _`URL`_. +/// +/// [redoc]: +#[cfg(any(feature = "actix-web", feature = "rocket", feature = "axum"))] +#[cfg_attr( + doc_cfg, + doc(cfg(any(feature = "actix-web", feature = "rocket", feature = "axum"))) +)] +pub trait Servable +where + S: Spec, +{ + /// Construct a new [`Servable`] instance of _`openapi`_ with given _`url`_. + /// + /// * **url** Must point to location where the [`Servable`] is served. + /// * **openapi** Is [`Spec`] that is served via this [`Servable`] from the _**url**_. + fn with_url>>(url: U, openapi: S) -> Self; + + /// Construct a new [`Servable`] instance of _`openapi`_ with given _`url`_ and _`config`_. + /// + /// * **url** Must point to location where the [`Servable`] is served. + /// * **openapi** Is [`Spec`] that is served via this [`Servable`] from the _**url**_. + /// * **config** Is custom [`Config`] that is used to configure the [`Servable`]. + fn with_url_and_config>, C: Config>( + url: U, + openapi: S, + config: C, + ) -> Self; +} + +#[cfg(any(feature = "actix-web", feature = "rocket", feature = "axum"))] +impl Servable for Redoc { + fn with_url>>(url: U, openapi: S) -> Self { + Self::with_url_and_config(url, openapi, EmptyConfig) + } + + fn with_url_and_config>, C: Config>( + url: U, + openapi: S, + config: C, + ) -> Self { + Self { + url: url.into(), + html: Cow::Borrowed(DEFAULT_HTML), + openapi, + config: config.load(), + } + } +} + +/// Is standalone instance of [Redoc UI][redoc]. +/// +/// This can be used together with predefined web framework integration or standalone with +/// framework of your choice. [`Redoc::to_html`] method will convert this [`Redoc`] instance to +/// servable HTML file. +/// +/// [redoc]: +#[non_exhaustive] +#[derive(Clone)] +pub struct Redoc { + #[allow(unused)] + url: Cow<'static, str>, + html: Cow<'static, str>, + openapi: S, + config: Value, +} + +impl Redoc { + /// Constructs a new [`Redoc`] instance for given _`openapi`_ [`Spec`]. + /// + /// This will create [`Redoc`] with [`EmptyConfig`]. + /// + /// # Examples + /// + /// _**Create new [`Redoc`] instance with [`EmptyConfig`].**_ + /// ``` + /// # use fastapi_redoc::Redoc; + /// # use serde_json::json; + /// Redoc::new(json!({"openapi": "3.1.0"})); + /// ``` + pub fn new(openapi: S) -> Self { + Self::with_config(openapi, EmptyConfig) + } + + /// Constructs a new [`Redoc`] instance for given _`openapi`_ [`Spec`] and _`config`_ [`Config`] of choice. + /// + /// # Examples + /// + /// _**Create new [`Redoc`] instance with [`FileConfig`].**_ + /// ```no_run + /// # use fastapi_redoc::{Redoc, FileConfig}; + /// # use serde_json::json; + /// Redoc::with_config(json!({"openapi": "3.1.0"}), FileConfig); + /// ``` + pub fn with_config(openapi: S, config: C) -> Self { + Self { + html: Cow::Borrowed(DEFAULT_HTML), + url: Cow::Borrowed(""), + openapi, + config: config.load(), + } + } + + /// Override the [default HTML template][redoc_html_quickstart] with new one. See + /// [customization] for more details. + /// + /// [redoc_html_quickstart]: + /// [customization]: index.html#customization + pub fn custom_html>>(mut self, html: H) -> Self { + self.html = html.into(); + + self + } + + /// Converts this [`Redoc`] instance to servable HTML file. + /// + /// This will replace _**`$config`**_ variable placeholder with [`Config`] of this instance and + /// _**`$spec`**_ with [`Spec`] provided to this instance serializing it to JSON from the HTML + /// template used with the [`Redoc`]. If HTML template is not overridden with + /// [`Redoc::custom_html`] then the [default HTML template][redoc_html_quickstart] will be used. + /// + /// See more details in [customization][customization]. + /// + /// [redoc_html_quickstart]: + /// [customization]: index.html#customization + pub fn to_html(&self) -> String { + self.html + .replace("$config", &self.config.to_string()) + .replace( + "$spec", + &serde_json::to_string(&self.openapi).expect( + "Invalid OpenAPI spec, expected OpenApi, String, &str or serde_json::Value", + ), + ) + } +} + +/// Trait defines OpenAPI spec resource types supported by [`Redoc`]. +/// +/// By default this trait is implemented for [`fastapi::openapi::OpenApi`], [`String`], [`&str`] and +/// [`serde_json::Value`]. +/// +/// * **OpenApi** implementation allows using fastapi's OpenApi struct as a OpenAPI spec resource +/// for the [`Redoc`]. +/// * **String** and **&str** implementations allows defining HTTP URL for [`Redoc`] to load the +/// OpenAPI spec from. +/// * **Value** implementation enables the use of arbitrary JSON values with serde's `json!()` +/// macro as a OpenAPI spec for the [`Redoc`]. +/// +/// # Examples +/// +/// _**Use [`Redoc`] to serve fastapi's OpenApi.**_ +/// ```no_run +/// # use fastapi_redoc::Redoc; +/// # use fastapi::openapi::OpenApiBuilder; +/// # +/// Redoc::new(OpenApiBuilder::new().build()); +/// ``` +/// +/// _**Use [`Redoc`] to serve OpenAPI spec from url.**_ +/// ``` +/// # use fastapi_redoc::Redoc; +/// Redoc::new( +/// "https://github.com/swagger-api/swagger-petstore/blob/master/src/main/resources/openapi.yaml"); +/// ``` +/// +/// _**Use [`Redoc`] to serve custom OpenAPI spec using serde's `json!()` macro.**_ +/// ```rust +/// # use fastapi_redoc::Redoc; +/// # use serde_json::json; +/// Redoc::new(json!({"openapi": "3.1.0"})); +/// ``` +pub trait Spec: Serialize {} + +impl Spec for OpenApi {} + +impl Spec for String {} + +impl Spec for &str {} + +impl Spec for Value {} + +/// Trait defines configuration options for [`Redoc`]. +/// +/// There are 3 configuration methods [`EmptyConfig`], [`FileConfig`] and [`FnOnce`] closure +/// config. The [`Config`] must be able to load and serialize valid JSON. +/// +/// * **EmptyConfig** is the default config and serializes to empty JSON object _`{}`_. +/// * **FileConfig** Allows [`Redoc`] to be configured via user defined file which serializes to +/// JSON. +/// * **FnOnce** closure config allows inlining JSON serializable config directly to [`Redoc`] +/// declaration. +/// +/// Configuration format and allowed options can be found from Redocly's own API documentation. +/// +/// * [All supported Redoc configuration options][redoc_config]. +/// +/// **Note!** There is no validity check for configuration options and all options provided are +/// serialized as is to the [Redoc][redoc]. It is users own responsibility to check for possible +/// misspelled configuration options against the valid configuration options. +/// +/// # Examples +/// +/// _**Using [`FnOnce`] closure config.**_ +/// ```rust +/// # use fastapi_redoc::Redoc; +/// # use fastapi::OpenApi; +/// # use serde_json::json; +/// # #[derive(OpenApi)] +/// # #[openapi()] +/// # struct ApiDoc; +/// # +/// Redoc::with_config(ApiDoc::openapi(), || json!({ "disableSearch": true })); +/// ``` +/// +/// _**Using [`FileConfig`].**_ +/// ```no_run +/// # use fastapi_redoc::{Redoc, FileConfig}; +/// # use fastapi::OpenApi; +/// # use serde_json::json; +/// # #[derive(OpenApi)] +/// # #[openapi()] +/// # struct ApiDoc; +/// # +/// Redoc::with_config(ApiDoc::openapi(), FileConfig); +/// ``` +/// +/// [redoc]: +/// [redoc_config]: +pub trait Config { + /// Implementor must implement the logic which loads the configuration of choice and converts it + /// to serde's [`serde_json::Value`]. + fn load(self) -> Value; +} + +impl S> Config for F { + fn load(self) -> Value { + json!(self()) + } +} + +/// Makes [`Redoc`] load it's configuration from a user defined file. +/// +/// The config file must be defined via _**`FASTAPI_REDOC_CONFIG_FILE`**_ env variable for your +/// application. It can either be defined in runtime before the [`Redoc`] declaration or before +/// application startup or at compile time via `build.rs` file. +/// +/// The file must be located relative to your application runtime directory. +/// +/// The file must be loadable via [`Config`] and it must return a JSON object representing the +/// [Redoc configuration][redoc_config]. +/// +/// # Examples +/// +/// _**Using a `build.rs` file to define the config file.**_ +/// ```rust +/// # fn main() { +/// println!("cargo:rustc-env=FASTAPI_REDOC_CONFIG_FILE=redoc.config.json"); +/// # } +/// ``` +/// +/// _**Defining config file at application startup.**_ +/// ```bash +/// FASTAPI_REDOC_CONFIG_FILE=redoc.config.json cargo run +/// ``` +/// +/// [redoc_config]: +pub struct FileConfig; + +impl Config for FileConfig { + fn load(self) -> Value { + let path = env::var("FASTAPI_REDOC_CONFIG_FILE") + .expect("Missing `FASTAPI_REDOC_CONFIG_FILE` env variable, cannot load file config."); + + let file = OpenOptions::new() + .read(true) + .open(&path) + .unwrap_or_else(|_| panic!("File `{path}` is not readable or does not exist.")); + serde_json::from_reader(file).expect("Config file cannot be parsed to JSON") + } +} + +/// Is the default configuration and serializes to empty JSON object _`{}`_. +pub struct EmptyConfig; + +impl Config for EmptyConfig { + fn load(self) -> Value { + json!({}) + } +} diff --git a/fastapi-redoc/src/rocket.rs b/fastapi-redoc/src/rocket.rs new file mode 100644 index 0000000..1609d4a --- /dev/null +++ b/fastapi-redoc/src/rocket.rs @@ -0,0 +1,28 @@ +#![cfg(feature = "rocket")] + +use rocket::http::Method; +use rocket::response::content::RawHtml; +use rocket::route::{Handler, Outcome}; +use rocket::{Data, Request, Route}; + +use crate::{Redoc, Spec}; + +impl From> for Vec { + fn from(value: Redoc) -> Self { + vec![Route::new( + Method::Get, + value.url.as_ref(), + RedocHandler(value.to_html()), + )] + } +} + +#[derive(Clone)] +struct RedocHandler(String); + +#[rocket::async_trait] +impl Handler for RedocHandler { + async fn handle<'r>(&self, request: &'r Request<'_>, _: Data<'r>) -> Outcome<'r> { + Outcome::from(request, RawHtml(self.0.clone())) + } +} diff --git a/fastapi-scalar/Cargo.toml b/fastapi-scalar/Cargo.toml new file mode 100644 index 0000000..1a18fe6 --- /dev/null +++ b/fastapi-scalar/Cargo.toml @@ -0,0 +1,32 @@ +[package] +name = "fastapi-scalar" +description = "Scalar for fastapi" +version = "0.2.0" +edition = "2021" +license = "MIT OR Apache-2.0" +readme = "README.md" +keywords = ["scalar", "openapi", "documentation"] +repository = "https://github.com/nxpkg/fastapi" +categories = ["web-programming"] +authors = ["Md Sulaiman "] +rust-version.workspace = true + +[package.metadata.docs.rs] +features = ["actix-web", "axum", "rocket"] +rustdoc-args = ["--cfg", "doc_cfg"] + +[dependencies] +serde = { version = "1.0", features = ["derive"] } +serde_json = { version = "1.0" } +fastapi = { version = "0.1.1", path = "../fastapi", default-features = false, features = [ + "macros", +] } +actix-web = { version = "4", optional = true, default-features = false } +rocket = { version = "0.5", features = ["json"], optional = true } +axum = { version = "0.7", default-features = false, optional = true } + +[dev-dependencies] +fastapi-scalar = { path = ".", features = ["actix-web", "axum", "rocket"] } + +[lints.rust] +unexpected_cfgs = { level = "warn", check-cfg = ['cfg(doc_cfg)'] } diff --git a/fastapi-scalar/LICENSE-APACHE b/fastapi-scalar/LICENSE-APACHE new file mode 120000 index 0000000..965b606 --- /dev/null +++ b/fastapi-scalar/LICENSE-APACHE @@ -0,0 +1 @@ +../LICENSE-APACHE \ No newline at end of file diff --git a/fastapi-scalar/LICENSE-MIT b/fastapi-scalar/LICENSE-MIT new file mode 120000 index 0000000..76219eb --- /dev/null +++ b/fastapi-scalar/LICENSE-MIT @@ -0,0 +1 @@ +../LICENSE-MIT \ No newline at end of file diff --git a/fastapi-scalar/README.md b/fastapi-scalar/README.md new file mode 100644 index 0000000..c71d606 --- /dev/null +++ b/fastapi-scalar/README.md @@ -0,0 +1,131 @@ +# fastapi-scalar + +[![Fastapi build](https://github.com/nxpkg/fastapi/actions/workflows/build.yaml/badge.svg)](https://github.com/nxpkg/fastapi/actions/workflows/build.yaml) +[![crates.io](https://img.shields.io/crates/v/fastapi-scalar.svg?label=crates.io&color=orange&logo=rust)](https://crates.io/crates/fastapi-scalar) +[![docs.rs](https://img.shields.io/static/v1?label=docs.rs&message=fastapi-scalar&color=blue&logo=data:image/svg+xml;base64,PHN2ZyByb2xlPSJpbWciIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDUxMiA1MTIiPjxwYXRoIGZpbGw9IiNmNWY1ZjUiIGQ9Ik00ODguNiAyNTAuMkwzOTIgMjE0VjEwNS41YzAtMTUtOS4zLTI4LjQtMjMuNC0zMy43bC0xMDAtMzcuNWMtOC4xLTMuMS0xNy4xLTMuMS0yNS4zIDBsLTEwMCAzNy41Yy0xNC4xIDUuMy0yMy40IDE4LjctMjMuNCAzMy43VjIxNGwtOTYuNiAzNi4yQzkuMyAyNTUuNSAwIDI2OC45IDAgMjgzLjlWMzk0YzAgMTMuNiA3LjcgMjYuMSAxOS45IDMyLjJsMTAwIDUwYzEwLjEgNS4xIDIyLjEgNS4xIDMyLjIgMGwxMDMuOS01MiAxMDMuOSA1MmMxMC4xIDUuMSAyMi4xIDUuMSAzMi4yIDBsMTAwLTUwYzEyLjItNi4xIDE5LjktMTguNiAxOS45LTMyLjJWMjgzLjljMC0xNS05LjMtMjguNC0yMy40LTMzLjd6TTM1OCAyMTQuOGwtODUgMzEuOXYtNjguMmw4NS0zN3Y3My4zek0xNTQgMTA0LjFsMTAyLTM4LjIgMTAyIDM4LjJ2LjZsLTEwMiA0MS40LTEwMi00MS40di0uNnptODQgMjkxLjFsLTg1IDQyLjV2LTc5LjFsODUtMzguOHY3NS40em0wLTExMmwtMTAyIDQxLjQtMTAyLTQxLjR2LS42bDEwMi0zOC4yIDEwMiAzOC4ydi42em0yNDAgMTEybC04NSA0Mi41di03OS4xbDg1LTM4Ljh2NzUuNHptMC0xMTJsLTEwMiA0MS40LTEwMi00MS40di0uNmwxMDItMzguMiAxMDIgMzguMnYuNnoiPjwvcGF0aD48L3N2Zz4K)](https://docs.rs/fastapi-scalar/latest/) +![rustc](https://img.shields.io/static/v1?label=rustc&message=1.75&color=orange&logo=rust) + +This crate works as a bridge between [fastapi](https://docs.rs/fastapi/latest/fastapi/) and [Scalar](https://scalar.com/) OpenAPI visualizer. + +Fastapi-scalar provides simple mechanism to transform OpenAPI spec resource to a servable HTML +file which can be served via [predefined framework integration](#examples) or used +[standalone](#using-standalone) and served manually. + +You may find fullsize examples from fastapi's Github [repository][examples]. + +# Crate Features + +* **actix-web** Allows serving `Scalar` via _**`actix-web`**_. `version >= 4` +* **rocket** Allows serving `Scalar` via _**`rocket`**_. `version >=0.5` +* **axum** Allows serving `Scalar` via _**`axum`**_. `version >=0.7` + +# Install + +Use Scalar only without any boiler plate implementation. +```toml +[dependencies] +fastapi-scalar = "0.2" +``` + +Enable actix-web integration with Scalar. +```toml +[dependencies] +fastapi-scalar = { version = "0.2", features = ["actix-web"] } +``` + +# Using standalone + +Fastapi-scalar can be used standalone as simply as creating a new `Scalar` instance and then +serving it by what ever means available as `text/html` from http handler in your favourite web +framework. + +`Scalar::to_html` method can be used to convert the `Scalar` instance to a servable html +file. +```rust +let scalar = Scalar::new(ApiDoc::openapi()); + +// Then somewhere in your application that handles http operation. +// Make sure you return correct content type `text/html`. +let scalar = move || async { + scalar.to_html() +}; +``` + +# Customization + +Scalar supports customization via [`Scalar::custom_html`] method which allows overriding the +default HTML template with customized one. + +**See more about configuration options.** + +* [Quick HTML configuration instructions](https://github.com/scalar/scalar/blob/main/documentation/integrations/html.md) +* [Configuration options](https://github.com/scalar/scalar/blob/main/documentation/configuration.md) +* [Themes](https://github.com/scalar/scalar/blob/main/documentation/themes.md) + +The HTML template must contain **`$spec`** variable which will be overridden during +`Scalar::to_html` execution. + +* **`$spec`** Will be the `Spec` that will be rendered via `Scalar`. + +_**Overriding the HTML template with a custom one.**_ +```rust +# use fastapi_redoc::Redoc; +# use fastapi::OpenApi; +# use serde_json::json; +# #[derive(OpenApi)] +# #[openapi()] +# struct ApiDoc; +# +let html = "..."; +Redoc::new(ApiDoc::openapi()).custom_html(html); +``` + +# Examples + +_**Serve `Scalar` via `actix-web` framework.**_ +```rust +use actix_web::App; +use fastapi_scalar::{Scalar, Servable}; + +App::new().service(Scalar::with_url("/scalar", ApiDoc::openapi())); +``` + +_**Serve `Scalar` via `rocket` framework.**_ +```rust +use fastapi_scalar::{Scalar, Servable}; + +rocket::build() + .mount( + "/", + Scalar::with_url("/scalar", ApiDoc::openapi()), + ); +``` + +_**Serve `Scalar` via `axum` framework.**_ + ```rust + use axum::Router; + use fastapi_scalar::{Scalar, Servable}; + + let app = Router::::new() + .merge(Scalar::with_url("/scalar", ApiDoc::openapi())); +``` + +_**Use `Scalar` to serve OpenAPI spec from url.**_ +```rust +Scalar::new( + "https://github.com/swagger-api/swagger-petstore/blob/master/src/main/resources/openapi.yaml") +``` + +_**Use `Scalar` to serve custom OpenAPI spec using serde's `json!()` macro.**_ +```rust +Scalar::new(json!({"openapi": "3.1.0"})); +``` + +# License + +Licensed under either of [Apache 2.0](LICENSE-APACHE) or [MIT](LICENSE-MIT) license at your option. + +Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in this crate +by you, shall be dual licensed, without any additional terms or conditions. + +[examples]: diff --git a/fastapi-scalar/res/scalar.html b/fastapi-scalar/res/scalar.html new file mode 100644 index 0000000..e35945b --- /dev/null +++ b/fastapi-scalar/res/scalar.html @@ -0,0 +1,19 @@ + + + + Scalar + + + + + + + + + diff --git a/fastapi-scalar/src/actix.rs b/fastapi-scalar/src/actix.rs new file mode 100644 index 0000000..669e2ea --- /dev/null +++ b/fastapi-scalar/src/actix.rs @@ -0,0 +1,26 @@ +#![cfg(feature = "actix-web")] + +use actix_web::dev::HttpServiceFactory; +use actix_web::guard::Get; +use actix_web::web::Data; +use actix_web::{HttpResponse, Resource, Responder}; + +use crate::{Scalar, Spec}; + +impl HttpServiceFactory for Scalar { + fn register(self, config: &mut actix_web::dev::AppService) { + let html = self.to_html(); + + async fn serve_scalar(scalar: Data) -> impl Responder { + HttpResponse::Ok() + .content_type("text/html") + .body(scalar.to_string()) + } + + Resource::new(self.url.as_ref()) + .guard(Get()) + .app_data(Data::new(html)) + .to(serve_scalar) + .register(config); + } +} diff --git a/fastapi-scalar/src/axum.rs b/fastapi-scalar/src/axum.rs new file mode 100644 index 0000000..4d3cd42 --- /dev/null +++ b/fastapi-scalar/src/axum.rs @@ -0,0 +1,19 @@ +#![cfg(feature = "axum")] + +use axum::response::Html; +use axum::{routing, Router}; + +use crate::{Scalar, Spec}; + +impl From> for Router +where + R: Clone + Send + Sync + 'static, +{ + fn from(value: Scalar) -> Self { + let html = value.to_html(); + Router::::new().route( + value.url.as_ref(), + routing::get(move || async { Html(html) }), + ) + } +} diff --git a/fastapi-scalar/src/lib.rs b/fastapi-scalar/src/lib.rs new file mode 100644 index 0000000..4c4c707 --- /dev/null +++ b/fastapi-scalar/src/lib.rs @@ -0,0 +1,287 @@ +#![warn(missing_docs)] +#![warn(rustdoc::broken_intra_doc_links)] +#![cfg_attr(doc_cfg, feature(doc_cfg))] +//! This crate works as a bridge between [fastapi](https://docs.rs/fastapi/latest/fastapi/) and [Scalar](https://scalar.com/) OpenAPI visualizer. +//! +//! Fastapi-scalar provides simple mechanism to transform OpenAPI spec resource to a servable HTML +//! file which can be served via [predefined framework integration][Self#examples] or used +//! [standalone][Self#using-standalone] and served manually. +//! +//! You may find fullsize examples from fastapi's Github [repository][examples]. +//! +//! # Crate Features +//! +//! * **actix-web** Allows serving [`Scalar`] via _**`actix-web`**_. +//! * **rocket** Allows serving [`Scalar`] via _**`rocket`**_. +//! * **axum** Allows serving [`Scalar`] via _**`axum`**_. +//! +//! # Install +//! +//! Use Scalar only without any boiler plate implementation. +//! ```toml +//! [dependencies] +//! fastapi-scalar = "0.1" +//! ``` +//! +//! Enable actix-web integration with Scalar. +//! ```toml +//! [dependencies] +//! fastapi-scalar = { version = "0.1", features = ["actix-web"] } +//! ``` +//! +//! # Using standalone +//! +//! Fastapi-scalar can be used standalone as simply as creating a new [`Scalar`] instance and then +//! serving it by what ever means available as `text/html` from http handler in your favourite web +//! framework. +//! +//! [`Scalar::to_html`] method can be used to convert the [`Scalar`] instance to a servable html +//! file. +//! ``` +//! # use fastapi_scalar::Scalar; +//! # use fastapi::OpenApi; +//! # use serde_json::json; +//! # #[derive(OpenApi)] +//! # #[openapi()] +//! # struct ApiDoc; +//! # +//! let scalar = Scalar::new(ApiDoc::openapi()); +//! +//! // Then somewhere in your application that handles http operation. +//! // Make sure you return correct content type `text/html`. +//! let scalar_handler = move || { +//! scalar.to_html() +//! }; +//! ``` +//! +//! # Customization +//! +//! Scalar supports customization via [`Scalar::custom_html`] method which allows overriding the +//! default HTML template with customized one. +//! +//! **See more about configuration options.** +//! +//! * [Quick HTML configuration instructions][html] +//! * [Configuration options][configuration] +//! * [Themes][themes] +//! +//! The HTML template must contain **`$spec`** variable which will be overridden during +//! [`Scalar::to_html`] execution. +//! +//! * **`$spec`** Will be the [`Spec`] that will be rendered via [Scalar][scalar]. +//! +//! _**Overriding the HTML template with a custom one.**_ +//! ```rust +//! # use fastapi_scalar::Scalar; +//! # use fastapi::OpenApi; +//! # use serde_json::json; +//! # #[derive(OpenApi)] +//! # #[openapi()] +//! # struct ApiDoc; +//! # +//! let html = "..."; +//! Scalar::new(ApiDoc::openapi()).custom_html(html); +//! ``` +//! # Examples +//! +//! _**Serve [`Scalar`] via `actix-web` framework.**_ +//! ```no_run +//! use actix_web::App; +//! use fastapi_scalar::{Scalar, Servable}; +//! +//! # use fastapi::OpenApi; +//! # use std::net::Ipv4Addr; +//! # #[derive(OpenApi)] +//! # #[openapi()] +//! # struct ApiDoc; +//! App::new().service(Scalar::with_url("/scalar", ApiDoc::openapi())); +//! ``` +//! +//! _**Serve [`Scalar`] via `rocket` framework.**_ +//! ```no_run +//! # use rocket; +//! use fastapi_scalar::{Scalar, Servable}; +//! +//! # use fastapi::OpenApi; +//! # #[derive(OpenApi)] +//! # #[openapi()] +//! # struct ApiDoc; +//! rocket::build() +//! .mount( +//! "/", +//! Scalar::with_url("/scalar", ApiDoc::openapi()), +//! ); +//! ``` +//! +//! _**Serve [`Scalar`] via `axum` framework.**_ +//! ```no_run +//! use axum::Router; +//! use fastapi_scalar::{Scalar, Servable}; +//! # use fastapi::OpenApi; +//! # #[derive(OpenApi)] +//! # #[openapi()] +//! # struct ApiDoc; +//! # +//! # fn inner() +//! # where +//! # S: Clone + Send + Sync + 'static, +//! # { +//! +//! let app = Router::::new() +//! .merge(Scalar::with_url("/scalar", ApiDoc::openapi())); +//! # } +//! ``` +//! +//! _**Use [`Scalar`] to serve custom OpenAPI spec using serde's `json!()` macro.**_ +//! ```rust +//! # use fastapi_scalar::Scalar; +//! # use serde_json::json; +//! Scalar::new(json!({"openapi": "3.1.0"})); +//! ``` +//! +//! [examples]: +//! [scalar]: +//! [configuration]: +//! [themes]: +//! [html]: + +use std::borrow::Cow; + +use fastapi::openapi::OpenApi; +use serde::Serialize; +use serde_json::Value; + +mod actix; +mod axum; +mod rocket; + +const DEFAULT_HTML: &str = include_str!("../res/scalar.html"); + +/// Trait makes [`Scalar`] to accept an _`URL`_ the [Scalar][scalar] will be served via predefined +/// web server. +/// +/// This is used **only** with **`actix-web`**, **`rocket`** or **`axum`** since they have implicit +/// implementation for serving the [`Scalar`] via the _`URL`_. +/// +/// [scalar]: +#[cfg(any(feature = "actix-web", feature = "rocket", feature = "axum"))] +#[cfg_attr( + doc_cfg, + doc(cfg(any(feature = "actix-web", feature = "rocket", feature = "axum"))) +)] +pub trait Servable +where + S: Spec, +{ + /// Construct a new [`Servable`] instance of _`openapi`_ with given _`url`_. + /// + /// * **url** Must point to location where the [`Servable`] is served. + /// * **openapi** Is [`Spec`] that is served via this [`Servable`] from the _**url**_. + fn with_url>>(url: U, openapi: S) -> Self; +} + +#[cfg(any(feature = "actix-web", feature = "rocket", feature = "axum"))] +impl Servable for Scalar { + fn with_url>>(url: U, openapi: S) -> Self { + Self { + html: Cow::Borrowed(DEFAULT_HTML), + url: url.into(), + openapi, + } + } +} + +/// Is standalone instance of [Scalar][scalar]. +/// +/// This can be used together with predefined web framework integration or standalone with +/// framework of your choice. [`Scalar::to_html`] method will convert this [`Scalar`] instance to +/// servable HTML file. +/// +/// [scalar]: +#[non_exhaustive] +#[derive(Clone)] +pub struct Scalar { + #[allow(unused)] + url: Cow<'static, str>, + html: Cow<'static, str>, + openapi: S, +} + +impl Scalar { + /// Constructs a new [`Scalar`] instance for given _`openapi`_ [`Spec`]. + /// + /// # Examples + /// + /// _**Create new [`Scalar`] instance.**_ + /// ``` + /// # use fastapi_scalar::Scalar; + /// # use serde_json::json; + /// Scalar::new(json!({"openapi": "3.1.0"})); + /// ``` + pub fn new(openapi: S) -> Self { + Self { + html: Cow::Borrowed(DEFAULT_HTML), + url: Cow::Borrowed("/"), + openapi, + } + } + + /// Converts this [`Scalar`] instance to servable HTML file. + /// + /// This will replace _**`$spec`**_ variable placeholder with [`Spec`] of this instance + /// provided to this instance serializing it to JSON from the HTML template used with the + /// [`Scalar`]. + /// + /// At this point in time, it is not possible to customize the HTML template used by the + /// [`Scalar`] instance. + pub fn to_html(&self) -> String { + self.html.replace( + "$spec", + &serde_json::to_string(&self.openapi).expect( + "Invalid OpenAPI spec, expected OpenApi, String, &str or serde_json::Value", + ), + ) + } + + /// Override the [default HTML template][scalar_html_quickstart] with new one. Refer to + /// [customization] for more comprehensive guide for customization options. + /// + /// [customization]: + /// [scalar_html_quickstart]: + pub fn custom_html>>(mut self, html: H) -> Self { + self.html = html.into(); + + self + } +} + +/// Trait defines OpenAPI spec resource types supported by [`Scalar`]. +/// +/// By default this trait is implemented for [`fastapi::openapi::OpenApi`] and [`serde_json::Value`]. +/// +/// * **OpenApi** implementation allows using fastapi's OpenApi struct as a OpenAPI spec resource +/// for the [`Scalar`]. +/// * **Value** implementation enables the use of arbitrary JSON values with serde's `json!()` +/// macro as a OpenAPI spec for the [`Scalar`]. +/// +/// # Examples +/// +/// _**Use [`Scalar`] to serve fastapi's OpenApi.**_ +/// ```no_run +/// # use fastapi_scalar::Scalar; +/// # use fastapi::openapi::OpenApiBuilder; +/// # +/// Scalar::new(OpenApiBuilder::new().build()); +/// ``` +/// +/// _**Use [`Scalar`] to serve custom OpenAPI spec using serde's `json!()` macro.**_ +/// ```rust +/// # use fastapi_scalar::Scalar; +/// # use serde_json::json; +/// Scalar::new(json!({"openapi": "3.1.0"})); +/// ``` +pub trait Spec: Serialize {} + +impl Spec for OpenApi {} + +impl Spec for Value {} diff --git a/fastapi-scalar/src/rocket.rs b/fastapi-scalar/src/rocket.rs new file mode 100644 index 0000000..50e5039 --- /dev/null +++ b/fastapi-scalar/src/rocket.rs @@ -0,0 +1,28 @@ +#![cfg(feature = "rocket")] + +use rocket::http::Method; +use rocket::response::content::RawHtml; +use rocket::route::{Handler, Outcome}; +use rocket::{Data, Request, Route}; + +use crate::{Scalar, Spec}; + +impl From> for Vec { + fn from(value: Scalar) -> Self { + vec![Route::new( + Method::Get, + value.url.as_ref(), + ScalarHandler(value.to_html()), + )] + } +} + +#[derive(Clone)] +struct ScalarHandler(String); + +#[rocket::async_trait] +impl Handler for ScalarHandler { + async fn handle<'r>(&self, request: &'r Request<'_>, _: Data<'r>) -> Outcome<'r> { + Outcome::from(request, RawHtml(self.0.clone())) + } +} diff --git a/fastapi-swagger-ui-vendored/Cargo.toml b/fastapi-swagger-ui-vendored/Cargo.toml new file mode 100644 index 0000000..a2cdb30 --- /dev/null +++ b/fastapi-swagger-ui-vendored/Cargo.toml @@ -0,0 +1,14 @@ +[package] +name = "fastapi-swagger-ui-vendored" +description = "Vendored Swagger UI for fastapi" +license = "MIT OR Apache-2.0" +readme = "README.md" +version = "0.1.1" +edition = "2021" +keywords = ["swagger-ui", "vendored", "openapi", "documentation"] +repository = "https://github.com/nxpkg/fastapi" +categories = ["web-programming"] +authors = ["Md Sulaiman "] +rust-version.workspace = true + +[dependencies] diff --git a/fastapi-swagger-ui-vendored/LICENSE-APACHE b/fastapi-swagger-ui-vendored/LICENSE-APACHE new file mode 120000 index 0000000..965b606 --- /dev/null +++ b/fastapi-swagger-ui-vendored/LICENSE-APACHE @@ -0,0 +1 @@ +../LICENSE-APACHE \ No newline at end of file diff --git a/fastapi-swagger-ui-vendored/LICENSE-MIT b/fastapi-swagger-ui-vendored/LICENSE-MIT new file mode 120000 index 0000000..76219eb --- /dev/null +++ b/fastapi-swagger-ui-vendored/LICENSE-MIT @@ -0,0 +1 @@ +../LICENSE-MIT \ No newline at end of file diff --git a/fastapi-swagger-ui-vendored/README.md b/fastapi-swagger-ui-vendored/README.md new file mode 100644 index 0000000..e6dfac2 --- /dev/null +++ b/fastapi-swagger-ui-vendored/README.md @@ -0,0 +1,22 @@ +# fastapi-swagger-ui-vendored + +[![Fastapi build](https://github.com/nxpkg/fastapi/actions/workflows/build.yaml/badge.svg)](https://github.com/nxpkg/fastapi/actions/workflows/build.yaml) +[![crates.io](https://img.shields.io/crates/v/fastapi-swagger-ui-vendored.svg?label=crates.io&color=orange&logo=rust)](https://crates.io/crates/fastapi-swagger-ui-vendored) +[![docs.rs](https://img.shields.io/static/v1?label=docs.rs&message=fastapi-swagger-ui-vendored&color=blue&logo=data:image/svg+xml;base64,PHN2ZyByb2xlPSJpbWciIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDUxMiA1MTIiPjxwYXRoIGZpbGw9IiNmNWY1ZjUiIGQ9Ik00ODguNiAyNTAuMkwzOTIgMjE0VjEwNS41YzAtMTUtOS4zLTI4LjQtMjMuNC0zMy43bC0xMDAtMzcuNWMtOC4xLTMuMS0xNy4xLTMuMS0yNS4zIDBsLTEwMCAzNy41Yy0xNC4xIDUuMy0yMy40IDE4LjctMjMuNCAzMy43VjIxNGwtOTYuNiAzNi4yQzkuMyAyNTUuNSAwIDI2OC45IDAgMjgzLjlWMzk0YzAgMTMuNiA3LjcgMjYuMSAxOS45IDMyLjJsMTAwIDUwYzEwLjEgNS4xIDIyLjEgNS4xIDMyLjIgMGwxMDMuOS01MiAxMDMuOSA1MmMxMC4xIDUuMSAyMi4xIDUuMSAzMi4yIDBsMTAwLTUwYzEyLjItNi4xIDE5LjktMTguNiAxOS45LTMyLjJWMjgzLjljMC0xNS05LjMtMjguNC0yMy40LTMzLjd6TTM1OCAyMTQuOGwtODUgMzEuOXYtNjguMmw4NS0zN3Y3My4zek0xNTQgMTA0LjFsMTAyLTM4LjIgMTAyIDM4LjJ2LjZsLTEwMiA0MS40LTEwMi00MS40di0uNnptODQgMjkxLjFsLTg1IDQyLjV2LTc5LjFsODUtMzguOHY3NS40em0wLTExMmwtMTAyIDQxLjQtMTAyLTQxLjR2LS42bDEwMi0zOC4yIDEwMiAzOC4ydi42em0yNDAgMTEybC04NSA0Mi41di03OS4xbDg1LTM4Ljh2NzUuNHptMC0xMTJsLTEwMiA0MS40LTEwMi00MS40di0uNmwxMDItMzguMiAxMDIgMzguMnYuNnoiPjwvcGF0aD48L3N2Zz4K)](https://docs.rs/fastapi-swagger-ui-vendored/latest/) +![rustc](https://img.shields.io/static/v1?label=rustc&message=1.75&color=orange&logo=rust) + +This crate holds the [Swagger UI](https://github.com/swagger-api/swagger-ui) zip archive re-packaged as +Rust crate. The crate serves as a build dependency for `fastapi-swagger-ui` and is used to serve the +Swagger UI when `vendored` crate feature is enabled for `fastapi-swagger-ui` crate. + +Vendored Swagger UI provides the means to serve Swagger UI in sandboxed environments where network access or +even other means to provide Swagger UI is not possible. + +**Swagger UI version: `5.17.14`** + +## License + +Licensed under either of [Apache 2.0](LICENSE-APACHE) or [MIT](LICENSE-MIT) license at your option. + +Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in this crate +by you, shall be dual licensed, without any additional terms or conditions. diff --git a/fastapi-swagger-ui-vendored/res/v0.1.1.zip b/fastapi-swagger-ui-vendored/res/v0.1.1.zip new file mode 100644 index 0000000..1becba2 --- /dev/null +++ b/fastapi-swagger-ui-vendored/res/v0.1.1.zip @@ -0,0 +1 @@ +404: Not Found \ No newline at end of file diff --git a/fastapi-swagger-ui-vendored/res/v5.17.14.zip b/fastapi-swagger-ui-vendored/res/v5.17.14.zip new file mode 100644 index 0000000000000000000000000000000000000000..4d5749eff24e5d36f98227a04a15d87d6aac4a55 GIT binary patch literal 4388280 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

+Ih6u# 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 PA%OEA~s2v^lCJK^QEt4VZY0;A%RtD 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ⅆmBw(F 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

hGu5TA%Z=2L3&UX%Z5x*rg)KT zCAkQg^S7GlDfMz9z!1axNm+7Qq^zcfP*3g?@B%-g1!|vBd$`$-$G6Wk6Wy^^-_9-? z#K5blyms9-oN`WlsSQRMw&J5YT>EKnRJG=GTuwl0QkY-uMvK~nGiK}_$`VR@ZYtgJ zBqea!JFe@D$l(1gLbKJ%N2GIS$HXhN{XU>fra1Hsy&C0}R{2g(D zHG-c^%wYBc>t-Qor_i0a0qIB;lbrEVgq8Lf)-9~}X>V-p*;h}(NeqRWwRo|)u?#wV zX2_k9)QT+ctz=G-`;!B=Qm$jRH_9$Y!f9U;Py1SUB;h`_{!zPli^-B|B`^cdB^K3s zs>ilS!b&Drdd$S}SrbNFJva6A;K9z2)_AH3@cjsQCNGR+MTYVhzs(Zh$di@Q$o#WI ziaL@VEwIz{j5i13ShTZy5 zg6*au%N)rUXNiv4$zQR;7;5>`7-BA^Zo^X0!S(L&tWm@|RYz83s)-tU|6UV$=c=!aGN9mpj z?R?L2>GpU7F@)K)?7G~IvggKh;inBsFmU3XT! zvFx%t8{$i=V*z|Et8v17+0&x!(gRx;6uFlIpoKGa<^7%_zc1`&svK3V@{if^<#q%- zujpz#@EqXA4GxAmPQ+>u>0!@Ta+=V)zKA(1K3B^s70X!7T7-KFJaARLiBI0**Nmm6dHDZ;UpbxA!154SM&F1q z%vMP>WSdC5$bKNqP zbdK9gen2?_!4IbUG(QmNNMWe_;5>?>2K0`_4~pU-*=%&%@2d%aaePDhfkuj}HP)t` zcrJzsdoY6yV#|bYhk0{bN&D+pOk#}e#BCME6Q)kmuLNV`Vw;l(Zr!6@Qs$6Txxf_3ReH0YR+g1Kec$>jI>< zQdO%?K@{2lYvBECBy4tTPr$WW9noEyh3G(ub8W~`!}yHB6}2(3ewTi*OF@KBXkbdZ zr->xL8F*&cuflkVgo7TbU#4VuO6O+oa_W~7l#jA;M7o~Q>VL4S)bqlJtgAGNUMLjv zwm_QIGQ(>9`{BLiEM;Gh8Ik~R2r%99O8l5{%2ggthf}b#G%wv zVEDkMuv2g8%7t+52Ih%>9JEK_3Y)np*I3QtHaq{!!tZnbe&dvY#o4$dR2}evb<_oxLpi*XxSe zT%V(L%u{yD%%qcH_pQ0FR=MB(3P<0Xrwxzwjb$tIzSG42d-@%6GRfQ@Vc%^XGA#Jtt(P9S&XRvW zjDeEtk2o<((30Q1U60R|S;)V{tQ78w=bwpX>4YCPTR(@wOEb4V!1V>scXu<6-lcg= zzDr1+%#W!*1ky{6F*>wru9^34q4^4?cM0fXN$RLTe<(wR7J#STgGf*kwAu08Ox%T` zY$xE)dDc(dg+zalyUWyFyn7PyVO_X(w;*@-sk`X$q%I<9-dy?a4rbZ;-o4Ur9(u<# zNZezn9PZ37@0>)rS(h*g70zF4&hXU@_Ez1d$~)9p_1;Js5_-F%7S+gb+)zm}x^kw%y}I=`jK5)3&Kjxm2)Bwhc2iA3-}U>ngd#R~_psaHIt}1SfccA}Lw< zmul=LHS6CcKre?Y1awkvO6D>sY$P?w)>3AE-Qi(ry8~6xSU`g%L@Hp_d|Q^);=WYX zmv=3E!mC#{*AAwByh+9dD}!IAU~QlI)`yp#K9(Dr_{U(%+7jeMqq$+t7Nr=nScY}w z8Z~pL6;_pq8N}MzVZ0kV?jRzVVa2jSoFGlLU}cq;M<>y3q*z2Hz8pO}K8b%61D}m8 zOL6`j-D49H7~o8bQw>j2E>tYNf_xsqrsCD7hoEV$G}5=%@4afOP0 zA92?-^N@6Bu(p$l(F4=EjjJi-tgJ1=H5ONgFZL*UhEAnV*vbSfNE3K%LiOcR#Y%q( zpJrLutC&vU=aO0ilG|4o{*0G}WR9=kwUT&cP?a1~TCXpP@-jm>RdPaO`>K^YTUehH zTbS%X-xGjcx!9>JSfIpgdU%9LGiDYi^6mP{ytJs_ZSQ_8QbajE2i5*%o z*Z@pS?BjQlbr~k+*o%~+huV0a7A$-34-HnDqMLR`#)RoMCuRKRbITkq zh}O~)Yqrm0F4cS-(G-p|U^4qQIm~8Obyjf50v4${OJ+)o-6p`#^ljo*$ZnwaZ2H_z z4A+FGRlj&+E-6$61DdT|*&gioeEymX2&R1i1fUQi9TcpzCTmdy=ZAy@MhQIW_a-A1 zX%*pA_7zuQPF?uMJBJ-x|F;uS$T_Bc^iJzv#Ak^x^ePOc;Q=OsuV%5oE6|G; zZl7M!3FlKo>MQGnZF+#vRGCOC?##EREbnF#StP1urn#IeiV|jU8>MGSE>K9LTj>zW zSWVneDv1kT(76^#a=c|Ui53K#0nQ7R_W{=srB8_wI_uj1#uXc#OBrG9mGI4qgw9vu z!U1O#`Ks*&<2gyk55~$0IGpm=jnS}*{x5aPApXMSj7Htp4_B1q2#qV-o%0EU}nVx=zDWy_gZ%;mr+J=P!QlQJCzWs zm^k{W-AJcdi;GMycJ1H%ah6)-;zlmY2f0&T9LeuERqwCtmz?aPp_Xu_{;BYXUB89p;&2l| zlDvf%9}$(g#I3S*dVU#(LH}^sGs=*>y#6_Tr|-l{!xrUjx8Z{=w3e(M$0mv#zY0(%>`u;bhlP+ z#-O=nY~Z=ZIy=m|J`&R~YC6uSc?x2&BEe3zigCPp3dbh#iY6~o!enuidYc}1Dx--4 zr^0n4i$%**&%|h<1?zEhJAb*_4o*plLPbJpzBKY8P4Gjc{+{Oh5R-z4Y5Zl8d|^=N zN(sI_6!D}aI;mLtae11Ele_lFSKkNZd zPnR`#XHvttdaz(BM@f1ecJeV%4GgQ&t2g8C3%I9}xv_i{(b`fmy0{8>$dl{8_8^LG zEn`7fmnREsVz0qMoHBc;{R$hhhn~q`J?bL-jv;<`2icqWHO2DY&ThI`!f5@7s!{3XV=-wZ*0~UCbj$rqtDdgekgxE`q?JN2Ou_L)l9Te z5+e(!bt59|Is%=soSM1nao~XAX|hX$usMlEzj#UdW~%Q)4EV5CSSLilKN#{TqaLOD z*MmN-6FVUL2klNW>IKVw-7dkjBl&lj{r6U985p#!XVYyKZ1Nmu|9GMo84&B`E72EZ zmMQ5*WbvMUN1iL8h3OUIq(mH%KXU$ED`d9QhtjP~BKR#B-Jg%QkWtgcbJ4OzAV$J_t{mZwOG=SPU`B%*kn;G%zGe5wBcz`rns9N10U$iGxr0#Y2VZ>7Rs zk!(1>wwT||BTPn@@77sG43$7)N3VzuHBIVQ_y{;h>ZR~bmV~r!$*m(#%SF2_g6U<+ z5Ne7IAi6qE-bLDuRaQzALYnW-N35WH%wV1AmCr26zLZ6^`;8ri0M>P!pUb9Q~Hc~ZqMB_(>CM79!OK|dek+q ziH@G(@2;_&(_ySqi%i63XzuI>=0Lhp7fjKe$@0&uOvl~QJ$tpNLq0HQtBNEyIoha0 zK8S;IH36aAlq9&#F#3xH-Wu9J;cu^6r(NEf6HVMYl{#MqhPanSnPo;v^s|(H%m}Pw z3KC*Mr_KeA7qAjV`^W%+SGvVEKLNJNR8~KMr&MsUS1iX>5Ir zua>zdLoqg$>1xkGER;tg`{Myy{T-s;*nn9LC1Z=kaJ2@AROoIwJ(S6crGV)?C}6r_ z6ov_x7o5E(5JX!W6kY2a&y3M{Ih@(&I4A8X<8DlG$$HeYpuI`f31@}Rh&Reg`rfqY zcAk;*whL{^TbmUO1#e;FLo;?Q80Haoq9L5PkP!iAU!2>KTP?AJ=DmWgl*9BtpYc{e zzCu$pBmA^3cOC!ff&af6!?Lu1`2BnaT!e?(5ff93a9uz$W*a=@_JMzf97~og6o}Ekz3%SiMN?gi-_OOStLVJs0Gr=~(_RN{H#NNTz#zC1wgX1FyfC1QVUGo$YjterzV4Ti%f=~W?^k<{>A)s3F-*8+i@CB9Wt7tD$L3*qpcFE%)_X=(72 zbOvcL+FWhUdk9V_UA6gJiHx+6gF)3?BeXAh$kZ{>`;b_ zS>{hb0O)F-mFCWxTa{8>t@$h5!H*VG<4S@Y+~7Oq4@=M+3qWpYD7JWubM2e6c3gUyf)>) zNb`#wTKQ)M>}GGko+C)QV?RA^%-~??X+3KeP@Q&;;HGBjF68$7`t3Y2`_h_xG97ue zGF#3^W_G+pYdJ}GOV*?o?sxz{<|zEzM}`}-mq+*bTsLd*Z1E9(-^b|5DL8FR|C04}$N$1Mfb4=lFNuK}^CtHB$lYlVyXyy!>za zGV3Q95@j*Q&n7~ezWUG$(mn?S)CCOM{l#hBx$Z}jm@@2?pw1Gwy^O{`Pz?&9G6JBFIUTlmI)88MK(#*tT z7GOfvD9x@1D_*)cV%V**K?jNw9$rBb1$NRQu&1+y2GcLiSYazSxJ4fyVyQMfjuyr| z1!D?Ixw*~Shh3kTQqO6Rg)1Nz5Gey6jvp#u1Vbi^fWiDsG$>CBvhHzeR9Ut)5|SkO z+`BXAYr`GuknJtWL5AIVL9ok;t|Rm9kKMdzj?CU33pM8BGbUb+_;4iF6y|JL1ww6{ ztb0Glye&eB0e|@7<8H`MC=vu(j$ILUT;f^%z*L5sNwLL4%#cx~;hYvX30m;C?wKz& zyb}s%yz$5TBjDjcDH!LL_b zHb#AVEKrtlab?hi|If^XYu8AVX%>Rl%oXbmQU4n{!@1vH+Tkt?xfVC}8CmLk_=mZb z{O={-fbNGhR7>oc-U{p79dHJ%a0u{l!i(RJW}@g$afJ3AHA(RFc7TR>Um;`WLG-I3 zyxbGFQlMsop;s2)%V5Nt`BTbnvh_Qh)uYSNa{cTuh#n)d8II!Lykqn|u~i4v##kQN z4CE1bHAe1nXz>B3Cnw;FMeJ7H(@!B$J>c0hNI_F~D>vaXCE_x_&N%8PBdJ;&p1ki< z`S?uw%UsZ%%hkmwfDti#^!HLP;uIrE)x0l-*RDnZjun1?twS2YcoSZ2|K7^Q9llSd z``~pi7Y~>pvTTOp(^0OTMuDD+%n8qOJs183JdUoP-Mm~cq@FLz^%BNG)8PLq%f$+Y zJYm+cb=8SLu7^-bJiAqSuBJ;T$;P^rZ0yDHt8QJpIpCIv6ST&zo^zRz$^>h9akYWZ zg>!!S(?(W_V;oJsKXr#=kpstaY;ZvISgumqxDNBALZoTJtwt%;(06jp$zrfHwU&5qAG~93| zA|~6ru}7S%9C`aHS&>St(=l!+SR)E`g>CapL?27=97e1=Q;vH{T-Z)<3CQE^%#e&e z{=T7mCz7>E0NQi%TJqjAoKxiU{158c${pTf&c@h1M_JSGcAGgHy|Z+4Y-sI{U`IN* zMWi5Z&5%m``7E#D0dMW0=1^yCAN`@SVnPWA^RO6eINutjPP?^YGjXKXU^PXQZM9Kd zi4_7nWWi^VVV$nk9&!-PU6V63bu);$KZOl`vfSc}nDWG~?Pe7rH|@>N*L}SEv2;}g zAQRkCI+Z0rmzT$~@88jbkFbp${=eAxYGfc$imaeZX?;>{V0W5G$|}GL(yb;R>CU+* zM5uSxa2Uc|(I)FXpRqff2JNZ{z*VU(Sr@jb?d?zOGwJK|gPpHCFcgd3sL>9^=`)e* zlQa(Heos0AQk+^&@F4X8&lQrH{r4|a*0~c*p$b`eVj~yUFc?e>i3I`*oO@7F~#`nk> zS3_?<#+WlHL;-kKXJtg(4d3fJNOVx)D0R-jGq~^M*qQ!OXRca^Y;;sT+K~Ary!td? zGfcQUbU6mxKeKJlw^EjgeFX!ila;H~0kCTy|Imz{Hq@Y36~O(**LeAPqvq0}O={2q z8I-UGOml!}jnBGZ>ZWXTn}RssqmGdXh^=8!n;fddo_yy6&tn%@cu z(pKXYKHLeFfN?6Td-=WSmobK-#~NR|49N2Nof{ zHKw4w0-3)&B*qQAc!~AAf*E0n>oI-B6vHVB4P?YX$B3P6ej|P$*=nKGu{(Q-3%AHl|#9tG-RXWi*{65{%i|(_zt`KMH|0(I2B5vLJGQ@r#KRJhPhEmu&Q}}G78KDP z=3HyYAFTYpwvHB0cy{`a8_~AHi;s}Bp13}zc@+8T*}=FFQQyw&I5fw+W`)qtJJze$ z5nH;(qNBbRMZ=^Cf6p)x(#J!M?pIUfyd^~ac7+#5-<14F7^LAs#lCZHB<5(h!v?}6 z@dhw!xXgFvi`JtkDE6JtsohG$8M=vvCs|p&XEy70$kzfd+IW(rE3Qlj>hztxNwh-F zk{8XslI6@{p*BL+uL~6gc-@ou!fgFy46E7D%zq|6ygjnzfUy)_-Br~{ZxeoxMv%HJ zZ*}Qx>4oAqNj6Q%=!3eHLA98CWnFN?w)^EY23)5@N#y9X&1+NV4@1wsqr_Kd*j0SD>XfJO{6H-k<|FKXtD@EIe;9 zLK^5s`nhZd63qzEq3)Qo*@RjRT!8R4!N4#HK#R|zT=q-+*vuY5=6+%A;_RgcgChSz zxc)|tkOE3hE4LrGwrJfJg?HIlCibZ_6IH*+kO9Opd$-z_oKnyB@zf#VG^Gz<&79VH zi@!&9IL)Fipilm>Swd9x5+qZkLHu`sSz3nXTUZ;-iOfB{z^ZtkaZ5Hzp#892eSWb}owRCsW0H)H+!~ zj!7*k6f{(C`WN+TxVq9R=p|%j%Ve{W^0nP2JX?n%Q~76}$KfqaEKlV`KEN#!#s6f8 z1Lnoj8_2_C97s@aH>q=)eY7X&1!AQ33q4D4g0yI=W?f8*T_JCMeNGS9cY1j@HJgKI zB5A5vRM6j0fP2d?gf{F9Q}qTCN`jnJy3GA@y7;Hf}LzuT(sdNJ2{-6jkb(YzVfzf7o{%Y-N- zqPp+|SU?>s!f@U#;BTukA*`txyDBi{u%k%3L?QFmaxP&YFS0)S28XP)3(=!RnTgWQ zXPc)f?-Dac`@_FKryK0bak@1N=}wJ;8&}7l7iPH zd53TB#D!Imq{wBPF3jFl+ZFGp_lP{$yrlFY7asSh^kFZN_iG@0vyfsb<#KW_hEnqD zNb)o7ITN&Lh{Y(q=R{lVU3?D`n;{vMw*vqZ+T81xtjL=K;t}y9W;Y4m_`Xc86vFSO z?%L`@j~#W!nF+TqLCETf1T4aU$LLOHC7Z*sx73QZp;vTMD&NaICotq$@&F(0c}GpO z#6;`z3=64b+gLDi?6&(Nc(mqHhtea6+L}}FJl>1V+&KLo@#Yv6p>JkE z3G+WYmFS2QDp;|}B;*|HU2Hpg3u%6xJO|hi`YQzlsg-bCW)CnbWSA=#Ev`JM$r)fj zLH1i0ysDIU@w=|HeUpryZ` z1Adm_#-uPh{ofNK6fN9S_)mW6I;(n8F&}xcV*V4xqeVC7DoaYzV15A`wt-r?jWU)2 zy&VbKDV^QCBZjhDTARBtYHvYB_>9TRM%Y^isW9z-&6r=3%i?QouUsuVzaigkJU2&bpj~p_R z6Fk0suZ^aK)(s=wyuDjp#?G?DyWvGvee)Z6Al$D%67ql=Z&fIO1r$c#F2=M^upsB- zLS8&_@;iw$h(lm(1nPF9XaV~#WC9tD<} zIC{IRsk%Yn*+=fpH;zbfVr{TnY>}ojD8}+Z9QpVTfscri4j`}coNX? z8s!bzV>*t^k3sG#w*U^mOZ3$Gn0$&oZ`0(f zof&6BF1vWQOHQWbYwa=u3tHlIU%UFiOq^o>utt~H9SC@fY_XXf_V~=WA=t7|X6>`{ zv0@98z5S4P&cxjek(FS2kns2e;A=ODtD8fEjg*pdp?jcn(l6U#8G!Bg8U17O?tCkq z4Ck|Xm~(S)LxA0XQkf^h4jCYDVc(_GKIH2S`62Sg$gS&FLh=88y^WZQ_oD<((^{UP zu(H>)cJ?8>JSFcDnPeD4VCwGA%l8JH_aS`m_43{*CvCo8wwcp5^Psq3@C!F-%}1=n zh0`%!U*0^O+2)XUraEx8T{Exl_fUc+Q{+w|a|N(E6wd(I~W)k^qsy`U}n*OiDKkp^Z>t zpTsh+iRhTPP-Ru7DKq(E{|>2;sdJrvYT=G0o4SOAvqm~@WIn+=6KC86deWNfia-gc zCCE3!RYUFu9a`R9VAA55A)3o!)&$-G&s_M_#vLkvmL>$XK7K7VjwbBT4}PJH=)MC4 zj8;)D`XUVLx5`V{D zfb0u7m@IzC9O#q9>zktP>>AhLNUm7X*lY3Ocn?`T9_%<>ltiiS+<(V_ zsFO?(QpbX&rTe|bH2;OW-K84fVkP(Etwjgy@p6LG0WJ+1t$8P{m%zOHh9iZMf(`0S zGutUKPnwTh3ArO_2+4?uZ`4uG+t#A!b&(wIEzJ+S9%0#*Vw z)fSBy4l`pR1_^mP_T5kpIl3uXi;=p&^kT%6*m|KH%x2fG2vJAt@vPJBHN@O@X-aa^ zeXBgB@w}mAM{6|=F#Cphd~B`mo=U zsB*~hqOH*ceI3Ig=~tvWYhswR!1+dH3f+}-5)^i*^6=R)CVtHlcE<4OE9TB=5ZFIP z&;LAgy-{Xz<2v`_23*?O{+r_b%sJ9tP4PxNlSU-lmq|Yr}7It?R9k}9L%$nm>n*GX$7LX~s1-pFTMwi)S*D#E zWis+YxYd#(>#1bqG5s?MP>;{Na0|ZFY3`4SG44u6w8SHup}h6CV>}#y%9h$WGssZV zSFwd%lDE7xbH^*!N?Y0H!c+ac)yoNDNK0;&lZQC>6^4Iy_U_;Gd*xnqJf{HDXTfbd z!TE6QB)cFKykBjF8GXH7w!>FUl)`?iirVx*W~ z5)Kl+HE&Dy|EExbV_a_M4CGLoC_CiL2nl6Jp@eFf2MW~?{7Lw=G!HusC6MJgJfW!j z_fB@3FeaQ|(%2-1ow6XWEF*by>qc`&%Hw4Ny6x)`&xuS&p^)+_TsV4TVWQD&U28b~ zi_vU~mK}Y2))H{E__aM|w^|}Ajd}RO{PT|LjP$WXD5^y#DPnZ??&A(QY&ys1NJOT5 z2Hx*~2(({+jYKa6?JM$D-DVMp-$*RK6CgD2FL3&NzQViG-shVU7}H~87pd~Yg-P6{ zF~2iX<}^(XK(ku)i7OJeJ5~fKIxsbi-d9ltHf}g@{Gv(2x9P5gb)Fijn*$f%@P0f* z(uw?QV{DO`J>%*sna8R)pQy?c`+ou__&C?e9%X_lpI^?a;z9Y>3EIgoUCTWuiw@7* zqtU1IT<;NBi)#=1Vylac4i%q+_(U2)N~+GF$N_%ca}L_|34#3G{gACyynR_oyX}*H z`oJkOTR&n#tHfqyk=RZ!hrX>PW~{`^v^TjyVj*{Xwg|kP@p!OK?yNlr@3-pgi)+_l zP34DM&P%qzJAa+9p(m`eYgheI@H@aGHFtL$jzH<7F4iMgmGuZOGNY1hYc@C?ey%(Q z0352xP5i_YO2KTO5^outNx`_u8H%{4Kr?fQKI?H6Q<`G3OYdQ8pO`f)RYh7!ujzk> zFOGxa$KD@@j4N+yei;;h@trs{J^$yS>4zvNJ`Fx5Tw*&4iywYF#0diC!cQ0f?$e)1 zG^%lq`3tP{g7>a@wK*xdZtv4QF2RF=!_#BF95gFy$Vj6ba7hMcuif+Hzh^E#1*xfF z{u#3nYAl%qHJ&Rs@lkR>hK~N8oTs5wNYwatg#G*x_|9fr_LDLPc_>fbIw7R5Kb9L+%nP5|WS#y5c7eU;_1q1`JX{J}Dua zdmFWjz)rR$J`mF+4ltG)WWX_Ttq1cu!BOaM+2sywSpmas9p^UjnqSC>>!T7P3wDpN zt^32KRNBPPEb9IBGB5=AQzQ{tn(ZLzqJ#;N?tg^4!3qOyF&h+&_BfRYp`dZHR;Z`- z_`V_GqMh-ztSVE@sv_%!O%(38CLn+gFF9!wa##?DF{gQ;DHF}_TP@&bei_ZqWgd~D zkN*2A%3eF7Y~F-fIhH0N%nklJFU1v9r8#R zHLt#qCxrE&ov~%hPyY50xe)k6UFvdiei=Q|DmRuh$TsVWfxU(QX*;*$WCP$t_2h0m zx{I^OEJ#|@86v|qKj29uUO;e|k;cNx3tL1XPy5OCSav7@Tmlw60n$lPJhbEodaTO; znEMyrXL#Rh)`Xv(rzYNMttY*_C^n-^D~yS0tAF>v+r_|X6ikt@zOxGdg6<7~n9=iW zyPm`4A?fX-kJ2J=IN$o_BIgGoZ|DdidHvMLx}Qj+Tm82H8IS9KHXMn4(ET%TTX9OD zx+`%inr2D(*Q#mnL^~wKW4|n!V;9l`?a9BVAIWR_5uQFcTMMo*8$PUuZlXyF!jDY6 z!<%buZlTx1TMHYX%g zjVLv$Vo^z)8kM)$!a3R^0K8F@wJu=o*;&w}yf^imU`iIZpGf;ULrL2#+?Im#t4utb zSH6PBl|HfW=!yjE+COLPVIgA-1 zMNT-+P|npvL%YCAG<3F7FnuChfKkjQORlZ4yZ?VEVNiz?2GxR~#?Fd*;2_~$GGmYT zMaCX4nX$*yj6Gf=W6uuJ*jJ=$|C)5oUl!w_Wl0|Lx>Hs}m>p zX;mB9#bt6I@86R9_;GTd!7@q$y`p_(OL*y_Uv?x7vwKEh|Ab9g(=SdphwMw0Gz7k=Zhc54hGgT#i3Vfzygp;KX@~ ze9cp|SVqZ%{NGC*`7+Q4+rQS!i;P08D5KD38K~{RBd6+CA6^D=jBGwfBFLsIM(~`J zxuVJuB4GNOgfU2@Oo1?HelNrdXJJ5z=PwH)gm8AS_6FD}lG{jYA(kmxBXuv53rmPD z<3Q?HxVXjK7c$tq4;5BGyZM9%D(_q0fetxzx996%%@eOjzy<4-a>NGyi)dAg0nk+nf84m-I=D?AC^%}*S1P@5-z)c`?6+*%GGt3+Qs zKGNR$xjb@?{QKN=0NC&(zflcec`l(mLKWp!`!c{B$0mdWK5#_An^cBxlWNzcJlMMa zc`X~cl`B+doDP(+2b{xjX!m+5Wz0=_Ju-DD#p7XO93yT9@miRlvvf zhOP%icf1l_wP4;yR2eGybK%dEmCa|T@@#1tWhL{MZh85CJ8{@-6-W}|e>nT!T)w+l z1nRkjzR0pDPlKt`WUfS!uZeMS$;q1qXvDxPnm2f8e%B5_y#Y$xXWm&{!~7SGYi zv7`2j0e22w`FDMO3JT+VEzv1YxkVoRSPJS-TfT)%R%O<9$an+ z%T=~sW=DG{EGt|`j|owLhpxPE{ZO%@4$Pw-bm@@gU0%F#I4O~~sZU3U_$t>JOJ_5b zBNmfTwce))3E>KzS_bCSl&Y^uICgS`wf5;w5~Pc!QY=QNn}6d^e2~=mKfQZQKPnvN zZB_|unH{{Ch*4RcScj^+YsH$Je3hjr8)H2gP1fU(UE};3xr?G?sY-lpDRCFJZblB! zL)cL2@bM(P_f3MU^Zq5H*Q_IaKtw{35q+w>#tD~4X>~p`NLP|fSlL0mazsu=l)UW4 zdZ9qAytAmRILmiE3?Zc26=$LbVhhIbBS4U~UvR~ZBu`+zAV3Bvmf@X^m6@|bNp@7Z-NeLQXQ&ePuJ%qNsn8CLpy1u=#j{L@6^Ome>t^{ zcl7U@R8hB!>{ULwY~WL=b(Tq?0f)+Nt2tMaWDaK@!iP9S(;!h|e$DY~16OxXa-pWk z9yl(<;uwUL<%W6hF?!G1nkbiJoQ0h7ok%8RHwZIENtOV%Taaj&aXumO=NPb$QBK00z1lR~+`{_S9L!T9 zHK%;`&ieeMV5fSR%ZZ^(^DQK;P2ocL2LJORUkVc}dX5EeI755*~w~#N}<$BV#30hbJFa=VNY>Aha6|fK@M-*iN! z(F%K(q#zB(*4^)j7kEqT+iO&(IFcd({j*U7-f+8y6J2Mg?ygX}Rs2sH)0d_-QAUX7bPQy2ax)fiDe#Hjb zDb0AHMyO|4G)1ZNx}Uff0;a_Fb8~K@D=9QIyF`ljXLm(6d_diSnYn;=MnThkj z`k^pEbMzi$ZrP}@1@Ko}nXuc&l$r4iJMh2!ZSvFFkC$Zb(;rNq?_1>9dQ|D6j6&*n zl7ugmf*vL6p|i%{XCTU%6@Vz7?bLt7xx#aSO?c%3pZzni%vPbsZlSDOSDwkI={l5% z*w~HSHgmAS?t*a~Rj|k{B4qgg8Ax95*^BJ7Y>P~p#w^R3CrS-7hLbNG)b*g#wA zp}(CnB&ZcB{wbC$mZOArq^UsjIhLR$1erh3Cgytw$!8#GbdgS1I$wjsY$OSB>sRvO z66nlaB>MHPCHm!Zha1LC78^t4@4c3`_g^L^AhzZqG1*70vBBIt&(|>kIX&(+F)zz> zN$2jCBkV^FP$;?BX+77;$t#I;fxH}-x;b<2lQ{j6RzqR5YxhBXf+V|ai+-Y4l0UNS zDm7v*osDF(7-}dI3fRsLXryomPTM0 zqkPNf7b}hTTVVE>)0ijXMe)69jdy8(&z@NGwBNdlu<>q-Y>;UR>p_)I(Ou+&-qgL+ zJ0i(no*5c_hBTfHYNeqdTDS+i)>kTRXO8vy!V2X{k(X^I64RzlhNTc!TBdg1H=8D) zB9~DsBr}ap$wT!pOB|}}WR;=Gtt6mkn89u0&C@JM$5|YU$v6u=Ip>?00D45*`NZ#r z{uY9Hu?gmnEcDLE#lFujO*4Hi^DgKT&@|(Wy_K6OB1c0$#dk4;wVAUJ@!z`7 zKAmKZx|NqKQg`vC|4QognWj!p?`w|g`oq-eT2SukvXRTw>8F&YXQfW}tkmhV=fqQ1 z>U7Uaoj&yvPyJQu^qDdBxf|3DH^f?S-W_vV-TjO_)2$WijOID~ro?5T=Xa<#S2p71 z2ZX-NCyF@!GGs6%3j_Neb2scK*&-=NXIDhYaB=>y^ts11a=i z-LZX!LF5Dhj+!`nv;KiCRgi;s~KGV%qH3$KvfvI!-ZTXA?E0gaJ@g)%YC*AuyJ9b)sv_6oRYTFj33WUF&J}j2vn5*WG>?HSrcyhO6#xF zirSB2yl_>@aA&ahTbnbyY9t_aoPhb~V;12#`pg2)4A`@ zW%QwYs;IcRodz%l1ze;=5E?RAg0z!q;LMHqQ+HN#?Ne$OD%+o&KZd_%xPcc(0$sQR zCwISzs@^c7S(E96YVb^I5SpVrQ}F1SStDy!C&tas8=1x-#{-8(a^y`Jlt(_S{hXw7 z0TbG5!4zQ zb45c>Vh*H<8Jf6<=2L;A8}$Wf+BZDyc}zPOfZ*yuAuagPAczF2cNASQbYs9p8L`{l z7*OAXwa+ZZk?_zLP3C8*4M7Jn#1FFaof?uX^K~jdv9u^6)inj789G)wEQ1Gtr#Bo_ zVW@5dslt8s_Lv72ewrwBiRcoZglR)-hE?I0;V0gz*eXL4#ijOTH(_)~w}vjhtPi|f zTRgnu7|Eh%c>R9;^*Dm?U^Funj%clPo9yvIk7Y|K{O#cMlud9jB{x%H{-=H21QMGQ zvO`p?A4#mzO=9t|e+{Pt3W;5IaYRKW7`ZH}xZI4xMga$%J%=ILN~z`*sH{qx!b5TR zbz(KbAwnjU^o8NW2eTL6D6y%ZT*4kYIvr6g{juM+s8K7j`F1ea^ZG3~Mjl2iz_5G6 zEqyw8kBPN{nz&bpm6o5T?1^WpIKoum*kwt02M;I9G^RO0X}l?80v|^|zou3~<1n=f z$vTXO*yn$gS$AD3DFJd~auz5I)bsEs|T{sU)kA(X*1GSpuyD_VhJ3i{gPc(y)+?(0m>$75Z&zT#4Qcp<+kthBuvnOH@ zZRj5PT{uBdZ-5s2YsT|=Yd1CxW6Sqt?(hwquCLmy#ecn9^RLg379}l_AcP(P{{r#D zvS&M7xG_eg`6x)sm{j=hbFqMffklx8|0R$ z=j})rTu|jF*kf>|< z1fE>spt6rTSNp>mC>g;xy^x(=VgNlYt9i}?Re^8@ynz9e&$RvoBNw;XlK13S#ImJT z{-=ggTHX0kDhF|XPR#n;I^fXD&SId0uI7?E zE@F))MJ)j~mf)`OkHn)nw_fJ4JrDZVdUvH`@-ZljgCBO+oT; zBYi=1lL`*t4RT>o3x0h0xp-h3!du}G{}v2Sr~}Ex`odM%xi~><3uXu}Fob3oV&kKe z=lFQJz=sSbTQZ417g6u4U6@AFfkPY5D?_fE?EU}W*z><=?D04=iSf>)Kv~g%HzeMB zQ@6ybR}?l#UO%o>JE?k*1FEPq2QE%myP%vP9}51>Nbq$~s!%dr=Y|Av`SlYv!iCxh zaUd8yA!&EL(F7PdN~4LZ>&z_-XTLVi=km71k;#-*n6+%DO)0s#kcgI~-{czqL;!K)dt=J}pkg=i?kbfeZ|IBeq4l&Gv7V8;n)2A`*2K*}wE4$iA^9cv zlrik1T#4m5T*^CPaNtQ8ccozdiHo-E8j*zkbS}U)HDO$p`LVBB9$^VSjzj4C0L~QvwEB{mrAmHeL`lwGFFmj}5OQ3hXPp?= zI!Fvl&O2ht=t%f%zyQ=68e_Tfae@FOkeNF5tJK)LI~efxKuItgdYK@TFihHq{q@PI zODbjBVvQ9$inEPQc|=bSyhdqcPuI{3W7VtO{FzG{yxP zi(g2q{uxO5lXc=evTK5NNe}&QOH+_DmX1D^V_L4e*Bgv1gx6c(+9m$hFo`yMN47w< zzwR4n4bTwjJeMoItHEvkHr7TS-$Me8;9l>#GPghg?q3s98$wJy`$eVm3$_-wbjkUbap>+l(LSF4|DRm`Zvj z`&W?jQuO1EY1oY?6tv619?8Ui@1)ueN&jbs=f&G0R!R0u;@l+C+o8sT-tMPvUvT!2 zxXO+6af3!E-HEkzJAj1gI2Khdm(GQyV2Ab21*Wds*i5}`DIX;96eD=pHNM#3Y3j*r zZ0e1ur+Jkp@&kWBS^fhbEjo?Lmyk%MRbq_e>k)PWX)eXQ?*5h1vWRXOoWG|u;n7Pr z%F{V%{j!P8kp~x1AE^~5CVnlIg?~Uv}tGU{dnN)Xm9_GRF8T z_Uo38UUY{NJ3tveOgzcTaYTwEzCwM>aiPMpna**&5Fa6+by_=#yJ<%_3PM zX+%<)vf^Ls^x3Teziq!5s-+D3VWaSiGklLVSvJG|&Me7#dTusl^+*7y!{nw28S%I0 zHpv{yhpp=M+eFH)E7?kUX|fI2Ru=Ag8^eLFqX)TQ$(*eSL8c88iHN(~AwcsnYKH=^ z81{BseY0BeymYIlTS7t9qcjB8bxm3^H|JaeOtut6?Xjtn z1G9bSMALCKH>y#COHg;uR;T&l%ej$l?v zs_D7B{-huBLL(IUH~?$A)-9GJ^Pp8GkB~>)q`qK3ugPdlM+loRdaVZVxjx!_>{pt#wlqe?-lCQP5*H%9C`t@jT9NHgUZy*q<>z-x_0W4 z8w16P5;2jVq(C2F(6dX)^7Yb{SV@?cm8Qkfw=G=ZZpkqHyLb$UbjeAl90 zSCHa~9k$LWJTwZf^CEb}YPIo?1V1diu{%6@5j!4wNS%=3a1$pePvBF_OOXZm=g+DY z6V~@}y+x{Di8|T%i8q-K<&nLx!F`izIsZtywUC*vxP_^U`OenFXjS9e2tz++<814K zQFtbxN1y^5il$pBz+>xwR-*iiueO)z@QH44OcaEZ1KWr?*zLS?9hn&#Ja5meC-^Y7 zggMDIv<|-rQB8hFb>au|Zs?u{A zF-EOYhEw#^`0muTFZannt(A^Rr0EeRWQ+L8=NyLL%5Pn}0sAsHKuRbzK(;Y%V1!Df zBMnWUjlK`%1wVR>V<9;f(SV}|6^Yrb%To)1p-kLm(cTKYC3|!n^D;ckC!V=dHKH4N zxBi@<_%D*1{w#B`&%V^<=w+wKz`Niy^acQ(ATyB+IN3?OE76IwbRr38$Tq}f7D*o= zQ8wZ}pv0(jVU7;OhR&3}!d{aqJ<>il(l@D_g{^dRo*IKr zZ9u8b!?u4H(bd)-^~Fc-2(=~>-7BDbRWtv(@2||xbpZ8e#kM&w2%`WUHxShpBz1HU<6KQ8$H6)TrI#jFf0-$^*GOdVEJqvv8)&;BO2wj$1fDv z2>wb(xs7D5?O}c$B6W2;GZiHn=4BvRS_6?M#|%+H7Q~9{Y*Fr!r)2L!#yRa63VI(4 z3R7fdO$iE>jRoQ?B5A>&hzir@1nqUF07)l>1wQ6m!IqrIcTQEG>(`_wqJdxt7Ei1w0SD_#?#>L#D1#Gh=sF10s@|BWJ&P zp%9F)frlC+eOBDzqL z8dd}<=bLyEhCB{~6lcJmpe!vE!MJWwpHemZQo<{!Z~&Ka#~sc&<9oc|C-*sn zuOp#V9kM-npo$R1Iht58N2%Srpn?XjDg zLK`iQJY7{?r2oU-n{7AF>)OH(pM6s)i#-W~AP7ttQ*vsnyaP;2ZhD2MVLBZqa-rO^-gF<|C)aMYqpMzhn>uSq zmq*b0(fJVHo?!`h*a+SL>twrQsJr`BX7)1yPo?f(g9j=x<5-jgLR!S(3KuA|4q?E` z*poXc2{Pk?ZOQg-d6D`saAEq{UkR@BxP)+4GzTH8b|2Y(@w4XO%E@mSKY8^La+Yti zWR%2iMF?5nS%`L~bd7@oVD^CQ?8N(1@4SRVGD#>rDD^8Xh`NMS6!3%60Wa7WD%Ro~ z>SH0Rl?0um4_yrcQG|rT5*?M!Y?N9qO}pjC*i%~UL!m(9=do@a8KJ1U#w)<5Yqbt? zyy^jXEg`>c*=lvN7xXx6P2W&)u-xmN3J(Ru+3-w4nP&+_9C*r|dubQ0JRUO=YjXnNSVxbbTaBjYYZe`ucjw^axg(3(B{ zRjWGXqL8zKExOk42w;JSBVL?r;8Zo#CFFWLjZjw(uARY}dzT%6v;3#oUQx|XOY{+n-yOS@EO zft1Xg?`g7SVR|SYqyrf}c~b;N`~Y)~DEJ6TY`@}HSP2od27Sk@qI6^^pSRZ!UrC&= zRs{@Pyx~mx{9>tRhTJttUXoHPfNwm;p*qlA5LgXknOpau#*f@XA?m7_z zT)9KBQA(9KemcOtyZV5%{rsK z-iRcyFIZ+I_&Rux3rckk?c!A7eoFFS`@Y_c3(ZBHus=xPKyjkTScZ|tfSsYt)Llv& z!w37)bpjxlKJtYQ_WkhdKp{I7Vb-ivadMZJ1Ka{y(BX)c6Gw+r;@(SE48(|bHP+AW zx!C=-#(5+%MQ4YfzjD_Yc87F+@pUkmup+sayODa?wgQ$OaIU2P`dcdE?@Tx&sz@?P z`E5L@3OD~-zFId5a9+t1XY%hDPhQZ-Ad7Ql%{w+1$x$W`S4Najej!M8BAT3N0&^|} zEZf{#3l2@tJ`fJ9S$X3})I|SYIX2ePu8MHFU_%TLxUOD_SRaw7Z(7vQNp+Y2B&=>* z#6m8}9yMTucigw1iM1a7*Ge))O)?0n$<#`hx0AY`C$%Ms`sd$CrhqfCRn638WdV(^ z4j`yUbL11~fVRGH)T(LqLnf8V>7Aqm)kIzj;{p? zoER7k>04{Dn4Q1#&*DH#eIoubQxzOXkMImuzo$(1?HP8#fIIvwNJw-g@*fyc_lb_C zs6+3AA`D&f8>mK0V}ZLHC^|CR#!)+=Vq}Ln~aiFgvi+o z%B&kn=DNg8JI%@(~>2)NA_UmjOOQfq&zgM_!^A$Vkw? z4_Mmv9=L<8Vx5u4p3_UkwC8MGVea6AKL7}3=0_X;Z(ovYN<<$JKTTysb=Tm*ly$fgBHAFQ9S)`>@DC7 zeq?H%c}v(kG&yX)+UmEjS}rfHdsmv<=uC1RZEeN8o_sB>%0}uPzpis09GA{aKT*)E?jfngjfWxd5WJ z>W6*%Pdp^^P8o|IqIM+(O+PRr3E2Bj`B#^>SBaT>pu#(H6tRiqGjB^IRahn2cR@`n7ZA$z6-qvV(V{ zQyxfK(*sli+T;$VlF0ERrR1TnIEjcZBjh^bMc`@@zEfTu`7k^CHGH- zH`4Z$9m-ot*@5?E(XFel7kGIY$k@$v=%Kr;iFZRF)iDyiE}ji$j$2u01qTN<3=d$A z;80FI@%B>*<{Jna)eYBFKC9_my!#PI#282C{7Y@NKWh`fZH``yy}w#6pTYamh*4$z z8y&;D-6uV-{;B8wXFdP^82_)$+5C3S*0g(zT6PVkdtm=00V2_6& zQRkz+&0nuCAJc7U_V%}F+nBA zqu`)-&wM1}zwAI`z6R#Mog~AJ39~>MddYvevbn2%!TK*8#1Zyz{11&1Pd-K0iJ_oo zuyH;_j~`kb5bghoD(sX01x`2Xg-5)Vj1AfG%Pe0Hk1k6+8yD(Th$R8t!M)CpL3EHH z^AawJ{tzG+{u(;{raJ!@kNs^{w{BRk5U^Gn`uGhSp2*8y88*i4Qj7E3o zWQA6n-wbX@>8?p9Pc=^XO5eDy0RgMa>VVxGwg^8;4JUxFN8T+|MMWal%KTo%m&0cK z+^~f`D%)+{EKU;9P@HdVo#Klz6CL3_50=57mFPwDB>D5#f6o3$lPLMi-^kx(J8tAZ zeItLLgkZ^E{6_vK65=I)^^5$hPC8za>eO$N7Kq2pM>4~K*-l~;kGPf$tvONiImC%& zO<%~;rGUw7;JJlHXAI2_akq9Dqbxg0I@l44Xp_@k-?`nn6#(FW+4Dc#h=S-o#|BM} z8CcV}mA?283?lP`Uf!$Ab1d@kgMrGxsi3nedP0HmTigBxpko6D3atRS1E_MVqBxRI zU3KuYK&e`_kwKUvS?yyBK=aY&Fgv~=;?`hr+Mi+4nhIRNTw0x=f;TXJI#sV=KNa2| z_~rx*#-Z6_xeJqLdR`(E_|?YZd}EhwDpg+D03^M$4D={RC*-|Eac#4QQ-|MF+w9TW zgs$FWDJJ#!si&<&>L zu?+Az!Cl>;IWlYY%W5gMx^;}QgDUhyst7kCRnbN6`r|x=p8dkgZ+-R)t30rd6u$sc z>%YI4FnSO!?Xe@On*el04NH_$?3@59uu2XZVqEmkMA z*#fv1l2_&36Ti~kK{+c}W6z8QqV5=6ELg($-AS6)?`J9WvIVO}^Nn&{uOtc-4Q(&L zArqcru^JmOt%j+=IA4z?nMOPkGgz&5Mk}d)8fygDyaZ4>f3<-TwpkhBJ(-M2F;k8Y7fq2#IT=vWPynz6`wF!b zZvJ6PWN2@C%{E^Jsnl&BsKuRT8Bf0^$99R?b}$^~-W-xN$^npuLeWj4xyk z)D#*!rWJ4@O!z>SXk76U#yQFP7R!h~gI30KIMN?riK_Plo$Q+lf`;mmz#Pqh#X4ZE zb6puGyNAzDoZZl;p;roH@kY?Eh##d#a+HLy-ecHG<$M@GLaQ-bhqaiVVf^eAa9^rg zi?qCtCn%sJ{a|rq9(B2nDn_z}R}*Vlk3g!|6I{0wB9e&HU(au;CKN0@vY1RB&BkmR zq=uwcq8k7- zk2bSnqgKFuNH6`=Bw@QPbn^0|w#`LBzYk_Ael}c5KTo+=G5fbNExfDGp=lA+pJYkoXU!}QdBtsq@x~}E>Pv- z2*QwfC59?z99lj)9G1xqh>y>WG@;_YfJr19kd!`!sr!*vPVi@bY@Ao2954SQT&+07 zg0R@sg^x(3c*SQB+k$qh#jE%$u^WT_TmSH#RxVq^&0y4s6CWK_;CHIi&kf5-Ugc-V zTL+s#JRs5gCD0=P?1%-Yf@BHX z_C7tZ;H!`KD9W*z@c;Zm_-s2aB1hQ}miNi1vqNc_1@0kW$MW)#r%?|^IMIiYb@fPo z<6c!q;7L8rHj;k4fEf;5=ta__DoZ^$!}<_AOplX)7=L<;&pQNf@V7AT(q?kW-=WF# zA5Z0oZ(u>P_LE!i@j{B9=KwdVv)4&qs&FJcrvT1S9QtNCRryu8)^y=Z$OLTW1wI#| zf(4fYZSq#1@y%igYc2XqV4ok=j+hmo;%QqH3(xv(q3E?Va2CgNzd+DP)j0kV^e z`YDqa=c~(M95a4y8@L0V!YRPX#^T=0;vYJ`k2ezzeEvVa3-}gI^GG_zTT>4#o+4aZ zWCElQt#od+*03f3p~i&cC+7ms3)J(aWL^4#I8%Qw3neY*G4V=b#N~vXDp4Lpd;t5L z1@_)ab>-_Bxb(lXNwB8s!W1;lW}tpP12TtaQ=o<|nS;#Cm%tc2lvTB1hQiF)OUTpQ z8&?Ho@BbQ0pII%pv#LD_+{Y&w2c-)@rR=)}A5tP-FW|$Y&s9G1+duo=Em}Gsi=OV2 zt@R`E8Auw%R9#Hzi=**ZWvq3HK28}Y|J3RwN13_CPD_Frv=%ly$4Zim6>XW7$bnP2 zEzjgmOmAS(tnR$JWDwO8c<5YH*lKxLaC~!-ER(xJe&pMXD8D&0^~(i!{z9 zcMQHg6tUjsJIQG@AqPmoUx@OZ#5MD3fV%b<(C+in1wBM)&l58UZf#$2j@r{4x<@DynyV1PrI=6@$P44?;LgEZ zlUiS#-*?k8e0{N`aT+}b<7!D%d}1nT8r25XNP9d}_NkScv)h!Qp<`!Ye-<&_tzI|W4Sga%?AmK%FVnYXj)wh?R9#981w5r|D!?-@lsFIV71TEX!9Pr&N2(F(Y66`XSKg@-l%)PI8%S z5v*%?U4+arWnJwXHbk4ab)LW2W(v8S0o>A}l;+JDx(Qkt<<#$|j5tM_vMYBDH1BR5 zf1hZu&AeN@x2c-pZu)Yn@*`JJ<=_)p!4=^J`&pqRb)Vb}dzjT6-gx~utk%Phflszz zeQ=+V|I#aUWdc)$st8vgaLe_3D;3w2*%4%7rz>4nV|F@%MM-q@ zDmhqy<4IHo`wLuYThpxISSk?_oL~WD-1Z!Qn=^y!)Z_5y*P^$hq|*%nNQG`~VA^C9 zxE14WnN0Z`V0{hX@Wg%5Rj~<)2r%$K&V0&M++Cibn#vy9S66wgy_hSo98gFOU$!^P z6Uf`gJduR3^D1|s$EnNUXnfxj=lzHf{AWDD36nn-uu~<-b2SG?u38SL5C?JpmB13P zd@H(T$(G5%FpzB?CUNOO9-puA+2o!gk^{$if935mkT_6_GC1Sr~ zhR|hQU9eF=sp}PTbOrV92So^Sz=8CG0(82huv7VDee*DoEOHY%j8UyT$ISB-H<(WT zop~+C4H3JRX~s*@!hCj>(84e;$eVZ=2hVFQ@@c}FNvII4TeL-n`4l;~5%q;6t(m(x zODoTV__pqk7qJ~^#O6R{rT`KBQ?&fqvtiGy3OOQRJ@-iq0h{UZQLr$#is;|ptJHXW z=!T=)a~w)h-LKAiogG05KnPFNVUupQAepyS#mt%-YzcFZ(th%M1Fv|ZSl93fCM`&5 zeY#3+K51}|279~n2FZZeJD+${YKv0c&3P%hw0O)DOwmuLmB(?&p{pA>3pMwgTMItn zN(f{M-h9qA3$ty{p32zCuVwKl4-R*-IbJaFI+#E!4lT+LaDmt|MwR+o#fY+`X zHYC){4zBbFyKW!5l{{Zrnu3lAUs)h>lKtFEY-*N)HQi%24@OhV2Vm1uT*qoA)-p&3 zD+htz$tVUnibWD0^fPzd)Ho=>%QBW8Htw*1q)|a^_7X8Al%#PX#tcHz$(=~j^kdRY zlI989^$8N@=OvECwp!K3`cUf=#k z&D+R94OBN*W(Mho$TnC&sj_a##@&|Ai8X|GdBHy+3{R()R&4aiH6ayna z!ozz*e9%N(kxA$*nEfiYrR>Nl=ChtN5INSUHu$L=%sQwZ5J$+E)5Ao>htf{uXU4d_ zJ^h0CC^-YDUlG2J?8aHE1+1A%d1>=zn#Y}SQt2|RbpFa`pjIkHup2duS4xj^vjOg+K^othh{iVq0b#M3kjlhH)t}Ob{ zch!a97e)WvZ(7!n)LngNr5${0Wa>_AbERC<8lbw{LA8Oju%N7gsyp)UixbN?)_C>x zB=B2`n11a$; zmHaQpV+r?jyl%A@RoB#`9@f}Lb8>huyJeN!^$#eC3VE< zh*#wCNNYAuYY2h}Qp5*bkGy-fp;}pxWRRjpllg3;wI*w+xtaQm%x4?0bpX)@X?iue z&vs_3E}c#hFz#z*oVveK+w`~>6YqW;Un&dfKA7S4SR&EM9e_B@x+L~0OSY{89LIgW zYfls3I?8TUY;-PW-KMhEzskB#WzBw-^=PsNlyzACB5N+ms#k7Ub`v}CGK|bb@Ss60 zU9~X6$?E^W!8$ncCF^JLKXI^@3QPv=G7i>P`(V|~7y@|7K|3!8>-_lt!f{+qj^kPl z+O0#0`Oy2mgj;6$!g0L#KX)9@U8f*f%3mDEVSF6VTse=Y?*AUhAM2oF?ibs=l-#K+ z6ZEeg&8_Ij1cX!zIE2LIDsI(sokHOIe|B6q$2EE2S)zBD#lLta1Je8OzX$W*KbTc& z!`cV)>VFUBPY&ixf$RoU-W<&Jj|cMrrVRG;K)&?#VJ%ThK0S)3{Cuu{)>B8Z{%1$A zb}G_|Q60wg9FBzEELaEh@rdcMo7mkqkC@)2Bc^xhi0NNGV$^+JK4$EXS@}39S|5iP zVsn&y)K_6KKB2Tz6MWL_1$y88f!=#e@4wFJ{V7f9qU|}O^rtk9OQ!neO#4)(?Bz^H zlPRD~XLS9PrfA6&Ue1(BW!hZMB=gKyy3pNyzBk52vZ_;M6TCUB{|iE^{ST=CdzU`) ze|zyi*2jxE?d)II`TgR(zgGP7kLPv%!+wh7?@#_D?vI7XRR2vLGZJxs5b_xwoM3G1 z!v+F=OR2yz%^7@|1ZHB)PdKps5ovy30bp1W=UciefdLjk=s;eiq)Pj%s#;YRmbg}w zm#J%o(XG{`n>5aYp3#K(lr8wqTL8`7oON z*I!}O-2}@i4K5niw5hv1LJ%Nv^=!?ax;p?gR|?7t4rWnbpZ=#cl}ow-hi+MC=#6#c z&Rv;(`+_rcIjUMTzUyz&eGql#`9n>Vt0IqL)rp%;`jBQz}qDxaPX*7 z0aj~=6*@5&d)NiM^?b3H^=Dg+an2x_3@bqBoX=C2C%z-hJc+W=0_sgw?q#K=L>?B7 z3j0^T79$AjjT*!DJD5%Ei`A6fCCsmK-TKuOKeu2x^y419uV5;Bc0XfXNqkweu4T=E z3}3}}mkIdxPB!!ZFRy5v`HZo(cG$i_dgq$lXB@9ptO|nhbLulPpK-$0Nr*1Jw^Mh; z>l9!7E3$LHh!f%eb=f(}w7Z;XloGHHp9|O{2-urI1nl8Q0lV<=^0_Mioy%u477S}5 z7@ms%Ob;wP(Fk+q@>#lc`6P3fGs$A=vS=}JW7#5Cl-KZx3Lo;)yMq0(C?8Aq$Fh8^ zn2(Wg@KBYHH9KcrK4$EXS@}39Ss#Zb*-^v7K`wAEza&^_hH}+aDM5acLJ{ z$;Y+*aU&nM_Q#!k+}j@y^6_Z(^ZHb>uF1z@kXnJiven7Tji2OCfE}EaaFS$2(Kln0 z`Jy|`rCC7@4!ZuNs363jXUMcod7*7(+2=WgL(JPr1}AjUG$bMO&q8^qI;p%uE=@xz z(^TGeDz8vc(-6?yV{b>6L4 zKII)1@Q#BgyrcZ@Ue0@;-$noS?fU!0duLjJZ{4o{PD6ic{aeM)TK}R;|4@nWujTwx zKmXnN{D({YSBLqX5nWWuoa>&x)uklo=SrF6>?MOcI(v(yfAQ?iiBe`Xg;FM8{%=>x zP-RO-fH0M<)hXrI4)niJs=WjZ)>Gr(Eg|nc-TEt`SnZ zvsr)HC|{;7HkwKa>=eaOFyfZBYk(>5(k;#YUQ3^+oXsk`n|2Og5AU;?<0rvn=463+ zXjyA$M;Y4b>!E$Cl^|*5d{`%ISWN)kuj5;DY(>xk%nZU|)sz1>;{%kR`}3Z&l<3~I z45Z*gMRaWY3UqAbmHs~_3HSe*B;5OFl5qc$B;5aJl5p?al5j6A39pq?CP%8Al6pv` zt|YZ~F?A!UnTx4ANySpD`%Nk}FR55_eIE`}eJ);Ei?8mpgH)d-bt7?uBcTs8o22ff;_b!MgQV^+rk*4fq@!;_qX~eLPjnChzQT(7 zqMNqv_(BmH(Chn|$}{+r?v$Uy^-Kvz6J-LaIi&~CH5x}PJjOIjH|a*mc4ICA#bV}u z=s_0@j`X4QYYzz_Ji+f_0Pm26%S^V%u_ilw#s@=A3O4Q*dAp=dYCO;I>q9^Mulk|o zmHxei9MaIW)sVk&kEps`Jue!9}Ys4|B3UHJD;v9dq_k&V>|);oLm?x>#YdQ9VcR}@?PyfZifrR zn00~7?zBwhq^pkR_t#Rsht_v#RI{UUutkpc2@XcWBZH1el6>x$;Dp!C3kaD+g~T0} z580W!2jWssfSt=y&yideqitA|9Ex1$7E&lc)+{5{*j6O7%sIvD8J4_TPBQ6w4x2>$I@Gqj*bE?G?1Yc>qnTx_U z9kvrXo3TqP)iLlp zvq|;FTgVKtGw98j-D;Z*lYJ8c@!I=d%7Ir$->eb3uLbADDTu7K;<*Uj35cOp0g_eo z_#O}M@$_z%Ba$yq4_3EIJe1}R4X*6g*Z9F#x|;=l{6e8#T!X$j@sCzUx&sru9d~Nt zhH!jtEki36eF8WIdwRnpcU4Krg6+wfY&e1N(87Iim=X`7J$NQG4pX^jDRIGRFV3V% z5j`Zg5iUfmY_HD5%o7V6lGz9wB5t;gq-n&@UD>yC8{tFb(6$jlw^p~4+`E*x;k1ox zy1$tFkP<&4CU_>vTDf)AHNuKq5!&Wyf&%Ppu~Kf4u);N2{pRc3UzL=H)9h8*Pj)Xtt=r%Y{yv)Z=Sv?a9}a*=yi z+g!QKJ)YcUb-0sJ2A#gKE-|w~3m$0=8lYVqV8cgM44V6FQ&DyHh-W&)t)x%nvR>eMW?{UU1Ud%}dh$m5{(9YM3IB z$XihoN(f}J{7tP5RRLjM-^%Ia%p<{SMd=2uXDmT~U>HL&Ea?v;206W4A8Iq;AqIoiLYjek7RY2$smXPoBEWd58OBKeG8=*G>*F##WW;#mB znk@u6o97=;dx?h1L2M^?jjlb-j#$(gw%MApNA--$2BIi0E$r{nw`bmc$S24inG%8} zCyi%I%zQdXiPmeym&>TYR@z;P^cKl8CgY% zq45j(ra(vWqW&Pq4JJ7qDM+K>!mztwy0RlJq zR&-YxpOvZnZC|IO3^oUT@Py67H0E;MOz&K|dF%KM_kGH9M^FN7Ic$CoA6Us*Df7kg zmoyRyy+3(%Mt`K2m2F_t3mo}_u|*i#jlrZ zcodX`P+d+6E+)~@#plq!mGpA4b4x%NQdqx_MdEdhMDGuY1i{Bhm1^jHNX!BHwn^|p z9}>p~d{^!MUbVr+Y6*>T3!pPqC_s%4)>RO|+iD;H&*iEdkX7=Mbo5C*T$~n?NK~zg zFi~7rT}o!Ez;VsFS@|-k@t3IED#;$!=XGitua8bp3r;xr5T`?m%q|BDtrCB zu2C)cXC2!Ex0Y-U|H=dtvg1yv|Isa zKW{s)I$%eXeO3Ex*y|c+*9&iP*7lnLSevMAlnK0JCl$$;NU%}{V_j1As4!yJN}4)J z%29|R8>i$YC1<5z*B2$FP-9e9RgO|hE}?Ce&B&v_(U+)qCZ#GV6)Ocu#C1ujp>O_) zf?uWv8)K|UY&;3gQiFuYDE~pdMw%v|rg@GeK~rOJRPn7T=&Mno_Yjdto5x3brXR4( z>HID;;@6gik>3uVJ|=7dN2pxkx&((u%}}>Nqk7h70Slz{-Btk^!$5vRkGsp>q6%to zD8FCmj$wiBkwg_31i^m29AmhsP@5W0EOQfttiBNejS{@;eML}eNC!Eri@;w;sJT-m zwgD&CL5?O-k@K4Mvn~g@3*7~RrFCa}F<+?TW`d}4Dq9mV9&lhe*2{Hg~=dA68SvzW)4pIBPWgM(s?lI`RLYYwwLLW-l*S`Js|q6|Ke2jT`B6 z$V0O7C&u6y+S0&Aiw<1|`&AHi`E7`i2?ZQ!vf~&lcurr1f+)6XaQx>A2OClx3rRUA z>3I%++a$`Xn9K??o?<#zGh}j!R^ud`xh@FV8eq(N;YQuRwDCEFA~TOVvxwGfQGFD0 z#>^WQ5(lczz4jhrXr45pl{janx+tIma1xdVMsUz7L`PjR)x8fhn2#osL7y@aRH zt0Q3zdw`bbdx}obv=$YC`x+=GV4Z>Ilmu#)mcbD#XxkH`g1g;gH5c!bXhkykI&kT3 z*mKnLONwyI`G&P9&SQOg#oYA=;)6!BqpKn*$Rgi;wrqU!ff-CYU;Wm)3;-NjV^pSy z7uIoaY|b-~rWfNN&JeB0Ld_T6r^kp@839@X5O%wk0M&{Rp!ww?W3RP(z+;Ylqz&|D zK2~L5g96#E3|vC%eSI6kzrS65#J!8+Gb=Uaw?4Ev;Ja*dh=3#pnN|Z`UJYHu!fMrg z04lqwZ01=uZfKHCjXbds-T6gf!U%+|uuBsx$0Pe~wi z!ipP{53NC>G7EJ3%naC}G1Een znAC5D)3sSwdGA8U>EbWv+%lrPp7ZirDV&Y4i?iHO6`{%Onxi-iGWGyYNBxzoaS7HI z$2!08?F}*VuzQ?i*D)b=6hh(@pgJ46Ti8SZEq=%hvL;tg+Mku>)f?BR*DAMnp*Al=EQVL01e`{5VAr zz&=PCiat`acpI>@rs3x12zA=%J|r5i}Z=$N(d=_%MV3k4kjs9cO)Rzf144i73=}7|Hn#38!q%J zzy6)`he$bBO3obnWC+MCD7xBph*r0R%#Sk|+b*`>h$?b$t1L&fKr|tN@%$oKeWy?l z?BCsz{4VpYKo7lRJrSFr)(zbW!t}Lv95X!HIPnd5&JPl-m2)=kqz%L@;|kK`@Fc$B zK2jc*V4;P!I+w}Vy9oth>vdQ8z^=2EKM1WK)OnSd$f9@NyCYw57hbw|Nlg-MD}gfS zh30?(d0qd=8sA7H<|R8-ZIPWeoi;#qaH z4)1Xrk5DF&$<*mFb>E@Vzw;tJ5wGqz#fN6}Z|Om>+@pi{dR!D8L_|aP0xVAeZP~J* zA4lJB2Nixm(dalGGi}26L?{eCr}$P|V;Y&5tJ69QzLEu)wZa?BL3(a3Rx^eDV2y~L zb+f!7IvLg-tXvt}R6Lt!#Y9wz(qGLmk*=-?_twcMla0t5AFz$HMdL= z)6z=tr0Xk5SBNc=W}vV3^UrYg@$<=d>hz)Q#FcW_E|+*B^-(36qO&AGIgU+VZAJHE9LxkP>k zo57_yl-NxVSVsImw-u-156$zL=Y?JG2jm1#SOsO$OSY9GT04 z)LoRi<#)fDs(Z+x02IkYe#5+#bZ{|cy)X%mimlk{Pji=p$=05R?yP}42rI(g2w9V! zd2&wlcL&^jH5AtyiRRNfLM_xe3|NGif$@h=BI+@oKg+92Xo2rogsZCL6|?Y**;xg! z;bZpz1ni=l%cozF_aiv7Qy7}S0F`uVd}cgmLFwd|#s*a<&<_*Mji~BH=i# z;SE2atyu}xUc&@ni!mT2%K+k-NPU0G-o#mS+x}oIVJqq>@OVQ9i$phy~9r3As zGD#8vSy$bh0E@^8Bry<43h0lN z=$#b8m9R%fU4pkP#qcI3laZSP4$E^L@9OQ4g|aD!VcWPFi4G*GO_pT_c-(H+_#?R* z#Zpj{SWHU1Wf)ULZKoiM!x?u+6` z5^Y}XM;K-lIbx)qNr(jufFnL~gc~Wr6xD&#R+&rq3zVoN73URVRLl^{w43MsYGPGX zz&uKM7*u3O=b5OT3LYjv47(+(iC3h?*s90efRyD<2bc-~0P;DMqjG99mCTdO^S>}r zJnYBTUzjMq8+3xNC+hI&L=pcwE`kp;WYBuo>T$GWyN%9uJPmB}ZZw&SEsUL+MK{wX z_7)q`ywj=ptqECp1JbYeKAmr*D`+3t)a&kz)f8L>*+z|ZP!hVmvFKL%32M@~mhCxT zw08{*zA$Yh2_`fbHCAPH0AvbssIx2&qdtrgc-|k1)Ujz<_J`4E53lLpwTT34_2a<4 zU89PT$fMXLs4iRZ5%!4%#NHzmc<=+Cx#scG@y8EPFphmw1<#W*k+rEiOY7aM*$ zZ)-sUUcoLdqAz4MxnKrLw+H6tTKYiQL_O%VrxhX(rBd^aU(rRpZ^ix&E$B5o~CLh%?3BIufKB4WYJS0)-E-#dlVi!4Z ztC<^XHT}BBlsE5Fr=fbQOfJ(B6)j{MhT!=%SJ=m}iTlqGZU$K~E+%zsC|ey@BfZ}H z@kZOfb9+OfOvg-wZ$@M$JjDkKEi{=$8s(wU$bLOZk&2Am^srL2C!VcdP#tkXn!<-v zwna6mJ&28^d1qrB8BnsgHt4O)cbM}(t%u?G&bnjDqki6WSmS{V&kPe&Py?D>P#07? zGeM^b262?73#IyzS)Y+m5?^M0!$-opWP_!?rdYxBd%pqkmVx-LPdS|~7a|`873ZBc zmklyU`b@f2V|mM83vS_VfNHh_6eE{K8cliTo-yC8cm&XlY&PO7f~z{sd`yn<^fCRH z{bU1Jr>HqU`Qo$n&rb{fD+AeF;|U?&oyDTHJ{72CdSl3AdN%@zSISb_Fdi&MRRo*j zg(JHFRwcWyCUMc_ysT&3gnQ2r^B&RvbQ$MYjRRofrWzN^o^bT>2GZHVr>MdXtAvDE33D-g zpXQU&vj|P=R~k0Q3`OcOywO^y;t(XW1LmRLO90v<{D<@*#P%uP*%UB zEYghrDRS_T!F>(WI~DpUBSu2=#L*d}B?OlkC~N*qUK5c!zknPXs?YP%PUDr5vn*Mv ztV|Nz%jHxa$qa@P*S@j?zo_n#-$a^2*-PcIYj?pUL*nP*i(GLz$~`w(OE{UCq-}c+ zHm}d*)w2VL@^28oet*S{iriZ7o>5W48gc^PTD?scDUrfx2GcUx<{Cqa`9ASZKdwCH z9_OsUmb#Pqm=yF`&qi61qp;!&7{s;KyMz;eJpoBo@`_cH`xRu^bu+z^8%%c*)GyxS zV?7JWW(z$SkJYMo*TGyE!K(7WyLn61!X&n{6rK=7y^P~UO^ z`mbzV!vg7Z4%z(!&LcfV&3{xt1Bf5eJXolgNe+;*3S%NFUxnpU!BP}z`R8!UCaH`9D&l<;10LEJIsbS!I8wRGu9!x4)i5HN2Hgs_i_^*%ZA*?i9EkeQ2!Qzcmo6j*F$X0 zrSNxCsx-quCxTXjk>nts`t=cVX94fvmnIj7Qn|;OnUX1z(TEuM$#8}umdvrJ3(Sa2 zFuJpr0I_*#_V^1W4*F7W2tAsQVH||to80tD?vL0FWuREUwg2wK3;&4b`1hpwJ}w~-Pc9@-4unZY+PLI$6(`=T*JPsgFa&+k_`v_;?ZTL|Kj)LOB8!aF&f1WQqVmyLY^q$jE_EH6_hA=$h;guSg-ja^-kl<0@*!c21mFZFFx>~jtf7P(AcUIlMYkz$Jdff4&Y!C; zbjKroUVjLhSl*@*{Jgum6=G>S08Z|c4JM3-A+s+BVvR&|Bw-7;>^vh671#pZ4MpI_ zyGD09#hrS?=!f@vSls6iY%0v}5WU<1Pou@`l^BNM`z{m*oy8T;fSN4q4?f{a1wdN- zNrw1WMd*;*g%S7n5fKEP_LQw>RoR`*><{`Os^Hc!A4m7G(B3JX=n=j%abLM-b)$Ks zhb_`&cAeliOSsMP3pMppMTi6#$-s6sk{-KkBcmV;#|_ZS3h7)Ke7!tMw@xkWdB6D* zWbMcrQufY(&TBJdE5WNZ18dOhl%(s28B;)WGYpKImM`&jM(nF_b$mW667dPrVTZ01 z&GWMD-Q2VJ*&{=oq^9i)@3R%(gfxK*dCurS9aej$f`!_1SwFjmEinOvG+|4uPT;(i z90R%1PHG9(EUNfzF!h z;wYejne;40nn;_vVca#F=C&vqx|ga&qMk|DQq@XYC}~5{S@YUtsSf{vtkD^~W1!Sd z1nw+MRu~=JzheMm=Ls=V+R?ArE`wc?>ZGpm9QYnm(=exoN~61EK#!u}AsD-ZW^7^u z74rH2#LhhRze^>064teegHYN~hXk15j+RE7pPHsVrv%x!3@Wcy*&S3i?Y@dAB~g)v zlO0GL5%Lgv_=($7EfA|~M87mv8Zg_*y0^k)@xXLIp1d1B++rHq@j>Qc&X3H8G%MRW zCzQH1BUd+O~v(tP5BH=dw6OHKmDakm9iUb_pZ)QIYy*hV*q-CPTN zV`?Y1EE`DIVm`Pg;YDT9?JauN*|F^cV(~_Gu3^eBW(RJc{Bw5=v)%+R8&BqyeBbk} zu)SO`PySsU!Yd)eT9Q_#&XC>@*@3ta(kng9T_awpD??G4Awxs<6}tzy;qY>iu2n=D zC-V$K;s{5n#;2J80Vh7z)Ny>BB4>!f9rEKQGo$BOx~e7Hm-_Du`Mexm$8Ls0cO_rf z(O(g0NM4e!Tge;3`d!eUO4w8kjXag@cN{|T#kMlAAAu_??`?Kq>&tInjP^f%^uPG1 z7Qxw9;BXQJET|_r4?VeKYlT^z2~pgz1}7LO8r6mw?ItxR(Y`LTT52QPev~yP0of_A z{^|v+2USS0J1lDN`7mWg!QD_=qTT=V2f26Fq)2YsNZdOqndR{ykD8NY8q@(BC0KZ| z^vPJ9yASQnz5hUSWaa*soA4nCDpIyLdwflryLn7-i_x;xgfB@wXvuF&xL@w!VRUd$ zf=;}Y#j$$TAxlc>#~hj$QU42t_VP=3=@t1%MVD?brH_;Y{OFbAvW<% zhRj55V*GbUP&I^nwmh^T>80k{z2tVa90>J-w*k*DD9LJv>?8#}$$8Sd5qr9&err246YdV3MwDWBSfE3Dl#q{B2t?{ z@Cfm)*F1O^_5?#>F+DPWsfdaFAwAt}(+Rh1CBO~VB0Is5tsJ70V--xqZwcNt{zfkI<9_hKAU3FL-l7G_+^37J_7xa#SJ_2`r``*bjj`lD{ZcskTz$tw6rPWfUVpM zcKZCNfOb15h!6moB)&R}HO>~+1x+Kb7los21*ig56dOjs(By*Z1&QUgzre$2Ed6cF z6@@Rxlu_TY%vUTnOiuzaJpLuk_v0%(n@Wkk;ge3y-2dYK1k|6aq(6$Ux<7%eBVXy} z^hGaqUP&*F(LHgxntI7FmyYP6o=DLNIpB4qdCn17i7)*%hXE-eL;&<8zd6;~5Mh`$ z>T>44Bw{LQ>G?&VQ?=Ma&(RDB;5mmcrDLYRLq=|5FPHj6IoRGn@e5hK;VkP{sogZF z3oH)RIKk#Feh^>I1nf4;chti#Zw6v9$~4e1bzC5s3 zhd+at)K;9W4kf^H90?vzSgWn@BDGltkY;W6tN%&wMGaPbHPFqb(|l%nSwIKY+bhxw zDt;f~w}qJtQ-fal7tQQ_>6evH-$)`2=#jK%VBu|mq5*4T65v*s#b%Ax48L@&R%RY8B=s$O=yl8yh#(aoybJUc`Y2}TE*$9kL1DMt+@nJe*B7DgO zCM;Ra#}3El5O6QJ{?xnY#I(g^`43!4LM^iaR%#aBD0Uwvi`TNg#l`ABk_;qGjBx zbTDPXXX_SU?b#K;>Vsm!-KX77XbbRVX=3!(r<$dkHoY6Nb ztJko8?QQUP?S>D`X5GmLFs>uaOFM_WHP=~p&Cei9cXn^lTXPFfg3c+&aMpP>4eSXi zoRZ`qVp$NyrvYXrUYH|K&&Unm?CDwlHYnb#h(Qz$#@1FF^WH8?p@`pUa{;)69Rr2v zQO_ccCr)c6?!+&_vr&w3!B*oO^A z4Z9EX3w>aOse(821|v3=?Ve5=_bRIwB{8PumWVvc($IP$JN2aPhNc%9Do{fuFZ3!L zpU>%RCQuBzF@It&HhS&CLlt4fz0mUcPF30)EI!emALE)hYT%{FQDW3}&xTDjY=-xzp`?m@NlYr>)bL1qiN&8fz?mFK$cV0BW>r7)dUAZD--n&xkkMQ%a9`k3x4F_) z>_w`6R#$?rL(j^?8}7;A2KvMb#PSR*hTu2dDGwX5Rw`7bA=~$$LwB1s3lmKQAi{NL z*pIUx+`)*=iuPiUF%(b-&ZC~Ua~40^yQ8u`{~j4}myCQCLqDFlUKU5RKS#K;_aX+} zI!1rH6lPI==V8p$f?NV(3Sap+IPjHgsE)9~Y+|6eeqAtMJH%!{aKAAyT%gR?>ra5Avyzy!AZ?6Ha)uj*xa)z?|=e^5Lg-oJB+|EZj>1qKeYZ+K;_VQ!ELKXPMhqrH4RSU{IL`P#Qs8osao|RA? z`fiF8)x6@xHUhmx#Y+_dipT=)az3QYWyLe*EYVqTRzRdMtH4REO@Zhl@p6xSsYE+6 zQ^ZtSa?N=eTnjpv7EMOhHT}==7Ipe7IF3mfXu0{U z(WHh`YJYI!j(0?}^`7oF!JYZ9GEbvD>J23e1|0EKQ)Vm~Ci{d}@NQx@PdH<-VLH?w zYl&cV5Gdp&faIV%#A-IPbn0C{W}!LxHQ@cTbf@qtZLPOZ%5JvFZ$6aS>R3-a!P(*6 zLm6{pZSN-bQTe28z41!SEqt-ed_UNPrkZDT7Ja&rU$h2&iasuDkje0=NSmt`l1K|1XbZ@sJxm#5d{MFDCwwP+QEiJX8`+AFz z=m(I7wiCR27KiMD)H2j*?;p_UNloiQxkX<50h7k4ISwC7V#>*kWaXG6`!^#XI5AJ<*B#hh8y?#lEBid(i?Epuy`FQ!g&O zz&T06!xq3<4!&bPud;Zn8C@mf9YxIY8SXH?zUIr2p30($U=ydGz__q^Sq-{OzY3{@ zc^NE7W`gh`tB!C!etme2OCn{P&v`++hn7uaBZ;WUWJDLRh@W}_P6K&}J=Qt+stB2t zyZGksn5i@at>LzbksjFrgj$Bb9BvBqp*SN`Id zq5Me(zWZw6ze>-ajI~L8@Xid)cLd;@l~SKAw02mPD8+JEGj58;%id_}r;|)fCcI8f z%>FT%m=eb?C({|0I@(Y~)sv}+E{b?f3u5t2JEM}Hs&W31L_{Be+i#%3pRJX(d2>?n zCk?PpC@ImT;a(a*;Wt)*saTZ1r>7qV2`}3BZ0E%Rh@6#M9s?jWOCm2)WWSz1r;2B>leHctgsJAKgVepm7&A>+truweA(;I!YGjp$MkyxTfH;KzTZzG!JKx;vR-GS~y)=9) z_!_Wz`Uq*%hw6KL5;YJrfrYZ=2tgei2>eDd0G-%Dy)&hix$1&+zBqy-mf^KjKy03N+zZaVGVb)O(UHK2 z=3VR7`q`zQ)ZPN`H)|LGbhBvwgjuaT^RBJ(F&FH2h)jdSuu}ws?BD`S`>7BzdRPe9 zK&!RKbmMJoaTfQYT?8B!%H?!c*c-6>`oRV#D9F_CX!J`=7+EAOcTz1W_8-#~1Wv#1 zjs@PI^~9&KkNZ5O?@!8Dw!CDq3dFH!%%V__YIqDL9E9@58L^i3W()=GL;1+pu6Z=n zM`JY1cOM6Wz?^&HNYq6xbGHV4kJ%-ZUav(g&}}-PdX}EfpQtfZYEw7Xh%Ve&hBnpJ zwG65S6Qr<2Obga1Sfmlk26;NZBOX`iNmbxjOe(^hb7Je}Cn3rBkywszdcj?BYg$qhzFB`_R zqKj(@VIs4+&fHu}BIfu+pB@;rm$#Goul2Q`{I_$SS0M(|SnPV0VBGOjakpOdpnI(G zf5gh9=SkLRN<6a@*BA)R02vY&5#zv#l~Sz!Jj3w5?A+dnMim2Dw` zwRYfyvt3{W1ku?-85~_1`9Xj;q$;qzSVR)D@wLelF_Zb2h1ik1us-kHC4Q0iXbf|_ ztjiRn7&1XM@*BK|ODE48PyQR7@TRg=(uCtPuj$^{AG%~ZvqXiTR2+@^liE6j_L%{X z{6p`)sw7&33q1%NBADkX&$QBG);6+2Alko0X$-f9*)fin5eW_t5T8%HVl(#y1Twp7 zbuG2t4CvWeHBO&bR|5bFqOUirLho}pe|EQ_N8B#-KC}`zK0k`wP*YvmW$J#~V~rf+ zOpo27R41KXsc4i>f{d(QX^`d#g8d8U;-0bG0FUS<-V(G2*gP*_x1olU*?)U`v`C44 ziWUX?Y&s!6pca;f!TGE;Ujl{|z%zR|Y$n(oZA@~+)Z{nokcS@ZGn_XVWk%v!mVH21 zF0f%e0l zSTOeZU3KjOh#Ovc`#r8P^$mH-bq?NW7x48N&qX&e6Y_D~-t3gjM1N4i896L*WH3cE zLA{y7?1pViRaF&3ynGih|2>?FluVjc(AQ%g=TtXWWXq(3XG-lsMSZDsanHxvF7#qD z>>*;I%6pJVdVD?XRX4=O+w2**b1Rq{Dj!`sa8?yvsg%r)qG@@?F=mX_G9%W19=s>h zU-Fxi-g7_HU0eY@Y7&(lT(eWE&vE}>=v{iv`?IW)#Ub^sU35nf!-VD#_QkE@IBZq6@mKvyyxTV$@^>D9!2|ZWEkES-^Kj5`m9@by&o_1$W=E{X``B$Y1E@R}yxRAMk%#&Obiz zOQ^CDLb7!8ds$`YuwH9^w4!9hAQ)0{rD|r@V-aFN@3rnZzkVbyqXW35DZ?)1ExV$g)7iLL?qhc& znYTM=0eA9SYRkK(w!s7@1H%a_8co=7;ysk#QUUd>^=xVxPtb*lDa7Cfd>re%D*#c! z6jj}Bz!N*dVj$Ky&CU4Qgu(N7?(@ZpP2Sz$`kWDmhGm&D z@2=fZyA|Q(KiEw{S}|pcwZ`RED8nPQVru8I2PSb@(5Lz#Mn z#%40)5biF=R28~;QGbipWbYPFSLgJ`!J1M8q88dvhzLNu30h~lIId;$+GMSjS*y^l z1GGBWG8_lHxEGpE1(&j5F}RL344R)&%GZFffo)Z=+~EO3&|d*Dp$@p;;~vPesb=)d z&ItO(+gQP*J2i>+(-gYMO@R!_-* zd?NbVv%da9&9v#;bRpO$(e#>05=RQ!VWQ$*8KWOd6-QLKJUNAoUi%jlA2l)h}WOT5~9EVHN^wtFt`nJzX;`_Vd|XnUNaF zeR0$Z4`6O_EbjrKiV%S|#RycKZdih~T>TBDi)+aul)`lDtwZh$+i+NsNH z7WL!V2r*8(lC|#7Z2^1k@ax=xeJJ$B1$n*L+5X4%3ti!1Ll*3_?%8rfeGdKfu8;1y zMjfkH?tr)MRTTn9%pzsI){S#6Uw6;5UgD-EL(Jv1&9R|^H`zF-JG{ad~>tp*Dj=v@9Xsa*OP z><~@&Kx$ov0s7?#(b`9jJrif+Opct-GwGo=87>?-3Cl|#Ip(`LauSvzM~=1gk|W2; z#Yc|5Hd*Z>N8`wesN&boHy(~PujFp2|0}O-4jHyE-|?xz8c=!+NfZ-(UbM$Of&uu4 z4ci?}VAPYTN!ajXBR+@JZ3exGS+n%@;lT9PKcqN{en)&W)^(i})F4Fx<}Kv#08-x~ z@ForJQ4}|H&(e7bW6t?hqmp9T@o^EAG0Q?ybKhxQ=NAG2)N(qwE9TuLT&Khicrz9=jHp*{a?OoTub~^CEQCL0 z&R;rHDE7EM-kXb@f4`FHlj_@cSI865-5ewoI%F21tN7xZMQGgK5J1cPojPXc>k_kH zAaDksqMbREqOD0u@TPoWPR%h=_(e}2JX6g!%R9J5#thbKZ~28@!^lAaD5c{Z5sE1A z#fQbAziQ*+G?}=}oe94Daqml9xs`x*OTrWuaP2zK^;bC68FQP6dxOtA`8?X= z@pX1c!%;8!5k#$S>u?wB?5Ecf=9GtCFUP&7KXYjWsJ|J5`44MSOp-xViS-ZZs0Wo1 z@bTj})nF;u;ryjiW92ApnTFGAqojxqQ9`dQwoc;ee| z9^_7S*AkSWX;`k%7*`ZS$@c8shFrW+T~wqU8+TTMdWiKca{GoB1#tEw&Bt4P2b$bU z=#hzuT%zKdlE_19_Cie#y}3<}lY<-6Nlf=uFz}c($Wb#!()|HcW@>&c&4P;y7a1t^ zYvV1j8;t|BrX%gg-c?Jl0sH+jJRIs=ShM{TTw5rwvlpPoi05!KESK})fjY}IqJ zSMi|cF7ONsc)I9^(5D8kKVU}$Wr-YR1QQ3effdi0kNec<4Ods~ywUyWReYf6Sr5oJ z6!TUaA0w`EK9wNgbFMN*@2g87r2^j?e#R|RwxL@W-`-pWTG#A>O?qF8Fgstv$dN%7 z^m|5nB|czcRT{p5B?5&KF)dmg(*mYJeuGxNEc0Jlh?}<@fBn#%=V2=@@+>XIj&(3( z)6l}Rj`Q@wJz?|_cA;0n9@59u2*QZuaX?XHjYp3vR?#Ag9w*o5O`hT=+s-pW)a54N z^7)Ce-w``Ir*Bosw%R?;tR!=j9@EeS52eZO!TcK?M0iw^=fy620(D{$EwRI3VAnu~ zvGlriBRx0W#m7|LKB;!1x$xPGgGfKGoka?DfPH~R?vKQ1Y>ZdP?(C=&`_E{VI&_hk zGs_CyevEld0p862;~*Z9ZIqoJ7`rcyS~%tDz=ci_XEL%kKrM)B0V}$_1bOAF z%$6TK1h=?ZW=i15ql~II)^7!@_andAJV;P%-1H`#FYm$(N^xA;#O*H!Td7JGTWmK) zSXkH8omFGEGzBpo#(;L4G?LnJXbpiV%qAT(L`B1K)|v7%RA=_esxBAT-1ZS_jT49D zyd_Umek)Lo>4Hl8IF+UVW_bz4km87~*((-+LEw&&q0LRb3}-}lEq)@pe&R}5ksH^l zOIXn*yZFfZvHbT~g_Il!q#?h0X7KH?ex9ZuxbiKZCnXjDXRcsQ^hEQ$<}hzFcQ2m_ zpn@Vg>!n~*@JyoPFpr(gxL{{ALy1s+^E%bN+>}2L+*5cRZ}*fcgnGt^mtxse8ebco z*#Ae{n{}tHG~dG?h^)mtT}q9RWsEVwn2^nS(y96i zhy4aR_II=QC~q@#x~u@wT;K6=^uG9ClK6J;T3p7~%y*t_mE|LuJtx>+^8{~~CY&wh zR0+Rei5Y$j-~K}hj(bG3Ex^Nd$X2 zT|3h64n=BwQq~QIvjDDNgDmjmBJ1&^o{^Q@n440DM;*orU=6?M&dGe#JEFq7k4VNU zDjpx&-7g2$e%Cu1uO-o68iPDFhaC^2GZu!puzgQ|(Ai}~j<=@-=!!YDE**Y*beA{3B~ii^SHnf(B)$xQhV%oO zk_YF^g7g^CUt=w#?u#k~r`IGvM*WqEBd^N3qQgOkkhyz#i*{ZQ27ur;>B(B7%+lgP zDF|{}@|FI2EjX+IrW~~LnVX~g{C&NAvI4wYHmH_4jUBFH|z%(s?OP7`9xa6@x0t zA2Utj;7v|fW_;PyopJa{m@fuM!u%~};qwrSkGc1!XTWtIeo;sqrBKvJn%PE%rEFt`)>zpu*TmWO(K!@sS} zp%Inf2(m0F*g9V+^rtA_;g#vNsVp8zqAqf0eZ0R_Juo&vO1-sPDK%4f=3ZpLuekl= zc)-1HXJ|T)v`oY#DlN(7Tjpk!6T{oP%!rDHql{Wl4>K9DV9Ue2WQkhjS8FD?w7Hq} zm1_r8r2#mv>pO3$r!ktfnK#oH1C0o7js0qkO)|*N^a=Xg&`gJJ=D@F+AiVECV_$wugO7sx>hg8tujfP&w+{d`gpz!^ihn;)CW5&;o_mpYf^95m z2JpK+J5Fku*wG0k+RwXjktf}aOH0mJd-c4d`(e6uBcFBqQoQ+c9c@7VzSv;Wi=CeI znEPMNhW+WXk(dpc(&-{G-@Hvybn)7THuh@NynE+$Hwtke5PLO?ED@cuBLrl>I?AYE zKHJW96{}TCt5;39=*eo-SulqIJM$+1MM`EUEBtxIM2YVDBHoceDTp^0Y?zNN|8_T* zco>68Nhua(#7(w_165?N`Msm=A~-hl`TCh2|8V&LFV^ay!2Dh(NT# z65Q9_v+RVI;S^5$@5oU$P8F}zufV=~TU6i~`#?PU_n8?zJu0n<(FxU+!_sB1#SwzK znD5GxZ=wvl{a9mU2%!DADCPi^6~zrruKb$~;D@us5{-Cx-O$O2L^-7AKE^MYQO>;L zQB%-0fim+LNv#gN<*fO1d-yrFVS?*|Dk3D|{)nG22eb~Q(t;7WFuTlJgN8dce|a(U z__r5>npD#t#$TGBIpPGwXjIJn*v3PHKF(VhvlM>P6lPCJU^?pFggwuO) zP4z(>geMcxalvo$@g#EOC0xy#3^Lg_zttoq0#n@2qd=Xg`o{UgP#gd8#;@ER|c=+N#k{^54)Pk>Y0*Be$OeUHgFr5JI z0m_k9u$cIydmYH?xNeag@h+vreI&dRxAP4Kyv%XfI_vbH^(FFmgl!I-HwP{z7PO@! zt5hX|oh9tnC$gkvSREiM@7WL9Rw`QOBa?BVo|MVb{47F}>dUW|^$`1Nj`w;19xcsMtIx%AXmzPz&CGJb!>y1!U2)4xBt3Ql~GGAIpk3kWA^@7u%4KbpU75 z+$?|4jV#}bESITY$eIWRS-QpV{D6SeWqZjJlp)OE*=??PkHm#pE?oCgOJWT zlA7o#dwiuvu)~^pSlVv<&*C}mj5E9x5M6p7Nq@aU)|f();Msc>{^CsJ91dmzX!Z`%w*djLqeXtJ9pFX)y->aTZzrQ zlcnebs-`#fo**i|9I3erWBr|6L?7VB^7dxR6BGW`cf)RwGi2C}e=O2h)mSr&uf z6JnT=xc>3xiA(z5yHZ*Q90r^v;W+|l;xp=sgP)mz>R zV0U@JlgcjeMH7}-5>i>~;qm0e4@_MlH<^rxc=O0GFTEu@4(ywdjK0AW*?mIj_;JOxkT5z`_)_yS>)Ndz5kLnirgpOf3 zlOLk7T1I0vJ2QVj>)wyZjIq~|yT5|jVOZY!#6+OZj~$M904i>Lzs^;-w@YVpGf>CW zfjAm#R1E$5Sf0Ng#dmckEFb>IDDEyiN8!+FoTGst2briqssUCHfx_F1cy7jRs?xZF4kg;QU-sYyexOm} z=^~YHs%}x={#n&f8gv7RF^w*$)Amq5MH+$gQ8_hlThSmAtbFgTy@>y%a!{@s8h^z; z-8!E#1f-$hweYN26d5T|7wTAH*hS_fj7mTNlNUn9r{$FOsili@Fz>)-vvhOskuvi} zef@y#{Z87O{wsYDqLW)XAi|Bm8C%zYu(9{$m6Nl&GG}0YI zCdJ^UVFJhc*)L9!5#>O?O36af(~mJ-0*x8N6vVyu_ihyBQeSwB_ji>#6K;g8b~i0< zaB6Oq{>EqoN2HJc#KHANsR8OmmoNJ`YpPnCtU z>cY`7A-zBaOMj^$qxu+SGmmaj>TsrGEiGTL+foLTU5mJ#3fgdyL$02-)n1~Z~5YZ$MoiJ<_WTt?L*ygf4}Jk8xo z@gch2mfd@Ep&Q{&uFV}uo8O;dEB%URmgNeJ8PV6$hfKu+_)xV6I$oEB3kU5<_sFp#Ona=-3%3u*0kKP34+e&X``GK8?7qB&zPcZR5SKk*PsYv|VDU5Q=dA=oY9 zlf5p3`~iU>kM@^31A7o<`(tVc4`c@$qV&AFS^Zs5WRaL)9y)*BzZ+GD;rcAQ17#UmjT9qYsVR6giHC zM_OxiG9Mv6i;2>Z#YdY4^7V96qC zqAYn&)7@Qe*576@&lx;1bL(UhGdOln++P>s$NH-b@YKUKpVixBNRn1ZOk5m35#H$n z`I)5Y*PDlRMkv>*=rSE;#(wZp$UOgh`c_#(mPd@=1zY-cH=Ka6WfQ|PW3+Ox*Ga{c z?y-cjZmgIDJJ?QDJu5^oE|jt_)aUycWJrclK+QaIbD8!d6Cb?>7pj+27HCGq@|9d8SOdbMWshC zfYLft+Ox@h(wE!9(UUx*meZu{gSEQ1urUFcg#R>G01B){=?%mKv<+WrVvI6N>?cY% zr?N9tysn!hsx=pW8X416vOy*?zf6DFZ<+UfZ`*DycAvc&Stq!4)cniaxN8$oiPu`*jG !n}^SzsX-Ko3a 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

6) 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�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 a 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%0AH!{J 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%0AMBeJJMX?8Tqmr~DBScu3G4e0@u)&_HlSSmn6*a& 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 _i_YilY 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

(wY(w<}T@!85Lj62h`;IeGvm3>@R>+@Z^&E9&K_ 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

+Aeb}Qd^H#4 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 AEB2!PDW_ix2X27gUyc{(}1p2U-^k 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 z zwleYlG~qllF1}1Th+p6Bbn+u+{Wgf;c$wr3X2tI6o4g-$L|_&AltJEnO_W~cVEKN- zYgjZEjT7NzO-1>6T)8Tckg_OwqJyRb?L3b(fX6Lo?0sfqUBG5|6*&bMByrmeW>{2u zXqs1_6Iyizn7tgFB-hA3w3>A>UqnNBfVj7fTI(0svBi=JKC)>0bNvg61QyGT8-Wma z#2WWLer7xgn7$K?b2Q5`PJp6G(i|9A51`@(Y5&-haSagSzC>ak@yuCq|{W>*4a7Mzwx-~Or5ImV25BUf{HTof7vpn!b*Mb29*ozwZW zB^5szjg-4xcERHC5jGD}J|d_8z&`JCy$m+rNeMpd8?c!qIp6XoZ~&hG^0K>+JT!6} z6qcrH3t?UlJF>M8*siLB8UP=*GkgZyC$$x#Tg>x|DL2zStVMPR&^~jp*4+p~M<)!~ zYP&FrTy-PoJIvmS(g3IMFJk-~D#IW$(l837(GO9azs4++njuE3Ir3n4_7hGi|DCbw zFlirQ6}@Jx%18F+SS7B*8V>xT+B5sOw7I*Xy@4&fh)K}0buVuyv_lN`Cb1$tZPvXL z)K{}?4F=0SGp`%T<50L^o}%8Qd*z7)uCh^))b|gyG_YBj#+jMZ5NebDAm`EjQ0f|lwIV{+lB&NUJdMhhtnI#=_QVb+0z^2^rF=1MV*tUSNZ((wp>(! z|Gq&kX>*i)lWFNV0q}6nV+Ty&I{7WU@dpQ1DZGS;!0T0N3SM}-5u6F!m?%rKZXEJb zlH}6__qM*d-NW-GK=Swrkkn5AiAK-f2+l4Kpbadm?Km6H)s8DSD7Pg3iLQHaFyK<} zG_sLwCdi$})Xv&YnC!o7Rw%ucmT09G+Iq>_6{$A1T69uUr1da)`C_s;OkB85kV;_K z1tfzvd^?O;7-1ht%irr?&%`R^w=BWTY)W-a(+oYtjAfd+fvPv)g-}9zjZUM|J~5~9 zlD$EiDwzk19C!J~b)uNS<&Ww>y*y`EH#zJ0hUZ#Q{W3e0h$3Lzgf3&Z;!EtVu``}8 z%oyeESkNIIlxj;@=nzHZST3m6AYBiB$PKUgkfuFcOTO3{Ck~G6IbW-}L{U^$lTk`h zG#xRCWKG*^Sd_X!`p5UHtZz@Ac(mJZ$I#V8P`+OEmdXO*j>P13yGRRKSki*}L! zYgUxxrIc9B!=D-M(@bt`tu|F?4bmb17{L zxFaMfv3~1e#-6@frt2B$X_uYagL~?R=5ps69$6*29y4Y5Gf@CH@(?ZHBu{xg9%SuM zHW0lX%@Knr3fzZT(uHq|jR#+op$I?cq7DX^v z*aCH3MylZ6v^fk};+am=N@mKpYk?EcY4kDkh5MemywlJ%Q=_S&o8kXoRd;E za>y~OPe%5N*VvJW<2A&nk>p_8p*QLMVI!>PV96E5!ng*6BMnADN04-8r~q*IaSefd z#eo6JWCS3mxo*H$`_LY8V9nHS7Cs5TtRno^0dOL|%SNiDqP?F_AG6^dwRM z9f_8AM`as45w-D<^R8psWKmx7OFuC{yEA2$hFr^M8ja305_?y(cmu}V(BE7Euq)9J zCOd;HuIc1Z-Ja_+J_W_J7@8|(KR&pV%5~;+qNxA_TTqNj0OIQk6>FZyYtEvgbVj%4Z(x9T6 zhGa73VYia5OT^J&ew40jO(_VRIs4)wl)z)$+)KOnwLu; zo}Dcy#?0B{Gta5*)Aevdpq?&nwVls=Ln%n^x)SSZ1b7(a+-A)2GA!h!L1SM z*5b9M?$oSNNI2^r`)S?Hvtz#kPyCvRO%4p{BL z!A_Dg169G|s6}4Y9wFWrQDSkEOTO@WiMC{gbB4$N@%N;$4e`ZZd>t9!KIT}`q; zKSB@Hz^0(6;>+p?cy?oqQ4G1Z;azI?o9?`HgFQ&O-;l6Rffodw)svu3F!I3V>FGGf z20B7 z#5nxqq?`qNvVuF(cqMmTwV1@NzQXY~?=Z9~xsyY>^g`U1+<>&~3b@WXdf@l_So zwBen@$u9Z)2MrIt3wS>*N4y8)m zGXiD4LWQtO8MRbv8#{BW7Fg6Sw>Aa^D@fYDw5#UHn(ZDlXAsGhCeuz5MmaLcw&?bw zbWM)g&3e6?3M8r3Wo9)AE+kj9k#X*6%Dv37DeWe};GOGVgwUA@AP#74Hsn5tsm8Twovf z(xn8Je+CcklhL@9aNC1pZo7H`m+SGlUdZ4MoqrhIKZ(JufrZ)HrdSJg-u_QAxFyEm ze0NZ0T2{+4xcSQ&+|mgKcLxS{FQ0HpJkH3#oi{&aaHG3_7~B&K?#M8>!Cp3Gu$P$m z$(fo!jyJ`(x zdcyJ{VR)SlU3I4T)=L*R-g+QbN3H3 z<|^On;ButHQc^d8b5-B_i|(g1CAVP3_swB?`)itl((~P~MNUkok*1E=ikVI6C{@D8 zve{;_UJFt`3;d`>Zv?5Nsd>3_KoBoXOBc-Y3Ha?m2LgT zH{|KYW%u}QlK?_Cx^RYQg}b)+`mtw|xT-F!7fWA~X#abLM-!MErDvt`lF0oGZ@lo* zA4kp_?ni%L-dGB=$cnr=@h2^7`VFW7hLsBooZ(pAz@6reS6=M}a!86aZ6AKYgKoZp z2Mwea{aGG#_kcNl_%O?a9+dg;3+sFr6+~jq*|e^?(Bt;UT7%9RvSOFKV5 zs%1ga^pNj`PTrrrel7|xK}=?|3y4WWh{GWc!-<2Oeb6D||S&9S&)k8|*R zm~er0%N)8pohfwrM{-^4T*9=oaTeBW(ZYLBo}_vINduwy(YkkcXx8 zO|v_?X&PWA-zEzX+LVf94Cs1W%|xL@bT5vbIchlhaF^_pVD$WFT99qh4`tU`IHURB zoYc>=OY(}&RJL*<5Lk@5CxAP0mPn!dOj~}A;EB_1qa=y_SJLN{1*SLl7Js!QoqB%B z5Y}%n#C10IVgI>Ul@riBTmqWolCVGk&4vNZg}okUSRlfrZp6N9FSV~Wp;YIo}92!&(V`tM(C-aS>m~u?a7hEmDTY18wtCmV_gfJ!rO-^+`-W-?^`KS`ku+1CJ#67%7DX^ifSf8wdSeN89VE%fHS3i zu0|xAL9CfOOPRbsNSW|`ml*F3_NjNx3yI2~?-keH_ya^%j*$xz{*u1_-YST`o+qt@ zV`DD0OK}qElQwSp&;@G__Oc^aD>pf9=D&}QJ97So)}L&ayWKO)g(+`BTov#P`#h%}En`hV1W)SE8W|{*T4-&Bvr;e%T&#MuQx5 ztZLZ@?ObWeeoc()N}@o@y+psV0rhyQ zO}Yjg$Scb(!A+^enYMPO9#m9DFsixM8qeu+CQB%~l_@2rPq*ot;t$A=q5Jl$Jfveu z2-6)CZ1<}L63|?O3)_YarxK0Yufpx;sZ^F5F3hK5n+V}W+QTJ zyu3+$tiFXMu6ioC)TU$GH&|p_Xo`EV# zHu$4@QnHexsul>cx!P4!CiJN~T_8c-2eWk&lc@9Ih&hA?qd z%3>|dqr7h=^7CD+td^8!b zz4UAj@!7CPX>ZFrm$xS$v5;nEuVswM4QtA6l(l`EaZ0tX^BaVib*v6i&y`ETyFcGp zp!^vJ5!?@0$VRxR^|TS1t%tuW+N6SHPg538>xf!H-8g%(VMst0jS1^tyFjL8S5gOPcykuT}a0Bxs zYrPltYI>8&ToBZR#TsyT$PDnsWFzdmoM?i}s4!pPCUQELsvr{1`X8+I#Hla zyJf22Mk|xsw5I7Pj0QCL#%}h^Vkv&fUV){gUE<-ad<{85I1$R#92fA|UL0`I%=Q0J zopJvAooe)O&rKxQaXdsRpE;*Sh@2UhaD2><&^|Y!09$<`=7H&O%p8!~#Uq)Hws=vG zN1!h5ILj3!^pk2WWk1ECaKvV1bbWcqCbFKoFev=LjoVbe6St}UqH&wvXTIMlbt4nx zU&n1`G>xF$+i}O}8U2q@o3VKJXGU#`h~b!Vdw(Qo)BC-kO&|U>-szxCA3>YmzZ$gJ zPX%pyzY(#VF9?RJ~u0Z)QmNP9M{u9gjo3WgoPhvS^+H2DFaK+R1 zK^&bv*9$kw2ENH>(upen9lbDlB-FP`sxBY#U%G4E7fL1`ab8-C&^*^2t4sP+#kLSg zt=fa+RVN0DC@BgMPi*<1Vv7?caItTaPX(idb0NlQ9`JK!Mcih)1Kl-?zSf_pwmuhk zsy>N3^+}0NH<$+X6LF^(#*?aF#FMK3R6HrxS6SKTqe=B_Uxh_KA356j&qR)P{)EWU z&diy(F{Gn#-&}H4aICDm0=Mxp3ELRpPQ>R3eAX0hPh0~1X#mZ`%K!%Vq6$MhI}tj? z@wf{SLwEDmVr_0=@;RmblfqYHhmSzA^?+R&N&#+8K_gzsq-kJZFsZNhM&5zLTQDsp zwBU4F4@h(kkMCj~WH*!)M(OlXnkoF%wYf!FyXiFTpFdh;dGgSSSV=zMJy@vyR@`Wd zM+B$91ZQTKKyYfdC~uDlPWTDI@j^<!>~;8;SvB+%K<20E`Ev7jXvsagG~mikA6gM99r~`AJK0K zh@(Hjk4WXk1`FY_c_cg*BAU7;v@|*jAi-d{e#ol`~E8 zuMmEnp^kk@Ecz!o(`4n?%{}B;b7};ynoD=bQl!2D@#3XvL^QyTiUXQ*E#&hKIFA`wGNPz020C@9nlm9+mk0<57VU|O0s;v0eFydeS3^5rD zKP4usPl$=vY^TM)!4KS#!Q>+O&pR*v73&%CuTcL){M#)u;@^Ie75^r(Yzn&M!)t$# z{y55Q_i%BPn>w5j{*FT3+U5@i7Lq;&!%+lVWG(*DWc|A$;#3`A-hd`+ z=43TlaDyt)C^nnp_ODDWFh1Xm6;Ld=#i=Y5z0 z0;@}&c0X6X=AvB-!LC<6$|=L!r@hmybd`YPF4s-Kar+5427jhw(tgoJ-cSZTlVDC# z$gLFlB&I-bYe4UC2J{M_gI*A2L2ocqr_4U#WiOIW+yyo)rl9I>;q^Yc{QJgS?hSimBP-)`+BMrpt32(!c$ zGO1VQpQ);3qtZ*i3m%0vgqD}Ox9UTtp4}nmF;#7oPPC#=h^JF!-TO{b%u$mFpSsQU zP4-hjA8lSM|Lx;Yc^PVHax#b8&$Ra9kqGG8vj5c1t_$GEm<1cE6gWSn-cgRjiR%h; z0zHZ^`rNoCZHdYHbKbx`PT;N4Kx#JxtvMVPO_^6~;%G@%z<_ZX;Si>9Y?!)wwunN> zdh5d%3leRJl!4t5_uhjKrbO{^0G|ep`y437V}8eeKaUC0ZK26Geqkk!F7{ydg(+ zHP5%>2P6gWhFo^Nk1962L!C-fIIJrFL6y&AupSe-Amn9JPtrRBT^fCzSPv_1@kU0#b z^fmLY9^@N+w|iCUy+uA^G@rr#`VRw$_qPI&9m^{&Q$o=?&-cCbes_xtTDrR;mA7M+ zkkI)hI@}l!{w@pV&Pa{K{A*e+8gS&C{xI5F#a^1Y1TDX?y1_!zYS-qeqtOfa6OP7* z;{k5{zr5pl9Y+J-1Lk~s=4dEEhso9aAiN&$u$JuF>zv2z(U92))wYh$i-dWDo7; z{zEPSHFGNLI!<83a=>JrWDnS6vj^l3oou=QKh2Cg8IEI76m5a#0B#1WYv>uemdojZ ztV0F4e14r+;Ef3HN?2ASLkMU4!c5dmF+$7}?nwB95znQnXfC|}MNw7be;@j4njCF0 z9n?4I>&Xwr#QmH6M_O7`KZ0MRDL53zkXObiG%K2rsn4Wce_$S}dAJ2E>Bj3?TlGr4cpNZS7 z8q1I5JEBBh>rwYt1{#A)1lLboE0p3&kcIB9c@U|awHV$UPWL-|HqA(}IoPg1bC*q% zKmi^E#FaZM{gCNVmP+W`iF62>#)8+|WS-K`e-G-GU)?666Z@T4kWrd02KJ72?5((>D@CDVCk z9B(Ui);8QR>fJ9&d=ZVfVvpuoB&8)g8BFY2-BkYcNIgJAYh_1wu;zk6;lxHZw6R-x zMvd!sL()Iu*&E?`1dtdCe?c=?*utIQ5tSaY4MRdQ#C4fR(sy*M?_jQbz@h8PEoc!| z?}F!6k)?{wjxPlM&&(sNYvgFE31jXC1|A9~-PUV0|xCTCuS!^|Cuhh(kQ(z#_ zhq!0d?~S%Zx818elJv(Ux@d>1HW*@>^teeZnfr)Y@jCUeWj-lGVkr%mCraZrZn`J1 zr!?HOOm8u?b8)6q&ua3u2mYu>oGvzYV5BWB^?- zcuqMKeZtNqJ@Pt07=975-rWGDoHX<44D1CT$;htlBsUN(z3OaoH->BN-IB($FI(fW z6#78dDRD9O;ntWVp*_XbI#c-q*j^+JWwGBTG=DIz7tgetMZ4<7R_q@d(%JjS22rYN zI-oIw)Ux`q*WT+*e~fpuXSweycCau;2>5_=9PQ)qC%d=VeX|P84rx>C<_iYMr8En<>}EEvC9# zYk06&o9!epw5qr%gZZ$@s({xC%XV%%W#YerKH6h)WE`FKwP${K*?!kc5v?`O+(c0a z3QA3>pcPw?xmJB;tJQjR%U9^$E`mTo3pNRv*U?mXq`Y#wJB7O%(5-3b8$Ap_XMR(> zW2S~Tny=nbnZ|c}(zpnWvbbG@M+?IK#esJo=wH@-U;07vJ zV>XPCSl^C(UnwSqd#(oOk)lO)o<}vL7*QbA#U@#OCw5(b^cWX)%kTyS%I&;&!~oE( zTCK6epgYY$pgO)a=Xn0i9R1o};Q35VYdw(2VuhjkZC+9AV7GK3X|ji0F?0;ES=&}? ztj2i`CXdvdvsQY;hFA>QZo!r~;!_I&PPR~?&%CetWSyZs!~06wn1HWqeWjBZgBDB&xH)PrvwCYJ&|ZpXH3F@7sO5;h8oJpF z5p|e=EI&XB$~}vV?mb6L^BX-94}91XPvl$8DgmAIv#~+(rvW!~!xf2z9rojza1*Cp zfCjF2fDGEH>M1;1KKoW%2Q^)x%rKVPnT>+np?4mV!2IndGE91?_H_X<1iSU zWf(G1;moX8`4v%J_hrkjoZogHYXfsoXZgj$6)S%hlv=|jrNXN_+7mvP6uQpkTf~lJ7_+K4V&QZkDB$7I{IO= zVZ~AZKsFVZ?bZ{=tsO{m zrEXWnI?8YL1N-1EnbJ&b>V;;uYLG5g3j{?*?mlfY>zThC`u&!EWl1WTMQCrZ)v#-8yfS9|2tc9|l{lBB>!II8ahpm*Wh5GxOR&v8QWI z^J>=yC|tuSl);FNrqCrvt$4@|IOVI%oaSJ9pC>i@!*d^ukffP)PJKe`MX7G592*YG zcqXk{?q*4H+}y!I*Q#kKpM84J1oFE^`xMMCR(wv~dG@!DpgR6D_ne58<4HT-0hREfWLlpaAw>?;8QyeFAEo{P^9Jz6`?g@Ubc+twy@oTr@#idiFm`Nu&^~_Sf2*tGm@5jQ`T0x7Wd3Vn=R#-xb`gKEl2tyAH z=A_os*FrD3ggd}aIj&F0aKbFn@wiansP?vnPy6&~1*xv-$L)?CV3oUW`cPK%Nrjl8 zxNAy&@1rD>0~E=Xg=ms?JFK(x!YhMR&7x}HET>nWl84bl5}z~S?Yvv`fdQ)T83=F9!kF`P5^0TtM0pkgyu(Vo<}>&|r9PQ&cGzWMa(ts#=BTbS@2TaBQ~ zxZ~jEN1SW5*aa{CtWmqL|9nMf2;Piij6mmV%%zZYE`ccuM}26vp=RYfS8mX=hwVu` z!9^FZCUQR(tCl%d(ul`IaDz05uv8NKs%`^kJF>--7<=#BUZoFuJ8sAA??49KA~N5j zy=v{k?8SC`**2PN{zMrTf3t4IR4b7>#T;9%+yBM8lXHOe2qy%I zD!74(*bo3w0uFziz{eMjk5h;-i!I7^A06%)X2n3Wz5%ATA?_19sIgy{MFWs5Kjj=U z-VG#9+VF+kB7YC&g}oct9g=-mQLV#V&jK&xPPr55MGM-De43OVe!*c2E?vfE`?Tk| zfEn159d2(kOab=A>O@_WqEkzJJ2rZ}ykCZY=V|K)l%p7kn8==C^YtZnL_YOBs3ln~ zT)))kx2ZYp?GN`ND=g^W5VvD@%AWcMr?mW3wpcd1F&&<%%jj@!CNsV9m`5u8fJ1MITni2MUK8q?h6f?y|FXp8#uk|Tl;g%;m^#MITqGqmM+p%YjY@AiBDawwZ4IGoPsD=w9f5ZC*o5T^-$ z(G~in7FQrpdoIG|E?GBay-%7gLbev^v;0SXc3-csmZn9Ta<_Hh+FRajW!Z)~i7t`a zoXsp``1=XYchXQC3lhL-?QUCU6=PMLx->AiE0T4NtbO;5s(6Oz(Z3&ZQs_tz`wiu4 z;40KER8ezfRu``l-zeEywF+zP+!dRa$VO4W*mFe+rSCJ(5 z6HKw#*7shD6>8?Gp3m#j2K&k`WmPHt!dg#6u&|8vtx;#>WFLz5A=5u;78vzhSU(H6 zD2uF~dK#dXP2j=(hGXd0{KZ?D`N)AC>^o`1n9A$Z_{J%0p-HP(SwUEXBaOmj zDb*SN=p0~4f%o3Ro=+KK8>u>GL%S>$BBr+425&?A+_H)h%<)55MjpaKJN}&^J2Pco z%`1$8{YAx%e`ho7t9diNA@HYf2=?x2~vO7gcxAf^2g{_oIl+9&!A&ngm|c6pAzaJP;2 zmst1-xI$hFb{QgY^p$=xV7>S&zSTR=Zb9lk-?&MiOm_~ht#?TDZXQ+QA%~C=h~bB} z0s#F@_e9gzPn&K_@KbGKW72K=WYxto^hV#qtTHrCC?32dtw%}QumwxgtG~w1X_9{X z2}gmQ><-867_aJfgnS5(dGy}R6};5jQ4=AG3DFOheD6F_J905p8ze1=x4=gUCL}f< zN-83njL$0V&GzB7*LJZlOdaM>DjR?$^Nf?Cb3?kc^gwos6NaGF9mj_?y zfzaUMrk$W}aEnzoxK%Q97E{}p=|n@<(<*V7wqW7`tui<3)>8Aj6eg@j<@7wS9XSSO0%U1v|eApHx;jP>*NCR5`&rNre#<3-qr zd&Z}_%SobdpnAXP8@y`h8~JgdKnK59aAjqQ4%R!tb4&m7Uc=gm_%}$8Is1p7Xn2#q zjoy$`f8O6QK0dhU(!16yipSZ`NyjMmv;$@eORT1VG(dA<7=!1!69v9HZJKD{`q|^< zme`S0I1g5Nbi*&ox*w?gA&|nIoUwQNV;F&*MsY?Cc5Eg0&+#>CGjyK&?yQQA^#xrj zw9anLdv#?vp(I&mhK~SEBXXq`tV{wRS^%m;(%)EP!TI;EcjLZBJJ$-a#G4*YZ)e4El$LQ@lIyU*;T~UCkr7j}Db|EVqQYw4hlE zyGiXMII%Q~XkpDV(RSm|-|#H^kNIiR+S`uqd@B|%tV81rT)l&R2Kg7A6cZZLrlL!# zR^KBE{t?jc+k}RIwqgvt9CP5!bCb?c&u1oBiW$GHn8e_0h#k4}D=e6s>3jV}c98aX&Z4*np4!;MbUJ)+QWx2jqOWc`U1AA1n2 zzb>kwr}#2{Z4A@R1{5ol$U8C#_YP(6v8C)SKt_?^y<7fM!5f>aq7im~A#3C1fF1l~ zK}L9;zf)+xDt+V2c4E=`9|_#9sHZAePvCm?&IW?=u@no&|IZ4_2MEgB|Ei#T{7fE( zAyNbw*=Q7Ktoth=8JQ15RC>G+x?xel*7rL}+1bsge3RYRFGL`T-L^Si9Bdg?OG?yQ zr6}E#1U^OLQT&7oNldnC_#5xbHPKuntHT7Qd5d%o;`(;YI0BKI8O;VOL{EgIP=+3! z8C^L#-$nm7F1JVk7kj$13V0O6x$5a5 zda#c+Bd^Cq^Vt4e7N6VjYN-}kk0_Ea#jLhpo`z+SKiThr_jlV1%eTIN5!Ef%o7R$C$-d1JXa=nujY=x@* zrC{s&O2UOFw2&Ma@jSR#5L@qV%^ob;*4HEVGm*`eO;}yGuF(le0>E;vQ?<+Y85BoO zi^pUxY;|$b%;v}lnppj-}HORu6gQ0sDY!&@duNZ@=|Qr15EQpSc#ZG#gY z!lCi(=R&!AS#kfYGu`){d6T}h83<>OUg4-P9P2-A`IBMlA+-KY?nvYhgY$PZ6aQ14 zfDt@aJl}2SrfF$vPG8?~nJi;~v$_Q`S)O3QX9;EH{D+wiW#y`Bc+p!+txF&9l%vh9 z8j-A|p89FfZ2~-3XEd3v5sQ;7n zF}l?Z7y~T^%msh8t9BMVN)sC#Hphhj9;`(aDEVEYVRI5W@72e|PzO9xy?E4lJ;E>? z@Ten?eSbb>2I=gCReMd(8HY;wlfl=$$qs5$f4uXO|98{Fn-De2X1zEXbO@H;8meDq zgd8k8G8tb%yd)P#onOJ9Uzh88e0|AM3t-2OyM-G+wmLwfbJD%5t!xPz-dUw+rdbES z+px9;e++=wEtiF8xrKv>tjPU8Qg-zJg>IiDqm&cTV+u zAvj9Ds5n-Sc?ynciNXsgXV5mM@diBlh|9jW38SwPxV1)FHR`shz4`!9QQi6$qn07FakLzNxQYq z>=m+zbWnb;htMItUC_CPKrjnp>VlSn&ZJ6sQW{sr)#k<3bU#TSbBDX=ZdY7($;X98 z9bOYLNrz#wt;WP|7`org`4H>HrRu3mRZLHV^zcp%?~x9ip)K}uiA2$T&b_L1-bRQ5 zF*le_d0$#z*NKrao0~8qPNw85TYm9Ri2FDcn`5J-o!TJ|~>FWU|rRL%y{QYobb*OnY(*8|o z*9x{JqlB1TRN6~g+}+d^Q;@qg;=7b;hO!N0^;f4=uBC~B7E`~kyK(&@Z^eB~Bb}k{ zmuL%}2EW^yUE@BdbF@>=nK{*v45~17T~NfxC+kbSy`Z`sh#Da#d@z zx>2Kl+up!)(H+l#9QQiWN78GGER4IW(nxw(B1z;xBioZhpLG1eHnNZ9-p^I39`{46 zh?EqXVYPcG%ZOfg`Do*o>j>vJ(Y;>wJLm1DhDd^5!^a zqXes+UU)(bo?;7ofg0^gx=>HH5z123m7Ap;^Cws+>PLt!5Vdls>e+yS$*;JeJX7ip zj2YX)o}27tK)@UstN2kIwbNf2_eJHCR;C&{DRd+$$v=`j zNtL(igO!4;F6k!kA5=uvSzemi`4eGwZg!a)YD$v{Q#eLQk=4jTgpE0!1w{{uf%u-5 zv-lQFPwmv$nZvP39W^{DrvV5m7j^|xvAu}{B_Ao{gOQYnl1U(V=}`zk8f-Rc=nGc* zN16MhB@=kR0)w({0b28m*jJvN5tB#}$=GzJH%#fM%$RO62kJ;zBk@E7aYPa)d+dxx z;n>9apPM=&Xuptg0+2vaJq;QopH%|{E5H(0d(1N}<+(M2!CBg?@ z1XQ^bNN-OWj$>!?>^1w5HaqtAZGYM8g=Gv+fxX`0={$Q)F?q0NuMhgjtl$wQ z)bs1*M{uK4S`)o>fjj36i~DR?I9!wU*O>=KrDYJcIjYHf4QW+h&*J~a(Pq+6x$8CB zt=Md^>!Uprmc2S7A^1pcIn2-xW7cyOWi=((RrsRZTpp;HugV#jyeHlALK|VLva#_V z-4gap1i@#D5lAQZZWG?M6m!`XN2}%F@IaM1I^Oo&qe+)#$JaUs{=`YmWxB zKXp)qmB~#GM5dV}TBA|Q zmS1>mcSDU@b*SpAbQ^3CVlS;(++%G|L-jH<12H`%<(m&-FCBU zv=P0HG(a~S)==1Ml*fLLGzY(y{ zNW!~Y#xV4$_yrCT}ay7~tQ=)E0(ugvZH1x22| zc#EP{J#rXLNmc%^sx3A3tfQqp>*KqOi46W*I#niPIo=-Dw|=?4?kDT(aeW*Ax%FLp zC%afbQ0&?6fo5~Yjhn%21Zsq!&Pgyn$S;m8oydN&YN8!e5_F-qIcaE`kPin=!z*B> zTXIfn?fjHE3FGMvKt(1~;X&?`lMr^C_KArw&&w2_oyHGBm{1+TVwnvZN(r^*8i@NDT~#S~HfD z*i&$Z?KzmHN&Pr(T|7`^(Zl90=;y20i-wQ^gH4|=lHONlw={2XJVZ$CEwcCAC}k!S z^>%>K5Ot1%i!iKLq37Ru6edx;GoO^bN_h@-fTS8X|3+NLR74cXqN7i_Q`!OH^J{qr zX4Dxnfp0*0B8)N@BcBNC<#n7c*H_z<^OgCnw6y<41DMOO73nXAo{h6D5Luo|w^ao= z9+FuQPD=pB8ggjPnTK%WG|KLZfGJu76{mc-jDwSNb;rrocl-ECCg^Y#E@JlH5zf?- zIPIIUh9ifwI+`Kai<08k5yLCiwRp7gLvH*GY_;KCIa5Mv3M7kR;!POugN0oWX=~R_ zcSy&b4S1yM^SH1;yYpH-)Z-OifMI3L#X?sw@f)gZUl}exfghW)VyBe5Ot0G_3u~Ro zt~VJjaSgn>&nfw>4X0{W7J zV4IrXByTh)toj8K)ddp3rQ82_lf2z69v;4g;I&$?EJp$K&CmVv&HcF@2V4=I=TJb9 zyh6oPc>G=`i}*#vl0td))Fgi_$T_d8wSboFU~V2a1tMhmLtZ7!`K77&z!+0dXMF|IxwM_T^% zopJR|^zqe50mS6dAFATOhwGcwGi7%ntZOsO6H|W;d^qbC_|36~TlgtrqZA<)+523e zh7p7<3%s@9TS9Ur9ZfofovNBWS&qzS$Ys2cg=tK&7YunyPy8I5oGHC)Cb`#{&} zc}QsB)6k=?l`plKz2a#Y;?d+3rz7nB7&w6TemS_nMJ;>_;mLzDyEgE*9!6SRrg$kA z=8yua+OQA*#JskECA@vAP>ai}h%kE>1&M3OLlR)PNfX2*p)(d3p`2?sM1!=bdWJcYcwkdsgfqrIVlb^lIYAHfQMoY8p z?8uzH&&)y;qs+*hzu(v|JzVTty>d6w81P~6yNi46@SZo(d*k4@yqEdDBtw2tI4hZ= z?FzI6cFRENS~1>*fLEO1b@GX=DUFa2^a_^whzwH-HSj6ihCYQAetQTlY91!_1W`mB z7+*OscdUB^S+$QR{@_RO46KWOwjA$PKy=<@XV?FV5H?{0g=2wO-*1x*2>j2AUr$n+I+2a1;!+<3z%}v)*CEzMM`&T*1_4OJqQsSQ7L^&7_EL=(auPUVbfR)MK z-F*Z8%hXKs+=rB313fudQvX|CLMrC9H!R`z_#A9U58*j*+}Y_?h@SiP%ht{$X)dr{klQ z3@iRhMoctQq%t@jc%IhA_CRPV3Mo`Yc{OGqHZ%~NAq)NGTFXbsw-%?HU>EeDT0S+$ z#T&>Zw94XvNl_#Q3%^#guAdK-`$QXuBZP`KzU`)s6Pna4^VrB3>~<%s=q>GTXSMtc zY~Zo@nm?;7OQTcpsl!bcdUs>@jY?noUnfUoMEOZ$Mahdt=t`Zcnkv zH@tl^+jqBDz~0`4Z||?ZeF$$KuiifK_R5^!-Db}-yj?KacejP(?`5LRNvix6|#^D@1{T8^~z?5aM$|Ij53#Zfk`_0c5y8OsN@`A zxa@b>LE1udXXY74pn<2UkJGZYp*Qk5^k}uixVv$(9ApQ35!9pIfkWS@?@oew)RXUp zVQ^|bSTp^%0ApIa_!TCp5AWrWhZ1w`|- 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Ð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

p|0FO+Gb*5wY=~nCD#>|Fz-z`Vei*e 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

Rk4p>pkX6E>2m_;*-uPOiGCWAkD|*v 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]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

Rqr2d?`*4Q*soJAlxu@krL>_$9 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�fA3EpX-mhiS=$?

1 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


PS(2r9svx6yvFvZcrFpKF~`VFz_? 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

xjTb8b>*<0*;DkDu(S-9%?{1T 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�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%0Ad=4OQM@t)9_M)e+4YAE(Q?2zsoLqSK_ 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

~)U-=gvj72=z$>&Kt+`#=^h z6#GQ${{K)|1s4|f!gB1NNS60ud(=X5r!3JH@E4}Nr`a*BkCSA^uQE}`9CEh|tI#NH z7%1_Sn{?Kmj)D2v!q~+e0D{K`@f!7)d#}%B_)ZE#YLlL&dfpL%X5{}742q+FA)H?! zGyeoc_$@N?K)~QeZ)jnouH3OAvUt)lOuR&=V;-jbO*S=CuH6G=D*+Q@=GR0N)OZCf z!ia{2d26TpO1Io<#BCM1RF~Z}M@N=rwm-Bv28FjC_o*Mp4e@(6GCjr1tabkXaG~*Q z_R-AYIH%BH#;y}kM|_2D_avdzG8b-OR+0HJL5Quu63KWs4W~u11Ls)Zl;NvgL; zh+sFKnhvHNh!)@Y`A%q&UxY}?()`lRa!1VQLh|zN{lU=q(DLY2bhw`GLS-UIL4|m@ zJys3~$xi}5)N;)c%n6Jg#p&`s(!JLmV(B1v3$S1&+wg!9I}H*k!UhwI&ld zUdooS6@kfNyd=U!xe&QzwI=0YI%Qfb#Dx}z8f&>M3QU~ynkUe!ZLvW_t(JhdVfr7p zY`qJ?{(lS+O>5g#qMM)ZjN#Ee`4UfLd#OAfKU|6ZS|+@zvaCfLta=!^Hp{hXC-T5~ z+`CvnQ{1ztw2c#GgTfzTtyma6G#$#=w7jr#!rFU~)g;oEBV{S2J5 zDe_=?_NT}>(0w`O&t$K-E{`V<(6CH$HL~T@r0RC2=E1&Ib$O@J@kuaQ4I?p9qLHRK z!g7HfInzI?+!`R42|IN+StO%SUE-CUTTvOZP7Ubxh$pC3YTuudn-%t@%Hg@;9dbwT z;ctEOm_f!^&o0ZZK8H~o-PQKy72PMHT+c40g##iHkW+v$H;1ig1ssW8WC|T%aMPS$ zmn}#@mD1VsJwXy~Dg|Dg>zWNib-S#C+Tf|2TDmyvdnwGz{Pb{wG$JHi?3cYaf5*z+ zzp7)GpHIsOd{4636WJ$j_QwxbVgsUUP;naPBoU*IVp{clDzhFRcby7Qc8c$%Kx-Tf zW^_=1Bm&r>#AuPhy6ksy1kLzkMhf7H*(vkww28xR?KUc)B0tSM`;ASXzMCxCGtmFs z)r0p5!goo?FQ4S&mk(D$zn0D}-0%fe%DW>oCk4x?C)+il_@_m8+K56BAPdAwkwt;> zU5ruWLa~^ztWRrcl0@u!KMFfa0(=^Xb!t3|AzYQl9eMwbF}5vVf9PMLxGL-$(95_7 zF}>_6`;Y(G=Mo^_&uIVKK-b*)Io87?9NN?3{Tm_p-jRQl-|fZ0`$ndV7YAOec=dD| zpM+76>r{(N@FIwbBVqxi2UE0FPDgE?2jOhf`n6bt8dijEnHm;`n-^PF9o zjtxZk)0(#ZqPgo?gI{st?@wtZ@b~jRZi2c4W!+Ww*A3n849R}{jJHyM`DAFg7WIV% zl|y<;>=~-soBDz0vMLnE^@=mK$z%svBVp6j^_(OfCS~S0!qt)ut*SzwqP8J1>24E} z>SUaTi7cA%0VjTdT>cBuJ8AJ?>yMR$?+{hKZpVA+R`>id`WL9oUzi8*RtZwaDed13 z`}y%RK2pK!CqrkSRb4_&YRz>FXB%Iu%`L*<=qYq7x1c8hk;Xx5fn>B}1ZK^$UEugf zL4!5bPBM4Gj>pxAnZOG~Ejwk4xBx^zyT9QKvUltcz(5<_k1pkcuimTtSRemeU4N{u zznm=ZaICx||3*n)O_2i}F5v1o74cO?hZsN3W(Gp;fVpNO0zglzW^+^vo;T#SDwnR6 z9$ghiy{;qd5I5LOgaP`vL^|y>hRo32ogZp(AuA#6FQ|0i zY%NeyYdFG&so&tDkUt>QM`{P%xcqss%?`4r;+IG6Y?zvnaA zCthAo9xl`d1c*#-Bxf7fCE=9Y$ZWfT_FHbwS1_C`h%K!|2a&4*Da-9nT?1|=Ejmye z0W74?j$39VZJIU<9fJh1H4~jXD *vOE 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�Wg8a#MGNYbI>osI29t&0yQzf*09S`k(VjKwYn7tHtP zi|7h=>L<)cai}3`b!adE@-N(fEwwBO1Dxr`DALGNypAk)@nm zzm#B_{7kGOhA5vg`&bCx;N=^UxILU@KHo#A>n2;|6`OFgWgDrH5^_>7jw@#%^HM?_ zJP?>gNF>dqk)5-L?xm~!KTNX+JDCcuZ~6~dFxs&|nuU}o&0AJ23tDaDrWt+&X<)Eh zR>#FvN<0-S5IDkvEyy#2L7d0Mdv8P=A0W^S3ky6$>l0Jsk|ABs` zZvFsf#E}M&B|%b|6yN6=u!0!v52;1ak-_u%Roh1`WQOFMxTbP`$N|D$gR1ij(Hu|= z*B&CWkf=1>404AqbxwHRY5U4-yt1U#V4A9H2v+<3ZO}vkG6PF)N;iFFq6H#IfQnsUD%Sn{6qBwhg)KEw zhm$1VV38OM&nP5@K>4>^5O6vP1=mQo`75NsXDs?$l;gAjrMB%O<`PIY7skv* zcN1vbbUp+B-aDAhDf~doNgTsYJ8Cpms=%#iOQwE0*F6O>`abeefC33;XASE1%#nw! z5Sz`S)NHyZeiB!&didjoL26)>i9}|7H-DJYb}6Ky%gs^ODDR|9LcZ2$DGI>eb?GeZ zQZ0_~i+B#m1w+b@I?*FV_;ow7{Jl{l5l=k}lW*n;jAwB9Z#{;Eg3l`8OQ|h%XzODb zoM3pdIo7GqLv6R>t2h^*g;^f2ZE2V7$T0*~5h4H`T{BebV>fP=*~9K3I&&rD6S(R+ZUOj5@h%!R_g4}U z90_&5#K(AuuaS1G>LoueULd}i>C=@`swR1tGcp2I zf1X$)yVBU8$sl-oO`&W*XL&Je?Htv(5=YkT1@ee_p^^Ib)^PHAEM?Yqw)l((UgtP! z-lS-lL5#&1M`Vz^VN%12Mfvy2Li{3+fo88@4H;PXo_IUaEYgumE5K_qG z@q$qaoYvgxAL+#KJUR)Khov-X%LBit?D_nkyGKDOeLGuo{Ld#L;07+S;kmXcUKB5xb=}3}xlzSsb{WITXC&lSi6HOb^ zN(L(M-q!%c^XJeUTs)k@vSe|jAWo1Po5E&IirlHX+Mb77NdR(J2 z2bzs2;Mb+5P$|c^DyKQmg^+jc2E28EpAW!}z=dX+{?rKRNZDbZLiR({uqJ~yX4M&~ z77NfVmwda%c+P5S1f8&p>(W<(tM0l5p9{Mm&+S*7x(tsq<7kSoe%X%50 zp(z{ljCnobwPayiSFA0k^UUrIuRDdX8rm_U*WYvoRRY@^a3$PA9ITYUJ&N2ZEC}-l!7o2bS%f0MgusQW?Vv*&oAsU1qB5IpaEB_!?41qJSQINo1 zH=}nS*w5O%TpU14I7w}{r$4W62uWmSQ9XdMgkdK`OMK$Z8~nYT81A6oT4t`jWtB3$ zB2@*-5$HW``mg-9MsTC?>$sX&@W8(goyCbA;Am`lM7XZ;VKcao z0r2e-W2;~` ztgMf-k~5gyxPsF79nmiM2yupd6;|Ydptf^TynkO&y!S)_y_A;6`6GM2Ki^!KclR=ktRX<2-979q$W|p*h|12~b9%MsW zCGD62K%^O-jid=t5c^w|bFf+GrV74TI3Et!D$SmHQ1c4qXh8y5!KyodjrV7=@O~he{9QkWc+H8QcypRjp@JsqFwn4w!t}% z^=zt2zHYy26^}%n-r#Yzm0jv52b>jlNFst))!>w>vVKzLIu6EWf#?|a@=Lo22BezK z^c`opic!v+WfeccuU5Ll;cqpi&jDtMkS?aHYys3WCn*kYUUjd@sYIp97lvzVH zh{B@hb=qw?eg({m^krH=75w(O(s@SGddL8$Z$`m1f2A?edgk_?;4^>+3;(-%11%dW z!=^9oM9zJ4bbrNF4j9$NPIW#o{gO+70TMS8C-o9Jyno#}0kOj=i$%6hifLjkbIV=< z8t|S2c|x`gsKZ%>8!KW;4bYbado2iI+o6s_R?lkL!5bIl-`BNtp>~Zbq%nc2Mzeo) zcMH3CbKm79*wwS^G@ej6j1>aBM>j<88w4dR1CCa4X?6|LBD#WqMnk8>jK0x;PTTw> z+ZJLP3RmE=G)&lfgK*TfbAztIaI&Fxz0*(@)H%YA-emhKm`fJ)+92fA^UxSYHbh!- ztIAo7U08Xx0;&V}er6s7vU6!nuNb`@(+IjW8gWVQ-uTCO-(lx3x{Q~^C}vkU+|YAq zlxO^#pk0t#jnI{}W`NVQ>ow2H61%Q4a2(E;IQp>7%0C}-t6=cUonKEFhC5x@)LB*c zAa++uS1<{slk7@44c*#SbylwWbWljU%yanB8K2LW`sRu%D@5+3B1=WT9s-{e|APjr^y;g z^KhLXMg^|4M%HgZZg4vZn->s7X}N4?E&9C!6A1?H%?;0ZSd3i83hF1M))-6K&N3{( zhm~V;vw4*N+5AfApL7`0HyC^aKqb25}6q&Ipyi^v&)Y@?7`u$ zY``WsxjC}WD=dW_)DyB$@p{u@h2PMeoeQ8bLu8`#4DA(_D_?-CsLwis@YeL?)|x*J zQdL)FeY(GBeD`ChcFw=np0{30a(zQ%WP*;yq`+{|f#`_0Nz&fi^0RjyU>T`r778Cc zaCphYS86C>j96IYoN`63HLuD%%)zHQSmUJ7)Z2&O#bQKgr<(>S*j?=vEC}DFUfH^P z!Zr(^yGp(sF#F=S9$h4Z2J`+3yb*Uo*|FEn<(?4LSU_x{Mw2shbXm<)2cMZv>TUc4Ur z-}vd8epzT+tZl7t^Lx2?$zA0;srkqpoo?dT1%Hbs*P>RJS8$tmkFn`!Fv50{EyCaI zNCAj6y_N5p&=@E^-s7!v@q3-tIGPFVvO4>CytZU~^DSTBQdHw zs@Y2xw@dR`MXaOS==>=$zIv>Njw9LsCyu`zKY#2W>%WD68A*o!4I}hlXh@xS8K|It z7&&o_45fsszJW@41qsR_9IAt`BnoSi@AfQ^KA0sSAh#g`HasDW{b9%l zUqy8{rnpUK96fKU&M(xAzG21w`ln5(8u;R4n!iFOkiVNy%>SG7a5OP?F*0%dPZU`V zhQ?pb()&(dAY!QOpz?`<9a!U_4D+-O++5=lY{0=d8gkPLYQkiI@*f{Ox`;%RGk!g! zhaO^7^Xf=jbu;Li^zjLGhgs9u0bYX&_q^N!sLY~lv9`zgX~(Nqcql8vEN|p~GAkk> zXF^{aEBi6uR1_4l^gyZ?`rd!1`!mhPjaBOr-J$nTbZ-@GH^_MU1DZ%RG!#Y9ND=hx zoIvb2zko*w1A&^JA`)r+nrxJdbGSP-RK^ZX)v*`ahu*mBR2Mjrg5~w z#{{*qvwEb<HEs>%m zFI5F9BT5W|S`rg(WZ!%(t46WsDTg!03y17VSd|Uo^ByspsD+hfDA0r5Z{pj1WJT91 z@GYQ2{#e~VkJZA;xu3^@RaXHAk_5_)$$@+XQvIoM64rp|9*tmK-j$MvlYym}fm}4U zH3w=o?J8`lz7;eMR-kCLhr~ts+jRO{4CgipcHtAf<_NoQMAu{-UPwj;TxiFmyyX%L zad_wa3S5$j&$ehrcLdamTc1#V1uHObt?v00M-U~LLT&6PMQ}s%OSzAiye41*{*+Al zqOsla0DL6rQiWs1n5&%WTC>++%}gko49l{3u7#rKBjoQmgNu>1%zRS=_dZ5?t!QIi zDmVpegCR>V<=P0&2P{-Ux5}_JM-4EKYZnfV8BaQr;XXnw%Q+Liwb&;{z2D5GYle;4 zTPAH*F?ZgrNA8X-jW*{2kx@pC<}M&M<(n_p+v|Ud4`jol=SjznFki-<)#f-`Zn#JU zekA}EoHX+jw`AAqYopYM1eCAVTDE0b8W9Utm2nq4N8U*S(Q@qWzq}dLebx#PJJkj# z$NZXn+gIf=b!9OLuUcLWuK-zART1?ksa9M88d>ZTyCKg|opH7*;iFnW^_0>r91X7u ziA`$1oR~gclp56j3@Vz~kBkxN7&X3Z*6H`rx9uJ+owr1z9NHKak=Xh%MF4=iPOi)e z0{3_i1{-H^K4Xv9M6a@|zxIk}J!WmmGDZRs8ipEg_%;6ITK?hjdwH8Aeer&^UDY2f zXiI7Fh?+6}mwFP(C*04OJh-K@D#RFy9TouIX}P~xTHYcOt}GVzV5bl`Y-<^R;v`6a zzE^Fg4e_sLYD6=H8*$~qA2b59%FAQJfLO2)& zN(9p!i_#rxH2C5j3GX(x2(Qt$?OoaO>#6AO1m1C)mYxHa&+mGOz_1hPc4Ny&VE}+-SY=PjlF_$Jkz^E%f6(~@+?Xq zH&IMIJvRDX4+h7$6=Hkvl<73B-w@Cf&|TJhN3baKv?vSKqjRfDHQ!moKhN$QAw)0- zLv*dJxF23q=Q)RN%5r7NCv}uv!b>k;WbSr|Q3d3az>Pu%>^l{^G!7GOWsN5xMxp7@ z?DIfy#Ftl~>QXON^7sTjg8OnT?|A=tWX#6X-wyS6Qo}0*0PwGF=={S&=)cz#&0t&D zZHc}*y-<+~$H&viaCPNTE<-xD%4V^b_w0Zw+ek+dML~*GavzpQ{(SZR4a&i7yoPm! zMk(OVcAL&}o2$QYR7qyps@Iq}%FKI+p1UkG)?%fLB6*V3jUcc~UYyoQP;<#%d-PEy zc4%Q&F7n(ARk`0cL2Xpg9-VqRBtG!SnN_llpNmYyV|B??LBsC#^g(N6(ha+o>4w^{ z$hc1=JA9+FP_cSmAy-B>tG{SGobEPaMQ6NQSsH>vve-=0vk&d#~1o~4x z^VSgPGB>6-FgmC435~#S7kSY_45d%-F)_PM4jn4dKZ|APx9DZ z4)2}_WXzYbrjoFiIu7ptAh=oM8_>;rHAVqRsEPLng88u1-RJa;=qp7{*W zzDq-8eJ*pV^O)Q|&pt3>H7Z|D1@T+rR*o4IGAb281aVMCX!Tg%++r5FU_sb^Vv0() zS1{sBB=t9%8Nt*C3pY!F^DS_jf+oQnGnqa-EiQs(r+OGU|0^lcfT)#$aNj zIv}xGKj{~W8LZj)jAU*NNpSM72eMIqlvU`X;ota3gCAy^bl#9P#i)~gCBw&hXp8#9 zh+WT{vBDL2i{>_7EqRVNhifOTCNu(G%|)E;UeNnAQ^6O^1)b^k7b$ zR+e2V_jBzo?9^(~lsFiW16Q%`i_;9L0iYO;y z^R+<9xE?Z9P{{|sjDaIVt;;@8wFLEzQie4psypQI13Xh$)GTm;yaUNSbXmf)my?=2 zlIG}l@u3}Daq12pC}f#nTo4VoD)3ZcxN)@}9N~-wT_L#xxs0P;OfpEP$M!#Q5Cc`n zxb+bXnR-EbVn81`f-#Rn5l*woQs`qLetv&QR|>L!j-rEc#Wh8`ZA)g(MG5=?ub0d+ zr_&$&-RwP8r%*LaRqt9v9zK2bp!1uF7|A2Mhujo+(hJ;>b&_9ZQT&_Vcy4d8iIhb$wl;6 zT&MGb!rR1cmQL&-Qbj^m|8f(feWZmW)FyfI6>J^42qF38G=kxHPExf+mU_YY^HtD3 zgEC)o9m2yAF04Q=zOS&#Cz%;vy;#82D8o!J1`XK4m~px*F4qto<0oo>L{GFCG;)Hr zv#PTF=@;*hgu%N__i=#1#{7bDr!sTSjB0Fo8PDEZ%etWbLAwAPfk0&vffxes$JtUx z9lo!=7^{hh7QFQf9R;(ua8;@1d-CQND?KCoDl~izoA4Yi!?jkB1*0kY8ymBim%U$+ zy$v0VRKVtL&315q#LRd>c$E#$kYCn`{5Xp4n6Naty0;M-RP$V0^(3K%sheOG|JS^# z_iD05&#j0R!W-!l(lT^OEu4{GK!q-+wf7fdV|_f6L&U(;u=D`7qA59bSdEFMoki;; zy>E&1e(CUv6!l>+V&Z!DL?eHZ^`nlsiAFtE!UP{PF1-Od1I+%jY+&Lx{&8z!yo80t zxOcd4E_-3?^6v2l08%{}kR!F!60cKxG}RBB&ce-`PQa^htO&vOunhyDx?XS&&3pXF zZhj^Rhqh2gIZ>gBfgfR?$|4LYE)_&g2Cm9<9YH$UznY-o;cp{LvyGLyY z9QPdCmPqD;!M=2m7tSl-t}_-wxmj!ENKV|AP&Q-)Mr@*{4O>z8Z#^!Xr~ zt(0&p+DmQup_kGy*5w}d)S8~4!jxLS4>9AQ(H=@Gl;{Z9Qf zY{jR_!$PTmqvd6_bNy8%f?cy3L7=o?rHXI0IyLNvOH?SLC*`!Eq+Ow2tg57-aTwWa z$fa1@&o|-*GQzAxa@`Zwpi!5@K1FT}27!Xg+SupX{3f~_7iZJ-m1aGe&ZL*g_)euG zO{!r4KC}m%Fz;XR#sWveQ86dVW2<&sU7M4vtrnS*6*qtb@@n@-qoReEOBc%<=wlKf zRgKiEGEI^{VnbD)^dU+hU=j%La8MW)R?_`{s03-KxzvQKd`aM3uS>nk5ZFY3CnPkR z9uHZgX<0h4h}k<~Su_WA!aEe#^Gu~Y-Tv}M8V)|XwQ`qBq6(|V{S7%rWq3bd^ZUl- zOp$Sg7a8bl2?oWqSi1r=v(y~x#GWf``mA%S&b}0tR$e~K7l~!rHJ#1sJwpmzJUeS< zRy8`U>(78uh5Htz_^xe-38avBMncOJnhz=06+6FrLhuw1g_Y!~h~+5%rcB3@qZnrz zshyhjf))2e0$}Nei0J6wf&D1X=+mu>&LW7M-iYWM=nStMQtd}0%msJ``Ek=B-C7w2 zg|SmMZ%V1%RIEm>)DJbrifU1nZwZzPqb?NjKUl019?DtytVggmRTsB5oxkG3Z}v;@ zPW`f`7ZQya!_pygi{@v3JU^4zZG>QeiUN0UVIk|-McQe-;tAZ=^4lwmG{`O$50s5! zf@zq?s{XE>`r^aru5oV_fNIfLI6sO_G!J2)P%z-^G$5UK+-g1nyRlF5d35?cWN*S! z51k`k*ndlYqZ*C*TE^zNn3Eo=Q^qO3kX0Q8=U8Sd-Vrmu^^im#qkPmgmNnt6-rj6T z!f&J^m1g!LfgZN;1h{0~7 z;d?BN&YCd=b>-3uM8HFzA;UFU_ZP;K+72wEPh5)qSXHb^gyK~90;xn4%2zQRqygzu zGF$-3PkMl-^ECM2q?}OBvd)d+hVKot>WyT^Bwl6&iJVFr0ywue5S%FHT-_z8*L3Xi z{IU7u?ZL8;T*~B-WZ+90=a(%dMoyWA=-4fe%|d=3yvc#yCs;rM)6g3gGqFt{qHlAQvy1epQ%+Hvj9Pp$y7TKc#^$Q;)ll034V=Iqy45geWi{ml=hbp)&6gASmjhCZ zbgOk|vQV-dRABd*8BLL*vHG{RbFMOw*cdq-6Ov`G6JWL?1;I}l&4S73V|wFto-4MB z;Ell_VL{=zY&|V>wCvS>Cn6i^#$eZd!fmC@x5YgFHB4WMoe6jNoR|J71WvmRV;88q zOCj>{G;j$Rpl(!Bf6oAZAgyjq6Za8#l#BbPftQz;fd0*7gtYrhB}4nGsz@U0uIM_~ zT2ki{lu3unNp-r>Th&q*_h>slv%PJB%Ai^NML) zX#l4d8Wu=$Q;fQK%ib1bkfTBA$iqZh*tZ(VQ?%C;0HEEo)>JL+cJ!8Jo01X7Jr!9i z;sV)7{eE?#my)M5znIHC{CHN7MwXT}+~N+pncUp5ZS3KabX)|z+k4Q;X#!L^Ebg73 zA1SG5kE{`7z-!Oi#et`??BVq2PZKf1U%sqz1K+7EcX=bnegre$wzVa#EOK2O3iY0- z=XEm69$?IO5i)7D<4!H~rJk-C(uVER&ZV{28tOtfWZ+M+>lVrAPwz#2_X(9ayN#eG zgVyHb94v`Ne-HV6CB5&@QT#YL-+#OH;R*k3+#U?{<1KN6uR?!oaQi?PiRVt|C5b7C z3l68$6|j=&2wA$N2#d1OFL=@QIT5;YXIifp(b;VVW{-SK&3Ugbd+SL^x{~b{)~X$* z(sCO#y`V0v?mn~L0llWa_~bYhZ(}HsJPSWP#b5cbxa_PH=7Vq6;RU2%JdZIbS*90*6S1 zclWX-T)|?l30S=_=_#G`tJpwqU4kynPBc=ZoG{Do<$zij$DZUpQ&+QaEpMya8?_o7 zey6vXE%6xi1lC;3th?0cd?!MfI6MZ&PYO|bU=C@D^25AIE{89f%HGEGs&VfE+S!=y zcY0AP8h-cS%_y%Hdflz^O8OwUb(-)^#F;T6ncTsmUv4cNAig?3ntDt~&Fxl1ePR7A zD%*Se%{R}3yKwGHOl*lxITh@JSxA?=3C2f2@X@%NX58=>nXHAz3?XEsW3BLX09j`? zW7j{T;l@}xgCM~PS!Qk-8wi8`S0#m2%WBgyzL#wN-;T^qw4a~+{oen~|BDzg%o-D=6H(&QP zz~UEWVA;%mqX8gk3r1~asSsPYJ>Y{6>3;)&SbnQQ)H7Ll$hO3_8!s_7kL4KZdFwZ{#7p$|)aJmC{DPKaThDLQK%NGtvQ?VXOh2xNHD@o% zaQ`!x=noRREwba!pLm%?g5^n15h&Kdd*t^XuwYWPCx#Vl!5kjfGNn63&KK!q1nua^ zyaHwc&zIRLkr@8Wb7d-8rxk8Dn9qBtGP;(KSHgn4?a7vkcE+`ACW%a8hAOWfmmQo*P;k z9+1mTl&;!4D#LA;d-z;r4b`hVjr#VqT9VNMEx2+~uCSWEA0d6r3ipGb-TS}mYyVA) zJ#gfz)be-o0rtPqV*i6>`Mj>%4RNd3msh)4W+UcD)(nyJP9CJ}7IFo5o& zm2uMp!iR=Cl}FVcc3NGfe_`RG^f3~k47;`u=qMYSN{1609UvIX%sCsuovwOF>}d$| z8{E-Tjm7Xs%7e7#S=X7;_9tZ4*{gc0{uS*Zt6b931_h9TnrRkTHv4zqfWLXMv6X!`eGWY1$;~!lf>&%eHOXwr$(C zZQJa!ZQC}wtS)!gS2MHsduHaH+0*Acd#xw`#=V}%$cV_ui0i5cr`RQrbWE*waPtm6 z_)hzbjYDvt-_b&-%^;^<&k z{H|t@J{;XD$g7-^+yRGJc_USC6NyvPuS0$&7-5($X6D0G+ttzWenM}uXDfM6Ef>YF zKLBz6JeKv_J<_iFrl!UY)P`2(#x_p>uKT)SlxW5I^R2Dyb4mQ}+tNQu{>0cdF*kLj z{&)7L9VH3*2}~vQ#1otXi?oHebx1^#f*ojyEcsL3;VFX1NIq=}`WmL|dK1~ira+Ee zD1t8FM27|sSH2yFPN$F1;8eZ&&KUqSD|2bfH{=y>!SyTS_d)7pDxY4}IpZ^=a&rjf z$vP}Oi!`y5Bi#DR%lYc7KR~?ycBWW^b9Qh)ah`&}004e_tnDBF<)7XbtCgf}v;H>X z!0r#y@zRQKU0kNTgjFCkR(IA11$>TTwZbCZO!>JEWs5o*jaNnSzD$RpZ`BVMnTK1vG5RRtvYYz zV_?k=p1<&%{e0@kb9P%ORdi7G_+(+==i98V@NwpyL+cR$@r!>7)>%WN3|_Z^f;qIl z<{W`{e=ahGcR>F>SO~2~RmUYvhqH`JSSL(%qA#IN{ z6)F&kBM_vlBDRpKWe8LBDdh)(@G!9ga#PUjJxk0u1Ca^=L6y44QC>e7@aWASBhw)q zet}?k@~R0G3RE&=JKs;Dwx!mc$BgyLu0Ni%|9pUdd%(us#!26e+RWV4%<6MFeX_9syHgCN>(USP88h-e zW5(|SW;^~1@%kp8w9nL5w)#eYKUGnkz-{w6{VU>`YarBwXX_OZtxzJCiYTSmi`P5) zNK#eM^_C%T5I3);0txA}ojCNQqzqBEYg~8eEz7b=HYXcdhqGnb7DdC7 zgp5l6awcXc=f^J%=C1pQ&7x=i+jDd+jxa~pp_r`sgWW~H+*6AUTG90M250~10%r_I zZoudaI46#khB|qtfp=hQDSqB=Uay8+$XP*$72`%h{);m$YKJPC6upKLSNO<#YeclU5q6#l z_tL_!mg9n0V;|N#(l`ucL)zdP>@gu4oiU-@Lw^9P{CQV@7u)?`sr^4s&5|J_BOHH@ zbpt{H04V*goBkIY{C8gx`)|7vv^DxCu6Gq_+fV4`u5(p74kQJY1W#Bh*9|5qu#dM=ahR2A?^2*3W`)iV`oEW{POahNiR;qAIYm*~IE6R3`362P+k< zY{JWqoXNe#rq*QKse)I3nwH=oY&EYFn=r5EP4B3CDs;gvJ8;v2s(1`wmtxU#2$ZRLrbD)(BQUdT4t$_6%wU)=`B8`8#I~@jojR_+v6f4by?W?2M z%pKWA_W;THy)46H8ZS0_%#7QpE#VMR(Dyzg+btS^sH||JO7;aR4yB76i@-%RtogWl zsxi;ItL&QDgic@X=R_vZR1bF7Iu2yU`s%o;xw;UdR4+WHw!E8@nThfRCMk3z>mC9g zLBXd@B6D4*9+&>|cp}sDe(JWGRv2cFmog-8@(Uc95NdfP&tRx|BtjZ$JNtbE*^rCy zUY!w7XJcNdH$yo5^HJy4sW-5N(SV_RsZ*kDddsn8va6*MZ)X%JAdKvcPLuUzV$>Te zhYLWWi8+bx5D^Nl*u1{!Z3%eQ-C6AFW^p;@GA98u?VU9ab!t43&q-U(@I_fo036f& zC+ZDrA=e_|+zSBKqI|8uOuy~*K|Gv$Phyjf58rm5#OuDcfNZW_%46Mzk7ghcH;#sL z6eU2&gSpYx+Scx68N{Zn=x_gstQq`p!6A6E zMN5O{cMmL#Y+sB|e&Cj>3DrEcLVZ!6Bts#^I@opaH}GQQ7SVZLdSD>L4eN3romw1> zGus~sJseOkG$i<2#(LLAt zjUIMFGqC-{jftzhfON}EGja9utlc-7B>;PEsJI(w-(YGBK=9hJSgLdHCgy zYWi%UaDb}x>$1b+B>DOc3*}aKZa1FIaH{6qg|IT+Pk@ih^Z<{?*YwZMy;fw|9YMuG z4T&6S9hKC=pG-P9*euJ$8oJ5%z3E<5AY2__hFiL__b0j!|1<&GfeN;>_?ZKSd`1zK z{~ZS-XQgj$qh##nq+)LDYV7b2W7fuUf5XbWR;A)t8*aKLX89Q)Corl#nkj@Qc_xt$ zG5n!JKFGqvIyG(Rx~PJz7p$8@E+U=92j%e)Lx>|*5oYQ_2sv$AN4InFe!EBBsg`>q zIvJ>35CyGIJEDA#waNt#FuoRN5ViOy_T)DIAQ^>?vS1=57lyH8pe9p-RVN^G{>G`1rMadYiAT+_voHD9pw(WY!8U}R0}T%sF( zZB;nn?_-l;UZxM4_ja!c$}y4YP6_M#kB{XzetlK$pUNEn^xA6wI|^0&t3&_8Z~v1@ zKSyqD13&R!PgK>iB!u^PlAY&iIHi?0HW~#%X^aAT5eSC{;O%&}zc#y;}eEUHJ0q*DV;`t6j z(!!m~VE|_!rYeuo4@GM9AK+QVh_IPB5+C)j5QqU$8Ofa^3TX_c{7ooeqszD`4p+wH;)Ox(qe zEKki{-cT)#KUM`%q&O&o{{Ux1lhu0!Ip7X#{y7Wd98Nm|i&!QLXf;EE{*Klpd~X4q zW9`8{0D6Vw7DQ9Q?v6w9bj5tRT}fkM&nv>9_R@p;)|Fe;l4s4`Y0n0;hH9wB+|ye= z&(HAo2lL?Hly4G8Z?XF6#X3IkdcTbh@h{RO2U}YwYI7S4V?(EZXr9bYkhTHF|HQn@ z>d!bLBYcdf_yMx@0K&wEJ`X55tc)n!=6UmuM=XglD)Q_NhiSEgdAfJsPlgaTF`NNU zI|y`j2(mYdlyB$+hJHsK-T`aK7OkirVC6k(Krfnk#PW$C=QQo2;*vbDzfLEtMjnsw zvwapsqbWH#%o|ZGI9Y&~{drdb(Hv1VLypMg^+Q1!(SZ=%?h&zlGE^p!w@#9 zzSjX3*N(N;D=wSlD4*$@|=`WHOmHU0}w~Rli zW&WJjiv2&B@IT}5|1qZhkDhW(;`^Nb=ZP`;JTcn;i=X?S-KDqUgw1DbaOWFkGZsNu znPZKBQhDk&MzOqSvmSm*nEgtLbkOq?MgXEf22PyS%=E=Y;E>m}9_&oUtVZ}D4HU^! zI{_3XQh9Jz1vkiIHgIfJ`TRzq2xH#*7OwRZJY9;)xSAU;1tn}v{c7@6gIF$6qeuWq zKWjp;QbAN7R`ifJ$QUFBs9or~JqDf<`g}W*g7vMQp_ps^XcLK~G7n!O|TkapXhrrM;4!O12rg0F|BA@K@E@OVfc5mlI44Zb5d?ynoh zO#YR2id+?N@dUoOm2vfQCHPPDyT}ISa`RTpxne@aO6x_(jgPENA~hK$m1x;n8dOEA zSyRJqTqdT0pmjY_cSiSbGnpySS6K-s+OuwAo=b716FGO^B1`ddeWNfW6_B+u zV0@Mm=pwrc^Aj))C-dD-eM6ufLa9MAW)7JkB`u*R6TPtw)+5mr^pOnw_yWrM;$o$tge&aa#PiAYR;GKI)8t-+X z^N!iNZxRsI=XNf&q~hnwKpA2PmZ3j-Xq&KGFR4j)_O=~kuh~Gb+-#6A2ISTE5Or7; z&`(?a1jaB-M9XJe7*e;Q;tG-00Vts>s*TvGcK5!b$j%}H?0_vIqYh8BnS?@e`-&JKmO!MvVy>lNSxOTB% zUkZ;Buat?KQMONoUr@1cS%$wbLlRIw1Xi`01Xb1I%j#j$V&mXEmQ(isp+)|)3H~l} zn9FAdPigu3xnSv;J{Czw1sAHnkV4H zOfy@C?m;%TSW5w|zmBybVV;?TF4h$+-u7*crlT23d|JrS6XouF(Y zXF;UCX#v~0?dX6(NpJL&ZzrZKP&;VtFp8ts)y@9`vSxU?)w?O~uqN!IF0qTL$Ff7U zSDLkdUe)5Td?N7l7^v$yl=7g!`v~*xi|@PrquTgmt5)~(KV>)*3*gvApGHXjsp{WN zFaKW6|CHJM9e`6TJ#0T6w6JS#|9Fy0u#TS!o*E#8jGsmz2T=?b9NyrTIB@dm;A4+f z&xdv@v0nH&UJ*wek>bEEP~?6%P4>R>YJR+Y=9-b~<_9b)HzzRPQ|DY=Y=l5JX&)&3 zW%R>)n8de!c?u}wrlY}!L+2|4f9XgTez;9VmYJYFT6aVsmWIF&z`9zJt#k@z6BR{1 zP?;GjUh7K>qZR95MVEDtzW;$R;CDmHUsUn$EI9aO@j>iUwSNgIG{5Vc|03@ni2)?5 z$wp}@uV`e*-iu96l1hUIvVoXA}V z(eI7eWyX}zn&Eb1cE-?aWIO7rV0YD@P$3AxA^nx0qH8x*!{5AF65EE46kUY^Fy|! zLK7~p>%_hGMl%~$U@`f48<7&`H{=w2%-pSc2-eU{q?F`*VwzZT*#1>%k zTE}5n<~i@vy=4EhLusMEiOacz$Rg=x*AQ0EnKAF#`MHOlq#$WP{D;p!?ft8%yT8Hb zzT?0G0I>hx80Nn{?A5B0f2r_xpQ}m*af_8v?gX+4$GbpL#WjX$9?Bt=s}xYV7%NE5 z+e0sXbO}m$i8-uW)rH~_uwUCA6H2#Gqe9w<>y&+QvKz7w{93XLp1i9W7R(bthymX1 z?u(7nP4%)2;Us5w;jpG#f= zYxuPTQ}nAxBIKje(s`hg5fr5ui_niqB$d>-&G1fZ@$U+(9oitX=Pq*e(Dq+ssKp7r z*AEr?vsm65R6s4ErSp3T zsc56;3>QCM?CKN7o5$c-UsCjLbbpH9iK^0HoC;J4CPh7EcNb=L?^5j`%yS3FVQVdR_5R->XiL zs(FP`bb-wI2w62WrE|PQ-}{4S(73&dF?WP1I)H@j`!I>2feZ{scM-5FaUilLzS~jz z&vF%BSEa_8S+G)Z zTo@cr)?VC7{^eN=Sljm9uZkDKpliR zb}LMgrDl_C$Q?kA5}@E<3AaPZ9VwGCp$&PAKFcUub17TzZ%z$9KTkG1Q%A9_Gc*<8 zU+K~eP7O{AuhMg}#(}t8V>+kFJa>aa4ksU*yAKd+t}hPoxbTz5 z%}6yzDAc*&+=P?!r)3eI{89}z#sixjbeapMGdX0;rm7n%$f}hWd1TB{DTp@KP=PPY zz^4yo%|qEfm%3zMCc{+F5>Jw4UNSH@NE7)6s@SyaX?4%-B^2Buusb@;8k7_#NE?!nhX-h?x*Cbgl&2m-rOgpyLUN*+k za}8zRQ}gu+jG)%NqBCCTqrc2yy~;cgV`>j8?%^gi;JTauz!Suhfi@BJvg&4Xr!DiW zYK9rg+r1m&naA>(WaA`&_!fDGnV8OMHNxO(`pUgCO~6QfK$>ZTIoex%cD(hvGP&Kf z!dJ(P)8B5dhHcC8XH@i3fT=bcz)%?AB-O)H1${JHaEWuVvUgaHwbIP~A3ZI9&N+$x zlLvD!cKnxAK7SVVAEW+%iPE<-|F^fNsCCiRna_xS^%-3MV_^Mzd4CS9ak7!0Y|KN~ zFGzy28dT8w3ZdN{I*pyZQPg4f9H zwRR;MmRX^}L{!)a9;@sN0t%R+n!0@?1~YW2aFB8QE)6NV19)YwMujt81e?6#LO~49-xmj8=jYIJ7;D znI4L#ste}Oy3zT_S{yNW`oUS7WcGj6bm(}!UmtAjM(UTeMrb|``1~=0{QqC=2KtWw zmVL`4mPYW)=T!mbvm@ho)&5s`e^z^PpUnmxbjY<2Bz`GN*sfwM_UBN~GJ#qo#+LCa ze}lPZB~@F(CX+3%xC=37ILJjD@Yr=JT6od@4-P@ghqlx_<}c<^T!q@SMIySOTRipo z`B+N|PG-uG5boDp6r>~>H9V`;yUf-~ShS+OP~CtJoa4G=w)+L+d}+~1s@r1ds(wj0 zoyAgu0oB@@2d*W9gSdGt7kk+3Vf-WJ$NPY&b)J}&K-+on2?v2YopJg@THP;TlL_(`Yx6UX%$PG7* z3jw#2N&`DgklhR_mVF&4KInW^S42UDAvv4NMS8S|6EM?7o<+Rct zCmTS!FjCU#C&bV3S%)3#D8k0Xrv6S%%7>XyX4|jlP};WCJ$qI3nvyj4R<~+zMrN^D zk@lOd)9#)7Tl5XZR+k6PrrxHi>6OIu=T{o2KhIAK zA3Iw&jd~iOx3yE1z$ zh^)LWTBL5BIc3qXAzx{3x*aafU}YT$P&yX%dJUxoJEM#^6ExSz z?@E@BP=61R*rRmg$xNf@*(wO2P&_aBVU+z1}^Humw4*gdpNgxV;TW0GN zv@mqJ{&lgjBVvpuKe4YDx*pAgk-Efa9{Hw5VE!JWNR+8*oKO<(nTX~>(u`D)YxEl2 za~UbG4C44la_D!i3a$^7*&DFz#7>P^MBL=yysM4k7}+{`4W0SlYM|sSmb)#mxAi}(so&YKGDJ-2$3SVc8+&_^lqa| z;r*h(2`4&6&X88=G%h3H1EQ_HyC$hMImSHQXs+sru))Z8M2zKt?hVs;P@?>ZDIC0+ zvXN=LaO(Exu;TlW7B@yU$N33dFTc@Tg0=diI;=@_eK2>1fHf5XUJO%gb6b=mHp=9w zNfzwA**GJe;U!UJL&d3WWtd=+soH#2vgOK{oU z=Z(`Utk&ba3t_Gpmsm8jJ(;BqG+GIQf_l^p7@~XxdwFJ!1Ue_;n7WO4c~mB=V(S|t z)h8!!VwO|Iso;maAi6X=Oogn=Sw|13COKoTQF+-dw_1lS0&_+qI>Nlz`-hfMm!es;h{8zN zL9YeifO^Y^hSl`Z-4LUI)&)F{+FL(VG8~-TR!uxT>y6*`_Qg5`A{h-&JMutYx$vOo z618$*!RTd#Lxjm{VdaDc=1T*Z(EYYhvqQ{TrTFf!sbc>@yqe z|6Jm~nW+AQhyUmA{K@lL$J9ag(;*2zJt3#cSkD@vQUvTC?(TynrAgpTQI0{86@S=V z=E251Ij}up6oW&C(zAcPo=1Rw(LW@T+%nGUAVqD9fJ67*2TVRXj5-Pqr;%XMCvHB9 zRuW1vM9E@<8G&oLpNG(qyD2e+J**z;}`r4^@kbXtr^SmE=R;m~HW9+M53<7&0c zBH6sKf08X;Zi=G@3!Ke%o}nUzu3KI4_GB!tWH4pF+g=sP>aNQ2Lo>)ygWcF2xK*Jx zx=`)GHD-U#0aD5Sc%*^cb4C^Rn-@|lxDkun;OE5-06^rDqU{*gz zo0;(^CTQHnXY)R_yYeqltY+&44iMH(O1n*bDq&7k&=Lzs8dOh1K-C+ z4k`y06h-O5nl7s=d~}u_;KHu#i>bcTtr$!5?^(`Oxsn7ed9H;Yy%f~gmhDTve9Ngn zepQ{#d)1YUMI>G6iRc`VwOvoypY72l6;Y*m6Eh`Dntte9N7Lbj59vbP-UQG5rj+C`qVm*lGXd*zSOvUG{>`VPF}^-@ET~SxDML^wsrTaxGy~|Sc#+fgoyK$q%A=ibY~JSU0IKdOochYUTS^g%0RjBqi zdBYNlH=G^z4UjNod!iQ8VFsL?OaRaB2_tNTGdHyauo>JCn`0Sp5|;O(m=VcNJSSL-Pw0d z!>^~Kiip~Xz+qtvY3wt7?NtF90ONJYZ4|fQtg3ifS|sgq9G`v z$zx&rr9(#gOlS@SY!EuSp=sWn=65GB5nstpaxM@q_*I2an}+YMZPL!A^) zv^@!h|E(-Z%9`2>Arn#-2RGL`_-cno)KLouQbw1)kLmZAA}7)4pXud;FH6YuabIT$ zDoAqB$e0ErTn1`)QPyIS7>NN|_ulq?C9;X*?IfUGGaHNy+fP5lH%zqyogJsy({DsY z!Sgr(l?|@tfDGa?I^68i!PMv^8lbt|{{9c*B3Ir(#unSQ!GR-7=A5yLN#VPdB#PDIWli_o z`ok1eMPZ--QCKKJj_-_UTDrOCV0Hk?sNk;OP5Qi-jLt+Zrghi?bS)ogpVCPV=aYBy zoNmn~i>nRthUxV~1HU~3p(%d(+pCFTT#MY z$U@7rdiCLr-XIqBE3)BoO=*X(BrPM6UK)`GaInTWxw<{($;^6DoH>=(B&3rif!Xc> za=?%jyasBhm^vH`iN^s&NQ+lm&0gSTJ%t#sP&v5v#P)rs0|Z}$kt64Vc78b^PP-E<8J zwpwD*Uhr4Ke-82a5eX(jV&1umKsG$zn%BTicv;dlu63p0h*jZzmYV>5#Tp1qux6zQw|mMQH^BoKn|YgC-k z+(%77g1vah7hf^6`sPZBJZdcc(aeNbo}Ae8f$ifZ)ydHjdrIZc9nxn2 ze*iVJ6cR;mOoy4L%u6o!3@EyyB(tOykU_*9qgC|i-TOH{2Tf20WyVvs?gzOcw+*S{ z(zww%VFEB2so7ahrbhds74+iALT$Wu0Z=_Y9|?4e5)My`-YjGYW*-=v9IhED_(h^U z_lhv+M|HN`{sYMYk$ZmS7&#gibX!~nZ6U3ezUk#~KuMZ>a;9_>CP#3clNs@F67)FI zidueOS`)(i)n}b%U{C{ClAE-BVcL2sFyzpr{V_+Q0GMF{(IXHBkhl!SIH0(Y2}kbz z=P85B_@Xrp$Z>NhU+w;r@<8OzQv^2udlSZb0uWjqWxxskXg?R)-nVlb)Mn)Cbl1H| zJ?Dmvm4unWZ~1ggH4qSaniW@A*fg38>QeFSWD>oT4QNjod}`QRzomP)rGKU7Ry2X%e-(1W6}hn$XpdF^a- zA0~v6-^;Q{>1WZxzBsYUow1md8m890Wk1Bc1xBH}NE_>$W6H~X?ck<#I8-GhK}4H; z7S3nnZZQ5{Ch!DyVLOkCu52Y8%Xn{vV-OjRH|vE5Z73E;q?5NMAT^24<3uqs`U%GA zWv3WX5$Dzyb7+lf{&E;eZ7%r|ho<|Sn76x0P`9RjL${*GX2ghAYUL$H1P1sL1&8#@s;mis37J5$f`2+=*(!N;{ApIplL_& zzKYXe`KFTd2l5fE%HfO;goH~#4vaIRbmcK)Qa$xASz%ZPu2X7A##%|MgnMjLa~bO4 zOKWd!90}Ovfz#X*AO4X1rW@?<$^f1rz4Ka<=RjhB6hajOeDkxttT)RcMx+&VX3iQ_ zR}!fCER6bvyIa}(b(#k6-sFhJ!GD)o%D$QGROENG8WhknC;rTkVAPAgrja2P25$EmgyeBV9 zLfl;u0Da8ovhRkzE+{Zq&@8@ld{q>;-c7zy4Zo~grC$QvjC&QsRN1|{p6`+at`C#U zIU$3OKX&XUW_cA@EUnBE#*;Ukp1?0^a}f|oc>}*5Tc1_*eIb-F0^N-iK7{WGRz)>g zZ7%>DTw_W?Ny2qMdPGH)q^U)I%6_=hWE2R{P=)%ewRaj6vWy9wh$)&NqRE%a^zzkwPllR3yctrvROrvpk}xOu>3@~uwe4E!T<%A zh4x0rN*UpK5IsWB)HyZ6{)VEewD+mA=WdEBcYRds?ywr<`uS^={0wWKD)0ghI-$zb zAX68uHy{}@&GM{i+^P-cBh@Qb_pozYxOT*Iu;nG!5&HCohOL-4dmVCaAoC3SHy5q zEC)s)LCx<$q~CQ-DmEE{d@dY9v?lesjf~;I$^7Qt(!o?qx-ry!;$|_dyr{5IQ}$%V zxq|ud39$<1k(@W?8G0z?p2AxN%dL;U=Ev(+I9W42vdr}OGGnOp%;7<0=;i3g?k9Az zgZ8okZ>*z>s!dfM%!K|dOoyb@_UtLesA0)8Wi|E*OvdLy_&_Mw$7<-qaWv1_F;YJk zPdW}jR`mQ)M&o-t^OS+61Fx5TD&29pktgmGn<=w(3<&BG z=E6OSkEB28h+`7sL-&%<5?Dn-6WwdwDF&`STg6hZJG zuF8MuIQ+L&UJ08JqPNdFL+9tq(|>x_|C=B~2V;FFV`?)eYpYKlM|~rAYV&^>)N_ve zYm2z>(@R7oB}~(cA3@`6u)ho8RaJ6oIx1saIz(dXI^Hi&(z#`n3y0lo&zVgsX~ZHm zd&NWpv?uHC*vMgh35C&x_R+K zxPSH{Ls0#Y+lD}QZI}*q8&UhFt7||ZMxg1`-_p;zcVWFYX3#Rk5uiGE^HB;bQUNCA zf{4V;l)AXYfC7?2(`qSrRS@@yO6?E1Ge*X0VJ9U}NzsfnN3}OI4E7=;xW>+GaMG1x zU%5o5{H;`EXD^ig~9DO&`dr7 zWT{Lt1UT?=8%Ogg1kQ$RYvnQD6Ri>PjB2Z!S*GThC-0{hPE!XjtX}#oRmkYQGBY{| zARQG2^t6;XN_BzJiFy_*c|9}`N%BTO?->TFIFAl-PaV|&zfrfHA zsS8aS<*_Kw6Hv)Z9mYv@?Z$gz&s}5fc0eAgNR4~WPORw^EiPn+tYRu%xvI(b4SFn< zNi?MbsO(2AG6%YfFFn=vbp8c`c*C6(HxzJzY~Uo-KFw+sV9lzLx~)twT8u*yL~NzA zqKlG4l!VHZEmd;qFjl2H>kkRaFsIr~S$^t-N<5;R-0Kz5`vyNW7lr2@>Trwb$R>$R zvb+gZtZ614_k}(9%~g95Wc*}6k0o0Sed_fv7+Wjkw6tXRn7p@C^AT(FQ7mB-5Gp*s z&9xOT?ILD;RnVNornK1Pugf{6!A0~l7H+yI2jFUX2?Ei+->RBvEP{c`tUythpl7jC zQC+U`h<)lL%y~V_Q_!N2(IX|zYf~eb``+K1ohdDbCxD^GSfR&X+`pMW6K=CynJibQ zC8z^Mp#r%}iI057^Xe1be|+u&5UiMM?(uXud0gJmk&&?Ot;slQWHW6i{Vj>Ygs)El}byts|jwMxlE=x4TDMcr7;>_l#ziPpT> zmI&eHyqR^BHK(_I*>FM_0}UZ5+31f_sOnTa7gkhY3iq`m37~s@3qa%8w(l}xzbKn` zHOscoB?-zB=9JDDiSOGc2zMTpS%em20#` zQ#6TVE)2=Pf0s`R>lm~^cN}BpKa+R=c*_RMAyTbh$lAzR*3hG4M1wy5;+Gi8DbUHq z&d$cc?&aA?DU*_p5J{Cvki*fd|r`7-0&_!WKMw~KT0{Qp1SYFr9SROP07rTs-AC=UR0okXQZMn40B5QfSR$X%UYe9eq_ZKY^gK!FK|;Qi}*O zO{~5EG$y9Yh4Ghdv#UW!bOuGs>hYMw@mqKT1`q9m5H)G@8W4+R+W2{uf;0H{b?Va^ z$~FprIq)(}>O}&|d3YdAE7k~}i(!-vYTl6SyTZ%yMax1$z%WbK2GujZsl=vyke-nQ z3@Wi?B=fe{$C4BYVEYMZO{|uQL(T;_-&kKqZPoNWLmd?dAl`+$@kgD}S8WCVMt=U- z6UjCSuicVq2WG&uxpjbOBz|E|PEN;FmnJvoo7baQTNxj3U%U6K%emXWnjPGCNh#r^ z0325Ks_~f4<1qxc64+=7K&4Iz8xse-k{N!mkx)Ne&S8L}k3|5K@GYOC3swkUY8xRb zP9r=U`D@f$o04sXTpL`z20v|O)>>d&R_H_fIWQ6FgZB3;wqchZXVZlv;_`~al33(l z-wk=VH}-f0_laXJiDkI?cIf4jmMF&f!`mbcul2)R?=~pDB*qW-kPpOzlfYhX>O;Jj z3>pzUChqf7&nr}Ayd+G*_F6Fk0q`HBAvr<}e{D2>$B>c%i)HPn7Q^L-i!=FRIn!_s z6c~av5xYvSLwwGbb_f9SNTSGGy)rDbe8Gmsl%f~H@V&NQst>0$FO+h20h*~Zhl;Pi zkf|IoKri}>^c(4Oif=DY%J-)`5&!M!zMJJc>kcq?OZ%#qH$b#2ytB+ulO9z5k4bqz z61YBX9;7#8dvgA-2)7s{caX>VPY_k;t)b4a&1x-p&yuy-Utar&Yn{?`py0uz+R10l z0lC^E;O<0_YJY^1$)g~NN$CVuA@BRCe6dIa_5=L#!Ug={9FHviOKTu4UNbMp95#oS z@Q&%s_Krgxzs^(--u`PYBfdYBJE30rU@^!>Q2V=;fu7wVL2xqtIX5U?fV`*Pl3rzs zULpW^N^Wq~Y{LOSq;xoZ<3uigM!8*~0~m2{bgk*s`TlWmgqitu8JP7q=$? z&}lWesW{-rPpl|eVeoF`BVpn0Q=ceb6u^g_QQa`j!VpXnd=c$W&}GA%wNKWbZ^hM# zG07YC5W-T8SyLN7F8Jscn*H^0^h?mRU7p}Y(%`M?4CmjHq(LM>m|mBg(z(BUiz7n9 z->)yXqZFV^J0y_wkF|;)8;7l^H2THAfz}`FfqViVSDjeZZ^x9zXJyKFZ^R<=_2J=m zE&X{RchJU49`tf+nchw=aBvAuqlMZAe?6>paQb^9W7a}I07FCd6Q3KCEBx6A2{5oQ z8;ig({2_YKpiL^6X#AvO2p}O9y_h1s+k>#%-)JRu21bZJyj?X3j?*BhXOO{7T-=- zI7!1s=7cS6Gkim1;nCAo99#a7lI_?5;25cq6T2g@HJ%bVGaB$vYx`#amSwDhai~>g z5~!($bOcJVQnn9Te20)9lz?u;7|`Z)`y&>8$_@jMhrs>E{G3hhHnt8$ zz|;9=)l!#mP;eP%Y@maTcR-7I%%l} zt43u4)MNpxU8dR$=Zv5zJF|@t6`j7{O)<*Xd0G>5@qKPx9^CrJ+$(QH0pK%x%FKcp zoeEu`8y!g~X5w2%;3CwD=cCy;_WUxF^cAZxb(rIz@x*SxDsgEc=>w(3~GthZ;;OOr`Oo8OA+j1#O!-{>zoWx5FS8$ zs*Hlag-1cV05pl5y^H)fhhj^BQS1l20aKU*>4@li)k^}y>r;RpT2ep}%IwNUI+^wK zDP?(}p_1d>V}PRv5sSe)l3M`(6%o>_oHHQA29p&4JqH0B;2eqq&(;ha;{W_0e$kI> z_{HX7T6qPHgHr0Dx<3t6E?V*FU~)hYL)z?JipzXX*u^Y;UymaN2AZ+=xQ}ArLN`U7 zVj9(5VIXU|&BYQV8=1)R)Gs@Y%%0ehV%5-a`UmE`@jE8lBWcuBhVm)BRG|KTQWAp# z&4AuE0G2C)LJ(gvZb6Lx1>bHnRP-Ze$vFx#-c~_O-;>|HFN0b2xmuk%TR{Pmhv)f~ zCg=F<4T3ti@;X7@!2Mw0*@U9^vvXmJwOIq1$0hu?ncH5xQ6r10B!Z0^{p80!M?Wzg z{|{>A5V;QkR=91y=EL4r0&gcFj3H%7uDw2?x0BF?1znshZjYP$r2#N`uUAQ@M>F`J zKZb}fw*kTJe7}6YGMfu|!{yVSxvY1KgK{ekF5jZMkFH?AX26UXa?$#OUkK=Q$mPMv z%Anv4e?Ef#So}FP>%a4*Ck!1P(xc+iGCfo5Fs9Fox*FZ2*3d|^jMI($s-9YCtEA087BXriCb^jNa6QT zKc8&U+Hz9fSXp0m*=ZafW^~9fH)z{8N%jvvNe-OY+ov!YvlZnwmG^tQz0DnX??}HX zSd>T(eXS5rYnTwi$|ltVzcLXprqE&`(oyl18pD_Pk+~SrPa2EhHWUSt96YM@h%_|x zgiDVRUk;1~#ZhiNUq3F{kHvDx4R78Sd?w(+(6UOOnjsrJjbDHhD%8Re<++cUCiF5P z0jfk{{e~mEY?R0D!188NcHCc|2>{y~Ex1}wOqF!zrE>O98?Z(7C9VEH*4{D95+&Of zO|ue}wr$(CD{b4ht;(#lZQHi(O51kk%YOTG-|n-|-QD-T_kAn=tRFL0%$PAFR>YWN zB;3jKg?t-J`eu@`jDvDeTs|Ny{$0>)X)>51I8&U`e|%E%#aM6jOKnDwGIsi8-1U(m z2A;lI*aWi(Qx4~hE-OMy48@dOrmvGx)?-yGz%Prj4#;14TtRHqTdcC~N1XsM(jKwO zNJDi*1PlD`;NkMRLegy(S-%FeuN9cL4#j{|Xq7c!@`-8MxnW(dFba!m$Qh$$XWAKP z!U?4$JLN@==X|+w`!N{-tm%b}H+shtyBE?Y*Pss=ZD(qvMTy`M3a-oN0 zgRBX7keLdgeX{bePwhv#HK)l>GF>G8`u+X{-DI0@D&OO1GF<{ewU{dY*G?^^<#Wd+FZ}USp*BFz2{?kcXfvz?=T`}EhIE`B=pKfgN-ox zO>Og)6bu?W)rkHZHRX#m#x;ojxtOr4CHjUzgf~@fOcaPpqe9}?U_;QNAIjJMIJ6;Z z>M7JCWB#Zc!rwQ3Bo!F*A^xOInlD5m3CJ9q-scAXvkD_JEH0H{jxU=oE>0(20JK~C zci=P5VC_jpIcx-yf%`UuU9O=leRW)|zbRQL4+M9B-O4F~hf~J~f`1K|6vz+0yUjo& z0BA>Xf*hUxGThc%ACB@Mm|Y_2T}xf?WK&~}9@P8@b6A^Q$$P$A&Z%oq037M9-WJ!;RY zF%oN6(&N@bF}`aIkcX^+EGq9uN<15tkP%HrLB-Yuq^3vA?fMVpQ@s zu2bcg&vZsjmFr;?BzqsjYK%ZM5bmVE(|rUL9%Xcjo4b}(Iz=49KXsC40SY#{*x7bO zW2eg_20l{>c9O}PoMSJFaoH=uRI#u#dCorB*gT2gAKnZ0u!4s?=yx}Z{W&EULh|!6PRT&S9mbCK*WU z1b^F>ZVJ*_XJ$hPC0^_8LKtnq<2 zk-FWvdBDB03s;IZp^MU}*H_Kk;R-bfDFDrI#WvK#kSMR}D=bW5+APYkFQO0WCtPV_ zcWJD;>uGBR3Rk6=`RPYBt=}P8y8*G4qz0^UWzhyPfucRAj!J>GT9=1NT3O!_FG)G* z9W0NZ5)B|Y?82}}xVf*&ka3Eh(3+*D_eY2t9~txjT;9Vj>Wh5#Skg9Jl#LY$>#)7h zgHQz@jl;(|@+Xtjpej_Od)0=)mwW11#O{5e}CbfLEyYak{rraV*$gOR4DC6 z8Bq~YZc@Y~M;v9yalSjFPxkvafPrM~u~H}+6y+F+=0)@Al)JtX1(yma(DOD@6#ZON zrl5v%az7a1huii*Iz>=Q6w>8}2uCLUITNI22kPwB*$|$~%-snr%xSp=?)3<^!z8D(l(NX692IyjVmkF2H4Oqgz?=y)`H9LFQQdaucV6D=9d0lKY}zfPjN%S0OnkVY+^LE z#?lv75b3sY{Te_lbkNP1=dqHR!ldZ8V>B~=Cpsh(%{kUv1Q0K7#a1`bKFCmW;8k#@@n`fwO>8{ZUmNHg`v*Bng3D};s*7VYCp46jj>A#4^=N2~?lELgiY*^&-2BlY5o5_IaSGE;1Kpa?$-7jg3JX?)I^R zT`n`+rN?QekZn~;+g_dYrDXCV0P|~EGpeXlUth9_H)wkY-EB8Jaa<;9wMepH1PXJp z_L8aTDbk(A`Q-3f({d@b!vQX&GGwcMvh=gyM64J|l{$B+%N^2C{?^&1+ETC{5L0+R z;hFay+F>K_4|RrGt*)%v+*g(mZBo^1vHUO-lCA*~fV1zA(Gj;m&f1TnU3j5_?y*1O zo5|O*J$830ZJWGaCP2;MJdQd&a}S@1hsu4Cf#dHM-t8hS!x7~|K|+^uC@mS`i+r{pXX-jC1Jx)X4mRk7`V*VyR9Se#SjsmW+R^@qM7?% zuUb1#XM@*s$($)HuNxl_y$m?ZqOqYdA11YUVauX2*~CxN-kcJ`$eN_g-bDz(H@tE) z#0I?p89Epula$BwYfllRZs2z|!rk!APZcU%0>4Q;n6}j4a@n#czuv5MEXKV*mouSZi6Rhnr2QK#zN#39)?iJ#)qo z1Kn(Mb!sB7fwTUi!XC>{o%4&^pgvef;WVX?z+HZO`k1I$!Z5%lre$BiWNdc{(bU1} zQ``pj0$v(g*%uw5$Q#m)CdIh|)(-hlIAC%^j}?)^iCFDfpI9uXLEI^*q(W6k>Ne7&5>%WRm>#c5qrO z+IUq&)EA;e@09yPacI7?$W8p_9^n^`&C!Hu<%O65q!~)36V2mus|MHYD_A@GRXm;1 zYJeYS<2GFf6K}r~De7b0qQF4!ak+N}O!K2Q@~mr3t7W z!gTVEe0Si+6U^X2f9(@Y?($`Zqh!4VEcq5}KMqw}os}(CaXfcC_qRLc-V!MUf4=Bz2sh{=?nle+;kv(b;kKw3X8YS38KaBlL~q@ z@}}@}jsUpaUU+wht~N>WePQ|e>sD{+RHV6)a~(uI=NE2+kM})kmRw;~RE#nMe*Heh zJbIvTe<~dDA~*adGwsFF&+n1N(^4wYt_EFJb6RJ5v6u!^$3o?am;tbYWmgGTT)#)mf-$(mJ;iXrT1AIQA zY%&$8ZVLWjl>4eKPj;z-UD;%>D|DaBxWMgUShkdB!|c~aE!3b^uOM<7^LXBq+oOyW zLD8bx^X-Re`_nB>Rla7|NI2XjLT8)-0f?0-9g%6uPvu|PHW8ihdzWRF$R33sCZLJh zLb}&^fE!&agNGm2HOYsrmDxvf9FiLAHzsY3b{4#M$d6JH*{c_#LR~;#NQ5HLAhu>O zE4jPCWai*bCm^OLS%)^7P9{vVo3VSb&6U9ZssOn5tx_s)aAmFiH^Wo;EX#qTc$!_$ z*#_hoE+{loIPdREmQghF75iKoh7PY=NL5k}HE3CWTd@wdLF8JwoTv^*88ZQ4y80bs?d8&V3j4txPfSeyhO5VkZalnm)&%g6&FMDgfpMx4$!o z`q?1oX{bnt)M~8F?aN7#$SXs7Yb^r?Jrd5JF6bKm=d2ayo7aYEH!( z*I{~sm6LgLrroc++t3-vRt6^tJw3*^BN;jkh;XpX>W7>=-!O1DcRYf?-s!(zK!w9; zFZg+kh=I;FK)m*IRtIazwx4~%gRO;H+97%uPVh({(o#Px-220IKL_z)_<`3w1lT=D zqZ3;ANYE7H2Q$4pXqz(^^}BE><^i`Xwg>z3e!rQgJ#?Bn?7bU*Rmf1Oi^ld4+0c|c z9-65J3PkW@Z4G%GS$r!5ZD#bDb=(RebtD|&;bC9PtAhNVIidO) z=E@>umajpz;#$rAi0k%PbM8o!H?XUtp z%Ug6V|O_l@ZHOaCzhdC++guJ=L z*x9fkX2jLlK{5OYX)Ax+3Uz^~LbydQI2d-Vu}?IvbGx(cSZHmMO)jmWxKguV=oxd{ zZY9rcmu_70@uBo&M&|Xpi+D?MXQ2H z1t*14Ess}f#YYzYBBFYMR>3>I-{1b6ZVNxkom9IMGwq}(w+OpV#A}w#=DN%IdT`qM z_K;SE|IU+LDlzJ!+a9wx=;O_CM41UWQ>HVHrm#M=3Mv%;gbgD4SvNelWNYvSe=+y@ zG5DJlozvXr05ygz4mV}Wvn4tV@>&C1(fpE} z#yFg2E!AV>z_#%ICeO@gpx1|b{o}*p6)1<~dy@|ET|3)>#Gvuv=YOLo&{`&8z5l{7 zWPRZn{vB_|A2+gJ$F)54(8kGST+BtRmWG2AO6 zcnSMPo;kr#;z$oH8QQ6|?HAK9kvObpANMM!lxjf(FM_B^3FM`m-20%~4Sx|)LHSjF zOb_cBQd@XW)y*Z>xk3#nlS|2jl&BnD)&?S3ES_hkn&s;n8_udMIWBeUI;)b|N!)sW zVzOzG7C~L!9;dzEGl9)`tVVcFm{d#E6hcahQJD#aIQtl=Y+<9B5r;;ZI%O!yE#aGB zkE+PS5>09sDHE)JXNUR&wjg<#6M6gP#g?zyzkkOL^@k^|jI3K=Z*^vWEJ<;=j zBZ8zH$5B2vJr1Q*_zAyLEzli=DX==;Zw73pu;ZAl*YFt~Ux;mtN~0ND%2Jb+m35wP zjOGpAv!V2PU|7zL}ti4O0n^(V0`trR!n7x_2 zM>@PMitamtm<9d=1cT$8FO5PkXLxKJKLBuX}s`%-`Nw`NXCEX?2J#&_$&jVq^E5K||>gO^hE7jb0@KeYx`(-ZhPdX3eUjSM|DG z2|`ySO;l5=-`kT6P%5YGO(-u6GadmLF)Yf~Z(u7mh6MsEAPS!zY8kf&{9G6AOkw0eP$K^dJD_dp5-N{7%z)nV`}aS_cP(zIHa|o zb*kSF^%mP*xH#~XT;;mIN18l(b(^Q%HlWL}o1KjJ(RIYvKeEp;(cugUO)%&{vKSZM zQGfH>A;@6U2@j%N2pD<`P$)KP&6U*K`3FMjk1#?iyi=(A3Zvk!Fe3Ypp3t4_E&n-! zGU6v>zLsL(rCWHx&h#&YO-g(aO*Y>^-^?d@Et5IbW@kfAq|mpEWqcSrXoQ^uw%rld zI@r!15*lRYBUCB~&FmT&#O4tW)PoHu%=AH(52^G+pn2j|^Wn~8d`u~H9N)zt>( z0fJHKc+hekvt+@O0rzu-9`ya&Pq;j}R2>YOH35yws7S;*1888=V3Jx^4F%{i$zs*UFXg&&GyO|qC-T1491fPyYNEuP(-(z)S3h z8MmqO79Nv`8mQ`N#he){n&vxmWWewXKs43lD!CjP#)77y|D@NHgAG9&PKg`ry(v?) zc`piY%8EYcjK7Pps`|yUdND7EuSE@D-8J$sz1Un8BSiu!wH1v5fioTm^<$=K`7yPJ zAi5er#Aw)({1G*0BS58;T?>k-$3f9vxv|vW9ey=Sg$_%}e5DEsFoe1&%m z^y{t>0P4XOSJ|heLC7|uB08Snji57}NuY%dyT=>HSKyX&MgK9Med*V$0P&YRZz~nvb zlIEM^Pi{?4U)l**K^*hZVaff*0v0d8n?k}l zHsU8ddzKpD>z!l5F6ub8L_NuGwd8o9kD!h4K=sLVTG8zA!wmm80#2D$rt*`^BBN_jg@_p(}>#@ zosn;!g)Uhw^b_8)Vnxt2;*u`*$KG73rPt{6!c64(cjRa~2n6Ev0A$DvC?lrMu=o+k zE3sllm6B-G-~=Xfe+PH~HUuKXVT=v(S3lf(=O8FVhDGVsR)e}{y+hSj;*Wz_eUA2> zDoF7>TtBVg5r;cQNqM8SDHE>FTx`c_YkkMsCSXv%r1(Z|Kl|id+KkuVp>`)&4@Z;XjGAKP`W!X#T&I_X<6J zA_=Nkkr~q}arr{`AO^A|@V)qm`(zVzw9Q26+C2xS45=DGfE}{CEo>~yo zW;5SKXc${SbQBQ)oxt9!*}&92Sd)3pzN@a+^w9AW5;e;U0rxt7y4uz<4oXHEQX2Hz zr;n$DlS7w~$4A-9M>sg%_p76sBH641Sq7h{rvrK0N$y_6rH5fSUfkcEpKFT&oed9S zm)bhmo1HIrHn`s2_UD!BKOFZ*Up?Qey51)i7Iu@Wv^P(YD=%?BPOnORnp;zC;2t@B z?l*UD7Z%R9&t==P5<}kMRD3>NpWZL;Zhb!Xt9(A}T%N8D`Y!rjH^%mNH$SducS%2Q z*ET&_G}yAv@7MaaL&`Qgyx(8arp5+unLE^b$80``tl#=kM{2(As+wMpJiB6AQh4=j zRBUv3T0RCRD^(7-KAuhrG%)$U=mslC! zndFj;(bcO;yuRDe#(te9cbz+}VvomaJ}9YhorEsOiY~`%;EM)~K!koWKbr2~fkEF- zci$t8^J!a#%)8BxI(oN{=y_1bPE%EGRavg3s+JCons^X<)dQxXnyRIibU*O^RaXUa zxh^wQz`F^~b5JG86UIGMSnbg^@gyS9qe#l5C^=6-m{5jM^|u!fDqAl1B9mwu%zL#Zy)T1UGwFV#pc6Iu5y$Z%Q)gA*nsDQl&O`Cn=6Tem)Y0WjV4a zV~^cvokH7IEtOaQN*3@tOnBM6Bff4EVxvZ%Rd;%FC?+b#yS267Sx>ZSl^RO9CJ8Z# zmu0MG!gL`N4O)#`O&t{GR8z9})vYqH@qMqb-cQAz`kxkYKqCB;BukT2GADYVszmr=oIw2!BDF}LoIf6D8wZun)UOJRRzSI$acIjg zz120`JHeU`;?!w&;6-oHI$fi(@^L(b`k+BqDP-`GxBae|Fi^rGi^B1N#hs-_Voq_Npe zOZs)jB>}H%W)IMS@W@`F%F2?fxGSn>n9!L&fVjUIDK-;>LsB&8&CLJK$BHfmk+y;$ z32_1e9_w#7d*X6rLu777sRbC6`hl;X+}eY2tm;R*9{(bzF9`^Jozj(mKj1j#MY;k$y&rygu0mqiLB91{hWt`WXn*T= zcJ}tdD#10*ILKh!cj!ebLmIOtlyIbR*l@?dZvmoYKhHSyK}<^RRy3ZaZT6dTiQr7& zb;tQgaeD={{8`WXY&n3ia`$#KyyXlkOI<5;c9y;?Zg^8Vq~|_2LNS7Jj?FfTEsfE33dDJ zum-#-u)uA(+YK0;4Q(%9rQ~;8+VVJwJ%Yt~tB`JJ@NgK|?Ka}uzVwvobwBY%$mFEi z7Pox6a{>9qiJ?l+J|M6gM6SO^KjIKmp3}?h(D)t=e*!lRnG+Hy{8UdmE!Vt5Ij|%Y zpxO@%K+x|XIdIBdSeIjior?$NE-RaHvBeN4BG#|R1!e#|$pg?47(25E5V>>XB+-sg zxjQXA`da`5NbWIbNEBYIPeZfZ6PgJIO0>wL55k#gFbuRzY!uTk#9tgJ4xT?a{hFgW z_%O7s`)7H2GZobeQlcd!^z*MBE>dpOzz&QDduZQTcxy&TwQGIdOigsltSC9pv7w=x~_ z%i*bW(9hBCR*#*Pw-eOvrXV4tOhodJC=Nk&+RJBQOx!;@1IlPE>r`wDJF75-)$TO- zuv5(2DHPck`~LlG^!p6ZtZS*z>{$o|Y%nIa2m(MYpHFq>F!m{$R0djt2nP|G+b3RI zVIm$h5*+08e8@JudBM$xXy`YR@7lt;6<&N#kW4CEFeb&LL;?mi=GF0>*mic5DaNfP zAc)&U@q=5)5R^q(0Lh|(6%$12FN4m1nps4}3gPE-rxEF(BQ)k8orOWUkI1izJKV>7}<&I_(QXs86;53?`I6N;mFON{o2 z_Qwx=h`bIgU=q_n2ti8hDW^bZ$bu;;hzr2^N|bfsVspoGCJTx=iRQTiqjx;cG60~u zSr?$A`YacJmeqbAhSl@{=@tkUCkA(*G5SDuomSC1cTf`4Y+g;B0 zp{>EJo+#cv%wloe&OuDWe9$NFUd%+L1ZzUr@pd@U{%g|yFl@Uw^u1xjI}mm^VEbO- z;ga|n#67eFF5=a|5mTLO6OEUJ>Rrx_uM&+2T~SG-ywW@7vwR(B&NOgJyI0+Tx~;Nj zX=u9Q=!Eg^3KE$%P%RSCJuo}bW= z_j`@viO~yeLUNYUy9{GVMPrZCRxLVh;trz*li*`Df z@4Zn*{qX%!?A_b}Z+%jJeZUvYUb`cF$uD$?;+9uxezLP1-_otsr^dthN{6NtuynJsd)Mu^L6Hr=P^MB&TYrh5hPwS?dHED?|*C)VTv3$b> zqHHWMy>BFG(?;u)kqBPyzx8gRs-FnxU2dFXd%=T%F~`pGQ*&TPn}gJ&;T1iLUOKfh z#o4JKw5#EP1|4hlD>qoaL{r07H3$jXb(t>ZCM-nD4Ea_7Fg1z8<=#)y4ws|7F1pHv zC}lloDmbkldoHNT$N{7Uq#gJp#C2mCMraAL3rwL?Q1Pae{NbUB%+r=TCG6?A>pP+bR@LehjQ3lT1kD>!rA zhx)m_VMv={C&{BS9JR_m@uf|vW~>OvAve6M_ePyIi3D@T*)X}`idoUL@9XNLsqN13UImFRhr zpn`l&d~43{4f9Ov{KM-&(SvVf8bqK8>IGHc)aebX_t;Y&q%^f(jh#rXlwI=m)Tzkn zFD`+af|9j=rtK@&lSnHSq?+$dj`iOnMYuv=)6(C{bgl$9SR%vvf%}6wPvz#3auq8d zK|1ks@ps%O#&gf@W38wNR4_^&zA-Dbn4ctF!DEOEoI zcN)gnlWM+cu-#|(woaJSAzi;Y4QfMQDLfxuyjG?66m4&L*MBZ#d>&2lEE{pD8ge|J z{=OyEN%Ffxf8J!LViV~S7xW@e8m8x*C{xW*?yz^)Ecn3NvwggB!j;ZyFhDy!Q$hscxD4mEcE8`_*fD>0+$=>a;^%b(QXmZEQT=WhokQL1lbBi23%^YAVvR(K zQnd>*PTrV=BKlp~J!H(rw!|uYK^G$ik35oTN`gYHY=Mq+rmzB2lJdNmi zD7$Vj)~4zmirrGiAw%l)Im^=)=up#~UL03#1iIacvPExC$Ljsa$$f4$??0Cdj3(r% ztIc%yZ}XmVe!vO$jg5Aq_ZLmz{gz}(WPf?^H0<#!xGSc2zdIFKhRKVu1)LZzZK|vh zk12zznESyFYzS)*#5AO&W)P_!ol4fv-RNPsDd2sO0xTHX!>5R8uWC+Nn$f2;50XYU zH^)KWMJ?}lG4_E3J&pcqx}>O!CDU!lo1)3lfp<)o%u4I;D-_~6dl@iOpkV2?At91QUIPgI)`At zJ{2wgeZq@@;~PzJ!Og@EFzm-#V+V|K5#}AXNL4HPwW$?;xq`V#xgl@3`;{kox?1HQ zUNyq_3K{q1%?jOTt_&Ph3w~}O$;BbZA}R*+&X^#MVlnl1C`UiVLV|@krATWBG&!`! zloK$w5brki&MBrJa2mmD#D?Z*K6IRv$6#0C(Hi6#Di^Np7*ozeWWdXrvg+p!a<%s- z)=6y+czBr4y`FqJUU(~2K2VPqj5*SpIFrJY4;>)DlR!4~Eq5p7RR$94Lnd10k0IR#DXIiW(&n;}2>?V0t_GTs&%XG$cjm(#oo?znkmx>Ad&*Ho)lWHg)O zY-p@FG$Z&R6ekSI!zzL2bSH3ijIPoOaPj#XO~rtiCQ(MHAc3BO5wP!4NkYjRoYi_W)jhr`J#+g^EG^b9r7Rzkn*rKh zuS=Ne!h9!Q{{e(FCawX~|G52p=4k|AR$V1Lj&cydIt0FY?qPEN>RGzexm z2343_4JDQp%BV~bNA{O;ujkBd$1L9;sRjO!3eAXa6Lx?}e8wMC;MA%^|6zK#ZyKdC zUbFI)4k=+_05pX-kA@_CC)QFaIx6S&-k%A+dE7jwzl+;0r$)7wgEvY6E3C}zV=OPl zp|uMPV3=37mt&i;n=73XKcmRguRzgceW7kRffeyl66ipsGcT7yh$CctjP9c84TfuU#q5 zm2%=p7vgWd~?1P=p&nn_0NIG-Te>Jllzbdk1bJu4?t*^2wqFw%7b zQ7n(}Ni0{o<6D+zQQ2b?Y= zzGI+FRPK9bsbyl{jWIhFh)I#loiW1m5|;aoP%9L%Dl$LeG}BS2UjT`xHxt4}*~CG9it zZTuTZp%z7gs|>l>Sc*l0qIW1$Xr1N2{sd()45WNv5~K?o-|A!?9W3VGVzXe;`jm_ zY)?+|x{Q1Y5L1(C=-2^BAfH}hd?VG_r`BTZp zRzUAx6>B?G)ogZI;JqKK@B#+}fUw%8{LTr|fXS*iP)5MKApC=W9wlR@Dv47Jncr`6 z3Wg&PbBfO7dW$o?u??|;lV4kv)Ds^@9ym*w$3YXXl;~=ZP@4^_mr;u|RgxfH)O1<= z@b;ofF;kIr<*6nUBLP%QQo?lZDV}6i)K5N8y1J~uE1pO&z8$sq!*t+}!q@rn9A@5| zNfjS-Z9Nf#vv!6(52J69Va`J!)%)Opo*F{mO zM(^aRzB1u44PZTO3(HqlwoZ|e>%=Jh6V#+`5m+(7(qy7y8HSbdE+K;Frvl4#5fskRfOaVPk?0v`WZ`8B_C- zM@bb(Retm5#FIl>$FVpI-@MY4z@lOvVvoDuo1VqEErFrkr|Ul;3I|Iy!;E=0wbscD z(zrc}H?qSH3M+Q!35SPb@&|xW<)WtA;?y7)_Fkw?B|HPC%aNE&I?;`Y`+pIQAZ0xI zG4c8oi!yTDryEX4FFHxcIwaW)IentZUxbZ%`E<@S;Y6GPS8p&l#K=XfEXDJMBLV`_ z$oh|PwjCP;-!I22VC3dC*wlnxn9B()<9c0InvX3#^ZD})oUQ(S-WCu%zS9j{vmW#Jkr-U4`ghFh zeHu_%gQ?wxP7Z?Yt_s*=F8`b5yjxz17{HXb^U-7>=N);gN`fCt?|A2>Vk3++RC6=< zvL7Slmt*F(kLEGdRjf{Jt@IV!`ry4(EPR^sjRRc70hlAd?vOcK0fhEnOKMSQAjbR( znXY$;Xzr#oe_w9Nu?dxMHbem7XLEG5Jbx2%a9hemc&C@@w(Tr%rHSz^&ASy(y-alO5|_2y7vzG4 z>f+j(R_WL}_VLV3?RIceIEmT1FVR%_L&pV-_5i2-B$X0+V_|UH$=Mji|2M;oVuO^Y z2QHhN0E;u_ZFwNcEa@Fv$=&3AoXTv#Q5H7?Ey)i2s``pXAhxn)J98I zqia+EKWeBKk|XM+_v;9yHxH5nnXrrp@#o~ko9gimVl9Vy5W7d>yd6V`UvKgn@7iDn z>~2rcV$N7>r!7APM)aJ1ag=0R*LDH*<1NR(f+;<*)<2|8?%Dhu+w#ZOQLmi5AMmwB zj()Yj5YYUK=jK1b0IZ^VpuW^)g)U#ez^oYgEzpUx4shIe;0l<;*(=o|WTBth6$uJQ zb|$~unbi@QWaKp^evjCr-FO*_H`{S(@Dr{JVoOa(Vrhy6tY9<*pjtoUHXei*AJCmO zTCg_qWD6wbaS)_IJkdxdXQ%y_!GHSdPqzP<5T&uMtE;ccxc@@v{D)_wKimG(oCL-4e*uiY z1zmn1_ZCqT?P;S$UZ|U@4bc>U(<=M-G(?t1M%8@s3>mG=TAdZkUW&__mr3x0HvN?E z$3M*dae)*D`UN&*&IGa^r;Mt--Q5DZlOmlqvu>=pnm2YNiK2CXXFu}WS-tXc&ROO{ z&(v~3a%asCsv!Jea5U+$Tu#Heq*vYR;wHDipdqMG%8c#YY%!1`vjqkRjhJ_;M0F#% zdi9YwBp6xH2nKjRdVfGq$rwO}h*3rTEzg6e8yh8A>mM*#RwO&0P3s~R>F)xF8|AVH zalN_>cyEVs@2ypqr|_ikp;yD2_vx1P@)yuD?7un-x>^1YsIouiCAO+0=HqKlQohbv zRR7L~j-HdFsg3;?I+@17z~O)4yrY!Pqu21@-!6-?TT9Ig5QvZOV=Cfba284kjIrkk zeE}%N%i29q19+<)Tn6HH>DuTR+p6_4Y>s;<-5bZzss}dxx3+rGM=FWUh%`%cvlt^C za-xY>tR{ji=guxC-DWh+DiXl=B^7otEd^Nh%qo#%n`!V#jbjAlDWj>uF1M8KyDOTJ z2MSGYdE&3aS{A&301L98`0%MpE1rPgH~of+O|ol6e=Iveo_k>OmfzU`5 z%L_@7kDz4rbTkzFHeIe+SDSOd(Prtj}M9P`DjgN z9&cep@X@yRGvb84&?tXsQrjS)u2$A)5;L1NJE?Y?&h$EvGF}^{H%CX!pd2xPt$o=y zbt-bDQWM8X1+yL3N6__~A^~@K0cM>1fGMCUietoG!J`5lA5-OmKc+I|EYz4u*c4Ct=RTGIg7FOX;u7k>Seq=m^!)~ zac^nv=qa8Jn5G@vzbBDD0;+jHcn0Y!m`Y&&lI+XD@ozz?qwnPCXk+d0-@-{*-e#8! z-utqOudPVBj8evO$ZE$@<DkmxqjP)&HpDc4JFxa;toE1 z(oFG#Hf&pkL`vrlOoBB|px*9nU&jl;_g3CLmT;SNK_6SS&_o8q5O{Zo*U!Rse2bnV-X5Wu6A?fl1@v#j#oV`S1o`F)wzrhv z)nL$WCC*YI8$))JSVy?RDZjrJ=K2r&hyAPoyjwr)u}Cj4`1aoRLR#iM1!_8kiJfUZ zwk$iFs$j;)-fYggQ%l*=+y`A<0SegOTz{J3c&1Iq#9``0{=onIb-mJ-tk<98maD9-5Pkr>UaGCZyk7r9_>Oism`Ocst*lt#SJ;8lR&qgn3tK2P zAB|*T3uQ#CukVaHdS2-|A!DGG2{-6sxMZJa72l-N3`@scMGZBKi>Sr?77HgIue>IG zcOpv@f3|rc_Vi?vtlqK4XjbFl{I3=Z?ySK~GxrgXqO3y3{F`63v`m*Z4e=KPll|gw zFJe?8#}~QDPPa5Y zW~}FPYg0p@H}{z|aYipalEd;&YJNkuQo@O&4_cg#afS1moggb_QPJi!r)9Qh%4Gxh zs1n~s+=Lq~p`PE~<-#=Xutgw5YTc554bDG1wr*bLd0~)uWRTRYjGxGGfxyK-S{|MV9)KjJE0Exlh%{N=?7l9lEP*Ll7||j1SD)^oY(If5TIfrt7{kR^VLqlblP^~2 z!XY+(iTiNy-|5{j^4qCTx?CI7_FY>fY;&Rw7(FQbUHqSi_KjU z*s9cs8Bp7Uc866mB&_3!yRDqL2ozz?$%o~R$==<40ji!3PMQ$$)usL>C7!6)FFV1k4j{wvTlV`kN5tCrZWm@ zzEUC0a-vi~M;p9I0|A-j?@k1a54OaPr)_&1c_0Ox@M~qtk<8x|Wz_bN7(l-mX`=;7 z^JteZlpSbGA2H5nhW+(AP*0hjNXHt}a^x0!(By>_V+^B7ikd8VFK=}YYd&a-SE91w z>3P5{fF4hPLnAiC`UERDU&|O0cqDWIC;fEARBc9Qb~)Hzl}$TTTl=)DiyZYmpU!t& zmoyKXlesKW5fD-RxH*fw$%PD%f?Lr*fi5`A zEjx6Dd0$vb;=DS4)YtjytwGww;b`+qP|Y^1XBBocZ?5-m}j>KkB-Y zA8$QXtE!gQy-+5ON@V10yWxtWgTu1Is2T7*1b_o%P+GmS^!<=hcY)RCWP`sXr;ksI z9uXX&+%IrK$&-fnKYO`M`1O|c_PA=RPSj5!ksNM58(TIH33t4yJ>p4HN0F~;__+Ha zc`$^fyEV(;@ZDGq>h{a*Ri;gFhUsHK%+c}P2<#2V-dl{Hb*Z;9K&7*box4QABCSkt zY7jMM7(K=l+srv3C(z{R%)S*J5>6V9i1}U#UY6B2eUQ7le7wUcGX_%flamDDqfj zh8&5RpRCgQHJprknd|7haXRe%Q?+cw-qySg9UT(@o|X!l9tZ(U?6y2XRYd+JFFqe>}=oBLhD8AII$g_oTt8<=#o&z zm5&lx3;u9~1@JvEtuL!a0@<}Xcd`*xzwW_{Sm@~sOuYfO2C(bQu3N<3kJ{_0ObJ|; z*BGdCL(AI5<$Dbnk4y2!MvpL<_aBp~Zx%T=yry*nTq3n}m`?_NZlQ{lnSRl7{op%kCZtD; zJV`#i2{znOhSpa~^A2@eJp&QfOvB8a%%s{Wxt{gFfy?VEm4~`mXde3LaU#mLSKq4a zaB+ukJ9;=u5R`UAXB7G!H^-Gt&pVjXX|qoj7|q0Ijn!iCTkHLh9rt=nuiD-YUB#|7 zW8ciPvw<~SGLFU@f@Wj%gX=t~W>{iS!xt$tG22TM7_nMCcD@8PPqv4)S;Dnk8l&<- zsuznW)*H=6ZA~1N<)?97-yx*mNF}b3n#S?S%GPh!FIL*OGuE5sD%^pS??Eu}7yUAC zkt;Kkn9CqW5^XCM%E2ZaqBNnj?qQtc`aJ{q{{s z6KoY)Zf)}OPqd2lUOmMGO-)*0ef;MevKnGlXuzy=N{oi8Q+~zml ztnXxQYx8FY9jSC`lSYsJYf{lmv9UPTK*&b>Kx}ryh;gZ_h@F*@R9ba^-BgMeeI;K+ z#&`E}#}O_{exK7Lx+{{036v7*G@nzjHu7y$Je?`QKVGT~8~Wn{=S>&Qk+^EeT3r99 zz5Ocgj0us#UeagFa$EthaECy3`?^4JYAvD^ITiFT87(#=Jx7IMk1)!M!}w%DecIu- zV6^D18|w>=M2jPFm>-Z(x5Ax|icYT;5xxQy-_}kLU3GYXLz$|n6L;k2P@V%Q<6+Uh z-TEkwZ)O&)>aE^lBtWwz+f=S;eR1F$>*`pGV3C?PljmYgNr109d9CcBdJD{p#E~}|IUO&ulsm9}#)wY?ZdP2b6Jr~dgRaxVKM9(446`=++r!xm5 znoxVHxUJaQxP*(2{sN?(%v%dT259LQ{`Egm`+l#@`}5VB$69vSZMt69?Vht~a~atZ ztKCaUEGuMv{?5H84H_B~@`F$v#7NWrd2^OMG=Apn;%iSy>hzWwGp0A2TnB8^<*?nY zy<*p+2$fD%__Ni+qUo|--{lZ9ZI;QeR&!jqI&HL{pR?SGRy?$n>v%#2f^eG7HxTkZ zV$WA?iido&kDm{24+_s-tY^=4;0M9`hN5OG=gpK7?qPYW!o9yT<6lE7JIU=X^jBKS z45|R_^kO)Z>Dai3!+mu<36K7icSun^r8^NGv=Ihu_Y)`tGiimvVki@sVx->!f6xre z{m%aD7nX`#4VmwUSa`!6@X`u0zfvVJM+jPHyISl)~-t18Tm`rkKc@A703SA0Rk z-y}}4-mKROL03l$FECD#=Qr(#Lf0!?^~pQ0^cf#@?`j?th@&1cNR zxWXKsyfcn2Pull#ljU<-Q>HK7n^F0>O-+tU53`7co0<`#Gah~SU#@1S`fQf?uFaa5 zO7hP;R;~1WjLhs6ow-mmJC<6NzT*0q>8eX@sx_xk;ZexonqKCFF%L48}o&{hm{$G%pVB<^N| zWoeCMp1xBfkQ^Xz`UFp}5C?NMG&g#L8q98zseGZx0jc|PJ*(G4 z+#gkLdvtZp?(0@cIb>sny@68r5q|je#P8+MXfs z{RLfF{1~SzZw)h$7d`m60;YYbJU%~K9dlH%R0bxYQgtnS4mQQk$tZGoFS{2KA;XvR z_wzxwG*~sr2#&aRK3kq?G!xr+7uYaiVw5V1{NwH`+|(ZdA@IL5bV zWUd?!indbJ;odNVNbaPp;moFcrrz0w@o5`IBG;=l0YLMPFTIf zJ#`VCJO*1S(dM8=skZ{9Pvu}wg}X{cmty@AVO1*MRCzU+)9&aaC+>3IT=;U2%8Ue> zh4T}b>!-UD0jYA8Y$_xuRq{QFJ?fDDr_q$ygsw63gD!E4(za=% z3$Xhii(igur;vb?B>YuU2n-%f6l1^Pb5&a?uHEb@JVyWQ!<${OwYxFnf`9uwM)@v~ zOCo85M5UW=)Z`PJWPJar+fN!wDkI=87#Bw^9oIjFCiAi7{<3F`ETTuaun<_ZD#(npC%Oo&}RZaTPu` zeNkCXdM!WY47^NbU>?{ZKh9A7Q`gX0A^m0$D|IUk11q@L6Paoc!dFK<&JvRzYInFe z+zc|8fi-8I4SBe*d@l)%@GErk-qr6)9HTX5!?A(nvckaynf^vlJVkniJ21Vcge1*H zu#KRn4$On4IMb{qYk{xyVO7-4oR-g^%UugU+ID&(ms!A?uI-$(`o7lq1!}YlPovxT#M{>0hejUVRB}eLnnLFd-s&UMggoE5JaTdl! zg+jcA?d6v0_Mdy47v=jg8pPIelBVSuk)Av#1jyT_-y*nk592eY6q(_fdZ0e?5)RJ^ zCTPeIqtEEK02_Jkv{{0NL(};h>ovd1QJ>#iXvgqA1iI$!#Wt{Dko!c{Z0r(QPbdt#c`eTm^><#ipv=@qn3nj8n(>dRZ%+HZg)r6LT;bItR57a;$qYJwnmrpCV5IS}f zbo%!K{pw>Jy<=4McRkL^uhy#9d0|V4c$f1xlL#>a&&6E=l~fMS4oz)ggx19Uo+SSD zDCJ_`3PuYQ)4)?qWwN3wt`0ITB4tX+Hh%~hVUXS*L9z;xN@zrY`rRUn8l;Qsosfvz_NOV7F z;O?B{)JU^pE8J8dTD}NX7w-7jD{<*2C6Cf)zEBx$9&Jy7uR$5@#O90lvxm9xVOs{nODQ409VFxMAZ5ZFOB}|D>=iGq3$H#yoxp{(O z#IfJKnu5&pO#!_;NmHqCq^@}P1kK>3Fl?P|SEuzCy$mF=xVg3OLcPHK0^a zzx2O_Oll2`;VZla;lA2zHOxfzD$_)2GZ9)h4GoRJ< zOcbArsc#mat6XT;5nl>>c68ZhX-MP;`9WLc~^AMeDg*gFF8^9v5U=PznfP?(tTTlVbhOO>vv(DY+so**DoHOFtq3Ooc8N^GL?}d z2&E0IUkD6dPQ`a&YIRD-m@T0jdkhM{Q^7*??X#mSa4i4(w;gA;PmM=%KYh2G+djyaHEHh42OlEIM0j*o({Zrk_0m=IaVl<->^`w;}9R_ z#-X_Mc3k>F*J$3GtNVUMgb>_A85-BdOm|ULsfN&nh~6Z`Ktw=RKO0IZ+=>?*tu=Fo zezFf%C!|ZD!!-g0dNO(Jfof5G`=L+N9br8fRHMK1PIFa7Hz|>1M-GNh&Tz|>?%4`f z?0Sm%vy~cpbJO$(`wVgoQZx$0EyNbXhA$;5wxEPTZa~bJEPj!&W$-NDo;;>UiPrk zOWH^gf!`M~)x0lRyg(0)#*OoKtCq(s1iwl@K_L~~9wSS(z|ngnu#O3k)s|@Ri4Ho6 zv*}7`N%mCqyp}dYR~e3|+cGsJq_zZ7US{(ig%@vZwL#qvXgl_g5$q>@Y8ssn8aoLCZ#Q!i=~~On#%R`PkHtft#S_;C{pT>I}s9IpMpxf22^iP}8dCc5R1(NMl_r z7mMtGmy0LCVY^#NA2kWxk-~=du_pT%tw4P1V3E2o++)p2yVEYdSc&^(NrcT~BA~Ji z5(wX2Q&eU5EjJ$$+4{^g9Dd_mY;t^Vpf!7!hp|?4i*NZ36+AO(bfp6Q>gAyNn>li_ zqjoC!7%LVJij3USb`$1nfMhtDrwnEZH5PswF4E*2yo0^YyS;f+=*#c%YMI;jsw&8H*9i$E~Y zSdq}0{YAYMl57_Ri5v_rgr#ZXDzivYXOgM;?E*JoGuX@G+Ex*6O0WXg2{kvqJlXY? z${eC}ueTv_pbqeVE_$7L&zsO`lDG<-llaPsrc&Hmh8hw-jF<9d%#?%lODAwxRT4(q zX>99?SmxuzBU7w1OuQJsBt+m=v>!d^L~dpAjCdiPl-di%5QFSx8|PT(eFu&DdOJzg z^Z*(Vu~&-7LRjhEdbk^HPw*QG=Am*v8>E3Uu@&Wky)jv;Cs4`9=Rb!;xOMnG-~l0# z3&5cIU%lei`VN)=h@`(bUYuj3e*?)1dgSP*R+}o7(F}zej)kXkNe7ZPV5{F*TIiGi zOzt|!M`F}F(6G^#a_K&TTY}`m2u?1JNgy8f*b1@<>dWOzl#==e)*ipZQf^K=MI+j~T4=HD~V90hjN~8~!=;w(Xgs}!38JnpCg5OSZhFHK0)b51r za;aD3KAnqikMyMPYmZ813Ia)?r z=c1V{?aQBgFvih~;XoQ4jsL{f`BT*Jsd<1+>ghXLdO&KDb&H-2tUxEPOI_h!?11!eEvEwGK&9MpzXqRw0e|Lh?(`~mN_rh&Q>Ggaz# z0;gz=W?D|)4+MhQMPo*B)FgnV{5v(&OjP*Ob_s{3(IS={;)%C0eWl&R7WCqA_eM#V zgUagt%vaC2s)c$VPHdgd^x`5zDVDZ>m@U!HSwS_d!|DBy>UjwDqnH^NaQto#zWXD4 zcxk5{0fTahSEbrJfgQbt#R<{Hsm6Rs{^vQTnx8rYq~urNaFnxRSBJ%32Q{q@SZG#F z*riKmO)I@Rlz_fSeN7@p85HUTg=qVw?w3CIYOzZrOmlY&GNO9EubgSk473s~7uf;f z^SXG43WwJvQdpY8P3^!B!&tzsqBy#_l2qcCfe*{Kfw;ketDZf)K8AWtYzUNrkggG@ zNJj`7>9i(TTP~aX-Z5XR*yFq9#gsIRwj=degLRtwzzWNjCG}*B9FA~uw$-On$?Q0T zH$tVso9yspwydDquXeg)rKP+{iGGZ4L73bwTn8z7u?FaPfsdmd10$z|6XJAReQrPJ zKAJTJv5{WbAGIKT?aQtyX?5c0%w}_ig;mS7W2)Ce`>mmUM3LEHR-#`tnn!LagVUylTe zOYM3Y@MicovIRk4Bxt@3I__Xu+Pgl4I=O|OAlAWoc`280b)4FFhVG*#v z>9j(SOnYP|#sNp3YLr@b;`-hqIgV;Yx;v)VSCnMURgC9qeQ`QX|Dg28Cg939i-yw_ zPr27UFb>s0L(!;%3B{@*Ug>9tpE<^!*cj2leV7~HX4SPkobR;q5WiL@fcddeuH&er z?RT?sJ#u`#nvruC9r-~y^lY~~2K98+Efw73dWt;MI;678%fsA=;+xOh(?YmD;L!f{ zf%jtnUiipG(gxu(5eLh-{XW`ZAog$K>}c2Z=tq+P4pNS>)htAEF12vGW(n zWMMtgiw1LYq_v5A1M5bs^Ez6vdOb;?cvZFS8zSTTDwNWKnEeq20e?#~I9|S9=(t%# z@L2m;MU@jrRrzPUuD74xAS8&@&(E_x=AiRvVs8ZtPLN{vmuz5Nh66gPKfwMhPUZue z?{NUG{3C!X|K9*E{Ue`7C_R1-?kwn zClVm_w^v8n?0%h@r85P2M}YN+{dloxv92iZJthQ68QiU@K8nhQ^1(e0(+Q8+2faX@VKU`>szxFUDwpV=9+2uDil3mWdV3;6 zz-)TW;cof_6cfcdhI}Y-kSYOA)&@&~32g6_L8&Ofei^moU66B6X5sv(gavDew=;^G zn@3M4x%Ko#Ouq#q2uDNj)fw7qiA~cN=K^7UEY#y;DzcZ&bHDZp{Lgny;cTwz2@ufF z1mI)+2ZGhs$k^&H*&Ow1){c4q71GaXsfd>%0_7Tz86ufIK5X5zBMPvZ`;;pf6@R+d zxd{a##>n2$5fextw({uhf)*DZXdK^322oi-j$HY~hMM!7>*al^0xh>+{KU(x`-fP5()S5$+cn)|jZE{IGCBK@2){l@jDv zZHxG`OQv!_uR8`=id75028~9AurRhhl2PAr=u=24c@eXHD_J*XlRFy0w&I{=Bf@VD z3yzeo*df#Hh#_mWYZ~E?wKJ?#pmfObsCeSxDq%0~R7O!l+~x3jD7|f04=2v>YUI^V z0I^fOKHmjLO)tvdQrO`r#q$Gw>})&*7)o0A&!t}tdJSq&(ZKeO3dr@izVs%+ShZI$;xRm zH^D0~Y&+FWAu3Z4$^!__YhZ-lS*khMqFp*|Z|r)Wz9; zl(3X2NF@kr_2FUrm4gyPP}Q58OM) zne6LIgsW5s7V?Kkq>^M*U>MQlg-x6i=kb{1xk_!m>f*qP6ftLJF5OAQI6Bz?Jp-j~gZU9mjOk$wu+kh)7RfT2WqOH4A;5TAHWuYgS0 zC`iaNmTa^sibQ5zUS4{3W1_3tVvtXujJuubX;8RNIDQ{_KPj9U((8v1h&V~ngFL461D8y+=8hH4FRFoLm(P;KXfR_z`i>d@>xu*0V>VS`)N5JefZ zUAcEtC8#b+UHYXjjN%c-L>Bz0oRPn@FN^ZY5_4~WL8at;aVBpfqHK;>c_V7>J$`Ma zF^(Li$Y9o;q|CTCy9#~ye9?s%``i^vqFd}G)0e})k1v|68Q|C?^4ist^w6ybb5){N z9^cj-F!D(dI=*r0D!U=TRt|H7r!Ani2Pt6i`)3<+J>Uaa+^?(VpWGpKVUJjY76#XH z7}r#IdZ=JHw4Z{iDwLeL_Ui19Z}JOLiE;|8Ju#Zu1Sw*Din*)m)Y!ER4%cE?JY3ma zi8iic=x6S2nM^3u23fxwqz5>sf!XLGR~zIoCE*HMShC1&NI5KI^Z$g26*k6k9BfaR z7Gkp!efa$K9=1Et8JBaqCgS#)wyax#e=>@QxNe{SGWI#=Vn##;*Oh1x>RB4H5>h8# zk74U=;B|X>!xi&KSNNi1ByNjHBQZn!@fX(f3`^#K{N2J==+4sAnsW3mofY{PMh-&^QrW18y?nk&P{6GE_O6T97bmbp6IYI6)rW5 zP|Mf5avVH~^Vg1tGMk0^kn4?~!J<4gAcrWiPcyK7+Vqv7IW+J=$yc*#ZLjrl&SBf> z)h@fAw2rDRWnchzxpuwYUPvx?%1#y}Xa2mdvdxGUXV=R$dFOeDU)r5du``OrA_wE% zge3%zj2I5zNR#3^J`gYaGqu?<((%PgR!WD91`j2irke_GF(2n6ZAuAcgZw^K01a#W485nr)&XN zIun~4nvO9We7|UCx_2d0tC{pJ{Jz?{oXhtj&mz>IehuOC7dawEO|obWFn=KcM%uqE z2>GwnYe!=T7vsOC1qLaO+5n1N+HO%g>MXv9Oq78WD*uWf*@7*%urgwWHBa=ZBH)K1 zKEbtG=E_`7-o;#FYvO!~RI|L48bx+;J*sNMDJRg`{X%S2UzzI7>>+XNzzn%-DbHe6 ze;ckx_{l4K_)Z>($n5CnrxIpNH+NWk7PBEU?hPX@Am+EgFetiqgo=kgsAkB`E0$MM1u;U|F$3On>y@@y{2^YzA&_isx4r-&NIA zH8PRD7goT?){l4Knl?k5Yu>ICjpZLG7+!G6=PFJRo0AlM>*usML-&Ibl_J- zY6O=#gfih+BgZ}fb^q?3kW7J-dLjlL2Tp@k?wjeg-M(gPo4!1A>boOaBwDX;^QDN&y9ILfdp%6&u;vjuv9Q_?0wp}FwGTlVv0Wz`-gP(k6X;ltiidSiO~3fS zg{#bxUA2fumZ)c|MuPtjVfuSHk29;!-EZi`zm0zj?fLuZ*;$$Y*52O6m9a2P^95N3pijWb3=e?YGm%HZ(wC?gzpK3j}Q3A4v-wciEjgd8|H%Y{mrFv#v?aLE*CAI^)gB!YeAGWQlw2A*{jL) zoUNz zr`RXjku-7|n}s38njVX21cxpYyHV>gn_vg}P|{x7a@!W=YJj|MV&7aZ9d=u}7P?c3 zP9`F9ZRIDPS`x@W)G%Nok@>_GXB~KN>0d+cxdcT0yF$(& zsP8!C?mne&NPwlnNWQcsCT8Vo8DQohA)JyfuR!0beH;FGgk^>}Bqm3kaYX!d8zz02 zOcdH$zvaDD3Hkw(LUvIE+QAnl+t*WU5$85B8Q3k#}1=EE46m`yx!0lqq1^;HN;R2OMwL)&7KnJ z*0+YUrm%XxKmJv*Xux?Q%PaZ(eaWjA zboMQ;xPVE<1Ml@LjEG^m0^A~jLh|DKYbj?Z4z;ji(OH|pwimp7W|8uEJsBdMy282C z=aWv0#0Eum2z)lQA(tqYH)Hos^ob`;`II2J`FaDw=0M_=Jjt&6~(U) zBuHHFn|a4|**__|Z^2P3xC^&ZgaoO;!YbKWIGEPA0maguSF+@_5;ZiC%P+ zQ|N+ZdhjFX*Tw)h7`XzvVY;Et087GmDsy{^>3POz1H!F}oE53}_pp(VDGUT~5?DaZ zWi^V`qugQ5AxIl%Dh!H5wIvbn*DPtobVRwIM427a##>hO0Se}v$TW$8T^|F+6r5nZ zSBnVbNLoF;*2HI7u4m9!NZ06RR#=p(A(bVSP2<7_HiPcO0`X{lHYuFqIpn<=sE^X? zU1K&HPwVyH@n})o3gl7=a06g8yNqX3@D66WTnD=+6H_bScoA-BvQW681oaB(rw$y`0SLz=r3a_(Y!r3I7#$0uo| zRWPefeeQ$8pnBtyjJjBt>Of=^?O;?|b<8_WhGo_f~5TjAl0x6&H#qM(vLc|tw z27|?UsrsGmwpO!yMkK70!*ZleuXwBMeMA7Hoe4l^`QH=So!ssIB4{e2YXHF9@ZTRj z!(ecnAed72tkD-F6UD-$?UN(x9V7E_Co7DiT^yai&vT6s2d8s z9ao#vedKS65)M_|yey^9wfCE87zq1#e8T$k!-Euq{o6$HhG%Ky+}M)~M~#@Xee+uinBMU(3H$jJcXX~vVj*R{!n|wm*Be13 z1eI{8p87e!oZp+iE4uUB@6BGr@0{30^J+O=9X+A%oapmXiA;O%bv+zZ1>m&JG(2*t zuJQKGZ%6T_gChqwamwugTSxQ83lUVdwoayG1NjrUG*DF9KgA$Tmv2UmZMtzKl3Omx z?w)_++MpW_KXTo*#vUAlQs1J1W{|@^Vvuo3dJ_E7%G_;iZ^~%7Co0=zpk?SUrIccn z3|vh_tNBSh^fL>+BV1GYdJ8T5m>TG7G#8>s{GNXX0Nso!J{poo?aD_?nzB$$E=Hub zX9}ClT$8DUy#$Paz$CtZzmFF=UOc%rWaDrzq6A~sMbqI{PxMZQ+#VGOAV5CmMAcHO4l^Nn~mt>~o@2VUl;qk;qT&}N? zLt(09imVLt+E7rKjnn$4mX;Xl{ZtCDC8p=!mY3>5r+i#N1kLkwl1P%SY(9+2e>IUb zdpF^3Y`J8{TJL>Tw9{HeiVG3u1v3>XUi4`Hl>3tjOlTJX_LMI3tfw!z2EOsJx{ z7+C~&9f_)G`n;3%g_`&ys*>yq+gFuk8)cv_2ALNotw>t;z5+(rmk|gvCKrNIUZCar zgk;EX)VB?!7XqfXlT{wrkj2f} zB+iq)9sES9*bS>GWyBg31~G0!q0yYvf0;Ad-wxMs*&ao(J<~rufGJ6yhMGuuAZ!(G z&hTtj4TA^x8YBqX4B;%pII?4U4tS_&h4_uyx8MiHzKOc*onQ5$BVo2v=U3=lf#EI= zrRK_GaEh`uI{g<3HW-R{t9NY)0*0I)?hqTq%<@vkgAp!?wa7pC+vQKYu(ckQ6V=eE zfgcUGgdX_{bliA+4HlfJu7H zisC)Z(g8`GXX##`kxTMHh?hJ43C&p}rKKlOGuzv*kKG z*kKrfHdQ;RgbqQyG!sXOwyO)J=_!7+k2@Ifs0Az|jOI6K$V-aTsvD`iEw}1!PM+O~ zHr`o|C2jZXDAXyX`cuYYh~(1DN|yZm^R)UA`g4j%dE(V-)b!i)P*WsTN5PFLaF=Lr z%Mis>pgP8G*4Vn3Dt#Hy8b}sfajLudX+j*?A0(7WBz=(VP@b8ZhwaDO5Q6%3IHM+0 z`svqoKJ6?jub3*~9@vMqSxGky09gPrEoge5pMNenyd(mtTIN?OU)9(~U4WzCC z{kCXBi#r7Svmd$bF_lfLr|vKy7CC#JFmY{d4D z8ix+gpN=qr5S{oj<)^r}Xk&3Wme7+kA*@C8bb)AY2EP5Jx{v{-uXha~mw5rIBkBJZ zO1IWG|4S6zI#xgd0Lmcz$RX?!6co=&y=;dhA}(ZLM;%Sv2%F*H5(mnpx1EvI(a~`x zLQ5|_MEiQ8GQaA6ElIfWa#cV-MkQ?jnecqFB35AU>P@xvsVw??rXSB8khH*JAPID} z!b04GdSdx4*0llS6vQ@ONOv9d4aV}oN-w5Z2{>&@v?qw1Yz?)*Ldud4CYe#8?$=%T zn~?e)WnE9q#o$3kV<;VM{}3D9-g2-vhME2`+f*0)0oEXH>#Ug$XkoJ62R`JIc|5!+*Vt3doJ#yPA zRbgxJI={gtnuiz#G)EoCOuC>z*u9nIVv-gQhc)@HN8Wz(pTx)>KP%jCO+Q zb3)Fc@NmfLJsV%!-UES!UAld|trRhzN~j+PSe51sxlw5o=(KK_o6y&LM)bOaO<21> zfO!;8a7XVYO6V#K@4BOK#&fFlJm6j!KuF*79BZ_B=!eMAATj(oomB3yzWWvUwUOxJ zpg9x!!*&x&pM;&kV%}tGj+&GWC>fV z;)&RD&CqWE(AeYm)}6X%IT00SiX#Ryw_XVPgdW7rD|E-Y?NHWZkSEBVLa9zT-iO0< ziw%$LT~Ri)Nt1nnF@c5+ejZLmhSL9-Gs&VbwIvy*407YfK>Pa5g)TEb!ukSs2lgu}VEsQtjSOGT!5x|Q6u1D41+)sT2M_VgrCu6{q zb20;<-2HJujAOfP0A_>G<#U)hTns)4o*Y4a@WT{vXg@=j2b#DY^hsc?wTC74+O zlw^n7c?#R^GjT5n*UX_bjJ1M?cDw2dOt7qAYM^}>Wu~jC7js`s-&KUM-Ce`yYyGg( zb_i>Td1)|DMZfQ(`WZqYC=<~0n0xF)n-zS|G0YyK5UXk9$nCbPXPk{5t?MHl{v7_eLr`U{~{5PtDz$_cmzqUYOL3-DvELSsliFh72 zlHWCv?Vk8c(roM3@MkVfFEBM@=S^EP=3RQjN2*G`0B^=_z$d=4lX9EGn(-y|!m2<|#Zz@loh&~#XcV?}$}2X%kKq4VQ9{ielha!CCu zYkI!+@mCQ+H?w-&2soD|z`6V%U+f>O=#K+&R?wDRqlfpJtWpcA11DR~5mcf?`H~R6 zB6i3B*ezMoMV!`WZGg3UY)|s`XjAFRTrn3cH0f z>9?3I)f=Gqr7{o&)}t~(a1$-rUfhzNu^qbkVdv4Ry`E+aE z?k?MPDPpGhpjS}2Ku$ho3hfd>d>Et)omRh=Nx`*1(pPjIoQ|-;N&U+=1RiQd{O1j3 zwZg{5VXI6X8QDDV0!I)N{JN(piSSpV3B#}JA&AdxMe|3#w$Qx+I#wciVK4%XE=3Sn z`7_Qky%qU@D!e_NH|&Eh;=sz*P@CKeXS84Dc~oD~H6B|bBV=%H^JVm&{-W6P9Gs$M%KUe8{G-qFapj^0ly>=SM$53xU2f5Y1*~L!qt;@_j z69y_mv|BR-R!upl-S(fIab|ot-{2nkD}DOa9$R{&R|qh*Y6{r1{>@3(>}cp9KU3nNSM9vdpF#*x&!NT`V}djzv0DbR+mG$xqN`` z|45SGdH5KOy-+sbM$iCwIMe@)hyOFIlR~%696das-Kog_l!^r+4OM;vA~-v~y+9)B z#VPS@U;j1wWYa3jNhed3YgsKs({kqHMw`1~sOOV9&=@muFf1=WoR<0M`@ z9(Ips$P>|W2%4$%Xn`7;rmJML`_|77y9+&7r^*l#Ue zqy3hv{toGRI75NH3<@BgS#$`K7%+ii8NC?TDcvvjei$k|Hc&qLKRYyeo4^RRkZW(H zeCo)Anifg5l~6@Sk?!_DvjVHawkAe|#Q9BK>*Oj_iFD1ni0bNipF{)2iLb0zqa>uY zXJ_9KgCHN2sVj_ShR$Ek$4|x`RL&xFPVO!0TihEvI%rFmccc*N8*xpElDrgoR1+5( z3Jo2^uO^1-K*uo}h(>~YPm9L4wU=>*K{zCjs@XzWJ_D^og4F6%)~>+mXY(2(v3D8a z-u7X{IZM-t18)Rm1lZ*0Im9Kf%^AHfLOxPDSfR>C+=m%Z&b(_eTQP4c+f}u+%AXe&bBsxumfv( zNy%P*_>Mh7>R^BKQG0i)@AW9mySX|QKA5yK$u&-vY1t06<1EpeLMkgLu)J@=k zeTDR;htUyR2WyF$Zn!CzTJ}njT#cwL=Z|~0S9cxm?`n?{F*#<+p;ir8N6EIL92>HaLad`0(i#wp zDUu)H^y+MN%>m!Q4*8t;6-LoKlx=g)kr(|;3TTWJkir4cIxeq4B5#x!uK zf>=(OVOtX9gcWn%eU5RfU}}UtHdV|c4p|b~m*2UxP;sPky{oGq1a|P`_nn|V5g|?O z!<&1F$dBlcNg&Es(pzmL=b@zNk&pcHxZI>VQO)z)LtQy zAt*suA_uh~3m%`cs^=&N;KR{BY?^;o)&C}+>%Yii;B0PXM57M~o0;evIywGxyS(4Y zM80Q4W(6Qo+_{~% z^x8S(>~cRq=OhbZaSI)LlW#fQYqbGKhitLa)(5Hhjf zl;;eYYbu9{mL5gQ5wmmltrV&2Py%BmI#CwBPKQNf8n@+s{1V&6g{STuv-}&oRjvNg ze08P8toIz+qT-1&9F6R3IVz0tIK}GJp3v8N4ZnVXua57d=e)mhTtDDg2(Hp zQcMM);`n#G$HNivUm#V@!YI+jVUHMNC14Tz1F>GVM60VdXRN_a3#wzSscyGAOc`L1 zzrmH2pR$tFQLH?n*Du#0Yo=s0D0Q8Dz?(7+ix)E)T{-6a7QrxLm8kd5M(mi2?+~WZ%VO@tWkG2dDWu|KmU!5h}Xk3dDIizj;yCEKuf`4_E^ z|51PbnZFSK8@_4G2zWN`b^vV4zvV3);!M6m0P5-j#^1Dz|1awP<5d65S0pEgWhKTa z8g>-q#476)#DHrR{j3g0`~e)rAdufeSir&o(mzX0D_sNR&=Do^Am1NWeq?k}dSa4l zVp3eWR)PN0AN=BR|M9Ah$4g4~(IW>vzK2P!)#-6%pUP`B*%83C zAfq*opEFCPChWQ34!ya~y5KtZfy0HRA&N~5^BhW&Jg=2R5MJ|lGz=iooA9SnGM@Eg z2r)#^ZSRBdUrcPMi@%tJDpx?FhDjQ4b&v*^m%HZy$zen4u82t584+_VLG=o=V9vx; z_`CW=9stwucdSrq>ACU`K`Ure~+=V&OT$TUVOLT#e628i8pd+0W!UjFehwJkYifNL64tU zGD|6Pf))(z1eLTXF>!55IACpl$OISPb$Jpr&O-vtHM}11_!d+^OV=gaize)uCgqW* zBkbq*u2o)HtkC7LiQl=0{}2Viztl0G{LH;XBWM}nC;JbS!)>n2#!Lue_8#!j zdhQ$mgYY=?tUnV3+_~jWJa@7>;?;!`bn6)sp+2!|$e12oa;@O0L6kS0+z_0ayI^2s z3_6$U|5*CP!fX)fGGFC_;k3URGM555&v7;h{9SOp4vYuwYQb_WEGyMt37w3KxH$IQ}*o`{|4^C#I6H3!_==I6?UCgfKkZvJLb z$w=510l!kTIg~47=Hz-K4QGQf^9LG^ag^0aYtio#I)#Uc@HZXT!%X}NKWu)ouxCQ3 z7|QdmQ`Fd%ZIeJ>FtiVb}KLb zgg499w7QP&e-g%jyOMGsLP!`uEo%qZcKYY4!^+I?L3J)vudD!5QLkIwd-B~Y1+L=c zFY@Ls^kd{S&e6Vzkv%%~-Igh}G07BnWlEnQN*T}t zb=I^|2F$`hK>~uJOr30^tyxdAc1v58&2^O687o^g0zzcCJ85C3{Jy5Pp^*RZmdY9w zHo+YRTneVf}C2N>X37eR@%jP?9 zhSAsFI*$YRJ2G8Pnim$75Y_kE!-U?VTW3GWf}VhdwN8W;T1$helML1j6ByoQ38puc zBbwsgqZLD)<-9jiv(2S99DLHY8IrH*-P7Vmv6S<~Zl!`$tNan#ecARZ=JtZ{ zvZ4IiO8b3*XA|P-{XBvsFVbnXB1{@3`lskQf|gMl!i%Y~0XZ3(nD@+0B@IIPeb@R1 znJMi1y6w^Eqyh7z_WQ&zNlctslq8(Ag+;!6!O32?H81N<)Vy0m{l?pmgP->MY$VEg z_$ZYn1b1_!`@-nwBv8?BVLT#+6782e3~&uBE}eC6NRFDIeL6@D5QShQub95ecCD2i z?a&3mYD>=w8(IcQ<#ojn`ICIb+l{RiEbwvD1VfqJ_qeD0sfYRkySMsM>;ACb@D$^H zTX>w~s)0ih69*M(-PkjaXWr&kS>r4bmF0s7n-V7f zT7wO~;vS^ri4SKLpd?T(BZ%d3Am{E`+9IvsbT#Ip0lvAkM)CF914=9+PtU$N|12Zm zu_d1&OZu22H24&AtlLS5fwxkpd4%in zq(x2M1}V%W#f zlTwB)cJ2C!B?^Y~#k{NysM)hzO>MV4Xr8#FhN##>>TdS|qY@W)>y7$D8cwCDjM0Iv z(J7u?Pm$fLnP|VT_$%oq2h$Oh&H_0W7(C*#&Y(@yA+n817yQNM$omGHe#l=>q!=Ql zyUI8X-=~vD(z2Q9RKAy(jyfk4ywx7xy-4SL|ISw7_;F1+ADqJM3?N+YKe7f6W~L9q zos{pD1kjOPFKGQg>w%Nd&P62V@k`xrcJkyCC)40;UHdMD;rF^T!J5!JJt*Kh13a!6 zt`;$Da$%Y@tL&DRTdv((K)tCtwg}zPp-!ye)PoL@W+Jh7QwqU)}*(w6AXGAephWQa8@!2p zpJ-{aY9OXTJ_X%A12OR zNYHMfIaP7N9guf?|-{8UJ5lWiuP)OQD= z!v;#68<2@n18F4O5uK)Q)XH)nJVy~a`uy`Vus_`%X#8~Hng3u}i={eLzfVktw!*In zD$eZZz(vZ@)Q3-Si-J>*$QR7SF}fz*&P7_KsttSG1-QTlQuM*`F=@W3ZhW6fsRicc zXqw?2B|DVK>Dv~xJpxXj>P=hAy0EprnhyE*H$= zW_e_UA}2P;Ub4UVsUF;467i*@u-M9@rZA8+aIm@Tj;N{BBb2$pk76FL%mAs+m)ao@ z2Ej&YVI#p|P<=Bx1DfjYtV_H)zdXFy-22U%aI#P#d!ifb4_fHk7LxS+hn(xG)YW>NAnt_g? zDV0=H>Gn$9a;s*icfRfH!Ml73*7&m58eZB(Q(C3J+6i>94} zEz0&q5Zi+fvo6YY|9Y>d1%icUFP)f+3CK9#}O#PbPH~DPF zZO1dOe<{+LKB~T$wT|zK3H@3MqCiRC~)@k%Owy#g%HBV6~ub+?^kd$Q~a&54o zn^`o;wXQVp3mKAgL76$hY?jZl>M17h4gA1!DU9-5XUWBX$Wnm;PuoR(HIn}UVgQ_( z>S@2oB^gLyWj!DQ=YKv7OK|0kq4;es_)d@m6T1;LlCoNep;95*z=IB}zj(Wtg>>8) zLoMEw)jos@8UAJoTr;}Mtd3dJwqD9k_WLpIoTEmaXt7u39)OA>;-ADZ21bq#ZuCM$CT?lHf}P zP3g;FzlLljNOrk69nvI2xM8;m{@HC*vTBP3qg;tpbdN%klz#KnWyTi}s^%DBVEDA$%s6s8)2SfSW&?E$;I)I{R`RXn)BTiZaOrsTSNa9BySPdbLz%9b}?;uDWuKkHR z+g;v3mzqc?w?Y13fmAx}LpIxWJ!lP)LyzJV{ha3WBq0H#jVd6{w9w>dO`#^BI*a;f zEwb}nK*CMT-{rims8R+5oidFCNOjk|K6zo}haOU5@Tj$73i27z4Wt|(?h=rNrz#68 zvl!V>$ZU$)YeU<{YxNP;^U#=^pPPo&uT`voe1gENVED4(jv5$Usy$FQmj$^0p*dl8 zCvgtEsmdE0+A|hNMTLa1kkjr5Io4rL2F`S(S)|30sw-!!R#YUnkeudj&b$2(>9ZiQ z6uxLb*F7|4(~(lhHZK=W3G^zlehYpE_XsN01#IDOHi9poh5zkhXoK{T-6n|4X@!$B zj>oBcZ$^Rk_vUi%&U;=fl`%^jn}g+9-3qJ7If9g@AdN!p`B@K#0e4quPL zeOIWS9*spDJ@#kgi~at=&LgbZLF)l2CN@B;{&{A^@VA;ZCRPA8kRJ)~j8){Yt3r4q zadJcERLka8qqt8PWAjcH=7Vg;+TrW z+U=|!=fwH+w6%Jye#BbM{as*D??IDIWe#;`%_e(eC&&0idxltWd@v1%3pwo=!czXP0QHGX@scPcRT-boQ{0&fz>9AsSg=i$ zv9doO(S`i7;5IA)T}luT?~UcRe>0VO07K;zIdE_2;PE|hjVcvhGju2;l-iA;$v6T= zQ#mIqO#oHM72NI<&}f3a*S^Z?eibz|j1djm?@92KI{n)c`+Xo6Xmc9Zk~o2D%i(?4 zvw-hc7xBH5o4;6Htc$ir%cEks{pm9XV8D(-(qgc>({gE2&4TRH0)9$P>SM~qQfxw| zHP1bK()OyT_ppG`OEP7few~_p;haOTBH2UUR`4(Jp&DWIW}ztSn^Bv?7|x`tmalh@ zm9?Q*r)9`t%glPHIbnr=Fp`m8;z=G!i_R2xj%QMkI8)~anWris+3;P9s|X*!(~=C^ z6YAwV`>mH%P@BqlAhGHGMkIZHNWVdt6MTp8-`>y6joT0lfKBqBVZ;8BUl~-a1Js(R z8!u>xW)8W{r}9uV7RR!foT&))_tq7uIng<&^hNKws}9oh2$-;eWCNRB9YQb~o;pT3 zHkVhf9gqZK;E*+C;B2{{1-L+Bmtgq%6w<<1X%4hj_tRnQQRqyrBO@TbVOY;UT5kY z1ly{-)h4$VX3k@8bJuCEa<^zazmxJj4P9ej{T$U&$iTuZ9mtm!8#puI@w1tjdt%=w z)Z3X6#Qz76=ezl$@LX3zx6@)2~yM@onm z??VN!WizXtS*3-v`qQZiLHXxXyHq{2Ll{BJbJkEW-qo@;3CD+{$E_ND@^L89E;Ns5 z2RB-Ssn$9(XULqAT@4ZIGHyciC4=WseIBZN!ZQuR*(%FF=E{!MI{}Img{W8HPZ-vw ztvO7E6!8EW%Pnabo7n}=OKF|tWke13vE@lI5jle0-8^IKgDI_d!8e2J2Tq2q7=JBs zRnX?&luzyldr6|^@mz2_!uXL=bSuy%mt;3f^~(ZW&H*dbZD@Vtt{9p%;|*cItt-oK z|CMJy?E|Qnk@gwj%Txczmou|`qzg>q>tq2{uJDWZ;Ftw1$}tUrOd-FBL_Z?Z z@YaULQzuzXHWJ|*ET6zLR-nqrVjg0^SF;{nftmO(8wllT>~d^1&X33DO7L*~kdGhG~sIq0e$(lp8y zR6NqsG(I)E<4+1#p1dDIWWfIB7A!!db$=+8w!O&NpXTBpQm>zXrJgeauYM7Z<=`)@!VzA{qj_HSI5Rh zfGNA%YfpC65P_xMX7!Yg!#ybcr<4+8O-6J~QVIJZI~MmaZ-`3@4p1TyD0VEk+#ayo z(BeAp087LY2wxZ=?222yrp z@2V)e8I|OD{hr)CqBK)DDoz&R2L+EOD7mJQ$7vqM-Y=s%-#*0N5FQp@Qh<=V|H!{H zvwZaLUGd`p{|*rJTcp71ioBGKc`n%8n-J{gQY3So$U`5|p}=Ujn(drevkn+BQoGai zgf^kRI0bFUi44|lM#T=;h4J?O%9y$D)+&@xa>Br#?~S|)rMsm6OE_hoZwf0>W$sHU z&Rds`I36Ws<1}icm#rzFYG3hBDL~C>sMOMLWHd7*{7Tp z_yzb%JcGSVWhN}aW-QVB_7##Wuk7qv?3u56ilCg(p*>+>SZqTD-}Qk@LAS9o()K9g zTuGeeSM%hEm)iKM#u4Wnp=qq}L0YV_XUFv!Vw(Esg2n0|$J!vHWS{UZ!m z|3=hI#&-aGJ!G3yNc$Y`S`7n)IzA0f*s<4E#(#4W0q2 zldu|MSwiv=Of;c^*hL%8vNo*^4RZp)@k>{C1oZ%(MA%{iLUTgl{OSygXA_0@(`pwF z?rzw^(f%!3_QwC0{UQ*-&<~Z6wumjV8tgUB1h_Q}ayiFmUkmN1cC7T-LUsk9l!1uV zEY`y$rl(eJMVh3O!iA?4bj=8(w@;l~4ws>Jl?@3L*tb+ZcfSgrLcpVhI!kM3yp{{% z_Vv6g&)=09v*rF<&Iv^IPO<2M7%t<1o29MRtODuWhL! zh+}XD1qDC$oVhkA2^GD&KY8dX4(}CEVN@W`nm)x0P|)Dr3o&j$PYQKWl5*fWJ!Hy5 zw$Qm)a8G4eXcml25#6t`QwpF?2`h_ri&Z6)1?o=&75RrI9!<@w&iCvx;j0pBwSwRd zVj$wnClrr1dP}y3pN5wrwxd?WN$2tAZe*iZw6F-tq_Qoh$X0V5|GL zPhW<>^E{_8Ii@=4bg)p?dmLhALRM)^FEL7PaRJps@c5#bV?tM1YpOF_l+dJ1eLF|e zl2X_n%$(F1hSMVQxK3m;JPjLDem>KP_vAA6@RG;z@M82vO>I6nH-vkc&Jy~5Y}^ud zJ@e}{{xrmr8>O+Jt8TGEvMZ;)QapwMJdaasT(%xdi-sfPM)bL&l<#-wvQ2!ep&!UG zf(Q2UqR_@0k*#mnhZu2i_mcq%;G1^-Bo}36VE>ro3?{F~0vM3ct49jaBhm!NlK>r> z6!hR37}{2CXkwUz{Rz_0fo4N9i;!QJTo$qyisae^<>J}w-;P_}Z`g&XEYtIcc~MJy z7PZP8;}M+q)q!#l+30qM!Dr%!t@AP&gRoRWSz19T8bzt1jAo zR9es{pU@roN)!3EYo78AG@GA;4^i_Yn@jqz_C}Hvtx1}LdR3~!_pPnyK078sclz%w z?2|O2wyO@)a!yivye>N=DGgE8E5`|&xXF3zr=RpZjw4TWdZ$wMl53Kxk}CWR%1>~e z{0>%%_4+x6Auh9wKwEIy#&g}Q_FP}gkM-c-ZwPGGjc=$pkJ%iGMU-aIt+QC$Vrq_- z$IZtp5}$oS$;I-&Sp+@!>ak8-=dcyQo(eHGiZixy$$l~(V7p?M686DY943?av4EKz z4#h@}71mAM?X))P&6>%R&c#|iW0H7LgEwD|n=c7dUN!;CM$+|_^6q4bLAz=#(6Owt zg_m|F<9Pz#%=vTju)UBQ!i(9S(Bga4lYR13#QbRfG4g*~{PO3KHEDpwfBGZu%*gi9 zJ8vc{04yG9c>5Jq417IcyeAA=@PX;+Am}NcwS_f}l%&lX{iY+c(P^ShrUXHNTxR_B zu0!hWE0l9l3b^U$>HVIgCwL2<4J1uVr+^?VQ(0ep(gV~SjbBl9?uox;Fozmp;*fhr zmJn;;Z>$_Spn*tlvNGM{&Lm**F%&iI8Zf9+%|Xa(dSDn^wtFCx;iI`hk0fk66<*}x zdw5I7B=pgQx{-}QH8jno8`114GJG0Bpvpdf{bG@E2`nBwW1})HxwH1XcIsZT(`E=5 zrRh7s0wT$9FvL@nmX*Y8VEY zOs*7z{DcV=iujFH0Yjakn90@rQ@e^NcTnZ-J%Sz@5D5iqlcK4;bDRDEA+TNH9Ct0y zxr)pHtQNrFvKwJpA47)QM=#pL+cUm@dbr^8w{*B^FN@TyDpqu7%FB@cTE`xKp$pAX z)!cDt-i^fse+YETTToB4Dy52p8+$l7AXEFAb0p`yEao z8>%R|@OUHhWgPiLk_r}X#XKv<&M^&5P923=G#4aFGZ$P*fJ7kz2aJ{`HA}wM3Q90d zdiN0K_ie9<>tmYF3P?OEy;`O!G}0Um+IAp|mAX`UfUs|4uuBXU4oW<5JxvYG{>O%hP{QiR_1HfnE>r%MvFzjNT|x5({1-y*{;2#Lf)4b1A?3iDmYN zKzr~7!j>6Q5WCFpEr_b2zBKPo6iD{UK!io`vI%9*h}Hs{{pRfZ-+QT&g$7Wj`?nhu zh{3fWwZvIBZ5JrxdSqrV5?9$u`Sij@wnq>zcpyqzLh2b86c#_5lzKC?#y@_Eq@xo+ z6CK%LJsFsdq+a_Hctri9EBDx^@!*2B52IApuViS{gVedHM#`+5;N(WiG`}{XT9|8s)--d=M!ZA9ZT2(vyyB8 zP{jX{{V=nAqz^8XWUT%Lg9|ebir=@SW~+W) z{jUOIgafjbkHlSO6!&uq0Ty%J-#gpdLwbcsREtFU{7IIu&rr#|Nrj}B+~fQF>)^lx zg$ic!Kz8#qPY*!m2&Id!*FXtmKXum%ROqN{>wZ!nDj% z3vK~lup51b!sj65bl&#-ZjLI^yVMJo=)kgBM6EgFt}K(Zg)ZL$%m1Bpd%^W{R!($s ziUHc)lLGRQ?*df(@|R-l%l>1GpqFN0vbDE{(h#VOhLLyF_4ErZ4*o*YHt7zyHX2x) zL&iID>>TS7QB`3Mgc|6g{mxdVpVUyngze56h3|K6VU%J|-X6+I3Cqa)I@M+_v#zswlRq+K5$qU=?k>Ke#!Jt4O^oueK5MA+#{5~ zT3W+^@1Lgytc)MW(sbel3Tf{fD(5KD&iYKxXB~eKG zek~zL!G#ifT-%whIijjt3uzH=?%bZ90n?9cJ=xZ5=(}DKU|8L7c@U!nU0=N%Kv#jr zD1P4qNsoZh>6o#&6UX4WR)JeBK~cFn_kxg%;TS%`mm_hd5|B0w*v&RLD68(#c2|KB zP?W&4+!(&yaC%n{SZmH2PbEaI1~1<$ zTr1+m9I2?`CNAG! zy|t1wr_qW=FI~F*JcQ_Jezf6)q;fjh18u>losWKTK9eJi%;^sR<{g?^j?9+?VP(o(Nl?Wi+IHXt*RUCTBRx|9ds$mkB5eMKd&~ewRE`YG z>cKudeC$v_E?#3bHgNuXd~}uVNhE+>2cHN$^h(x6A6E!&jaFb5RJ6ZVG>JFLXv8s1 zujdZg|47;#g3tOGtqAuZAlX!r2yccmmn<=XqK9v?0=Q)udM$8(e+SRs2a;AcnZ&qZ zzJ|=~c`Fa79@`e^P%})o-{js@mx9blC{;*h*aQH&NmvZ>Gy3;Ju$;D3?s`{N)TCID zly<@`;G)@EyJnv%%BP!!pR#YnfB_l6B%DI3glmE^9XiW8D0PlzkfRx&{yY|zQJF*J zInABVYW{F&ns=+phm!dfFs)Wf9vt{3uyf5(hwD z05Bfjf3WlQuN@x~V+&_HM;Zop){i`Rb^?Q45MVjc&37<@I(ALpr7U0EVlmH%bP0js z=b}0TYkiz(>6l+l0N|Neny8yopDSF%`9@wOFlz;*PRMP3+b)#4qj~CS#t;PvCBkvN z6heIchgzSF%iJ3nnh{O*802#Qz2xYuKK-nztAHwlcd&1m{)DN+Yi_DK;7n(@c?E+) zzmVh;FZ^bJ>hTf%_xcBVqxsx=FWYYGtr7(eR7!}39l9oKb!MZ6j?S!)m`Teql-LfM zn$^Yas?3SXi95;*S#Ae>6)GY)@56RGkxLFk91;%qNKdS@Zq1rYOGSt0u3wA*lrOo= zyoLbOp@w-jWn1cclcYQ)(tz?@Uty=Xl!=#kv4~mZN=VoUvJ3DR^_ zBd}D9KGO~^_U~=brLK3_Ko2yR1asG7aSg|Zdf=}yr9%di?Umghn5e5Yz-dYVSQda3 zoAaN7<>Y4PM8o=#j9OHbk?QA11)LkkyGaa`=!t~PLqo*l7Ki0>!3=#OnC{?h2gIicx2$N(sDG@jjT_`VN555aU zs`S(fv;$h!U(B--NOBac3aJmY+t-uYo`3^KAq#=dGfhjd3}MPr7WVupI?f%)y1@r% z;Hs}#aMZ`>fOt291&zWiDI?2eO0K3wd9t#!5GUgtAzub*G5>oSGQ&QPK4{$q4HEPs$I#vH86MtefF}@UrU)%aIJ<20ORBa zu#aN@0Q3L+*TBWuoW{_^z!7jq%hcM=?E{NHsVrl+4k)vZ)sWT(F)cez82B4pgzCoq zfd$+U%+oc3M-r)KN9zgSeeT70JF5lam<$O?PapBVk$**Xp$8}Vu`bkq#`PqOLEba= zE4w|w80OLGi3gb6{1B8UUzhBd!2c&Lqp&Eer$Ak*Sl|mGv`&7+Hy;V6){d?&%)Su1 z#|9;2|9(lBC-f+ zM`E*n7~9C8<`U_>}iaLN><{%EuFvAS_GFaWHlG!>M$gck<;-Ml0&mre9R#|Jfz%8 zxLU?yK+%BWN#v#UW5+5&q|#CHYx0=w6sCbJ>s%q=9Bn>GZ zU2dhB&8Tw&TeZjfvByryPDAy+wcs`f-8eWG$~J`><@fOwyebcL=Zk&rxLk`*jpKy(70JRo7=fK(>R$JIhr_s&_+N{NfI!W3s@Hr>NM^x{_=&qvYvXc zHz*J?4rRU!K2wG`y|o&!F5v9eap9>XKwVUr{?)_omo63D*qPXY^;&L503#L+5129@ zwB_-xDM}ef;BRN$Zi%_6z6BMiCI?t`b4&iUa-CLjdoP|YuSmf9VYj-Jf>KK+tAf2#NP?NgipBG7 zs=oQ-4ER?aA($?uS-?Wm%Q|TwH;rVvnad~K32+luA>-2BCwxljmPMi}X4Y;Fw_7Am z7rb{z@JuN@WtH*$27!-}>C<&PH-{M?*UEESmoP(9&pU-jl+a*kgi&9e)v3b7E6g_B z)!snd1fMmk1J3g;>{#UIxf#t*$aJqKM|)VneM2Vi#elU7=9jBO_q&?kCFELS?<`YI z%)2$Wzb{bVZC&SIKlEuk9z>eA0g;N#%w@=onimRJ(Pn>+WO^S^7gdO_@< z7Yl%O$EF|W`3FTp`}Y%-@fUYNib?N^Pr0K24?p4A=;b-(l>8%^BQh!?9UB-< zF*nTRV6zWIXn}tEIj$6;xAw^#$?>@TIFHd(72z`ou1g};w>INZC$M@qCJr+^9x3}X zB02E8dwHyW>Jz#rCJ;ID27mI(PCq#dYo0NR=uI8mAU`$yrrMJV(+$ zjCG1XCC48WfS6#-9Xp(We8;aF0Y4o zf>}u$_JUN54(K*7xh1>8)43N57I9EAefvt!=MY&#R}y zt=Z+#J90n8mxS!jEYj&Dk9oA+G=n-RbxjC@y#}sZYiu$C+iJ{{G%he2n2z`Kt%^Wh#{;&n6vf^5F~S&_ zS97V<%lGhIsW+G9BB+WFOTu+kN)}eoB$@4`FT@ccF$`X-!E4HrRmN;g=|t>a%90ps zd$W&x-+C)TNZ{nW^lWm2XO-#{uGLAT;h(F6Jvd3E&t^!>`Pwpy`+7f>T3a^SRn)I4 zS~LJ(@y*W_zdCHBux8TQXb$VEty$MLTKIvu7RkVZZ^duvSlpcq@Yc!$QR@@Y5%eJm8~pU@_}@TZu+NxHobi{lY(%8)2NZFqnfm3 z`MI}d2EmUb;mzxB3ib80FemaCyLiij(9G{-Pa^QWfqn*aNw$g*Jhj)hT$Rk znfZlkGh)okMoPEo!B|t0VO;UvG*QYebvF-D2z{<(imk(Xo_>8ox3~FWHUTN`%|U;H z@HC#DKWuP-Dj?mPqP7P(2zs=MFiNONN?QhHxjZ;gTN5!$65VP+NB4Q+ZtVWUv9|RoOptq^1Tg)_{xUe?4YK<7i@QY~uKLpE{{D`q#|kUw7a{^DRUYY1s;a z_NVC_$OvB@)OI|A&XPI0}#faby`Xk@Cu%=denq3oYgq%L#m zQ#Gp@*YbkgPQNmP3lp+LPA+Wm`g`McONe=`!}yat@>xo1F)TN!SbUMz{aV^31#|G7 zbgXb#_(Iv3t<-%|YH)3_KZihoV^bQv^3em{~7R zoTFlb?C}2Qa5fKlITM{rm7sCPG8WCHtBqN#i?#(?V^kfbc)6ck7hwlFSgm^|MfNR4 zFM;quaSkM#Y=KHPvQtf~n{a8%c&(wJZDeUVIBZ=eIJJEkuCUfqG}t)7jsg6|pWzB0 zci&Kl@AU>4I^=PjIgf28WM2t+!+?1{;EFe5X86~+O;G@@(tm`jhpmB)g%ORh$-nWn z`zv?<7%3As|Jnl#0kBhqY{l|!Qc(opT{rMx_yjVhYysBw#7Rqv-fm`YO{F3yA-RD_ zw@m319M3308e}a36cfCqQx^0qrF+o%l*V5X&9wz(;zpx5Mld(FdUpX2YoV?V?ZKa{ zJcJ-Av-5yrr_A!h@uM3g?a>;wPwW(^9y)f1ODURyb;m1@+k9+D>pxfsah1MATdjG%FCWy_qqD8{!&&5_>JD1VqLZo=q(;d| z-2RDmjQrGpM@=ff;T2>Noduq8x;O7!;&<>ZVILhdDj*__P#6Tx)Eg2ayKBts^^mVW zWgYhaYPEk)7cU23G6?}Vt{lKli}0TSW#aB^;%IANO=E0l;@{mEN$ z8*QGC+oY$wgC~`CG@nVDZ}S>mWW?pr0GVoW#38{--zh}bgukA)&zGy8=*k3NCe^9P zedF@8ATyx1!gA!n^^EtN$s>Y^mjzE`P2rpr>PC{{gQZQNvlD`Eyz;>V(0Ajche@u3WH>It1FgndOJ-sFHJ17N zT~%?z(s=#Fno@^2Q;}%=nx zEl!p9lBi+!SkefnOC6b#ZNc&~jVujJ^Rw6mZd%X`_k9~5JcfSQi|HWRHnrT*Tx*Q> ziQf-RZ?+RYG_{cMC!kJkx}`74r!q)Fk{yy&Q&oG-9Cf^N{IDDi57eL~`AQ(N!dtuU zKBLVrUP=*ICVdQ$5nqPK^&X9F6E)){s+)H9QvuH~?rgmoLDjIVLfZsYQ7pP2@|eTu z4@aIaDRO(t)d=2 z1=1FeI9xyIY&_x8mG$M%W%EQQ4LNg)iKXjG9)H*~Wv#f^UBo{zgqqK++l}S@LN<7Lyll zUr8{6!xk~Cl0unpT+Mgnr+KbHs~u)?eAo=o=e0AOQ%G?Gz7(3bFud0fjpfi(-I@%5 zTm1s_Kd%`7|1&EVwx)I;jPwG)Oao$L=OdLW2MG$hPZq48{V8yOdzKd4DpJK1=ZY*o zU>!hqUQlu!r`%B>ff|4BX5xI{Q$a*yTK*Le;b5tOa73V1%3)-Dr5ms>P(Rhv3DCgy zN*K=Rkpq~|(xw2AaAb4{1=~|O30yC14J=KVL1q3Ir(ja)_;tYo=n$oLWi+L4Rqmu+ zQyD_)+e~GY#&GSXKWu5fY2}@KEltv?Yoov16XjU(hSaw^IZ>y8psrR}AV^8O;#m)8ZhSeClGU3YiPh|xZ&B3yp5VM>E4WMtlQ5g%xoyHWc@RG{cNM86;_ zEY2BmWM7d~v$cHxz<8cx6xi4S*e^zee@0LLhyAj)FfsvLCHn|}ik96PU}bFk8I6cf z*?%m9*e*pJyT~Ivc#T}4urpy0Z(rr2siOm;fbzY|D09GdVo*LqQiXWHCX9#4X^QOJ zw;R;w355zU4w8@PIxKQQ&M;W*5;Z3RZnT@b0QFS?Lky*;j#sb+vcTzS5tw|udzc&$ z%yyIEtabH%BA{+vV5s9FxcwT;;>z^Y`kNnhy;0U2d&{ zPc_%#5_`Z^>@MD1e@i9`f3>D%el;yx*YZK^F%@THAnY<{)PUAZ*%vIZGN5eKaO1zj zpe;0on777W5}ClozZ;FZEzyli4Uig+L&c~rB@%B6qe=5q@;pr6K!n!s}MD`#yOj zL6m8-C_SNYH02Hg+R}E>ujI{`J7$^4W}KhbHo5Q0v6XnxRo|&s&FXQgMES$Sh0e#w z@O8BLa}@Z#2Q0N>!?BO0m$#3{!^Nc~zYoK9@L}$B=_}6)LSz1+;g6A~plTY|j$W&n zE!QX2rxe@HP^s2|2!c*!t|49LN5d**ivS#A%@K{F1~&*bxF0JrXZL9ExUjshvfDqa zW5x6g0%6_Q5PQ%B(=gfz)j^6EI!RfvVeL36i1v?5-RX;3+8Xdr#%d7bOFXMAu-&(k z%-1XmA<`|uFM(y0pY?dS$;ACZ@tZzzx*XuoZUJec z$e&~%|4#dj?5wQ~?Ej|PP06#8fCfKcx)e1Gp%8RE(3499TtFUm0a84(fi{DLglsY5 z>5^1tL9;~GWF{*9;Qh{zgX~Z|1(~FHwC#vIZ%(m3w6@2jA2keyZ;J{Q>P+EaLzu{aHjqs@|qNqla_r=^2^kpNvdZZOgtgL(Nv&(!`XrubQitc< zUj&ko=DmUU=1aAwBgB|0l5+ZU?QV1ZC}55aZH#|KKJ@uB$D1XK_iv}70kXQF8kphK z^nhD$f9X^JJ3?zmAg`>sr!fHd?ecem**`NeUg(|KZ*gP3?Ui$%jkYKlPj|BGvS+rW zd^)x7T87VV>lRYxZV}tEBUctxk>(eE`vHHB_ao(;#I4dy--K7;{1az152pA}y*`%` zDK|nve~^TOb|IxwY>dZ}n}KhAYL3?+`}`k9N}{75g1zJ#*`AVQ+=R%}80_AJ-eImE z1Uw|vxh6oMOU!FC8sNd8je)8NH z0TdWin%Er;x&jMlWDrSMwuk^SBX`oau|g9?;E;d1nU9>d@ZP#5eWl^*U=NslHGg~CO|-Z3&TLS3C{ zY+g8D2!FGci(pX`Hf=2&)4`vY1gbDnf}q2bF+Qj86x4UI-SUy%x-xaXOBJCi;V#V} z5JDb02N-Fup#~Mkc4tY-bP9SO;iTL{TWJS$8qbLD)BryZJ-BG-}s zEKHqPKZ?aC0|SF3T{)=AP39-hfThZ+4V!_1p@0;NL#T+$j2NKcOv6~3DV}@DfVFZE zt=EiHgNL_*<#2(sT66@;UOu^+`rSC_p5<&Ue_`hG{fJahTQ9idd2i?PJh@DDHlGiW zODNeU|H`dXu);vXfhUXe4(HtuTWbOMZn&u{JP@+Lal762v$;i#Oxxl9ZHIr?$L%w} z_w)7DWdso>d|F&>ZTU1tn+CQvxx{yq34voqinki!&`JwYB(KOJ%oPu2KD0ehREQrF z5Z?vRPNGc8rem!Usgn(1H^taH8QWr_q}hBbmxK7D*2)8)!!5s+j2h{AKp^Ai z4Pd9k-_S0(RHj911g9-ARmuV&=SiN(6om_ZDKs~taVS&mVV@RnU?;QL&^+nKtdpzB zgxbIy&$u}$L6Q-Q7%FXMMy9MMKabxhdLLn689)l+Xefc&a}6mKLh24m$7>a*hHDNR ztH4{t*5g=a8fZ|L2P+}V9Wt`x+S({ZaaRO9UHLdIbTr0c zvT`y%U>Nt=<@ZE3*Xz&jPwMQl=>f)*50#>>^N}l&?-ONtesJ9$&uL$>Y=(Seaj0kT zL(DU*f-L)HF|^ofK~~0s$htoAgKkjC0~MZ3zo`?UHoqh-C+170LM9{Ig|t>bqV74G z=B|S&JN}wZ2`U8q!NiYq5{(u$Fq{+P)V`^uC6!$-)m-5Ocu;4PUUAPk_%B{94Dy65 zaRHU=%U@eMODjGt>-iS5(h%`Yosp-^rfO2SNgu3?E_o6Icd$jgKeDt=WH)>lSIo*Y zYU}b)2QI+P7k-csNxN_fLKWR$FceR*stXS5*!Y>r&@l})+!bBgVy0!jvOZN|3B8DV zw8Dkl>f5H&Ue`$Zs&Ms6Ud`kERDA3cDqWEeg5pID??v@uNS-{Iyx@>2-&QJ3 zwdFTMwI!#FoHXv*Fqu#!yknOQ^>M7@ZQ(L#%zVY(i+sRGS4iK5&W!;)fkW0w)WAjl z-TGrH6y`Uq5rF?>TzD{9C$wyJ5PcUJBG+Cf*)+MnQ>SY{SU&HJXI> znf%v}s`pAc#$$2WA5hX@3Fon;d*@$;j_&SKJf+xdI|KB*uN=^m`m}pm)O&7^6gEQ~ zG+xdw29Mz)V+aPnAf2&o5z9YtE~R}_ZXSwh>nqCqSyxjugzGBivCtZ*I4_(t&`NLK zH2Q-T(y(+p!DK~1<-+5DKdP6F{)mAMe{;mCF2(JOb`8FSIYE4gHGvz!FPAZpo)$l>p`i?}v3qMh2LD;_m?j(5dQTFCUcLJCO2IFH z_NOwXM{h2yZ_0LGxi#WThMas0y`3P1MP5EV>gJ+rDxCL`H#JHKVsoXgID197r7)kl z@Ade2-F`p0GH-wOx_nTK*s+KFypl-0UxZDDlo?9cs2HFyvlB6p^(*^Z<-B4Kd$@!X z^QU{7mk`8oi_xDTXOpz1Uxnwt-qTdAtf94~NV@W;(rOKx!I%vceXTO_>r$KJ$v0SaE$>A|u zDc1y{*Dm5Y{yIK;km@4ctkBWa)l0BvZngCMj39s0jHh~7px4oo5EoovXz^yJUszVz z0r6RYrrlKkHP&*m>)t67L63FFHj|Yqy@j4rE$jZ+OBal2HTVLRt5s)BR^6?;4O#44 zoBe(Z>S_&0C3YSD@DvOEXBNG%y)Y5>F!8nEbb=2l-=?NRVr{fW`c#-?6}pOf6g}k{ z%DVVeY7ly|>R0m*CcoS+U1I0ER$fTlI~ur9+z?*U|W{~}pWBN#Ig;{*d`nmfITaRG#zJJHA2~9&2OjTJ4`|qQ%C&#Q zHyQ#r0oVubbMd8-j|N9wm+=H6mAva{Nrv7vmM;|2S(GgXXqN0T-S7CFw?+O>4*mql zEZIwoqTfG!`;l*w0~OkLJDuWoYV5aMBBsUpFg14(8$`}!{^ms?Bm>%1WKGS-DQC5G z`8i68dfTL85?NuN#2drs0u$qjr^CZRItSCpbREu&=R3KSiV= znl#47-a_rvii>bzIjAc{g-Y+KEF9mc=we7f$0PGkswvXR2Q$&axY0Ve2;+#YWp1&-Qh^_F}W0M+Y4*hC-U zq>T4;@{8x`$aybXFnr`Zvm{K+eP31vh}gXE(+L3cSI;>9Gm@)xvCG;DCRII@37h^x zQ$rm~B&O}HLD-TWFVW#mPWFtn3q4bQ$?n`$fD5x>Ku#F^%bNUDWxxT5`_A=h0{|Jv z;ylN;OSb7K2{BfC=ukiRF^K6g$nZL)sVD>-frhr>F!Bv!D*JHY&9Wu;jammnj%1pg zID1;-#h_ucmC{L7@GmI@Z zi#Gdv1xr@4OL(9#6?Q}<;DCg2A8xwGfr+2vZitF@Ar)R zI2qP@r&jdvd>%IfA2IV_NQy)eY6;fqiH*+BfTiTuC$*pF(JD zjRnMA{!)JmeAR3Wrp9)5CP2Bq-{JAN#DDM@KBJ5F*u_YH;-^vj(Cb+h$&_eT-Ywdk zLy^*ge!U}KO^+cKhEHkM=kOMrKTnrA4DX%N5QHvdd!mB-OX4hDC8O54XuXFE5Tl%( zRL1kS<)?bAm@ryGeRag97_&yqvkwu^$5dKXbe_z+x?kGp8H@41LN1VA4y}9`900l+^SLI7}1)0p9J3edlGgIWN^Z3&b&|9+Dr|479lPQa#GF{yNkQd&i71x3N4 zH@|>`$)&x=IDUEL`|kA?0ki^AB$(Jo*rM*c88(Oc8BZqZLgFTWCTWZ4Xr8#zN>o9t zW}Gf5t=1R4YB4Xv62<)2mgg_zoj`7=ZV%O$U+b1B(%}X?X(rhCx-0$t{GsL7jQFb* zG`ght#$^z>^z`1DY^-Lq^NU54S4{&lk4Df#H0Od531}eJEmRe_r4q-;U#ixFA_@R<{gAl?Y;hi7W{YkZLRx*ksKiv{CV6j-le?g5z zorlwYO|b8CPy*KSq|vdQm$-2~HaQcvgWzOr4c%O&qBFW0Z(aO{H*2*!^T^E;(!;C6 zu!^a|)q;EKYXlkue`ZX5yt)L|8OUmhxQz1JYFX_`>0c;FhFM(D#~LRH3fo{vu<^D! zqH&W9q^irO)-vAsVJrsGDzNiP)V3m?>S#FpV%rBs5A>Xz3~?_gPOB4HP2+K4$RP$t zt4j-TUgDyj7qPQ5FK{m)XUd#3k@#;wYf*D-1n-!e=I(L^^|B;T#1JCZSTnern^Z^O zifIR<6TT{Vpa<=@Riad&KzK6J*2O>{pwu+F(L~bZG>JgX^w)6_uaqSLA}cENKpJH; z$lMCl%VIB~A#BD@e-Nr`G1A<7y}|MjQRiqidvm-aVVls3 zgO`61v953{AKBlIq{T|+JDO87st|(CxM9EL%F&&TOri{5utK_!rrl0C-DCzaDueE0 zcFPjJc_W2<1t&?ZLGUExlrpLt4Iwhw6+JU9DNny{BVl z$w(q%CMxdyVm)>jMUfCw!E}>t3rNnvRLRJGEtA^!f`}cw>$zq*_?W;8(=lP{Jk$7? zZD%jXn1Q$^GkQ|B}J0?Px^H+HFcFjU3n_Kr0X;ae^YhBeFr=xOsCEsNTMTOH1hl@D-NAtqvS&a0o zeww`c>lA`hhooGolU8`A@P+V2iM{Z}Z|B0&uRDv^XAb?!GQMcjKj2Spd)bcCu`b8i zLq#|`Gu{O6!+Vn}LWTfnNuUfxaK3xco0|F1s=d-r;u0Zbt zy9p1$AiBV>KrviV#u2L(BQ@dr1`{sAi(?1)j;g)kbu%fS5XYDULQyj;CHZ}CBtc1# zY+6h%#w;kXO(<}wEs!5d6e3pofuB7FwNNAuX|Vl25(TexH}c|q0!gN6 zWt8uQt2XimhW|a9|6n%!=RzPvmD02o@(C4pr!AA=lL=7CcyBrWR}vbtfR#$lcuRF$i!ETCxHsIc zsjZ9cr3c)Xey4beu8}c4cjkik;0pQEln1fk?-;c)n@ijkF#pTqf`I7${p6u68D9HzPWbL%<)mz?Dei zUp}Ymh!}%8+PXoG1r3W7hZvoFFIGdMh()(KU3UkMr0rD8SIYh%ljSwb#TQu#7;7WUhwRzs`_sPyYRy$7G=5PFcDMNtzB^uF?P{MY48C;U|w zm0}jUyv9@4DT%SKvD;%J*ip`n6!HgF7G5L=<<#S83I3t?XkeQ0Ggr9sKzB$|2?WbO?zdn+lH^%0AZ|$aM2ns&K}?g;oFNIS>tSa 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 o>o_EIcVE7?i0~7a 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�WWIv9x7_F=xwp9KJ!*H_JMD3} zkcta10y~W4m+rj85#*DnESnu2fjQfx^}b@jgI-ApRdVW}*F>Sko2hrtqo{F3v6?xI zdHK+&$X0|Y!(~CQESD|`bsxoRV6eC-XkAe7n}vA|2?CbV$zoY!R`4yFQn&+aIf9i^ zT~x$AH+6PWNDe)2-zb}o9$3iM??wZF&V2|y1|!7&yk|A8b3~+*EDxg53BBhSrZ@ zxh%?nCv3>>x6%d&+|cOMb2?EudEK~gsngZ8_BW|MmGKgSZhIvjycbxj?~xnt2haN4 zxb>YaJ#v0g?q;4G50bb{NFC-KRh@1X?_`JMK{+V*x&orJtU)r`EPdzVaH|&IC7VU*B#_xBRXyLEKGR*^%HqQZ`Oii4+B|U|Dbluc-J0 ztFT^t>P&@HT1tDTc?;o2G^wUX!u|CX*Ea^ufoW`o|E>A2%J&I5J=PaK!riv4nw1Dv z1yZFf2#s~Le=jM-MG36V$JScRp}7bNROV)@!u{FF!oODB0?%rw{0xpjLNh=?BRo2X zB!SFoF!==il?P*A_H#BJaa~O?hEG+a@`S9J3~}kVlHLn^*r{WgJp%6!HX&pvw}d#} zW%6mf?f7%mTGuxIGuqz^zdK2|0z3~SOa&yYeKA-Goj*p{tlxFzcc45ha@?s7AT2SqO9sJ_=rXGun;lu zyIZkZ$+|tpcVSGqHfq@BcQD{MGSu@qQjTH`=|c#{h2(_4Ttl!g^o#VRMOsd0US87` z7;?%Hdq(;#81fm%Yk5t0YSeCRgibqJPL>7?ELJZew7Giw#%E@^6YQ;*G(hJUwk4&rKy z9t9I4AiB-_(DmuSr%ZKn#-U6-C<1=mn|~m0fFi2YMhyu^cB5lJ+~A;-1SXE#3A-6X zII7?bn!Gbw?Z#i30if2rt8t;ITU)eY1e|v>#f2qLgyM9ucg71-F5^uqQ(H@vn!^@tzesH9uLx^=1iwB|Q@n$gc5?5@OAEt4t=uo*@3FqSk6 zJQy#q05qEbwe&BLffWzBNJ45Ibp_aCYI~j35#NzFV~#H?PQx!HTs?qk3|hc5J61Z) ze&EAyn;3B}S2*xoqCd_NI@}Fs;caao9z;q(3<+HlTZTJT&}mFYI4^;PYZq>Jj4V43 zys@E6k0(RU^+M7XrymOol>I5lsrmmqoE($>9!@Ct|NC%y$OnPjw-GV)huOsmB_ikv zAe9*2bGhZj;_o{pKD~k-5QMXDN%X_Rb2w|W$GeJ{;Xf2@r&!aOra63st;W)2Y}I${ zY8N73gRX`1e}ps2(j@Ptmk`L116q1#*QA4VW(^s9OMFLF>a3mH+@GY~hkJYeCQt5c zvZ9eXdB^7pFIkG8Bc{>@%yZHYzFl9Z#pb|&lOLH%0Dlg}^KJ+SuT0HfE>)lw9MYy9 zIU=PK+{jM!a+b@)X{hbJ62B%{^avF{k9Be{B^m4`18#2%p!Bl_C<-eHid1~OF8)(yNe7+8rZH!4vL{*t#P z$kQ$#uln9pkIvnnCF~dc3i+TXu(DMlk;W>IYBVj5i*m?^009Eo`0>l|X9Salgbwl{ zymsxKB8)b&(R69Mwoo+d z#g#DgG)j5b5tBPMgr#;M7c0GFAlF}zr;rH!iX@s&0(YNB1}*6^D*3!y*M@)v5=AhG zA~4O6EM^4`g+R!hn*$2|W$0PMlH#D%r)G5HZIm}e-y$9Xk#nCV2~3`fH6jTS5`|TE z4%&8*bHLp`BUMCzzdGz-b>eh4HKo{)EUs^;#;ope zFKv7T_I}>C8p@lPf~S+Gm#!j{xWWX}(`{!7==T9$7PU2q;J`eJ4wt z!f8DSqWIrmad1w9!2g);^1XD7FkNp7X8Ub0n0A^<0$JzEAcO$ItF$Bgg@2!0&f3Q7 z#`|JS=GH}{f#EBy{i|YDYk*R}KiR2d0q}B!_yzUh%&7Kv?0VZ(Su*sa_NBfy43#Dt ziY|rhqnJMTkc;UM)QE9ositwUY?WbpvQ~8~ITo5H4%+gpp*}^XOI29zrl)L$dwe_v zzTwvo)dYm!1HI>Zo2b*I3%TX{n5lbkbE2E)xTS{5~o#7~Eok1gr=gfjKJR zc~C%DAkLZ;ePa0=6v`hSB^^M~wtH4bVd%Z?j%jLJWzxN|Wh{oz7(u#M8f+)j6swkE z9*imNI-U#^8>rzk__f{x&1`91jwdtw^Pk&;)3$(rgw>{2AAOo=8KAJ55@8rQg2r?G zVi~SFDGh9;b|=VA4AI>QmCL{%qztTJ&8|Qzr{|6tTxKWXC#fMJbGG~j1CF*D5K*5l z1XH5OMcMTG)6!FCqBpGNW%R31ckCVxIWhF#c_l2s-bN#JFc1_&4_fz@+sVKM`kb@A zlaxIULZ1%m?!Z=nX@jB*Jm|I}h3J3%ToF_;tFej4|A(V1Ue2oIcPCtI z(UWKR-T#|qcWxH5;_e{t)Y7v;aZUbh!j8HNcS9o#SBMD;dibbFulvneI87bBL~=~7wxPsIVK14z|EEJaBSccIRV>O5zn&4z&!y`~Y751* z0oV+NLilA3LirD~j=Qr+x(I{|;4qJ#HI7?~ne=ZHm}u2kN>}O9@IxNLR7sJ2219C@ zpG4{~EU!W;I8xT2TI@vnTOEQ^I=|>#~ zsox%Fa&QZv#D5#Ve5*T~&r=TJ;{;q4h9j{14_t5lb@q=bCyk9Qj+3R+EhM}mL#?G! z5<@wzLWJp!TX3BR4KUE4X&rg5l9Q+=;Yus<Qf6)UNkmBho4uiWZKhMzanH-u7ZA9n9#b6#jgHe~GD zVN_spObhU!a)5tec)_@))BcLLhDl2&Pf9m+R2mAI>B5uQaH>|RV7D^R6}Fl`llBAH z!`QDBnm^uF@~Yl>z=BWf3|YjG$?oR&rNv>}y%Dr)0_Zq@S~hx`hQj833gPuY(G*`o zj;GM!3aUp=0y@r>FoWv9vT*_(=YfRX@)?3^l-5?TXBzHpfUKol+#c;|m@G5=e6KQy z05%jypy}MDcc%bJ(+{ZI8DS0go#?dgTlRE4>I z=K>lCs!HR7V;FaX1e|0Mr%%^wc*cl`E$3o$81T+-#U`MJA?2lY;*jHkDKFy~AmDFf z?4W5`J8S8XX`4^%8u_xlxZnlA9mb6)goM0xx!*xR$pe$kA(#| zCiK;}y%s^L90|;VY`A{#nDqVO$dWWn9R(NuLg|kcdvo8o^p-J+8yA{hf*L1&M;HeI zM5y7}*w)hA3AM>qKOOrho%l4RvV}tSofS#pL%I+^S+3S@CDM3zHLLynih?rK`U)c4 zfhLOGr&2PANH{oAc*nEP@{)M_cAZ3y;M!+u5 zsh=iK_Ag9k$yGG1lKUgO6RVI8jTZaL3cLK=CGbi54B;#d;ff>^5sO+4`iZ#h!%@dR zu&3BlhqRHboJmf)PtsU(jB!9r<7BzKz-O^?StQTI97Ti(-XN8pw7ewU!UwsQE+K--6s4By4qxlH5dOs$(K()eYBwsVtzD zrt@d6!4Gs?|L=Hz@JaA3R%a%iNu{ zPYAk-zalKYRgq{oc=zw%-#`xt_RtV%*XjYDH&DWQs=f{CZ*qQtDR+sS~3h zb(50&|B8zbM&V{BwN=;%x}S8*$kU&4ju=ORHgaihfp3IK0d@sNAb^GTkDm_y?+>r1 zxqLD44hM>M^ks|OPMaiPX_+x!szcpY3%!uS>j&f&KP{?pDIfsd?S0oF<}vdW{V zbY$o~0g+5YhGM-#iJ6a6vLb3{55SWFh7a7jWPdxx#mVunr`Y?iuRd^X3*$uFfN)i; zP61w6VJ$ba83zI2Mggce7yd^CFN8OKQv5Vc+L*#QDUg|%`Su?%>Jcyw7^g!pYe!RJ zD3JAiE>5779Yc8h8l@#ox4;4?*Uv2PhJb7W8@|SC71( zvCm?p-b0+nRw8{{s|M6~O5%s`ZhUsH{9Uis5BJkTsUvJ*4&k)VbkMAOL7A?tbtoM7 zhhdnWR^E|%0aP${9Z5Xd^p4ANlMRlr#Lejlk~y}%q8u}omf?i+LglRK>PyS!?-wMw zMeKQt74$li6IPbp{wds&G%kPc2$y(_B1hMt(z5_j8qR*q+zmv6H+*jlwA4*LWyaBk zrJqzuL+BUP+m^4pZ(7zmszzuU&m-{|ImSpwSFCHFSon8H#>tfVxPnXf?sj1>p7Db} z1RGtwITlSZkQYK$3E5TNKH0mKs2&5d7NvexR$kf9o2_Xpm(FlBH(ST7uPuD9ZhH#a zruG@0c3HqqpIs}34l{(HA(wEM{#==rolrng6eF53PcaXJg)qhf~3c-_S-rcfWtj{dmU@*b_hz2WzjcuJC_8DW(3BD>i8O=bgDW zGIEL6aNK?6nUVBJ?u)RJJYIn^L6%m#VwYDUJDW34(+Q{?zCB$* zZm&~wk%(<7>z?8i(;66m{eCZ57xCfpg;qAk=-YDevg{{)*~54-)B$DwAD${b6wP@O z=ggeR#2Sk)$^VPCcMOs=X!?G~Hg;^!?AW$#+qQQ+vt!$~ZQHhO+h_K^pA&C95$EH3 z`ijWv=>F23)m>LsR_5=oK4c`mGZRmq^Y1!2u>nR=#tU20{ESb4tq&Ds=)}z;Wy1Vo zo-!%H@jg;Ipus0(31UHozv#?#JMA0m6KGLB)e+t<1LfukM1G-fB$;1DKXp~P-F#l9 z@{cI!ypL((b>R3_k-<*B8k&FEhf!;!>}<}a-kA%N7kKA?CviUEYy1bNDBB|y+N%tD z&Bk0Yt~{+RlvL#8XH$e_Oxf#<+8iFWU`VSIHD`!yb|X&C0?PD()b654^q`Gjf3c%R ztwv3x8vbxK-`HHd7C>WNXMJ70(NO9t?g4$UL=Zn6#Tnn_@-6rjrR+1x(ODSc_p$%H zfl;e!2sXhRMwmH@BSn%MjZ4&CW}FIt_Abl1%DkCZOXi?L!!`+0CGSml(oYF`4>3 z$o`6-T1j5zDNTaxQByD9!+KIJ>eb1tRmdpOjDj}+YOvuq-Z>jJ3G3e>{OKm)KMq&h zZMR7cpJ@WQt|rWg%^@9$U3!PMdc%5AX=jr6OfMQrsur=0RLFkwLxL!O$zTomOZm)EecH9c_wq;`<{b@OUU3%{{gI zSkCI)fq$d8G_nsxrxvy|xFGBRiA+QM7=x_?oOOAI+H_4f$3drHYh;q@_$(lgK*CcK zT~UvQFL-hxab}37^-Zv3N_JlR#`6pmfuTL#ZNtCu;6J>vm2v6-GG-b()A4WSWTg=R zCO@;@0H>@g|Mp`zKIXPrZIm9xxmZ|R&eIzKtOr~?)y&*FULa{)Ar)o%pDs!`!u8TM zRpWa01e)pwND90x-rEihFAwYSm!w7|E64d~1K>5&(r2T4?g)pJrBm$bOd}-|ct>F# zG(m^4FN`sSJw69MtwbJbW=4w=`c@e;|?8V+hOz!;$grvQpS}1TG2&j_N zK)ms*x$ee@{+aYR)vOiHDexb48=akEdl0`dKe@(Ck$k-+jY^W0_IZ|47~^1eu48N# z-k9oktHUE+2es$YB7SxEWd$NeOP^7I!7EI@G>hLMi)eulxD19eXMfBgp5f_W^w4|g zCg@Fj=*WlZez#%aUB)yBMutVL$&+y{(jirtAc87dU3uLLHN#SChFTzKU3%oJevhN& zQ`-L_=Hqo0j;?H1Rm%Db0B5 z={YGo<&)syT*M0bb9*v?I_>~+CO1GQFb1R-*aP8*2t-uyp^Zailv_bjBRtSFg7NZ^ z_hM+{USpj?-o&F&flN$@-Rb7Na~we)hFMJ?q^rN_)7Yf)+tf5^&c!B@EjN|bp??9t zP?4EQ?3LB)x-`^%oFiP`w$YFr_)o5Lu*GK3ggp87?pc3}l!wEm<|s^YX}G%d{l-h| zY*Xt2v4soT1=@^1)z)LhZQ1l+43}jo?UJV3#g+I%=RO!0bQGa-I15S$M{8hvqGdXS zI%E27c6^u_TPlFfxC_i`ouh3Mqy3dqMd4+xc2j0sVrL}o)vJ%Rvf#KmX>N=@fy$A# ziL&pva-PaWToc1~ZbOrO^2#=1exdfyLZ0^fW4pB_;*XCN`k$?;9SjPspz)~7`{D5wXbQ5N9?ywSEz>JN9gh` zhn=k3#$P=-Kk$ZMxpahOR1(Xp7D<#dQRA$Vo1K(gCsXXSMNP6(776#O;!aYCpUqNX_*#fdHU(s&kMXEKa%w%@U@QW* zN4es^3iIdJfb(`+eomCzYq^(>@=Ts)6# zzLFA`>B{@$?mU(|Xe;7GNF0UFP1uFl#`)uFN0*7)@2dI{a2=(9`f|0?9&ioU#d%qr z>0U)1kb$XpmC6j{nEk1l)v8O*j0f>&9^xa2G^&g1OM!jmvEUx<3goQ9vckPef)13*aikWhyOv9V^=l( zt@nq`!QrwU#RBM#!c4B^u7ax;#!%K?@SiK4NVxN;&<117?ko_{p%F1$2gATRz0;4VCb58sR6 zv`Xa_py&&5A6^2qPs+nw;q0-DH1wbx%Y$|{IwDB$&Ij6*PpQjS_#&CcA@BS&ZKh+9 zSLyc$b;e)dQOLM@%3{%J|AT^G1)|IT2Oy*3mMCIVM~*QW3eE}^Bm55kUW1H7CMIh% zc#Fwkg9r|=V}mH3=Vv2=kP8yHOJ*Y>$4U3#kuN=r((}jJtFh@fV-l`K7HE8D)6hN2 z2IF9Mxtb5wHPhdubTvm*+bZY07n#~jY`v_OS3UY(tfsmbk=aVro&Cykay>a!;ZzL9 zbcxuzed8R;F)T#phVPu*OGGcMaKnvdb9+1fcwA^O)W)D2DgSHFn}{Eg#xnAmzP z-uKrzM=w`X&!r!2hEB5c&dYUpnWfgK??G5#-p_Z=E(Y4RtHpV>va8_iKz4uQp9o#X z?DGp9rTwgH3(()?+5CxMrTw|8RdGl%-+Rpc-s~NI3cIs-t73F5lhv)N^hZFfzj99- zskIAP*fw((_~Fh|{GDR{81JG#C*>~%e4~t;j;ECYzrT+S(6Z{r3WxQWYBAJveO=k} z(a^Nb!z~RIS1=xjBN_tYI$oZ}_2q!1rMInTEPfK%jh8_o+j|3*xk;#mVaDew{k#XP zLwlzqeB)cH_u6OZgZ@v{6lTAAnHD~h5BJ0_`vlPhX%%nZG>T6M@wY$lZ+{Nrj59AQ zwX$xtN*Xdm4;|Bi>p3LywYIK&_ZGQg=%hy(lTCgTC36I(_VXv`Z{1d>zz9_4aMXyy zphM;g#^K+zr=OM34#nGtRcc^7&ca1=Dg@p%Vh@4v_j+P?-JExLPr$Ci5@e`2egrQq zPiFBnWWb5=+4<6)vN88h-pww`J_#9^t15+Eh`g>&j^%<4FrTT5NN01%pAA>;aei{W z<4ahSZak39ey`wIA@(scF9Nh3+x~j=b!j7*^u2HC9lFqY{y$)(rYkVTwT!GOq_08v&QM ze{0qw!Rx-;4)m8^uIt4H&>C{>;79$$K2#sC+b?|D^Qv@1yr~i{oh!It_Vm!)%ClFl z&k}Tf7VWpKsScf@>GMejc}#>1)7C=~rOTRpxHa!lFRx#J%Mt|iu=1JaAU)KJ6sK0D zX_OwMquk*#X<9$0g8ipHxd#;f4PD^tZQ3C1hZ#>ZJRjLB!9fa-X5 zf$YCpJ8VQZao#iNxh6&HyY^izj9;O+-{>VTNz4q>1Z_gLD>jbxU2(Ct-+Rb*#gRrs zkYHap?}}fD6Nh1>Jp#EKL}bv9Am^)PrTnlPZC<}Xj#EW(30?A;nAdT>A;t+!Eta{q z-hV#vsH>!TvEC()v40qSdHFHNlm)w>LlOF9vrPvHb*I#PMxgBV1?TYi#r1NQ;OM%$ z2EqY1mDeog*1xszLc9ErdnPB-kIb18bsA8{2WRIqTc+<&BO! z1+CGNGq**BfBjVi_2OVtIr`b!4~EEAT*!+;xtfty)0^Fp0sU@vgp#t+8|t(!wUWFO zv#zYje@_0Qzs&oXfGNt>bcRmwq-xtxGa_i>HgQ4!Ggj^GZv40GjHM4H84?2taceM)1N?xp{l#9mMN> z$gT8+9!VXZ$Uw)YxPsSl9NVFvwEh}|I?2(lcJvFt2-sF-3J{YcI{->{*FB((O@Ib; zf7;Rn_~ZfxZB`H1IbMDl7XwXvYsrMV*B<@($An730{zXD=nM=@$wqKG5rDwDVCZ;8 zn*}Y!1{O;dMxe$k{zDWmFQ$}1w&l+o4~(o_N>jBZTX7J&>QNnJ4qh@n7T+0F#I*r5 zeM~nYk@46{)z33v*hh-kdio|JX`|R%#kou`!_O=?_ zZ~-1aq{Ke1;bThLk{AeAUO1<=gbpHx3l(l$xUmpLM`_5B4|DooR~?q z%HOGvv$~JD9^<9!Jj>dntrAWqXgG;{vIsfff@{I`@d&#|ktTr9Y#SN~jtnoSbFbR3 zvi0@@BJ^Yt*$O(!e>X#5Cdv8)oQpqMRwTX;56qx3A|Mr@T(HdnyEPuUh@fq_VO7a< zxd5x5{7-T3ST!zBw(e5R34cKjRNUPX__rw8TAR(2iveRh6-tzBrL$Q<<+noaL=sr@ zIuH*tQJ=a)FOfgTaWY3+sBEO2IOVezU9rp*G#giWXS|DMym#I`ScMxEXYI}Zl(UZ4 z@lx5*y&IK#2#lXT{j3qIe3=boNnw{$^H|XPmP%gwe|jI&c!OcVmZ_v_&$gk8RsY(yPi5t9^gEZ~&v+AspTU}(O zBnzeUKI^lCG%nq2)j4d`cQ%lI+*p0L4=KX`DJ6>@}aF+aMykZZP?g%tAb z=<+dpaVlR1<3oo_bn9ujD^zn$)g_C)g@dgp!pr~%#7NFS5k*@z-Nka&_mVW}I7+mv zbo(@tRB>6Q0)ek^DyYXcsjpGRZK)V2!vaJ>kEhDA*!Nd9uQCg^_md2c{ig?I?&`;! z^@$2gVk}sNLnzs!M^&F^i?eSu1awQEWcq;y6KKlpuEEbN(RM$T;4d%HO1J8+q9(5^ zINBEPFJXF#C%5*o&bPF!iy)47Ce?3`4&B=TeWv*k;Y!M>F!*STxtbdAz7ow>;L{~wzjD3 zsvw#d?rmB%+x~+#T*FQ4n=WXWDi>XnS6!wKWX1k9YEYor@CV$~@3&WgyYdX9X%Q2T za@BL)q%Flt+$2E0+)fsd;F&P!gG{WQ~a& za@bDoE;3}pTlF6w%$-sN74a*?W9XrxF>WCLj8W(Skvzgsvv(g!d9t_>v!C)XwND=r z1d%l}>zf-|EOkJ(n{zC}6T{#oP^o$V@dkT(amWgxqYoA7q{4AsyL7TDA>ZnUhB(L(Pw`6A3eHXNR<5^^F~-EOTReE* zZP&{WAx)vzU#%*7Nn7t_b$YG}jLlQpp>a7(whO4g&nqBM`eGiQ(%P&jE9+69Dl{<~YMMW0Mcj zFW71+Yf`T}o~>XsAdhAn$6%R2vXCw`2`y+cf2OY&zdtX)T|4LB~(KWEQ(J|$iz;JFtoC!wW z`qFl*M_^`vkHF2tFO zBS07adJAQlUU{S>5CxN0`w6Cp+^b1UhqAw(6@F^Ae!bV<(!<}&eKKnfkMA|~!U zieUZTc`SNCapS)6Fzq=X)mGJgrxo6dW~I0i<2v3WaLQo9wLxCDM;g^G((JNQw$)rb zkEe5L*W;bkp_J>7*RJ}Qf8Lj3+)dm#s{lNjINkcpXjIy`8pXJ3l1|tnzWO>P7b}Fj zT%5%}{P`IMitCIJ zhY_c%1%!ly6~4uBdQL8@lwZh9Ix`Pur0Ey;f#f%uE`Y=@I0#SAw^^ucx`wGHr^X4b zQ4UO#s2Ei9rwn{#sTc|n#f6wHMh7VM<&m+FXyguzj&^ULeV=}3>k^T5biGv#U42gK zDw{*!ZCb@;>IF8R1Q~IIP8_z4;V%Q*hKx)_?MalXHmpv(5#SWhaGx;bOz|{UhNwG_ z?gcK`s}?(aJ*JRGi6xQ*Hz3(dlw zif^L&R8nwQetXqOD)8MCuy4e=v-xlqSmX!1Su81^a*Ow2Fx@vDfWlXMG5Dc8e;1a! zV_Dg3WtOeK6@}RR-cDa%+!YaCS^GhdZg{#5pD(xLi}ec+RRnpihZ7Svv!03Q(YWDu z%p#NOH4?%I?9O_vm+dNJy4Mew-w&xuqg!f6{obh%fLB7-zW8ZDNpy;r?d^Y}(o4f_ zURf`Qw9c4=(nM66WQOopgCr76(yKbBmRp!@{bp=(^Ds5=kUF==fFhl+33zOLd9zqF z`T=hyOujA7zD7;_6sBNLZ%3ZRI9M0Zod$UAq-8l+?Xd;^NW4U8h8EKF>O{n8O}Uhs zqQooSaA4BUJW;Egd78bK6*xC`GAvz1B8&J%s;n>_qkxRjcKX;cZsLx8 zF8u?Aq12llP|8+oDCJ;I^}2u$g0lQt7)RS*nHlbJElM@#t(tB_DVH;eHJ(V0XE?;wLN8!OvS_sbN`)6dtHl@D|3dHv_rv4JCZNb1e4YIHS*|5dKp{nFZiN99w?L>{o69|qN=h?oS z({cK|IF_7#+|0aGPd{*b$f|g5l646QK-T2PW*( zOV{>0aFPea^LdNeb*SJ&lGz&9`nxwZ|9K&uS-t%pY?|45VdduxwSg?0`Ous6|J1lN z+@rk}YQ}pr?6b0pH*x=mixm0yRbREGoFX%$ZRzu5wd?xgKl&}Fl^9Us$p-;Z~^Z30HI#{&NO$?oYqDBceXlV$kX(PHd8MhRw_16nS7Pt6uY(J&4Qm@EWW0Y%T4)z3Q8)br{a48 zBVD3wgKcuQ4%Sha(|Pf9ZV8Z!G+k8{ZS~qWW-kOcE`K3|wP&il^$$_x4)0BkJ?0G=mUI_o1@FMUBF@tG_?CfDs^B=DeVqc z2=NOmWq|&R3#ZYD?#iLH7>-YM!A;AErvavvs2vb9DA*M3iu%i7rxG+MfZ6AR7>NBi zK%LhLWs)UY!ND5envnw9X2b%-l*7fe-TVS%E59{EEj2Al15~&_6@68-H)0ktw5{pl z&WDGep~6Lfa~bR+Li4sQBS1&1y=ds8yg4|%)x0DtJ&)+L7tCJ<&ELaHtv!MBAc2j?q=}G*Ror~|Gsht4LU-rbJ4B_ z-MQwp{!)KMu;xe~%y;0MdZq21+*Pw2>%9)t)tbdr?L8-HbvAuSkW|R2 zLz~R$m~mZvZW+RhqVGdLd%3mp<}`q2ckTDem50RE-CDE@tLab0Q9S_fpOWg_n*`Bv#BB=S1(DN0Qb>M zTa)q_c4i+()Df9T3>Ux&T!zp{wG*WP%^n+`=+h-bcLpZkwCvYr~Dw41YV00JE1c5G6Q7HGCcg~Yo(Gc z4Af?1%wU(v>DY60rusi(Y#uOD2?<4%D|mVul7J}5iw|A##lMst2>p_ky;M&7#^GkI zW{eAcE$VHq+!@4t_zlhJT@x16iXEdWC|u)Gz!C`Pfsq*T|7!#_)ZF=u9vw9o#Zh@V zcNo9@z`U*Ja4dFmQz79^rQM`124xM)k=Cn@FRF{m=is-aJA5-vYJYU1?wKq6ypL?F zZ+A)mlZouceby%Gn9UGZn7j5Tnw_xi^KIYxrS=}}^6+-&mGt5HADkroDGE+c?HI|N zPqButO86tPLfgGAWO6kPbGpyiaH^_9Y}L$8jW(HP$r=sDC}-KrRt=jA=5eepycsa7WJ31YO^ z_6+bys+3^U{&T!k7ZE%+Y5hZxOS1qtWGLAkLLdmxsK#KdU04(WLqtg<2{5GT#T>P3 zbHU|zfv6LV*<8^PjKT50z~pv<*;5_;?jEOuW&L9nd*TTM{Neh;3#`;ZX7v#5s@1=hhF(78Ms$uIG%4rv zYU=*D8j8ldz9tg&Q#ZWc8+eiku&rEQl4bt#tNsoB__ED^@`VvYVG_J%r8rsE{RD3R zNTtNZQPexKdpQf4-}4=Vef5G1kAd^yaB=j13M^(rm&W!& zhX0a`&wbh*sc?`yq({yQ)*2(}nCvdz3n@_6Bu$|EoCC3;Ah4vW8ifT+DT@+SX*LEU zeqT5v5~vvd^fVB>Lh{&pb{;;^u5_u7mguBX!ApLbg}lsjW>!FqgMS!4c&b-MvXZ=G^?@t1Oj=#$?aK;EQ{8!DR72l}@fEK1b$79x_uM_8JGa zHd%Q{88mFu^%W4`g(_gX-4NfxFVz~0qA#?4KGcEVgdb?T-OlX)o-7NzT;JSm^J5e^ zM@-=?$XOejf;XzP=Pc=0E)eV~Rfe-6xTS$-(WJ&f+!o*67E4A!_sMzw&81;t3lYIV zj%=I3Cm?rj%UK|acOqbMR{CL<3I-u8@)MLvk`M_MP__%C375eEWoZn?!dc|H>t_YD z@juUu2chIeA*SRf1wr1%25|88rwr0#>I}Q}A+m~7Zq9j>WZNtg)*0@*&;F5Bxs6Kf zHd3}_)?j3+ussuFz5;3gYT&jW-^Z{ZxH)+F{Hm22A@vc(Wx8SXs(cO|-)AD-v*Hxce<|GTt_(aJKXFT3YvJ62oulaV+ z{V4wS@s7;6c{^(_pRex*&5sp|#wt2@8x1Kz`;-2Ag`||fSWuftMQG=31fBKQ6FV*6 zx+UhN8VehAml zuA|Qok#kGuXtM^4rTbHIiYi+SF6&g(EM5${`*~7y1m$xjyqCiv z^>O{o$YX>HusDzqJ4H5G8xYO`B+dZ^aHksi61uN&_~xYi@?S@6!s9xmyU9@uwzgzs z_T@3zM*SmY#Y1`yraJCBf&pcJK@h>gpQokJOr%1<60202Xi#a$goIhm<&I6r&XpXC zODmX4?2A?;_OB}$*NB*eyTYiPk&KhZP5W>$-DR39V*N7{-djj3Rz^0$COx#F>T1b% ze5jZ+1W04LMJwoLVr$NQ%)eD z@ad1nHOe!CBw!!aR-+89EFN_7{@~{z$mzQ&Pd(qN9ws8xy6CWkCBoo=r;45J;6d;V zfnme6yger0-rMSQa@Kh}=Un5fHLZ&KwSX1-7aA)}9qz9{_J11^g3yLbaiOE(>u7#{ zz>D+C?3&eJy=)m_LsKaaV8#EB9SIY_UtKHO-L-M(6tGPv?*^z!EY|tWWfS8ouY$KAYK_z{EY;TM@gD`Mt5lArKL@FGP@B9spx0+8F5711 zjx<6W9m48EZ)y7x;0uQPoO02V93{oL!J9!vu|Vn2+~p7)w&ut&xgQR*q3C>P!T*X< zflcmR8m`|5TRbh7T@I^CXpT4E)6ccN5hwaW4TbfD#TJZaXyzIxiZ>rdo1O;xQ($$&=TLA5>^W z7;d?-+QF!@sdEn}5GbOuinvILFNzI5K}z-_l;<7VYA)*oS!LX8>=_+Ifj{^w~`zz~YD@}oH~wdv-Kc~~Q!_}w(3DsN>Y&P4m| zuW|VM9ATXtmtE!yIdU$I)=V8+rr@8HUe1CWrUG>T3vka@~BV`F!`NkGXPILd$ zSfW^Og%KuR(K*+t8~di@nyjq|{5!crSlWvROh{_lkcU$6=`e#LGKeIsb@q7}Yd$e}g}%GI^_D4?xFd+gxz>*tV8-K`)?rw=pJDeH@WhZ~0; z`6g@C4gLh`1ZwMQ5!T+CZz*n+#J5q2{_9-La^_U`{w7+BbzwI|W9kNqGq4q0j1|U zWb7{*!tM$ijq5M_6^NcB^M#)v*Hj={FhlRK{rD6tAaS?~u7b;DxMwVY6=(=|Y75pf ztcwM2YU|NVY4bsGWHZLtE};q0@zk6P2HHsbPj9BG7zdZd9De$1#3q|Y@Kh92{n+zh z%Bp0V30*KlsuwDHYG;S2Aer`KoX8NNyC+szRdyZU(47JwuyVsh)jXLdyE6xYV(XEk zq(XCLY^l~&UP-8Jut3AFyhen|AhSx)yhb6(dlGHWW!XyG`4X)ppxY zLv3E3Cx3aA_(Mu{Z~8+FTI$d^bEIbNx$L?n(4T&_*td&Kr^Ia%b6F~d!jB>CAKGs@ zBhI*FOyzkw4`$yjb`S?keJO3gf`TqnqHOLISCBLP_W*JnbAlO zj2{LNBZ!F@DNi?s14~pT58CaN{rlA;>f?MQLn1_3))+m**hlKn5|%QkFc;Z9wSN}a zr&bi(ZY4*E zJU_SZ+pOyD7zfnQfy1e4wnZ9nY0CFj?lVkfjo`8`TZ4C_O*kDd;slWSIOpGZ`D=sycHB^;?%C(mfWwcG1 zjZHY>NTtVddJ}cv1HW$wOfi^YCU|NMQLLWhQYZaK{Ub2RD8V#%59Pa~)#)_#$ z@~($|4T>0^PmUGZ~sj4_9BhPu$L8IGA+m1PWbhQ8@cfA^AaA@CYzb~L($DCl0*f0ltL3J zL>zx=QN_e>T!amAfJxL(zAm1T%On400NYmpt_7r~s2k(A1%~iVeI(OgiYWv7NUk6f zbfNtxVnZOL_9+9St^LGs@hu;~h8Y;C1F3Fl%0t4xLYuQBsBqOJaGTWo@f~I$*8gPi z(1)(KygsZSz0ltt?Jrj|%B?km6>0~_uRU@lBwS^*msX7U zT-&S-q*{%vYB==Z*mhn16zQhx>w~2T`QYmdoZ3fj*{TKk+Hz!hd`05`@6NJ+o{GG@ zKO*W(6@TeQrg5me0fa^xObT5ZFn;85@|KoJ6= zikFhMVyNGe$8KE%N!`^eXtkpboQ6r$%kKQnaaYL3P6iyC`8WG=twON zB=jP9paBSm&&;2o(GMOrT$qu@7&`;=p%IL)S68LJ1|elJcKPY#9r5y(1UAczqFnJmwgZh>yqP8Um$&k*cq*;9zW_)nXh03D_jj`8ob7i9P9hK$M@Pkt0DHS~= zj}SO10eZ+x+php|asU!Nq%j6S^E&#zUJX=Y_Y73m{lpEm@vy| zsUY0;k<@OsZZpCO;p>jJHjeH#g@*~oQJl;QZ0N*MT=}j!W;>2D(hJt^k2O;*SC~Za zRYh7mipH+iY4E&^jE;&UUM`5zG@m0=WV3b5xJEYK7l^j1#|rJz$QcZ?)>@n?;uxtK z_AU`WOgt+F-p4f5x6Sa3%itJtDhy!c`!wXu#v_T|GTdC7Kt&Zsl+(W{&3DCMrmjMP z$*oV|1XvU#5UUAQL`Fm=pafX#I1sBn!N3T0e$_;QR;2z`PH2yO2c)mq(5obSH~?x>AIy_w2wn}zZ%lL_&F<#mV>G8&szY?AGD+6 zwBNAV)?+}nuCFrReshfU*;GxP6T1|m7cKcs#``MNlR|X~{UIA=OBT+v|;UR8lGW+Sv zZ7K41!{k~Wd0ZQj*A)IYslgG+Q|ykH816hO&`#1da!DXY zdo=(n%7Y#yF5#jbbX(V>R3y_O1Gu#)h_ja(rQ?j#?pw~e8pAR3pl{Z!zm)$NYDmA> zVpd3(Z0wwK7KV7X=E(p=kvp{XJ)Qly%`oilPRF3s9ji3QFq4fv<*-%N3pVx6GFu01 z)W@XESwp000JGNAC4lr@W7cN>e&Vg0F_(^e&BD#Uu~iBtMY`JVi506R5OulAWrrjQ zk59XOO~& zWe#KCJMOB(_i3~ZC9JB|2_w*w#i5gH{}4ZH=$an@7LW;K22A2-@B+Xj(RV_=NG#4j zU0vehBJ?p9>$#krZcccqazjj6n!JjA*WJk#+V!sC~|ykr>=v8*kg1rvhY6em$ucB7(jK! z<}edqPixCOku(q0zn!B=nFWDwPjuWv*2ml#y!cRf)-@vn{YI-WaSk~QNusKlBd6ka1m?7~Op>~qv zFt{#5#P=^7nTA|Lj{ht#>rFj!^1UA)Nl|B~mk?V6bSk62&knjPti2#-gc1V>0>xl1 zkX;EMfDF|j@zSa}2Gn=_^7J07#x0S`8;n3HL?K}UhnxjO;hxFa+_)9lU6zP=T;gQl zRsU8q5fV@LD*gF~(R)0r`*jeL#&xUb3xdyguxKaZklpw$XT(d3W17VKRC7R2rzc+E z!1KO5;Q&w#L;j2befTlA!^zF?_~QBEG_8+Dr_I)Yl%m7DFqZVkP|(vWPgG$7hMJ{+GNiT1tyeLqxFX>K0zSFFZ!JI3r)Hrh?JigM(V@}^B6Lj=q z%kg|N{?dL`W4qZ#Z!j2_`zHPC6*#%4`>Q1~Z&O#NqlE~Ln~df01VeJm-w}zYV<&uT zzFW5ZK79P(9pl@(slGqt6INVEE&O=>WcC}_IWzr{F>+(L`+D={m9aR5^?~f1_m=k8 zE^i{K=(vP^e@tMckaDc~*gM}HWhtLBMOjFgU_wdht}2ehvJ}gn+;HK7x0zbN(TeJf z788Ek9O;NE0?Qs15$7K};a>A=)~!~=^Ie0`1RV+;u}Rxl+M=os{=A0=n!>YrPhuSW zPRdiT(c)Q*xnMY_P>24zb86!3KOlG2h`i=RV^i~$u)EiJy6N4a9J#{^V{#@elui^L zu_GglEKf2G@S8@$QKFRxpugTlHg859HyGOt#h*KmvEj&2obhDOwjEexQ!|_KHb-E~ zy)KvtA4ATW^jL=qz7cfGS2UyR2ef-i$LcGa588!+zEe3VqEyxW27^zsF@`5>y=w6c z@LWu+M`VJZ4JsCLripQ_-e8%H@Wl_y>7@}RIw@@^J;mN8<0Uh7fB0fg2l}DIuBQm@ z6T<}zws?p~b<$N&NLR%@x6iKjT0=UB@CS8v+h>t|ZQ{&=VQ^znZ7wHPhd7L_8`YL~ zrpT%4&C@D(G?vY<)@LRPQZ@#iN|Mh9kI55p^%-@&h^)<{$-%<7gp42(d3%JYKr(nkq>R-)-PWBW)1BQE%fek;oJAKJ%g{0 ztc35#@2~4`IZ0p;C;$Ke2mqA&b~T3mCowEzkiZ7!9_Z?`420%QvQfCX&M7mv<^cx z<(n*;*9Ty_3o+4Qdn{Fn$}Q1h(!3lXpmPUTxe`}bmg;f$aw#YgR{H`!qB>1XsR|6( zR!)x1(KyDnmx{2Rv*QBHLHgcY{$%0TGk&s5Ajo5f+hd21QVevp` zA|bxX?aY!1eaR)g#;xS27U0N6TjS*lXV(j2Z?dWRmWN7xkXVpuF6RwXAX45f@ z%mk>=suc*>G(-dKccC~+J3cX-?7V*r`bySk7lqgmyxLTer9-2*}!3tL)1Z@|6RaDeG;xFbZDsdU@ZWv`&7qfjsDiVxNN?trWw@ zaAaAq@w35GZtz8w0?bnbx)Vw9$kdSGi#V$TNi?t;y=G$Bb!1}y(RuQe4KBqZe72!d zqr)!gi-{+9qE*12^SYG}rW!zc`KHFb83y|>zffM29E`WF*DT)tDzrzi|Lv#hQCsbH z5C8zWUjP8w|9AXkYhz4pYeKDWx?vli7hEe}`_e5Q2?%z9}zueEZ# z$tR7k@vZLxsV@aj0}Q5zpqdUO9O4d7zPDn3ugCE^w6_X4n&{t7m@#GZS`z<1w7q3e zU0bs?3Z>~E?yB`; z|5~+1&z{{qdi0#q+YKg6D-$WVlQ4TcDBqCt(x!+h2(tl7hk_PbBuo%VlIoTe?y^4P zsU%M{52Ar{;$-G9rrP%C-r%Jb%diXdak0=5X9bcy6Plj*oE+Mi(ZFpj z>TL;1eg#p7JV6{6vy(_w)I#P;84L!@PrOqO`lO9Lz{3>5jknl-7~Dg$+X?*gQC7~< z(v46hQv=m07f79=7j+osT;I0Sz}131n79Chkw~biDJizbjC!P_O5=E2987b_i}r0{ zh#z%IK1Nk>V^S@lKz}OJsgIZLT!zt_P%bN-9_oyT7eSwcepc^8MEGguk3t2(F-2=B z)!2giX}|e+U~$FN+sQ}!P$F4mFM>*FbwszQR<0z;7B9FUUe=R-V#Kpd6E#8L-H}!9 zGU<_8C|3wpwV6VjAtmmzH}(FaZ4lEHJs(xB@HF%CJw-?$5R4dS-m$SWuX z(UnCkFJo^wfl((?2UQ^Yz=bMG?`Je^k0RCJGd|W1S)^rfceNl>ZqgECHnPglg2~u< zh=!9UI_)nN%>ol(lUS$~65uGPUzbs`gvxz4eX5Oalq4Nn2e(J=c={Tim2)j}#s@zs zn(iNECjxB3O^r>o>&8lg<^^YGaH+{RJXMQw6%92h*9pe`U=G9z8>j>~VM_u023xxl zfidrBap9GsR31|Py?e|}{z=b7>(Ox&8_KJNT^@;JhCcn8n8 zt!}W>L??FJ(fj;mM`oETj7Dj?i=Zjh9A2MxBi%_C!;R?WByGa9I?^gdva*13IZv)( zwL)PlON@`-tX!y6?b`zA@?pg=ZhuC$nnq43mt`umn{CsI@@AeP{=EMkDNFWPk^7b` zGn)B~%*np77A)9O3tQ3*Sv9(65Y3R5Ki|fsKt@|gbEb~mw_**Bj>|yGSk#+r$D-BS zE0ji_5K)R{j_ffXx`*ep=_?Kfh-ECY3&Sp-qO#gcyBK`4x13~)?;Qx~Mv5^hzm#gg zH)Z4MSF;%cX^-Y{duSsqh|8|fH$9kFD=WRr?+=~ds=B93@{e2-0%7|ho~UXHyzfIk znpk$Ubi|>1uKGUf0OY(h^OxxDR(BR)bqeyQlvqabJoX8(M=7M+xH@*$Mb|!zEvF5Y zdJ(_9o}8&w@~3X-&8`O1^fPqBd_^o-F>AgaaYy46@AG|bqp1&!*~|nWu2J!(LWS<- z@LUB4>V4znE(vDQVB}5{^6E^do2mKXs63vcbD-QJ>zkx z>?aPnAH5UZ3AC#(*#>rLLT_bwI|+7YeH&)Fy&t;r@T6bS;ah^&&tWA<+MO)&3-a0S-?vZW511d7pXt?wrd-T- zM&!;T4NXvovUIR!K9X&)66gz17zg_VnEUvFAy>E0l|Q$zDFF$b0Gw58wI0u9Io|B) z4v*~ne2K5q5GJaO?;%gs#q}o>-%{0*2k}w}uCcd%2vHBQ)E^!AAXQlvp)r>03wV>E z4A2_mJjOv4r39HX#*D%V*H7|p0z`9!M}z1qJ1d=8DTyT{$aKlm!@$2X!CIy7*54?3 zXGl<#=#^175FM)Jh)*O{b?$`+>C-6wM2KNW01X$;28=W`TB8OwA}#{v;&Wt!Wh4Qi z1zFjnIm>zsQWNA%h6&8f6^f$DUq5zkKofaxB{aRRgJ{1kqQ*trJ0=~WMuxo8LVHlp z2o|X+f)@s~)`oWfLfo)fd&icyC47R&q$SrON_q4m=jm)%?DF*HsVMQH7VQ(ZoM8cb zGD;_d!+9fPhovc5LF7Spn@ee&tLS7?p8A|1^>xNSndXYyb%!9>7K5tYLx0ljVyMxQ z@!jCSx#r*{qpSO77}r_ryxErHby_=4aPIhMThgRc%B`%?<{5at{k;VFQ?p1k@@mH zo{)gpnjtSaOfLth+$z&kxKRkn$WO3XXO?NdtZk0_8RQGL-#bJ}LXR@JSVUG9EkrAoIelx}baXQ*!wA$hDl(hkldjLeE*av z>e8lXMH5V4Nx7L;OGWDPl{VOg$VSb|MEmZI{G*IPnye(OutX0TaqZbvREg$`mB_JW zF|QAtw@N}>zh$j|K`v7vF;*-Rm4(ngL3Z82Rp7Kh^ySP zpta&FT-0%*TvkeqEXdkMf5DHOu@!A9Xr20yzjz9^H6Or-)#R9?lvGKca0;o>FXd4` zlYf}-F6CX`geVyxz+60j1#5!tz+-xTazz5ejL?P)ry;tLP8$SEm4Me&rb*tyIT2B! zTIpbsF7!GF+d5)JHuJ!t^WrUdU8b0aSnP8^C_PKvT+zqFTrZzqti`U_>G$#es*`|* zT0eP7<>-8*AmD}^XJgxX^Qsh@ozEA|s-v$%sAtCZb1k}TBs!ipX@%|H{)s+^lAU$U zo)RicA_ERrwhO0MYWxVH@aoyhF%}2r$Y+B5G0!Kqbc}^%%0BNsJ6L`dBEWpmK6`(t>=!Si8ocv%?T%{uabRtY?7E$0G4$&9K0= zhHC7-1Y?!Y@lu_|vhTE)dxy-pEXi`)wexoA?_P1dy!NXO;SC#XPjS}tb;zp%YNqX5 zY8Tr-iU1GoRlOk@1)a_kVitQjNU}p@t}hJIr%*$KDPa!4E_vsoZ~`9(2ZN^q zi`KXFWWSenw{*1e;<}azU&-DYhDnSxFIu7>qI;S-l0y)0jgsFib3UCdY0OwypnR*a zoENVcJrs)ZJ~@Cs8hA@g6-X+6k~)*02ISMClr+eDTZW2Cj(#hu#S_z%vrxb^M1C_v z)eVtOmFNn2QW@T!rp(Z})_j*hMB%B>T(x+)xLTj+S7;LIfZ1(L_3h~L*?u789er^^ zYUWm5W2&GO+WC6DWj-Bw`XUHvV5|4_k2>~=nV7*H=eI^Lgjz+_y38Y_{-(j+5eBruY*Bi zt|VPNNqNK8bV7G7Lt7IGDt*)eG#E+8!E(vgN!?!JpEf1dt+n{niXu*PIhloMf6v3L zoY=lOIQ-(|l18SiK_LSo8Q%y0qa#@3k&7Ym7?$R9ytug^A&g6yX$Ndkc;8mOi|(-+ zh&*a2J1xX9n|nEPN!Ti_T+*kYvMAC`tr|&PDndsxZE1@7RSieag5rZm- zEGp^?sD4C9<9i8=ja6ZPb?&8h0|_tp6H#fj5%Cs<6ivyGnz=`fPx788=2||Z+zoun z?>*`W9j{woM&Y)B=lXb#Y@3rM3kg%pQ*$C1ne+P3*pscm7n^-~PrK45^%$=+=WIHO zKZ(r4>21^;k-qssTPw%h%R4{kkFDz`j%Q%nz+GVw+A|KC5Oax0WYB1tlv4wiXI-FI z>E|&Jq((J*<4KxTO|9j889673)z%ZmB^Tt81_Adi8X#~FgWz9Tqa%XDZRY&o8G-S5 z>ISfY%zv(tiHZB9rDV|c3LzHuaPxc=O>%R=r{TkEIqT5SFWG;waB*#_lrJEwD(0FP zu6^pQffRAc%WWibOXpUnVOrD5te27jUB&37r!oOTw5mRu=S1gy1~z-dFv=8%+~I7M zHUs^HKxmS7#`&)0ij+B2k=DaA6*{p@mr2z;AA6FD;e&2y&C=4+)!NzGdW>sNhU0R7 zOFh1$#;lv#Qwo3C(J+E9vZ%nKHoyEeU&Yx1yD!dk+%sN_V?`$o3vpW|m4XAywnQg8)cLi#K4=c$ju z!rzRiU9g8ho`;!UT>dirF z^{LoY{F+A!qk?_2A9N%$+&j$oDS}S85-^`_vQ);-vfTQ@kbN` z;0C}6+yHd`=?%cv?*CV`cgZa9nB&K=XAow92>{p3(FA8@t7|EgOu}n&X@9xonV*ce zYzF9&#PvH(O{C>oTe0S;f6Cg~PFh{STdn=4IEWc#$O zA)H{$uLtotvQHrYR_@pXTpl%so?h&j9K2YCD(uv`aZVjpS6iWj#aK!F6j=-QOmMYq zairn+^_u~$zbP~ECun@ogrI?@evUk&3kLYy@~oRD(mR(Z`2h(eee|S!&5=bZWjJcw ziiM+F3`EcJOX_z9o0%rbiw`Mfdp7UMz)QCY%cNU$VXI>`Az=!+N;LtW=@M$Y%+aaux-MNfz zt|t+}X)zly(KQ73lb9nQ7-K%x6sXg7(-k0z<(k}1Q6=5f!g+oBE|_`%pxx=`zX)Z| zrLVz^<}0W&{yFxxQ?sq-T^BxSfI#?A?!6zL8Jk+EpFc92#s9XhC)(6yc=VEw$S2{6 z2Wa8$UhSUX{bDCU??+o$E z9%e(MvIU#9MN;O1SG3XAc6{ZBZ^tH&KXx=w%o&3dBF4+d#}k?|zU1j?@OV*Q>S25z zbilFv`H3pjTA-B?{wr-Q>Pz2Tl^L``^x0CpY(*CHYhy=5#<=x_CcA&Aa<}cB8q|wX5x{sM@Yw4~IVL!3RHWW=M!IHB##QkT7w6IwZna z)N(zAny~pmbS2KVlOudGxC%0ALts-#W$Bx)j$S4_j~cPN*K^IlhkaZtHdv=fK9<(_ zfY|CSR1aai4$o&i90a=Ee6^_6uWT#4#}2w*xcazic_(Q4;QAF25IoTo_-t{G2h}To2_^u3gvap%XVZ1kyv|=2Tr$4H@=Xtqm z7~o3K0FomHe|sg^8#)@=m^uUdScZ;{h8}b_04FDatvMaQ+0^Eb1re+yqzr6EbsS;v z9K@o@!8Y@PZEm+n=gAx4%ACY*87F{!qU)ENt7_P6MB10#hMa!+qK|dXy@l>q7d4!2?gomI1379K)CRF$AMd6~|R;aX%PC6RSE$mv}PYU@#-7^odKrO-B&f z-Wr-#C#cAse;)Jbg^|zj@g5(@RkU9Fi{e9jc>2f5fYALnYjOS}AUlzXpHq2`5e9)4 zQGlmZH%E3L&@8s6aO@k$d9bX~Q9~kiCEuhsUff3C%wF}TVP+*&kTHCp67fg&ecx5e z>IAgM4g?5@@;_(~J4X{!$KPFYGEvT{j|e&B@)^VPwm@nXx7o-2s_X&EK$Fx43>x?I z@O3xVuk@VRlisv37`CTULW5BzSG*&T9wZAo_281q!SEph9qbr=`xzJQ1hQJ-IC|B$x)eZh%hdIv^dV zEn+yjApGp3*>zo=!ycK$q9xouX{zGfe-v0M$2@Z_qB6-lW7o>{b`)d!$WaszfdqO| ze5=Hy?M4@Bgr`+Hh8fSI%@yf0SWIiY6agFb2PsM9k=t_&?0tm+`#S%i?>W)^-r4!9 zIsCij7nEddfjux_%h1hVvEYYSU=?ToHv9kvHm;}gr{-!DGR4pW$&Ex>+7~|0O-lY6 zMSIB0v&k>@umy6=G}{*)AW)0rkkII*rU$8z1py`leuY-m$lC+k^A6_{WGf+`nfI`- z`qp0g6op=5DaoVc5#7KQZ?oI-aTM!lU8KG>P9hbgw`v_IK`?<+nG~alqm4;n1;pJc zfa99H{z#~Nt8C2>WxBWtKK>x#k}2D}e=4s6e=D&2(_-#%5=zTOpI1VB&7>)N=0?G5 z|EIZ)V&uGlL6+l7&I;u(2J$EJe#Za<$Noyg%>GcIY^zTynS%%;xzV7d`QZ7`q2OhZyA8j&SbdhFMr0GO1)A|4>|ARa zmq@W7Ims9&7B(K`LvmH8pdVVG@o+6+oC&V&Xry@$oSj>T1?OV;z5u)4jN+?{=8 zi{#7o9I(-<(i+;nYAz3R$*K*_Lzzql;EKqcWvug7%)v5k^SlYO{ILN;o}-=5|zn*q+PJFA=vDqTTQ%u_E(Qo<={f3q{yo{b7HTipQ=*w4{5#+~C-;F2Q8XOS!9A`axA@vhStJE{q3D`4AWiGmebUAi{ir zj}|Qg6zDo*M}F8fh%sY*ElTrihA}Y>Z}rEPBYq;0U}knSYeWrQlwSGLNucuLL%YvR zYhHf!a*|NYV5T6E%Bpw53M0>|n{4lpzgn`zFNr@;`MAMtp`@>unSN1FQT;do43EJ>BX~Hh# z4te6a<#VLxnFU$cUKAj5A#AT)n-ujE7DY{zQ18kKVCL7#cQzW5f-L5mvcjgJbZ3J! zTLsDxxA=In{x#NQP7!}R11n+c&DDW1OR$}mzn28#f7d$#>SU1FJ9W|r`6;@^1 z;%zuyRqcQh>RNms=0n_rB)Ef*EG(vN=R4H5x`3tH*&y#a~rOwgH3kuXMELxhmx7`@%P9YSz zBN*Hcp(KJw)6^qrGKV8#Zsc&W40sd#4ycm$wGTR}C5g@~?og}J3-)99Hh9C0*4-OL zQJwj>z7cv=Rs0>4>l{zoLQ3!20ekvA*%R zYe<)TPL?6W|JCD6%;Je2u`jDBBMntI6QRksIUhAm-=ZDi>CQ&U`dP#i5dCpH0Ubbh z1LkU{T31J1F{_FD@%#p2d`}cYo|$wJ(?OrOUQfu2nz0#m|kD zH8#026!={J0f;1~xBS3wMBCVhgji;3YE@%(>!o&ZJS3+$z)ul*xW}5`5XYMi)tkQB zw3&Gu`T^X2*AkShSq4ow&h?A}wnZUPEWu z?-q@5#!>BN0G#0m+a!wVw4zGy$~s?46utTSF!P_DAI_#^T9DNAboYOS&OK}&YnBT0 zaq9VuJJft-{Z0y=IlI}KwslYmWhWOs=>gf1b$998y!D#AG<-n*b2R$%HpQ5@5w?Z- zF50%)CzFfki;}j76y)f4W#>2K@xhjOO)(#9{U{n3jG@9&g2}b8VV=;*we3Tw3@)D< z{gAZS(0h@HZvPP>_p`K=Jbua(XB@;~rKJy)vJ<|>aislLZC;O81~+je^%BUuQ>Uxh z{@*m@ki1*IU95G+w|xm(fxMKqxR$0kMT|eZ%c`fq94EKiK)%m0@^MAcf`|<9w`>ko zzniv&M7Y)t@a4r#KXNyxS#fVWcf6%TDA#vA3o!oJO5@lgTk~y4jy<6cYsJ`~C-Jna z*~}C5(k1uO)?{t+>$_fo6V0xWiHZ{f^2#b)xfXv(>PyFmUPm9-IqcV_l0qs3#b5YS z9KD^M2l$HHk98|PR^PNmS(iiIlJL4Z-7XU{@rRWziQQ)EIJ-lm7{W&n+vC+>)q|%e zpsVusD!s;X(j^wg=uvBJZvmFS_BP@n`-As=HLLX(4g#N*4dgB>FITm$4cWpVvXF`C zJdy1*4ABy4ne?qI?jZpWpY2$~MdMC>R1^tjAm6SaOqMf@s8Qu=DngUji$wTc9ZO?<+7JO&wf-dQCbbI};B&7kg_vLlZhPz@K`m4YhIGHAdu) z7aGhiGK8LGZz8CTbP+$iaB!(vy~d(NOwceBsj*srA0YWe`w2#SrIT!NRD0S!lxMGT zj!Y>6o?m~8;Rua5g*pR-bBB7&;HO|WP8}j<*>azLIjj_@=(ob z9Lx$p)~JzPWrfT)kVFbJhi0*++ea&jF1Yn!$&DR1l-7q8>li9zy^C&9lK;P zBsT5Ec$jEciBG<;=UjSf;B)Mt|MX5kBLwImox?2ck>Je;ICxuF>>;jla9zg@O%7Yi z?HTgY_V$86_K8^DXewk0`0 zb`OGZLaxd9)5*q^a5gB4c|aOxO>r>^V>H?M2hU&3s=Sz#2FM7WpV9noJvOkMlZ>VKy);(q z*+_8^`BPatk?Xu!a`yc!S1&#bFIie}jLji`+6ULvT{3Fa7q+x(bttk2yw#scZxF0d z5FR+f|Frp$$6__x>9Z`Ln-i~1N0&U?>bNh$`~Dxc{}=uyQ?B&aK>VSB`0M>|;csf| zV)J|X{ zA&I3v*YDO%NpSd$7=D~5wGfl+0`#fNN*1}J+0E3JT-O%L0kp=T$R~P0oRL~zE>Toaen^j z;ord_C)F@Q(Msj}d|a%ZlW(=V35lqXJCsSE3mid?#Nsmg_^V))?T}?|i32CCAeG7p zRfC=_CaL_S>;0VI`;yAfh3=C_?7H-&4XhCfF9brd&T^ms^znb8F6-|9VHb#c9Wb!` zeU9M|nasZ>xB2La(A?EFrQvivA%%dO}~U z;gj2xt8iqfe0zD4`j{-t%4hfGbsO%z@19MNf}N0cHNIXO8uJM)yIS7z-Rn>oY4$4K zQ7F`;#&U4QsI)=njPP3XKiYK7(UB688TE#lPl@)bD&s9=N{`MHqTze|=^^|wjRqX6 zs#aZhm{oe2rc~^N?7WC~GK2OlAuWEiSGD#oFfmNS4IUIEI_0=mLBVh;#}N>Ax?C z{=Z1O1C>Zl06W|NH@o1X$Ycv-t=C_}15;$Bg4h!d^8~RxrHYBD(9>M-21tl!1%JIz zSAL+RYl9|>aqB>XgP_b3d+uPSQNax6t^}Zz%)yzp&!Q&n)mwvh#&+(m|XUjz4qc%-YVF9qEByCOj@bc*y^4 zDka;=?-z|)=c{|=R(Z;+?+UfL*9~&|?jO2*PB0R~5+J;P>GJid2h8JS>ZQ2qeQ{))QIu!%oGOHK5${9^_s&5@J}iYfofKxSC*l zjQY8UCK?5U&^hk$aM*mxc?p$rN-N&#GY{ER@gjc$^*z!O0baVHk+^W6m>ur@%21dC zqJd+b(E;-NR;!Y54>JYqq&1U*fT;ZKt=7rd!qmo)&dkoy2G}Zh{6mp{p|t^|xBgP( zJ19c6;2ZG}4ielkR!Ds&5^Kk4jNqGU5M4VbQzHMwGt~6%EuoBhf3j?&%qnt^%sISw z{lmSRhhS7CJvQ;#o{JkdE33w2^c4+cP*v3Xs;D=82wW2kjYLuw17oiLI(AI3MwKc1 z>1rDJ6G%N<0`d(}1R&2qj%?;LYB5Su&3@mne$?a&!OBk)g>k&0bShTp3WCZIUNC^x zXq2BUvPm-udgNO03d5h&_Q+-W$~RO|l19zBmf(m-xQ^V%h~rZj!?+MOuf40 zNmS2Lv~3=(Ot`Z z`y`UvT<Xsv(l3iZk31!;pjVqm>gL(o(YqIwX9L6AqVkoU3Uvj`O z<3{{KIBcpSIYw2?ZR50@iRTdx#-^0?ytd_g!|pVjeh{6fPI2bOf>2WxSh?5X;BO)S#e8X$4csOL3aNfq9Fs;JurS`GhaiF>~gC14- zEvGvMY(Fw8*|Q7AwQqz<#XB{tJfhr^#9i%cKT1@LrM1d@mr)X(c`4L8 zry+Y}j6uO-TffaB6x&85X%mdP4gM{ZtMC4oBIH*x*k7BuX>g?2gTzcwW)DHkdTKs_ zj>bzEMq$p8_jcZVjt5Wrm=w>Q(zm^PZmp=6d&rdr0h;8PCT2TL-Eqtv%%s=sR{$6Q z>*wx@$`A3#dUN0>!5OV&DzczmQvvZ2c7A4bXQscV80PXB`lu49H^@(n-i84(!8mM zQlTvz4pE;jhpK1Dh9_29$4)B9`$ zy(1z@A%?Wlh#U)Te^E6L%Sh4X+WnxGCV4liY&2jLVDGeydPLMyPsR)3O}3aAWMve` z)rK51Chu5S<;npu&OgEvh}*L?T)D~j1<)3x{8<*XZ`l#~?ZsgVS*QFI20}pAkx9wy zJmn|`WWlYchx5fp@yoh&XfC3gx|ud1j=DMj<+m`Jw64AZOFhFEo>qpT#2+WJR)9ev z`pc@-ms9pZaTLs^Y2IM5qKvk$c5y*28X833zo{BGgp|;e66C~VMqNFs%Q_A7fvxk2 zPPR$Z_TyUeclT|Ix;6;K;KH9P{*e!Hp16p zDt(Uk>rDvgc_5DrBfNhZM{c z==~J8Lwp()copAf2!uzyvoqorwiySNrsL^pE;&5$l|H0Yp*&YQyoIar;$Y~%IL|*m z%)H(ydU}*-DQ~8u2TvW3PkI&*C-uINm=fN=>-lXCB5C_eMyP~%gy$; za4CSxx9FREh3Vqtu`|47LsNd;OoQcZ@6F2V;PA?FrvuoHV!>n#x#L*Kv=3=Zg1Hpb zD3q*7T84Ggjq0O+_$HR`*F31;x%-p;Qcus_Tj;VidQAFK_4?*KuTZuSlxJkK%d`^j zHMIo5lBu_p>)%T3p1Rb@4Z-pyFz<65q!b4ULOei(``5Zdt7<)ccXvyFhe>(0j_Ivq zDL>7nht6&2r_1s3r;3SyN8NZNsxEx&Nz(&yai`%U<^HkjLYJa-H={G|O8j4zHAgu= zF&sZ@q%GP$#?#*xJEMj?Xl*2Ay#EnL1^LHH@IHWmNC10Af1i>0uW|IRIt570*jbwz z+Www#6snE>#mID?(LgsYX;z`!<)~yVg2FdMDLq120LYkfBts%nx-Vl_sRm&b=dp16 zwKhHLmoovnfm2d#T9w~}!lVyjh{;ohSxnQ=pYEU{$-8$3nGncVV3$y-rEiGHp{PgF zRzj>96glBO^&X>Hd>8Z4uJqOxrme@Du|GbIOfP9!|f6C5c2N(ftZuV^j z{g_T@f}5#U7T9Iyg9r-i_o;O$;~#_JZm<%4Q-V*HC-MogUHc^(JM-Z5n79MawW0m` zSTK)$3&Vuxa|J_)>S62ob&!&^mozGKm+(C?C0)8N#g*TTb=H)Q7ezJClo}}*@=FrcMLN`VgodIj2kp9l$A)kzVsMW=3ePfa#W1q^@ zjL;|wGFLw*AwO zoYdwo?FQjW#Nf@f>iSb*&04U-?bH^)I#JeXp}Jd3 zE6%|`cqd``kt+1;x3|qYw}Vwiqfed=UP;9vBNnr<;|T}6W%C_3#V6@_Lwwp0z$pFm zmd%B6qhblbe)o6X4o)^Xz3QGN*U^g|O)7+FUBUXzy- zccP&eH>Mxpw$L=@p(Jv7*8I)_>!k!)y!^(-Z8-S>QcLag9MztE`F;&_8Dz$$T{E1f zeZu&cdTj7CU0z*;=Z0j-wc`kZa5idBpJ`2X>m9IUot?H|zR?6yx+@05@DjbHM*BkL zu3BfbB=?kelP&bGQI4)#){VjG7PkWi*-0)@b31uYf5N~5ZB9h+*=zoZ}~D&6-5 zC1)}GJ#0kB!m8hmw+<^%Q+-OrV{(``Jh#!00<9OP2XxWx$%zK<@pIlPK&`+sZ)$aU7YqjXHp!tR~zKR?<8>Kyk)0D zv@VN%rt$h)AF^FM^MCyz^F1$OO}qkDct${i=u$(%iK3=D3vy4S*!{?hmVpA2oWZNF_l?6QkQEh@0Y=+Eoaum)>c6k_aq_Tr zHgu=60GL}?10UzV6n1|hP6t%_F#isFmYSShCNR9+(p1n~YO-LW}nhF<4h{3 z^29w*!jyjQuoe4iJBB*HsSKEf`TjaPXi%Lrkv>~57TQKH3R`)+#{R2cNKrAbmODlw z7-Pb;iI5$-^c=-pW=Dn;-3*4QtkdFld{KliHwiTtVFOE2*K4#*bWnhp}wjM5(QDGJRQDQ zjqL>L`waWqskJfdc(QF@dA)ctPd~VDiJH#njkA!IyFhwOkP;H@`XCQZNc1enXpZ#} zX;*Sq(2LDDqQs#rYfbjpoFQpEZEqKyY|LQ?`iZfZx!dH2ua>wc5Bp??q;{h$2!3I! z$(6O`%|XYzOq%pAE#`Bd6MA*hK5G4GNFaNlUmlea!KlsI)T*~am%}-MPviAtCMvRi zUj9w@uriUI(20@iB8r7Dpx!uRs#g!E)h z3VzRi!)HnfWTrXaklAdstqevYRwqA%~kdQPh%>K4j@W_nPe%I zYuG?W?WhQat-py+mu+VSi#nWbJAhd<_nSLeumfqMhAorF;MkijPmAnMJ%7nbgZ_>|a~&R$SgN`^SSry{WbgdXMNkIQ4Mvt+qj%QgEo~fv|%;0R)4v? zQ^CW;nt0U4W2JKYATy+pn(A+4`clf1t^y!tVp6fwi$u~B7Vt`9;e zgL>45(tgsOHU$@8T3k1vw9L^R+DYCfEh`k9g6I73(+E4K7C+6khbQn8_N825V>f|G z?6R52QU)X9>jrV;E91J&uhc@|WJyzMRsSo0k!N*`s>TmgG_~+-$mZlS;h1*sBA;JBqr=7t#5|ni|?!gcAvJ-`*QM4apg_!MQMY&OGXB?C=OBy9%uRxi=XvVI9#_9 zGQxhf=Jolw$zK+h-U3g$56e`#-JDPd6@}2EeGaL3P|YJ$3IGJ#!^%S+`okXFFME z(41(Jn5HA%NB*9=<3HF!yhBfB?JGI=N)JCudH425YCupynNkT%4Pb%k-rr9RoE<%Y z0&qGz7iT)4UeCzd)a3UVr5oM(*8w&`kGzAQcofGl!{R`hoOd9=*pN%*@|J~EcXy;d z`;f7}c)k4)CbP?DS*9&Ft<3BO&j)dsi}No4l}E12S(e9dL^k>q!t+MIR2PS#xGA@g0o}9r{R=)RjRld1GQ-dJO!F=-KBGejky>aCKW=OzpHVck(nS zKc}rV){mMo$e&i2etOFcFu7B_rGn~eB)wJo24@6*`6I3?#L%620)ZL^KE{8W`TZ|I z*#e_EGb7{w9hCk{SMUdHk$;{0gDmR#&4^x*F<=az93KL!#^3`@USngs(C)*)4rL*3 zrw2=6{Qels8oeu1%^f+!wveR`nIVgD&kB?@XB^kVaK9+MiTS~4{lgyH%j9bR7py(% z@p{v3={LlPtoRt}5UIC$Y4wPYD@%3}{4s&=y}JeL{eQFylyjaSWq>Q?7`XG={*xg5 zyGHn{?+kD>HKDTuo`K{DFfpYww6?Z$`*Rt&D3AX&VFJ`vs6%`zj&B;yY$XES?Lp$a zE^=`&+SA24xYXj96baajzc$fBd_CSnF@_l20ccRIHFqh4U`3jEGhFfagIKQ^Lf~4; zF9W_lWm$`UApYqWM~6ByN@ZiPP!l}CLHShz{Ok^_thu9tTGj>)|M}N6p)m0S5sH|ly1)U$=F>)rp)=f;?jJQl-yxP%(EnCz=z@Fe zI+*}RdOiFVG2*rxVlz10>_^R)&OP>+qN4T|3v;=*Z$ApsrcAo#DYuoRNAkrnWpV*k1C`XkR5 zix7ep7J?UfbP8vLdO~c=plPw+g9ulrds<_z{Mwu%G$<#jhw7y6cv8|{NLQIm@}*YK zFR{aE_!>~ic|b?8E(=~PjiNX*VO|$zcrAz)Ba~n_OHXv=v)mQ0e?jcC%QjuSg8E(9xNyb~Mj`OKc|CDYxb^>+&HKkvE>y0y4FnFSJcp}b7J<)MTTjju ziU6Ajw%b(EkrzLsMU@tOs}YFFV++eTw%R=}H@;&>XlthRnk7{&#?2>N3feX1K+& zM@i>vD?0sIPdz_HBkA9jg9gG@KHGD-1=ED?E$qKrc+mMZa>}0>vFDkLY*_q-OT!HxLngY@H z5Ww@x+S})|N_Hp;h{9yab2A7soK+I7C^R2e?CkZ&dv39)sFq3($|+4}+R&__YGyON zI}L}XH>$5$^Mov%SU+M|3PMOt}_ry{9#|MLdQ-IpnW_45fbR%BcMQm3UD$*NKuM~@sE@xzSj}R zMu=W|i7l;a^sja~$k_6)U=&lEYrzY_SfEdC>%MIUCf`@731${MV@$vM~_O`DLgy)UXoiz!^H1sgS*iz0rEs&}olfLVimjT^ASW`sTfwIwH_N(U7^u@)xd3DcJlwr$(C?a7`qci($-pE>8w{P_M>JzrHVzH7aUq624S z=-1PQ6^d1hHvma9 z=wBH5M@YX`du@$Z_OPcX*qYIa`k57`fDAUZTaf9gh#~#?kC@eS7Lp&FyO!%G?iY6##Rm zywqzecP|$OFx$Skk7JX1vnnGy>TNxP6VatbQ~CwlM~~&l6eBPN^GO;RF}x zVFJT_0qw-_ynQ-PrvX+nHcFPjPf@w4Vk3jo1rgsQ7JBM#0c_rz8nD{_tl_ z1JbZb(Go^{?_YQL{ekv5AU+8=3cE!Z-7=@@_X=U=Wr&!6CGCtoACYwjKt~*|E|f}2 zzg(M=Qf~mr!wvitTWqcCIjw3Qnny0qNSJ?|vUmyESHN$#Q(5WMdf&Vj%=`FTzky1J z%-yjl&!@)lI82~Mu!vbXILwB(8YSwD(owmM-Z^ZIRo* zv-6>n{L`Sc>}UG8`uK)zyY#S^e(v&MXQ}sJD|)?D6wB$a8Wxc+e#w8khUL!|EkhR@ zT`Pkx5B(pvXsHfIVGSd+KdOKXfH~xZ)fjC7%OnzGm~lS298e7^GGB9}d&A_~i>Ue2!oo{5Ort zBFccdJi5@r`G$RjRG93cbLN1(njNe-v?;6TL?>y@y)MsDBFJt>B-A^^3)P8zeJGyD z`Bd)w#YUOzrc4e_X98|j5M3oh)XfnF+}N^Mjwq#v0FK4;;EXNZ5@!i zu*zQzYI>?EZ;3bmPQD0Ec_&Z*F{!oTN&TOLQNFrN7kXIpkg+F*47#_gaC{{5M4-BSOSavIN z>~?d;g>1|3Q=#z2LoU5hzND(Q5GTKX2vOiMSnGhB&Ku=Hn+sUm%euol4>_;=;?p?` z^00x*HVE)rx-!AJvx3Npm@56juvUPL<(Bk)%*-!_Zx9xCIi2ZA2o0RJ!&;WCVqViJ zRGPvB;^{jfH0(M@Kw&>mge*M+ELe!joGC;jVw8H4Dn6vPVqs3s{DqI6*v|M)>vXWi z+}X2D0B}(zc?iGE0+ygEqv;QuqdLJ8cTf2Sj^7a<^n{cd%7`gG$ZupF8B6$86M0V_ zU0DHwk7q4v?gCkUJ0WzTDQ9(>FaYw%8EwOmI{s9_Yhm5YO*cj;TNn~lM#EfTb;9i` z<-#pA@yM_@4Qe;5@^=}2{(dEqebt5zaJG`%SS_PRC|#+77-?6{w?mJ@@F9p|Kqotf zzF{uy-K%oI)KD4VmU;f{!k4j%*>l0|B*GqLmkXvb=Rg)mQ_`geMnP{l%EWlG>$SX7 zPh12P+Do)eknDjGFrtB~N_|n}QwS`!9YrarE(~f@WavWavbGkI)NlrF2DIHYVgtsN zcBPNaL7Gx-0aoL11N6R_T%<+g`DVqaATEqad9$zj0-MBjp!&Rh2qPv}^tE%disDj` zfvIME;?`kDM5cD7efA14Dc##O=H!5kVjjMhVzvUE!_|RNif;T#_ZrYMv{i=a*!76@9^+444@ zSg5?0`jJ>GlO=(zMYufp&!I#Gty+n+J7uI(?QUfI3F>kdoSg2vK#(|w+!A!JMWMBX_c>(E7Q@ZgTqr~zj{&;@-E&iKy8gio&-x^R3tx;msG_aK0Oz+v#E&ib&Hhy<-*2w4~ zj2CTK>99%e;$clA;I3^-0nTPpTZFzH4j3e`IJ2aQ!5quLroD4{m=dWFrvT7WjZYE3S8t@kecbBz@QaU! zH$%M+{yEAXt>J6ZS~O`{=Ps11hxH(bP7MMMxF?P*I*KfpW@%(U-GQ?_#^T?0-UBf= zpro^sM6{+Gc3f^0XN{M?wc+YP+@#M_Zy@(RkuqMAHsA2ZK3@t}bv?vAP`Vu{X+o$) z(`=}!K=}1gUn^KwDRhn-d0-hz6TL~9I$d#7=esUC5x$Q`RYj*M%@pQeZnwQJRVuvf zgD1&OKL1pEx~Z{&f9X%KRyA7 zMEE4feAbL4=kuOOTySoCF}39{0_M?AqvKq7W#d=`GfLg#*UFHI-YsyorY7l6?)|8aYe&qXX26%0~_wT#@ZU*cyyxVDs(0*RW@KJ>buMV;Y zsB@u9eL0fHt0DPgJ?r$A3ntz;Yd=)^v{nL*Gnu& z!w&!;{_lpw|6xjL{$ZW$xrV#-DjVYGW|p5Q+z_>_nrVYG8@h9_M4FSXMk8$M9xfSb zYlPtHns~0bysbyS=VRLU;w0kbIHXoEt4JX;1&^^^*4~uw^^-$^1dOr7-w`0yOfpJB zFAF6psfn;ki8Cfsu4!orv+2IDyB@gJN8IEze&WR3DvQ>Z34>9cPY#bv zCzFH0`Lx9UnzRt|k|T#^i{yN|hMx8_0gGecVrYkt`wY(I^l21jEFLJNW40-eh|r3d z959~BZjM^|y~UUW&#lX#jAyinPl3yuL^59x45tYkYl3+cnv>BVFM{-2o)Po2{0vTp zFqvF#%t_J&W>)Jr6F}S~EOUSX14ZIbnk0QQ+~~mcSF5UcKmq~ z2xOxImS?LJA((55MI(!oLYis&1Q5ycMUy}k{6X1`dguUr711v-45oAC*y|Ou@Nw&+ z25g08zd%8MhNi^kS8G3Bl7Z@`1xin4%ACcKpA32ct75<|U1rV#cqyU|DpvS>(t-3! zEg|AzsseM0yDeD0&(()%0L;R7p#`b*kNHR^rzlOG1)P!#LXTVd)l;d#Mj8M9Gt&HtP9W8)pgt(y@(yMAgF`ocFTRjYf4-fUl!<+ zJjLy@z%GdP9V(r#FW^v^aGy}~j>zLtG1|pP zl-ak9TRV?VaZ8pqYP&albh%eFs@;RDG1dDI{UseFt&~8E9X@v0Ke$-EJ6Z7u(*awe zSk-T(#FlX_n|nT$C4|GKEXrg3?jDQ_KN}x_UzXCYmxL6Cfj}&BD9shLw%GC|#;LP^xw4Mr zJo8XH(T@}?otT0V(34BcUnq4LH~GB)S$a-{#lPUi)Z}tttB9?Oh*txVJ-6CJBjs$Y z`(8d&AzyImUI%!{Yeu03Fj~GWXuSqg{WYd}ZI3ze{M`y+b55Oy#mBijC@ViUdz-1i zzCmJn=9`MD)(+bs{9_d1<_&?N`HLfx4bTSuIy@AcFN0=h}^)!X@@`?tfYZU}o zN#e~hT__CTJYQtvC;UNuAAxNEZ9#jJ zSNj%{+&&Bv>UQ@>#L)!!?79shD%dOz&)*6CdlkvjHG)MTPhHm|OnC>QTs0-}T+;iI z;J@UYt;W*7cR_#P@ycYGsuq>jdZg^9RM&y>*WBr?4L24-33l(k!k3^wk&cXJs24Qec*C- zG|l%Z{(z@5zjS9LqqS$5AY#Gspgkioks+cJV(NPc$5=TXQ7k4FBoZJS8jJ_oy1*2S z*h%mUE>}HsrK`^35Z%R%Dj%=Z{m|YJu>s!rforen&Co_PBks+c2Vt%fM|Cwq{e~#9 zbfP&X&*vmPnHG#JSlkwl0Z^Rr8_ZlOtm@~fsaE$-Xr+TFqNAIK17ccws?fv_X7?S~PA1;V8TJ{ujSLkvrO3K8VkxHDb5??}vw8!& zc6wYayEzZ+Otq~_k@5nEQfDkf`=l$cBL`>0bF6D!t$=ESJ2Z_r3oO^&Ir>UZ;1lGp zc{h;o&BagiVB#vTD`+It>>{DVR(R}11oOL@!`mM6UQmu|xk$kc*lI1k^cGduKhN)* zSKrabL1B`&8AEpQ-@@gL*HROq0H6YiMrNlWLxqNnDFsk-2iq)#{Q*>` z0`b?YkNZ68HP`6PysDJ9fm1&&Dl(a9^Au@v100)^e`-qM=Ie`MiTHD-mmPOZK6f;m zRE_dF6SQK|HE>31T;0VbdSw&JUxdY;Z(k*LQ!7oLz7SWwNO@0YTq$98_2oBJGW(ui zyL(`D*MkCWf?L|zk%H`LiUndmQt-OA0;G#^kN6Q(M(0hRshu`+S;ucjNaSx?pQ23T zW}Lkirn&764;@HD+gxI~-5SOx z+7{wZyshSL(RwQlsX*4|Zn)7Q@789{_2I5mQ0%P&WHRBv>+lGc1^m{ZP|&@B16RKu zm~*mzAuY1$fm8a-p|WpS0p@h>IX_}qw$TvynBrtBS#U@a+80wfpz1b+qN}9?!TbAl&_??<9KAg;OhQIk1&Np`I#zLK|MVxtP`Dn@CFl$-BzEnu*(T{+vmJ&C`i=Px4VnS zOyb}WEs?@4vstT^f#=|COaLbjUQlOIm=*A>U^>Kr5V2b5%)T4HPy@xP43<123B&uF z`Rev>7NekB2(GvQ5U=#?6Hph?*5+&#L{E^n6^(3L;&bo(=SHsDkdWl!95axRQ}ySE zpk4U)!$O&i4fo(T!d7JeuX7&# z`lSBH=WOZd;HYas?O^dY2Q3xJ2ldsm33BNbs0IJi?G|fB;RbNGL=awLAQAfbw3Orf zUIR>PZCtDX30(9x_Zs%KdK<9p3<}qnDoUo5x~eWNDTEXn`5mlykMgTdaU$o^!h)PU zs_?>#vtmSfjFo~0ovsK#@#upEt9nCHM#^V4ZCSPKf>lSG_S5uU%tZTtcCP;Y8~(S+ zH~)OY_J0shSUH$}{ko~8jkTQvwZ4h2snu6a=s$bjIQj<%7GFmm`t=$8kB|Mo+27Ra zk2d8$dTI6T?f;}G;EJgJ<32#0z57qipwu|>wF$9NFf2wzq4MKD+y#OxSl2WMSOJC7 zR-kra8&?W{PKA&rMkHYxTry$1igm{C*`li7FCW$F9c_)CDgOTU@WY8mD+eO4#|1jL z>icgFjbvc(sq}K(750z6d2eV!Fu=E8KW+7eeHi}#{PBO7^=6hG{R7u*yG6-MUlG8U zx6dUjiC2K*nuhDzBHox=n$u$4xiklCE_X6^!u294G^((5p_JJ_mPI}j)<*NGQZ1RD zu_hobqv9@H2JfCHb2_ua$Rq#eYpi=|rf~ygGWL99$<~v8eKl-$2h#iVmp~^kjPH5| z*!M{DRTiZIG)j9zQ=Z@Cr+j4M8rvntqcvU8vPY?8;rSBaa*c1~l^u#t(;wS(42JC2 z$-nAXsi*b=tL$>WBmPb<7hre5Ydbj3W;ft@6WKR1NLsoS?e0*N(XI|-`W^GWx4k@O zD}Wo^o?<4EtWF+`uDzLN_Nw~!H^=W;+_UuuBZS5O@8kc6DHCSd*1vRaqXbKy$25^K zGz-h(D+EhlfU7p3hnExN6Dak1Yj;bt__ghF8L-R>7I$CVU)7XSd`ntV^r>+(o0_&R z$hP3*u4qg~Ha2FnNroDTiwLzIp=V-C0G(>tJsz#@!l55LqXzTSHz(Io&5r8YP7@{$ zw_mJx>{j_Y{bjZT^J)LMqB0xCDq~G}TDl|k>HgW`;M8Idic*iqt= z+n(Ykq58!(Nib<`+3s2P@i(Pv^Hk{2hF_=e@b&%Am92~Y7s#vY=wR|U;5|+l{WpI) z7=XvN9;|a9l)OVPUvSlKP{NSdU7w>2!zb4hDUl^4Ojfum5nUR>GWNAIe2LG|4O`i-`Cz2sck)yD5cKnl9CDcE& z;oV0zux*&g+~!Q@N2_MZ`=w-hl4YX`FPZ#Kit9nj_1IDh=MMHq^V1_W@&JF7gpEm( ziSO<4#@=-4V<8&egm!O_O4!~5u=o*!VUb!XZ>-EC011j4;4;5zFt=e6n)Oqbh51x& zPdqhog_%B=|CmX1st;w#tB|;^VGt)oFn;}=JlO?94jtEtN!uM%VQm7Lg!sjc1)_86 zLc#A3AXKH1bZtrpXu+`UMdtoHm-F2*b};C0p^@ArN9?v(xv5K8(Gg3V!~`<>3diPq zn!XyLtKGxJ!O1)wyBn;Qcu-jXr^lx#Ee*W(rd~8AVC^N;o4dCdHSIZ|mb+Twv$(GKZsf5${AmrvUz&p7s(-&^>h zJ$asVIK^lt`JLm8tj}(J$~}qlq?19&2L!M3KWC3PeFpI}|V zlO$r;@4e5c)1>ug8iZHE%edIm)-8Fm6tDxQjWPY!hb{d<8;{}MGSE2CMojkVh3r0s zN*bami|uQ}B9w*qV)&)hQka-pWdsW&E=ni93ixA{BI=w~q1h{V#?7sgMmO?h!3@yk zN^I#@`e?2c1q$m_=k`Vm9K59N|w>)wK6-(B?k*TakLn$p1!?rMrub0 z#FC38ePYDYl?3i*j2Ut(=g*GO)gC#^(vUS%HT73U)-~PNkSQ{E`ELoQ6`eZYAz_vg z-8>XBt!NsVrR!3cT@4_@G*r0Ktmcu=d0XNbZOp7YNq2>j92+stWtV?-k>kQSE3Cc$ z==@W=|Gig3|F4Omjjr+64AVayg#Qrlzh9T--&vQLj*a>67ynCP9&lX!MAw&>@AZXz z^Zwh5|6?^G^VL@RrABO%;kr!XP>7ferAPtOg8G<Bg3m`^g7vwDsc`)v+k=dHBiYkd$uGXDRt?-5J=rA-YAQ$e17K?|iMRU)=nq)xO zW&?4A%L^NQi=rCLtG?FzLiKymF+WcU^Ww3J!F*~cMo2_ZXDSue9bt{KbW1oHw(75r zWKX(WCd6L6-#(V}%FP~gI?hdw8ipEXfqc3#xu3DcsXH1)l9K}EzYj2o=xCHq0+fSA zq|D8_xXkCc+c+NkYrugTJ5*G3;X0$+HI>|Uq1XFwPK04~k-J^V4ZyI^W;n*$6BNyH z;{BQ$N;oYB)iE)E(>PR?*utP37GfQGNDRpwn0}b5i?8Q7&sY*LW_Y6!`T4&)dV-hN z(o784Y@+M5`c?S`w81yLV%D$6f?ZdQ;7iQxXEDyjT**(qBL@px)rxk^<%c^L2EuhM zG?>E~^HTpfY~X4z_^El+7IQ=g7AMA_%0&P`&uxL6z>*B@CU9W_Tr;x<-FJNrbp=C4 z{lV;4u&zGnz_NIlHxcx~Ul}3qK=C+07_!2OHSbN<`DbJH|0@}!XJq?lG8h$ya$WZ& zgWc%=alHd=&&$fD5okEgj&v!-%m-OZPQ{ag zFsIqNVz?mmD@;8~C;rmboswX6fDrF z05Ds3$k2m0m6?>EP!b^!s<%D5FYtb(o zWvO90B@hlM9yM)6g%r)u%O*Ep-!~e6oNBfUQ1IuPm~h4%zBU}L4t3soVuPSRcQ!QF zHX9d6bi!g(Kjm=O?JME!gxSPR#in@V#&=bm=2a|vM@7@NtUp=>tx;3{L?C8j;EWR{ zG%p>Lpx)`2d692V9w0t{Z#%xP>^LdW(z;Y$?0RTnfpV%aw{dfXl`gBuPegpfT!M6h zFWZ9eUO_HsM>%b#8WAukL#bibr8IEVDv!xXj-k$W(_YBBymRqtd*w&bl^gzk>C|J~ zFOZ4a!+wK2;g&GtI#-*i1iB;!__)ArE-oN!aZhxlYgb+jCMaL)qep^QIK9ASm9or= zQ_JRXXBFo7EeLKRMnz7B$vg+FtX3e zJolTmhE)D}m7i4^Ih5r_SP{nBO{@%q9mN%*w9C1h~zGNuPfoWOD%T0V^CCVmS(L2F&-{(}I|67BY!0PW(qc>Wq7YNHEy#KI+e=$`C=tj(o zUt+TRZ=0$=#N;2Csz@aXnN?o+jzblg1AzD?8ZM=Zb70>R(Q;k_c0~v!EcbK^wab>) zQxN~BOB|lKWO&?>?$+BUql2^*siwo0EB&`qQUh^;Flf3Ww4!duUA`t~Cw9!w4vygF zanSWsI0zEsSpS(&a3a3M0bn0Gkx~2UP9@=jWHX=?xvykP&ccDWBCk}bMq;XbFzr|6t_6TdT-gGPN@~{3Flg8 zC?m+E$c_T6X>iH5{Dh<@2GfvNm0q@1Z&3m$S1WbJWXh81eL#|oZSg6^8l_5Tp+uuO zENb=yV^A`!XPHRJw8iK;R02~-TpO>WFvRTg8aUY;NjrJ`0mR>Veu!T-y@San`3&SD zK3CytzcWQ@T3TS|qT7A6htYTu&kuR`fq1>DAU9~{OtRYr{ zMxp*L9yu%@o=*>f=4feksZBqK#I3 zL(rWk8+Eg&uWxZgf7`Fw4s>W@(zbF9IF)*U_@5wKW98J6Td$x$^-WXTXsQMiI-hFv zl7|#$FdjUm09a3dbm?Ehi~}J(?Y)?JEZeUJ+`r8rE4!kM2F}j%z;5<(b{f0#slP%| zQL=HtI9=!&KPrc;j?*hW<4MnYRdwoq=;T?2ZkD))t5-7KkbyI<88)t8YkpPJ{?_!M zl{eqZC^lrQLi(!dhg2?}L8MLV;=z)O<|Gy=AsInzW;&I7i*U;9)@{TTGiJ#(?#8ub zHclG9w#{${jBxU$i2;xc{!B_lNX2+S@o-|8+_8xSC}&RwKfPSEpYS zvMf@1owM{59MB3$`LCXk-PWJZ$H856MeDJB4$jTrn`g*_KHZIO z^X73VuKs%@jjp9c%I+lMrTe?4{B1OS&?Ak|0SGn1n|H7!dn-0|A6@PBb{&4k%){(@ zUib!-bjt|SD?`mC>t7Hcj_No%V#}c!92gyGL^CRF)Z?5JDEH!s;v(gpQs;iYcHUkc zUC}Zav=Ys;V_Pn>G!n73sO3SlM3eyD2&Wxk~z`qj9o&X0{SxLCz7$YuDdu)>qF zP!}l;;|sF>{B($hENdX_R+jL(+Y}$#ya?_Oll_kt!;U^0kWB4K5`#W$;ti*;x)V#@ z0n4i8tgvF_!(MR~*>ye2F+^SIFRMyvNF1RW{ zhg`=KyOedNzC%^kmYs9VtxO&4$i(-XY58WVHMJtzaFpf)7V?3R_SOdk6gX3;fn=s7 zCMjQy;pXuJ2x^NN0-8#L_vVI~T)U*V_-d3rEX*~Rr6S_`V>_TJ{4jdY@cnydAz-=?D<(b2yYt6~bk0JR2C=(poI zR>ZWqhi(A5?u90yqdfMgq2&}14ckzJy;C^-MZtOw@XgG(=B)-_I^1O%tLz;h(t&H* z-KW59^DMG-bj9Rf)3ji*ACX-y_@&quNc#AIq67uC9@`cZySd>(X^{yT&7KwA0T%Fe zQ0&=xC>*30-I;yidR7@8;{FPipC%4+om?xLkS;RAQ|GhEdU91~Q=J{8|n#w{* zDI=?jF%kB9kQ4hcb%2QU26vx3t4r@ve(aG#lKsP(nFaDN-|iM1q5iIm?tEj_pkq>8 z=eWR?MwA%DZKt!`O-XrTw#oj(!QLCVkhpec2*9MJS_ywc`>+NFC*+65fo0%9L-<4@ z6SYAFBMhobx}~Jj2af+;r7>BNvqw8v!t#D`1EXEys2ta3bgB11s1CybMA8bvlIVxUOoy zK(-7oQbSpJ`94e%ASe|lhg_05Y|O52(reNr5mM*e1KXaoE6BMgX^#S zL7wBb4eo^1oWJe#$jyxVOvtU%A@&=5g3OqeAe~g)@76^O=v5@M3C~R+7pS{!1pI!e z>aDQH3dF{?1m@{^V}{N`a)Rfs>z}c>210uhBf&8eqk{6(^8=b0DnbwQ>ZEB^$QVUT zr!BK8GHkido%+6Tqh@Az$SA(Ua!PqiTFETF3_A)U!rran&DHbyP9N_mSyZ3hCT24@ z6RX3>Ldlmo{wP;g5fWpDC;%39{!B|G&NF6x-gyZpwQNBX=my&ZbV?dtsCK80S zo^iL#&TVpV${B8`okezc4-ouC^<5QoHL3mb&5IT|vcMIzS@HWMt3006otWCYFB4uW z*2YynS>UpWF;qgyxg+A^iB9bjYDPl8=OA8McOaG0L(Mp#fA`{B?a?~ZETWBQFoL=5 z>&^Yy;thY&@1nu`HeT^+w8ZC0!@v+nonY-=DDYj56Kvf;|NX00!;m5>7JzI5!6G&B zAI?FC5nrWW3rqN9L)_l4NsW^Xqr;-#=D>c?mAG;@3r(&t6(Pe10IfJ*}zzIP)s zG(JQ}3&j_9g;+~#)dhhb$PVO?N~J9p1nSn2!)C{{y0phK=?F78cF6=V>Uj?Qa( z50G&Ycyl)@q4C22KFGPpmkz_;AA2q!Qyfu0a(IC8D}VB+L@Ph75G+$yaWv{soQL958+J`p7p#15Y1 z3Q0TtkP}SBqDsT1d4ppuW*XNnXh9i{G%M>5R9AUg7rYCEvRh#;}cbO7K;1xf2Jwx$`aLrZ z_q+bN|KIpWDqPX4bTI4hlp$LKw<77(x75MkSV4q>cff=Ta5OC?5{~ZtazER{GMF~2 z{hHeC#05`cqjwmI@{5J33+Yk?cgZk7YbNHI0950u<>x121;vUd@1ioE@e&w@u`wpwr<0f>M$I;Xh6XZJ zj9Xx~Ael%Ar|@khs*b?4YJCGxLC` zuk;z;K~reA%1rm?hugLRvo7Gfqb%b~&bvpnfi7(eEhYv#xacv>PUE!JPtWpJ-@(1J z_wy+ZC=-|pPHxTk(MRKgleh7!r5<(e<_x)Y#S5;0XgY6@Yd6Q}oXbe2_+}TbW@I-@ zueOp~Vo%^@!ni^}Kz-d+<8AA|j)g}ea;S^Gp7Q=z1KYodp#R@I<$n|;E3W^M&-K3i z%IAXXFhRCSsm*{x&Bi1LfpJPgNLksLa$*0d%}AuX_ukyE&G%tZDmic6Tz|iyoX$M# zPFk&0i7^Exr|HgB%LSZFi^y%iwVqwYTSTj}Y5wi(`IXAWWmGIf#g`!^^dS=&{H|uB zKiz+J@lg91Yl$3oh+doDrSwNC*W`~>F0p)L2zi<4lsT?Gyf|BTzA+LFJ-6jL+cuH3 zm9hsnshx9@+?2Rk2J#64%t*4Didfwrcu_X z^%N15cPeFEUVge9D5pFd-?A^`5PjL-7p!1Eba_ zOM~2$As(nDqlnyj8Mi_;NUXe4a9p(*a!j4FJZ`Ryj?_(V(MCj%=$*G*zw=;D)V!+H z25VzfX}m=F6eUdDy|-IQYa=4XJf${eu`3k4LB4qU)X7y5r4)3N@jCjtW+t=2GO(}v zda2@4?`i`p@a$>Ok-L_b;T$^*5F2Hnq_2N@S#MkHjFBpMKEC!3D!A8&MB$*WH-Idt z3ab4>70x7!wPJ;gPvp5{|999>f30PPs_$#gKufT@&hS}iJyF_uPO}&AZ~`D|GgtEn zV6l4%G&r^!OIpmi)Dy!(S+LtR@>cu)7_|AXB?|GdWL$$i)ckB*?5@zaI4IO+wPaM4 zp#G%g1st?Q95B8{1eq{c!1y)2RvvNR81n;dMbu+-yR`75qQSc`Wq-aEg4RDc=+CY% za1Cz~r<#>0ksP3fO%lmdW{|f|_Pm(XF-LkalIEk&do?H%9I>*Qbgp{;iTVD$q2c*= z49#DrJXjb~|97kn7+vU~KfeIjy)OXvUu13gi!}cAF8@IK{s3jaNUuLKwQUV~nAD_9 zO?~yQsDLe3asXS1{eQs;ARyN{#4XGJ7MJ%j-Tv%Ay5A90tI4I)iFKaja&B`M9M81* zc3JuH2GCp`vyF+p!u)f~!;8uN=3(dTBx}^U>Lx$e^A>>EA(n2gj6QqlKm?!`vE9dk zxJ)3c>a>*S$@*+-Dz`77oY;!u3zePw1C_-}c~;^#H4NjlAo&X_E1yHhZfW|3${vPC zl0i{iym+8CCJq$-Z&bD?eUsdQQgCG38D;;j>E8AP+drY7Q@7fj+=V(%2bW%yqC7ew zpNy`;fga>gZyn%i6m2z$Hh0VR3zQ82h4z0cJd)P7l+j+#flkb%NiR|3OBPV|fcpfH zsNF{KI0*$Rrf?Eb9xllIpG zy(Ymh$ZN(B*9!P(tXrV+%PObDuX8X9a*OZxcZ(eX`J$c33v(Q4J+m52odRc67cF$* z>f<=$m^B9}!^}ewK|GR)>RlguM~NqS*@HhDSX#EyXovex zS1Q5e3dG}3Cqe_|7^$ouHH-w*e~tnvgnI?pbq^U%PG8y>x#R(_S}5THeD+(CAqL3 zXnME!{FBM&@AU=M|E<1owE3gz?4Nm^h-TjyIKK*h#J&^+>%X|9zO|+0R~xZCjoE)z zk7dM3{V}>U@R6%O1Xgz6IC{=1ris@bkTo-ouYvT24HClkQ5wQmC>$g*cj%_g^)j5x z5VCTTi`Eb_iy3lj<7wc#;#oVSa#)7X+!{1?6R0Nd4xfe)6J!o!Y!gb+PqDK~&1}4_ zZ~A!T+u4I$V!2iA7^fGqOEw^r*Xc`wW%Lk^Y_2&-~#B!o4gtB_SP&59D2OQ=eR1&XZ03hWic;&2#+n%8zC|3 zrq{Qh{xlAM0TfudL%X8CZU*t|W*Gj(oB2vu|JO^&m+KDugGBk2GDrh4Nyie+4YE!) z5!DH9Rlx07E_N_6tZX{!H&emg<`3~5>ej&udUV$fcel$(`Kyc1EMf8|D@`EIV{*3u zMLnX4kw9FT^+^zha7i$Q9$beb%HCfWr^N=T4o<@EJiUP6dI2d=0t4~7Hn<9;PlpnF z^K=X+Fw^G#F_3!0bZ#6ba6vs=13d&{y3MCP%6K@T1t=?m?O50(O=*PTg+d?TD0Cb? z)f^GI=5ms$;qb6_iKV4@Mf`!MlQ}n9!lFYWXao5H5yyrGKkfZ7I<50A6q>Kf_IDqA^iNdM4ujq|LN%Za?!#ktqxd%(^+ zs@1A;Rm5R}5zW$@X*cjUVgW8P0JfUh*t~tuDth%BO0D$Pf zx%8jL|39YN{MUzduCZ#h$_DQ_sR9!LWIMG4=CoNO>dz+T3vli)6z zUuV7>vfpV#vUkvByz@U>o<4KRCr2?M1{*-AIa=A+lA97qQY@)kWgefqoXAK^*7Gg3 zPD`{&Ek0R4^1e-x>T!T^@dR}PWN!PS({Kg3a|8={I5pj!1)hl52iA?N^F7z^H!*NK z-0#Us$-gIJZLU?vq^l`l_r@NQkhJ2^*J=uYOH*guRLKA~n(1`dOma%Z$x+Ak!Hpo_ZBQobnKdWp>}jIJJEU= zzloNSm3Nd2S$k(yh^IzSiUsv%( ztOClOcl6Vr8(soPAqS9z*Vr!twuF=#&I?!(+i!D~UeSX3_!m)noSaS8PAmdBdsHbB z=8{;%5mtd83$SS~Y}R9i;bl1GFW{p)V%$NE=2ooHfYY$tfNET<2B+wY2cNlJZUT4x zfIU?IS~d>R!uD(iNdtI9dr4ru<4}Z`Y$Q5i$y1*g6@&~r8lvPmY=w^fHH0O*o9vw$Tyo3zVMGbS1$=A_g2?fC9kBECJ%|7U3oG6yxEWuQt2;GE83O(8{ znSC%|a0|lZZ9^ zqitl4Fe0!h-;1*%k`Kg!wrO{)-oVmYt_pjcCp75-%qOC0yVl>yyNNPf zlJc#~P-GPIGQS1yxA02IA8*rq6JZ7vQ@AH*MmR9DV2i7QLq>FPhF31%YXDNGRrM~# zJBTF9nuoeoq42OoJ8JGx0XphU0(INzSqE~r3|;44Fqyt*I2y^9_p30+A6_K<%#}|c z^(=L;`qA=k0@#DT7>jhr9)y1cjB7jx^h=e7KEl-|MFf|{2@OWySu}TkO?_bvt;9gp zq>r8?S|2`AZ^Om>JsUfg#r9X6cl^*Z#o~a4ruH(A-1)sUPzr%DPVby@6(-WT*1kUn z4!_MUI;v|uQ^06?Dv3|NaEH(2s19m;Um}-(h#>qhtsN)#m5WRof;px*v4TNCcp;y$yQF#1nGx-3q+I- zoQXET?X3{h#lGEQy(E`IOa2dP(KarhH)|B-T_`ePdk$v!VNx$A_vlVHJOZGuETKX5 zrwd#Uthyf6Vki3=+VnoHN}KzWu+r;mEYv~kw5L(-jmcJti4dwNyd%lRZ~2vmT9m1= zt||Sd#gH${uH+(t4$}GLo!z%O5;C zA45;lUl9>D0EAhck`sB6n`OcJ4&6rTG}NLd@CO|`--QXm=Z1cNUm1qC4GCi*qwjMs z3~)$+-1nuX3-G6D^sr>Zex{RlNJPsw(?yil)(Vr@MV-BR=yuKI!HLIjQc76~m4PI* zze1W57QrYlq`gAxq|F{8G|s`Td!4{1C&RmuncwXXi&9cHDmY6jIeSi|4a{=;Zn^85 zNfu-}(BV_s_YAWtJ(eT)MpF~4&L=t%7w4qbPI>`5@`Ns9k-%vqTIK6mjU0a+fRO|r zw*mc>*iP_M?H?x6b$)wt{F+du;=|Av*S41#Dq^|Np2lH)OutqsBVN`27cQzbd`#2j0)2l8Vc z?Qx9#hFMM$&CK1lYL=8M@AV7-)l*U&L$U6WV9tsyb|{&qEov6MER88~MmUO%LRN&` z)!<0q(XUeax=XQ?X^ZxgwN8n#%CV$Rv zr}=X`!v8M5S##TS`~a|MZqR?C*~5Q?O#jKQ{`fx?2V$Ki{JDgzlQhA;V8n=XoCd&I`Y~zom5d9xZ?w)%d`A2gN?qp~4%msvaC#~O( zQ@sP*Io8=_x$r zAUPxjy#(QpI6VTU350IM-=wM8NhLn=PTmS)Wl!^}2*d7!Zs1>m7)=pW9D|$bH{fR+ z_8md2k8x}Oz8I7ugU{K1s(+6Eh79V>T`Yt-_bWR6N9eYSt;0xb8QGm_j?yIa+xErW z9CGi7al@{wC`-Pp9ItCWeJ5eVzD#1I3&Knbq1n@Md9*)AC*@+Z(tE-f8f{A&4chKb zuY1)`_ZvBK&!BE|Ru_|*R`v@5de+Y6%3Tv4tIL$vbisHW@Pg&*DC;2!aqL$EBKZBZ z+wA?Dap>0U$-@QtYVPVbX;L)IMGjpSk-g6&*KB1Uk|#HyT%q|pccG(5#lCS(n$?;| zsbTO-AmDWS>j7(P+IXQcnO0`px^WS^CWK^?$4r|WX96q|odL6(9SPC>)v40e2rYI4 zW1K%-(cJ+em7VJ{~Wi)w*Tei|2Hx zCp`|*K4TBb*{Sr&jH-~>YpFOa7RV2tG!LXRCYY~P<9x+9-n+OFAn+0L_M6PNp#TRG zhQzcCFAbz=2mORuQ5{R<$0>b(_sHdkYObkaETmGd9+Y{7#TcbP0dZ?uAQa+Jp@(xQ zkw4X5XeNJ8RiqM#RQtBFuljrtc_!uyD%-XIX@1vA6rpj3YQIflJKgPfdS zehxzpIoD%^>mWHO5;7dJ9$%TX_f3~S4nC)2J$S1&5xm470GO#KjYu8o8hr|A(6LY$y-UZ zU_X-&6KA&KZ#aa|Js@SRhUYB(>JPr^GbN+% zA}@5cmpCUihFw4Xwh|rXqF6+JuhNpKH|?|3+w*WllE%pc7e@HweE#f7!cu2Wls*y{ zqG3ve!>FQw+uk8k`pjEdR&30Sx-~LV51X?)4zQcvAV+)!+2^6%bs2djQl{jRVf5Wd2WfoWEPf z))7npTiI~X<7;@)Ma-7X22l+`a4j7n_)jNf=%Gf>sN9>=FzNC@qLs+=iw&1cPt#PP z#ggtC!^iQ;6I@}q-F!OswYoRKec`h(Rlaku>AhZhQof=cmrqk{FhuF>aOW5v!9T#L zYvT;3>=%CY;-)9}_}jO4e3g*f%ODjVz|xbhBkPurg;^0jKjXS|%ZoXiCupQbnAEYC zgIRGl2ixwLR@l4H)U2oSFpPzL(rrs9;wp`AU=e^XZuvXV=v172=xmx87zYttr z)MGn=S!j`aUHO^!rcXf&=e&MzE><65HdQfa=C)yjl1~5#91XyMhd`wgRerDOE zAk%zQ;JJPaFhU^K7@^=R3<$6ZWYkQA{XWMOgzr*55ZkH3)_0(Pd^Bv&Iyzqf984SF zdjFHc^_NFu^V{Sc7kx)Vvp+r}V>w9~5I~3UN0hvBKSVL@DH;!2-_kGf&DL_>wYZc@ zP$Gu5l`Ew#kqTuI|7>mZ% zm8F3Rg^iFRogbk0auGxP=mi6u$f9&kjyj-%jTAi1O==2I5eZf?E|%_gX=sGR&Yq$5-#BQt;`!V~GxuAQOQX(=t$`Y&>jUr{3KZa$AYY zmy^Y}TkrMNN>aVXZK+cm5b{La@8jCw!$irfiE~C7#?bXS-}QQ3X$CeDLo_T(2sn7F zK3^WJ|D~nue-#<2{!usj^XcDTjPs8#mAghtEdrn|)=U4-^7LO`>VKRk0_xv?PiQ*+ zq9Q_^3$A9@vdYZR0@w4!p|yd#kFd}@SF2$}^e?T9<`Tq))d_!iiJw@ACj=X^gUu|V zu^*1bq%-Com8X0a;K)f!CgpP4VB>|yAuqs#S4+q|c8Tg!_Y{oV$!NtJMU(QrF^bdn zxMAobsVX<`pDnG~1(m1%1-3fJyULJ@%|%i5=C0n^zCHaSjZ+(l#kmPFp{{i5CHIlB z3YDvwR33J75+|Gvipcy+(el_`cy`1~U?=&ZZ3F}_)m-LoUxxhBEKY*$+hRMvOQ4uU z7imsQoyAr-$=O*)(#8FQ3M|gdqUwNRu)%O({9yhnNLHZ^Qhz%uXoHB%nmJhq`A<@5 z_m1V-otV1NDlO;Jn~-E4UiWEJ7BQ~+ef1_|nRusX!cgzziqeszcBj`Z8SFb1{v%#q zZ+#2|Zf)-Os13sM%;fU8WLK*2YFCST*FMm$i5;j~NpKYxO32FN?%oM3Wy@9lCynP}&ly%^5Tx1yDwg2s2;NvH*;EBN z<(TyOW4fG;py}#E`mWW1K%|fGo4Xamnv_hH@Gh_3Fb`1y{!K2$w+Vyg>t)^y=gW9s z#R&cNnn{O+7cQ8FeH6Tz6hQ_Oq+qW?-kMM%t1RIN-l|Wn@srlW7vn1P%C~aIYTChm zT1>YtBE+)X>jsFw)<-OaJMcGeds>pTi#4cBEa&Z-TTfwEn@=)MTIA&E@;pZh(LUv; zOZ8!ByM^}mJeJEHN%1pq%Qr~&ys6*Elf3lX3G)DKROWJeyX10|-Dxwc8-jF=5 zY+xS^a~ARZ-UsFeiZvmWludZ+-JDL{#Fki96cU0OCU_WLpoN%Gidd$dywLHB`swtp zP{YMcay6r<{3x!}d>2Vqno}{M@yzGE0ynaeYEiL9Cw{LdGSQM!?wl&HYD`#db(=22 zc%Kc8obF55EG=nBZkKf>h1#$95NMku_qwVU_ix7q<>qM66i;&9RgQ+VspFwq&cqC| z(l*Ie;LL=l0|H(UyU4o2JI@1j;P<{ivo> ztJKSR{ZjOcblY(xE(8xV(4et))pBXBV)m%wtXjxq$d1T^(9Wuv(Q=%*cCC*sJ=1sk zap$dUQ}5Sex}82PO3hUj_LYb@DoZ$}oj;|4`n*C+A(V$WO@+&s% zqiw=wfP(T^rWwk62vF4)u-YSM7ureB5qAc9ix@gHVH)6(_bJI9Mq#oof}$6W$YQ@H zxE7qWRsQJmhfi&=V8zhOZv*$fc$wS8ecwzFuH3jIuXN8p1W&J2o`yc~SG==fkyEc4 z0LnXuwX5z%uVzcM&DN0c@{3%2(eaEpa*?k^#idd}c&dtDp~4g+l$%gowdf9q%qJ

f{*!}Ixuh=^o5uSgkBt55l8OcAW7S*+&;F5JnW(zGKC$w&&fH`` zax|-xT@Qs_q*U~C>Pdo<=qWv6SmAnmS1cJkVLeUtRDSXi$K-og2Y<`%yvODecucK~dl=B?1 z1|C#ewWe(h!byP5AFEtC`wo`hIYFLd?F3u!iK1K*>LnZ`KX*cGX>nE#Zc5>~`nhNl zaeiZQRXMc;9+rF1JY9X$JRSUdN9IrpY~~PszshEzS>Y@}YhJA9yrKXH%c1w-$iR(wc_a)i9(-obp6ZN$@ zu-Lca-H;SwdoiwO_3ckYCSEW#Ve}jN{gt2eX4Vi`p|5afv<86V_s*ip8$E~i+1Bj& zk=eKg_D!GePBH?rKpO1yPo2T>0vK|NGv>JK7}g1r)!#_P`a#~SO%2F{!`G$8Djh^; z+`(o_I4UFyr5rqY{1837pyGl&KPqTpX0x7un9q8zGVWz+9Vj^$fht4xPiR4#jIFm^ z@agpf^G${Kz=g}_`NzVH>1cC;vjJMKE@578_Y!`;F>w134`b3#aX#5{a7#N(H@Do< zl!))^>&XBjOyeFL?6%(=>}Cn;xPZnnd<2_I*(o97fL&$?jp!+7;M&ouVTj3^RM<8B ztuZj=8}la-POY_vHQG~tS3f`bk;q&pBpWi+`QzTv3o-E_5=vTwxcF2$TE(&r%eh@&!n_!>x-%E>A{o&`f0z&dbyWi=)4#LypQDh`)@qGM7J`KZ@nU%#KH2tMJ$x_ab ziJira5Wz)ugS5?VmSdhuPcE z3yi|khk});gjx3H zTyYv9Rveg`wH2ZRl}8v)dYy`K{OY}?+f(sa1kv@HE^L@wSnNKwM}5|iL=PFAVk@g+ z+s8bMdB8tB7pLrJ^dcnj9UYwB)OHW;4axduKyp-W_Hq?FVV0OsvVYhd7-`H8o;ar7 zD{r_!xUvqjqr|nMG|O$&v|C=McZy5YKWUUh+bDAk%Oot;%OCG+J+Nqz$Qoi}qtwjy z`GofxGV5f|kn=v$bSX5JmOjhYG8^1jET6n3+r+=NHCG%(y#w#vUFpZ4{!Kg#6oz57 z0SNk_0mA#gY>AAlOux6pNJVK&Kq+hopcM8*7+g~3B*8x?q%nU=5g4*1!9b+V&|}11 zbv-50P~yWw6zRP;rvyQOv(A=hBdw;NtR;9fcSO?Fh5OBwJ79J4QPGTkJ2emqq{`p{ z4a?tjsPbCVRpgQyO5F|!Z>I5?cHTP40OmVRL^DPf`2ZRP&0i%*+??yr2vs7mD6JIlbnf zkv$DH(4!y|CWUJVvzp*?+6nEq!!oVLeauW5E$dv^SeRCKzTjQ| zj9$9$gWwbHpnyiJW~yWb4#P(=0Gfsh#wT`1)t0YVjgMvrGfF_`#=wD3j!d7wO6o3{ zy2Mg?qe$9Zp8O19szJa=S|SaTn|cemJFGMl%Z4JTMi%5hsPVGV|lSBio2) z*FA)nZR1Ogv(`XT>lMBXxp64DhTs@O7Aw+3T}e$LI)nNVD$S&Z@%zdB2Q8u{O*rqF zxp8jRs&~$6<`sWnr6u}vB#lgyzyCT##ii~a4!jTZqX~L19E%>~grwz}UNl%>84*;@6YaEZ&8I&Lh7ZI;Wk1pc{w za4wy4mSj*A>KRzrRz|^UcuQV?L(%UcS`i$bWWDb=xfV!%2@IGLYO>(cf#Vr-S5_0@ z-sib`EO9wn>*UaJ^ND}r(lq>*+x zLhtnUOPtu%kMYB`r07fvFGd==eUb3ln%8e!S6@&*1S2F95}9%iW$sOxdrlByz`?NQ z&MZ)k?N4){L&jujqT7j-k0=XH(jhY$3QGc5uvIk&_)Ws&7JI(C`*uy$S;ee1(F_uv z%3 zU!}x9?`QuvR=~vkZ!7q>6|nu=3jTkM1z!;jRD%IKLdgGSM_^|B1GkL?>tbs^n&Z9~TJ1wRzR4XDCOhVZCit<|14Eu%+Nc?I<83`b;TFU5n^MB7M| zXU0ztm)A# z1Y4YjV|UYKT5Tkyw5v01K1Ok6a=;!y?TO%IOKs?`k0&BN5|_f?))wOys~Mj^`scAEbE3z$e))+$6(0&PU^%0feuh4 zOqnLID^fo_x4hVb*U?^6%*F|>2}bQ<=kt&8(E33$9C|@Dpbp1mzOVqWAQ|U^ zn2Vzc_(;VR_brM;q4H)e+Mir7P$?7=8CZ$+@Sc)i9l$l$53;&SPT_fc{M-(&Uti`5 zx_9&Pe|el3zU_@q+}(BjP2zLsgi+`l;5|3~Z!r@(G<1z*7DQx6BE_L59{)n5~i;*&r5Pt_;Rl#(fn1Zx)-j=H?u-A3J}dT4@W2!9WQ_-@%c+DKH3N~$ukat7zlsx$)oOyf73ADC^(k>4If zI1;-e%Gm!lIr#Fis53uF`_PQ@Q3gE909CG%BP_hVWU0GpdF zqXfxMIO~@6Q)Y08VmCNl$CX*9WhI5t`>#b;f2I^HmI_Tf0P{Km6es@6#FCZy4={4B zC}}%KhtT<`8ZjfOvck2Z5TimFDj3^*@9WNQw$B!?T^5CVMsLpl>M|(alvbZ0obJvy zI^2)7{_d`ZGnM`@9`??J9@>PAw>a!z=NSQp5IkIJwra+0s)j^Jdy>WodNX&v5 zR1E?=%d2bPz6PxozQ~lIVrd9i!$y5^?d}GPSQJDhfR`x>Yg9O@xUc8n7o;5IB=ZUp)2JI( zAA{C71H;9NHM?HYIVIXD8F9@B7aX#y8i^{;!oiaBk8kb z_5$`#8v=)RNHv|8Zgpmykua7a5vZ3{JZSQfE>`CQ7wD}npQPX5ZR&D>FXp`=br@?t zR4&U+=)sF*Go4bq{w6q4n4n9w1;{J{|3FFIUk<2!!2tP`B0XT`BVDVZtOG#>o^DDTXZR!Kt# z!wdrw_v?CtSolZ3Fdei+yl_*x;Gvy9WWS(%o+gqWL^JU2icB26QU+DO>*r$#@2pR1 zNM=*bUzgDvAKflP_Qt~Ih0cT!cI6)&NbXhL3lYDkHxub02;QTbls)WHN=!zTbLG4*RHDlw=VC#r{e%YcIVSW>+I4Z5_ zm0MMJxvO%%sNDK5%vzK|lA(vI95`XGJxwTdCWg}5`lh6sacekOO-u9zho9eSbn}9m zwU{a{_YOqRIc2ea)rOb%*3d#<6Yh-oRJ&lJGczY2TbnZw&*4B|hN4c24F3|db|nUR zJDaMszG+(uXd!J%aECF)+GHaJr)jQKmkVXq+|(Oq&@$ZU_4FJ)b+f}v+V@aQGk-<@ z0^9V-9cz$AAOBiY9o*s-7q?;5r^Xu}vB(ywW@zQRnYGVrG;AF!Wmdz+yH=dZJa%U0 z_&W>gv0u2%(J?Bwm$k+ozi}9ddJ#oEAzWoXn)zY;$o6C*K6)0VVB_9*Vy@F1k;*kG z1+Tv*vHe$plI@>Y5lxKs9i1HhUdzxwBQOn>_|O_)b2k+Ql&1VImjBb3c^YGDJ4ZJ_ z=PD~FW=H_%ug&8lb;W%KT(vmaQbR)^p&pBTo3)6 zR=hm^!{c)`J%&{`nJT#sg#*k+N=C+0r{7yQ$T8F=&}=f0a*eO%jVb8a;#Z#-Y=HpZ zuCP;hC2+e#@_J zB;w=})HJ&4TpN0}X^*mOd{ZP4=5BO(_Sxm^#Ut(wx^ZDfI{t6MYKxQdV=^XvC1l84 zOF-HM8;RFJv51kR$%}6M-+xLVrJ@^%p^$fz?9l$Kt@6Y&QYY(_0=MlrFry_!mw$bF z9%REHZ}-QhTIwF}#iHm5kgx~uA-zKW5hA} zK#?)4_Nj>1ld8Z)7;k3VB^XI9edySYzKr6?p&LI*AVQAts8$y|M^Y-wWMX=(<|8p( zeMXy4tO66A&;&-{ySolz!qY&`2|*ir_bF)N#@SetBfnlh)eQWe>}q2(~0 zV6x?Bw7ccQTxUmJ%8?Nc@if}0wa)~yiUp|Y8!)Z)0U8{4Ge|3&nVG=PgTLAkT8mca z+zqmtM`iYGWG|r*ZXfEgn2@SEG97AjbIpqY*P^l;ySm48{Vd=*EuX&2o-sRUFx4?# zK1gR<67OumsBKXFCNuSoX-MW!jmqzkE$ooHy1ruWHYc?0y-C@Qgy5TE9WIX3wBr=m zj@@oSS$6zRYhw1dnmg5_P!!8VWAsZ)o!Nypa2=X6$zyF&#){Qp63K3oduDl09(cX+ zqsQP|T?9NAY1I-U3C^GR6@00q_*nT^`S%3Eu8zRwrZw59Vv03<0ZIY&c=-^~G6d(H z4K_hDR+bg|rTQB1v!M7Hb}LSbD^LYLIwqEYW<@@f`hQtj2wGT!Uc zc6x4}t1Z{&?kbIzMX&MBh$yT+!a52{I*9*_PPf`&)a%RR3c=bxJ&Jj2GU zL2oN$-dmeKe^g9OQU>pr0kCTFe-5kvnd$fkSe>>h6Zx(3uiOm3+Nj#rfl4_xm#4t1 z!m;cnPUHdDFb&*!`Xa8sb+pSx%?bt_yEC|`3N=9n$&@OAiBN6=-b#pTy+N=wMIU`z@0&b?WUM$} z#^DgexU5-SNP9)ZWtDy}EShGeCe}q(L(A%S`kZfehFA<9cFMI*x@N`RhdVs}81P*o z40l8ktFXVIzq7&O+?@nci_g>Sj(S4~h}#QYv2}O*U`7uOz<7fy9g#Ap+6u&GKL9Y* z5`d|qWLrO{Dg7MsXAk(2SP$75U5qmoT*P;WDT5H7WgGVk0En7Fz}tk`YI)9e{U=2I zQKOT?GK^$v+GzU>nn8hpYf*2EhBAdfCreBzCIA)*lraMS1p$e2H4Zvc1gHlv6&5(I z_7xj4#UBQccu%k&TkfUTz#bod1mhC`;rSnc3S3&8XK05pXm6UMcuJ4Y(V>xM>0-o0 z#04ahpvIBo;MzL4L3YWz{fWPhARoCqqA=FsAe*dg{yjySVGDH`*Btg`fFOv+A#w@P84Se57TS9lf zF0w9cux+EhD)nI5z%7VD;@yX9@{MKXVC}?|b0Kqx_PRjaU!r__wtSk!GTPui;T;Kl zCcw^P?^)SGRj6$OD@KlR_IUMIG6psGBlXL>NyvyB|BUi(^~4Y`&bpF3cg$ zJ$6-+A^Y??o8_Z4^CE(Gcf~0QNjwcLhK7GaRCu&I z_Pt#DyAq|iJf}EX?d%SCzSu$yDz;9{JM+(xj%?zRN8TRpFh`oZmx4#g>xC@HFT=_Y zL@qAwi@s|0MNRxv*R7`%qEwW@&c9t=i9hlh&;>aGSK9{GIHVF*U;D+_Da~p+@@J0` zR&>F}3yTRv_o(fqYn)S(D;%OZUClhVG+QcVR$6h~8G@N3^GkwDze#6vgJ>jEh@Y_uQ zrdp$yFi3cm;b-ub&clN!fXtZ05OKNt)i0)o=(^Zc&J=(hbHPP6z;!XhZhq$O^DMrU zkJ@Tx{7H2YZ+jVpd;`;4&u`x@G#--tIy;8HEdNlFUgZpQL*3nr4s(k$-b>dRW-B&! z)YQ49!v3*N$YE~np%ECn;f(g;v;V~63h#=WfBk+I&<;0a{nV!Wx#g^|T647@{`KW= zPBC*B?I`sCm>Pf$2=@LLRP{fKr+**eovX^*?y|rDi0PKwS6Vqv^I8vzDIl*S-wvzK zj%<2g!i8#*g?NQus!CjLb{x?`8CpNMlhcfj&SxAKgFA zpPiDXP0IIG7d9>cC+|p^w;N3NR#^!t#2^=SEBnhJ-^kKybbbmA8+V@PIJqthqQY}ET+dY9OrtiuaUTo{J~+oD0HK#v!*&qrczGKp;bhD{4Y z4D0P7p!tgp1ID6E2r1=#%xJ+n`yz(FP4F6}y;Il_B;LU2ne?DgR{$>+c+hUZ;FuW) zVOn)F&19i8-@F;4jLLSkMWP6FPt{?^s=B3X?NydicpQh5Y>Uk>r5?zQo6J8`&u8dN zF4;GKgt)eVUbI73&HKye<*{6Eg?vY;i^px`S!$75eF-3zI>d~$Lz$~2DYwm zftU!8TB6Vqn8nBF5n@@nXoca>XADUQ(Zi2S@v9|(!d4 zyuf_loTHlV>{M_31RE3`rnm;*Du#K9S`}aQ4k#3P*31=mqgXsf@CMjh;n&npdItBf zrb%E=GX8fJTT*Hwj6M0LrVWTwx zwTJ{sX;2Ow$gZUDZtqmWLKO6d+leu=u;}1OyyyE3JPu;}9$HMZyFw=@cwNb`4mg*H zwX=T*Ro?;KP@q|@6B|pU7_022mD~MnD|ndGbZ)HxHdJYM&d2>#5Nx3e{Pjw2&r~82 zp+P^3L7G8g6P>T5ysj!@_GlPl9o63=hr^<mY@EOPIkY3Bw8<#>Eq%(N!+Tta=LQ z<3VCIvTJ^OCCfiV%-%qcjg1q-$J9@b1i6AvdU|s^u%Qk1y+1pj^v2@Ce?%QT(amlTw{2d)F5uJTjqP=LhlTvUYSiK4USaGVC==cJ z*O30tF*lyo%^M^@vDyNpY%BgRfXq(cLEqZg(b$2;*v844#=#gcqQ?O+%Iki$xMw{k^$-Zlh6G?%au)1f*u6hGsGlMfvTK0|6MQ)|XE?PfR>LrHJ)5 zQzt6Hjd@6n<4TSw58bR(!Ig>K-8jjC8ZB`|O`SM5_Sc(mAl2ncaqvC^6E}Ih941t! zm#t-B@@}uYXHa?Q144?5nJcw}rQKX2R1NnfPmma86>*6*cx!e4*V)5kp(r?L3%S?6 zXVpk!GcU#b0}eR}2Tg2i!e|hI@`y4vIgix9vc-#RqKM3>XvWB`O+Hl+xefz?_k2fc zqn7@ zOkm^YYAtK6mPc9_J(0 zDy&e;e!LD#1kDN#IXArml|a2UL(ckWFDoWPe?L85}Mb18Z)ddHI2GqX<4=O~XtO znhNoMiU9v?a1AU6CKy%%?J5y3~Gu6HywA&h-&I?{E0IF zjCbQSyD0eQc!H+-E}yu_kCh};ZB5bRfEge*0dBZomRgY_c`Ai#1iw7!lzD~P%6;!7 zj^s!V1O1G?(8C`xf|hax-?m<>uTNRQ28qLkPd$B0m7*dtU7cEOaQ;;T*X%GV?R6kP zE3$ssB7QxRctm)En%|456il-C-k*?>u$y?B0vG3EJ-ZK13q|x6@P0Z8JEoRME>Von zubAqpMU+gy2O6G>7P-Y6B63p(rcpE391c|fX+^jpSTC)!Y`uwt7V>~$3%sD|1p(N7 z)WI}N7}t9X`aA9LoCz2VV0HiZ<0URlF5G+7F779sUs8$A=Ekl;bjPa4v$0Ngdl@g0b2f}wpk&}zUg4}ECppF>{pl0y z!L7{8Q#H{1_&L^88_kh*4|DE@gC-t!q_?F39JRPoYUf}Z^0zL3yS4Q9VD2~3fE6-G zXjRMs-t$2k?uNK7Lf5y_idbCMq?^1vBl;3$DwZ>hEgE4*0FW6m~|C$2kPb9QMr<8>hQ7x zHZuWo7GU5*)OFywkY&PWu>*E)qZpGNGRW2iQ`p#c-XHJYNfD*l#9&|Z&AGxAI+3Ax zH9qq7CGmBYR!I~CedD+If=fVP#Kw1c{h7t{fJuD{M;Juw3(s*UQ`d(<@-Ii9 z4HdD!4%hQjw;ChEsKkJ~7YiG%?f;Pyrs&69SXwu!qPN(Qb6_=R< zzbrHXk>ufZQZm3?3OT`Ml)bZVN{EVZJ1QGttcRUoacs{)gPKbFuFA2%c$h^q2FpK| ze$6Xd{2Qt0_g45X2>gF4N&iFJw}0E+zwPe-X?OqiVCi4Te7DvA#`xbA3U41z?%4x? zRr4R1zw>vFWdF3ZA>c&GK;O{vkEX2*NE!vOSwPaU47^V0x%G+;TAZYK6)Z`9h(d(b z_=174c;etXHR(qOvClcJkt7n7NcMF5bQ&vTZNHp{vVN*76B0KY34#p2H7um@6ghhJ zg_QItmKgfgAq-!g?9Y&<9r7s6V9(oL_B*R$J8SNZ&{pxsDGe$nN1z!joZfC6&`LeF ziwd_xr&Kdd==CMOGWZ|(Nh1bq4rdvnYOQRiG$6E_P{O+9UDHc95By-t<}#E&oGt57 z8FrIX7%KA;YZAPFP(nP!@S>$}7VSH*4^}ZleGoW4a=GRr#=LJk0*MRmsR-Mr3-M!o zfrdMktJYS{-3VOcV4~LTM6QrA!7AOz7oSH||K>TMw|Y7aCbjtpd6(oxs5U3Ad$6iX z$ooa{68C%Tpq#8dqNTuxe=Tm_-kLy@?&U?!7MuZCvvOsnsE@EY64t6Yq~Q<9I}mn)Xk^K&;U+7?5)WV=>o`GjBrW z6vL-qx|zl9J&cP-PDIR8bZEh6`^`U@qD{m&OO^39HqEj9|x~B%d7N-^G zphs9qozk#SW324OR-@zm!sxrQ;W@Z~>LNyO>#Y0diPdI)NPCWmeRi;Prr-;?3w`3P=w>3Ck%hGYdhmV@n8W`etn#%%&1BN{bDB= zUVau~%5{4%zC`M}y$3qe??>B14?WzRD1{NJWnm|tC5=rZhc!Nf_tG(xoXgEjG5N&Y zFU!#4u%=;0lH5JV#K&MfKSkwLPw|Bd$gyL}Oq#dCXtjtmNE;t!L`#BE~{9>x;u07GlKH+hLkbJ3?d z(I;G3@PH%TFIyLJWe57Z!WejVLxnt<P@e;o~GwpwTH!1fKkC9wZ44hWyCxPq``jLDK+Wxhyr_wtt!r+?Nsa6~_$2LLj= z9s%yc{V%wR4Go~9Eg+tB{6q6pF9m5pM-P~eOI0=Q0)<6u0um;3ttqx|JN|4&Vavek zT1X+VId3j&4KD%^B_RjgyocPJ!2$-|)&ar#;E24n-;2ZHC`Nm_4H%|rK=bTmPX~#K z<@%xov6d!S@b zOqcb>PkRf86)mbR8rsjtM}9d`DeX7=?zrNfhs!IM?xFSbdW5v;3Msp>9x}5YS7I>- zTKd48KxJ})lm_*oAVG|E_xjgaaJt-j=BHixA@cLv%{Q41q#IsiR1~TM6AmnG6Kr}i zJTgpgEau@bW6yidIQ1-cy8~_1?_*NiwJss3U2C!reh+G#4)Zf@+*@j>IO`5!^gvYz zD}HckVp$WpL3Kg9D%cOYbU@CQQs`+PmRWB^cHhYu@qSdnaSbc(;(%Cb#XvM1e{C&V zyYyD=xs?Q?G#Jg4OkT$=Sl>NMd9KTFP-h(Ht$na?5c8=;_1_lJ0j<9!;RBM4Z;}4zVPt=gO8oT){uX#uC2awc1Yne3xhDhC5=k+7 zzJxWN^*1v~%>=wsJTwonMs;V^wp~z^{Vtb|M#D4=|H#}z1(JS4?oHMz+d(pLWOEjf z%~=A2ss8LazG4HCIA99o><*q3av}jTuxpRK3tt2{F|>!BKplbiSpjd0QWP@}x`37f z_PpstT>;_=KE14d1wIi$Jh5TTIBn;mK+v#*&LLx=r$i<;Jlx1&ovP+yY9g^5@5}BC z# z|BS`Bg4ce%C_f9Tu#`8zF0~YrJ5H#RdD$*9dOXI?AU?w7P!*-W>tG^}8-du-5*sHP z{RLIXkSPu8c{scwJMpdU-lk_p1qozW5B8zslQCVu7MWpr*dVypWFJeoqA`K&_CwF% zEols^$NE|FN$t-$j42GE!F0Qqx9|O7;Irvf^SF#4B?QVN3r4p!UG>N~97!=@*p?Lc z7C+IBl0H-|`4#=6eaTTbG$_KE>P}6dB&~X7F&)HiwW6P=L7ATpwB$hw%)eJNT3f;R z}&`^Wgd>{Z8Ckr&K4)wKFk)zEi$?zbfWwku2i>MTrij7l6 zv__gf8VD-}Hb1`P#2^jw3riZs;Yr$VtSr~Jwhi_`z&V$s(;#*wB>rJ*ZJb3O9vjcW z?bevcT~jI1(MV|qrJcouey(Ud?&*wO2fV63q1B!NP9xlyQBP*u_Pxm8rmH$_f4A|z zWPPFP=1F#M)=RPI$Y3*L==?>Yr%|_F*&on(8)p-VGG^OCHWgoto}MCXhsmG2)PV?n z^qtwcH$zcJdAn;9tN~jb#yq`28)2g*`u5lRlMQ9jg!NEIj2||uAm)oA>Q|zpMp6mK z5boHaO>;$~rN*`$#L~BKMug|GeAa&J3Hj2s*+7*j5f$JG_vd4M`~H_I9~Y@r+b(h) zUTE?e%^WS^nzi{+s`&Tdg=4k8i2S`8vw;%r75C83l|Ck^CUMu4N7g*I_{m==} zs`KAs<-f(se^RWxsCe1!1JHU+03~Dj=MB)o*yIm-j+a7@#cz7fBNcdq9OlA}i6AYs z`PcOgDAEKi3HVwj?6O2sRV>rGgm;f2H1(kZlt6IqajwV>uJ6kvi@7K+OQHgR0}2Sp zfPuZW>)rAjs28H<28l5&ejMgvfjNm|$p?C>!1={4%S*G$?$#zi@xq z*pZLU|WNY=@M9@}p~aJdd{^UWX93P(tGNfU&$?z4cuOSHuKp zAVu8O%dr6r>AGYC>~ptpbNu2m>BIKKHVc8X&EeGlkG5}$60A$J4BNIcY}>YNBQtC( z!?tbPMuu(MHZw5sPp__CSyesL(_Qm$U+=v~ANSe2u|xS$KsoF>6h$PEZ^czn{)q8< zS3Aj-tzcM!3b>YW%JAm(@6tZ8FsKm8uapn?tF`^#Fi`(nr_bb{c2fqFWuoW4w#rwb zBtyGY0*Z<@F-DUn{Fk4}z>uyg4vxnvmNr)%*&66CpCNpSHDYR=27&_ZUAM0)NqQ|P zyR``@vj@1QFG-Y*KJ-dL1=fTDmdtU0r;lI=5V02N1FDwL@AR4@(R@DeGdU`COlb57 zn`6RkDoCtiVGLNmvAyA}unqzWJUK`Tta9@r7_;w2IFnOZnG9n~Gcd%i zO;Ihj2xsU*i41fL)XvhoR7P|OV&)x5vZ|vV3J~>kqx7*JEUoiSKOL-MHX%+@#6skd zucq%-ESuB@QRzJf29z7VCaZjKD zpVdqF6_w<)$cUm_=$JF!y3%$z78lWxA|WYd$1sz7Ze^hNo;BlY*koDJ#W223SHT|T z;|Q#ibyjDxv@oc80}HIWaqId7y06S+o#%k#MeGV(4#9r2J!AM(_h=sj9??nQ07v6G z!CTZA^Uq=vrDp-UD;Ve7_XjIS=LZG}JN6qbv{Nq#q9n7P>4 zQfM|hYjhDvn+5TtAXYN<3Ue%;B!^RSU{w9FKMTH1P{IP(ul|ZP(b`hXSi3+*?x%d&>M)!{VYQ7`X{ZVzZ z_xqwd`_Isp=YTml?8~B+d?CyJ8|@cI8(TwzKRjunQty}Q4ov4As)B4O2;d;B#Vm7Z zrpqqlMNEUKF|@=&3$Vp%_mq@o4pmL4iV78(_teys1R!B`1Xyn*lX-#(Y6}o0uW|Y6 zfq91!kr6)dAT_}n`5xW^w7mLxER`O^eW7ZxJY;f{QHkHJ0M4!bkDi?v)J=hK0|q1w z7~Xn;w{ld$2P*nX$y34m#y9<_^-d({#OmsqWX|8nZ4a>z#yT3kl~aj2zkTmk zCM^5v`<*4oUtrN?R2EaDlxfOg5X#2}AFG(OOs;#?prNs$l1VYFEW+xpwahvxMGN$e zwKewE-B9ELA;TEMjv@xRGN&Dg$(nP@3hN#$f{YFTuLXBwZdeRC@T1#1qY;6k1R>op zl6?V33}3K1_Ha>2eUP=6Lgt-xB z-Un#QBk|pP|E=5mkEM$LGAXEo<5zjY=s)XoG>tMrL4Nf(YT*B0yy3sS@}EezZK(ZC zx=n?zK}Se3!ML-<*_UM_254lJP{ucx984pRrm3Mo;$BMezWYjCqi(N7L(5Vxr~%38 zX??@NCBYMihX`bHQzxUpp@MKv%G|Ycp9R6*p4t8WbmF9)Z}S7FHBHKMku64o0b8r1 zrooqNWdyOud{PC-B5NL2&FJiOqnfy`DU2xfuC@`yQzfynj(`Sw02-u9xagK42$h2D za0f$}FhQKyVpjN;;l~DfE-_!LHc35ZT)R6@omS|ggo3Ak+F0#E3HC^OhC@WIHDyHU zv*wD$oO;ZXCudX1Mg#A#p!~Nj2f`RFGwQ>Uh&2_4HBGtrLQ#Y%9S>TTGST&0Q%lTH z(8uT(quw-7mp4p_qbcGdHGNG3wCo8~eZ?xs)euA0Urw0@*5vNBGfB(irPOLd1b4S+ z;hM>cvNdubsFM1TPqF)^5HuAFo(xObQEO|qeRjpymlUa#x;}|fCs z^QfYe9>$$R|0;%WZxa(zEIikyi4}8<0S#uDD z&BnX&rneJbwr8hrd|R0zz%3UR>c>R{;<_arZCdriTrR5nY*ao)Ko~;d*ym!0__KM`3?*t`q@RD6s&@RnXbal=-P&Qi(iovtitbV<39+5Xhsu^Ip_9+ zF4Yz}jtWXcaR7CZZ}xx|m_RxI$c(Vm`6UB<-UQr2*HwuBDZ=(a=G3YGY>Q^_f%T|^ zeYRNVQ-WPejqP26$@}0*d^k58UEAc1aQ2xJeCAvZV8L!HlV~SKM2prV$hT1p0g4$$2(9AP^^y8B_=}U%;vC1<0vT3)#o<>=YwS#* zrd9X7#qUgy?+Xb-bW^6_7Iypux3Mpq1D{(`)Pxg*Z-=htXZiZ&LdbZ&Z)OU3MuEl> z`#!>VYepQ8wTcp!GbQT;Z!N{spmtTo?QWyvAV=BzNUUc(OFcaTeK{32vl%Db!;MKh z`~w&t)(xfvJUHIEHT=ieEd2YN*wDhzR$QWoXn4s9l(@w_#p(Hz4UTwe+nm@8?_U-U zKEjJP5i29WkCA;K$Qo!F$}D1cHjaf%nxQ~!lr(nd;*1#mjtT|td2X+kOo5HQPm88a zUGDF*HI2LkEpr=V1FyErk9B6RiwN&&$sU+iIIFB3+7PJ%Koc_g&+FoL{MIPcAg`-N zFAeF$=#4o3Cb%|u_4XgdJ%qO-dsfqAnRSuNFgx#}0KctIzy#wZnTMVfep^^0;J-rH z`#D_nBWgl;1?nMgq?K!4dc=;%w92O}vaYuxK3F6TSa4Jmt9e2!Pv1!JX#j_u%*kBM z!5*T3|9G$jpS_CW3OSnc=t1AE+xay2^D@v%&)@i+Y$nFV6_|!cD@@gooWgt7`Qny) z+Z9`i;>ze5*;!A&kk&9IZ0t2#xgS@|qUKRD2oahRm-g9+z_O*ez#V%BXN{Mpo2ZRnOX8F_ie+G{78uzyZNge%JGK2tSuAMJFH$SSHNxnSAijSE zt-GaNh7~PtGjo75!S}Q<8@T2cdvO_J)GT)WA26kVbX@;8S-}4&f&ZJAaWrvoq;aq{ zG5RM3_J4dk_kTH~`-ivxpNR0rx<*j5zY@mzucScafB1?2O^D}aU}gC?D&$TT9fwm^ z1g|4C^PokEiEZ z8$9JKG6;TcBkI~DkzkDVT$Zw*7C8iTf#wt_M{i+i`HWi#g%Md4a zoc+FdSiUGrQk39mA_s;_l#RHvS;|@|<8MxzWhHLY41@Y!4@&eZ9q!_@m$01;1ZhX# zX|JnS!C&NAb$_z~I^QgNaI+tRaIF*0$zD&KaIWp2{BE|ZCJ_j>y%dkB@7`L+j$g^U zfNQdW^X~WNMw-%v+w8^u!P0pmGTN0Q2b!U^OfpBE;d9j(v=+*0%dvCf$mG=CeU&Yb z6AfKE>^e>;ne% zUtkLUVkG>-6ildZ{H1;D^Q0%x0$c~wm`Ku#ci+$;(B3viQq%gR@{~ku+&nJmOLkagw;#+f0BHC>C6y%H4 zJaI0`hERXyfEuu=3a`FwerHwOmi=(bcb2z)IayEqZKy~tLD?l;>Naj4#0#+PE z#xlaC7I{YDxKN|h1|f>TG~R2sdz4}lg+N2}kzW@xaG8J)V-NAt8(f#dn6 z^B(nNeS^D<7K)M$E~xG`?f?v)%@8XK z;1Zu@X}qY^gzzb0DaUf0&QDo!y&gre&eT0HH>i)nhbk;cAa53_^K<~pruvMziNgx+ z35%KA)C_PH4IO@ytEyiVLdab22TVp1QjRW&{sWYhFk}dXPDBX<2})j)_;3wz3yvkI z#Iq)oc6ewKOM|g%3HxF=o{9kw3bXar%xyYUYDt3QT&`gkYT4K!W@e;6DES$YaVDaB zbf{D^j=LlExP{MW1bOeAZ-SucOzaJR)E6Ofe9IcJ+@!3WT-y=yr5scV8>`cipZY~i_>xry+ zHY(-wPkpY|<)eTzq;Khk09c44N3^MXzHI$ZH_c@<9Q9ppar1LqnxutRm5%)z#o9q6yz$jP@L%@h@^X-HD%2d_N1 zxiDz1^kF8FxhwWxvGIZ_tK7+UCfo5kZ^u+!<#6MIZ#8q}iG28FgljhqAHDy}iV0Uo z^?a%b*V`D6%#_~Mex`Ok_*_MQPUg#n)~U{OI_2ujbEs`ojJew5_1z{8 zM;K-nd&u&LYXQcUS!SbV3BDk9WisJPDxUu{wa|G2EZ?Em`vA5@;bMz1@YL*ac1@wZ zGt8Sv9V3;OQ8d_}bQN|)%xrL=O=|(#2nuc7r5C)iUH0f|D#e9YN@GW1lpNhnUsSp* z%c^NlB0@=Yv@TM_>h$Nkpm4nKd?DOp!<>}mC+DDZUoPtJXHa*mZ%97iSLA94SY1J; zyet*+7^b(~e;WC=RI`tZFZq?1ud>?zINtk1}W@!l+cRw zqBBv$lQvNmTF+UclUOTz1sqUV{9&NtF^)Yc;of!cu0KWB!3JlDJXt=-g>pY zy#U)0Qz%d|oAn0d2g#09-o+$O64Pb(sz)9iYgy5jRfcw{(QF!g<(XmiIxHW)10$3* zUo9?xu$1v#z9*~{?mqf7OF`7MRW9ph(R#-(>`RcZY+)V z0Kl#R1YN{)4!4|(RMk>^5XZLseU)!XmUwFpEls9{G7>%iq@b9qA7)069Vxa4h@LnO z29UId#q>OU%4s&h3T4l!c8zxasFvtFp=mR)g>-$ zfMRWUxCheZx##VcK}O(mT(BUBo$Ma|NOi*bI{i(sXsY?;U4Jp%rI>FRUl)h3H!#n9 zKv%^|ul!I!vHI_@^37k0V9g8W0-qMPHt5s+=D1gf zF3T9zHOi%vid4fQCEASh1zCSuu|>r7=}*t@IC5i}7Gurn>HHSsvkFWsKZ8Yayh9u7 zsg3DVG}~27QDnK&O#NU)VXVWW`!qqxs_KHi_u6i3zW@$DlEpau;btprQ7W&6=S&8G z#evUN3%**_0!YTrfaEF>xq~VO`%C-9JjcL)!(gwFpgf8|z(0RRuFkOCnL4E_TgG&* zoU-)xMul%Am^|iEeairy6{(v zAYTs*+3>{1Sw>BM&=1R5E|dG1N86|UedbCP)yLoDREgH(Xy?jdijmoQelkrV=ETN> zQC^81>HU<4Z`dB0>6m!~b!|Rwz>=q|VX4ts)2cdliw_PKkjxvGt=lhiYA!r2AQay9 zJ|n-hajKAwn3Hk!E$@aE_cGYs;PLlEyr>gjiJymvTdH%lpN525a>6(#4QHrNYilbh z`#7f%x)L7R0GF4G90b#vOLfHI3GeaCr>{4#WVEDsTy4vp3Q~57-wpTG40K6G5fC%` zfz2e$$N!-|{9kWf{qsbanVFsCKPwvR`>g4Pe_6-BETrWBG#mcwJBBtkKmI()CQ%G< z{RA)~F0wn&IhPSD?l5Gvl&iivz>2M2nE@~=VtntP?;TIFE%Vy|s+8fPrLhjap)V#8 zfhaEadcfnA*pxIR^VYG8fCjujQSnXiZ`2%iEG4iIM4DP~q?*lk-oW`Rm`F=fO5&n4 zo2Yze+Z9TYtAG3WntR_ly=mf0_5(y2Dl>Ra*8cia>#yg3?8p8hJN@HFss8-Q(Q&D<=C6Mwm!hGZ9G|LJ zq@M;B%;A?Xm5?n<6qNXG2dO4tC?Q&#DCk6kt|s|i(^S_KQr?0=Jl)1y@_Uq?p*3X) z@Dd789)F(p-;E=w*veM%tNvmL^{*Jm7n$cDiCyQKm7IxR17~9^B6*Gm zb;2PY4YHV-p(_XHx2S-+FGx%b*>si^T{PBTtU-8IfE;lud1IAjULGXs;YBDhN5>i0 zqSV#sONQPg{9{psb}wjDjv9=JT32WN_{r?!*yV5DQGv6R*R2F*u(AhNSlzJTNcGhc zQqWCiXdnF-7n0hb=@4x49*IKqp;vH~K~VLm?9EK7q{4nw1e&q3g~D2zj^3+>8Kf+j ztH&qv?-a!r=pH}2eiLBU*bQBU5@h#3F@*NA9;5Sl<8`K$0kuzo@Wylxh4jpuYmG>) zq}sS6OF5a;f`wb@L{qcr@j)K-D!Dbf1Z(Y!xG8lLby|`9>K6{oAZwj@)km6Nm9|7I zA>c8-krT=)DE6H-h-TuMUoiI5g&XGq{S>idWoK4T?{b3w$Q~-C{#(i(~ zx|W*HI;%M+4U^>$=EB;J5k(f)g@dnp>d7K9AqiVzI z*RN!L|4u*L7uB9%I)OVLbrF&j=+8vX*I76f<5Ba1cK+k?QI45_%(8fRH3dn4DMA#p z)3B2i!9k=t)Ih|d$Dv?HdFL}8_BN&rjDka%a>$Lcq}8@d07yAoIlhUCEBhfa3v{)f zH_L#~;q{`b1z>BshkyJ8-M9r+F||Z(Dv(#q zXgJ=I;;`EW*$B73#U0_o!~N3s@r^@YlSCO`?u?JPGv5V>6N89tmPMWwoHqAlo>aUM zy!J2YHLn4*$3IeyoPR!j!<1PP`{+QOKxPo@p?_jcECD&w35k=NQ|^_B^!Al(kL@f6 z;6n8nIjfNGKHpSV))~$pJ3B^;DnK`_V?dZ!y8$K2PW*Fv){VaMthY$v7ByzzSHDYt5=E~PMvZ+Fs$f;w6lm4-SUU6fJUn?l`^bS>fT4v>&i9TLqJOsd}k5i~Z=B=!Var?xc3z+Ua zJj&75=Dy5eP!kGMan(H0q)|=oI8ynerLSmK7Zaw4#+I8eRp_3MF9F(8t?b&nSnU_c#nOmuov97_!lqGzpFwXKe<$_ zd@aw%*O8L>?}uRjaYgY9;B0MRYw_pNvQn&#`pTy^-cf()0Ls;FH0W^ac(f4m&)~)6 z3MrsO3@o?Blc>ZQJzq(2$QqK}5XVP*Ud1veF>7k{6;}+0{fg&`xihKrpDaa6L$FLe zO7e#vR5D%^Fz>SVly zGds-d!|U$t*64TLZdwIor6hIG;7}3#%x8aXCyTe@FWs8Q;wLB!rcSS=reiQwLJ$J; zQzImQzn(PN_>gP@Jr0Y0_73LEyurABj5P>n>R)HA^&&%$g6jxxA55UQZa?w@VEX%}$RFsOb6f8<1*X_3joi^30}S!X53oT<2ApNsD1c(0>nQV zICh89&rfnU`~7EGh2v_D1XU(0#j0d=_xTQd?02nK$bVnVf4k^#qwpQ*FJ)?;|8KMW z@BEE_%yMU3=U-kpz=aPqcB3&?!Q)AG12b4<{sCKdcy;%iy*l&C4_oIOMmH7p(d0(xB$yHO2RDs z%|GHY9Kby81OS1Gl(6aq`Fk&VL60j3GPxOOcB*R!0_I*puKhwP6C@pH_@FBf)9X1} zq)7d57CUr*9Y0v%4&3fCq~ zaUv;2=fI}V&2JD6GN-8T6CF4K$3$ZYoQlIOC+e0jRnXXI$oyxkOp;{?Ri)rn zkmHD@0}m}CZ)L3GYfB?|tx=u0zceK84_f_jC#BoPH#^W&E&6Jx1kWS6+m5s z;9Rb3b5P`l4=Xdt>cM}7G^*s_6soTmL_(}~AXZq`eklw0_Ck2WDoa{c8qv5<6Md!_ zSaQ|}PAGCIZG4fJnVTbI;}I~Bk(OGj!GL?Y5BC{NZ&~$OL*UUEXEF1hjMuGBE4{s=tHKKrT$Z-i?~QG8i)pTGY{|a?jjLV@(Ef&KBtBWMl(%b=m8wd4OqR)`hXvo@0uxGdY-qW} zyn~!f>|rp(=3rpZr4g~QDhH677l}cLl0_wEW+_0EW;e}8Z{aqobwqqs+kkS^v`;e- zw_VBJ-m7T!k{Ko`hLf@S&TLiSrqiHT0{fjaE6l}opVI6`G$@}%O`CU%%E*$+g|!$@ z(N)~V^_Ek?HmyLXB`@J;xx^zL76J`3iw`1;*Uv%kYHzOSxc8p)`)T{9=Iuh2=c}^(mlL7Yg~7NM%V_vnWI8-u2sxd{FDA+< zLQS3}sHm!ZKa`wMn9wA?2I-$81PKpz^?Z4=$tBTd01sb+l=4LfG=iDTL1G4gd8&Lf zY8wan)`ShP1y$AikrHs$J{6;&nM@Arz`@V4jZ8)52c6y_P}m+Hzp&fa3xr_}LTXzt zV~<@T>6Pvy(zsI^DGhB@X54C-X3D@{s7%}5aWJ1HKB6imGh5pmXBVrUg^i+|`?{Z5 z3)yEV8M&rCBB`}4t5C>}RkTXDF7kt9cj33NR<~i%G@Ok@-B9IeR>b>Q0*ztosR6h? z+^;p6|8Yr%*!Om)a5z{-S^c|(N<=2k();kSxD^)x@ulmz`$r0wGhG$q)7+qqj>6?76kI^-@KOBec26 zK!-_rIgb-gnu^vha@!W{jn8|`mW6)1`F3!CEFH$d8Bx0zdMMuJQhvf?PdaO?upLlW z+`~gv8ems3j>~Jyk`=QPRncC5Isw`mP^Fx{JEaHRArLj;q9sSQyXIu>;u7IrsVyed zG5qM*rA&T}rCNZt^cE#9SIn~Kc1FMt^sBY#kYGHO#TI-)ql#%_fK7sRZOon5Ce?x)o;`;JAcvpB)#L@Y5G7aETMt+a*Ce`@MJL5 zUZMQpLYFF~WXMz{*dDf0h92=dLKXZz$7yo%ywzM%UkP{{6`}nAryZnrrfFYx{L#6> z)qH{vRRSI=f)D-vf%P9i>wk-(5<~D5n!l#g@c;L8{!?3H62k!Z1-}=0%IL#JmS;GG zg24e4xmO~RM6v{*U)v+%2iza<{*djWd7_8WmkXaL(`reHTHzv!+7BT;ILiN7`@2`c(ncW}U4GTEd z@u4JfF#Mj9U0+WF=-c#&RP^asXo8lW{vy_IZ6oFnAw%CpcpB44JmV+K5&HIe zA`BfLpBC=!b^-$TB_-M9P;|&<5^cW14%7&<>0##>{<`MJ+y1^h{bk?M9T8aE_@S zM#P5+mlTF&2){Famy%GDle%HI^Ak#w>4E@GlJ2{CcXaBsCasd6#syoViX{Aj4a2gc z^Yic3<6sbyjM|JabEu!%;TR~CY}36EEJZmlwW=dXWFiA&EJ4N4HoD2rF(a0u13*V3 zPk4Ekd{$IcqdN}#IKUN zQ1v@GU_f7zZN7HJ$a|@|Ge3AK0J?|Uo*iFwy@AcZ!2~$=zXxuxX`~7`{oK{|ErINQ z$#gr0=rIt9cv-!-=Fj!YesQ`>Q$#ucfdl~-Uo700A=7|0SBF%^`}tGf2xCI-TehDV zY=d7E?O2()H{R$K&%C5MJ*Go|jo8&sbTS`%_%h<6@Z+Q)KRJJL*>eF@@N0Qij6)J4 z`S2oSoZ_4(DtD71A&YvBY2#u$$Wv$;ko+!-9dp}G(FhLh(f)6@Tfj-$1H39Z_J{^9 ze#*zwhS;F1+v0f?yn>-GZUJ#0x%&mE3ECORsoNmH&5QJwI<9~U#>ltq(1>cr(Ch|l&n3JQrRDn|4MojD|6S&Cvq`=)@81zc4F zqk3`jpzb2&*vQkp0TP|kAa@`sZLrgVM}BEY(L#JR^CJ8T*G0-e*UP6l5Y6PkIP#>y zKLz_NO?ENdSA~BbEP*U)$@E+s35;Xn71@T+LhQrxgF92sf<6s~l%O%dWkCs04T3!~ zIQXf?`lcR9VjC(jmNN@l^4l1M%GwCBH5Er1qP?(m>LZT`VYiM?IW24hoKuvrhY?~2 zLSJX@-ne4;ulc8X^bbT3C1S3QVY&V|z{_HBglC*7-?BrB8}C_h7P2RKFp|sO{+zo1oMN#z z1Vc`PNq;Spi&DS~FtZO~vznfy%LSN*#7qW8Zl=>cLagXEssX!rkBwRN?^UOVN1RBR z(Teyts@>9H4Vj<6RhyqJLQu}fCQzna9U2}or%5=HGK+MU^&6aK8jmQV|rL0 zeJD=Uez!;#$oZKj0S|ppCdf)keil$!PyOu?Rw7#oM#Lt{05l~`9`43kjyN81CLG~E z;ZNwTqlqb%npd2Eo%0T0DDjkjkXO>tTQ zSuHd)C&g6MiF@hh2=OnC;?N15p3JIjly4?qc6^VFJ@hcBK7aIFY1@cX{3cHWtwe!J z)|alh?)5!Qbk!QSG&S}Stp139A#v%lo%(W8vSe=lTI}gnt(azB6+)j?A=0`iI5F+K zcz1-S|3eW!1PMA0h>M$cA}M&2lg#Hgl^YcKUVL{?cs!vSJQ_g~YS0}4%t(O9xbmbi zYTFr4OVV5K<#ZA9#+B?q3I%8HLdp&#n29P+?bSoMtz6%O zPHrf4%}Uo_j)C;%y2E71LDxoh2NYiJsJ zH?{7MMA=wk89O%S#VW8;gLBTYw6r%+O7!tl3Y&SdKExqk2gFh^5LDG|tDXcTQjA0l zKzY90@N8HWD|hO!(^rMIBltd0G}6l2 z^qM4Bpn#^XP=Jm=O+2oF-ao&`*D=iOA~u_5xOfOYT4buAFR8&GW^>rIM`X`+VE)xt zq;_r|IEvd0lhGb=CCqn4y0Lb^IjzilNWXAv;#n{&!}uW!{c-dR+|sw#+)G^oP_+xN zdKIicCF^4-ra+z z%7I&+)3=#PeLCjK-(1bxNpwd6!W`yf;Cd5`cfiIg(-KgvU>d#PmIjN1Ot)b>Uv1XM zwbvmGfmW*M9N;S>wFbBLN^z{;jk7>FMDrxIaaL2mEGqKRI}RHNL7SRs)U1CmegvN5Nv6Z?SmYNz~ z<$@90rmXO3EHT0S0)jOxrgmd4Vq=kKZK7en@w|P*Z5hPz5#3gE5wxK>O9k1g>;nKyu|99Q;i)Wy6>shl@G1_f-fC&e?x1u;34Aj$=-T@ty zUL5w}<=7I4s5gIa3Y766VYU&cQP3$a%2i}C-g1&xuG{7PuM_>jcm0kYEcQ^eva7h_ zEO4TFXB<^AO4)}Wb1ja8eYzqhfm?8`J!YTOS&o$)AX@CdPg97uI5@5@>aItzyndyG zeSZ_!ZfEw^IV^2zD%4iAk?nZckaC|jnrY3yJpnok=wS|-D!oVx0Tp0*uRzjx@LEBy zWj!BJDc$RsM8Q_u3brVFqN2ylh~92i$p*>*Z+2xU2~=2W1sO-Yn+fL7jv)lXv2S!0NW*&Iwra0$*a zR;m8$z*On578#H~B zL~=%5aM3NS$9bkNvh9lfQDIrW3MJ;~a=eA$y?4o%jnJNF)xOo8ZyR109u%im(Vhe8 zL{|G_TXxeM2HS|Qn@fs8>SR-VMv6(*9Txlpgv0p}?gMPaEYFh-_iMmRwe#L;tNkYu$nhn zPCqFV!F~zcyA!opNUZCe>_NO#hjs6B1=9*|pG;M0JYpAy3?z0K*S}-yeMex%gB2Mi zJjs}LN8!fHi<^x{L28q#JeQA1Va!MZU3qt692XKo3Y~j@|587P9{(+C;@5phOiHQv zt+qp~%*eIqYXBWyn^| z*%us9MH${iYVtMa!`-1Rm$WW2L8RDNIc?FsRAXvn25d8FKEkcUPN00!X^&f;nmbi- zrpiH3_08-Ul@X&{3~qo+ds*Ik)EA8d>Ro2cUOGNxnh;aTHM~Gwh>=er1-zOj;h*F~ zWc*kr-;M9*#W78HISuCAGZO=@A>&Kk`PzXLZbBBgwr#E4rE`7|Gs=A9VdBQ_! zxe+WLi7j%-r${oKbkzE`+0&**FmGx7gl6&`9hzqamzp?#r9pCX3D+Eu>d?6ZPMnqsTJ(;!0+t&x)q^b82(se0-gXGBi)LfYa`C zT@iKaD5$ju3k@L|o$ROW?AvOdTh_*Gz)*mhn?n6io}hi_tvZ|bdw{xydE_wCYpsQ~ zO8)nRh(YUg<8Cy7req>r7Nck%vXygJ$*AshVIt5XjiQBulTiUD1Dzq&k^$RP-6MvD znrO^(E;X#imJ=5KtU%0eiGt#E5%&+Ql+n9@`eodgJRf3dNygj}X%r1^Ti{PW2aUOb zOCnQE{1aZR6zOTV4s9KaGH4Y;)5#zkx;z!kdVXtFUsPh`)%9-l(8Iy>R9cWn5O&6@ zouF9lFfF|L6zW!8UlFiff~pLEEdKmiqQwz4#Y(Tx6jikUinC#Lo>WZUve zRZwrD!Yb7h6}Zf=8x98z{+b1&7phJTjJJ3-72@wz-vn)XyJyk^8dnLuL)Z4ighPoR z(+pYjYhvf%G7%`VD}@RvBji$1CF*l!^&CfYT6uq?%wVTh#kVux;0GBWLzU1-{DvH! z^X_A>Q({k||Fud7h4w7&ifxLeBaPRi-WqiH4I{xL9rJwC$T%Xh_ed)>iJ?^$mRSFJ zj_mm^_2p$f2YXNHm{Zp#ke4;%VT~a8JrWH9GOx9E5EShb<9y7<{4;3=?$m|8WKF_h zgeX9*GGGzN(+~gX#>XX~J9Gr_?WkI4`m@K8kSU(!XO=&#d5NohpoV}ko!U{N(OGcm z&SF1>DTYCcpe==|$|30VZQTC#fU_un9u>ibYPHtEn(p+8GUhTX&6kGoAo5NLmgDbPHDf0wDN4 zV!Bs8s0>^0VM#&a%)L7NBAt}8h?3N719OZb z9e-}jNj*H?aqs)Q3p=q9cvx()_g90(p_tvbkJP#XH+--IczIjtA#YLybbxP|IRt(B zWXz3i#h_>Y!jvU-v57%lnd}L4Z&VCd>=NGQEeiL)RnzTVL@Fe|)8A>;UfO+k8YU0m ziJXGQq#?%xb2J=`0>4XeyB&CA+s+{>S$HhzlhxIYf6Uh8zZIznpqcr18k8I7W^MZLK~s5<@l2jzMC2^%@0!k3fhCFD<2O!~FSCg=HuWv-4!*`ZS#+XR^ zfhkns5cGv67ORpLNpQ(&scQ@*@4BEzy*61|8ZI)OHE7dW&_-`ohpP*b0aGlcic+>( zYuCz=7V3gV*d!6Vkslja^>v^>e@Ee8c$*|$5D0dgx49nuH{44jnnhS#7t~);)t=9liA#hWo@LkWS7xUUYD`uTsry!}lqLQcd;MGo?86SX^Tz&WYO12pnh)w#6cDd}wx>g0Q z;=^g*gZxTFr_?GB$O*WAwBI`lj-~Q_uSaXJmuEq1S~&x@L*qj+2Vo#JyaQZebW*0! zu~D~9*Ae2_M}j>(SkXJ})F7MNs7qs%`_`^S1N=!Ml=%w75NqS9qs^e;01fx0r0p?b zVk^VeS1O3yx*F$?EK?3TrKdE(O716>gMH{MW#ujo5;a`))=biNg%UAJgWe!UHY4ylH~YEoLykKjRif9UAwi#?Yp3VhrF%W+`;RE*%&XCH_miKBUzfus z$aYNZH7@rS1*)Coa?v*h{}*fD7+#5*r5oF**r?bQ+qPA)ZQDszY}-!7wr$(Cb8~v8 zPtQ5$PEYrp`(y8)Ywzb->sx%+dMjI8Xwa8I(^S*MLhK=G#O+p!9bE`DDS(=>6kr9-u-3ckX+#5Exp+o(u!!A#l97FS zRu{Yd^7rm0yQAv0Iiym%O3FMnQ{gI;>RBg?k~;f@kbLtw1(ZN<@v}F%VDqonmHX%% z-YH!OnZ0TJKnJ0SymK*93fydgR7Cr=@mrW@{!f&UOkwykR}u%u$HT=>W*qZ#2};SS z4Vose*%hmBO7#aP!jle-OImL-FCoO0`7sb?TZP10w8@TxEG9ReZDGS0410e#a8v#56e~sv3lD`udxEU@R zp3~2k3K;Bgs6=nD|9Y4$G@LIxBjwseSObXj&SsZOm6;Ej0lDKIL=DxeTg?H$Df!fEgvI_mL zhr|tj!uJX6v7>YDirtZw>`E+~CSIig4bK8~D^hb;Md@)^rA^GrnR|7h9&Q ztYMw0G{0zholG)nHF4AWmFsJFM=;Xxi5ey40qwyNb%-&zaVJuVlZL!!>y~8&mPwO} z+)g~M$S-?RYga{qajD1pRwXy1AJTWJHH`)aqvS`TvwW$AgSuNI1Vy%DId_$P@U=sB zwH~;&kQ7|`Q-v4;PHm&$@hr@E{b$8gKUGZErXS2+uZ7cJ70-@wD@*oBgsM*z)G*cE z?@}d3P7SYqpOydBci{Y!BHq!;)Zwqr;jc0X|0fy$?68Q8hR7BBr}asE0$KhU^zv_i z=5K-+>Dkz*?R7u@oT=O24v$kC+UtKhn7@(cx%@sN{UQ5z)T1;Dn;$8^WVz1|U*Et; z>Tvz`&ttZSME!rW|o?dB)=IM>4HJ*GJ&E; zGBx$6NPK;l3vxc=S<UmM!+!#%B9zi1r#Rc2;c>$v?^yk8GV~7tawrL$63?uB4kItDvx@Ds}Vr zn7`GMgdL0l7}5^^iQ3~}WXQ-jh_za(Yh)|`Bt6w*#u#bwK%8kO>hrUhLN5fBUg_f0 z;x~v!lYEJjzkg`aR`>PxqW_4TOVD`XDW#u~_xL^1{71`2G2XWV?^8kapYGvbR1gCT z8?~XOje{$-rLLX1fwi+0wY{~Yo&Ik}qyM3xJ~=L#-cM}x3uT#PF-SQG@HU7A3tbg{ zbwlDaKA~gSPA5*`yYnBz7=~iK=3Z?69GMc_e0~?k*8AY)7yaQQ@+$>39qPlB@roB~2qO;E=GT_Vh^u+Jnwo3i+>7eK4sioQ*Tp#J@;$F+gsG>C;#N2w(J*<@jI z`Lq|;p%E=`KTI6@bi@x_3B2CEm>0$mBj@6|dgnb>hwkK1@qZoj-?{R?v^m)UBEQQN zn|}Gz2FZ3@m>le<2JSwwUIPEpdt>_cjfL94&`8(O!h!l9a26+B3rEA>4!Hh95ogM3 z<}17iUJsS%t7vSC%3_#MIgnDTlmw)tL9-;gy3{}Rr1G_@TdomvKi21dCE&1`Ld4aB zyyBm57&$R9#N`k;=lTV)*g_dpliO-E!-4GCi zh6d@D4YGDZ$>HC~qC?fZ7#3Z{(Bb<96v=8{x$@aI@viJ)8V|>EN#eBZAXygbvtMj^&1lhn|R+K{6Lu~$hSAEHa@z}^jG*g;htO(lmC5jg~- zXO%Wa!Nsw|W??~>Bpi{));C!mKc$zL;-Ru>WwR{p?Mypio#Mhvg>51&^4P9nw zvk~~N5>RAJc(uufHtXyYmO`e=eosJEb4P(IHPB$vo!jQDw`0a|3?Im==9(F=&}|qc zva&?CkSVJ*k8{R|a5@y}_*yx~O(1E;&Wgkt)9gM1<=mo0R2LB=LMF;BP|DQo>M``p zW;>sXw0{!XEKuBxT%TZ^eyE690|Jr^@1&cbd5(?|+-Q|-V3`Wr9p?_Wx~hC&mWBA$ zT|}LwK?qYUH~K;CnY)hLqV-Yvc~Ol7sVY)~4H0cwRBh?ZDp|6$^pS<3M?r9&h|ecu z&JB(uU8__*{s+;5HFnXcJ|>mB7re?>{}G6#p-mXL_s;V;p@Z_TwO*;*O)@7d*F0Kf zcQ02*ZO!@wmBx{S{>wxsk;3dfdcecnLHa0$Q>xe?m6XpH>Qmn~`mug_t*w2$p3isu zzGd>)Fh}-3J-gr7POPmAtsMT_lsbpi5kL6TmmYpX(;5B^aYm*VpA@lwc(il!5;6gF z2<wMO{PCc8hcWZ zndU9<8+x2Gh5{U_=(Uk=iNc=sTe>jXW5OnBeiW#i)#)R%e4*q<)tc+ANKco@-T$F) z@55wf7hlrQKU4j+STn;A2&ds1G5pozLiN{RWY$$mEK@UC3l%Vg2oC7*D@I@Ww{m~z zLw=mjUxO+|QL)wM7F0lF3ed$1lqEwgIRO=syxu6^Lr38CS2eH}Nrl1n&GYt%4`F~j zs(r=@T}#1_1gv?g;uS$!enH^ku##hm*84h4s^3t6h6!{5D1k0qqdF2sFfn~yi>Su= ziqr#9!=)8GcABc?9Z_Q~9U%1m)o93o>z;8bxDcnpy54Gq70tU=k7s9)68F4Ri0z^= z(fn^yq*NAz?YhIK(3?R`KYQvwM!V5zm>MkWiTzLPwZ=r-0r{LL6ToT9T{+7)A7jrQ&H8!#M z{5X6v<{11jN{+=zMW)gr1YNv_Ma$qD^0nni(U{I2qTb z7EIU6=Zo`wj_lJT2bgn8epO#$xEgI4IDn2eeo!IkgV26^o_yTa$6+E#l+R?5JyKRX zG){kZEuTE$4$XFbH)R79usv=QN0@?vB zXE=O0ry*2ewH&>-@IHIj+dMIDz`V@ zJBSs?W;b!#wb0tX(An6i7L(Jn?d~mSaOtwS;7h|zJk&*y245K1feTj85N2k;u)voI zDQ-EvlloMlYC)w%hOqMY%iKK%j{~I1>To+t?)N8RBC5CU7Jsefj{_~HF>Guu8MrFha+$=@qVpbqb{;P3d-g}>0{6d&H)!H zz|yVX6}P*Wd+dmeIqkJ-(Q-TX>$DvdxxV5WuAk}eLfh@;vvhzizPd0a)Za%`U!w%? zNfNqyQ3RYSx%6Rf)6WuZW> z%Z(f~$3z5A$_hL!LKQ*49N1Wffv2`}$Os9! ze+7#f=kzJ_U6O(xuJ-tJiwEoEdwpv4yROT^)Vd+(hlOjTuWl9{%E{~G*2yeEhJqq$ z>BykD#gJKX3DuqP(0)VG*DG`rlEg6yHUH!FGrRrU!r%;+rQ%??Cj;&LDZlBNR`1lJ zTkox%)Z4Q+N{>{@6G(AE?Th79rO0;gKOt5f0$$!j5+}Oy5UR~ zjYKjcItld6BZ~EAY$p}G??zr!>KtD;)GJZc<+J(rqMCPOYgSY`-S3+7j91>D4 z-?e~KDV|h~6s{Zzh36+*9aKa7s0S;ui#BhzQm^dnvF9ed4LFn`6wRS=5ksPKAt?JK zRyCJ40Q=}G^zr170d$zyJ17w5i&ZXadbE}j-Ix%fWF~2VK~`wM1uB`8)pHq$urx%E zh(mX*BsHXx7@R%9QwExY@`!?{ERNw1b^=I!S+iNGVTK(l`th6r>}0xW1%G}cS)#dS zO<_4mbyG=l#bARDa11*{u2$xOsd&Eh0%R;R?IXdS`*Ri{&RVGX^3cY9ZRtLrV?e*Kp8snV@cqCRanXIf~ z%TV`eg4apL0SS@0DiQIc$sG1?p$^xX?7u|u)5pNrt!_``zn5j}uSm!VzIP^5t-8+u zJJCk4)IE{cY3i0#qJ^uuKVFj`(;2T>do{{I{a|EV7(hDAU%E?Ke`VrKiRqixpe?u2 z7{Y8LUVwIAylowMDoc3SL%jJgYg{GJ*QHr(=(uL^#|AF71m(^YO{p-T*MvOmJ-9>r zF*06aT))zKHaYKJNE3XN_!I1i`ohpUoln=m&|p+`m_sYWW${|N{OML-OW5Oq+e)u zCzcWfa_7zLJCcM4ZmAKsexj{(*1dH$$Z_1*e=AU&2~;p$!#rcz)KfW`T4eUmN_*X4 zuQ#qDa1!SoJ6OU`)0TD^!NWGNvZJwW*-sOTzVa*~?+>M{6gjGq>uC!YyfVfgCmpvp0NFl zuo^CNi$mE^zAgtW_6kT=@O3c3z@{*km0@x&OZo0Tl{vHM@#FWN(|>dk6j0STN&I35yi3+FAx~w}aMkdkT>vnmtz=OsvWu=dkg7B< zt^z(EHD$^PmQmmk$z<8_JyqZxD(QzHTLb<}*12bZx~4stqRXzrAY3o#S@ei97BFBC zk~&|XWCe0CxvVa+wx7^@vv{Ag-hcs{I7!i;G=2L~Si>R_jVg(jE8_l*ZNDBP^dDRA4c)s65{UNbjl)_d zlrK4E_FTXcGj@jf)k}oP5*e@OjPyNd5bB!vo=Hx_urV z5mlIJXFW%)y;r;Ii++8O9dMA;=*8Y-((YnSjch!pCH@mJGRFAey8cz*09lwnc3>?S zdEj?Wa)z#vT+Uz%(O?VL*ZHMU868Y%|9gIq$BC!84@SR>{Tpj^>F*Zs_^bkHfMRI4 z#)##DARBkZMq|%>xBI&#j9%|EBfRyO_O5HND{J^T^)vgsb$8~=@a+#36Ej_Ei4EU7 zj%G`*_G~`3`%Y?YPpDwD>%CkTT=@o;Vs4}xrj&bb@FB2+IhRj}Y~8Cer>Y{EEc%=W zi||4>`K&{x86hIYC#uTz!nLT+sw$1S;4q&6M8*cT2|4Y0h*rAc#2`woRE2U=Fut*r zWy_63G-J(A6&VZnz+#y&G2|WvNin5pR1Ff*uZA@@RNCxc_t!%HKpv+kk}n@<-9d5Q zhC`GmmCS(g!VI@PxhhwLYe z6DJV|Zo{FcCDomz2!-|k020{rLp54EEy^*0)N78-gc z+TX5S)Bf2DSX)_`S{YJ*_O46~bU)eWsP%LWjQ^NwoW+@&r}3f$b-Yl*@fY#u)VZ((`QW2>Ao? zQOtq#V{X4%&*iqeb`Ysyvd(4)D-*@~<3JP(`>z-#5Q0-K08`+NxY;5YbjKhVp#9>_ z6iuH=j6reMa%qwlxnn3hv^o<0peBYrPWyu8>-9(=jC-Hf(_}|HC zKY@w=!D>qFplkex;Pc}@NsJCuBJ9NTtOz&1Oldc_Ael^wYp@c)RWOQ4;&3d&Z980CFmu zBq6JN8a?@JF6)ebn?t2A*5~54!XBaRh2H}}GgRZKPh@Smp!_6<~Ukjo0S$l zan}w@z^WeT^yWcBwthu5__cj@fzRm<&<%Ra8J`3Ax;IHiYW=O@a_~_;w!Eie zWv&%s>3rUT9CeNc^BXcTdr?HiehFFZz}rK>b%=Tk&$(aq^qkcc{WY7fDcYBFYDxf4 zY$bCop!YUea#?j*`H*)r-?AUXf?JyLy;qx_#C1Ht-`4L+AXQ>*ayUM3!j#&wh&0Sm zAUENZLyjXCmco&ebgo>Z%&ELv_TEv~3xuwk*18Z?!rn!-pv7>0q8ch$4$X24j1EC$ zBELAP$kx!trWIe2#E=Ys(6v52P+jEeqW%CS;g+Hz+aPA_-3A2Ii{91r+R zf4==YPVes~_y_ZgkKy~R9~5};gi4edQD;6&dAvVqGIw96w4yQRuOGD8ud{&rx0Vnv z0dY%kIfbpygVFlphED1xQJ2bWP*zwwAmV^?b&YXhu%h|FD`3#l!2LvVSNs`B|RDWC+SdmT&}DlqFyJ3+OdK16AB7%z`pLh#-A0GIPxNo?G*q{fmw@LKnz zbtznu&B9sHIP7)jLYm`==EZr%^EgF#VCF3uv=9MT%xD4S>guZHF*7gvHYS&Bd0%L? z&X?udYq1waoyyy8P?R?;oY2ay|7}!rog2Q8c*Q{)`D37e332Z17P7{zsm^xv>)Ypr z_7&Jlun|*tf%@$O+CQp4BFC@e`O^c5d{))}jBf8QG4Jo{|I@HWQR=s0&1WwLMgk6L zQ9gEE5*xzQoy-#0(VAfM2UC56+66^RZeDTD$GVp1imfQHWj2ETWQEas>XZj(^-vwb zV;CoaDrOs?(QEP#K}+(^Eb%Gcr6jqx){V{1^Y7ki&Q8@!ySwx2oOlbki_mCmy*w38fb#a`vs@%TOui6JpLt>)Am?UtLlPjO4 z5JZ+CMvHxF1CKL#x~Y&R8IuA8)F5m5Koy_*3Cb{n(N`M_#tQuC)n!@_f5!T$p>GAq z>GTLkWvbXHxJuG+VVEj3;vq8iejYoei~|5=)!p9LW41yVBf*7lOiR04*eCPchcYj;o)_=O~lM=KtAxRmOCgk^%hk- z8c#1*&KYGC@|q!a20H`VW9aNWA6p#vc4(L2-HPs)v_MVN?xdr8o61fH4A@-P8*0^U z`f0oULx7$LF_Whk4?2nUF^Ep>^Uh{GA(B5|c%}W$y};=)xkt41&S552McJZ@m8j5* za8cw?lrRwde-W!*c7vRa(P1&6$v--t*$Df*2%&^}|*FVQ7lwbe7!2XX(sGYU*A3W=s+K0>z zGs;JscVOaKFbbbLM*yi1@Y&BbX6ax!t-gK-_H@bT>E{I2*UUvzZ{tFLr%752U;+rbr|b;^u>=NRZU8vYFx3?N$l`~L_|Zv@?!JnI zHk_;`IYO}*Xb%hlp=dxHAbSd4>w?fYjX=gx8z7*?U@En3m4mD|Y(0gfO*Cf^TiaE4%~ z`W_x~MGo=m=Ee}G9g?IjBBVW@GdKYiE~9j$<0nF-LtEbO>=@tVi9BV7TS{73F~!7F z0Tn(8vrKo=V&-HH_r({jj-Y0&ODO!UZ*3II()yd`c4VM>VbX=lN+hv!3?&`vZef%r zP%Uign1lc<6=pOdJof%R>1FH6RAo$&y|5Oods~LYlr!5rZ||jGq=;-snl5aYEj!HQ zfDEaq$lH*&;Nv=dK|(w1@Z<>uoNE(hUx=|^p16aT*EJ=QJ{7{00y5$z1kq7HMp0QFDO$v2bc?zHS>=Ht ztA=cBk!}!_3{{Mv4TeGJ<-3JD|>;4MK-)Htk_v1<^kzHw%LDd463ZWgUx}uC^dj@CH@* zNCd-ALN7cp%(JjX+e6rsMsApC-CU2?ZfBiS$i61ssH#DHEp4RaU9u={ARZIGx7n~L z`UKK6a9w%dA%BG3xT@*6(`3@pC%P3QFC6!{i$@M5{oM8N0Hkq4)M8x#N3Hsmc4f|R zB2zGa12VjNkiW7g0@yd2CMK4ZdH;;Zv-B15p0C%9xPf+6hmy;J29(+78lH7I*S zOGINV|GOIHwKiFbe64}#jdDe)?cR?4+BMfC@$OJwc`H2Z zFf}p_m{~y%3m4s*{2oiLc-Xoz@AvfdtT&NWw0c~aFH82Wm5p*1OOkF4v4+qi^vY#uWx_KNlQMk zrmR)5SiF?|@_)=JakTU%eAcv0y9vaM-Hu3Ruy*lx zK}(}a7Sw^_uDmbANo5<3ChNpzFh=RtJs)R4UxWofNrn75wMp0x_L!BJzZG1e>ASP(MGx4*5LAA~r^-^nZI&>&{vxU` z%V!(GsnpO@v_~ri>0brP+`f^0YeRanY(gRs|73h|x_^(oO6bvWq%U1quUeq78S!isg+FPX0;k6~=E?V~1!)D^4F(hUh_E9g3g;^tLw`~X?Hfx#hT;_C+^u+|XC z{=3%`2pIU7In#Z?MiTAXFv{c|cuaV4gPj$^@Wl?cG$NHIuML8`(HDy}g}C(+KmT zzqTio4v48~4hRk@juQS#MraUdZ|V{3k2EluF($z@ipv9B5)mtryv9vU8d+=Zi*H6u|5vRFp1) znAmiTNaJ+FCY0e$oass4GC?>&%Y|NDB|}*Dd^OT9RmCTRnJR4O0Psaj$R1@TF*8^R z7>eKMP@w!}RnbMP9Ox>e+NrX=H1$Gv1d9avj1FT;zf|k+juX(hm{@e(&BFmORyYn3 zK?l(psu_I8{{lrO`GrZW%%4UOopHQA58lHE-)8{DwP}2^lV6UUx_l#To>~IH@~6*{ zTdI|}rJ^s^iy>3m?ej^J5hja&3QSZEDu;QU-8f+}FF)7d0hPCRF7^_+RdHp3=X+ zA6Oe7oNcB_pWu6Vqjhclc+_MvR%gtp6V=9^CoGDWUdwde*#TjEN}`KApJ*>&!Ld8N z`5i;?SIEu(h%D8&wln-!Agbj5bKU(ZNZ;DZ$kg~>k;nM&$a8SDF{IYl{p@T04o>}} z-Mer)c7Ol$#z&uRQI7vN$^St`Yi9rZFSIGGn0?lXo(n24ZZT5WJN(*Eke~yT{1OC~ znJ2$KsZndEOImVg`yV$rnpJBoMiM7cEQrUXjK?v?;9fl8pDzi1iRMjS_e?6-no$9k z%VR@}AgCex<6(yPOcF<@z}qk28)RO%c1%uLT67;|!EDLH4Z#YPqmx- z2%@Qf>*?G`uzJPy$?0^4jx~jJHMKENVo-_Zhg7J+kme)yz=Aw`d>1-|!HM!c8b$v> zm|Q;$NT*7pz#sH741te0GeP0HzkSg)0sX=fAAWj_>^Wu<6Ot@EbiQr)>mxF!Z!xDg z0EOdzhA1EMOnbh61<-#4MS!1;8TPUoDY0qgxBbVKjdJ_AM$j14Eb#mV*DcBbiXMi8f*7y zbMVM`kJJ|$Zj>8Q&Llf&5OV7hP9>BQjKijBde4)`cvn0vD7p7wm^^OYS+KRKo}zh$ zlfD-lXm|h+F{rn?^A}&+?Kv2%n&ctHImT&_5GUZxd1ODyfVVK!_5roImDMMu__Bu; zfz5^*!x9qT5f-hNRGIp_pCl^{DaY{V@h9;Yn+1vAm`ndkFZArb8G($xr;;LWh--PW zGwZ4c%eVKgU^zfL+$we)LtJJjd6?s5f$1ZFs_R5=BB3`f-53=f5}fHKfF3))FxWH+ z;P`S4FC6LZ{in5XX7ukUIiJQ0!vX;C&v=>t({cay)Ew2ANw2M!J zFTzDGfn1L&K0p%dYgUViY@F2M;heQ$CVCrq9!3_5I}OB=VN}SV5hZVlkcERIz-9)9p)YVMfZg<0c2K@#7K{=IKGzwTopixXU2{(urZx$@ZpbNhn2=U9WT-ZyTu2v}#z}P-;gN8F}5UC|VNIf=8 zTb-lK?bD{9gWH(v-el}dnH9lZv1!s5YWGY!e_Wp?sC|467%Z$<9EX3+;@rDD zg~DO!Vqbe0aQORE#~ZRU)(K|5Cgl;inv)2j0yU%tc41tvantG6DqQFfeAwAyzUQ}g z{Jd(5fNiBm+G#RH^|%^wg}K8o!%0jTYgwR$KcH_%>XdXS5?~Ne2Ye_JjEwm8%*cj{ za>%y?2n`T<;24O!h6JfA>UR&RF}W5O4|NKJW%cn0_)w+=N_(pR4Am|smb+X=Y+)_@9p%Q>NX#0LZ$467KLRq zdn?*+1-&Qxq4*l!2N(4bYla*BQQ+OdDea9blB<1zXya{Ns0gIT7j4MJe7(7tcSmkw z)kQmcX!dh7^>S|Wjy&&CWv%N3Xz=?)8ztIxcj;W%=GK?va+k*n)YXa+XrUx(hhai9 z)2<*xGHD&DVS}x?m9-B#=~i>g<YBy#561;NX$E=nGAFx4&0;rS3pyRM#qt5aw^$2?3&p_sE$ z7YIA_WKk1V2ehD|McTK^6o+R*d~fnXLdN%16LcruFt&<{3U(D*s*$&~wGO9;`)1y0 zP)vhQtXuBbH8>$C?XyzZEg;ofxyCQrbK?Q8Nwk?hr4j)1(axL*n0#>@O-mub$n)Si z4T-&m;0t&ecou2V1%gAgoB)DR(1KX{a6CY4>D6y1`^^#Zl#e+?x2pSMk`{BaD6sR0 ztmo8qu90)qR4nVJ8R&2>bXujr_i0_nB!CS>er<1P@yhGg;%Spt$QJe#IIcf(NUk`h zH*Mi>OSr3-IzK^;9N8@SV6*gL!m6apZrb!A7O+5Sn~&{G0iT+3Nc3Laa#c3r=F+ z!wlpj?C$(XD{>uPnpi9K$e<<#66)c%_JL?=!lKoFEIFCU+SNKddylz;m@nMZwve zgn2FN@-sgO4V!~{ugh43l7n!2032V{Jp|53v#f)1$$hZ$!-(r5o=Pl7VE;c;4sBHs5jdb_)v+}^gy~cyK7nvnj7UZPr8U7i7nQguTYG#W!>~E zfdm>pr@meq*8YN}%4_3ac}W#FzFV3#O&hNvw6#M}f;q*&Fd7gAfG(9dqve}c7?`AV zok-MOQi(;G&EP#~;GAasRqFl(^>8S^ybbrQ_vO71Dhcr3X=@`k?8$LF_!XBf()MJb zM7H*zIcO%#D{DGNhmA@YAuiM2RQaJ>rZ2VY2a5m?y7-b0Y7?F$-sPs}$9add)Tb5w7f>)ew2g4-pF!JA$#FUZuU48*0fW9A?z^Pbyz>YN z+&hKg&+yo#xwP{6aLiXrHoJWbXZN)m))kI<*7KYq9<%OYvff0H39QANQrB-7#6AK@LmMIRJOAF|DIpO}imoka;!C2-}2~ErVzQ z{II_Jreaf*i0K5#{zsK2YTVqpSvg5HrosrK5|)hplw$96UCCs#?d{!sbze?qBqx0o_cCArm zSUA~`zR{S?X~U_dZr}iKUvUHvY7M);H2JKthPD1lhYCp--qy;_!^Orc7NFklSJGyk zP-9e0MdE?jP#Y8vmn%ZNOP`v_1`)%Qv^Ruo0ua!Z67ietg zKyCSnoVTF1(zW~z7xH^jS+4N6HRHAi%Cao+H6KuB+hPzsQS2ZPNl6dhgl3W=DgGEM z(GV{V?U91BDq#IE+VPQ_ky_;S3z5lSjT1VMz@JFCLM1i*pe{@p2~ivhfLJh(q^+@< zn8B+Fj@fkw7wd=iv>R1O2Pzxz~2#l zn3lm!AZ=hV6VpAW!yyz2bl=Bj4Z$$PmxF_sZjdE^OatOTq<5W+fXE^jH~==;URuaS z79y)gbn2cv_s-k#2dS6cs;_n3?;$zWoaNacG?~yGTwO}ntSe)@){y}lDTY9D^Tbn` zO3_R^&12cflVjT$$9H%k(>BA2mNQP{5N&1x4s->m^D;1*Jv3Q$eo(PJy?TrTtla9-vTl6Q zDH7#zdZ-69Sa<@=t|5&^XaHiNY>j08{7yMEW&cSZHEHuk1h&-**&cbX9dApWlfknx zz$o;y5Hy=WLRJh>VocC@Lazz>?4tR!*)8e8G@0C~kV-sjsO+2;JEp8w$MYsZQptUc%Jsq6Vc{DXiq+)VP9e-G>|^?QxLyE^0PFbaZp>+bqI^N+YmQY_TgmhK zZqdK+vsvIFpam`<%!gHgizPMbo9M5YvDe7ca+Dalr=sVx0>GWbRwv^tPc%Z=m987@WUZ=6rI$iT2^}T3{HUp>j{b$OzuaF;qej^XC@^bp0-tPhL zUxJE!*3s6wjt(Xa)W3aO+nKuk!S|i1X_ynSpnUFiBKQR*$NXfuFMtPYa1kK))ne{# zITL^|%3-@NN?s99$vcnvq{$eY)1P3qP2cqMrw?;*IN$i{S}@Q<{3T2?$be=$N)|V$ z*zN)-tIdPlNnsD3^br;M9e&r2>dWLrf|p(RFT07z-gsgq&L~G)Mm~2gcw*#NII0x# ztis-!p+~gqwgn<$0HN-rHJN1iY>9qWiA!tT-bf;Tt$yC&@I_!Zvwi5Dif!9lB@nV5 z%J@OKj!NDVG5zH2g2L{Ib$3J&`*yOi!(zlI>AdO+5olQ=y|tccVR*^`E1UfU&h#9E zG#~6}EHhzabSY*`**0ynbhls$Pnc!CFT|do?r3r z&aj6&(VIf2)=wANy7?~+v6os2B%c>JR@yhBdagkgNb}C|&ViLB`j`WEnu*I3;L9r@ zz~h^N%W>0=c`!Ok-If(rPd%Lgec(uO99js?iPyF0mH8H+JvD$TS;g?~Mq87Ikceq+ z1!eJy=4?Zm9TL0l4u6kTC+awMuu0kMy1yvE%yse*&g{zl5Fi}O62T*k5yz!gUXo$V-5M@Kl!sJ#fO+q|$|JvTu^|$|pMEf^EER}gKMngPP#1#a zDq7OYw0V@z!+XgFp8a5|#JKYzz%8NipcRK$VL=6KoutVN0>r4z!X}l_xO7=8nUF~| zvbuTY)gqR(TmY1)i^Lo9$WpDQM#0>tUzubKWapW`Q9jQy$i3jwlwDqKr|n#y=q?#2 zn*9KCdXC&oDQ2JCeH39z=tBIxl1I7=b+lu8GM0n4Wy?H!qbqkg=f`{XFMYgDv!RQd zZ(~vFZ;O=~{V>s7H1uG@l+YQ31N)!8-FP_(Z;59%(@~g`}qJbUGT%I|b zJSnKRlTq-I6tFJ#3PrmT9`O5(liUu>;XTLgoD)(8f@d(%kl;;}@iEM9i}*{?d!!s4 zaTz06C#6?*j$gTvuDcMg!By-E!Xutp88M}nMsms#Zc?XSqBkO6y>=hCHrioX+K28| zRN1HBwx-^$-aU5@h<{LZ!+zf7pYspRt-~4Ol|}8$;d0ZhW`wMdlX}O{VdK>T}U) z!v1Z;*&|x;xKBCOf_fQL`ZUCOfMeZ0axga5P&%0x>lW$2BwSB8aZn;*gnu(N&ILRa z_d7{41~fSl@*_)5shNYl4+2fEU(K%db(jYk1e*TKvMoB&xQvP5I;ozm@X|F9W9#nE zDC}nZh_9NG_R*8080o_@6YPfa?1h1c*u!^$`udpdD9?cL zNcy{xlT(pZ#|T-J7GFE#1rF1nH9Cmm>#u|L-d_NrZmkk8PqI8o^#itp*z*0*^D6BUzOHHUxv4Ez@x{8zueTilr5}n1N`-ltq zwTXsT^L3*&n8d}pE|E`ii5w2C{lh9(4?8uge+;3&f3N!5nyStB3E_!S<&cMnP_xzO zD4zhEON!7VlGY?zSX7U*jR-ZJvP6(L+%ClcXp0Su5CtM+*2PD=@aKv}l2 zZKqS+Q-~X2rJcy!7<+sAuL)zc)W{&b{~Cy|&g~yK+?T)|7#tH$YY0 ziJ(A%z7Hs$h|JWzceS@)fI0Cc9lFk{WcW|s9j{g#Ki==Bo=X1AmwY|({HNUy7ze#(LhI-E3qk6^{16bIPXg7~~xH#|ASa~@t2 z&-bp69SxPfmywDqq$Tf@QrcL>%=@_V+S%?}N&bvwbj9F1`4{D&JlNy5=xB)MBs8U$qOi5!3bm&@d}7DA_mD3?(YTt6u(Z)T5j9PQm)IK8U^@l zH~X=3W%*9N_ql8xA7>=`Hle=4{%#^giNLcf@J3Dp&is@|Xv&5JQ+Z%PgbX*K;>rO= z$_ACiqV}(c0I?A#We;c;&*#VF4xBBB$l<}^rlBxAD{-C?PN2pMqNMh`$`8XOo-I7p za~^JEJ%h+QcrDoWKfU0rK<|Rg;qka+SJ1?M%G$X{oW;Ycqdq5hXO|J; zw-d}#VeO0G;$Y}ui7`M@NQT= z$ahR*nJ2O6tU|}ZyzLJRo?`(=>I=4{k!wv&6F0KHi#cBbO9Pof_;$+a4HugYAHi`S za*DJHDz}R=EfCQSc@ts@45Rl(uk~|kBuk?5{G>cgl~agSu*$)}tjAMh=Ic$iq2?u> zmF;;fxb%A1b%=}~0)Wdge>!3(V1B_gRE*~yBpcGS=EK8eN~HxjjV0;hLmcE?85fv(1wazIkP z@13QL%TlohZVJU+g=-W8K5nyrU%fY3T*`0w9nKrJlTDp534dnn$|hT7Gr9^KUlS8w zWnhYLs1}k}{8LU?O|>EnsFlUpWwpKG%8SkB;pNIj>axO8U9fwb^VUE19AqqA$a_oN zEw}4lg_Esks)~7iM`JRCCRE{JVgGpzu*_TP9<;adsCALZUuF7Q?)XvtWddMn`msx6 z{q&lLSIYx0j|Zo4^_si)Pw_jx{#@|kWtNC}b)#tu0ll#huc0{(q5>55FeVP%4NlV% zMQ;UrvqyTXw0+p)S=CGRj#!vbFT={h44X~stR_?dVkdgk;Z3T80{%NrzCoTS;9V8W z%aee^f$L<7Z&qY@=kqUnHHMV6Y6VB)65!As%=f2JE51`>=zP|@n1_{^icRCHZmP+kKDVa#M00Q44NR^&NuW3|sp_B06A zepE8dZZDO_bMLBm(H76N1`&v*GZ~szgy)^ACuzSC`l$mXdvo$mQ3J2RSZAq%C@gqw z`E_5v{x|C~{|93{|IvZ|waxB8W9;f^Z1Wf5#((1f|2j43!0X%J_gxXX`Ob;t|8f8S zpIr2p@phX3#Dh;NN?Y#z(*|@H4)IuyCqC#6=e!I3`We9(Y+<}L3!G801bEwPA6<6m zcX@^63-eyJN3%oo%?z?mno1%zetlzq$c0#rcF>}VemC`V2J3gNOY$5lONFc#Y%V0M zYU@z^OlsSL--jW>^8PyPogz~lHS4Re8Gz_^9^l0gdLw2(D(Ab66=A}NA>p{yUErj` z0hUsOox3EH?tWni%uAqEODhN0Qp$1APH8%|o9#{zut#|WE*?lpsnnzl!f95O(~q6@ z&jR>0lU*l~t@l~ugN?-EX-K1KL*lalN;v9xwBaLb1GM5kiZ`Y{Y)LyjRVGH*jl?2L zFF)lfoR3?WKihvqhwpwLWQ8vEgrpwDFK@7ayTuA4`gSQj6j9($_(HZbbPb_GsKPjm%=(^-gbn{_ z`jRbT-FCe2>1hq!e9(xH9o~5CZnU^tk^4TJ`k@+Dg&Id`d70MVb}{>yBOqn@AZ8_` zU5_D4}FhB?`%c_hVes)}8Dz}B4By^xk6`W;1Q=jA`BRxzUjXw`pL zo2cLc0C@iKe~z8K@qe09FDA>|ezV+$x9%upyn(_5z&!*`3#85(oYPYixvgXqAi>q3 zolQ6mD|XwjGGk*w6g0q)g~<`NUNYOaw$MEc5UH$p0E;weE`imGeSE_P32QxZ2=1U# z)QDuywajn8x9o}fWQ<2*21T_{5d{is(M3n4#O57j3dII9O|J0ZE9K_srlC)U1!lhR zJfXYRz5TIWuYW}CnDX>H0yOEL*lgrQgwey$_03RfyFxPF2J|9mShu(VE8=0E7l0jk z*(Od%r*ZmPrE3U!HxuV9G*kKxJwKIX1bmG@B%N#!bDu3sY&ej*`5!olgwG0_szStwUpsI~#H zdvFM?h_du0x4^R2{blJ3Fh*#uWmGLvVpS(j1Rz5!jYYxe4Rr;XE*C-Hl-dvZ2Q0W; zLU$(ENg}aH(fL(;Febi+#^jJPjFepkuG^KEwD2>|333eG--=bB8*LEL`S*gESR|)q zQ+U@Lg)LN@cqA2GO)7T(>Lw}1C+Wc-G+|4Z%C?WR>k{JnOo=X`(r0>I;c(e9Vr=Ea z(?C`O-U>WQCI9w2Z3S#VqnE{V+CPPJ_o?ceqGtJCARUO-vhhSP*^t!><~m4SKGv`) z;HsqZAmi*3H4fAWcZt;=#1{Jl?8rS~EN6*dBO*Dn>)aRS$Q)6=vMCDgf3_?>CaLzi zA6Knrp}NNiMm91=@0ES7U$rtGYM)O0K31=jH{24IaLYm($nZB~>EUvE#i zo#T02B{;}B>!0ShGj6z@viD+j1b%Lm&mb9g80z5ksq!rU;$1ZP3@f;_4qi043)IW}Sd~2dKmJ z`x%NbruX4LtK>LoSMXEUrg?we;9f$J{s@v1N2c8c>f@qlqD~+XUX~L8irWM1g9}ybG^@dO z%&_SX@<)mu?k4IJPj zW~-}|s>367P%INb1Nu+SSN6M0_CHYzWL}KmW}VioZ4|P{3I0;%4QB zq`UVwn#krV!^-~295FZ#t_!pRjnY#j9?f27TnJ%))R02u4lBca{pz;1<7)}}Q~n$G zg{Q25X;~q^I!sl*QK$O1MkiAVuoc$v=`R5qT zwL&OvA&~Uxi;a~T2C52ry)b6N9YV+uy7!MK8*qEzljxkE%C)j20Ol&L~7a%EU9V%!~>Q4*6Fht^-4p(fw6kNObH z9)R@TJMYH2;(oi$da|}i!>k>e=uidmKfHIY(QX>DH);DUoQ~@z7_%Ggz_6z_+=d&- z;^$beF^U`pB%WngvFk)csIPn%8*U@w02Ebh-uwN7Uy(*7LR=|42oG@$r9#c^qVfyq+T%FvmADm^*JLcT>)?B7D zKgdKg>vsHJt{mJdm--?%Sn|xAOU0B`TYr2!_d}Jp$>+)IKSWnutG4k<-_g|q)c;d- z^eg;MYLMsJwTBPs}OQd1dw9Vm3@aJ;3wHG*M%43rG#hLL!(QSExdFP=Zi7i`vT zD8O~N78t=s3ZBGU$fkQY5JT5pGiEfR7cBLN)6j)9TzqB9-t~dnodA7z9Sv3_vG=qU z4VHy3KVkSwq>`HMqLYTy3C1EN8OzsAc$uk4shhOK1x4~fq$^&aC|VUP`Vmzo^nfb1 z@qa;sTJ%Q=V-ndxhJ}yg6lM)I{)F@cL(uN)htLZu?Qb)=Nq^)81ko_-uuTnyfGG9x z5j89>TJcV9fW=bz^I9{IOVZ1vdUGhK15t5aA(1vWWC{=XxZ54|Uet8%pHNemuf{Ba z-Wh%<(DqZ3=2WzBiEY(O3m;8jz0EiHG2~Uo^c~K4Z7t}iDmb!&HpCiqI~l27rBG~@ zh^LU3ey%};!>8T}=dkMS!WKaFJ}I7JdSV?vuM;s_$_7r^S^uaJdiBA^SEZ&>jvBLv zo!e_|+Zpcd2dR$X)S=D}uqQw}jU8M8A|WI=%joT<^8ppUt6hq<=uLLvbgTPiDtS5I zQe4wf)7jZ=#HIgi`o7ZKk9%#{l4@47tedW$l{sJw|5D{;UI|jO5JvJJW$`V(g;ds~ zG$J{PLd}CM3u5naxk(RsbV!a*Fq+y6s$WdT_gdV9JL+RoeTxw#P*Y{kB1n?Uk1N_P zj8A@EQ4YA6Lbby-dHZZ2uPi{5=N#4+I$hP3HQ~x#WLUQ|6;_ z)gt_cJ-KhI`0w=C|FygQx47zW2mdEYsaG7mZT}C1AeXOjGFdf=y$uBpCP_w@W2qf0 zMZ{b?87$$KD`DsJA>42Thz*ykOWZ>YPb00ok3Z@^A2!>U99#0DK0_5=#GGmbO|{Av zF(ez6tU4r(<;^50)8Ua0xP!w6kxk5i<@KK;E#(2a-`h5UgF0X$7#_T9up~5~FCkCj zQ=`qolw-23azpEP@Q?^z6J`q#Pb_l>d=`AywRR~UXtZkjO^cc;kr}iz(|0r*`>sG; zBA{m44tIjYYt;i&Mk>GQO9nQ!B&c+rty|`Z!uV zx1aw)L;m~MrTvF|kFmY|-@okNANoIIrTpz>|8l6Ky}pfuiLJf$f5Ur0`h7($`~Ba+ z|JJAw|A#;Jzq`T4){(~6gyt_32miJ|u^9JHTG+u)@83;HQMM=$Y=u8+2vU*C;KiK{ z$?u3$aB|8oSDEunu#zNA2BY!3n@{i0+}4`1h|$+Y8j#f-LdSUowgk&d&hm?3cTzdZ zaf#4TWSpfe*)1qPRMH8YbL)Tt=+Ps#6j=wX{~eoY4`z2_D0{e33exaA*>3Xg%MebV^C566v({-2F>6?5`=+ z4Lqma&bQg4eU}=f|NoxvUs*2SIQ%LzM zH_GoTvO-shJ+i{hRelR|DOR=53&2(K^2?Y zv8Dm64?_kxYe?}+*pQ#lBGqe&*Ff2OM__6($`d_nUxff~v%pB@S;YB?Xj($TK%pq> zL<|9vsQ=U_MHm9YO+G)TAlNdoeEMNsdAjVHZ+8T)kc|-GM zUfn@(%$3W1=>Y?;-ykyogv_!-6CzTf9aYf_=3uL_0Vf(C6Z zz2L`Zf#_s^fjI-C`ezYKwU%{ohpYc1j5faV?*%PUz4hTX*+D8M#Kgv$cU#JtJOHma zwB=RH@tR$DrvVa)W*X^MCJBS>B0g~>i-^P9-u;r_bWuuioXhAxsHu9xS+(5?+vaS3 z%VwMEn0-DZ9qNm_NhygK2VF;dBZrGFJboQtHii+OIm!77Y0A^4CW@m5ZJ)a7`ID$ z_{IiN#~AwQ%to5c$F{3BA+tKl0|C-7Re!xjMi9_v>g5w==E?T@(M=hvR0_+dx#1CZ zVveWMVsj8%{hsvLD?KR|uRjkhJB@W@_|{-q)8^0VG(qmD*iiyJ-VXCy^p4pOC3eLm z*>|QQtXrwnqY8yK{WPIOY}eLK66{x)L8!aXGuaAk7_J4V#@R&J@$V2gVmya(KunYz zffA`pRRefNm9Ou}t{C++>^!`79~m1vYNO8jvLM;dXkh{xc(*TjzkG+JYLTTPh#iz0GMgO&Gq{Yk414ndr203_V!k)=D;;lLMNvJRJnZZlaS&!YykwNlmk>$W#TwCs8y;qNtbumU-pr^?Kjw^mK{V0{zKVAG>EZ(&w}7Q%PgZ!AJwH z6%c1EqnqUq`T>Bo>d4`;Ehh^5a}*6AJSaE7+xzZyA4$fPW3_+U>h*-(`%Ebe)Ho}={1{Kq}poU4!?DmyeLS6(TisZru_kx%xslOxPI-jDI?1!L0rFC zM8wciQn<;$T(Dst0(yA`n6q8aPO5PhCsWU0$_Z6Z=`a~^+sY)3QL`5k0VJ~=v#yu>))5LfbHmJrJlX_{ST~*mY?R3=q#p=OFGO5I5;mf~U(O}r+-4SL z<^YCb3Qn@aL3;c=AoxNpo!-WG@ba?DFnhNfKeZghD+L^JV3*2PpSFG{2Xm?+p zy=XeYC!wJY48%JKRqjdMgc%C}(;-XU=Y;%*>V$cKcU(P+G;?|>$;Xz@$A!<=YmQ_J zGrje&uVSK-66UKBMM$YqN9vy!euc-Z5co%U&bKUQkFQ+KhQRy+q_zv^;w_aB_}7sB z5YZ2oPyKGVHqrb~;Dy#LUXJ5F0pn>Jn$qL2y@_-0a*~xY<%Z0nAdwM);CM3{twB_eyM?GK7Cg%f1p@9w&)as6jx$^xTdiAMY+R=-A)Rq^ z=aldmKxAWe;)811S{5yWBaGaFv%HHJr_Sz`VNB;|J+~gfIK~E&Y97weA71rl2fEwe zpG05Vf4+a#eF=9yjc2JKk}LP7o0FhZ5vVsKF{f$9#!9VXbzgChTc%<*TtLrDR9LyZ z$P%Dwnnltk*nd4RT6uG}yO0T94ta7UE(bX$KY^5rw1wp}sEfR1WvZ7RW(IbH-V!ca zX$j#!3D0t4%T#9o+{vJ?cS5^gXxn*u!mOUCjgPZQgu|I3hH%e-WZl1q6qOQ@AJiI7 z%7-I5nrn$>C!nJ<@lByM#nf&wicw$w=x3)#Q9J;t;?&uKhW6`j<6S7Ab~=OeVP1T= zRA3z2kfc)Oh*wZ(kT26c-ZuK&1NXgs-tuYn`3v~GRw961Sw>4OJ=50bxXab;`g|`Ug*RvO z>)<5esN3_|alzxEie z!>W)@d3>Qngm$s^j0Io`8^9_67N6p;&vb_aRvC2Ub=S$LE!ew002}u424CCQvfdaB ze~FBqhHP;)3?#jL$>JclLd+Xne-vMA@G29n z8@G)%;ZMdI8@d1to6Q_IVh>kOgaKx!L1@N$J9KDAVSe@0A<7RgB=9 zDMs>HlDZuK+-7%=imYY)bAp$w&5&81{wIB^pq9UoBxkQ_*y>@ZUj0L2+N7;$MjoD{ zFkx)|Z0PE^Y}OR7x|TdE@i$+a`_Fu-hGzdQXDaDIe{Ggg1d>ZRsRA_U*WF<@RKBqR zkd}CS#*n)(4xHW0<}VPul&d^peHzn5(tV0a`z?R;Zf&356HeXSa1josp)BX8YiK5` zs80oxJ(;JPH{&Wt?{YLlPw0TX2BxenAay(vf{1bC-gf4ECWO!{oZM{ zhV1J8qSffgz2^RiJ@l;xGNZZR%2PNuJkTvEWNp*%vW|oeXxmsjafOk&fv@Ju`3b9? z(+K+4l>I__)jmJ=PW5{3%s$%gTE1Sy@6cD?muz@CmO0va)Xq1fxXx+80=^)4PHDi} zW3C$P)BGmwApD8@WgiUL=>h1|e#InjGt-6W{t8o8U0%T;{Go*}l$k}9{gip16L(-X zf~E+}r(=SI486xw_7(p0tCs2L7Y^VrBgXw+LHdyo@$@ln;F49<_B(P|KXH#}iyEt|wJm z8($U&_VFG+kPO#y?TVS&j6RXUUckHJik8}et;3d@B z1HtdUxyNZS4zSDf)|04e{SL}dRzW)7A(vuA@v8a_4^egn^HBybBG-(VBLeT(rj@q) zrkuG$G)YLg9X@0R*MLa(Yx6wL1levBAx$HemKa;1_!o=d0-I!S3|Tog(o&274$M5? z6&(cH4YU(~f{MS62M9ptj}QTjE71 z6@ehok+Kc-x{NRhl%G*Q!zP#ehnH_@rhms%PC>yQ_3glysLP@je;w%I8NXoB$BZeG z+$lh-aULF+WR)0vz(QNfug3fSe0o}GQi%5$H6h5VFpb+6Cr3;0n4|Tq9VsQGM^`w?A zw}X9_qW2NI!Y`kk4<^sT$~baNv!ySLtC%E`EpQN4rZLh~@2;=jy!EnL5@ zN2{%nK;9>^LT|oJsQrO5tEn(^6EuY%`Ww>MYh5i@>e;HjT<=%QwNNRn9H@qq(2@=_ zQRacA4GO&HUUwVn^n-!Dj}HmZ^Fwtc%(eWzDYk~Zpo=sZ-mTEue@0*l0-JFsnOBwd z`d!fWh9~{rI5&VSnl*Aa&YS!g=uJ~=^AS@m+N%CQq!g^$AOTaf2>UOgVi>S;4Fi&y zw*jb2Ta&Bu`GM(u3sTJ=wLIACF3^3PxGo~>_!L}#MMD-9-Ez8$EWJiMIY2mN!L~7u z0Dwq=&wzZ{LvduO9Qmy;6kL$Bo+DiAW_KA%{<_wE^c<;MF~9P&;oO25Rh+lWH7QuI zZoMd@*Ca~2`J;EdA4m`p5U^dGqr;QG>LHRJ9T~=(+ipBA;BTB9Dl~M_e9*s5OBWW> zr|YkPgp}!kIP9?N^A8Mrp)R1gO52J-&obe8tmk%VtDAS)-H{jg&D8{=K{J%>%^jlN9^w6tgoEUrs7| z##lwy%xrVLsdML9!)5Vq+PBEO&63_LW)k;qSgM4Pp}0sr8-5fz z9Nu9tFr~W*9ZFG}xXA%ER*mBpSZ5;)7`G0R*p~Q5sL!8Ve70DY(;DTL6)7w$MYV7m zX*h)gqMFB|Re}WLCYyqc-+Dpzr63uIy(2)I$6BGj?Bc}UB-+(j5%oV|lB6fBG{!s1Vk=x z0qf#15c!YKVW(HMRdvH8CsE)v)kr4^BY=2V&GsG8oPUjjueb{H1O_udzFkpM<_032@7x7-yFS#|w_l6l~QDrm^Yb`Gq{@;gd5w_Z(&0xuZ?w(8(rS;>AUZZo;W3E&}jHy6`O zqnkEx!G9AtXX8b(Z9xuO2h9;zkx4rmsbfOTdaiBRxtyHr^!+gp)g$IY`6j_Fu1c{w ztB*gobTa#dRrLtEv`_QcVO4JfU$oo+QBw2EyX(YqGMCmXVh2Hjl4E*=`<)}NiP)-s z%;Yq7N(rYsK<8D)$HbC_O>EaUegY4Mo)A!^P!Rie2YOU4pGnZ%BWXcH95O*5%_xTI z{a5m=c8f*OsS-*yLQY4dB(DtrrO-287qbIl;T75jTO7kgm$!`29L*{lqFf_#Uh>as z<}oCO!1j?j8T;Q}PzyWLAakem)cFi1H>u4Kg5E3$O3JTT3tJveZhwZPl1&d8mn3YV zp_za3qjH!-wwXh^2R;2r(whb(kYg4>PDu>NtV>umC7luZG_(>@SOgofpt6 z!|Ylz(o**W!!#91fxCsX)I{6iBk-E(9IUZ#3f3z;D)f4=xz3#x1HItKnUZWoHZP$) z>s2)c$}8qCl2WmayV@K@FK3x>H-@1{V^uvd42#DzjeZC*jsaSj260t4ph00oUfNGm z9tPM(Ugb4s?LI)NEvr5Vua(mn9N%DD9Mfd?EMzNV>sT6x9aM?bYE3+wD68`{0cx4w zQvSu4sq?h`bX22yct7y46yq-GDwwCmo1c`CR2iaM`^#4HBj!M&Ae1Ciu#&4U??93v zuyudCG$RTjb4c1||7%+c+1(Y} zEOshDaSJK&lvT;bSg^)x;nTB>%9%NnGAbPp`qWKl>NJxMT&cfol!T+s+&`4Nai-UX zPgc1{3N2r?t#06kI37K65m!X_w-?PmvBdWU9xDHzsjzX$e@uxT9Af?u(K=W+d6w=i3y0aLW0xLUjr zje&IihKpa}{Q31;HUI;*26#-~ug@JXxi`#n*QNU@QGN zJ!3kL*!R1Ii+_My`~gVCCzHpZ?C~;gTp-|DuqW1gbLoF&s&^k`-`7^BdAhhokeGo) zOzE$KiJML5`eR`XG#EUNOqPOt=e@k;o3Bb8)N`Y*1TRy@3s9#l2}RwJK|$0|h~=bZ z6=XCjX6{>u?2%bk2O?UMl2REnQ*EZp1G;Q@QOe1dBZNTKKLx>QeHPAC*Ha_(Q`Qjx zjWCbz{m%y0D#yXrnB-8^_N)d+UA$W&9Q5N&{5;*7M1mo7JO);L-mJE1d~;P=D4O!H z=SM#-dfK53l}+qP(KHJ4T0R%lgis8s;@F#oJSt0>t@l^nNj*+?8)jjv^l66{tR^I= z239~dXz$t3YKlN`#WGa=7zTo>rhy~W_6KTSK- zpC=D1`nBWy_8At9@WPY@Qp}68`4MbauB|hZu$OqE`R70Ms)H)6-)|z2i6~_bAU*QM z?eu&9NI63~M4k7HsH4dM!mNw;vg|SVx$5dfr#Zo5u8);q`q({)@S&1 z9$Ii@MY^yn*PlLpQZLf(g0OPhPkj|iQ`?4~Lvcql#>bv^!V|d4X>B%RVvLif&cFlA zv&kdWEb4*T%;u}r?7Fdf;3cZN^q{2gHIs|q4cbIusfoj-AgNW;LRqHXMq4>+b8ewi zeUYnXZW!!*2ew#j6BzhTiU%El2%H9%= zEv={UNk*mQe9R;+<|fttk}@^Mj$h}OgVW1B%mJK<5NM_^;)RCSG$p1cNM^29+YvPD zfSXOcO=rbsiINdfH}zT_nDwVi?bSqXe`q9!1pKRfUAZG%Qw?vx!df%J6e@hzMmN7= ze^Kla{)CJ`VpD=Qw+D^<{n9$JiD&Md1{6h(+$^m+Q?GXjcioqaoIjUMLDM{xZSJ*R zR><0?3VGWl*15jZ>8}QkOrUI3=WaYP=5=8xWtr++k_!xP4>I+Ao5o6hbw;J5~R%q zqwP3$6w3}sRHubo>Ap3b$JKr=Vw;XC{FWq++QWtjhrGcXs2D^9<4ZuefUe0 z?SADsPrx&8rIJP;iZjDV0;F@24BbDfz18?0@qMy5H&?R3(25{!Mz#Uau_nB~Rq8zH_qTwmCASIn0wa5?b2d zLIjs5V!}s0#A)VWy-o@jSJ0_UUuJgtvS1(9ScS_Y)LD6!jEROKgBvE_ZYBz9IXAc@ zA#lGYZjmmQdK!uR__bNt{+m>v)RcLCn9x9I6QqJ?b4*gGx=tagAQ+zmTgx&a!J6wT zwG^x-EKp}rx*x@f^Bgg>#DS*SI=Rf9c)Khr-*c9(lZeNR)TX(fV++HbLVP(yd^v{n zWPtQkcJ(`X20d|Wn^qlM#pucD19yxLkUz_^nsMg(IqcVg)Ch$(6jKj^A7q_eDm!Z` zTd#;imK*;OtYIj>4P!|>n*3Qj((*P)&df%*vSY@gy<2%} zAgmLOTbtX?Fl;pFbGQW#D=@O=*qqY9RgS(W?aX<}g`{pFZ(s+}cM@UPd@V|Ii(U)x z;_g8O{qBa#O-mrF%XY%YnW_94v^ZA*u){?8Aw$;35E}MG&9bpE6%Vx0%22`Vx*@o1B5_ZyNO`Aa{QaHt<9$06 zrrnUy)2Uy)EB8L8)nsrW?L_q}ND7Tyc17@2kxV3`Y2|Xg9#SzYIj1A zh8*joU}{`ndzx7tXO}XJptFI=gkS5R6JfRW+)F87lm^=9C{WNC zB{X6Jn=Gm}nO_I{g>?_pv|xuatVr&Z*IO>!i7*b;592}94Ohp0{RjQvFWvxR?Qe#s zI3fUm#{XKA?JqJef9>x5bI{^vnOkhDPzrWy(3;o0{Sb4GdmPK4anOrTvZ__VH1p2Hch*Ov54Z9-+ZCzEGiG z8~R5t@c}PARvmG~O{Y|XK3i|#MRi4I(g>4|_opLAy~0~1XrvfY2VD||(T(Fo5LA^i zCC8YBi~EL7v%|_6d3mmX97Ic~-63ih@+0oF9B1>?0g+X-{83EnOwmV7!Im#PS>5EU zYVrUqTY5s;MKmq;4P*ON5o#V3Nw>fjb~XCY8hAHs0P-50K4oIC(yhw^G9AF3@~0Kb zk%XZDw9FtY2LRD5xC^*mpF^;;T}bD_*rT&nO3PMa(7?0zpEswE?G(i3Wf-gEdR^5c z4&W5#*OYE$-4^V(MziWX?aH@Y3+T#J%eX_-=#rl@>TEYDpdceutm)x$cS@-esHii@ zRd9~4`mQ_+@e#kGFaV+wN>R4u0b@8eR2{V)bsr`lZnv+GA6TnLij+NRt;DPf!+&_hBxKA`EQCm0B}VyS~vd|)JLxC)snhZvrE=5@q#Ln zo{;sCQa|^>$@XC`)L`@WXr%OR->C8@R)AF`pc5)g-M{HT!!`ye&Cb;VF2<9r zvdWRrYivP-4^)uUSB3BgGjw;7hO${&xIE2SQcIkX%y7N%jta_kuTW-+2#L+ ze8KnsY~9TNb*KLCX#xM&o%a8v^!qnv-M^&;{OdI)HvbjtgKp{!Q~DdOJ`n%_RR0&g z(DzOM7p#(({ho;N-Fl;vag#tK=?T2tDO7axx_fsrFtutksmI6I3#}N&j}{Z6RkE#8_&dMC`6xI4TnQCMs7E*u zxwPM2YMuA%Zu*59|wCE=n z8GsuDm?5G?HWYAoPo=2V#qqu3S6wv;dVjDvzyk1)f^TzoyUW5K?t(Lmry9$ufUM5^ z=B*CT!wTj1sR~J}TzM9^M05%EG|Mf;d`BG7+zL)lx=B&H;az&lZD6`a%OB<_ZTZER zw243X5PC4X1@-Z9q{P!Zhs8eD58Pr+YH3}kem84(k(EKt6NingMIS;Y_o>rgGs!e; zsKN!oj&L|Ik9qZq2j@MGrm@iTe$boL`fPT;*C~RXL3cFUy*o2g{RNu>zOl*hpRuU{ z5nC9b6faK;pjbzuiaJL_FRI04I&e-*Um3!`P0QUu63iX}8%ixQ0XvaOq_Ms0t?0cR z@-Nu5au25#TCMR{Y?{YcseW(=xU;*HyE2CjWq*K0LpP4B8qaWLOxwJH$VYDiI>IP@ z>f!84)zQfK#wPZA9jVEe?gnO*YCH-3ooOuTe6`=+K1NcMOb`7;!{vOM4B9Dsz-CGf zTThQ$`yXG6$INkNzfW)s^GGB2GnAWsskbTZSWSn8Siofwml*Kq5fR0kttD!nv|_@6 zobeTUP*5iAL3@mx6+`}*gxf1eI{4!a?s5n0>=ABYNS^ihqzf^oOq!!!;jUSh~e%I2<=ai!wtB?03 zZCUA3E~@VF9hX?sO5KSUM&yX`>^r|>6H^>tx_K*z0f4lKp73t_6y-ZWCc`(FXySv~9EtaJ|Ncnu!q){dCKb zK=^Kj_Q2vio8jWJ(`5@^qTp$kxvIe9i*DInXT?f1+m} z`3cbmqt9=j9NB1v_TFI<1#rw~>vZ@for%RMgcwPrX0GM~1PPz4H@^*yCc2S6F0%uJlYSdEbXsJP;3$Q=txnZ`+3LHSrw;{Q? zT1IiHaC{;`4=9sSs@RK^ve${Bjbam_2vHy8uVqEdk~$zMC-%7V)fFO*xDTkPw8;VD zM0Y%XrtsIFpeGk=W+&?$bTFBSGfk<5N}`+69sM( z#3QditIb?OBxD2PpPh zz&68J5d7xG5*fYrz2jiJQzG#rAz&c_T&jx&#)L+@M%2&z;S0R0zY4t2Y`VoM1G3jr zMrLfE7xTr{h420R8dh5p2~c zT_f&gOZ**$NOza*3|m6BBcmGR*mZt{ApO2zh*aAnu>%en0j1*?nr13c@zY7rtOj^16jKVt<5zQ@^-ggSsCx z8|CLFll!v}Vq5Ls*aaGRs|ne;A;g8*U>a{p4~gwnCjN|yB*Dbeaa&dTxyk+-TPs0d zh?7HUCoyKgZDU?oIo7~XB~ED(s_N$+wDCbJo@%ORAHrt#Gi4^456Pbbq#Q%Ui{nZD zmy!#5=*Y}xX99ikArDe~TFfN*HfdtO$darUzI_vyII`+NrlNZ!x%Af1o{4#1{4a1| zy7QP2J!f=U`Ippbzbp4_Y{3NzM*}=!Uq-8;W5}fNw5V{<6BJ;063mJ0o(VVrFYab- z+aL}HuHO+**l9xih2~Jdx>3<-cr!n+I|So;`=E=PLa^eTx9Ku~vE@+t@ZTSxB1Hmb zEpg%PzL1N5MOuH{oX(?$1%5`TDyH|`)PN85CumG=>xJAy%sIDJcRi zn^^+ue!soJmFE(UU{j`iTU#7+!eRgtFYAF=DsTOG_4NL=#QWuZZ~b-tZm^!yl|KEt z_s0dj`VbxcalNZXqozk2gRDi}wh0J+HkM>=KfIzh)h)ck3|azwd++FtQEwg)yZ-R< z_OpVZQd~h8E2hiC%bkY<7dE8Wbg#*=tEAvg*nvYA<&+B#PBbBp(Tkfs$J>P-^EdwM znUyDfPDgOQEg8D0VLPU!ktAj4rMwX@A}ES6Nq!ukqkpRVn4L|ux?ahG5^)_JOgN>M zF0VoQ)ot-Zdu)c@q$M3l^ZVLr(^%1&upnKwUjGe;ARVEN-R2*4C;!O6B!EnG8V!o& znh8Qvb==J0|8OY5#M8n=- zM-tI9VR=TkxD5MY-r$#WE%BnmiEP`Lh2}N#JrcCb)U*ew3hm*=Gn`DNsEeKkT>LsT zg~LHy|N8&K+Bvpox^C$@PQ|uuJE_>VZQHhO+jdg1Dz=?eY+IF`wPyEnf0(`d4?ORY zBjX+(*J*NC6I{r!BhU0rQJ3u$Ri|Cf8q0^a)u$Q=BW{zU6%b zQw--Fdu9Nu>U*rSz$lR}fDW+2U4X+~fZf6q)Sczedv^V7 zn``!6ZA|8IP70jUIO@3?b+U&QkKZ7>nu8}E)*;oV5Op+%$$6!Aemsx50(0?;y*xUE zzy0!XO3KIGLh}6)hyWrW;1!Laa|~CHZ-kvmB29+7-F)1m%AO?gs?hXUqLX-_;ji6 zewQ_`xErUV%(M2{<0j?Ozc4;-!jO_yCE&~`9p>H3MYlzgzonsMthhnN7#>Jes}I1~ z6_O}p`n(J7S>KCPpil3LRw~~aQ^|l+FHAOB)8|&+T*r->ySIP;Vq^{UT-FLP5qST_s9}eZ!zD|;F{#Y1 zyasGBtiu(n1|qr1I9@C+?cur5LX$}zu8e&kv*KW=IMz}m>af$?LY#BqJ=NZUrDEL9 zJgEuhUUd|0Au#E||5&GjLsUsm2}Mr}bu9riO`aT5>kT#qEkX;)Fzifl z@!2lFq*1+d!!fYr%ErFe$Exl;JY2fBEI%Qce}r_)*Z!#^2XS&io7)&*SZi&mGP0ex zYRfJ9nKZGv<DNJT(ZdgX_0b2IbQZ?LK7&rG}S^RZ+c`-WF@6i{}266PR0;F{W&KY_^L_m|(%z6hI2o3#f^2voJNnwT^yQ9ae%*nS27MKmgc#YQNsbyw{l^l%A39}y+ zNQxwAv}SuCRKAq9^p)IQ#OGAwBay$&VUXTtqr!V`5mT{EXF%Ag$@=cDsMu*x;g@w^ znqelDkRkwOOn{~$BR||bEbLO*?^NnNb+;)}%s?B8KBst%2arj#>DDq%1nzA>xH2X{ z?nMV9?nN)$gIH%29}su;w#RnPV%PW1xAp48E-k1kl={pCkgl!sDX9%MHuyz3u(9UC z$e00ZC0H!@u&U%*K;^pXBpf}6w!+|R5sCdVpT#z$&^wIUs8)AmRzHqCcg1aA6bS~o zgTuQ3Y=NHre(yGR(3U4}K?kWiQC!TCVp07B_8Y0A;SqbL;^uiC8Z+2bn_lazJU^IX z`Aiy!nBR+NJcpD~+|8>->n;LB{s(r5+j7sgyOeoavIFHQP9&s9UZpS@H5$-7r{%MuT)-+nLGV zgWSZRe7iR>zU|+IP;7V9^Dv5{Ey>1WC4yi(-RZzQO>Pzym1)lThu#_-KnJ|)rWwHu` z_({D^D8MPU21s)Ko;9# z@(sVScmTuchibvf5*4DuoY^HX9!q z3cnG|z(?i)CCLUw$w~AHIun~&y=Dtc-dS%!|K`Gmj5XaF2JyOMb>=Svms)N90m`jM z4HZhtbu*7;mt^Z^-Il#Rw7;ZKS65eg;y~ zB)<-U%j&$7hdaHcGrKNHD38ez-T`44oQF?rDdF9mqjKrh!e?GLpUuC5R- z;KzkqhnGW^)ksvhD-wQNDTO?N4>V-puxrp4hnTt)D|6g|4}jm68u;{HLnfvbaLh-K7x{|1fni$YJW`> zHq*KLp^$r_g5--0tyZZ$-u_DpR=OOnw1d&QwvImYYkaAZ9xoQg&(;I^HH}a*cn($$ zo<0b)q2ppUry3?vmHChPf#0<~KsG)+7TnZP1rzQ{Z8()ua1X>XV?(j!vaZ?ZeUnrQd(bkg^_6gB@vAt?v{=?v=GCku zVs)OG)T_KxBP*n8sUz)~jodd&%GB6GOtsLZ)GON^lW}6CenuMgN2;+iUnn82aibbw z<)Ci=i7y00ybb|;6|OTRdBv)`hLAwkH!RXLVYiTv(_mv=$?TkssZ$DKVO1|XV$ja@ zqg4WU!ABr@V?vYTx>QNTA%UH+za5!kUo>{PN})u%p~N%x$)P;RSSwe22l69YPI32_ z^{HG?niUyGLyIJZiT}A`x7`DrjPWN1ky|odLmZZpoD)UrOl72hHvU6NWzl3fJ_yDu zJ+;j+SE{%to(7GFPomq2BhaTH=|%KFmdvI;baz;}u)H>;^iyBfDTt7; zP{89Dm*;QMQygeua)dZf2J42|E}dmw>dQQcjoJbfk-uTH6gZ5(hl@fH{N|`T=_M@; z9h0%;tSeW+s-*c{WC&uq%26Vpyq^1W9=9l83q5)Al;VoTe>kMq zQ2Uo^NN?@hrHai)AXNv4L!$MF_7jlul)sG%g{t1x!Bd~2L+EsJ#wuW%fE_qdS%R@_ z8zG$VIW5{VOTTuaJ|08zrSKMx+~AxCQwt4lG!#U z@|#LeDY70^r2HOQ(6{mtXZ((X09+=%x$(`p(vFfs)HTJ-2mV8Sw^1e^rruBe@xAG# z_#|b)94$xb?RL@H{2~il`lUzWFrmJ&yHh(Lj50sC1p~^Qg4JW`-0wlk;c`y=jR_Xb zdvUGZ5CR*3`3v}k0};kZv5;oh$(2803rh`RB22p1Qh{`ysXYm)T!dAW z^I&`#@3&;=T)BYcMw3>je^RGJgGeT}e9*fk*;5QRk^p2#u7EiXa*#`Jih1?$wn!Z@ z1N4m=z<)Tfc%VfVMMNitBgk|0IuV5~A2j>c*Y2^V$f&&2B}Y=}7&A1eWu8U26?q15 z@LiM7&&hP;SlqamM3kw|zg?sM`%s1bf8QVd_esjXfByetX7hzw zw6^=Yakp{$AMZFx(aeS5zH}e!asR(&Hvjlb|2Q`KizdU@c-if5H@p|>lD6yY@ZE2! z&`t@Enl^~%gDW84B2dlbn>w6r&Hd))R#b@MA%&M7Fki2@5RJLDDB?4VCaJzz1>fyY zurVPc3Dw6z@(|o1PZWpsCagBHe1kr)Mm8TbA%N8fz6uoL*SH4Nlo;*srwBPNC+Iw= zFR7h=7R*lQRv1D;9L~XaiP0k2i>nS+A*v3bFE0-dIwYozeQZhxl8&SD%*3zDk4 zge=ZMLyhfEi3au(KU}o<=C^$Ya3kC{C$C+r#hou`qdpp@c0|_4oV{aHn?z^#0(BAd zpBOS*fn_c|j)Gd7!0x7@hIYgsP3j!6j0V!*|MRICX1WWqatq!;Sq79^}Dve64Y z=MGvWXDFu3y3WY^& zyEUMB;Ns3b@jKOvpCJf5o}O$XH7vv2bcYqEG`1GBr1O~S2e6qPZa7_$1z)tdWRvZ; z$!}9F$dZR_3A?BeR7i;}qvSZ_nR{Xz2zfvXOKG%1^ss)jC7{T5U zN#5*pDl510WP)$BExJO}fu4aw2JB(y_x_%Z>p!~~{zBQq`Iz4C%VJT4otwRF!Qr*( zwF98?OA|zx^$r#`wu-%PM<<=_9FE!*)wcu)gS#ay=WfVJ~Y~R4w>e7I^#|(GL z%)L{*z=XtV5;p$i+GL^9O3*aUvC|-NBTrQaX}i{?_PAwj?+jhL`dxP&k0m`p;*M;q zj;5Xiz(!Qx)80q^vU%B&{^@(uH>ej|3@mSgIUb#Wb6!DXO}yCJ^K($g)=|s-afEqC z!gB~FNARhJ?ym^E=`&0%e))L$meX6iMLYRuiEVouY#O!&Ds%_;`hoY)QzzQPSqs&# z0kYDU#)s1XhgbavxAzCH$k^?#*X;l7iB$SzzR;~-GFT#>4WR5Z6{%(T&CH>=6%xqF zz;^VH#9J1PE?t&+(YIGPS2Y*TyL@?eM2LO2Q=Uv*cUvYe1tXF$rs!mtCdS!VrOSL$`{Dhejqnl?R z4ZsiDLsG*Wv*}G5>;|H0g`!Fy&3Kj?u`v3LA?)^pJ{QqhS%U7w*x@2Y z8xK&)Km3AUry?Bu==7}=?<#zGCgZ|dFBkP`n2p`y9$&)bkJe}IH6_Ds8uE4VTo!V3CnO{tHhJv~=Kz;^{e~j%y zh%w-h;g1oyj3W(&sb^+lR|8P)^#R5RLZ+d`XJTv?VsB0pyV*}sNi@$j%9W96R+2f2w}VZva<*aLdqk4uLS#eg0%c7~f9VpV~H zkb|C^)_ccB~O><;eAFGd6FsHNMXBBbh zqF=H~yr8pb-z2UAzIV-ghi&iHZFJ=}^4zsAXT*WKPnvJ2eDuBuZV!Y`$Ba0us`vfa z^b~19UB9*Ls_Z+D|7}vs=6PX8XBwFLl=^USwm#l@vP~+u{u`e-wRxbbjn`1{oTH{i znm?1TSsFa=uKDe>7sp)tz(o#cm;u{nvB&q~9j@=nhxZ=RlO(w3e&e0Z#_9g)UpCl6 z01hIhzeGR^zC@S)oNCWMW)Up^m|pz#MgK(^_3ueVwvzUjG%B+97lOwpfuMOkx+{of z#yTIK97{S6&JZrb3#W15@z@`{QxwfFe5dKQr;S3YdI@psSt57~`F!JG zgUy<~u$K{p^aMNFr!ok8_#RjkDS(Sd3vNL;AsBoW()JPD-KOR+<#Vlf#`jRTC#G*&G)3sDw~uHM{!mFSwz!Z0=&yU%(Vrf^N6GQ;Dfx#_`S?~NuCYC!M-rSFS@H=h$nN+4;d5%e;$h_%810a^xP7|VG zbs=vZ!-qd&Jok{98|S-RFShCyiS<{d9=->}zk}X7cQs??rJ}k4j*ap!Jx-b|7jJZg zLRCpw~?Jag0t9#Qvx+mdAGG2$LK7YyZ3B#yGMM0@6sZrK$XgC*?%K_i)OPup7aWF zxjApjZ!1A~-7I@!vPpjwqb=4&-1PHDh7orgF8=`YB~Gt6Wa0Q1a$qqxj%mcZ=Wk+X ze=I`q-p0%(euX69uaKnpe-n~y4J^LYeg7co{gWAQs(cAEvcq@1QGvB90a=yX#7EXc z)R8-^xFmu}&yE-Hk((QRVVP;ftM_2uuZqp&32``@+4$kG&><$%-MyH+n4qgIXpy}H z5-7+)YVqMOIMZgb4*>Tgl1Ow1S{jMoTov>8uE~-sTIVV(kj2OQb_`!(n4AY4skw5a zprlS4)D=h*Z4(;PCsfqpSJe~jael^8q}w5}Rj&2wB@oZ-U=)peDlC$;e;qu8r|(Ra zlHG)FF_>MZa zAWRAhMVg3hOllUPf1T;6I4VpZT%ey`kQI#ZU5fA1DC?wSDzjp(vyu51cGJf@keXsj z%yO@y=XpP1z>~DH?;)E|HIUjlfpqme3c|Kyw~1_9TEAt7`t$lDm`CI0@urowCR_(= zOLZcjrgrKZqVlvMpnB$Q+@9|0a{1XXWP4I%4I?TbU!DbsBP-t%ny&5^m63v~Mkx8L zp6!-PWi@E&EfQ*mGyfO?p1R>uij%$vL)5D`QNUo{`w!)TxAnSV*Km;REb=kE9d&@F z?wU4%$xl3FjdiVkawmk6I2nJpnpGcazqN%QGcd!*wDKVH+)PBumQz5szGof9;QESF zlEmlmR>2aSR8KWov_D5o9i-|Fl~89l2p*^X@8-ks|5;gh-%0?2%p%x z;(pJ|qZk7R@Yv!yztJ{q@ir1q;8k#gFjh-KfV9g?tUIZS-Kw}ueQzvsSy&EOz*I@R z!0njH42Da2Wo--V?A>%vdkg&B02%@{c0b0j{=Q{NQD%pXPa99ONEw0B^WH&V%zlL! zjcZz=(vAV6ioT}G3)lgRlesf3;mLe68x$H=uY_0p{7ClOqb#Jha0O|6?pQ&RHw+A) zTO`IW0}nJA7x>|joE-6c_dr&mQLPoj&Q!|^&anvC9UWkm>PQn)oYJYO$vcm(&`+Id zk7aYb5&08X{n(oO2mQsE;#b7BRfwl?hpbQP-g)b{H((oV^?St!qb#~2Y`d)R_n_|1 zHV^Qi1CQzKa#y}cmjWxlZ|^_Y}4l&(iz!&f$<=v`%**XMJlkg?}okv1S zNka44FGyp>oCJSv(zi)(%K=CcacU88sxRhtSpL^Y{;JPYeJc}zg=CADUE91A{do6Y zHDw$)TLrTTO6`+W#(AZ@gSlCF0JW~EQX6~tTt?NYKx#qw1%YN!^KO9XUJ2I7!&D`Bav83lhak3}3Hb?U5$-vmEKSb995BV~O zLS%U6=~NAQ+YCJuLx1nV0&Q%R4IGXZFvsv5)e&vz)#W6@3LyG(2wiOskFP8tIv)a2 zX&%~bR(BP+r?ttmdRAd#8?q$6@oZc$jbjb8vo7Vgp1w^UtJ6FyA*gr4PykC_gs!e+ zL#gMn>PbQycQOK=%%uSsVR%u>ha{W6=7}FPIckL(qD+Ut%9v-gU}q6%k|h3Wd440^ z3*id#OTJ8_-c3Igk3Mr%zHGP3t2{a@t>u)& zLJpxI8D4JTo-df)>fFA;2=DR|>>K%Km*Lebg58{okobtlVdfDV7cn?EumfK=GG>)= z-c1~I8hKL7KKRT+f)*7&koIp_i%}*9sIfK=d@MTfmnPI1d2+m5X+wvpDC?#)cq&O# zY!pqh61h3QWwGQCVrB9~{A%$gG`18vC9wDV_=o^oeaP+%Ci4WY!u^>dD0rvma!c`~ zUIKO_tYbfTQpcHjNW?vPKe=;=2J_+<6z$HGY&~vjE#0g)vE9DI+CFIMVv7VVQYn+` z6%c}B#BP6Q*zCs723GL1Se^H|TMWW&qfLmXwr62b-^553%$2L%*JxZ^T`qJZJ%vdV zc(7b7Qc_WVsoP{J8pVVldEo?P;S?h(f+aGR@{yt>nV2vw`>o@qEJ1e&5+gunVCx~e z>w2Vymw>&m-j(2+vQX&#UNwTaLu6>~Spi#sbRzbW zeLE|vP@?Ctf)GD2Mk0N+ku`Q8~3GR$aAQh%9s09hR2uNWKa7Jjnz1c^E#D? zd5cB!HEOeb8?khYv$ z*`YWTH3~+9R!hDET~)HUMZ-3%UYA3E({L}*oWda6l%+$E2h{$q6B>uPhIf9Elvws@4yCs6OdVjiDUcg zrg$lF)~Te^Jpe8=)F11~focuDwVV2i#sH14<*}5`rqqF5p@xUs)l@njJX#t&n)v3E zC+MR1Eh?&wPecZQp+hKTeW9!P8&iX9?o} zEd2ac^v~Fl<}X^|U(o1(dcuoJnt!RPe5PyJpGWd2V*Bn@UM(%h*KAn>XhG>Zp;yIUOqZ;+=_?Mx&{{f{QnYO8wh z%H-Z*8(*xAs}m5y&VMG+LR6o)gIuvyk0Hb(zCb$etC$xcMHz|cnCqXx{XkV<7Y; zz=7!ugt^kEQ&`;u-H5;qGk4;}%+Z;CqYRJ^N{^&1o2m1D;8NsWsxDsiZGv~`W>j&% z*aK6#J?jylmou)8DPKCR+QWv%P5>%tu-g5U=^Add{zhIRp>Sj6g1P>5?<(Tp#u9B) zs)K(7xldwI`{9{StHr_$vyR+ax-m~3#sVEy|M&8$n~J8c9-i)pCSHdPPL->0xzMrk zLmkkb&p)>sy}I-#O}^d|CitHPDEyC&iT`>_|MZ3qzO?oi{-P(W8s$JhRUFQ4 zr_Ns-02u}>pe+YiR-j|r;9`FcFRL+T@tGZ-ZPW-#5ac1KVU9CBao5Q)3DiF`i{BR+YM2Rk zVuA4+4D@Y^_kJ*bfe13ie+AMSkDtvK-exX38^PnER{vyXoebo|`8{);eXK}`S~1|@ zL-um#`$hfb66dQypgxdV0}`{j&X#GHc$)6@#nO*x`d{MkQ`!tixyv#>lLH+YSWTJ= zT?|t_&izHQaAY~kKVcxDv=w8_3iDs$$@EENxjyfGydPiR$L~jUEevVp2;t6KbMV5{ zM41@-1~J?w)9k#7kDPsZAB@U;iBYO1dUF5UwEum0_~&r0w)&1t|2~rZqY(mBO-c5=r z#_55lcLDR1q`Wclq?UbS#u2&10x5KWkhr0yQx;cE);Nq7pr=DmVgiDew(I_RUf=}~ zfO5e;iMD_y+JgLj-;(&Ve?8TUlm)D(Xb~23cnP@C4!@`ym^lg38Kj@^48Ul^%zgzT z)=XNN)Erem5?Yf#*z669CJH7TAOKHlnwkqU1Zs^*W?F5}&q+_-l%94$nu1TT;VjLw5u`FvAM1ZJ3$~N|#CEfh@z9z)ogF?mf{kHlH zBi4LgGMA)<#j;av?h38;A<}65%)%gN%N3TQpqemfWTU9e@oTkvgrVA)n#;R9f9_Q!aI9PXYpH)W_NEM&K;vZ%Fg&rNaQS@-9 z1}#|*OFe@EpVtR^%x?6B2!RN*q3;Z&Yh-R#QqMYfCWD)i-A^-c9QJh|SpRKwf0zfP zA?rc)*Btqo3jl!gPt_HFH4g`4BWJ@e@&13bj|)vr+g(n0pCi?%TM$GVPp2))i}*Df zIM4ahnM;XENPKcrg`8xw1xlxmvV2qeDXHP@KY~hnx5a z!Awu!Ww1mL98nISGicn*0H{4ToNU3nE6W*_w`qC1db&F=VB5R4QgbdV zJ32q;F2CgWNKwR;xZhFol~gw}eTjG;!uo6AwR+c`mO9)RfN8kk!>{$qioq4Bc=(8} z?y+uq$3a1rB*unZ_P+sMl`A#Cxbg6SBZlxehtC$@2|A>x;{hm3i^{m|dzz%f%Mv;& zKuIU*gzGpqU`-k``Dx#OwNimpumG}T!p25PTj{a1xsyC z2@<6$GS6Ss*Prwp91W`w71r`$yhu=W8bf6=kYBKH3ot%$+%${@3rW*bW1o3|mXT_W zbAcsFWi|s;tAEd(5KL+Ihms@gr*=>oJLYem_5Rt0ds@>2E7d{F=!RENIdfM0O?egd z_G5<7{iw*UH>|(~h|=F4H2;_4Y5vju=g*iFJra5rBrZ->EiUQG;_Z$e!d3K*2QcPG8-)F63?j z^o4u~i*D@7S1oaC+@HzMdk%LDa9PRE4-JT%BfL5-_yg!;!AF7B_-(_W0GdIQnu{`) z_Ee?MjITMIG-^As7E1+hPV{au{80@yv zJ%==agZRr1?eV*5zVdA5pVBK{2%~3$s(S^5eboG-6WQ>rv|^@s=<&-Kr;7QvhNV{n zt^1Vn8HaN=<;Cl@FX+>&gvU_g=?fwu7K=jH>0Q$^@gY;foQsB4Q`z>=iE0pG zoV65f1tD6B4ya=?riKQAOdH58i^SU8>psc}GEY9E^H)61be>!i19J_Gn#w7d(Pu;m z#Z*5HPD&TUXsQN5w%H`i&OQTQ>)dw7ilwtcha(oktT%^DNk<~==eDiJQVgmoQ4FhJ z7EBRINz^px`0LAFZ%0|w!aIz+M;V`VnNByh@)PYQH;VYb{?y!>JWkkGD~#u7uEIs; zcON8PT)bF{ZZ+Dmb4exmr7F4zDTs%}_M-rMIMRfw^4rzT!k*>pnk=TI+`ICn?$YpB z;@1rqWRjx*p1785n&h6^<)6-eKb?uUlpk%Lnl-N_^J!e$ze#Q#6x>sFA3&NQ8BwIE zR$j`Sd)v4Yr=MkmR555&asD!L_Mo=rD_t^ zr|gLzgUD{v+<``A`$488bDHO*rq92|nLB_&g4u73cS+un2dTr4@W3M=&R!xHY zyySJ;om$CIR#z)3z!SDFANCot9U^E%7y+MnfJf`y$&v4vF?8;x}_t( zZrZz!RH1oR#;wB-0$mJmfjHu*F3+*(9R}aUPdx5Q`cg zPr;+1Hi*?5W%Lw$v7>qUnr>3!Fh;|uPQVup0QG`XK*%`N1dRt~&a~UX*SCK!33}J8 zxJvO_DrW&0`%{bfMuX8Op^xr3$ZB?C6Ab^?P z#;Th@JnJjjZ9VqE=*=bV_B<3nOPn#>!J4nf+JizbWzMSQu0~?zeeCXQR*p3>2--rP z0p;u#@3}2a!y!h?nK{=vpB!KU7JTDbQjN>gfn+!lma$(8G*BLY*gRQ*G4x{1 zn{g%fsMBZgxg;J zxoZ=gfI=*<6yf_@Njt2EWig~=T!rm}N~FHd%nj(gbA&6HYP@@=hcC{}j< z$NRrDZ&4~|#tgoatama1fIqhu_=nv&={p(InAy$_eG#GmDcjQ6wq0k1_j%H_ zpGk~vlW(>1q>lp{l!GSM04b~Qh87$XYobv?WJ!=P0r|b{icBK;P9R#JNl1$f5-)`l z>pJ|_&7~pU5MU1hSGP;;*^@QE5=&8fBdX9_gBgTB+MtlIp7aF{RT!5A0FgE)Ht#HY zkGXYcDY)c8${|0QCZ;LpqF&2)twga9yKFixQl~S>3K7<*Nz@983LBTB8~kBL!-q8< z<}k}uiclAwA{o2saKhBJjUQmrsC5!k9_HpCS=#roen4VI;RY&zC?3dBHP)GsJyr3b zX zo5P8<$?SX~^45%C;$=B{Qt4No=BJL)->3sm;H8xB4ubrqu_%w6#Wfq$xnNink;3RT z7@DQ`ga+#LOwNr;(q&1No7FCBbFq8loPd~4A2{USH+}`MVa^jin`%sEFCV6jzl%R0 zxrS2Y5Bz_F>x*sq-nG`N1I5I=b8h`RDNqY-h8 zmXV7I?G@V18OfVEO0%S?G<$0{=vOh;Zhj!Bnub+!fUG`Z3f8>5ZRneH>=o2B<|r$i za@x|A2J>*!wLBp`R<_M+j5wp`ce4jCoxsIZw*aF=lRUkb^{r||zE}=jB?uqAsJ0J= zQVm7P2hqoDA=)eiAN@+o>{z?cj9|?P)ZYMbHXGWPLkZ1i&MPqFcQcdbMU39+zdUw; zpM97WhH8(}{J5h_?Th=4gYoMeT`$)is*PYs^r4##VFJeu9wM;UP3~o}0DtpB55^+K<RSYSOTNJe3=a%0D$nHFBt!TTRJ&`FDB5sI23sBBu31er@YIw^8^E1uisZ|+C+r>{G7o9a` z`@FhJq+wJDfj!fqy(0|MA?aAs@;J=yKBb6#2gV?(gnrI1I)QY8RHA2yPHq1KfI*gm z3=4|ZX4t&cba2t9UM*up&`*5h)hGv)Zv`?y2J}Q;Gb70?kSPg8M8VKRG)1=_UFgch zC)|(Rk)i$QB6=|TmS&e~^P@u!-{zx4SrdN$(xii{b_jw)H^y9t2dH?<$%u>^ zCJ#(9;V$d;L(Mz-W+GhLh9DGFAA&UE8vwvF1A2RFXtX<@ry^kpbd@InI3Xu{+d*&- zetp@B$g}}yR#1<5^rMOJ9$Yg_f?=(Svx$ z;Mp2;2qp_pc9v3i(?lJQ24XYkHYp$IX0~j>6tU|tke(20JFaTFU{xU#LLr&}l0~ma z@>=}d2v!S1@Nv1bp+8bQev~6Keyk#Yn@hTMx*FwCmPy<>iWb(ZI3w18))_N&Ksr2A zh!1f>F9Lu4_ZyU4+hRf@bJc4OLUn0sQd8PQe0EKKn*$D-rI?Nj&q=N`6SrasRgC$C z+cyPqyhTz24iEYHPQ}!~m!r{2DmMg`x?*KlD7IQh*WYE@wi93>3(d21oWD(aX?!KRJDeubNxKe%3*DCx< zsgl~qq(vo~N;226jMD3(?^9rTxP2(F=u=X>r*N2;{5LB~ZT1Lkz!l|_2PhkO1O%Z~ z+63?e$7ydjrChVJ=8y;ji=|ecRGJylPxT=k8_Ppqa%nqRU)Bj6!Q= zJ~!A=hAOLeq?pkZ;UN}7QuVopIYG!cSb&)8g?UaE)k&pbTe zp3L3Z%}O$aZd_al7fz>ix0LK$oRXpmskG-Rr z_X<|nMg3(8!6pBZVF1kBy;J+=5O?>Pw}?!==GPYdZQ#kMISbza2aU*&>8sSc#^kEu z+YAH3#pR2iepUJa`zww1Q|6#G|PU5Zz#8V}dymPGR!M zJ0CllM~o0`2zM|vhzOavz)^@KwP)@}kabK=fwCLDlD}ZH?P!An)^(?@us%PT?kky` zdRj8eP|2%J+TCI8KYxt4zVE3iE3+Lv)#Ak7;$_6H3}63!^XT7u`t*M~S~C25Q~%#T z`{(-<4F9;6`?t3KKlg>vurNZpzN~%xYi9lDR{H-^vi#F8{H138Dq3jl9P~}C^=bYf z5dQPDO}Sp?t3|SThZ0&UL?|w)8nFOKObU;W9-pa&C>djI6^i;rE4MjCMu9B*rU4Nm z)^fFVch?a)X+hE)OjVQ~EHI84rV}OJn-Y(a7U4ikM*n1wJT1#ogJ>gM3w$BwqKs3m~ z<6CSnak})&v11m?W$#aLk*CD1oG735x#}C=q2q9*y_)Eo#DXEeIfb^w0RFc<)Hj+I zyI0%$rfT?&jyxQ!1v6-xdP`f4SoPJBp`X9aSEh?U4k=$gz+{(n``NylK4x@aW9ax9h~);?ozaa?<}>!#cFlo_A8{rwrav-^7^4!Pv&g z_&>mg|HwTXw0dGezm}l0&Y0~#0qA>rdq?T961sZq;hFYIXOe5>g{?^ z_-BI*bz{KzNRD-tV?9TVwQr2oi&!2u{Se%3`QK9-CKSaesrZVE=JZk|YCz>)7i{9v z*JX0Q5xZBhteofbH71?dApDw;N$M1x<=iVI5VhtnRM{f7)#naFNmqb?H_qW&HJRhF zZuQXjkhbWvEJ9stm6+yII3AGhvX~#wOAN>+j-ar+0E=cxv%x*Q9wcf`Tq=N5nXPz3 z8g8dBUC4<9UlUww=0I28Z7O^S_Ss#N!{nz^vYRhwuv(^*)i-oC>_Bi?mnT`@eh;=( za0(rACa+rB3b@!ualv1v)TuT*M17>`j|nlDh^dZbieaQxSYm=Cnv7(Og~?H6ny$cU ztjr_jhi_N7whs>1he^plG1f=NaR1#L<%s(Jdh%m8aSY1aec!<8J z{6PXmCmCGZ-)H?RK9mSf6t}x~AjI%O1s2gZ3?>IWM}Wv&WDXn1d}R5j7QC0huuEV$ zH#J-i^>E|9*zj`xUK8yBi9$Pe%zLi1_3_olZW~esVx67i`S_aPKA6Rlp86>Njpw^c z%s%$$%j>?=mbf?$#V^CGqgH!|Pgu2OlNn?duaE!7**kby7HwJH;mEL&VcWKC+qP}n zwr$<8nPF$xc7`4C4vr^u=xIvZ-^}>#h8RzGJPXz2tpL{V{7!$5&>r7N zUWZs;4-sAmvTGRu6-Agum_&n-NfeXm%)l&xzMcQv|NnIz|9h9w|2X6PYv1~h1#Av7 z;imCdTi3(i6hhTQ=hqVKahqE`~I>UN7ggpz@KBAt#wwkUE7co0Fs zQDbeaowSl8?9lgip@d=yUF!j=Y%oFMuRRBjlc`Xw5z9noK{u1}yN74(rh2>xjB-oL zQyyS@6Omo;A|(L@{>}b)1;TZ`|rE_B1M4*^Qf(Rv~NF(_}d5n-{h%yRvlEy`TT}h%Ue>}t|GM{j<9%-HI z$Bq*)Wd{iWRnS)X0&Yi8808<~EV z#01tO@C3qL&c?~!KG#X*+g{10YJ5^zpJ>diAF-gg%~^()@Awg6 zjXPQM6aWLZKM(W9n4r=oKVZ^LeGfZNgGzC_@!f@ycvI~EVCIaiMez(q8$2YU($EJ) zVsapHa$-iGfE{>4ZdMarr2;?M4^ME3HLL{8c^vjZ!;iCInSaf!Z|=puZHzxcYV4Kx zu-7Nc()oXv8v6rYGl& zz{bt!3E_dUzY_2d|5;E4lE$I6{v$7fr!LXMFX(4yf*Fzyy|3?`BfU753e^gwQ3#X? zb)((F@d!0KLb;CX=vRwLqv&xlm+TC~t_B!**i(sI^zRHAg;=CtWD{+gCBaSwstI+X zVYCNm?!T6|=7T!2bKZ|&q4dTNJ%5r%+jYWhM_&d*aX1j~Q@2)w#A)b>&L{?g7C!P% zKel>|Ck=rx_I-K0M<*6Sh4+FQ-P~#>Hlr`=*fL(Yt{sJ#jk@sb*Im~bu0g9zWo0>M z7G~O|)hQ;9>l_E#Szt65Uc9=0VDJs3ty*tI zcN!Qj$Ft;~k-$F^D*3@4B^ABlM2GoHZow@WO=#U&Wjl%5pL@RWsP@XJkiAK`!B8#2 zMTiQVL=V}e58JQFtEIT!8|~r~)}oeZl;#4HlJ-w3%7N9I z?PX0)yah7OSkf#_-f*}iy*F@vgnsnDABtHm%7Qb>b!B*9O~@kYsb{kVKs!o< zt{LrooN1`gm~$`h|1}QyuifC^Jk|Z98yGq} zoBsD!24kI&1%)s`K+$sl?(N8bG=={t?(p{)T z;$FkWuq5_dhc<*pZQ2$Z`Lgu_xsC^{)85P5inaPCkcB~x%1&+z4C{!k!g;U<~OI!SVXo{j{zd;bd2~Vea&lTY=5Dc=?3-we$)~6xRs;(gUnJ zYe3i)!ETluJEYDyNnDPhe&f9ao%}harTPAAUh=aKBr>rg))nvmy9G8G@ z8<2}hnnQ?V0>gbZtKcu1>fJSj1+-rg*IOuIX!>fp%LsdERyr53#A3(kVz z2)2z)dQTIQk+!9%0hS{n<+&depr9RzKUy+bl+jBVK)`w<+(0n^iUxC?BQ}aeCWR^I zg0Xc`I^B)Z#ve(-9?Mql7_6!(WhXQUJqV{@moWVmIuYILFH=0kVeLwr*jW827g>_% zaJ6o{3Xvr7zNdkHb_8t4D~hJ?U@;^$u3#1=iiXUkZ#A37@b~gIsU^@u^qQ~>6d?Fu z6M>(iQ)oXA&AXz7_u(z7~wx%+2N9$ry0G413E#~n(GUr%oz8|+3GCFIG2 zyNkpdzd&2O{OJz6M3ra#(BYV0F{e6O>SQ8;u7(2(2d4T4$1GoLsoCVZvPl3mSfqAa+P26=i!M4g{b-WwJ5;7d!^81l zqouY3wfudnskV>sw=2!bS7LX*u`%X%E3-k@EjOy{(*vv1R7Ti@1j$zRrs{M#3J|g{ zVec#cz(_9bynjc^!kgDF5g~b}R7sKu;9zw5FCpBhApq@x04=CCdwodS&Bbr<3&c4!nB_`et42VC_un?Xm~6+0a651BX&~uc)C zS64nm-mbP{FVE_5!0$m-Is+?cE$g-VZSek!cL*Iw65Fb+2c8e9_YCz;?;YIE2FDb0 z#fhQC4Ed`2=Gb%vX&K`|b>tCNb*alwwKS;MGSVbADg)q#zLCWLZXMq3 z%W>g^qFy|2qL_HU(G&BcCmkh&g78v^4xTDz@%-$!B4bQjzK~;cYr>FttpA7Ue{+{E=PS`rc55;BD?p4t4^$3r)3@d8H7 zRu@22M{!M{kF)|?`ALZ zGqX^2CYizIW-MD%tDf5s`QGk!+}gbQ+X_463Y=bcXfyMPlqDC6lg7QNC*1=a3YYmz zXJLNpILw4)Q{QJQFX-ftHT~Vm`Gj0x1{KEz)?~$DG9n~4Mt!_Aw|0ev#cL%Wxtom% z$(T^!m@QIrq%#pgr>i@H8o;{&vqbEDa0SY5UoE&2;9 zoG~cYp%Q;)!?+bGN#UvxkMA?XnUXyssjBNwYtA=SM69)r0pkc`E{iSn5|-!^HjAy* zRnI{vkFH^|piKX|4d#zJhZ5;9dCKY!7K6u`#b3Gxt|!Hg_<_^h9a}<3Xpbog5g&e# z``>VghN{HNb=z&OgEzWd^J*iArtMXm9T3Yk;jH_|dl>THdog9s3uvV>%GfHa%1To_ z8l_Kh2VQuLj8IFWTyUp$(@s#cDnCF`Lc<{2RT5VIB z5@~s4I9Zs`ackz2AsJ@V@%5Y6P}P8v{m?Z)<%sPob!r+i6eAl)t^~?2B&$!Tu1~%H z7?u;LOOconDwzjJ>Izo(k%J^5>_)lmJ@lb3{-!rxsr>Z+@m_*u)cZHe@C<8IOtden z@41r?es-s$SbRr{ua7p_EZQsasacDZ-kS=q?Yqp5xvkOgZdd7fBGHu>upD_-RCns9 z4E`kZaVyH5n^Aw@yJ*yU9btZ;v6J5>o-}!CkML{_Lwz@rd%U|a@@x&4Hb8C$cSYU5 zKE4UKK*SHu-`b(phgHZ4&R0P{prA)HU5zN_85*mm8^v4N?sL%eR_ob|1tmV`h9-rK z;e)b61S)jcj7@+hE)F03XBIv;F@_{AthSC`_)i8 zv7bmaS{3(s5j6OiA00G&%rxQ^TU5U3pjl}Sa0)C7`oU5#f*cVD%ZmuG3Cx;>jS7O) zhH?`ps^c^5rOPd%Dz53xn79n_j;po(UTXKOO0MGdS(mH0B`AK1Iaz3qYRwpQhS;rF z@jB24_9wLeQz>O`s?NF{gsN|`KymDvH7Le+yGs28tMUYBK`hvynO7)i;JU3b@TqhU zu3tcEn-Qsf)u6K7ezwQI1!Q5|=$|dNPR%{o@P&#tnQN;|h++$o1vAQi7_~!+Na3f{AXgst(ft0xhSfj$@^%jYpdlaqzEZWJ9~ z_MO0|DX3&cub0)9e@vZuP18dVl?DzeQ=-W%MRCtmqJ7m@?qdfA51i4R~prM(lpWEGP-9Nb5HOf_|oPR`wuH}uu;?kM)Ni}8TF|CrHF4MuDpNOhUpYhiE zZTs#2pQ_V;=tCf|camCv;Q}l4|0jLuf79syCmwaAp=tkDAM$&y$NT|q1sbV@Osz?<+?RcQRnVB-S#5W?}4aY!(f$EXAdm>m``1OGnhr_DU90OqD~ ztBI09xCA~m8q>W&a#gkKG+UwYH&Aaxta?v7| zjXRct+_Xs?Cp}60wiI;-Ei<1s%mVRRuLzsj0=*EsAyYK~Wxe4e$6vCxsY|JLTH=yQ z%L#+R;N+`^p^jARU3wdBAI?vf?7!~rIp>AOdIuh|CVsbdAixZS+8j`;NoF$T_1h-x zGss%<(O9ew8o|@R`tGg6joz>vE2;=dkPpjL9t2#V#(?hK%SV*$ZL6k@PKJ`xgF80r z8Gf#2P#%s(P?y>c9_0U_8X_Gi$!D-OLB-1&0NN?XH#&ZvjDV|=4YS;aKYVuCC4NN8 z0K*fd0%;72U&Swi!&JRQKdKR^4G4_!?E@O~uT)g9`W{={o~FX~YRz(_Vy2&JE`cDt zp1@~K)j^{Pm5FF&H(8M8tW3LMpx6>(*u0`@uDpXbjh-@0l~6HcX+XowGARjW8NMFY>aP*ZQ`|MQMleY99!uAuXA!UHPm19CFI&Jx{vw zWaTmJ&H8dTWiXnPtCR0RW96}Zg!&VRhKF~JgK0~{jv!ivuEn$mtyVZS%uP1fu$ny_f*HsWa z0}e>=h<@s7UY4|C#4*iZIzcmy+oTlJ#9#iHM!0Lp5!nFL1*;7nEc{sfRC#vgL@VoB zrgLcmx19%Sc3a`8&^ehVBk{H+BE0FMvZS#eY)2Hot$Y>tC7AI(wXV z*RD3`Q#iOrU>Ia0+E_Mk$`A}tj4mdL&RLXM6rTLT!2A=+_D!VLw=3r*jfDE6#x+)GT@0fw=H!EE~VB zpH`8dTzPVqJbCbvg)?N<=@;Rta$H>-K31+$)CT1aby43xjRQTYguPC2MF<)0ksJT= z&Hm3jmqzuZa@t?78OP9nmmL3JBF6un3DDL4D_)@g9poiw0c8Qk>B`OB3J20PFyqoS zapR_B+sX{@x3GwAWlbejFG=zW{&?mMFCmG-Sd+^cw!{UKq)9}bb?yw7UoAkDoX9SM3>mgbGKrM9i+SEX z2ts$60i*USw;Vq#b#l6?*t zh}oU95s%@*WqPZ*47D~N(r4@_q-a2i>#J`-FFN=_pD&$dlu4aM)>v~Vt#}B|Z!yp< zF=?4}3oOL6OJiybY+4iy{qij1&_3vr`xW2>pAG@z+w)Dn`(wm-bWD`VC_J&StU{d3 zlx?&RAzmRgk|XAYhJG;vRVGE$j4CxI?Ikg-vVlrSRtN(0ZuT(B^bS;rqy%r=db(%` z+cO;TavrLZFR-;9sbfDxWan95tmm!s)}on%u;mk}0Me(B3j>^jlF4rCDF&hVu^M;P zzjCKd98lpu)lx!<5`YHD82g1+bSS%rplbL8UKcG)v4g=W;N$|8O5#ih1U@Q z;Te`2S0*De#6TcstY-jEb;(OZ#5`e6lAjRWiPASvzX!$TiEr|}3s+?MDoR>(btIto zo`ket5D9aE7ucUapj(g|L=y-po-eINvlpCl7}9Okp;n#MJ_EX3)IR08r0EW!$fxj5 z)aixxNc7VC#)stw0AZmHiWN|;K5lqi>+Z6o@Zh04zoxi-le(|>x~i^-fOdIL8}1lI z1qMh-z!vt;A!7Qs_5>v_)+VZK_T&G7rSr3+dY*Ho?FY(mY?R_0;9ptGUFD@^lR}N#ejy%EedJQDa5jLl|cq_0SiZ0up zy0Hi8W~`<^$Q`m5L};m0+tf{q)LA7?Y6drM&oR{%i=rK(iHG1ZykBGIk;t-?N9OJn z1>B4+Gf|8;jrPL8I3~nsWRep$?4I10wu5oxQ|NAaZNBMcaH*vNddIRBS#hT?C|+Hh z?JZyrln}|?8Tey=J*M3euVJn>Y~13c<~Pg0R5uTAcF4rtbD{7^>&?Wdz3}w)_3i(`k0lZ40ps(|?VxbIf}_0FUlxSDPVluQ!TE|_Bruc2X{uXU zX!yfp5bUvCTN+$by)zA$Pa%uvU1Jr|^@i{+oTz1#(iZQ$V4E*&FS*pDsIg_!6Ryye zBN~MM@`2PO5Id+}zYZd8>37gz>qPy3{_&ZCu<%SPMP-S;f9+dUnh_Hgu#X7y11}*j z9?1A(k`i=r!m$%?>-3A$&|@*>9EqU#L2=^Zl){)-c8_L<r*Tu{T*}8Lx$i>;7cjuiPn5|D6e9G3>3}>M{UdMDdmE= z^m0a2ilbs6j>9i)ixuVK309E1TDkI-#9nJH@7hRP{Tj^{J#f8XQN1$)yaiks<8{amO9`iCRmKtxCTSh0wG$VGofTX*;%f$3c6ro zXQ~bn2wJUP=E3yG{Hk;o9ZR*=@%6r@55#?i^30qJaX7j~&m1#*zdTfi*4k;18#jlu zs!N^mEh){uqLk9CEi!Tq&Va5J$_!Z4M7v4D+(%vy#=0fSB*hk+(eO5_*6p^~H#dy3 z4i6=*0;BQZe>K3-ssc?~Y|tntG-4o^y_6q$ZUjwf;}a}tu~&Iq^>9&OSjrtNa^^A> zhp4;|j1!Cp^rg+G%s__9w6ZsbLK zo}u;($7bbF>;rpAY%2`v{Oe{a64QTh2 zp5bCP$F-*>Ci$I&tVee!q=BQk-y|xLV3%~+>Q9W+KZVRw3VU&<8ZDJ_{uE)?py%xx zuiIKKBaYF*DmCkUDJdRNY)=an0)bILNxOL6b?Z^0Jl5{ur}(qyW4Y*~vOThoXtV?pOW=m2)BLpj7x zM!L8)lb|x9XZu|n)gkaQKgBR)df9xhq?DGR@68*SaT zbp`!A%XGc}KyawaT;QFkM8^CxfSS6)0i4? z2lFc*&&^?IF+M)_@4K2uZpJ0h-f03?wH8?doS-k_rD^z-WNG|VCy=D$xVByH| ziq8f>ZPU7FR7;BV4s>q)>Z-dwD*ZR)l~=mJpEd#(V)DsMkM^_(PM zyU@05{fs|6KRM$~B0u`1;%uO%yb*RV*r2>=h1yl0QqR8Q3yEsWy3_K0&1XA;)4q}` z?S2Pp2BfUW_g$5B%kMk6rA%~9)xDQ>KXDG?9lwC!(qWC&60q>)9U1##If81gXv6m& zO6;!yAOz0y?`@KH>DVaV-|$89p|l1%kp5=DnG5G^I>J(Y3dGiuIXG$)&SO?`W|O<< zKP={M=x2ih&PtxmaHvY#&JSTWSLPc9`*i|1Yt)|X?}`+R?5beAp2MKBN;aL-LK=A! zwarsW+SkB49eFGW+0Bj8F0^a0SHDr#ybp}F-k?6#3b-!1QTl-V}Qpvv26BOTq6tZ$@!t#6?FT_xB8Mgyw9 z>|p~+ER%mhMe$8{bUbb|Cx7a5 zQ_2H5zi&&g6=S6fhQRf=61s=pmHifhU2wfOY*HguZb*EbuzD(dl7bD?Q|CuiWYmUT1M z0kpO7H=jJCyhGqZY!TVW?EY*PApS}^+aaiN-@O`LWfS?90v;{xwHhh{#W-AoC;I!B zUg$mJ7J>)9Twh|Xe!3=i+F{)~LE^YBIrqBJ_%YP}`hNcdn`(p|`Y~_9d2<-KT^UJp zBje21c;x+;eRxgI-Od7y_Up5c2!~`|wxmX1jI?6WVGmXkdg{O#TguSsH+G5ls_Ttu zEU2HhQb4s4P7=Z2kCCunhx9x@sM5pKybQx-;&Mi+Y|*tUFw5VB3Y2W;(P!eaQYPEQ z8DKjqtbikYinE7_s~=S31%4){%7C-I;$7=eY`r6gYHk@M@7L7)b{1JjVb*FUee$1k zO^45E#YcbuIy%^ zdzO)7A*X&O7DLa>srfm%g=8QPCX0qJqYK*eon6b2@do zNVUS+QI)-D-vPaE%bVo?bL1;4R^(b9XI0P3s0e8YxfAi*Gc$L+ri*93neNtBF9AdH zV?QJWq~;6bV7Y3zOPcJYZb|Xv8C|glW=&+2irrJN!fT{S>2ka3jUr_us5R_ri0m6Q zBI-u$p_e>^OTQhZ#Ldq@!1>nc$FCaPP1}YpEkD-FdZ6B|G_<>zGKz;L{yUZuA-VR# z33hDT*mp;NTc-Z!@BbR@{8uu9_1{BM-3`snO`T}1{@aX)Zl8lQ%fAeE&0k_p{QtGK zyQPbT@Lyr{Zm@D-7ptAu>N`wfZDL`sNlT#K zK67Q1khE>DOW>e;o4c8fRbAB(a|E__4?>G2%(NyzUpQ=?^{S25fA(Ks=@PaG30oV+ zssQLA#=3%FlzzXkNK!ovR^pnS+475EQ5YyJ+2E?}DL7s&qM2~on6m+P3Zl1_Hy)>&NFcgvowI6!_aV!ud(&Q~pHeWw2<@Xi@iWZ^#*A zoBU~hp-J)sJD4DLKCRt0PCH>9Z_kRxvc&F5Z%(*m8Le|H{KfU?B`}Wyp}I0KUPMgy zJ{|I|VaA`ad`WSq$3^eK<6=l2{WOk%qGLVFl9iQ}lju8eNvRJ)WR5sk7TVB7VJ2fg zSe80)9)nw+7_Bo1%N-z2WNMX=wIYE2>+y&82q9l|U&g%aT<(PvvcI863BhcyUt%Hb zuW#)Ak}o9XoS13Gu$%v~T=~~mhVp;(Se-qcT}*BNJE-#7Wz4qcuPx-Z8W0fkzfjg_W@eZdCmJ%Z&J4f)fW8dCCyyE$DXO&m36_&ujxj86$XS%sCS< zJhb?pTm{v<@df|qsRIX=EQfC@A~iIreZE3mOj49;V&rdouBPhT`9rqhsMkU_$}{=v zp4=8a`w5PpXIO$l<9NxWWySJ@9o*4mD~2}eSd+-D?$PqkLMbPIaRixcK}<)XYVFDs zwXR$~LtwaiiODXZ+P8wx(|!YFNFJGeHSgAD(1hi#;;$D8KBFTmAVPajn+%yEzV*LD zX28Jw5c+CVOOUT?8^Jq++Q=9DpqJ^^jJt?NPUW)8QrJKiuJ8oZAO@Q!hf|MWyJUt# zMn5eIrBY4JE#@L{1ghb}?Qv#-Qx8zEio0H2V$gV(2ZKE;?HWzCDN!}hZPQF0Bj;Rt zMncys->Bd7{Ic8JnRa~fuvSDvth0*_QXsolLad(wU4t-Mvvo>UfSupABAW}&i0J_x8S09&*v zF_7?c9T(WVIP&^NH705lYppT{nn$8jRx+MI@6&|iWX7C|u@09C1S&vDf=mhnr|}Y7 zDvc^MzKtJA;l{cqz#qJ5ND2@R(>9I2eC83c6dZ!F+e~fhB3EX@Vwd{qJ;N+BX0d30 zU%54=S7Acxz$uRM7mGmlpM}`acD9QC96-F}ZzLw~S=`}2_Tg`#hU`AxXbecAm)d3M$AM8!Y4JUoZsr5#%B z>Fn%0gPt6S58u7I>l&_Z=KZ~m)%Zb)=_mo^X~WFNM=cf0Y=s&~{-=1k-V9LaA3e!6 zZiK|OinuVk2)sibn2Jr0hJu@+xe@zX6#c_Hnu$a)g~QlXSY;l}DHH`}B348GeI7v3 z0e=eva8QNATKVcirdelW4u-gL(~NtsMSD(`GDcaAqp;Ij7m!2DZTz+0Hu(iVMix=e z5K`|jG>YUEU98@@_fgkNosJX8GUW`^`7{pDU7UxA#m77A4jk(LlFI4M%HX6yLU}$0ZeLE(z8v!P#X(Pdes@`B~>;&Vk9IAk9Y(*+HMeF8z~9%s15q>dwvX=QjP z`83zbp$(Adu%^k;1VH4$lGKA&-)q5ORd-{{1xTWdXT2YTlipYf9?q)-}y@AjM^R9AFi8;Fza zVhXk!T)!~(ll>XwTh>z(G0Zb+u$3+>ZS7^eTl3k-OD8Pm^R~j!26k8-?VcA$ zn?j27g1PozQ^_UdXfeJyhv+|krKq$Kp3%IM2{HK-8^jjS$h34sx}Hg@pJF6O*<9U|0HyD{ z2I^tAF^P3ZO&+!}CMUK(l?`#k7+VLw5FlNycBur;_CY)N_kAzU>Xn{373?GlAMMO0 z;gDpE{JLlkIfKpwepbJtGaAdf0t@RkH~Q5{am?R<;QR{65JRp7OEn;}M13!nemcjfQ)WkvzNuerM5Rn%%Ors^!Bb4=JG za-&Tc&(A1hj`JIBSBynxjjzb6;vD+mvW5HyWe%&o-8pMda7T$K|kXc5- zSv3UB-omVp5oQ~C=`4Q~Gg?%TI~2;Se*=Z%Klkauv7rMitfE^WM%2v^axxqSxIq`e zg22=V^+$GGgUGdr&%{S^keFRgeDc-<2T%TqHHy(ej&g(Bz^&?^yFFs{!U^54SY6j5 zxkgZ%BdC&c_%?)RHiFa@OkxSR4dh+wMwPXd27L6%i@}-Z(6+W~kg1l|0)$$nve2e9 z3(BtvPY5g%uZg!2HKH~q*u;ns-E+{7xrsNd?>oVSs}qMZS=%WD5Z42mJr=}{3nvqb zD^2Ksq6bMeGd?c}E;4N}{5CRyTBt2Wt8i_;u#|gZ3e_j>X)?kn3tR=Qpm*xCi}=#N z#4fx`^=t?Nxi|@#ggE(B7?0yWJiEQ~oWcXQ)Ax2;ZR&lq(e$5ulOK3HlFjAc4e6Et z@LP_PGY=nr1d+J;0rSKTM{g+d!f+N$lW0__6#yct5yNJgeBxtIi)ZGN;AJzB+Bluk>RHu@`FkqPo%8y8jPnt zI8>7yv5^w~Y1iX}Vfm(iJ=vOfRBa^vvr~n%PA8*kU~y1G3rt*ki*8DvPKU6jucYkz z4R+6*PT1Bl!&i?CUKdhXOA1mXpIp04JxS6(T1E5yhyVcFw9ongTN)oVv@f-IXFsI1 zc(REQ2GaUhpKIU$^a3NxlF(sa_*ENHuA>%C<4ulPh^}8wp6&J{f`t2`e>o)jO*jT^ z(^?Ued@zhKzs?cTxyy>yuQy!P8tFSkX;^vpUO=FM5KIE+#h49=p0n_za&=<->5f$H zmYRZ6FAJm~W*KIFiwY-pnxr>Al;HOak{>5O-#FE|yL2X6m*Q`K z2x^V`)hI!x%D60p9*$5fx<>reScl?9{ve&a>E>2KSF8-xte|-FQ2E zoV|S1NAG-dyk4FCv7J@O7IwcOy;X->efEFzWbIzw7IGty+o7&Z7t{G*bml(sLHKn%F~LL-$U(Db-8K0IW? zs(oU}UN$SiA;M=!v2|nQkVT1K+3&MwbrCkUh`G;*G&2@ua#3DhethY47`&o0#Q74M zJ!vo+N2ejHtDUEyDUa)CfKL#lJ7N5KZV;88-oaIh)8;%Ohb6aU6v6_L@kOVbZ+)8D z@RgGw7|kgEjcEf}XTQq4u(0!T_M`xY(>9qZE z^6v)$(m~#p-@I40;eo6&^FBr_tnA*coqE5jH-9dlIrUXGkqW^B0#}&qH(8xBS>oF3 zgaywsFKNpYt>2A=V@f8Anor8LzlaUBCtNc&Rm^suao;x6nv9U%lMkZCaMQ{4@tEnG zYOOBRNY&}i><1|dmMvsU1>x4@oWWVI#W3q%%YO4Q^G3uEqQ>oXTv?2!WLGqAoG0eH z{hDlVL#>!o0q8qT$9J=cD$ipy|9MpK&PpS`DKBlQHnmHIVd9c2rcn_@eVk-B)GF)P z(4U|haH6gDg9u@P{IHn9TvG}wi(%^`;p;4mlK`NfhiANC3aEv9GEBp+=Lxq6rDj^~ zC%28tiSw;KS2xIyi0{g?Df9X!i$rxNzuPl9kp$}!S*pC-dADB}DnTYbfRKdh_xOis zQUc8QEFsS>r^sSp6<2aAXtue}z|#_YPl3Fn;9s3^lfE@E>kXxETBEG(BgWZ^O=wx9OAwOC zWb%NI1XSR|j+nFJ9S@#9qVGi!yK4lhiBvcZsxe)AL|nwqK&$NGm+!o9ftR1*RF7Iv zx)O__!@F%UZ{kfudD9hz)ZyG+w_RZehx?g#} zvhSkwqPx*Lc5w{LFbK^)^gcPcPhv=wJPpg)^#&fZgw4N+&1O3bd9h`#)&y*3@%U)v zY6~RXn7zz`J|vkiOYqBTOV6#&w*REC>C|uc9i8>l%IkZn$kN}gEx9zXS~7jO8fGRM zIZAmh*HgdGjqQ=EctUKAO7yB8*`Ggb@b)%#@o%gkoSs4oHNDex|3Rez9NW(NY>;P} z(_Pk2JNN--%swp9hg=@@xR~STW`B0dyoixuc(%gM3#W!1tlvZ{Rnrro7()1JF@?0 zZ`UJbS?l1x;d}4YVWr_{gK3AD5(uH&pn*>c(2QnA=)ZNl@Jk3^cDOsOSVQoH?9t{8 z&3x>)oyF5q8}Zo8PZ~plSxFlpeY$27s3HA zc%p|Ts{@CG*z(tu$=dBDhciSq9nyjCzCEsDk`SiRJtrWrUv|;g5V!ATp1qgm&49H5 zx3O8WR?cq37j@?m5W#+D?Ux@l{{5mG+1PYrBYK-=1|jsLX=e)+D?Emy-G5reViS*0 zH+YlH>fIsJU}<{w{%VJ#?ZthD_S(_TM0e8~OZ=cx+uQFf-4W_$$ZT5d#2J;IuRxBN zz)zJ0Cq5!5tvy&;bb}X@Ml9}*1#P?ACrswnEp&Zx4%#>tE=2bE|A!RqEV8v0;{X9! z&jJBa{g0lWtBd77D|}bH8*Uq7NjG0n@Jv4yjkitLlAb)wO|<25I2?Z~@o-yv7m>}O z8U_M^1|(V3Za)P-xz2tKU*g-U>IaOb0!d6Xk;m00D5$$`b#=~RcyrxGf}SY<5kM%Df+KPXmdjIqDgS)X@#{cPRv-RPIf4ZFb_(EQO=Eva^OSPGs|y+vdjqf*pU1gud0w^;j=~DO;Ar0qyx-%Rz4M0o z0Jb1q%iGbT^!B9csWP(&ynm7M6OM&ARVFrHbKqeAXzLE66%>-DKwL8iys!5YsJ6t> z!dc|=APAzjO|;n^;RBm_kVN`x|AF$Xk-flYRqifMK3}fF7;vhPv#Dm;N%J;OOKyLA z`9>NpP8`T=W_VP`{H9wCIg5l(dOj$ZnS9ZW=2B0`&G0F`t-3w1KJ5(?n~l(zL0)*= zA{jAT82SfsR~93)O)>(_58}2L7{7~L&g}@NH(G^q`*@8>L>z#mbvDnJxL=43 z_Hw{Co(H_P7{l#xoT$ufkAVQ3C^>NEZ$!*e&L1Uzz)4{B zSqsTzNkFj91PCNws-WtT5uuUsNKDch+K9Zf6;_-uv#_&g21SLj--oj#+LK>?LiS@F zC?+|}N+CnO+Fpmk=Ab%s1W?mbhKCNffYI%)0I8Q9n?UP+N`u|ME$fuEpRTa}0^hOnj;O($zJF%Kn_Wb8v;IS-x@WgK!3+DU1GiaES@*j%$7 z{LaVwcDn0sZUa2dyd1CXX7@nu@Lc%cm(2QK-{;GB?y0s4Pr& zG|dPLuvCCr7TBX&Y0QYP(;ow|xBhXcrqpP)L(dT9TCMT4Lb-DLGvDKFa)~ApxXw^i zXQ;IOEwNU;|95?nwc?V5WY`$q&hrO;DFvYesdo`#6vu84(?)xa2j;fNq(SBbIBBia z4E=^$6VVzQyBI3#_SHQ0++t%l&7$N-+-wodCi4eonwSeP$Y1j;w5ExCwwBS0 zx{=Y=$r>>e>(kMfCQdJM~6 zm5$OuRd8fgj->W#vDKnv%blYhMFLdt6pDXiQKGE$Xko=`FC4qV1WW6RZb0~72c%+Y zF)UtFUlom|O~vCbmEf5HzyPFjPm?;1ClN7iXT-?e^Ef`F-C6|xs*|vTc#wL2Aj)5z z#0f#w++dXLZ^j8hI*y2g$P&SxuxbV^^Wuh}rTL23*6Z7+pbFUiCZlZRA#a#DK?$8? zEw`g4Fz;Iv8NhC_75cG!23uje`|ksEt>ELWk&Z$19~|T0N_(=TVN?TAZShkjQU@iH zYJn9$lR07tjRuveKWbKLue1gXG6zd=sZVdm{xaoNP}~O zbH4=p~e$o z%#!q$yPkS;;59b_#<*JeS1%a)H-E;CzUPL2-VTY!hsD?Qd<}7(=JE4;ec9YpI7ghu zA#Np;&mwI($6agky7<19C*KQycEI89EiJ`p2L-3%5^GtsL>hJUZ|>I@R--AiW+Xx> zcpgQ#O7kyTO5QF!MjUjQD;lQu?U$KFGzV1iz)=QngC6%DeGccJ~cR%`5L+3$glc(&3C)tS#=Zhuq1bLVLK z>N#S*;1{1eYE?9S!S#+i&`ru5Hb{79>|Frs zL}v@cyd#L_+Q+QxBy)xu0Us%Az@eN8JvWmPkQu1EQ8e5*hw;pQ7!DPQv2<$JjfDXWFG%!?A7Kwo`E`sMxk`+qP}nb}F`Q+p6SE zfBj9*JTueN{p0?-kNddxx!38nP91F%9e6cu9GGsq#v7fJ^8iHgD}x1$YpHd2?iXo3 zkihTF-dM@G;C1}Vd#rzl2yT>xc<)W}_|T{b`bm7;L~S89n%hlS`AJrN8ZIHG3kkY( z;c<2snsDU8ba>eVA`Uz)AeEKQgW%IPiAFrvRiSCLxazD^no;4@iIas9zMWO7g#6|X z4`fUG9-}qYm0n5Aj@SKh7D`#qcK>KvTi_bK{4p9dxa5amtKt=-(gj&K>g2y^?NW@U zWWp$tuyWEeo8D(W7cM3xSy?5g2Tl<%C^(eyhJ>n!iZx0tW$FY2N}MGQ983yz#9V)K zbf7Zrgw_);c^2F{!Tx}*8F5G?z8Z7k5gy>LvBbU1}iXAHBvY#%9_7en1MxD@-n+9uXbdPQe>mB-eT~3`zzBv8kl*~y`kv3XXfylKus}UPad%TodCyl&z_fdLqQe%KsqN8VkWV{uX zt(+KXTjKy^YU((0H)R(QT+Ml0jg_r#9r!W;Z_mL;kp?%EH_q60T9$y&D(Yd(w|_q>d+WaFnfPHp@jKdtJwYJPL6 zj<-AEmArOj9P)U3Wf`}xnB|wtjC!)9H7I4T-4119XC_xOU0Mob>u_pDbnCah+qEAb zRB|p%AY-$ziq_S$=49QS4YwN$X5{~9%Uoix6`*ZC<{r4GHhWA$;r!j6m}ui{BumWhLHfWpDRyxs1B0J*}-&jXU$B>}MfJ{!RF@MwhDj z@}ux6b8S&I693-XzT)=uOmWt7_cAwlS9_gchFii5TSmQ zw$M?sl1zw=Z9my*r9$SO_MOnSL7gb2R$4FFWdbM4Pfo@FN75}_j_1eCu$7yo%3>d( z4~ORZNvx8FKfhU|dRjn@>s{HUvKmG_QTKtDwtAcA*rTASYpr73q|Tj@zB%4|c%lqV zh#qPH9-6A7UD_i;2Z{iyq&$iRtvM1Gigt2>Q?nB}x;_*?6JVtFk{05M{eYWAF95f` zlToq_M+N+V(UdmnP1%5Eas#bKwF^hGm_zWs#!i>}%rU92)6gGNZH7CZ8_X6*V}f;v z38~)#VFwDw*^t_X@>O_jQ{^c)&BaI=M9el!Uf5Jj2&PRNXKW(}cx_h?r4v%|4%6*4 zN8quK9^;~&d5E_zGq_lHcITfnp;Jy=!YtM(xXMMCDW-GE^qe;vK%%rfP5e=9QpEgB zda6yT+KC7U?veUbcfE`HYMkUP3gqZ4hT3Y?Bl3H+DB1X~{LaWV2ZIfN{s3)(|4HJZ zcH-ZlwOtmcsa5!J3fFFS#$rxo89M2ryso*GoDZ#`ffliW181#dI@N#UEE-o!0MgEC ziX02)s3^+#-u$X4LT^Epy8j&`gCL#2IWKyuGi{L@6|c&Sf`YBc!h@czTdbC7nP4G5 zJL@WyMaQLP!z_x5znOx~N3^uW@{4}=$a(lQv}~4##4C_rLt|(5WEx@zdY4=Du#0p=vFkWY&mSnf(ZwRO#ZcaRHAdTd z`1ou$2YNshs{-j*a+mgT4Pz4iTe8!0Lz&rO^UbHm3?kbax4{YJTr{QftfP-d8hhLo z{P~~jsP|`vXtCD*)1@g)c#=vKq+0ol%+*YY+@mrdfP zYIt!0A?T4-_}kuET7;B1zkcPFHrIFX(?Ai7*y2=dV?4c=C2h1-^i@=r&}#!}w@+}l z&2-qVx@eTR-MGzEdQycC&Q*?8=A)KLac_~kFM-aWsjM{{J3;R6dH^{FgoRKfaad#k zdADS7OWYq>n#fvm>k^>s<7VFg^&KmE^F;;3@CH8_3IUTM*>th!acPp`2N^(7MerG=5( zI(Bf{e5uSVBD)dUuoelUGntzy-sV}4FW5#H()UBA!*mEfl=0NU0WY(k7jkCJ8PSVP zi600PYhsMn=mfz{-_G|eTuH_nq833dIP0b%h0@O+|&5VMgyAweZOM&rcuyo=yc%@lravn}#h==?c6=kvUO z=KCyb^76WW`Xf)}ka3J>R<;*Fy$sgYJqkPu z3%2SpJMIsN(E>1nHN^xx>YRA|-Ky#%{eSDOx_JLkc77Y56p_J zWV3(f;0vBkSMajgkp&pGrj#!?XT-&zAM4BMyKEu69mpBI-1Xr3TU~`R9T=1s~LqjjJ z?0i5#E~GK|heXV8)p?69FUiOXIC|vf+wz-dRi!M^Wpgaz{Xg#tFY{<-l zr8FXYjlI*%@6lB2nU)UW5D<$PeXWp?5ygrxXQOXbDWt7>LShzLwnh8RFg5M1Yc^?7 z_Ojy4aNLiDh`I``!|RjnC-*DNQkI_NYZv|p_5jVvIbOE@T0qad2t1xy1dDvat|kP0 zNg`!yDN)RC!E4c&`SWsxJ?XoxJ(PeE*P8K-m-f&jdqF74^`Se`0?@QR9PkK8kzKQ{ z{vY6N5De2s8A(jF4usOHWIDXwnU|ip>ZU5X^})riv5b_z#AiE*Cqu*Fe+XvX(xL__ zG zj?Y2OH}w@)&S7q>)8!9>>bG|<>h*JM^}v600~8nFFU~fKLEp=TTfU>~h$b(0yTstR zx#=`!)Qj0_2if&x>2D$r174sVS)UQJWEUjyDd3Y>3EVj%*fR1gh+*^u%NY2k6rq+K z;hh z2m<+VyKqYi^KGWMIBeXJouZB5R$dyF9Cd^F0=SAHJ{#zXiP^>XtP(Hm1;hnLE5zjU z92D6FQUioW8xT&J@Cqr-M2}Cv6kD9+baSCZS5?aM_8N;j0SS9eF576YcalD(34s(> zLLnhB3gd>_=k&>&DnS6eOdANiI}Dr%-^xH$7nFORTS)}lEs@O>MG428JgECH`Vl3V zpjlQlMng`bEEx{);)3rJr=-G00>02B#Q!Ja8ihQ*98q{|9{#~U{OzTW(q1+bKVZ{r zMI#tY9QP=sstPg7yQ#^lFk%*SZe>86(B^$6qybzI8myVr8VC%ZrUR06mJjBv zFR$m!=W9pKk5q-@IrnC6Os{uiJzn01m>w_W$nMPs9}dVT?W@vlK3C6nFuIpv=^w#_ z_z4V|i-!RN5AJ@gD1{atU8IgifM>DjEP3>$Qo6E9f|pDXK6S))uv(K_35K=GL173WKmNZ4hB z@E*k>*o?$ZMu0posz4^jJ=Rlm1#xT#>6Tm2n>=Mj_+_9oAOAS7^gZoJNXP-4^$cdE z3dOe=YT|N}S8Nr*(@As!3IRhFUZ{vLn?T%!6vOR30y8*rG44ipFFt0;t6X;If`UMz zH&Bg<8@jSY@{Fya#{;QMVLhs~SceL&|^a~c{-rg>$*gOZK7Hei39ZULp z^drdkUO+==ovO3%wqA6}FSp@-g1}P+73ehd0Se!{AlSD@!D^QY&(v3(dnQ(r)L9yS zZ9bA$0@Vz{Bi zy+&=_FU2fclN9x-D~IM)qUH8M?S*Kn z5?-gt>VwX_P%~3!aHZrjJe_n-;MLX@3+g$jed7xa1 z97{4kmr%DBWuR+>2f^~7-6tz}5_mLNrkZvoOBSaNJH?u2>8eN{Hq6kUQNycjp(FaW z$}`kaHz{Li@%;JAll-@>?V`L#37zAp)r4&e@SbHj?;6~XgeABKh}yI_fywU?NCf3; z6JV!65V@S<<$> z*+mm|3)Pxo>$a_0Z6~j6){t#m_`u*0-9 z!iWP0Nv`HSHtlF$%$m`ib6fG@SlRY@u`Q+FFed_nm?p#%!iLT-{q&58@6{8weByS* zu~Rf{X30XBUN1cs6liLYdN8?>@*d^PVWpmLi#TbMK1oAzVnAvclR<4{Su6*X+9rA3T-4&%{qXh*wzWO)@#Ho(5s|*Idn|N}oF(v<2Sp ztqw<>)}c6C_i)wsF*fiPc4NvR&;B4z4xc)ntgnO^rrq4rDt1hGsY3|3;?C<4v)ruK z#jWSo-!pzjTVHa)9=6`kLWVum6cyhyE5s#<1QM!?R6kwn=!qfw{WTt#~&jY@a40 z6fE?GeMFxoT)IRc!q~cF1$)-K0?s`?y~W&Q{c_5)y0t$*@4;(-G3kYDSX~a2cg!iU zY`oig{%YdMZaa;i5rcQd^T7phr6<4WHiJt-n(wlPT9O~Z@mketaAGL9snU(G5|D+Y z7sh-TyHbLDMo=6N5xna+y)ZOO;^2+id+QQ1uo>cc1%dpUmN_2rXCh1iM(T^rpAOJF`<|L9o%&)ImAf7SCev@x*w=VakIF}|}#-(qhG z-+B!+|K?FPdf&=4-y=W&;E!xl)UsITNAP^E`Q~qhln*KNVtNp07NOo-DL-s{5bxfo z+9Q4&^9n5Q`|5IupD&k744m-=nY)@`O3y&0g)Yk_QNJu!6R#;rH-Q251oC4~hjz@m zeQE7VJuToUHj2BWrVXVUvKw&hM6^0$FjOt2YpcTO4b3a`*I83%HUU!I@JA|)O~VDf z*1)tibK>|Jd*)B2jaCirLJUx?`SVI5i;=>in*Xvk2uS8Kf}h}sPNJ0*)5JEa>Ef5) z0EVwJ6+M+z($?iqDO4Y2v7~i}ekc4Z^m0`Vj3mTba{F80KQ1%TuVsXg-T4-pQT zDSv!q+fc*P(bJF^>3|o$v6@PFo7v!(~6TGiho z2KA@*KO-YJ#EQLfrjXvb{1Oe3-eXTJ(Qwjh?0YsrT-Iw@@bCRAl5AA3x;$9+!4T`O zR2rKw%J>(nph?uWXk*LO<8eAj#mAuxD#aSgzkD(GpE$&ylnP1>NL}qvF*WJPbD@JN z>0>twng%K3GS%xuVM+$=dmNhXDMctvNC&2kV-|t0Vd&e7R{&s}P(D-!JaKxSo3{va z0sy6)l41YgYiEyk!mTp5O`I>?`FS2auD$W$%y&Mm-@CHaTuaMnBdl^ayib8#T;cmU znBn1;Ii_>f`jAaZob)lQZ>^iGuJI-wd*pbu{owcz>-h zr}6N;TL}#cl6bU`K%F7ZpD>PBJn+oS<+I1&&)e09?3>}lpaxw$2cu=Nlm)t};xP1_ z7m`FZcy|z(DNmwep48I1K{ez!+oaVN=P+YCjwC?nY5JKM=D;~rhTVNqj($a+CLxO0 zW7axd#>d&rK#&{6Kq2AexQ$#$v_LRI0W2?L-Zf5sF?<4u0@dBGTUX=ZQ6b^tJDwr8 z>=jMT1=5C|->KO#ztO`k_lMLFCr}j1eQR%$`w-)M$X(riaKM11Y>jzQ0=NSVJ$cSn)VtF9^>Lz|c*!iX%4r`&5 z!1x=3jafg{;joYc&7h2SP3X?Xwp7sH$@v|oabWxkE*iJ%;}B8O5d>ROVi3-Xx1~cb zOZlFFk2f6#s)r(&HVEfb*TX^{R1O>ALm)lUrD+ zW30t>mBs7YWO`1_PUy;52Io-V2gcb?G^Gr<0cDD2OGq72$@E$w12UgjujOxx3v zs8wl90{d17F6lZNKrw=kGpeb##62lQk6*|+E+y8!5n;|;kHXv2aq22lg7J~cT7HNH zPmYjw)Eb2nWGwH`7K^MHcUl}n2?Kn#pY{UI%<|%4DrVau;?#t~7HRi(OsEd!;WA@l zEZ9+@Vt`ZPTBcZMfEJb2SnECAkRrnMa0}CO&>vVdpOe47@W74d$VtvXcD?%DvDzWt za4ctpbzrE3o=Ux7VWZ;P8B6ym5K=@k@&;$oq+Lvm_9Nd)olEsjX*|;o3OfO%Z_WOwXU8A-m)|DfvKCR*X0Jj zHfNg^XLlh6F{C&<)=@4TfOX zn0!Vr5azpxOmfc~W(#odPg2NHJ_N{)1c&9H)xmhb>5D~uc^|gOvt>qe5cH;Qj}FEH zbYprJuxumx*3^Zn)h^FD5(o;sw=r9r4`F{UZ#JJhSv^nHX_JfO9xU)`u6U(D*`YAf zh4Dp_kMlc+X)^TiV8YFUt`QSuS|dDI;~+Z9u!Z3un|2WpLXDyX5*%fyl*p*L{t@U{ z$MSq~ud0UaByHwP>qt)z#>1r9RpjL`v+B5=&3yHnA^I*KyXA6W$pR{M=xdrCKe&~~ z@r3Xrghj`1Q6NyLmYeR&5{>c$^@S?Zzq#`^bnt_11R8qr7bDPxBBi)#^=Rvsc~0w! z>M4&kWV4NVug`at^p$?|Wg8dg-{Qb^-C9>3_#<1f8!%2|bT{fH0auPhpY8CKrRuuJ z?3H4;DKON@PW~v+&Y_l*Kcaq_Y*3lHMGS8dJXN;X05*4$(eTJujhU|uQ9PG+Nv2rd zZ?YI3C;a0s+n1f{MlM#M_UrV?&2d{Z?{eT_K~q7gyH8R*%Va@@Vc;w9xcqhabhDYy z8rQFS>ZLZbdbyeDb`jeH#0$|vVDqC+I-=hZac*8}v2l()HIZZ_HH8m`_^K?Bp7Li-;cxbX8 z&WcaWMc%m@aa0pXsY3xf?wMJViBSv`1oLS1dGil9V{`;z>+^zm0sJSZD<%=`;+BX= z?y5Ks7f_SBHQ@K*M|+z>P6G#uCrS;r@a_)cmZF7p!aNXxqTGOwbmYgnJTyi^htoqr zWj{)iSd(Yh*YD4JX7-j+n1dbiq7#ydi+7Wsx zxl&~a@hS>Caj7X8aoRaR2hICloFMg}#{3UW&>|j!>GDPr=AU5^)V$<;l#D;&#bf+w z>mf&=bdOeuGR8pvp|SIKmc({-;!Ml$$ad&^tdsO#MF`)_>rS@+^&dqk&RWkipm(i1^cxRdb>lyUiDKSeBDgtTXJc+t|Q6{UQDUtWy|5J?Ke5< zpWMbESkF$bwhs^u)21`O%~a7x8l-M_s;^297}88URYhtuoZ7zRm@L|z*4+RRDI8MM z4_>G!M(%Qr=-_CFm<+pZ*7*?&?)7yO@kZL1`FE)K_sq!&rFA76FDWdj69d&@&*{}+$;ie~XqFusAuWjjdWLqwN#5(*`__yV zyEMf^_^p<6++vWK^1OX3QL{338D#PNwctzF_}>PyJ_GA%{G#G35s|Rbe6cd>hB=l@ zM`|6@(>cOjnOS8elY{g*ZajzX`=w_V)M1p(dX@)|d6AQ8^L&uohvPb*iREUt!cA@^R9i-Qiox0MKw+3!7aen( zqh2uwl8ncOc&wn}V2`(%>0+shu*U4e<7o>QM8bh)x>5wwxKP#8I#{KmP{WZ-IEGa$ z_#>CUb*YL3g!Y^Xp^p6tv5)%chQs$ZkLSyGH87a-N1wO4)(X651#y_3V_;VwTOulp zm&fvZ9NfK;25V0p@>GAzoXG3OKx{tt#k&xrA;_#6!M1ePx?0@l?F)9-wDz^w%vCg8 z7jvz%ALFMRZEk;ZeW@o;Y+o!DU9QH8AhzA=*t9fEeih(!MSlYQ$7}kZ$=$!)m3R36 z*W;bcXbsK2AC|42frXxl(LY;)J`KUs==px7A>ZT9|5BarpPj9z?_gu;^sTjQtM}J5 zFepX}s-FQN=$UsYRtd_=9SEJyk=E5WzIYzXG9mq!BEq%xSD`+ro>=fr*Yh3Grt=b_ zW4yF1=Qs<3qGi2cVzMfy;NbxPZ+VaUx1ziHEUM zAkKIBT99&G6f+Cgk5B+Kd(>`yKo+~BSbt``tu%uSd>Y^SVdR}IAraMRFE(OYoToMF zJ0AKb=K7%nA91wl<^)2WKPkWK2s%1IR&S#1dzn!CJZD49+PwS{>Z(`*5E%jyj&n^>`b3vft8{pJn{tYt4|NUe$Yh#;l)ceoP z_D!X2i*JoDZ|6^_JaTL%>?e%m{u8iu(^XUDCx+qjl@!$o8n?MNv!x@S>(QS0VyRU; zthFHDs4MPGmu;7LBRQ;y3mD;WOJk|N*2im4f{YQ?hFs=a%gtbcFE!L!)aUV>Z!I}A zks$qYw%8bV<6w}7X@?4TLvtFEGQwD}D7rY5>xAg2Vb~Ha(=}m_hp=A)+$#afQjQV# zVG9vmJc+7lP&!H!N#_pIL0X2!WzPqROPUhjvpOQs2LS?LbWQe9gg*NoGSMpGdi#dVLD-?9d=If1Qr~(-cl6 zp8|Cd0U33ss0fp%Orwgg#3qsb3cCrfTf$B8D_S7e*k|6z)acm*a zU9rPef;4Ec+ei~5scG$3rm-H_5?k20>FmLZUBv^4yL&c=qqL-o0H&3XW`0+Z+?*+LXdi zz{ze6*ZqcqYj$aYl>nWinD@?sbEEbwz(;zE=c#Gw?6FJk<7N;?u}b|GlzUE20xA1f z_lA#g%*h%9B+`2r10U!kjF% zR+oWkDTNgh?*HJ2{;B5QYzTa1~53}Cn;T5p+sa@W{6 z#3{9!eaGDbeL`IGNDnn%s0|ZsLfPdd&C|m_^rgQ82w7D|82$*lv$In!CeVH%vz#$s zI)Ck18CezaVyEp03NMR9o(OS{*t7+j-ZMfPZ~Jv(RoBB9j$rzJ=zi#-8fgo)G`vj< zb!h9oYe@4KIu%f`t2*Rkn&Y}ezdzNy?AWBOKEW-1;_9$0G88&FgOh*7W_J=Fj#f zb^TDSKTTA|gQb+Ia*uo!rj9P646h$0U1N{Pf4%Qe^3f2$ZxDQk_&3B3|M&a0(zCZP zv~jWi%bi~;^;u_pukhTX7AV0Ja9S#DQ}K`G$-~uAEhf2}R=5KLTf%lYI^+JfdwHho z)75YyCJh-WcLz4!!rt;o*HU9or|}ewQy&pu?k)8&&c2}5AW+0aYV2Stf0v3f@FFu! zJ8fE1Qji)^xHN}KV(ldKqQ>30abI@r<hs2elWZ7=eLHyciJ3`&z>YZPA(US3ca%nh;i=AtT#VrB5@9e zIv0^E4UQDG<6QE_A%y3EO|+r z1qOufW0go6C5b||GC4q1Lyr*Z1q>F@~X!>SK|c4XBcqwZij(%~uy?u5n9KZK^k1Jt(B4!auIZ zO0q%IX>V(GzF{osl>IvPu@~2-5I-V!qLT0$*ARj~Bb9RHxOo7Pkg8|!WK7l!4?C=4j@w=V)g0R|Kk3 z==+vih2dS-5jc@u5zsSOUbr<{*8>KFk+eC73!fzEH&jbVEwnoG!AD)ULttqE0;9Q& zi}55W!dmC@*P)>HZ?eEfpvx4gbU%QAlZt|C|0XGXo7(}!o7he<(PW*BK9G>1+n#90 z?JajoRiRyn#ky1oYVUFKU|{#GvUm=szI9{f2b zR42aD>ta^oAUkD@E?;u>cVA|q&-tmZ${*jK57IF2?wB^mG~qX^s)6HF0KaVT(>1`6 zEK>;ege-h}5#QCLL&9TPPT-H{i4Kw}k$j;Y+#VulpFwM{<{6hVxu}$k?7CS zlExA600>LDZD{NTrlFKmu!eyAOBBBFv^~yFN#N1uM;iW}2FuFf$ku4&R|)qIO0#iQ zx+<--%})R9iATm9izf!r z(zg`$7Q;lyA9(r_wHzYXK>UuTdi_rwxxdFSa7V!xEZ;t@{aaO9;NJn8|L|b64hHsS zw%_HIe`ZsMiha>*-}>qIsKh#%Vx-pNRT4yxwes*0R7rRqy(GY{>~&h}fX;|t+TbAo z9g1h=i}mtFI6T>IGWW)rT4xW*ghsCRdh7qxaF9byjAy1la_-&|eBiYtr>3ys3p5jC)@L&!hC zmky?^M|5TLX(Lnhgx#yddS>9rG@;1x+K?sUT^MW(XYmR!nt^?Zt?Q2>f>PcY-M%_u z_*+9)_=C{oJIJR2sVmpL=>!0vNUMO)VGJ2yWAVnQS?JynN-8^2v;AuCQfvJvE?LzU zQ-K<)N;Uw;_u>4pqkGS>n zNQ<%mciVI^(*Ii-;-96hY7ZQ2``=uBK?ncexkFR4OdsXoIP}U(F0I74e^BfYHzoU{vg zj|v02U3EAV%Md@}aUM7o_fl&H2RkQrl%eHfqiV>)(Jd&b9`cygHV=TKDcFKd;bxnV zI$LDL?O@BiWl%HQDAIRCmi=#S>qaoR6#D})K)Ys;+NRHeCe*4$19|rF39%BT#Xi8* zTYc_%vQ>%p&E!mCRe#){FWRJu5=#{Kx!%!ZNOhtWjYPr&c1INHrOFqnPL&*4Yw$We zQ-DnJlaZ*-k)kL(W3}?inFarrNH;);OfQb~F~o^2HG-{@q?B4_81OAt9|8BVF~ED; zR;Cg3s>#7KRf}8?JqdvtK+LVlH6S%l6TD$HbINGZZ(l^`op&<& zB=8wqHScj7hUPJ{@cw~SWuBdG8f!Eeej$5mSWF2UknzzT@i}F93QJe6-M34h7Y-GyPWL6 z5`c;~w`jStRmYn%8yBlXC(S1!Avw$_4UY>>XmSnbXRI&^zlGKiw&7@-sl znC_^FA5D)QQbJDtJ4O85sIl0b_aGHFN9S{kSy%5gBzynQ@qSFh(BbW&LhsCQU0TaJaWs4^D4jz$59O|u`nMUkU@GKLw;(IM*g zcc9d{C?D!^$1z>HdDon;m$GdM`q?o=%u>3erS>9S;9*evO7<;F)0sV39ZS#j^?>2WH?`dd4iM7 znQ&tVt>g0ZkB_*L&!o&}BvJuN!j)LqU7EwT?BElYUf?4&SEkv-SN)Q?q1S86>2B=- zEzU>3>yOft7^H#%Egrc{)5VcrZEYoa?=WK#K|wW8_|9%sXxxwj*5Ruc7x)9LRDxTn zSK8NGldw*xgoBxn-%&Wz^0N7XL`Z_FF5VrT^o6X#t992V62Ay`y5IiDJ&oCjMCgYp z*r$$CPgriq0gs1*`6i1;~#P0wirXN(~ZN>#q3(Mj?d(3fS$+D zE;Q+i_mDq48OYZ zZXvv*wMt`N`(2AXu9$<69Mg~P!0bp65x z0#3{WwEy!OGfG-tuDX0GvHWdkP{EgZjN17DiHZqR6UFz2p(l23&f!JJQo3Z$;d|43 zl-0js&zvE(sw^x7YlDcnE={VXdUG-W3oXdUomFrg((?wpr)SwZYH1xs?`m=A2 z;6kbxFSn%?x`V0LP1Tn+rYGppuF6#P`mwQ7KwIz*pG=SahYQztvNp8*TaNk< zzZ;}5{+*Q|be>bAad8G)ZZ5j);Q^so`Q?rfQea7_k2+Gs9}+hszifA)7^z8zKkb0G zbuc${WP1LP(S^fr5;*3-;yMtI|E6~8|M^mmgGT7RpW4t8%+0bLWYY#>op+R+1Y|++ zENd{(X=~FvF5!eL0WJ+V7K;GTY>_xnH`S|q+E&_T*;j=qL2uz#dnm|1)G5Mmkmwiu zV?y1L{R6V+Cc1-0|JEE8r9NhIM?#I){4$a}5d8H=*xD&n% zeRL6IuN6uAg_|ID4p@0;5~+zUy`kC|ep6KK!{*HslcQ)j`QrG8N+j(VMqxb3w4aMQ zCU_pJY2+CJtk1mo$tykd516)}Qf!7a!Dun_jHYJiBzwOWBC+5nfgLsH*0O5>On8iM zqeqo9H&qX%f^g@XeS;ynH67F-b@riH$FPisX0yxTR>cHkCNCm(0b58~e(ob35{`a=2&{MRCl>Uc}{-yov?8zPAQZ-_9k z`TsPq|6$fjvQjeN@X+ zox`WCkPMn=%gj71HWJSwqSpzHNCL;QMOM$tqzSzLlV~`qJfmg8s^eFA1s|+|7@Ndx zkgEc~#|Uuh$gJ@8ir_(@(r_d8B`A`oen3L@0H?&%%ECVH)QP)eu|- zNVdX%;^aMc0xlD%E)g+6qjtl9U|w_v1Q4LR4JbyTWd=)Qga1-84Cm~N2#2vPnY4TG zt@i2C)Knd^O$PWV;^U`IG#$d<=+739SS27Kwx_NC77(O8zd*~pEl{MO^9s_b6;jIE z10sIZXjYv?oh>>*lGto2)#O5$N#V5qiNbFVUs*kSpe-w^M9R3?FEoTY~&I>4+$WiOOi!&RWM*2WT5Q5~>rhng_)7?-lwj*T-{>K!imJ`k|>>jy3@5 zYD_UDSJ=q~bkpfh$A&Yjx04TPC~p}BfzmszM8ze1Q|%d==G4SD-^HqC!iB_WGq8p8 zMA*>wTpRPeo#U*m_<+c_`C;u6_RNAN&Zc^1^&@sa?k{U$T1ARMvhV|zCpfJF>UW== z^}YaBS8?H-(u(nl2=O`D$iOa&H=XuSEgnjSXfvD@p1O7KFO+HZ(uNXpq!1vZ1%1#W zEcuY7Aa-s2shB(yD-O88(^sUKQ7Vxs2TF?5I%xUj#G&*Z!AqyajHweY4E5g(%yO{T z!Xo!>x@3({>l=sTY;VS9~0}{{*Ox3yYXk4eG<(Dlf3xu1xJXS*_VJXUtebu{p z6yXZxFk*;RYvP|T(P2;Ux9DAQ{6Dq3O(F?bb7R7m&G+y@2TnldQfXho{|X@|SlX%@ z-}O7x@1E*E>H7W`f+#7f3*#~akhpmt#oLrl%=e)W5ysr5 zQ8GiaoQ;?!M=<|b)0{nC}Yx|GLkfWEnE`; z_KW4$0FV9oNg=W~Q2M$|?VN6Tk6xMS=Sv(rDe`WZq|)+Z@mQmRbmOu#n>Mdp)u*qk zg@rdtnc!|+z_tkq&&O+A8MQ$#7CiE_^UpY#GqOe{JUMRF56!x}cD+sjT%y9&t`t&9 zdK@0cr?7zxWj5X!s9&I_CM>y)p1vE}3c&chi_yCe0!)lOJ@lz)jlrqHX6dkKscn9& zwq@oBOIb5a;0E#t=MR5EGFqN(wtWbDG&N%(NJSDf$V3*fX>@rx*xNR7Fdb=-~u`TpNj?10%w3sp7zU zb>2=p=ZQ#|u+@`u6M_ks^LG%k61abtOf_hlk6^5=7Q>UN4}wo&NQwxwp~UL?8zgSt zO2f1APL(FQks@2eg1LVP1tT~E4Dg$<8WFL!Vaim+A(Tbkd&|S5SqB=iK7103U$y{s z#bbp{>lGI0_os_vxI3+?F0RNq3~{tx2=rWSJQH;aXtVC!PV)z#B6FHZN)0d|F!f=f zFluX%HdzU^<-@iFm@a?GPR2KE9I~4m%`RB|@}16I&i$#8=+Nf3r;O#Y2$3T9t3Hwd zn`8vNUJvb*KxZp08z(n)l z`w{O~(oZ7w{Lhy^7nR#(H_@dY$<02qtyTl+{pt-1^*o&zPhgffb3>(8n5p9NHG194 za(m5#@ldVy-dU0892iNxtC`FsoGhb8VUJSuk=M?#pts9GY~6L z!~t`QO(SgkipBvBOvO`rk$WNqVaqgsW*eG~gR5F%`Y-}|@Hp@0x`DDA%;=cE>>53V z5qbdcFIIR{!E!b%$EZ&~LuwSR$kI%OSx|DyG9q3Ni`?An@*g`}ISMI>{UV_*Y{u z-GwoQF+@4;aeEB5_ry(Guq^Ak{ykwc(AUWMmP}9Dk4g|77_C3=S8N%u)BlgSs|=4~ zS=zzj;O_3Sfp~C90t6?)Eo_oavShOxRziZiyZgc2-R(=#i% z-#*XWLw?+T->R;zuI{d`UcKq^_F_HMGxuB>m*G`f-I2civWI@2J9*2MEa~UW>N@1z zm5hEzm*<LqrEMQ&{HE=py<))|T56_)YN;x^aE zUiZ${=fAd@2D`j<)jYo$GcaOfLbub*sm=A-6jWI-SAuL(u7nhc6X3?iaZgJ?wexuXApZwF}-o+k1T9 zin-Ef?9{GJ;DZ)(`rjX#@U(A=wcT!dE-U1ldD*}^#e841Slo7x%b+QFCuZE7W~<+_ zUH5X_Ew*Uz%!E<>4@adc_|+}?T%TOyJ`al;+|l2)-b$>d-PquT~&N5w|RIue(S1xs_v7D)xL9UYtY4$^PBFk_PF7E&8W>8zn<8# zv*>(}{%6i@+If1zozJtvJ3Z)dvP^jMLhDP_j`uiQ;ndrk6Z8%8ekxEceWmr&j@G!k zU}3e`4kwmpeeffTYE+r@(@KAMH_fEK)S=+Pse|4Jb}pIg;pglb?v6fU?6%p*%X`)4 z9|=3EL@mGfBzEG$sza&_&YpHhK<}__6}#VbJ2+{A@1BgU8=rYwq+_c>trch2DE;0( zd2nXbfGci(-P`-M%-?5Su2kh$RVk1g+6oJod{E}-snCnvVDH{_zUSu<$kgh zFLh7Lb$OA-Gfhn63E_hSn@?-jq-S`odNU?}&6cCaySNb#JqpscS{kp;A|ZgVi%qWzJmuW~;I@v*cf=n=ox^%=l-e&hFZEtb5#%dShy&(`z2I zPKX@u6@2dBCk0k3f&&}mI~6~_NK~71qi<(STXgiTjAPet^e}$$$^Nd&^=T7!zPNK~ zM7!;4cWy8Aa#m2OxcP<+2dWpJR!CiPNcIAXyM2P^ro5aprfR!og}ugXJTv%itxZ=w z>bAd8a$?#EVf9*WI_guPd52fs4=w5%m(nma&+WEjy{61AKk8S`m7RLk`>}OVpZ1x? zEl_XnzJBSW^-FJUOsl(d>G`T5{R`=DmHV70;Lf3OEkAva8DFr#v)Mbm)g%9@^}N}T zVWR?Od@Ou^OTWB(Qobu*=+~#H3NdewC9JLN{_8}ZIa$MpT)ckC=-H#=#Wjb|?bbJF zTk7DvAtj3B>a5wdKV1%&E9nD6YG%$~a8IQ+S!brk%{b5P$J4D;d$}&@RIcg}zl8D| zM+MG1QOJpFY!Kh zQHEkio1rrKCaAvukF~Xy<)ccy$}98w(*@j1+?u; zuN%-UYvwH{Gya!n*Q(aH7aH&6nwKdea~FcYJOcrUg{$fBcX8gXRF@7synIied&8y;S%!M& zzc|ou-l6c|fmr0P@m%?O>iYK+1Iv8M8g*w*g!V`Aku53)rvI?@;mv@3^FQ}m@bida z&_>V7eUDt(Fmk`K*3=pYjz{m0esp$hx5CXTZr@ZOI&b=1J%<-r!r54r{F~~396z+*g-K`cSNv9U^!DbTvBqz(qxrpj zn>HC27?zwLJv99wmk*uJ|662TYO=;JJZX+^udpdTUZ0v=&(WdGi_bGpboiXM?Xs5M z<)X)aYG*pSq>M2-B4lhT$ImT^&#ebUhO1W+Kk{Rb?!y9Q|%qlIIuT@14pwbz7hA4L620=umWG$pf9EU8mn~G_m;TOiN1K&XnbA`i-qM9S*!K z_VVTTqoY>r9lXkLwSmTcYaUJ3)n$Xdb7sEw*Y*uXul>mRqe#=mm1+&Db#mjRr#}r( zH?~^l`gfe~jV-6fJwJ8x^x~Ywx@VbQ*)?I}=o~H`T%WXER<_Ij)L-iFK3}HT>@8Q@ zl|J(|b-rAgpOy)nGil$2_{`YCtxNh;%yR7gi3`fr-)CpaTQPU@ zNefTRD*S2W;~h&*uPk}XeeTaEJEGP#N?E(#zYj}put;G@Hi ze}7%LkzP|?d;d+>QL__tM|~Q*;nk5rXAUp;FQp=8WU2CheeV0?{)W_hvuCNWx=m>2 zjU5)ITKpr^;A``87irVRXWg#ng*JRE7Ct6!MuYD@SyMkeuTGyOdSJHv^~PkyQ|YBX z+^v!CmCu_Dm40S9aBuLTnzKF~t~meT5W}?Qx85B;qiUD)+yH~$r&W5_e@>V5Se^0i zr23cZhK_AszvJulA11n-Ek1SM=+a>ihqS5G^hv%cThFMTr`UI+WXRfc5p}D)JC!kV z<$*7eBLe;za=h@NlKJ*+ITY7Du507lYX;AXOZ7w9smPqA@9%m4?LYA8gHJX7ZhGd- z$bhfU{2INS?-$=G$Z&pZjS7u!<-d?>pLd^WBLbf8$lN$xk!${@C#5UjF|NzqrMut9 zuBoylG|v#a>3!MM1q!A5uSDG=^$JT1Opso7b#zT9`HW<X zQPVATd0b12G2lYJLWwQG*WgzTpOuzem67U5Ep`=uZz=vE$L*^rM(wmU%c*4pN-n@i{-Pwq80V$kGDL9&cTAo8e0{VizolsJ@?~W6Fk7<;*u4O(8iDvTSel{TJ1BA zX@e?*t``7H@{xTe@&f{Xj}f(5Ycf)8R2q$XbtrCL{5g*KV`Rb+K+-d~9~l9GFlCW; zqfDXVBO$Q~^M6Qvb?!%69K~)iFgUn%KuD{ArY)M(Z53b*fEyP#H>W?b0Ge%x+uS~s zDsI>WP|p+@qF2T0^hVd1a4ROlp>4Y`tiTp%+62TJG#dN}LqQhe)K@8uCcO%X-A%aB z#)8~mwN2i7FzWyqizfy75xb1?A%jh^Qqrw!TWY=sr27OozOy*9nwXUd6|Ra^AxsL@ z8C?^UF&a_z%^U00vOikv1b~v1EP1js0W_#W;hMl`xk|#BA~(<}caX?U?#YlJNBvF? zX3McAjfU@r5Ig`GiyQtb>-`}dBfP(KaUm9+CodDJhfW_Ip@B~pH|CKg_xE=}Kc9gV zl_@Dg<+dHB3s-g5FmCo0*E%S80_E4%p-#Os9~EKEt-ud*nj=sYYOxCIj1 zfRylGOFr>&KADFNU`RMiv zdWdk0i?P}sC-cu9UVBM++X^2&orQ|DhyF1d)hay#XXZrNx7o|3EuqP`7E6&7#0Fj92lz2XhJcGpEnll` zHVO0#XcinGYMr-BE;;6d|2z5UE_%_xYJ<(1w?dOv+T*(DeW$XkuV85ADQp>hhoR?^ zctL(m7Zgy}ziEK=0Dx<%j&1zk`EK?F+XS$shx~0iQ{=BwSU2IbowNG^jLbrY|xckgITqEA=RRk-=Er^MU|AA z5a+u&Rr8OJ!L=@QORnpXAO4Bo4e3@%)2>RrQ5`|1Ug=IO)V+OO9a_H)3vs8wiglC} z!3<`?H6a;5%dbDZRsuk+0F-pzadCOl$vRL1T$;haY+9-tT6eM9G)WIiOvM!Mh99Bh zB2R$&63f4EwYSLN797Y3KwGzh$R<0E_E zjEVGgsUPf)K{Y&cskgNwF#VV5eD91~`y73~9Fj-(K-G0IrcNM=pLcE!Suq;M&p zIi1Bm(6)cF%7OWPS}REBu$1VmuKDn057M|~{gKzgsm6`UZWk0&viUQHv{j*xu9wea zv3M>So7W~dRv=`Wv~9PpYz7yVYher5dTUByTTz(ubc)#AB_eAImnnl%S!_uz-Cafw z(w{>|1({t{MwVQoeUO`}T6ckV>+p;3h>z=T1FQB>pw%55xL7DGJtBRb-*$Z-}bkHA{=*o zsKSlA?lqYx+_tp}C#4CoI&7o4hSQ@ZsTJqCf1<)>D5wq2t!gE4t1kx}wi(2;N|GI3 zS3{H)$+)4@uHCrXy)i6j5hLzlGxSGbLv?I~eVT znG8l-p;*Ab^h2eA`IN^_GRx*WgZE#!jX!9IPQTGfLk zRPhu(57fC`T$*F^lXkS#+sMTss#BN;wt)pzaaX@7v$0Eh3A@&`qx}_a3zS-`P{yjQ zBMA+T-@oAu?qe@;BYoK6dn=)8o{JqlillH^>thLW`m>uz42WVu5si2NJJf9*G?&MuE9;Bt{u8 zLe9oexj!XqvqJXEN+2cI1Oq$Q?uP;IQW`$1IR!nnuw&4C7bPAJFi#6lHJsltJ#6h3 zRwjWIivdOLXOU)@XgS~1Dk0VA zpXDhji)M8m;6SRot(;sQ!NwtMbMnbN=uZ4j`AUOeal&YOs%}zXGuTB6Oqirn5&3a# z*Q+JfcDPCvtH8N?G>Nbo7}LV@F7!mx$MacYJg6&$q1M8IYLM|$@J-2 z*C46Z5l9-KA4Ryzh$9tIO$mJ;oj&Q+)+$hhMj5Bm%bYNI-E$+W2fIbyePDapoZlnv zJr~b;xS|na?RN?n7g8|%kC`5~5rQ=_3KhhMcbqt}VN3-H#4(>^h{hRNU%kEK3PH$6 zCxsrh2genuDpn7eIVaLxyP%N{PQ(qX30i}#!flg^pKt!u^!&4DBh(u>Cq<~K2KQ!J8x76-YV#0Ee4c`EQJ1%Uh*9xB zJ~rcIxZ=)Mi#d}_i%lhl9LMYBZ(9X&kZXhVu2LBf*{v&M$>TfnCQUkuTInet1g}uIh(LWV1zHpZwqjR1;Y_HqOAr;QNU;ZsDb5)_HAWLlGogDjE%)_`BYsEzdnoyNb) z*EXpLltPX9N<@ns-d}ZMy_=w$9s|#ha?=^B+m5HxCvI?K|1{S8c#^oJqrc8;FcFd- zgo0~Q$op&BhpbYB8tHo3e*!H|+8VPYR>Jr2 z(ed)?Mz#SWk=pzkr?_x^Jv;}FKn!%gg5}Xgh9d7&{ zYN1W~1i4p;d{~oS!xS!VMe|-R5X=oIv}w##%0>xSg_>C5T*t>R5Ajd@ z-iFx#leqcBgc{xZMB0BKO<`n<@N0Pvs<}!wlz9NN-BTUU)FIo^@MwXxck3n}C*HiX z%@k;SSmBT2y*j?_fI?XAl9NK( z4+q8Bi_aAJ`S2Sv_rdW`&ur;O&h)YYP!)zd#Y~{-Zx?6l0UIPq2DGU>=_eZ~LZ>rI zXfWf34V?#Lkkv(mLOaH-{bl1ssgx)d&$h{L=RZf)g+0DSSJ6IW@*vqjg4fe5Ly(Zx zm*0MbINM+pbWB-sxD6F*i+l8D_~P^e zUz}@}d^mNON-H7PnrZ(`s1CDVpTknF5_4<-iX*Pq5UZ1diyArd@onM>5dzbjf4dgQ zhLiC^ljR7%oheO~T^MTBpi|oAr&=l>7kBT;qA~HPf;qlZ?;XAIJ^*I{kUkbJw#*j5 z#AS>s-iWRw=Od^!!UXPBq{5NG06h*Z*QSCy&2mS8#fCh$i0c-#_D&(7=EV@9m#l48 z+JR~?#o(=+1YCJHM(M(t@(#OtvO_qVQ>hlA(L$OUYv~cAsWue8!&?3E|7kXGe7N7UVn&W@IigN9YSvM-DrBwHi%SMV- z>Xk8yP+fQeQ-eF|D*h%8&J}|&X-+F*!E?4@;rvyv`0a0)pvH`!$`!!a+l{eDJGtHG z?EqD4!!)LFl>)UvjBIILW_@bE8Nqbns+J?6&Lum5#eJ$Upy9(^E}&_3-*z}gO!LNn zLY^wa@@l!lRez-m+<&WF4K^xo1R|hXORtsqbmh>SSBKtaKO=rC4+Oy z$4W5ZkVMf#j{_%(t%#Se8yvX^1JPg(qT{d!^6_wM1jjN8B+TO)s?lii!l&h8qTi4n zL)&25>x!X3@1GXTBU?m1-ziqFjEqq#Q2aw`)8)ds6kV5LIFL(T^ys^i&t_O;q{YZT z%cGA}Z|9eSV^^SvXmKlw+#<^X*F_&imMBhI=) zIlx6l-EQrJkRh=Aq`4NzS1c|IP%;>)8h+w1Ic9&3aYZA9l#qqMRY)+dJ=Nbk&kLEK33MOg1N1-ol=E7^#JiUqMqBa!X% zc%Q(juVxh+;eIQU8TD3L8n!YTRxkq}y#So+5TH`8S2B%%;gtK^Fi=kkkmvb2f~*VeMk+WltZ!7oHsN}pE)pP* zt?CG}0TqzhGT$?VxU>K&@iw%!yH#@tS+bvxC+xpLPA1#Jy*8!ny;OCFkQ0y#6R(I; zM@DJzG4-A@Y{GJ4?pyKE9NN}!gaaO0Qbiy~AY8$+cVRq2r({;IDanD$L}2V0J#_hd z&^L8H$ReRB$@m0Z)`$8J$m&Cq7r%$xy4_$L?n%oERCd-`*OC6 z*Ooz`6@t|{9XJlFFB|Un>?D3(n#wR{=pcyo7Gm*7&iE6*G=Z{lB=ZFP3RRq*5*^kL zg#h?V-yF)VMr;(xNYN`xiGG=&q*Q`Lhl(xPO(&KD``stjeVNdnc>%ZpaZDRF3b!D& zYRtl>{}gu1h90;gvuPrM_&VE|<@Agf*f4lf)N)}}uB|-k=Jv6u$0@4pD4O4xy9Hk%B8POPljC>Oe`Qr=Df0Ty``QqzH?GTbppvQw#G z+7`#4MnbvxB6*w#m_AM(9_~4aixYQz;uUi7We;W_K97eR z6_0Ibo;mXf<=_WAC&%Im^5rn!*-)5EOyXiR4!0N+>*Q=3f=a^_%Rw}HLpFQ)GtMcUMD9_COF{^6q$ZAoTrQ5>0JuE)2fTG9;$PMUi+0i zFah&j322DEhgD~ed_oM5!NHvCvZ~SFFuoMX9Hq}&%gvP!BPSU8_9gP>I?`ba3Z6izzhH;eI2FJdOI<>T}GyMXP8!$JqU+W z2^yvYy?z^QL1lP1p*!GH0XcUtdy_mMQYJ=WK=~Ua0lHUlucB~sSMb##Ww|-tGjOn} zHaiX*p|v(~2nFV=HE_r=&OycnD{JW7Y`?K%>4q23ucRVRD=Nyl?mTprmOSmLuiGLJ zHfE&@I4YAjG;4kqRMvq?Fh!;OR;P3UQ3MJ5l|~6BVIzt*ED9EjVC-}pYS`v9CNX&H zNZAV6RT5+}Yz-{B0cxoyP)pVwP9vj>C5JeoOoW!o*Xrafwfat{FbUHj9a`L0+YLXt zyg0Pb4xXd9A4Y^c)|pr11StWz_Y%0PbMK8Fg{o@=eB1OJ9ms|SPqp@Tgbs;`l6KM}R51z#TMkQ)#vAn_p1}BsD2mI5S@mGt<$IdhB5sKW4Z-JM1RD2I$M#`7WA@F>%sT_g4d}e^DlI84-%mJ?i(aWk#wN=~#t$0S zqA&Ku-r=HYbBf33Q_ka&SnWsDKx(JEKXxa2W*Rg?8_0|E&SSwBg|I?H=sNi1MQ%1O za?vR?5~DW8gxupy_b+58g51`iBen@nrr;B5u9Im+8Qf^;IDFsQP_Q6-A~X}-CFd%` zSAxl!H&reXCd94MY~XE3MnwH>)1nLpSg8WzmgZ9avh%s%9Z3e4=d-p4 zg+V911$xPM)%je!Jy~3a7wo&7B-sza*N*Zd|0N3-(K{NP@fJMy>?JW7p=$14bFymG zS`>j`sb+kY74=pSlYyHJp;WW?x^ua7H=!sJp7242w2|bDTW2Nob$qrs=j&eIbPB6T z6-r!@7vUJ*Zlr&UBY2qCg{070#Id)WO(L8Wo0hsml=jHO#VU{yx*EUR$wA0^4{oQN}X(if`Ub|c3o z#E$8nQr>qqnJAsXs8zD><=x+UabYKL(cq&8x#t6C^HGOuQJF)cx6&W%Kbs7yZusaG zefEdRK}e30!q2K6wgewC#AtJV;e1Y7BRjAt<9EM83$t=8$?SOKbOmXR?8xG1rp%d$ zIfvk*Bd%eOolYh;jv3|Xd+u2l2_C}fq0N(I;KGbV?{;molFXgtbhHcQkgGm*Iu|{8 zI3z-)#{xzqs^Dgc&N=Uy+JO)WOX=N@LeG+c6w4>Kc~G`y5NJf;qeuB`r&BSXkCA~^}+p0I{&l1NPQ z>%Q)uNAffF;|rzeHF}k-^i1Ju9m}}xuWx9yPAvR&auPE?+{YsJt;(C$0qD?*=ujo4 zvA%DTlb8{eYgoM8mTxR&U15#iB_}UZ5{cQ9(IcC+YhpGp%VhHP8aTI*E&s8(3W0Mq)AtOFgNshlG%ucN$P?OHu0b-D#9$vl$We>*ofr zi2@t?pgQAEr?H8T(Ilp|$k5O8J>T3GgHb0zm(@lZdXgvV_%~I5mqz2Ssj{+aklsR` zexPeWd>pgTPzGN|w4@Ixn(7_Z)F%bIn=2|W% z>On>+nsjMryeS5Q>`M z5^|D-GJV=vIlmK`kjgPE2fuOL<5NE9l(fjkr_%%8IhTf1*_4fw3qBz60EsebA`1#R zQ6JJ(RD5@*ytND(Nr}yNnn*ts@pXbr=bQ(tqzC6l4M*NIC)ok*kh#ItxPF>e)+v+%$ZHqj{&;7*p1HKDHDl$vYuZt-0)FT&6SPC`nB^#!JX9>X zF+1uaT!yScTx#c`*vY(ND+p1H7Ccaf&|h;3(OqWGr)XWxDQ>8|vr@FGz0=Y;!V& zQc7(Y>Uc3n&VnMQB81HVu%VNW8dr6$LP}w7kHPzeOgcx>mnxGVtBfWHBk7IF+tr** z2UX%onyEEg;cPck$H1k9p_-LY4ZSgGtmSMj3CILcht-wtuN&{$)yWT1Q$dQ}%*j(H zc}NAR$UR_jHFeS-uAL2xNSP^mak##&lNp&e0>znJ9MGyob}&(a2_NdLPa>pkN7*83U{|mgpJVa@q?W6dTr`EnN6H7Oc`p@Ag@n6fcR@JK#$WpTrPYMJ(#NEmnxpPFL#A~5-s6_S*mNDRpF>)UT*)Jd3D zSuAkFDSo*cJC|SG@NhhNsM9JnEx4yx)aJx|@d4Q3fXm?O@ZMtu-aERflc{Mm&DkTc z@_}+?Ygpw{qNS6$XcHv3d@nlSNKJGZx#&&LYS&shmx~{{+#+J$LSMj#ADl0k)Fv6Y z=&|W+6n6zna(3z40-Di7Gb+lMv$st)HfAN6iHT^68)#8J`xmZ-6ClOpX*cz8AsZ19j}ICK=G>TXiw zPL=rhds(AR=f2R%zvwmtHU4UJO>R>DDhry-&ipUrY|6o~ul@MqD5kAKlbdNsI8PO+ ze4I+fmff7|IQ=&8lq*zv0~29aimWLtnaFbEfjvmCAIkmZCGc>pH2Aa-GdCV$)J}I z6(PhlnvnjHgE~P&8(=i_xnY{_&SezHUN0Q@dt0@xAaVpmEMj!MlZhbNi|wbQJ5^iR z1zfg+3%#YX#pqlv&2(Zx3pbG+3K*`pzKR+f=UgVuwJOn7lyFef0aX2-&gIfVX~feV z+CQsa@e%$b{%Bt^of-uJ)QMy#C7{V1`>9{=^jL~<-yLk}0P17!3$iYhfE*|>$swXAk~a%YVNGx8ic zy-D*>;-?wzTuwnMWq5O~hFwRlyWZ~t3FP*{ z!015k@(AbBX%(dsD^w^Pb$ochjk@)toJ>V+)TqP<+=bXNjmtnMMW7SfAypWi97I|X zI?Q2KaGP=TW0(j@?WGO*{Fvlm6k;?}V!G{UZQRW|;L}WCIW@;QnG4$6cZ8-coO1 zQ6s^RUakC?>|Abb^=hL^(huzl`kJNiRh3#W~y`fuo5Y_e(UX}Y_tNpc?I3j zMX+nnaDh{-_J7Zo){pI2^u!3b#&!Cz11G68z*xqJQfdR;=8=BLysArMI_G3or z!k8o0wEfL^Qj~TbVj8~ICjP`P%?d|Qb%waCO-O^(ZTENhb2)EcX8Fa$ii8*TH^L3H>*ahw;kKdwtA*DDZnER0a~wQ z$|*RcT0otCuphFFpl<_K+~A0iiPuZGEHFH>j`u}>AHj?S9Wk$o2^D&3r#mT4y)!Davp{eU|)EW=LQ0c%FWD_0dyaYN6c&HVdWxIIfad-=NUh#& zAi`&IbJkhnxl>56pBdsbq1>16NGA~Zna%Qzqa81uL4s)v!FM{WJPq)h2r?T`XQYGP zI|H1(<IT_!EZKY8Wh=#&Nz@xk1|XXY%D#c>*O8a=>r=Ch%F=1>+&QkCkFiUn;!!qeii z9{e5qb7ki57|bg&Sr%Cs

^Sfg-z2LV-Ogfj<|uLEt1)y_E%!5Q^4qa54L!*e|%p z_nuIFJ;Ip@h^y%rGdDVd7iBc!>1}i{Gn%Yt*r@)2p*H|Q4E>_jxzhFt8-~kup~^7x z=An2TpY=wok>s#5C58+C$~kD@=UvV|T*m0 zqnUc1-yv#|HwMrtxQ0N=#r>%0D7ZnTkK-OA7uR?2bbVw9@b4pbrzeqxmF>eP8J#MF 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 BqDKG# literal 0 HcmV?d00001 diff --git a/fastapi-swagger-ui-vendored/src/lib.rs b/fastapi-swagger-ui-vendored/src/lib.rs new file mode 100644 index 0000000..bc52834 --- /dev/null +++ b/fastapi-swagger-ui-vendored/src/lib.rs @@ -0,0 +1,19 @@ +//! This crate holds the [Swagger UI](https://github.com/swagger-api/swagger-ui) zip archive re-packaged as +//! Rust crate. The crate serves as a build dependency for `fastapi-swagger-ui` and is used to serve the +//! Swagger UI when `vendored` crate feature is enabled for `fastapi-swagger-ui` crate. +//! +//! Vendored Swagger UI provides the means to serve Swagger UI in sandboxed environments where network access or +//! even other means to provide Swagger UI is not possible. +//! +//! **Swagger UI version: `5.17.14`** +//! +//! ## License +//! +//! Licensed under either of [Apache 2.0](LICENSE-APACHE) or [MIT](LICENSE-MIT) license at your option. +//! +//! Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in this crate +//! by you, shall be dual licensed, without any additional terms or conditions. + +/// Swagger UI zip bytes +#[doc(hidden)] +pub const SWAGGER_UI_VENDORED: &[u8] = std::include_bytes!("../res/v5.17.14.zip"); diff --git a/fastapi-swagger-ui/Cargo.toml b/fastapi-swagger-ui/Cargo.toml new file mode 100644 index 0000000..8a50385 --- /dev/null +++ b/fastapi-swagger-ui/Cargo.toml @@ -0,0 +1,67 @@ +[package] +name = "fastapi-swagger-ui" +description = "Swagger UI for fastapi" +version = "0.1.1" +edition = "2021" +license = "MIT OR Apache-2.0" +readme = "README.md" +keywords = ["swagger-ui", "openapi", "documentation"] +repository = "https://github.com/nxpkg/fastapi" +categories = ["web-programming"] +authors = ["Md Sulaiman "] +rust-version.workspace = true + +[features] +default = ["url"] +debug = [] +debug-embed = ["rust-embed/debug-embed"] +reqwest = ["dep:reqwest"] +url = ["dep:url"] +vendored = ["dep:fastapi-swagger-ui-vendored"] +# cache swagger ui zip +cache = ["dep:dirs", "dep:sha2"] + +[dependencies] +rust-embed = { version = "8" } +mime_guess = { version = "2.0" } +actix-web = { version = "4", optional = true, default-features = false } +rocket = { version = "0.5", features = ["json"], optional = true } +axum = { version = "0.7", default-features = false, features = [ + "json", +], optional = true } +fastapi = { version = "0.1.1", path = "../fastapi", default-features = false, features = [ + "macros", +] } +serde = { version = "1.0", features = ["derive"] } +serde_json = { version = "1.0" } + +[dev-dependencies] +axum-test = "16.2.0" +similar = "2.5" +tokio = { version = "1", features = ["macros"] } +fastapi-swagger-ui = { path = ".", features = ["actix-web", "axum", "rocket"] } + +[package.metadata.docs.rs] +features = ["actix-web", "axum", "rocket", "vendored", "cache"] +no-default-features = true +rustdoc-args = ["--cfg", "doc_cfg"] + +[build-dependencies] +zip = { version = "2", default-features = false, features = ["deflate"] } +regex = "1.7" + +# used by cache feature +dirs = { version = "5.0.1", optional = true } +sha2 = { version = "0.10.8", optional = true } + +# enabled optionally to allow rust only build with expense of bigger dependency tree and platform +# independent build. By default `curl` system package is tried for downloading the Swagger UI. +reqwest = { version = "0.12", features = [ + "blocking", + "rustls-tls", +], default-features = false, optional = true } +url = { version = "2", optional = true } +fastapi-swagger-ui-vendored = { version = "0.1", path = "../fastapi-swagger-ui-vendored", optional = true } + +[lints.rust] +unexpected_cfgs = { level = "warn", check-cfg = ['cfg(doc_cfg)'] } diff --git a/fastapi-swagger-ui/LICENSE-APACHE b/fastapi-swagger-ui/LICENSE-APACHE new file mode 120000 index 0000000..965b606 --- /dev/null +++ b/fastapi-swagger-ui/LICENSE-APACHE @@ -0,0 +1 @@ +../LICENSE-APACHE \ No newline at end of file diff --git a/fastapi-swagger-ui/LICENSE-MIT b/fastapi-swagger-ui/LICENSE-MIT new file mode 120000 index 0000000..76219eb --- /dev/null +++ b/fastapi-swagger-ui/LICENSE-MIT @@ -0,0 +1 @@ +../LICENSE-MIT \ No newline at end of file diff --git a/fastapi-swagger-ui/README.md b/fastapi-swagger-ui/README.md new file mode 100644 index 0000000..053df5b --- /dev/null +++ b/fastapi-swagger-ui/README.md @@ -0,0 +1,123 @@ +# fastapi-swagger-ui + +[![Fastapi build](https://github.com/nxpkg/fastapi/actions/workflows/build.yaml/badge.svg)](https://github.com/nxpkg/fastapi/actions/workflows/build.yaml) +[![crates.io](https://img.shields.io/crates/v/fastapi-swagger-ui.svg?label=crates.io&color=orange&logo=rust)](https://crates.io/crates/fastapi-swagger-ui) +[![docs.rs](https://img.shields.io/static/v1?label=docs.rs&message=fastapi-swagger-ui&color=blue&logo=data:image/svg+xml;base64,PHN2ZyByb2xlPSJpbWciIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDUxMiA1MTIiPjxwYXRoIGZpbGw9IiNmNWY1ZjUiIGQ9Ik00ODguNiAyNTAuMkwzOTIgMjE0VjEwNS41YzAtMTUtOS4zLTI4LjQtMjMuNC0zMy43bC0xMDAtMzcuNWMtOC4xLTMuMS0xNy4xLTMuMS0yNS4zIDBsLTEwMCAzNy41Yy0xNC4xIDUuMy0yMy40IDE4LjctMjMuNCAzMy43VjIxNGwtOTYuNiAzNi4yQzkuMyAyNTUuNSAwIDI2OC45IDAgMjgzLjlWMzk0YzAgMTMuNiA3LjcgMjYuMSAxOS45IDMyLjJsMTAwIDUwYzEwLjEgNS4xIDIyLjEgNS4xIDMyLjIgMGwxMDMuOS01MiAxMDMuOSA1MmMxMC4xIDUuMSAyMi4xIDUuMSAzMi4yIDBsMTAwLTUwYzEyLjItNi4xIDE5LjktMTguNiAxOS45LTMyLjJWMjgzLjljMC0xNS05LjMtMjguNC0yMy40LTMzLjd6TTM1OCAyMTQuOGwtODUgMzEuOXYtNjguMmw4NS0zN3Y3My4zek0xNTQgMTA0LjFsMTAyLTM4LjIgMTAyIDM4LjJ2LjZsLTEwMiA0MS40LTEwMi00MS40di0uNnptODQgMjkxLjFsLTg1IDQyLjV2LTc5LjFsODUtMzguOHY3NS40em0wLTExMmwtMTAyIDQxLjQtMTAyLTQxLjR2LS42bDEwMi0zOC4yIDEwMiAzOC4ydi42em0yNDAgMTEybC04NSA0Mi41di03OS4xbDg1LTM4Ljh2NzUuNHptMC0xMTJsLTEwMiA0MS40LTEwMi00MS40di0uNmwxMDItMzguMiAxMDIgMzguMnYuNnoiPjwvcGF0aD48L3N2Zz4K)](https://docs.rs/fastapi-swagger-ui/latest/fastapi_swagger_ui/) +![rustc](https://img.shields.io/static/v1?label=rustc&message=1.75&color=orange&logo=rust) + +This crate implements necessary boilerplate code to serve Swagger UI via web server. It +works as a bridge for serving the OpenAPI documentation created with +[fastapi](https://docs.rs/fastapi/) library in the Swagger UI. + +**Currently implemented boilerplate for:** + +* **actix-web** `version >= 4` +* **rocket** `version >=0.5` +* **axum** `version >=0.7` + +Serving Swagger UI is framework independent thus this crate also supports serving the Swagger UI with +other frameworks as well. With other frameworks, there is a bit more manual implementation to be done. See +more details at [serve](https://docs.rs/fastapi-swagger-ui/latest/fastapi_swagger_ui/fn.serve.html) or +[examples](https://github.com/nxpkg/fastapi/tree/master/examples). + +## Crate Features + +* **`actix-web`** Enables actix-web integration with pre-configured SwaggerUI service factory allowing + users to use the Swagger UI without a hassle. +* **`rocket`** Enables rocket integration with pre-configured routes for serving the Swagger UI + and api doc without a hassle. +* **`axum`** Enables `axum` integration with pre-configured Router serving Swagger UI and OpenAPI specs + hassle free. +* **`debug-embed`** Enables `debug-embed` feature on `rust_embed` crate to allow embedding files in debug + builds as well. +* **`reqwest`** Use `reqwest` for downloading Swagger UI according to the `SWAGGER_UI_DOWNLOAD_URL` environment + variable. This is only enabled by default on _Windows_. +* **`url`** Enabled by default for parsing and encoding the download URL. +* **`vendored`** Enables vendored Swagger UI via `fastapi-swagger-ui-vendored` crate. +- **`cache`** Enables caching of the Swagger UI download in `fastapi-swagger-ui` during the build process. + +## Install + +Use only the raw types without any boilerplate implementation. + +```toml +[dependencies] +fastapi-swagger-ui = "8" +``` + +Enable actix-web framework with Swagger UI you could define the dependency as follows. + +```toml +[dependencies] +fastapi-swagger-ui = { version = "8", features = ["actix-web"] } +``` + +**Note!** Also remember that you already have defined `fastapi` dependency in your `Cargo.toml` + +## Build Config + +> [!IMPORTANT] +> _`fastapi-swagger-ui` crate will by default try to use system `curl` package for downloading the Swagger UI. It +> can optionally be downloaded with `reqwest` by enabling `reqwest` feature. Reqwest can be useful for platform +> independent builds however bringing quite a few unnecessary dependencies just to download a file. +> If the `SWAGGER_UI_DOWNLOAD_URL` is a file path then no downloading will happen._ + +> [!TIP] +> Use **`vendored`** feature flag to use vendored Swagger UI. This is especially useful for no network +> environments. + +**The following configuration env variables are available at build time:** + + * `SWAGGER_UI_DOWNLOAD_URL`: Defines the url from where to download the swagger-ui zip file. + + * Current Swagger UI version: + * [All available Swagger UI versions](https://github.com/swagger-api/swagger-ui/tags) + + * `SWAGGER_UI_OVERWRITE_FOLDER`: Defines an _optional_ absolute path to a directory containing files + to overwrite the Swagger UI files. Typically you might want to overwrite `index.html`. + +## Examples + +Serve Swagger UI with api doc via **`actix-web`**. See full example from [examples](https://github.com/nxpkg/fastapi/tree/master/examples/todo-actix). + +```rust +HttpServer::new(move || { + App::new() + .service( + SwaggerUi::new("/swagger-ui/{_:.*}") + .url("/api-docs/openapi.json", ApiDoc::openapi()), + ) + }) + .bind((Ipv4Addr::UNSPECIFIED, 8989)).unwrap() + .run(); +``` + +Serve Swagger UI with api doc via **`rocket`**. See full example from [examples](https://github.com/nxpkg/fastapi/tree/master/examples/rocket-todo). + +```rust +#[rocket::launch] +fn rocket() -> Rocket { + rocket::build() + .mount( + "/", + SwaggerUi::new("/swagger-ui/<_..>") + .url("/api-docs/openapi.json", ApiDoc::openapi()), + ) +} +``` + +Setup Router to serve Swagger UI with **`axum`** framework. See full implementation of how to serve +Swagger UI with axum from [examples](https://github.com/nxpkg/fastapi/tree/master/examples/todo-axum). + +```rust +let app = Router::new() + .merge(SwaggerUi::new("/swagger-ui") + .url("/api-docs/openapi.json", ApiDoc::openapi())); +``` + +## License + +Licensed under either of [Apache 2.0](LICENSE-APACHE) or [MIT](LICENSE-MIT) license at your option. + +Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in this crate +by you, shall be dual licensed, without any additional terms or conditions. diff --git a/fastapi-swagger-ui/build.rs b/fastapi-swagger-ui/build.rs new file mode 100644 index 0000000..b94096b --- /dev/null +++ b/fastapi-swagger-ui/build.rs @@ -0,0 +1,385 @@ +use std::{ + env, + error::Error, + fs::{self, File}, + io::{self, Cursor}, + path::{Path, PathBuf}, +}; + +use regex::Regex; +use zip::{result::ZipError, ZipArchive}; + +/// the following env variables control the build process: +/// 1. SWAGGER_UI_DOWNLOAD_URL: +/// + the url from where to download the swagger-ui zip file if starts with http:// or https:// +/// + the file path from where to copy the swagger-ui zip file if starts with file:// +/// + default value is SWAGGER_UI_DOWNLOAD_URL_DEFAULT +/// + for other versions, check https://github.com/swagger-api/swagger-ui/tags +/// 2. SWAGGER_UI_OVERWRITE_FOLDER +/// + absolute path to a folder containing files to overwrite the default swagger-ui files + +const SWAGGER_UI_DOWNLOAD_URL_DEFAULT: &str = + "https://github.com/swagger-api/swagger-ui/archive/refs/tags/v5.17.14.zip"; + +const SWAGGER_UI_DOWNLOAD_URL: &str = "SWAGGER_UI_DOWNLOAD_URL"; +const SWAGGER_UI_OVERWRITE_FOLDER: &str = "SWAGGER_UI_OVERWRITE_FOLDER"; + +#[cfg(feature = "cache")] +fn sha256(data: &[u8]) -> String { + use sha2::{Digest, Sha256}; + let mut hasher = Sha256::new(); + hasher.update(data); + let hash = hasher.finalize(); + format!("{:x}", hash).to_uppercase() +} + +#[cfg(feature = "cache")] +fn get_cache_dir() -> Option { + dirs::cache_dir().map(|p| p.join("fastapi-swagger-ui")) +} + +fn main() { + let target_dir = env::var("OUT_DIR").unwrap(); + println!("OUT_DIR: {target_dir}"); + + let url = + env::var(SWAGGER_UI_DOWNLOAD_URL).unwrap_or(SWAGGER_UI_DOWNLOAD_URL_DEFAULT.to_string()); + + println!("{SWAGGER_UI_DOWNLOAD_URL}: {url}"); + + let mut swagger_zip = get_zip_archive(&url, &target_dir); + let zip_top_level_folder = swagger_zip + .extract_dist(&target_dir) + .expect("should extract dist"); + println!("zip_top_level_folder: {:?}", zip_top_level_folder); + + replace_default_url_with_config(&target_dir, &zip_top_level_folder); + + write_embed_code(&target_dir, &zip_top_level_folder); + + let overwrite_folder = + PathBuf::from(env::var(SWAGGER_UI_OVERWRITE_FOLDER).unwrap_or("overwrite".to_string())); + + if overwrite_folder.exists() { + println!("{SWAGGER_UI_OVERWRITE_FOLDER}: {overwrite_folder:?}"); + + for entry in fs::read_dir(overwrite_folder).unwrap() { + let entry = entry.unwrap(); + let path_in = entry.path(); + println!("replacing file: {:?}", path_in.clone()); + overwrite_target_file(&target_dir, &zip_top_level_folder, path_in); + } + } else { + println!("{SWAGGER_UI_OVERWRITE_FOLDER} not found: {overwrite_folder:?}"); + } +} + +enum SwaggerZip { + #[allow(unused)] + Bytes(ZipArchive>), + File(ZipArchive), +} + +impl SwaggerZip { + fn len(&self) -> usize { + match self { + Self::File(file) => file.len(), + Self::Bytes(bytes) => bytes.len(), + } + } + + fn by_index(&mut self, index: usize) -> Result { + match self { + Self::File(file) => file.by_index(index), + Self::Bytes(bytes) => bytes.by_index(index), + } + } + + fn extract_dist(&mut self, target_dir: &str) -> Result { + let mut zip_top_level_folder = String::new(); + + for index in 0..self.len() { + let mut file = self.by_index(index)?; + let filepath = file + .enclosed_name() + .ok_or(ZipError::InvalidArchive("invalid path file"))?; + + if index == 0 { + zip_top_level_folder = filepath + .iter() + .take(1) + .map(|x| x.to_str().unwrap_or_default()) + .collect::(); + } + + let next_folder = filepath + .iter() + .skip(1) + .take(1) + .map(|x| x.to_str().unwrap_or_default()) + .collect::(); + + if next_folder == "dist" { + let directory = [&target_dir].iter().collect::(); + let out_path = directory.join(filepath); + + if file.name().ends_with('/') { + fs::create_dir_all(&out_path)?; + } else { + if let Some(p) = out_path.parent() { + if !p.exists() { + fs::create_dir_all(p)?; + } + } + let mut out_file = fs::File::create(&out_path)?; + io::copy(&mut file, &mut out_file)?; + } + // Get and Set permissions + #[cfg(unix)] + { + use std::os::unix::fs::PermissionsExt; + if let Some(mode) = file.unix_mode() { + fs::set_permissions(&out_path, fs::Permissions::from_mode(mode))?; + } + } + } + } + + Ok(zip_top_level_folder) + } +} + +fn get_zip_archive(url: &str, target_dir: &str) -> SwaggerZip { + let zip_filename = url.split('/').last().unwrap().to_string(); + #[allow(unused_mut)] + let mut zip_path = [target_dir, &zip_filename].iter().collect::(); + + if env::var("CARGO_FEATURE_VENDORED").is_ok() { + #[cfg(not(feature = "vendored"))] + unreachable!("Cannot get vendored Swagger UI without `vendored` flag"); + + #[cfg(feature = "vendored")] + { + println!("using vendored Swagger UI"); + let vendred_bytes = fastapi_swagger_ui_vendored::SWAGGER_UI_VENDORED; + let zip = ZipArchive::new(io::Cursor::new(vendred_bytes)) + .expect("failed to open vendored Swagger UI"); + SwaggerZip::Bytes(zip) + } + } else if url.starts_with("file:") { + #[cfg(feature = "url")] + let mut file_path = url::Url::parse(url).unwrap().to_file_path().unwrap(); + #[cfg(not(feature = "url"))] + let mut file_path = { + use std::str::FromStr; + PathBuf::from_str(url).unwrap() + }; + file_path = fs::canonicalize(file_path).expect("swagger ui download path should exists"); + + // with file protocol fastapi swagger ui should compile when file changes + println!("cargo:rerun-if-changed={:?}", file_path); + + println!("start copy to : {:?}", zip_path); + fs::copy(file_path, zip_path.clone()).unwrap(); + + let swagger_ui_zip = + File::open([target_dir, &zip_filename].iter().collect::()).unwrap(); + let zip = ZipArchive::new(swagger_ui_zip) + .expect("failed to open file protocol copied Swagger UI"); + SwaggerZip::File(zip) + } else if url.starts_with("http://") || url.starts_with("https://") { + // with http protocol we update when the 'SWAGGER_UI_DOWNLOAD_URL' changes + println!("cargo:rerun-if-env-changed={SWAGGER_UI_DOWNLOAD_URL}"); + + // Update zip_path to point to the resolved cache directory + #[cfg(feature = "cache")] + { + // Compute cache key based hashed URL + crate version + let mut cache_key = String::new(); + cache_key.push_str(url); + cache_key.push_str(&env::var("CARGO_PKG_VERSION").unwrap_or_default()); + let cache_key = sha256(cache_key.as_bytes()); + // Store the cache in the cache_key directory inside the OS's default cache folder + let mut cache_dir = if let Some(dir) = get_cache_dir() { + dir.join("swagger-ui").join(&cache_key) + } else { + println!("cargo:warning=Could not determine cache directory, using OUT_DIR"); + PathBuf::from(env::var("OUT_DIR").unwrap()) + }; + if fs::create_dir_all(&cache_dir).is_err() { + cache_dir = env::var("OUT_DIR").unwrap().into(); + } + zip_path = cache_dir.join(&zip_filename); + } + + if zip_path.exists() { + println!("using cached zip path from : {:?}", zip_path); + } else { + println!("start download to : {:?}", zip_path); + download_file(url, zip_path.clone()).expect("failed to download Swagger UI"); + } + let swagger_ui_zip = File::open(zip_path).unwrap(); + let zip = ZipArchive::new(swagger_ui_zip).expect("failed to open downloaded Swagger UI"); + SwaggerZip::File(zip) + } else { + panic!("`vendored` feature not enabled and invalid {SWAGGER_UI_DOWNLOAD_URL}: {url} -> must start with http:// | https:// | file:"); + } +} + +fn replace_default_url_with_config(target_dir: &str, zip_top_level_folder: &str) { + let regex = Regex::new(r#"(?ms)url:.*deep.*true,"#).unwrap(); + + let path = [ + target_dir, + zip_top_level_folder, + "dist", + "swagger-initializer.js", + ] + .iter() + .collect::(); + + let mut swagger_initializer = fs::read_to_string(&path).unwrap(); + swagger_initializer = swagger_initializer.replace("layout: \"StandaloneLayout\"", ""); + + let replaced_swagger_initializer = regex.replace(&swagger_initializer, "{{config}},"); + + fs::write(&path, replaced_swagger_initializer.as_ref()).unwrap(); +} + +fn write_embed_code(target_dir: &str, zip_top_level_folder: &str) { + let contents = format!( + r#" +// This file is auto-generated during compilation, do not modify +#[derive(RustEmbed)] +#[folder = r"{}/{}/dist/"] +struct SwaggerUiDist; +"#, + target_dir, zip_top_level_folder + ); + let path = [target_dir, "embed.rs"].iter().collect::(); + fs::write(path, contents).unwrap(); +} + +fn download_file(url: &str, path: PathBuf) -> Result<(), Box> { + let reqwest_feature = env::var("CARGO_FEATURE_REQWEST"); + println!("reqwest feature: {reqwest_feature:?}"); + if reqwest_feature.is_ok() { + #[cfg(feature = "reqwest")] + download_file_reqwest(url, path)?; + Ok(()) + } else { + println!("trying to download using `curl` system package"); + download_file_curl(url, path.as_path()) + } +} + +#[cfg(feature = "reqwest")] +fn download_file_reqwest(url: &str, path: PathBuf) -> Result<(), Box> { + let mut client_builder = reqwest::blocking::Client::builder(); + + if let Ok(cainfo) = env::var("CARGO_HTTP_CAINFO") { + match parse_ca_file(&cainfo) { + Ok(cert) => client_builder = client_builder.add_root_certificate(cert), + Err(e) => println!( + "failed to load certificate from CARGO_HTTP_CAINFO `{cainfo}`, attempting to download without it. Error: {e:?}", + ), + } + } + + let client = client_builder.build()?; + + let mut response = client.get(url).send()?; + let mut file = File::create(path)?; + io::copy(&mut response, &mut file)?; + Ok(()) +} + +#[cfg(feature = "reqwest")] +fn parse_ca_file(path: &str) -> Result> { + let mut buf = Vec::new(); + use io::Read; + File::open(path)?.read_to_end(&mut buf)?; + let cert = reqwest::Certificate::from_pem(&buf)?; + Ok(cert) +} + +fn download_file_curl>(url: &str, target_dir: T) -> Result<(), Box> { + // Not using `CARGO_CFG_TARGET_OS` because of the possibility of cross-compilation. + // When targeting `x86_64-pc-windows-gnu` on Linux for example, `cfg!()` in the + // build script still reports `target_os = "linux"`, which is desirable. + let curl_bin_name = if cfg!(target_os = "windows") { + // powershell aliases `curl` to `Invoke-WebRequest` + "curl.exe" + } else { + "curl" + }; + + #[cfg(feature = "url")] + let url = url::Url::parse(url)?; + + let mut args = Vec::with_capacity(6); + args.extend([ + "-sSL", + "-o", + target_dir + .as_ref() + .as_os_str() + .to_str() + .expect("target dir should be valid utf-8"), + #[cfg(feature = "url")] + { + url.as_str() + }, + #[cfg(not(feature = "url"))] + url, + ]); + let cacert = env::var("CARGO_HTTP_CAINFO").unwrap_or_default(); + if !cacert.is_empty() { + args.extend(["--cacert", &cacert]); + } + + let download = std::process::Command::new(curl_bin_name) + .args(args) + .spawn() + .and_then(|mut child| child.wait()); + + Ok(download + .and_then(|status| { + if status.success() { + Ok(()) + } else { + Err(std::io::Error::new( + io::ErrorKind::Other, + format!("curl download file exited with error status: {status}"), + )) + } + }) + .map_err(|error| { + if error.kind() == io::ErrorKind::NotFound { + io::Error::new(error.kind(), format!("`{curl_bin_name}` command not found")) + } else { + error + } + }) + .map_err(Box::new)?) +} + +fn overwrite_target_file(target_dir: &str, swagger_ui_dist_zip: &str, path_in: PathBuf) { + let filename = path_in.file_name().unwrap().to_str().unwrap(); + println!("overwrite file: {:?}", path_in.file_name().unwrap()); + + let content = fs::read(path_in.clone()); + + match content { + Ok(content) => { + let path = [target_dir, swagger_ui_dist_zip, "dist", filename] + .iter() + .collect::(); + + fs::write(path, content).unwrap(); + } + Err(_) => { + println!("cannot read content from file: {:?}", path_in); + } + } +} diff --git a/fastapi-swagger-ui/src/actix.rs b/fastapi-swagger-ui/src/actix.rs new file mode 100644 index 0000000..f0166cd --- /dev/null +++ b/fastapi-swagger-ui/src/actix.rs @@ -0,0 +1,66 @@ +#![cfg(feature = "actix-web")] + +use actix_web::{ + dev::HttpServiceFactory, guard::Get, web, web::Data, HttpResponse, Resource, + Responder as ActixResponder, +}; + +use crate::{ApiDoc, Config, SwaggerUi}; + +impl HttpServiceFactory for SwaggerUi { + fn register(self, config: &mut actix_web::dev::AppService) { + let mut urls = self + .urls + .into_iter() + .map(|(url, openapi)| { + register_api_doc_url_resource(url.url.as_ref(), ApiDoc::Fastapi(openapi), config); + url + }) + .collect::>(); + let external_api_docs = self.external_urls.into_iter().map(|(url, api_doc)| { + register_api_doc_url_resource(url.url.as_ref(), ApiDoc::Value(api_doc), config); + url + }); + urls.extend(external_api_docs); + + let swagger_resource = Resource::new(self.path.as_ref()) + .guard(Get()) + .app_data(Data::new(if let Some(config) = self.config { + if config.url.is_some() || !config.urls.is_empty() { + config + } else { + config.configure_defaults(urls) + } + } else { + Config::new(urls) + })) + .to(serve_swagger_ui); + + HttpServiceFactory::register(swagger_resource, config); + } +} + +fn register_api_doc_url_resource(url: &str, api: ApiDoc, config: &mut actix_web::dev::AppService) { + async fn get_api_doc(api_doc: web::Data) -> impl ActixResponder { + HttpResponse::Ok().json(api_doc.as_ref()) + } + + let url_resource = Resource::new(url) + .guard(Get()) + .app_data(Data::new(api)) + .to(get_api_doc); + HttpServiceFactory::register(url_resource, config); +} + +async fn serve_swagger_ui(path: web::Path, data: web::Data>) -> HttpResponse { + match super::serve(&path.into_inner(), data.into_inner()) { + Ok(swagger_file) => swagger_file + .map(|file| { + HttpResponse::Ok() + .content_type(file.content_type) + .body(file.bytes.to_vec()) + }) + .unwrap_or_else(|| HttpResponse::NotFound().finish()), + Err(error) => HttpResponse::InternalServerError().body(error.to_string()), + } +} diff --git a/fastapi-swagger-ui/src/axum.rs b/fastapi-swagger-ui/src/axum.rs new file mode 100644 index 0000000..c28c8b8 --- /dev/null +++ b/fastapi-swagger-ui/src/axum.rs @@ -0,0 +1,155 @@ +#![cfg(feature = "axum")] + +use std::sync::Arc; + +use axum::{ + extract::Path, http::StatusCode, response::IntoResponse, routing, Extension, Json, Router, +}; + +use crate::{ApiDoc, Config, SwaggerUi, Url}; + +impl From for Router +where + S: Clone + Send + Sync + 'static, +{ + fn from(swagger_ui: SwaggerUi) -> Self { + let urls_capacity = swagger_ui.urls.len(); + let external_urls_capacity = swagger_ui.external_urls.len(); + + let (router, urls) = swagger_ui.urls.into_iter().fold( + ( + Router::::new(), + Vec::::with_capacity(urls_capacity + external_urls_capacity), + ), + |router_and_urls, (url, openapi)| { + add_api_doc_to_urls(router_and_urls, (url, ApiDoc::Fastapi(openapi))) + }, + ); + let (router, urls) = swagger_ui.external_urls.into_iter().fold( + (router, urls), + |router_and_urls, (url, openapi)| { + add_api_doc_to_urls(router_and_urls, (url, ApiDoc::Value(openapi))) + }, + ); + + let config = if let Some(config) = swagger_ui.config { + if config.url.is_some() || !config.urls.is_empty() { + config + } else { + config.configure_defaults(urls) + } + } else { + Config::new(urls) + }; + + let handler = routing::get(serve_swagger_ui).layer(Extension(Arc::new(config))); + let path: &str = swagger_ui.path.as_ref(); + + if path == "/" { + router + .route(path, handler.clone()) + .route(&format!("{}*rest", path), handler) + } else { + let path = if path.ends_with('/') { + &path[..path.len() - 1] + } else { + path + }; + debug_assert!(!path.is_empty()); + + let slash_path = format!("{}/", path); + router + .route( + path, + routing::get(|| async move { axum::response::Redirect::to(&slash_path) }), + ) + .route(&format!("{}/", path), handler.clone()) + .route(&format!("{}/*rest", path), handler) + } + } +} + +fn add_api_doc_to_urls( + router_and_urls: (Router, Vec>), + url: (Url<'static>, ApiDoc), +) -> (Router, Vec>) +where + S: Clone + Send + Sync + 'static, +{ + let (router, mut urls) = router_and_urls; + let (url, openapi) = url; + ( + router.route( + url.url.as_ref(), + routing::get(move || async { Json(openapi) }), + ), + { + urls.push(url); + urls + }, + ) +} + +async fn serve_swagger_ui( + path: Option>, + Extension(state): Extension>>, +) -> impl IntoResponse { + let tail = match path.as_ref() { + Some(tail) => tail, + None => "", + }; + + match super::serve(tail, state) { + Ok(file) => file + .map(|file| { + ( + StatusCode::OK, + [("Content-Type", file.content_type)], + file.bytes, + ) + .into_response() + }) + .unwrap_or_else(|| StatusCode::NOT_FOUND.into_response()), + Err(error) => (StatusCode::INTERNAL_SERVER_ERROR, error.to_string()).into_response(), + } +} + +#[cfg(test)] +mod tests { + use super::*; + use axum_test::TestServer; + + #[tokio::test] + async fn mount_onto_root() { + let app = Router::<()>::from(SwaggerUi::new("/")); + let server = TestServer::new(app).unwrap(); + let response = server.get("/").await; + response.assert_status_ok(); + let response = server.get("/swagger-ui.css").await; + response.assert_status_ok(); + } + + #[tokio::test] + async fn mount_onto_path_ends_with_slash() { + let app = Router::<()>::from(SwaggerUi::new("/swagger-ui/")); + let server = TestServer::new(app).unwrap(); + let response = server.get("/swagger-ui").await; + response.assert_status_see_other(); + let response = server.get("/swagger-ui/").await; + response.assert_status_ok(); + let response = server.get("/swagger-ui/swagger-ui.css").await; + response.assert_status_ok(); + } + + #[tokio::test] + async fn mount_onto_path_not_end_with_slash() { + let app = Router::<()>::from(SwaggerUi::new("/swagger-ui")); + let server = TestServer::new(app).unwrap(); + let response = server.get("/swagger-ui").await; + response.assert_status_see_other(); + let response = server.get("/swagger-ui/").await; + response.assert_status_ok(); + let response = server.get("/swagger-ui/swagger-ui.css").await; + response.assert_status_ok(); + } +} diff --git a/fastapi-swagger-ui/src/lib.rs b/fastapi-swagger-ui/src/lib.rs new file mode 100644 index 0000000..b97499f --- /dev/null +++ b/fastapi-swagger-ui/src/lib.rs @@ -0,0 +1,1895 @@ +#![cfg_attr(doc_cfg, feature(doc_cfg))] +//! This crate implements necessary boiler plate code to serve Swagger UI via web server. It +//! works as a bridge for serving the OpenAPI documentation created with [`fastapi`][fastapi] library in the +//! Swagger UI. +//! +//! [fastapi]: +//! +//! **Currently implemented boiler plate for:** +//! +//! * **actix-web** `version >= 4` +//! * **rocket** `version >=0.5` +//! * **axum** `version >=0.7` +//! +//! Serving Swagger UI is framework independent thus this crate also supports serving the Swagger UI with +//! other frameworks as well. With other frameworks there is bit more manual implementation to be done. See +//! more details at [`serve`] or [`examples`][examples]. +//! +//! [examples]: +//! +//! # Crate Features +//! +//! * **`actix-web`** Enables `actix-web` integration with pre-configured SwaggerUI service factory allowing +//! users to use the Swagger UI without a hassle. +//! * **`rocket`** Enables `rocket` integration with with pre-configured routes for serving the Swagger UI +//! and api doc without a hassle. +//! * **`axum`** Enables `axum` integration with pre-configured Router serving Swagger UI and OpenAPI specs +//! hassle free. +//! * **`debug-embed`** Enables `debug-embed` feature on `rust_embed` crate to allow embedding files in debug +//! builds as well. +//! * **`reqwest`** Use `reqwest` for downloading Swagger UI according to the `SWAGGER_UI_DOWNLOAD_URL` environment +//! variable. This is only enabled by default on _Windows_. +//! * **`url`** Enabled by default for parsing and encoding the download URL. +//! * **`vendored`** Enables vendored Swagger UI via `fastapi-swagger-ui-vendored` crate. +//! +//! # Install +//! +//! Use only the raw types without any boiler plate implementation. +//! ```toml +//! [dependencies] +//! fastapi-swagger-ui = "8" +//! ``` +//! +//! Enable actix-web framework with Swagger UI you could define the dependency as follows. +//! ```toml +//! [dependencies] +//! fastapi-swagger-ui = { version = "8", features = ["actix-web"] } +//! ``` +//! +//! **Note!** Also remember that you already have defined `fastapi` dependency in your `Cargo.toml` +//! +//! ## Build Config +//! +//!

+//! +//!
+//! +//! **Tip!** Use **`vendored`** feature flag to use vendored Swagger UI. This is especially useful for no network +//! environments. +//! +//!
+//! +//! **The following configuration env variables are available at build time:** +//! +//! * `SWAGGER_UI_DOWNLOAD_URL`: Defines the url from where to download the swagger-ui zip file. +//! +//! * Current Swagger UI version: +//! * [All available Swagger UI versions](https://github.com/swagger-api/swagger-ui/tags) +//! +//! * `SWAGGER_UI_OVERWRITE_FOLDER`: Defines an _optional_ absolute path to a directory containing files +//! to overwrite the Swagger UI files. Typically you might want to overwrite `index.html`. +//! +//! # Examples +//! +//! Serve Swagger UI with api doc via **`actix-web`**. See full example from +//! [examples](https://github.com/nxpkg/fastapi/tree/master/examples/todo-actix). +//! ```no_run +//! # use actix_web::{App, HttpServer}; +//! # use fastapi_swagger_ui::SwaggerUi; +//! # use fastapi::OpenApi; +//! # use std::net::Ipv4Addr; +//! # #[derive(OpenApi)] +//! # #[openapi()] +//! # struct ApiDoc; +//! HttpServer::new(move || { +//! App::new() +//! .service( +//! SwaggerUi::new("/swagger-ui/{_:.*}") +//! .url("/api-docs/openapi.json", ApiDoc::openapi()), +//! ) +//! }) +//! .bind((Ipv4Addr::UNSPECIFIED, 8989)).unwrap() +//! .run(); +//! ``` +//! +//! Serve Swagger UI with api doc via **`rocket`**. See full example from +//! [examples](https://github.com/nxpkg/fastapi/tree/master/examples/rocket-todo). +//! ```no_run +//! # use rocket::{Build, Rocket}; +//! # use fastapi_swagger_ui::SwaggerUi; +//! # use fastapi::OpenApi; +//! #[rocket::launch] +//! fn rocket() -> Rocket { +//! # +//! # #[derive(OpenApi)] +//! # #[openapi()] +//! # struct ApiDoc; +//! # +//! rocket::build() +//! .mount( +//! "/", +//! SwaggerUi::new("/swagger-ui/<_..>") +//! .url("/api-docs/openapi.json", ApiDoc::openapi()), +//! ) +//! } +//! ``` +//! +//! Setup Router to serve Swagger UI with **`axum`** framework. See full implementation of how to serve +//! Swagger UI with axum from [examples](https://github.com/nxpkg/fastapi/tree/master/examples/todo-axum). +//!```no_run +//! # use axum::{routing, Router}; +//! # use fastapi_swagger_ui::SwaggerUi; +//! # use fastapi::OpenApi; +//!# #[derive(OpenApi)] +//!# #[openapi()] +//!# struct ApiDoc; +//!# +//!# fn inner() +//!# where +//!# S: Clone + Send + Sync + 'static, +//!# { +//! let app = Router::::new() +//! .merge(SwaggerUi::new("/swagger-ui") +//! .url("/api-docs/openapi.json", ApiDoc::openapi())); +//!# } +//! ``` +use std::{borrow::Cow, error::Error, mem, sync::Arc}; + +mod actix; +mod axum; +pub mod oauth; +mod rocket; + +#[cfg(any(feature = "actix-web", feature = "rocket", feature = "axum"))] +use fastapi::openapi::OpenApi; +use rust_embed::RustEmbed; +use serde::Serialize; + +include!(concat!(env!("OUT_DIR"), "/embed.rs")); + +/// Entry point for serving Swagger UI and api docs in application. It provides +/// builder style chainable configuration methods for configuring api doc urls. +/// +/// # Examples +/// +/// Create new [`SwaggerUi`] with defaults. +/// ```rust +/// # use fastapi_swagger_ui::SwaggerUi; +/// # use fastapi::OpenApi; +/// # #[derive(OpenApi)] +/// # #[openapi()] +/// # struct ApiDoc; +/// let swagger = SwaggerUi::new("/swagger-ui/{_:.*}") +/// .url("/api-docs/openapi.json", ApiDoc::openapi()); +/// ``` +/// +/// Create a new [`SwaggerUi`] with custom [`Config`] and [`oauth::Config`]. +/// ```rust +/// # use fastapi_swagger_ui::{SwaggerUi, Config, oauth}; +/// # use fastapi::OpenApi; +/// # #[derive(OpenApi)] +/// # #[openapi()] +/// # struct ApiDoc; +/// let swagger = SwaggerUi::new("/swagger-ui/{_:.*}") +/// .url("/api-docs/openapi.json", ApiDoc::openapi()) +/// .config(Config::default().try_it_out_enabled(true).filter(true)) +/// .oauth(oauth::Config::new()); +/// ``` +/// +#[non_exhaustive] +#[derive(Clone)] +#[cfg_attr(feature = "debug", derive(Debug))] +#[cfg(any(feature = "actix-web", feature = "rocket", feature = "axum"))] +#[cfg_attr( + doc_cfg, + doc(cfg(any(feature = "actix-web", feature = "rocket", feature = "axum"))) +)] +pub struct SwaggerUi { + path: Cow<'static, str>, + urls: Vec<(Url<'static>, OpenApi)>, + config: Option>, + external_urls: Vec<(Url<'static>, serde_json::Value)>, +} + +#[cfg(any(feature = "actix-web", feature = "rocket", feature = "axum"))] +#[cfg_attr( + doc_cfg, + doc(cfg(any(feature = "actix-web", feature = "rocket", feature = "axum"))) +)] +impl SwaggerUi { + /// Create a new [`SwaggerUi`] for given path. + /// + /// Path argument will expose the Swagger UI to the user and should be something that + /// the underlying application framework / library supports. + /// + /// # Examples + /// + /// Exposes Swagger UI using path `/swagger-ui` using actix-web supported syntax. + /// + /// ```rust + /// # use fastapi_swagger_ui::SwaggerUi; + /// let swagger = SwaggerUi::new("/swagger-ui/{_:.*}"); + /// ``` + pub fn new>>(path: P) -> Self { + Self { + path: path.into(), + urls: Vec::new(), + config: None, + external_urls: Vec::new(), + } + } + + /// Add api doc [`Url`] into [`SwaggerUi`]. + /// + /// Method takes two arguments where first one is path which exposes the [`OpenApi`] to the user. + /// Second argument is the actual Rust implementation of the OpenAPI doc which is being exposed. + /// + /// Calling this again will add another url to the Swagger UI. + /// + /// # Examples + /// + /// Expose manually created OpenAPI doc. + /// ```rust + /// # use fastapi_swagger_ui::SwaggerUi; + /// let swagger = SwaggerUi::new("/swagger-ui/{_:.*}") + /// .url("/api-docs/openapi.json", fastapi::openapi::OpenApi::new( + /// fastapi::openapi::Info::new("my application", "0.1.0"), + /// fastapi::openapi::Paths::new(), + /// )); + /// ``` + /// + /// Expose derived OpenAPI doc. + /// ```rust + /// # use fastapi_swagger_ui::SwaggerUi; + /// # use fastapi::OpenApi; + /// # #[derive(OpenApi)] + /// # #[openapi()] + /// # struct ApiDoc; + /// let swagger = SwaggerUi::new("/swagger-ui/{_:.*}") + /// .url("/api-docs/openapi.json", ApiDoc::openapi()); + /// ``` + pub fn url>>(mut self, url: U, openapi: OpenApi) -> Self { + self.urls.push((url.into(), openapi)); + + self + } + + /// Add multiple [`Url`]s to Swagger UI. + /// + /// Takes one [`Vec`] argument containing tuples of [`Url`] and [`OpenApi`]. + /// + /// Situations where this comes handy is when there is a need or wish to separate different parts + /// of the api to separate api docs. + /// + /// # Examples + /// + /// Expose multiple api docs via Swagger UI. + /// ```rust + /// # use fastapi_swagger_ui::{SwaggerUi, Url}; + /// # use fastapi::OpenApi; + /// # #[derive(OpenApi)] + /// # #[openapi()] + /// # struct ApiDoc; + /// # #[derive(OpenApi)] + /// # #[openapi()] + /// # struct ApiDoc2; + /// let swagger = SwaggerUi::new("/swagger-ui/{_:.*}") + /// .urls( + /// vec![ + /// (Url::with_primary("api doc 1", "/api-docs/openapi.json", true), ApiDoc::openapi()), + /// (Url::new("api doc 2", "/api-docs/openapi2.json"), ApiDoc2::openapi()) + /// ] + /// ); + /// ``` + pub fn urls(mut self, urls: Vec<(Url<'static>, OpenApi)>) -> Self { + self.urls = urls; + + self + } + + /// Add external API doc to the [`SwaggerUi`]. + /// + /// This operation is unchecked and so it does not check any validity of provided content. + /// Users are required to do their own check if any regarding validity of the external + /// OpenAPI document. + /// + /// Method accepts two arguments, one is [`Url`] the API doc is served at and the second one is + /// the [`serde_json::Value`] of the OpenAPI doc to be served. + /// + /// # Examples + /// + /// Add external API doc to the [`SwaggerUi`]. + /// ```rust + /// # use fastapi_swagger_ui::{SwaggerUi, Url}; + /// # use fastapi::OpenApi; + /// # use serde_json::json; + /// let external_openapi = json!({"openapi": "3.0.0"}); + /// + /// let swagger = SwaggerUi::new("/swagger-ui/{_:.*}") + /// .external_url_unchecked("/api-docs/openapi.json", external_openapi); + /// ``` + pub fn external_url_unchecked>>( + mut self, + url: U, + openapi: serde_json::Value, + ) -> Self { + self.external_urls.push((url.into(), openapi)); + + self + } + + /// Add external API docs to the [`SwaggerUi`] from iterator. + /// + /// This operation is unchecked and so it does not check any validity of provided content. + /// Users are required to do their own check if any regarding validity of the external + /// OpenAPI documents. + /// + /// Method accepts one argument, an `iter` of [`Url`] and [`serde_json::Value`] tuples. The + /// [`Url`] will point to location the OpenAPI document is served and the [`serde_json::Value`] + /// is the OpenAPI document to be served. + /// + /// # Examples + /// + /// Add external API docs to the [`SwaggerUi`]. + /// ```rust + /// # use fastapi_swagger_ui::{SwaggerUi, Url}; + /// # use fastapi::OpenApi; + /// # use serde_json::json; + /// let external_openapi = json!({"openapi": "3.0.0"}); + /// let external_openapi2 = json!({"openapi": "3.0.0"}); + /// + /// let swagger = SwaggerUi::new("/swagger-ui/{_:.*}") + /// .external_urls_from_iter_unchecked([ + /// ("/api-docs/openapi.json", external_openapi), + /// ("/api-docs/openapi2.json", external_openapi2) + /// ]); + /// ``` + pub fn external_urls_from_iter_unchecked< + I: IntoIterator, + U: Into>, + >( + mut self, + external_urls: I, + ) -> Self { + self.external_urls.extend( + external_urls + .into_iter() + .map(|(url, doc)| (url.into(), doc)), + ); + + self + } + + /// Add oauth [`oauth::Config`] into [`SwaggerUi`]. + /// + /// Method takes one argument which exposes the [`oauth::Config`] to the user. + /// + /// # Examples + /// + /// Enable pkce with default client_id. + /// ```rust + /// # use fastapi_swagger_ui::{SwaggerUi, oauth}; + /// # use fastapi::OpenApi; + /// # #[derive(OpenApi)] + /// # #[openapi()] + /// # struct ApiDoc; + /// let swagger = SwaggerUi::new("/swagger-ui/{_:.*}") + /// .url("/api-docs/openapi.json", ApiDoc::openapi()) + /// .oauth(oauth::Config::new() + /// .client_id("client-id") + /// .scopes(vec![String::from("openid")]) + /// .use_pkce_with_authorization_code_grant(true) + /// ); + /// ``` + pub fn oauth(mut self, oauth: oauth::Config) -> Self { + let config = self.config.get_or_insert(Default::default()); + config.oauth = Some(oauth); + + self + } + + /// Add custom [`Config`] into [`SwaggerUi`] which gives users more granular control over + /// Swagger UI options. + /// + /// Methods takes one [`Config`] argument which exposes Swagger UI's configurable options + /// to the users. + /// + /// # Examples + /// + /// Create a new [`SwaggerUi`] with custom configuration. + /// ```rust + /// # use fastapi_swagger_ui::{SwaggerUi, Config}; + /// # use fastapi::OpenApi; + /// # #[derive(OpenApi)] + /// # #[openapi()] + /// # struct ApiDoc; + /// let swagger = SwaggerUi::new("/swagger-ui/{_:.*}") + /// .url("/api-docs/openapi.json", ApiDoc::openapi()) + /// .config(Config::default().try_it_out_enabled(true).filter(true)); + /// ``` + pub fn config(mut self, config: Config<'static>) -> Self { + self.config = Some(config); + + self + } +} + +/// Rust type for Swagger UI url configuration object. +#[non_exhaustive] +#[cfg_attr(feature = "debug", derive(Debug))] +#[derive(Default, Serialize, Clone)] +pub struct Url<'a> { + name: Cow<'a, str>, + url: Cow<'a, str>, + #[serde(skip)] + primary: bool, +} + +impl<'a> Url<'a> { + /// Create new [`Url`]. + /// + /// Name is shown in the select dropdown when there are multiple docs in Swagger UI. + /// + /// Url is path which exposes the OpenAPI doc. + /// + /// # Examples + /// + /// ```rust + /// # use fastapi_swagger_ui::Url; + /// let url = Url::new("My Api", "/api-docs/openapi.json"); + /// ``` + pub fn new(name: &'a str, url: &'a str) -> Self { + Self { + name: Cow::Borrowed(name), + url: Cow::Borrowed(url), + ..Default::default() + } + } + + /// Create new [`Url`] with primary flag. + /// + /// Primary flag allows users to override the default behavior of the Swagger UI for selecting the primary + /// doc to display. By default when there are multiple docs in Swagger UI the first one in the list + /// will be the primary. + /// + /// Name is shown in the select dropdown when there are multiple docs in Swagger UI. + /// + /// Url is path which exposes the OpenAPI doc. + /// + /// # Examples + /// + /// Set "My Api" as primary. + /// ```rust + /// # use fastapi_swagger_ui::Url; + /// let url = Url::with_primary("My Api", "/api-docs/openapi.json", true); + /// ``` + pub fn with_primary(name: &'a str, url: &'a str, primary: bool) -> Self { + Self { + name: Cow::Borrowed(name), + url: Cow::Borrowed(url), + primary, + } + } +} + +impl<'a> From<&'a str> for Url<'a> { + fn from(url: &'a str) -> Self { + Self { + url: Cow::Borrowed(url), + ..Default::default() + } + } +} + +impl From for Url<'_> { + fn from(url: String) -> Self { + Self { + url: Cow::Owned(url), + ..Default::default() + } + } +} + +impl<'a> From> for Url<'a> { + fn from(url: Cow<'static, str>) -> Self { + Self { + url, + ..Default::default() + } + } +} + +const SWAGGER_STANDALONE_LAYOUT: &str = "StandaloneLayout"; +const SWAGGER_BASE_LAYOUT: &str = "BaseLayout"; + +/// Object used to alter Swagger UI settings. +/// +/// Config struct provides [Swagger UI configuration](https://github.com/swagger-api/swagger-ui/blob/master/docs/usage/configuration.md) +/// for settings which could be altered with **docker variables**. +/// +/// # Examples +/// +/// In simple case, create config directly from url that points to the api doc json. +/// ```rust +/// # use fastapi_swagger_ui::Config; +/// let config = Config::from("/api-doc.json"); +/// ``` +/// +/// If there is multiple api docs to serve config, the [`Config`] can be also be directly created with [`Config::new`] +/// ```rust +/// # use fastapi_swagger_ui::Config; +/// let config = Config::new(["/api-docs/openapi1.json", "/api-docs/openapi2.json"]); +/// ``` +/// +/// Or same as above but more verbose syntax. +/// ```rust +/// # use fastapi_swagger_ui::{Config, Url}; +/// let config = Config::new([ +/// Url::new("api1", "/api-docs/openapi1.json"), +/// Url::new("api2", "/api-docs/openapi2.json") +/// ]); +/// ``` +/// +/// With oauth config. +/// ```rust +/// # use fastapi_swagger_ui::{Config, oauth}; +/// let config = Config::with_oauth_config( +/// ["/api-docs/openapi1.json", "/api-docs/openapi2.json"], +/// oauth::Config::new(), +/// ); +/// ``` +#[non_exhaustive] +#[derive(Serialize, Clone)] +#[cfg_attr(feature = "debug", derive(Debug))] +#[serde(rename_all = "camelCase")] +pub struct Config<'a> { + /// Url to fetch external configuration from. + #[serde(skip_serializing_if = "Option::is_none")] + config_url: Option, + + /// Id of the DOM element where `Swagger UI` will put it's user interface. + #[serde(skip_serializing_if = "Option::is_none")] + #[serde(rename = "dom_id")] + dom_id: Option, + + /// [`Url`] the Swagger UI is serving. + #[serde(skip_serializing_if = "Option::is_none")] + url: Option, + + /// Name of the primary url if any. + #[serde(skip_serializing_if = "Option::is_none", rename = "urls.primaryName")] + urls_primary_name: Option, + + /// [`Url`]s the Swagger UI is serving. + #[serde(skip_serializing_if = "Vec::is_empty")] + urls: Vec>, + + /// Enables overriding configuration parameters with url query parameters. + #[serde(skip_serializing_if = "Option::is_none")] + query_config_enabled: Option, + + /// Controls whether [deep linking](https://github.com/swagger-api/swagger-ui/blob/master/docs/usage/deep-linking.md) + /// is enabled in OpenAPI spec. + /// + /// Deep linking automatically scrolls and expands UI to given url fragment. + #[serde(skip_serializing_if = "Option::is_none")] + deep_linking: Option, + + /// Controls whether operation id is shown in the operation list. + #[serde(skip_serializing_if = "Option::is_none")] + display_operation_id: Option, + + /// Default models expansion depth; -1 will completely hide the models. + #[serde(skip_serializing_if = "Option::is_none")] + default_models_expand_depth: Option, + + /// Default model expansion depth from model example section. + #[serde(skip_serializing_if = "Option::is_none")] + default_model_expand_depth: Option, + + /// Defines how models is show when API is first rendered. + #[serde(skip_serializing_if = "Option::is_none")] + default_model_rendering: Option, + + /// Define whether request duration in milliseconds is displayed for "Try it out" requests. + #[serde(skip_serializing_if = "Option::is_none")] + display_request_duration: Option, + + /// Controls default expansion for operations and tags. + #[serde(skip_serializing_if = "Option::is_none")] + doc_expansion: Option, + + /// Defines is filtering of tagged operations allowed with edit box in top bar. + #[serde(skip_serializing_if = "Option::is_none")] + filter: Option, + + /// Controls how many tagged operations are shown. By default all operations are shown. + #[serde(skip_serializing_if = "Option::is_none")] + max_displayed_tags: Option, + + /// Defines whether extensions are shown. + #[serde(skip_serializing_if = "Option::is_none")] + show_extensions: Option, + + /// Defines whether common extensions are shown. + #[serde(skip_serializing_if = "Option::is_none")] + show_common_extensions: Option, + + /// Defines whether "Try it out" section should be enabled by default. + #[serde(skip_serializing_if = "Option::is_none")] + try_it_out_enabled: Option, + + /// Defines whether request snippets section is enabled. If disabled legacy curl snipped + /// will be used. + #[serde(skip_serializing_if = "Option::is_none")] + request_snippets_enabled: Option, + + /// Oauth redirect url. + #[serde(skip_serializing_if = "Option::is_none")] + oauth2_redirect_url: Option, + + /// Defines whether request mutated with `requestInterceptor` will be used to produce curl command + /// in the UI. + #[serde(skip_serializing_if = "Option::is_none")] + show_mutated_request: Option, + + /// Define supported http request submit methods. + #[serde(skip_serializing_if = "Option::is_none")] + supported_submit_methods: Option>, + + /// Define validator url which is used to validate the Swagger spec. By default the validator swagger.io's + /// online validator is used. Setting this to none will disable spec validation. + #[serde(skip_serializing_if = "Option::is_none")] + validator_url: Option, + + /// Enables passing credentials to CORS requests as defined + /// [fetch standards](https://fetch.spec.whatwg.org/#credentials). + #[serde(skip_serializing_if = "Option::is_none")] + with_credentials: Option, + + /// Defines whether authorizations is persisted throughout browser refresh and close. + #[serde(skip_serializing_if = "Option::is_none")] + persist_authorization: Option, + + /// [`oauth::Config`] the Swagger UI is using for auth flow. + #[serde(skip)] + oauth: Option, + + /// Defines syntax highlighting specific options. + #[serde(skip_serializing_if = "Option::is_none")] + syntax_highlight: Option, + + /// The layout of Swagger UI uses, default is `"StandaloneLayout"`. + layout: &'a str, +} + +impl<'a> Config<'a> { + fn new_, U: Into>>( + urls: I, + oauth_config: Option, + ) -> Self { + let urls = urls.into_iter().map(Into::into).collect::>>(); + let urls_len = urls.len(); + + Self { + oauth: oauth_config, + ..if urls_len == 1 { + Self::new_config_with_single_url(urls) + } else { + Self::new_config_with_multiple_urls(urls) + } + } + } + + fn new_config_with_multiple_urls(urls: Vec>) -> Self { + let primary_name = urls + .iter() + .find(|url| url.primary) + .map(|url| url.name.to_string()); + + Self { + urls_primary_name: primary_name, + urls: urls + .into_iter() + .map(|mut url| { + if url.name == "" { + url.name = Cow::Owned(String::from(&url.url[..])); + + url + } else { + url + } + }) + .collect(), + ..Default::default() + } + } + + fn new_config_with_single_url(mut urls: Vec>) -> Self { + let url = urls.get_mut(0).map(mem::take).unwrap(); + let primary_name = if url.primary { + Some(url.name.to_string()) + } else { + None + }; + + Self { + urls_primary_name: primary_name, + url: if url.name == "" { + Some(url.url.to_string()) + } else { + None + }, + urls: if url.name != "" { + vec![url] + } else { + Vec::new() + }, + ..Default::default() + } + } + + /// Constructs a new [`Config`] from [`Iterator`] of [`Url`]s. + /// + /// [`Url`]s provided to the [`Config`] will only change the urls Swagger UI is going to use to + /// fetch the API document. This does not change the URL that is defined with [`SwaggerUi::url`] + /// or [`SwaggerUi::urls`] which defines the URL the API document is exposed from. + /// + /// # Examples + /// Create new config with 2 api doc urls. + /// ```rust + /// # use fastapi_swagger_ui::Config; + /// let config = Config::new(["/api-docs/openapi1.json", "/api-docs/openapi2.json"]); + /// ``` + pub fn new, U: Into>>(urls: I) -> Self { + Self::new_(urls, None) + } + + /// Constructs a new [`Config`] from [`Iterator`] of [`Url`]s. + /// + /// # Examples + /// Create new config with oauth config. + /// ```rust + /// # use fastapi_swagger_ui::{Config, oauth}; + /// let config = Config::with_oauth_config( + /// ["/api-docs/openapi1.json", "/api-docs/openapi2.json"], + /// oauth::Config::new(), + /// ); + /// ``` + pub fn with_oauth_config, U: Into>>( + urls: I, + oauth_config: oauth::Config, + ) -> Self { + Self::new_(urls, Some(oauth_config)) + } + + /// Configure defaults for current [`Config`]. + /// + /// A new [`Config`] will be created with given `urls` and its _**default values**_ and + /// _**url, urls and urls_primary_name**_ will be moved to the current [`Config`] the method + /// is called on. + /// + /// Current config will be returned with configured default values. + #[cfg(any(feature = "actix-web", feature = "rocket", feature = "axum"))] + #[cfg_attr( + doc_cfg, + doc(cfg(any(feature = "actix-web", feature = "rocket", feature = "axum"))) + )] + fn configure_defaults, U: Into>>(mut self, urls: I) -> Self { + let Config { + dom_id, + deep_linking, + url, + urls, + urls_primary_name, + .. + } = Config::new(urls); + + self.dom_id = dom_id; + self.deep_linking = deep_linking; + self.url = url; + self.urls = urls; + self.urls_primary_name = urls_primary_name; + + self + } + + /// Add url to fetch external configuration from. + /// + /// # Examples + /// + /// Set external config url. + /// ```rust + /// # use fastapi_swagger_ui::Config; + /// let config = Config::new(["/api-docs/openapi.json"]) + /// .config_url("http://url.to.external.config"); + /// ``` + pub fn config_url>(mut self, config_url: S) -> Self { + self.config_url = Some(config_url.into()); + + self + } + + /// Add id of the DOM element where `Swagger UI` will put it's user interface. + /// + /// The default value is `#swagger-ui`. + /// + /// # Examples + /// + /// Set custom dom id where the Swagger UI will place it's content. + /// ```rust + /// # use fastapi_swagger_ui::Config; + /// let config = Config::new(["/api-docs/openapi.json"]).dom_id("#my-id"); + /// ``` + pub fn dom_id>(mut self, dom_id: S) -> Self { + self.dom_id = Some(dom_id.into()); + + self + } + + /// Set `query_config_enabled` to allow overriding configuration parameters via url `query` + /// parameters. + /// + /// Default value is `false`. + /// + /// # Examples + /// + /// Enable query config. + /// ```rust + /// # use fastapi_swagger_ui::Config; + /// let config = Config::new(["/api-docs/openapi.json"]) + /// .query_config_enabled(true); + /// ``` + pub fn query_config_enabled(mut self, query_config_enabled: bool) -> Self { + self.query_config_enabled = Some(query_config_enabled); + + self + } + + /// Set `deep_linking` to allow deep linking tags and operations. + /// + /// Deep linking will automatically scroll to and expand operation when Swagger UI is + /// given corresponding url fragment. See more at + /// [deep linking docs](https://github.com/swagger-api/swagger-ui/blob/master/docs/usage/deep-linking.md). + /// + /// Deep linking is enabled by default. + /// + /// # Examples + /// + /// Disable the deep linking. + /// ```rust + /// # use fastapi_swagger_ui::Config; + /// let config = Config::new(["/api-docs/openapi.json"]) + /// .deep_linking(false); + /// ``` + pub fn deep_linking(mut self, deep_linking: bool) -> Self { + self.deep_linking = Some(deep_linking); + + self + } + + /// Set `display_operation_id` to `true` to show operation id in the operations list. + /// + /// Default value is `false`. + /// + /// # Examples + /// + /// Allow operation id to be shown. + /// ```rust + /// # use fastapi_swagger_ui::Config; + /// let config = Config::new(["/api-docs/openapi.json"]) + /// .display_operation_id(true); + /// ``` + pub fn display_operation_id(mut self, display_operation_id: bool) -> Self { + self.display_operation_id = Some(display_operation_id); + + self + } + + /// Set 'layout' to 'BaseLayout' to only use the base swagger layout without a search header. + /// + /// Default value is 'StandaloneLayout'. + /// + /// # Examples + /// + /// Configure Swagger to use Base Layout instead of Standalone + /// ```rust + /// # use fastapi_swagger_ui::Config; + /// let config = Config::new(["/api-docs/openapi.json"]) + /// .use_base_layout(); + /// ``` + pub fn use_base_layout(mut self) -> Self { + self.layout = SWAGGER_BASE_LAYOUT; + + self + } + + /// Add default models expansion depth. + /// + /// Setting this to `-1` will completely hide the models. + /// + /// # Examples + /// + /// Hide all the models. + /// ```rust + /// # use fastapi_swagger_ui::Config; + /// let config = Config::new(["/api-docs/openapi.json"]) + /// .default_models_expand_depth(-1); + /// ``` + pub fn default_models_expand_depth(mut self, default_models_expand_depth: isize) -> Self { + self.default_models_expand_depth = Some(default_models_expand_depth); + + self + } + + /// Add default model expansion depth for model on the example section. + /// + /// # Examples + /// + /// ```rust + /// # use fastapi_swagger_ui::Config; + /// let config = Config::new(["/api-docs/openapi.json"]) + /// .default_model_expand_depth(1); + /// ``` + pub fn default_model_expand_depth(mut self, default_model_expand_depth: isize) -> Self { + self.default_model_expand_depth = Some(default_model_expand_depth); + + self + } + + /// Add `default_model_rendering` to set how models is show when API is first rendered. + /// + /// The user can always switch the rendering for given model by clicking the `Model` and `Example Value` links. + /// + /// * `example` Makes example rendered first by default. + /// * `model` Makes model rendered first by default. + /// + /// # Examples + /// + /// ```rust + /// # use fastapi_swagger_ui::Config; + /// let config = Config::new(["/api-docs/openapi.json"]) + /// .default_model_rendering(r#"["example"*, "model"]"#); + /// ``` + pub fn default_model_rendering>(mut self, default_model_rendering: S) -> Self { + self.default_model_rendering = Some(default_model_rendering.into()); + + self + } + + /// Set to `true` to show request duration of _**'Try it out'**_ requests _**(in milliseconds)**_. + /// + /// Default value is `false`. + /// + /// # Examples + /// Enable request duration of the _**'Try it out'**_ requests. + /// ```rust + /// # use fastapi_swagger_ui::Config; + /// let config = Config::new(["/api-docs/openapi.json"]) + /// .display_request_duration(true); + /// ``` + pub fn display_request_duration(mut self, display_request_duration: bool) -> Self { + self.display_request_duration = Some(display_request_duration); + + self + } + + /// Add `doc_expansion` to control default expansion for operations and tags. + /// + /// * `list` Will expand only tags. + /// * `full` Will expand tags and operations. + /// * `none` Will expand nothing. + /// + /// # Examples + /// + /// ```rust + /// # use fastapi_swagger_ui::Config; + /// let config = Config::new(["/api-docs/openapi.json"]) + /// .doc_expansion(r#"["list"*, "full", "none"]"#); + /// ``` + pub fn doc_expansion>(mut self, doc_expansion: S) -> Self { + self.doc_expansion = Some(doc_expansion.into()); + + self + } + + /// Add `filter` to allow filtering of tagged operations. + /// + /// When enabled top bar will show and edit box that can be used to filter visible tagged operations. + /// Filter behaves case sensitive manner and matches anywhere inside the tag. + /// + /// Default value is `false`. + /// + /// # Examples + /// + /// Enable filtering. + /// ```rust + /// # use fastapi_swagger_ui::Config; + /// let config = Config::new(["/api-docs/openapi.json"]) + /// .filter(true); + /// ``` + pub fn filter(mut self, filter: bool) -> Self { + self.filter = Some(filter); + + self + } + + /// Add `max_displayed_tags` to restrict shown tagged operations. + /// + /// By default all operations are shown. + /// + /// # Examples + /// + /// Display only 4 operations. + /// ```rust + /// # use fastapi_swagger_ui::Config; + /// let config = Config::new(["/api-docs/openapi.json"]) + /// .max_displayed_tags(4); + /// ``` + pub fn max_displayed_tags(mut self, max_displayed_tags: usize) -> Self { + self.max_displayed_tags = Some(max_displayed_tags); + + self + } + + /// Set `show_extensions` to adjust whether vendor extension _**`(x-)`**_ fields and values + /// are shown for operations, parameters, responses and schemas. + /// + /// # Example + /// + /// Show vendor extensions. + /// ```rust + /// # use fastapi_swagger_ui::Config; + /// let config = Config::new(["/api-docs/openapi.json"]) + /// .show_extensions(true); + /// ``` + pub fn show_extensions(mut self, show_extensions: bool) -> Self { + self.show_extensions = Some(show_extensions); + + self + } + + /// Add `show_common_extensions` to define whether common extension + /// _**`(pattern, maxLength, minLength, maximum, minimum)`**_ fields and values are shown + /// for parameters. + /// + /// # Examples + /// + /// Show common extensions. + /// ```rust + /// # use fastapi_swagger_ui::Config; + /// let config = Config::new(["/api-docs/openapi.json"]) + /// .show_common_extensions(true); + /// ``` + pub fn show_common_extensions(mut self, show_common_extensions: bool) -> Self { + self.show_common_extensions = Some(show_common_extensions); + + self + } + + /// Add `try_it_out_enabled` to enable _**'Try it out'**_ section by default. + /// + /// Default value is `false`. + /// + /// # Examples + /// + /// Enable _**'Try it out'**_ section by default. + /// ```rust + /// # use fastapi_swagger_ui::Config; + /// let config = Config::new(["/api-docs/openapi.json"]) + /// .try_it_out_enabled(true); + /// ``` + pub fn try_it_out_enabled(mut self, try_it_out_enabled: bool) -> Self { + self.try_it_out_enabled = Some(try_it_out_enabled); + + self + } + + /// Set `request_snippets_enabled` to enable request snippets section. + /// + /// If disabled legacy curl snipped will be used. + /// + /// Default value is `false`. + /// + /// # Examples + /// + /// Enable request snippets section. + /// ```rust + /// # use fastapi_swagger_ui::Config; + /// let config = Config::new(["/api-docs/openapi.json"]) + /// .request_snippets_enabled(true); + /// ``` + pub fn request_snippets_enabled(mut self, request_snippets_enabled: bool) -> Self { + self.request_snippets_enabled = Some(request_snippets_enabled); + + self + } + + /// Add oauth redirect url. + /// + /// # Examples + /// + /// Add oauth redirect url. + /// ```rust + /// # use fastapi_swagger_ui::Config; + /// let config = Config::new(["/api-docs/openapi.json"]) + /// .oauth2_redirect_url("http://my.oauth2.redirect.url"); + /// ``` + pub fn oauth2_redirect_url>(mut self, oauth2_redirect_url: S) -> Self { + self.oauth2_redirect_url = Some(oauth2_redirect_url.into()); + + self + } + + /// Add `show_mutated_request` to use request returned from `requestInterceptor` + /// to produce curl command in the UI. If set to `false` the request before `requestInterceptor` + /// was applied will be used. + /// + /// # Examples + /// + /// Use request after `requestInterceptor` to produce the curl command. + /// ```rust + /// # use fastapi_swagger_ui::Config; + /// let config = Config::new(["/api-docs/openapi.json"]) + /// .show_mutated_request(true); + /// ``` + pub fn show_mutated_request(mut self, show_mutated_request: bool) -> Self { + self.show_mutated_request = Some(show_mutated_request); + + self + } + + /// Add supported http methods for _**'Try it out'**_ operation. + /// + /// _**'Try it out'**_ will be enabled based on the given list of http methods when + /// the operation's http method is included within the list. + /// By giving an empty list will disable _**'Try it out'**_ from all operations but it will + /// **not** filter operations from the UI. + /// + /// By default all http operations are enabled. + /// + /// # Examples + /// + /// Set allowed http methods explicitly. + /// ```rust + /// # use fastapi_swagger_ui::Config; + /// let config = Config::new(["/api-docs/openapi.json"]) + /// .supported_submit_methods(["get", "put", "post", "delete", "options", "head", "patch", "trace"]); + /// ``` + /// + /// Allow _**'Try it out'**_ for only GET operations. + /// ```rust + /// # use fastapi_swagger_ui::Config; + /// let config = Config::new(["/api-docs/openapi.json"]) + /// .supported_submit_methods(["get"]); + /// ``` + pub fn supported_submit_methods, S: Into>( + mut self, + supported_submit_methods: I, + ) -> Self { + self.supported_submit_methods = Some( + supported_submit_methods + .into_iter() + .map(|method| method.into()) + .collect(), + ); + + self + } + + /// Add validator url which is used to validate the Swagger spec. + /// + /// This can also be set to use locally deployed validator for example see + /// [Validator Badge](https://github.com/swagger-api/validator-badge) for more details. + /// + /// By default swagger.io's online validator _**`(https://validator.swagger.io/validator)`**_ will be used. + /// Setting this to `none` will disable the validator. + /// + /// # Examples + /// + /// Disable the validator. + /// ```rust + /// # use fastapi_swagger_ui::Config; + /// let config = Config::new(["/api-docs/openapi.json"]) + /// .validator_url("none"); + /// ``` + pub fn validator_url>(mut self, validator_url: S) -> Self { + self.validator_url = Some(validator_url.into()); + + self + } + + /// Set `with_credentials` to enable passing credentials to CORS requests send by browser as defined + /// [fetch standards](https://fetch.spec.whatwg.org/#credentials). + /// + /// **Note!** that Swagger UI cannot currently set cookies cross-domain + /// (see [swagger-js#1163](https://github.com/swagger-api/swagger-js/issues/1163)) - + /// as a result, you will have to rely on browser-supplied cookies (which this setting enables sending) + /// that Swagger UI cannot control. + /// + /// # Examples + /// + /// Enable passing credentials to CORS requests. + /// ```rust + /// # use fastapi_swagger_ui::Config; + /// let config = Config::new(["/api-docs/openapi.json"]) + /// .with_credentials(true); + /// ``` + pub fn with_credentials(mut self, with_credentials: bool) -> Self { + self.with_credentials = Some(with_credentials); + + self + } + + /// Set to `true` to enable authorizations to be persisted throughout browser refresh and close. + /// + /// Default value is `false`. + /// + /// + /// # Examples + /// + /// Persists authorization throughout browser close and refresh. + /// ```rust + /// # use fastapi_swagger_ui::Config; + /// let config = Config::new(["/api-docs/openapi.json"]) + /// .persist_authorization(true); + /// ``` + pub fn persist_authorization(mut self, persist_authorization: bool) -> Self { + self.persist_authorization = Some(persist_authorization); + + self + } + + /// Set a specific configuration for syntax highlighting responses + /// and curl commands. + /// + /// By default, swagger-ui does syntax highlighting of responses + /// and curl commands. This may consume considerable resources in + /// the browser when executed on large responses. + /// + /// # Example + /// + /// Disable syntax highlighting. + /// ```rust + /// # use fastapi_swagger_ui::Config; + /// let config = Config::new(["/api-docs/openapi.json"]) + /// .with_syntax_highlight(false); + /// ``` + pub fn with_syntax_highlight>(mut self, syntax_highlight: H) -> Self { + self.syntax_highlight = Some(syntax_highlight.into()); + + self + } +} + +impl Default for Config<'_> { + fn default() -> Self { + Self { + config_url: Default::default(), + dom_id: Some("#swagger-ui".to_string()), + url: Default::default(), + urls_primary_name: Default::default(), + urls: Default::default(), + query_config_enabled: Default::default(), + deep_linking: Some(true), + display_operation_id: Default::default(), + default_models_expand_depth: Default::default(), + default_model_expand_depth: Default::default(), + default_model_rendering: Default::default(), + display_request_duration: Default::default(), + doc_expansion: Default::default(), + filter: Default::default(), + max_displayed_tags: Default::default(), + show_extensions: Default::default(), + show_common_extensions: Default::default(), + try_it_out_enabled: Default::default(), + request_snippets_enabled: Default::default(), + oauth2_redirect_url: Default::default(), + show_mutated_request: Default::default(), + supported_submit_methods: Default::default(), + validator_url: Default::default(), + with_credentials: Default::default(), + persist_authorization: Default::default(), + oauth: Default::default(), + syntax_highlight: Default::default(), + layout: SWAGGER_STANDALONE_LAYOUT, + } + } +} + +impl<'a> From<&'a str> for Config<'a> { + fn from(s: &'a str) -> Self { + Self::new([s]) + } +} + +impl From for Config<'_> { + fn from(s: String) -> Self { + Self::new([s]) + } +} + +/// Represents settings related to syntax highlighting of payloads and +/// cURL commands. +#[derive(Serialize, Clone)] +#[non_exhaustive] +pub struct SyntaxHighlight { + /// Boolean telling whether syntax highlighting should be + /// activated or not. Defaults to `true`. + pub activated: bool, + /// Highlight.js syntax coloring theme to use. + #[serde(skip_serializing_if = "Option::is_none")] + pub theme: Option<&'static str>, +} + +impl Default for SyntaxHighlight { + fn default() -> Self { + Self { + activated: true, + theme: None, + } + } +} + +impl From for SyntaxHighlight { + fn from(value: bool) -> Self { + Self { + activated: value, + ..Default::default() + } + } +} + +impl SyntaxHighlight { + /// Explicitly specifies whether syntax highlighting is to be + /// activated or not. Defaults to true. + pub fn activated(mut self, activated: bool) -> Self { + self.activated = activated; + self + } + + /// Explicitly specifies the + /// [Highlight.js](https://highlightjs.org/) coloring theme to + /// utilize for syntax highlighting. + pub fn theme(mut self, theme: &'static str) -> Self { + self.theme = Some(theme); + self + } +} + +/// Represents servable file of Swagger UI. This is used together with [`serve`] function +/// to serve Swagger UI files via web server. +#[non_exhaustive] +pub struct SwaggerFile<'a> { + /// Content of the file as [`Cow`] [`slice`] of bytes. + pub bytes: Cow<'a, [u8]>, + /// Content type of the file e.g `"text/xml"`. + pub content_type: String, +} + +/// User friendly way to serve Swagger UI and its content via web server. +/// +/// * **path** Should be the relative path to Swagger UI resource within the web server. +/// * **config** Swagger [`Config`] to use for the Swagger UI. +/// +/// Typically this function is implemented _**within**_ handler what serves the Swagger UI. Handler itself must +/// match to user defined path that points to the root of the Swagger UI and match everything relatively +/// from the root of the Swagger UI _**(tail path)**_. The relative path from root of the Swagger UI +/// is used to serve [`SwaggerFile`]s. If Swagger UI is served from path `/swagger-ui/` then the `tail` +/// is everything under the `/swagger-ui/` prefix. +/// +/// _There are also implementations in [examples of fastapi repository][examples]._ +/// +/// [examples]: https://github.com/nxpkg/fastapi/tree/master/examples +/// +/// # Examples +/// +/// _**Reference implementation with `actix-web`.**_ +/// ```rust +/// # use actix_web::HttpResponse; +/// # use std::sync::Arc; +/// # use fastapi_swagger_ui::Config; +/// // The config should be created in main function or in initialization before +/// // creation of the handler which will handle serving the Swagger UI. +/// let config = Arc::new(Config::from("/api-doc.json")); +/// +/// // This "/" is for demonstrative purposes only. The actual path should point to +/// // file within Swagger UI. In real implementation this is the `tail` path from root of the +/// // Swagger UI to the file served. +/// let tail_path = "/"; +/// +/// fn get_swagger_ui(tail_path: String, config: Arc) -> HttpResponse { +/// match fastapi_swagger_ui::serve(tail_path.as_ref(), config) { +/// Ok(swagger_file) => swagger_file +/// .map(|file| { +/// HttpResponse::Ok() +/// .content_type(file.content_type) +/// .body(file.bytes.to_vec()) +/// }) +/// .unwrap_or_else(|| HttpResponse::NotFound().finish()), +/// Err(error) => HttpResponse::InternalServerError().body(error.to_string()), +/// } +/// } +/// ``` +pub fn serve<'a>( + path: &str, + config: Arc>, +) -> Result>, Box> { + let mut file_path = path; + + if file_path.is_empty() || file_path == "/" { + file_path = "index.html"; + } + + if let Some(file) = SwaggerUiDist::get(file_path) { + let mut bytes = file.data; + + if file_path == "swagger-initializer.js" { + let mut file = match String::from_utf8(bytes.to_vec()) { + Ok(file) => file, + Err(error) => return Err(Box::new(error)), + }; + + file = format_config(config.as_ref(), file)?; + + if let Some(oauth) = &config.oauth { + match oauth::format_swagger_config(oauth, file) { + Ok(oauth_file) => file = oauth_file, + Err(error) => return Err(Box::new(error)), + } + } + + bytes = Cow::Owned(file.as_bytes().to_vec()) + }; + + Ok(Some(SwaggerFile { + bytes, + content_type: mime_guess::from_path(file_path) + .first_or_octet_stream() + .to_string(), + })) + } else { + Ok(None) + } +} + +#[inline] +fn format_config(config: &Config, file: String) -> Result> { + let config_json = match serde_json::to_string_pretty(&config) { + Ok(config) => config, + Err(error) => return Err(Box::new(error)), + }; + + // Replace {{config}} with pretty config json and remove the curly brackets `{ }` from beginning and the end. + Ok(file.replace("{{config}}", &config_json[2..&config_json.len() - 2])) +} + +/// Is used to provide general way to deliver multiple types of OpenAPI docs via `fastapi-swagger-ui`. +#[cfg(any(feature = "actix-web", feature = "rocket", feature = "axum"))] +#[derive(Clone)] +enum ApiDoc { + Fastapi(fastapi::openapi::OpenApi), + Value(serde_json::Value), +} + +// Delegate serde's `Serialize` to the variant itself. +#[cfg(any(feature = "actix-web", feature = "rocket", feature = "axum"))] +impl Serialize for ApiDoc { + fn serialize(&self, serializer: S) -> Result + where + S: serde::Serializer, + { + match self { + Self::Value(value) => value.serialize(serializer), + Self::Fastapi(fastapi) => fastapi.serialize(serializer), + } + } +} + +#[cfg(test)] +mod tests { + use similar::TextDiff; + + use super::*; + + fn assert_diff_equal(expected: &str, new: &str) { + let diff = TextDiff::from_lines(expected, new); + + assert_eq!(expected, new, "\nDifference:\n{}", diff.unified_diff()); + } + + const TEST_INITIAL_CONFIG: &str = r#" +window.ui = SwaggerUIBundle({ + {{config}}, + presets: [ + SwaggerUIBundle.presets.apis, + SwaggerUIStandalonePreset + ], + plugins: [ + SwaggerUIBundle.plugins.DownloadUrl + ], +});"#; + + #[test] + fn format_swagger_config_json_single_url() { + let formatted_config = match format_config( + &Config::new(["/api-docs/openapi1.json"]), + String::from(TEST_INITIAL_CONFIG), + ) { + Ok(file) => file, + Err(error) => panic!("{error}"), + }; + + const EXPECTED: &str = r###" +window.ui = SwaggerUIBundle({ + "dom_id": "#swagger-ui", + "url": "/api-docs/openapi1.json", + "deepLinking": true, + "layout": "StandaloneLayout", + presets: [ + SwaggerUIBundle.presets.apis, + SwaggerUIStandalonePreset + ], + plugins: [ + SwaggerUIBundle.plugins.DownloadUrl + ], +});"###; + + assert_diff_equal(EXPECTED, &formatted_config) + } + + #[test] + fn format_swagger_config_json_single_url_with_name() { + let formatted_config = match format_config( + &Config::new([Url::new("api-doc1", "/api-docs/openapi1.json")]), + String::from(TEST_INITIAL_CONFIG), + ) { + Ok(file) => file, + Err(error) => panic!("{error}"), + }; + + const EXPECTED: &str = r###" +window.ui = SwaggerUIBundle({ + "dom_id": "#swagger-ui", + "urls": [ + { + "name": "api-doc1", + "url": "/api-docs/openapi1.json" + } + ], + "deepLinking": true, + "layout": "StandaloneLayout", + presets: [ + SwaggerUIBundle.presets.apis, + SwaggerUIStandalonePreset + ], + plugins: [ + SwaggerUIBundle.plugins.DownloadUrl + ], +});"###; + + assert_diff_equal(EXPECTED, &formatted_config); + } + + #[test] + fn format_swagger_config_json_single_url_primary() { + let formatted_config = match format_config( + &Config::new([Url::with_primary( + "api-doc1", + "/api-docs/openapi1.json", + true, + )]), + String::from(TEST_INITIAL_CONFIG), + ) { + Ok(file) => file, + Err(error) => panic!("{error}"), + }; + + const EXPECTED: &str = r###" +window.ui = SwaggerUIBundle({ + "dom_id": "#swagger-ui", + "urls.primaryName": "api-doc1", + "urls": [ + { + "name": "api-doc1", + "url": "/api-docs/openapi1.json" + } + ], + "deepLinking": true, + "layout": "StandaloneLayout", + presets: [ + SwaggerUIBundle.presets.apis, + SwaggerUIStandalonePreset + ], + plugins: [ + SwaggerUIBundle.plugins.DownloadUrl + ], +});"###; + + assert_diff_equal(EXPECTED, &formatted_config); + } + + #[test] + fn format_swagger_config_multiple_urls_with_primary() { + let formatted_config = match format_config( + &Config::new([ + Url::with_primary("api-doc1", "/api-docs/openapi1.json", true), + Url::new("api-doc2", "/api-docs/openapi2.json"), + ]), + String::from(TEST_INITIAL_CONFIG), + ) { + Ok(file) => file, + Err(error) => panic!("{error}"), + }; + + const EXPECTED: &str = r###" +window.ui = SwaggerUIBundle({ + "dom_id": "#swagger-ui", + "urls.primaryName": "api-doc1", + "urls": [ + { + "name": "api-doc1", + "url": "/api-docs/openapi1.json" + }, + { + "name": "api-doc2", + "url": "/api-docs/openapi2.json" + } + ], + "deepLinking": true, + "layout": "StandaloneLayout", + presets: [ + SwaggerUIBundle.presets.apis, + SwaggerUIStandalonePreset + ], + plugins: [ + SwaggerUIBundle.plugins.DownloadUrl + ], +});"###; + + assert_diff_equal(EXPECTED, &formatted_config); + } + + #[test] + fn format_swagger_config_multiple_urls() { + let formatted_config = match format_config( + &Config::new(["/api-docs/openapi1.json", "/api-docs/openapi2.json"]), + String::from(TEST_INITIAL_CONFIG), + ) { + Ok(file) => file, + Err(error) => panic!("{error}"), + }; + + const EXPECTED: &str = r###" +window.ui = SwaggerUIBundle({ + "dom_id": "#swagger-ui", + "urls": [ + { + "name": "/api-docs/openapi1.json", + "url": "/api-docs/openapi1.json" + }, + { + "name": "/api-docs/openapi2.json", + "url": "/api-docs/openapi2.json" + } + ], + "deepLinking": true, + "layout": "StandaloneLayout", + presets: [ + SwaggerUIBundle.presets.apis, + SwaggerUIStandalonePreset + ], + plugins: [ + SwaggerUIBundle.plugins.DownloadUrl + ], +});"###; + + assert_diff_equal(EXPECTED, &formatted_config); + } + + #[test] + fn format_swagger_config_with_multiple_fields() { + let formatted_config = match format_config( + &Config::new(["/api-docs/openapi1.json"]) + .deep_linking(false) + .dom_id("#another-el") + .default_model_expand_depth(-1) + .default_model_rendering(r#"["example"*]"#) + .default_models_expand_depth(1) + .display_operation_id(true) + .display_request_duration(true) + .filter(true) + .use_base_layout() + .doc_expansion(r#"["list"*]"#) + .max_displayed_tags(1) + .oauth2_redirect_url("http://auth") + .persist_authorization(true) + .query_config_enabled(true) + .request_snippets_enabled(true) + .show_common_extensions(true) + .show_extensions(true) + .show_mutated_request(true) + .supported_submit_methods(["get"]) + .try_it_out_enabled(true) + .validator_url("none") + .with_credentials(true), + String::from(TEST_INITIAL_CONFIG), + ) { + Ok(file) => file, + Err(error) => panic!("{error}"), + }; + + const EXPECTED: &str = r###" +window.ui = SwaggerUIBundle({ + "dom_id": "#another-el", + "url": "/api-docs/openapi1.json", + "queryConfigEnabled": true, + "deepLinking": false, + "displayOperationId": true, + "defaultModelsExpandDepth": 1, + "defaultModelExpandDepth": -1, + "defaultModelRendering": "[\"example\"*]", + "displayRequestDuration": true, + "docExpansion": "[\"list\"*]", + "filter": true, + "maxDisplayedTags": 1, + "showExtensions": true, + "showCommonExtensions": true, + "tryItOutEnabled": true, + "requestSnippetsEnabled": true, + "oauth2RedirectUrl": "http://auth", + "showMutatedRequest": true, + "supportedSubmitMethods": [ + "get" + ], + "validatorUrl": "none", + "withCredentials": true, + "persistAuthorization": true, + "layout": "BaseLayout", + presets: [ + SwaggerUIBundle.presets.apis, + SwaggerUIStandalonePreset + ], + plugins: [ + SwaggerUIBundle.plugins.DownloadUrl + ], +});"###; + + assert_diff_equal(EXPECTED, &formatted_config); + } + + #[test] + fn format_swagger_config_with_syntax_highlight_default() { + let formatted_config = match format_config( + &Config::new(["/api-docs/openapi1.json"]) + .with_syntax_highlight(SyntaxHighlight::default()), + String::from(TEST_INITIAL_CONFIG), + ) { + Ok(file) => file, + Err(error) => panic!("{error}"), + }; + + const EXPECTED: &str = r###" +window.ui = SwaggerUIBundle({ + "dom_id": "#swagger-ui", + "url": "/api-docs/openapi1.json", + "deepLinking": true, + "syntaxHighlight": { + "activated": true + }, + "layout": "StandaloneLayout", + presets: [ + SwaggerUIBundle.presets.apis, + SwaggerUIStandalonePreset + ], + plugins: [ + SwaggerUIBundle.plugins.DownloadUrl + ], +});"###; + + assert_diff_equal(EXPECTED, &formatted_config); + } + + #[test] + fn format_swagger_config_with_syntax_highlight_on() { + let formatted_config = match format_config( + &Config::new(["/api-docs/openapi1.json"]).with_syntax_highlight(true), + String::from(TEST_INITIAL_CONFIG), + ) { + Ok(file) => file, + Err(error) => panic!("{error}"), + }; + + const EXPECTED: &str = r###" +window.ui = SwaggerUIBundle({ + "dom_id": "#swagger-ui", + "url": "/api-docs/openapi1.json", + "deepLinking": true, + "syntaxHighlight": { + "activated": true + }, + "layout": "StandaloneLayout", + presets: [ + SwaggerUIBundle.presets.apis, + SwaggerUIStandalonePreset + ], + plugins: [ + SwaggerUIBundle.plugins.DownloadUrl + ], +});"###; + + assert_diff_equal(EXPECTED, &formatted_config); + } + + #[test] + fn format_swagger_config_with_syntax_highlight_off() { + let formatted_config = match format_config( + &Config::new(["/api-docs/openapi1.json"]).with_syntax_highlight(false), + String::from(TEST_INITIAL_CONFIG), + ) { + Ok(file) => file, + Err(error) => panic!("{error}"), + }; + + const EXPECTED: &str = r###" +window.ui = SwaggerUIBundle({ + "dom_id": "#swagger-ui", + "url": "/api-docs/openapi1.json", + "deepLinking": true, + "syntaxHighlight": { + "activated": false + }, + "layout": "StandaloneLayout", + presets: [ + SwaggerUIBundle.presets.apis, + SwaggerUIStandalonePreset + ], + plugins: [ + SwaggerUIBundle.plugins.DownloadUrl + ], +});"###; + + assert_diff_equal(EXPECTED, &formatted_config); + } + + #[test] + fn format_swagger_config_with_syntax_highlight_default_with_theme() { + let formatted_config = match format_config( + &Config::new(["/api-docs/openapi1.json"]) + .with_syntax_highlight(SyntaxHighlight::default().theme("monokai")), + String::from(TEST_INITIAL_CONFIG), + ) { + Ok(file) => file, + Err(error) => panic!("{error}"), + }; + + const EXPECTED: &str = r###" +window.ui = SwaggerUIBundle({ + "dom_id": "#swagger-ui", + "url": "/api-docs/openapi1.json", + "deepLinking": true, + "syntaxHighlight": { + "activated": true, + "theme": "monokai" + }, + "layout": "StandaloneLayout", + presets: [ + SwaggerUIBundle.presets.apis, + SwaggerUIStandalonePreset + ], + plugins: [ + SwaggerUIBundle.plugins.DownloadUrl + ], +});"###; + + assert_diff_equal(EXPECTED, &formatted_config); + } +} diff --git a/fastapi-swagger-ui/src/oauth.rs b/fastapi-swagger-ui/src/oauth.rs new file mode 100644 index 0000000..c2f5dc6 --- /dev/null +++ b/fastapi-swagger-ui/src/oauth.rs @@ -0,0 +1,315 @@ +//! Implements Swagger UI [oauth configuration](https://github.com/swagger-api/swagger-ui/blob/master/docs/usage/oauth2.md) options. + +use std::collections::HashMap; + +use serde::Serialize; + +const END_MARKER: &str = "//"; + +/// Object used to alter Swagger UI oauth settings. +/// +/// # Examples +/// +/// ```rust +/// # use fastapi_swagger_ui::oauth; +/// let config = oauth::Config::new() +/// .client_id("client-id") +/// .use_pkce_with_authorization_code_grant(true); +/// ``` +#[non_exhaustive] +#[derive(Default, Clone, Serialize)] +#[cfg_attr(feature = "debug", derive(Debug))] +#[serde(rename_all = "camelCase")] +pub struct Config { + /// oauth client_id the Swagger UI is using for auth flow. + #[serde(skip_serializing_if = "Option::is_none")] + pub client_id: Option, + + /// oauth client_secret the Swagger UI is using for auth flow. + #[serde(skip_serializing_if = "Option::is_none")] + pub client_secret: Option, + + /// oauth realm the Swagger UI is using for auth flow. + /// realm query parameter (for oauth1) added to authorizationUrl and tokenUrl. + #[serde(skip_serializing_if = "Option::is_none")] + pub realm: Option, + + /// oauth app_name the Swagger UI is using for auth flow. + /// application name, displayed in authorization popup. + #[serde(skip_serializing_if = "Option::is_none")] + pub app_name: Option, + + /// oauth scope_separator the Swagger UI is using for auth flow. + /// scope separator for passing scopes, encoded before calling, default value is a space (encoded value %20). + #[serde(skip_serializing_if = "Option::is_none")] + pub scope_separator: Option, + + /// oauth scopes the Swagger UI is using for auth flow. + /// [`Vec`] of initially selected oauth scopes, default is empty. + #[serde(skip_serializing_if = "Option::is_none")] + pub scopes: Option>, + + /// oauth additional_query_string_params the Swagger UI is using for auth flow. + /// [`HashMap`] of additional query parameters added to authorizationUrl and tokenUrl. + #[serde(skip_serializing_if = "Option::is_none")] + pub additional_query_string_params: Option>, + + /// oauth use_basic_authentication_with_access_code_grant the Swagger UI is using for auth flow. + /// Only activated for the accessCode flow. During the authorization_code request to the tokenUrl, + /// pass the [Client Password](https://tools.ietf.org/html/rfc6749#section-2.3.1) using the HTTP Basic Authentication scheme + /// (Authorization header with Basic base64encode(client_id + client_secret)). + /// The default is false. + #[serde(skip_serializing_if = "Option::is_none")] + pub use_basic_authentication_with_access_code_grant: Option, + + /// oauth use_pkce_with_authorization_code_grant the Swagger UI is using for auth flow. + /// Only applies to authorizationCode flows. [Proof Key for Code Exchange](https://tools.ietf.org/html/rfc7636) + /// brings enhanced security for OAuth public clients. + /// The default is false. + #[serde(skip_serializing_if = "Option::is_none")] + pub use_pkce_with_authorization_code_grant: Option, +} + +impl Config { + /// Create a new [`Config`] for oauth auth flow. + /// + /// # Examples + /// + /// ```rust + /// # use fastapi_swagger_ui::oauth; + /// let config = oauth::Config::new(); + /// ``` + pub fn new() -> Self { + Self { + ..Default::default() + } + } + + /// Add client_id into [`Config`]. + /// + /// Method takes one argument which exposes the client_id to the user. + /// + /// # Examples + /// + /// ```rust + /// # use fastapi_swagger_ui::oauth; + /// let config = oauth::Config::new() + /// .client_id("client-id"); + /// ``` + pub fn client_id(mut self, client_id: &str) -> Self { + self.client_id = Some(String::from(client_id)); + + self + } + + /// Add client_secret into [`Config`]. + /// + /// Method takes one argument which exposes the client_secret to the user. + /// 🚨 Never use this parameter in your production environment. + /// It exposes crucial security information. This feature is intended for dev/test environments only. 🚨 + /// + /// # Examples + /// + /// ```rust + /// # use fastapi_swagger_ui::oauth; + /// let config = oauth::Config::new() + /// .client_secret("client-secret"); + /// ``` + pub fn client_secret(mut self, client_secret: &str) -> Self { + self.client_secret = Some(String::from(client_secret)); + + self + } + + /// Add realm into [`Config`]. + /// + /// Method takes one argument which exposes the realm to the user. + /// realm query parameter (for oauth1) added to authorizationUrl and tokenUrl. + /// + /// # Examples + /// + /// ```rust + /// # use fastapi_swagger_ui::oauth; + /// let config = oauth::Config::new() + /// .realm("realm"); + /// ``` + pub fn realm(mut self, realm: &str) -> Self { + self.realm = Some(String::from(realm)); + + self + } + + /// Add app_name into [`Config`]. + /// + /// Method takes one argument which exposes the app_name to the user. + /// application name, displayed in authorization popup. + /// + /// # Examples + /// + /// ```rust + /// # use fastapi_swagger_ui::oauth; + /// let config = oauth::Config::new() + /// .app_name("app-name"); + /// ``` + pub fn app_name(mut self, app_name: &str) -> Self { + self.app_name = Some(String::from(app_name)); + + self + } + + /// Add scope_separator into [`Config`]. + /// + /// Method takes one argument which exposes the scope_separator to the user. + /// scope separator for passing scopes, encoded before calling, default value is a space (encoded value %20). + /// + /// # Examples + /// + /// ```rust + /// # use fastapi_swagger_ui::oauth; + /// let config = oauth::Config::new() + /// .scope_separator(","); + /// ``` + pub fn scope_separator(mut self, scope_separator: &str) -> Self { + self.scope_separator = Some(String::from(scope_separator)); + + self + } + + /// Add scopes into [`Config`]. + /// + /// Method takes one argument which exposes the scopes to the user. + /// [`Vec`] of initially selected oauth scopes, default is empty. + /// + /// # Examples + /// + /// ```rust + /// # use fastapi_swagger_ui::oauth; + /// let config = oauth::Config::new() + /// .scopes(vec![String::from("openid")]); + /// ``` + pub fn scopes(mut self, scopes: Vec) -> Self { + self.scopes = Some(scopes); + + self + } + + /// Add additional_query_string_params into [`Config`]. + /// + /// Method takes one argument which exposes the additional_query_string_params to the user. + /// [`HashMap`] of additional query parameters added to authorizationUrl and tokenUrl. + /// + /// # Examples + /// + /// ```rust + /// # use fastapi_swagger_ui::oauth; + /// # use std::collections::HashMap; + /// let config = oauth::Config::new() + /// .additional_query_string_params(HashMap::from([(String::from("a"), String::from("1"))])); + /// ``` + pub fn additional_query_string_params( + mut self, + additional_query_string_params: HashMap, + ) -> Self { + self.additional_query_string_params = Some(additional_query_string_params); + + self + } + + /// Add use_basic_authentication_with_access_code_grant into [`Config`]. + /// + /// Method takes one argument which exposes the use_basic_authentication_with_access_code_grant to the user. + /// Only activated for the accessCode flow. During the authorization_code request to the tokenUrl, + /// pass the [Client Password](https://tools.ietf.org/html/rfc6749#section-2.3.1) using the HTTP Basic Authentication scheme + /// (Authorization header with Basic base64encode(client_id + client_secret)). + /// The default is false. + /// + /// # Examples + /// + /// ```rust + /// # use fastapi_swagger_ui::oauth; + /// let config = oauth::Config::new() + /// .use_basic_authentication_with_access_code_grant(true); + /// ``` + pub fn use_basic_authentication_with_access_code_grant( + mut self, + use_basic_authentication_with_access_code_grant: bool, + ) -> Self { + self.use_basic_authentication_with_access_code_grant = + Some(use_basic_authentication_with_access_code_grant); + + self + } + + /// Add use_pkce_with_authorization_code_grant into [`Config`]. + /// + /// Method takes one argument which exposes the use_pkce_with_authorization_code_grant to the user. + /// Only applies to authorizationCode flows. [Proof Key for Code Exchange](https://tools.ietf.org/html/rfc7636) + /// brings enhanced security for OAuth public clients. + /// The default is false. + /// + /// # Examples + /// + /// ```rust + /// # use fastapi_swagger_ui::oauth; + /// let config = oauth::Config::new() + /// .use_pkce_with_authorization_code_grant(true); + /// ``` + pub fn use_pkce_with_authorization_code_grant( + mut self, + use_pkce_with_authorization_code_grant: bool, + ) -> Self { + self.use_pkce_with_authorization_code_grant = Some(use_pkce_with_authorization_code_grant); + + self + } +} + +pub(crate) fn format_swagger_config(config: &Config, file: String) -> serde_json::Result { + let init_string = format!( + "{}\nui.initOAuth({});", + END_MARKER, + serde_json::to_string_pretty(config)? + ); + Ok(file.replace(END_MARKER, &init_string)) +} + +#[cfg(test)] +mod tests { + use super::*; + + const TEST_CONTENT: &str = r###"" + // + window.ui = SwaggerUIBundle({ + {{urls}}, + dom_id: '#swagger-ui', + deepLinking: true, + presets: [ + SwaggerUIBundle.presets.apis, + SwaggerUIStandalonePreset + ], + plugins: [ + SwaggerUIBundle.plugins.DownloadUrl + ], + layout: "StandaloneLayout" + }); + // + ""###; + + #[test] + fn format_swagger_config_oauth() { + let config = Config { + client_id: Some(String::from("my-special-client")), + ..Default::default() + }; + let file = super::format_swagger_config(&config, TEST_CONTENT.to_string()).unwrap(); + + let expected = r#" +ui.initOAuth({ + "clientId": "my-special-client" +});"#; + assert!( + file.contains(expected), + "expected file to contain {expected}, was {file}" + ) + } +} diff --git a/fastapi-swagger-ui/src/rocket.rs b/fastapi-swagger-ui/src/rocket.rs new file mode 100644 index 0000000..fe5af30 --- /dev/null +++ b/fastapi-swagger-ui/src/rocket.rs @@ -0,0 +1,119 @@ +#![cfg(feature = "rocket")] + +use std::{borrow::Cow, io::Cursor, sync::Arc}; + +use rocket::{ + http::{Header, Status}, + response::{status::NotFound, Responder as RocketResponder}, + route::{Handler, Outcome}, + serde::json::Json, + Data as RocketData, Request, Response, Route, +}; + +use crate::{ApiDoc, Config, SwaggerFile, SwaggerUi}; + +impl From for Vec { + fn from(swagger_ui: SwaggerUi) -> Self { + let mut routes = + Vec::::with_capacity(swagger_ui.urls.len() + 1 + swagger_ui.external_urls.len()); + let mut api_docs = + Vec::::with_capacity(swagger_ui.urls.len() + swagger_ui.external_urls.len()); + + let urls = swagger_ui + .urls + .into_iter() + .map(|(url, openapi)| (url, ApiDoc::Fastapi(openapi))) + .chain( + swagger_ui + .external_urls + .into_iter() + .map(|(url, api_doc)| (url, ApiDoc::Value(api_doc))), + ) + .map(|(url, openapi)| { + api_docs.push(Route::new( + rocket::http::Method::Get, + &url.url, + ServeApiDoc(openapi), + )); + url + }); + + routes.push(Route::new( + rocket::http::Method::Get, + swagger_ui.path.as_ref(), + ServeSwagger( + swagger_ui.path.clone(), + Arc::new(if let Some(config) = swagger_ui.config { + if config.url.is_some() || !config.urls.is_empty() { + config + } else { + config.configure_defaults(urls) + } + } else { + Config::new(urls) + }), + ), + )); + routes.extend(api_docs); + + routes + } +} + +#[derive(Clone)] +struct ServeApiDoc(ApiDoc); + +#[rocket::async_trait] +impl Handler for ServeApiDoc { + async fn handle<'r>(&self, request: &'r Request<'_>, _: RocketData<'r>) -> Outcome<'r> { + Outcome::from(request, Json(self.0.clone())) + } +} + +#[derive(Clone)] +struct ServeSwagger(Cow<'static, str>, Arc>); + +#[rocket::async_trait] +impl Handler for ServeSwagger { + async fn handle<'r>(&self, request: &'r Request<'_>, _: RocketData<'r>) -> Outcome<'r> { + let mut base_path = self.0.as_ref(); + if let Some(index) = self.0.find('<') { + base_path = &base_path[..index]; + } + + let request_path = request.uri().path().as_str(); + let request_path = match request_path.strip_prefix(base_path) { + Some(stripped) => stripped, + None => return Outcome::from(request, RedirectResponder(base_path.into())), + }; + match super::serve(request_path, self.1.clone()) { + Ok(swagger_file) => swagger_file + .map(|file| Outcome::from(request, file)) + .unwrap_or_else(|| Outcome::from(request, NotFound("Swagger UI file not found"))), + Err(error) => Outcome::from( + request, + rocket::response::status::Custom(Status::InternalServerError, error.to_string()), + ), + } + } +} + +impl<'r, 'o: 'r> RocketResponder<'r, 'o> for SwaggerFile<'o> { + fn respond_to(self, _: &'r Request<'_>) -> rocket::response::Result<'o> { + Ok(Response::build() + .header(Header::new("Content-Type", self.content_type)) + .sized_body(self.bytes.len(), Cursor::new(self.bytes.to_vec())) + .status(Status::Ok) + .finalize()) + } +} + +struct RedirectResponder(String); +impl<'r, 'a: 'r> RocketResponder<'r, 'a> for RedirectResponder { + fn respond_to(self, _request: &'r Request<'_>) -> rocket::response::Result<'a> { + Response::build() + .status(Status::Found) + .raw_header("Location", self.0) + .ok() + } +} diff --git a/fastapi/Cargo.toml b/fastapi/Cargo.toml new file mode 100644 index 0000000..2e3da17 --- /dev/null +++ b/fastapi/Cargo.toml @@ -0,0 +1,76 @@ +[package] +name = "fastapi" +description = "Compile time generated OpenAPI documentation for Rust" +version = "0.1.1" +edition = "2021" +license = "MIT OR Apache-2.0" +readme = "README.md" +keywords = [ + "rest-api", + "openapi", + "auto-generate", + "documentation", + "compile-time", +] +# documentation = "" +# homepage = "" +repository = "https://github.com/nxpkg/fastapi" +categories = ["web-programming"] +authors = ["Md Sulaiman "] +rust-version.workspace = true + +[features] +# See README.md for list and explanations of features +default = ["macros"] +debug = ["fastapi-gen?/debug"] +actix_extras = ["fastapi-gen?/actix_extras"] +rocket_extras = ["fastapi-gen?/rocket_extras"] +axum_extras = ["fastapi-gen?/axum_extras"] +chrono = ["fastapi-gen?/chrono"] +decimal = ["fastapi-gen?/decimal"] +decimal_float = ["fastapi-gen?/decimal_float"] +non_strict_integers = ["fastapi-gen?/non_strict_integers"] +yaml = ["serde_yaml", "fastapi-gen?/yaml"] +uuid = ["fastapi-gen?/uuid"] +ulid = ["fastapi-gen?/ulid"] +url = ["fastapi-gen?/url"] +time = ["fastapi-gen?/time"] +smallvec = ["fastapi-gen?/smallvec"] +indexmap = ["fastapi-gen?/indexmap"] +openapi_extensions = [] +repr = ["fastapi-gen?/repr"] +preserve_order = [] +preserve_path_order = [] +rc_schema = ["fastapi-gen?/rc_schema"] +macros = ["dep:fastapi-gen"] +config = ["fastapi-gen?/config"] + +# EXPERIEMENTAL! use with cauntion +auto_into_responses = ["fastapi-gen?/auto_into_responses"] + +[dependencies] +serde = { version = "1.0", features = ["derive"] } +serde_json = { version = "1.0" } +serde_yaml = { version = "0.9", optional = true } +fastapi-gen = { version = "0.1.1", path = "../fastapi-gen", optional = true } +indexmap = { version = "2", features = ["serde"] } + +[dev-dependencies] +assert-json-diff = "2" +fastapi = { path = ".", features = ["debug"] } + +[package.metadata.docs.rs] +features = [ + "actix_extras", + "non_strict_integers", + "openapi_extensions", + "uuid", + "ulid", + "url", + "yaml", + "macros", +] +rustdoc-args = ["--cfg", "doc_cfg"] + +[lints.rust] +unexpected_cfgs = { level = "warn", check-cfg = ['cfg(doc_cfg)'] } diff --git a/fastapi/LICENSE-APACHE b/fastapi/LICENSE-APACHE new file mode 120000 index 0000000..965b606 --- /dev/null +++ b/fastapi/LICENSE-APACHE @@ -0,0 +1 @@ +../LICENSE-APACHE \ No newline at end of file diff --git a/fastapi/LICENSE-MIT b/fastapi/LICENSE-MIT new file mode 120000 index 0000000..76219eb --- /dev/null +++ b/fastapi/LICENSE-MIT @@ -0,0 +1 @@ +../LICENSE-MIT \ No newline at end of file diff --git a/fastapi/README.md b/fastapi/README.md new file mode 120000 index 0000000..32d46ee --- /dev/null +++ b/fastapi/README.md @@ -0,0 +1 @@ +../README.md \ No newline at end of file diff --git a/fastapi/src/lib.rs b/fastapi/src/lib.rs new file mode 100644 index 0000000..eca4d4b --- /dev/null +++ b/fastapi/src/lib.rs @@ -0,0 +1,1736 @@ +#![warn(missing_docs)] +#![warn(rustdoc::broken_intra_doc_links)] +#![cfg_attr(doc_cfg, feature(doc_cfg))] +//! Want to have your API documented with OpenAPI? But you don't want to see the +//! trouble with manual yaml or json tweaking? Would like it to be so easy that it would almost +//! be like utopic? Don't worry fastapi is just there to fill this gap. It aims to do if not all then +//! the most of heavy lifting for you enabling you to focus writing the actual API logic instead of +//! documentation. It aims to be *minimal*, *simple* and *fast*. It uses simple proc macros which +//! you can use to annotate your code to have items documented. +//! +//! Fastapi crate provides autogenerated OpenAPI documentation for Rust REST APIs. It treats +//! code first approach as a first class citizen and simplifies API documentation by providing +//! simple macros for generating the documentation from your code. +//! +//! It also contains Rust types of OpenAPI spec allowing you to write the OpenAPI spec only using +//! Rust if auto-generation is not your flavor or does not fit your purpose. +//! +//! Long term goal of the library is to be the place to go when OpenAPI documentation is needed in Rust +//! codebase. +//! +//! Fastapi is framework agnostic and could be used together with any web framework or even without one. While +//! being portable and standalone one of it's key aspects is simple integration with web frameworks. +//! +//! Currently fastapi provides simple integration with actix-web framework but is not limited to the actix-web +//! framework. All functionalities are not restricted to any specific framework. +//! +//! # Choose your flavor and document your API with ice cold IPA +//! +//! |Flavor|Support| +//! |--|--| +//! |[actix-web](https://github.com/actix/actix-web)|Parse path, path parameters and query parameters, recognize request body and response body, [`fastapi-actix-web` bindings](https://docs.rs/fastapi-actix-web). See more at [docs][actix_path]| +//! |[axum](https://github.com/tokio-rs/axum)|Parse path and query parameters, recognize request body and response body, [`fastapi-axum` bindings](https://docs.rs/fastapi-axum). See more at [docs][axum_path]| +//! |[rocket](https://github.com/SergioBenitez/Rocket)| Parse path, path parameters and query parameters, recognize request body and response body. See more at [docs][rocket_path]| +//! |Others*| Plain `fastapi` without extra flavor. This gives you all the basic benefits listed below in **[Features](#features)** section but with little less automation.| +//! +//! > Others* = For example [warp](https://github.com/seanmonstar/warp) but could be anything. +//! +//! Refer to the existing [examples](https://github.com/nxpkg/fastapi/tree/master/examples) to find out more. +//! +//! ## Features +//! +//! * OpenAPI 3.1 +//! * Pluggable, easy setup and integration with frameworks. +//! * No bloat, enable what you need. +//! * Support for generic types +//! * **Note!**
+//! Tuples, arrays and slices cannot be used as generic arguments on types. Types implementing `ToSchema` manually should not have generic arguments, as +//! they are not composeable and will result compile error. +//! * Automatic schema collection from usages recursively. +//! * Request body from either handler function arguments (if supported by framework) or from `request_body` attribute. +//! * Response body from response `body` attribute or response `content` attribute. +//! * Various OpenAPI visualization tools supported out of the box. +//! * Rust type aliases via [`fastapi-config`][fastapi_config]. +//! +//! # What's up with the word play? +//! +//! The name comes from words `utopic` and `api` where `uto` is the first three letters of _utopic_ +//! and the `ipa` is _api_ reversed. Aaand... `ipa` is also awesome type of beer. +//! +//! # Crate Features +//! +//! * **`macros`** Enable `fastapi-gen` macros. **This is enabled by default.** +//! * **`yaml`** Enables **serde_yaml** serialization of OpenAPI objects. +//! * **`actix_extras`** Enhances [actix-web](https://github.com/actix/actix-web/) integration with being able to +//! parse `path`, `path` and `query` parameters from actix web path attribute macros. See [actix extras support][actix_path] or +//! [examples](https://github.com/nxpkg/fastapi/tree/master/examples) for more details. +//! * **`rocket_extras`** Enhances [rocket](https://github.com/SergioBenitez/Rocket) framework integration with being +//! able to parse `path`, `path` and `query` parameters from rocket path attribute macros. See [rocket extras support][rocket_path] +//! or [examples](https://github.com/nxpkg/fastapi/tree/master/examples) for more details +//! * **`axum_extras`** Enhances [axum](https://github.com/tokio-rs/axum) framework integration allowing users to use `IntoParams` +//! without defining the `parameter_in` attribute. See [axum extras support][axum_path] +//! or [examples](https://github.com/nxpkg/fastapi/tree/master/examples) for more details. +//! * **`debug`** Add extra traits such as debug traits to openapi definitions and elsewhere. +//! * **`chrono`** Add support for [chrono](https://crates.io/crates/chrono) `DateTime`, `Date`, `NaiveDate`, `NaiveTime` and `Duration` +//! types. By default these types are parsed to `string` types with additional `format` information. +//! `format: date-time` for `DateTime` and `format: date` for `Date` and `NaiveDate` according +//! [RFC3339](https://xml2rfc.ietf.org/public/rfc/html/rfc3339.html#anchor14) as `ISO-8601`. To +//! override default `string` representation users have to use `value_type` attribute to override the type. +//! See [docs](https://docs.rs/fastapi/latest/fastapi/derive.ToSchema.html) for more details. +//! * **`time`** Add support for [time](https://crates.io/crates/time) `OffsetDateTime`, `PrimitiveDateTime`, `Date`, and `Duration` types. +//! By default these types are parsed as `string`. `OffsetDateTime` and `PrimitiveDateTime` will use `date-time` format. `Date` will use +//! `date` format and `Duration` will not have any format. To override default `string` representation users have to use `value_type` attribute +//! to override the type. See [docs](https://docs.rs/fastapi/latest/fastapi/derive.ToSchema.html) for more details. +//! * **`decimal`** Add support for [rust_decimal](https://crates.io/crates/rust_decimal) `Decimal` type. **By default** +//! it is interpreted as `String`. If you wish to change the format you need to override the type. +//! See the `value_type` in [`ToSchema` derive docs][to_schema_derive]. +//! * **`decimal_float`** Add support for [rust_decimal](https://crates.io/crates/rust_decimal) `Decimal` type. **By default** +//! it is interpreted as `Number`. This feature is mutually exclusive with **decimal** and allow to change the default type used in your +//! documentation for `Decimal` much like `serde_with_float` feature exposed by rust_decimal. +//! * **`uuid`** Add support for [uuid](https://github.com/uuid-rs/uuid). `Uuid` type will be presented as `String` with +//! format `uuid` in OpenAPI spec. +//! * **`ulid`** Add support for [ulid](https://github.com/dylanhart/ulid-rs). `Ulid` type will be presented as `String` with +//! format `ulid` in OpenAPI spec. +//! * **`url`** Add support for [url](https://github.com/servo/rust-url). `Url` type will be presented as `String` with +//! format `uri` in OpenAPI spec. +//! * **`smallvec`** Add support for [smallvec](https://crates.io/crates/smallvec). `SmallVec` will be treated as `Vec`. +//! * **`openapi_extensions`** Adds convenience functions for documenting common scenarios, such as JSON request bodies and responses. +//! See the [`request_body`](https://docs.rs/fastapi/latest/fastapi/openapi/request_body/index.html) and +//! [`response`](https://docs.rs/fastapi/latest/fastapi/openapi/response/index.html) docs for examples. +//! * **`repr`** Add support for [repr_serde](https://github.com/dtolnay/serde-repr)'s `repr(u*)` and `repr(i*)` attributes to unit type enums for +//! C-like enum representation. See [docs](https://docs.rs/fastapi/latest/fastapi/derive.ToSchema.html) for more details. +//! * **`preserve_order`** Preserve order of properties when serializing the schema for a component. +//! When enabled, the properties are listed in order of fields in the corresponding struct definition. +//! When disabled, the properties are listed in alphabetical order. +//! * **`preserve_path_order`** Preserve order of OpenAPI Paths according to order they have been +//! introduced to the `#[openapi(paths(...))]` macro attribute. If disabled the paths will be +//! ordered in alphabetical order. **However** the operations order under the path **will** be always constant according to +//! [specification](https://spec.openapis.org/oas/latest.html#fixed-fields-6) +//! * **`indexmap`** Add support for [indexmap](https://crates.io/crates/indexmap). When enabled `IndexMap` will be rendered as a map similar to +//! `BTreeMap` and `HashMap`. +//! * **`non_strict_integers`** Add support for non-standard integer formats `int8`, `int16`, `uint8`, `uint16`, `uint32`, and `uint64`. +//! * **`rc_schema`** Add `ToSchema` support for `Arc` and `Rc` types. **Note!** serde `rc` feature flag must be enabled separately to allow +//! serialization and deserialization of `Arc` and `Rc` types. See more about [serde feature flags](https://serde.rs/feature-flags.html). +//! * **`config`** Enables [`fastapi-config`](https://docs.rs/fastapi-config/) for the project which allows +//! defining global configuration options for `fastapi`. +//! +//! ### Default Library Support +//! +//! * Implicit partial support for `serde` attributes. See [`ToSchema` derive][serde] for more details. +//! * Support for [http](https://crates.io/crates/http) `StatusCode` in responses. +//! +//! # Install +//! +//! Add dependency declaration to Cargo.toml. +//! ```toml +//! [dependencies] +//! fastapi = "5" +//! ``` +//! +//! # Examples +//! +//! _**Create type with `ToSchema` and use it in `#[fastapi::path(...)]` that is registered to the `OpenApi`.**_ +//! +//! ```rust +//! use fastapi::{OpenApi, ToSchema}; +//! +//! #[derive(ToSchema)] +//! struct Pet { +//! id: u64, +//! name: String, +//! age: Option, +//! } +//! # #[derive(Debug)] +//! # struct NotFound; +//! # +//! # impl std::error::Error for NotFound {} +//! # +//! # impl std::fmt::Display for NotFound { +//! # fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { +//! # f.write_str("NotFound") +//! # } +//! # } +//! +//! /// Get pet by id +//! /// +//! /// Get pet from database by pet id +//! #[fastapi::path( +//! get, +//! path = "/pets/{id}", +//! responses( +//! (status = 200, description = "Pet found successfully", body = Pet), +//! (status = NOT_FOUND, description = "Pet was not found") +//! ), +//! params( +//! ("id" = u64, Path, description = "Pet database id to get Pet for"), +//! ) +//! )] +//! async fn get_pet_by_id(pet_id: u64) -> Result { +//! Ok(Pet { +//! id: pet_id, +//! age: None, +//! name: "lightning".to_string(), +//! }) +//! } +//! +//! #[derive(OpenApi)] +//! #[openapi(paths(get_pet_by_id))] +//! struct ApiDoc; +//! +//! println!("{}", ApiDoc::openapi().to_pretty_json().unwrap()); +//! ``` +//! +//! # Modify OpenAPI at runtime +//! +//! You can modify generated OpenAPI at runtime either via generated types directly or using +//! [`Modify`] trait. +//! +//! _**Modify generated OpenAPI via types directly.**_ +//! ```rust +//! # use fastapi::OpenApi; +//! #[derive(OpenApi)] +//! #[openapi( +//! info(description = "My Api description"), +//! )] +//! struct ApiDoc; +//! +//! let mut doc = ApiDoc::openapi(); +//! doc.info.title = String::from("My Api"); +//! ``` +//! +//! _**You can even convert the generated [`OpenApi`] to [`openapi::OpenApiBuilder`].**_ +//! ```rust +//! # use fastapi::openapi::OpenApiBuilder; +//! # use fastapi::OpenApi; +//! #[derive(OpenApi)] +//! #[openapi( +//! info(description = "My Api description"), +//! )] +//! struct ApiDoc; +//! +//! let builder: OpenApiBuilder = ApiDoc::openapi().into(); +//! ``` +//! +//! See [`Modify`] trait for examples on how to modify generated OpenAPI via it. +//! +//! # Go beyond the surface +//! +//! * See how to serve OpenAPI doc via Swagger UI check [`fastapi-swagger-ui`][fastapi_swagger] crate for more details. +//! * Browse to [examples](https://github.com/nxpkg/fastapi/tree/master/examples) for more comprehensive examples. +//! * Check [`derive@IntoResponses`] and [`derive@ToResponse`] for examples on deriving responses. +//! * More about OpenAPI security in [security documentation][security]. +//! * Dump generated API doc to file at build time. See [issue 214 comment](https://github.com/nxpkg/fastapi/issues/214#issuecomment-1179589373). +//! +//! [path]: attr.path.html +//! [rocket_path]: attr.path.html#rocket_extras-feature-support-for-rocket +//! [actix_path]: attr.path.html#actix_extras-feature-support-for-actix-web +//! [axum_path]: attr.path.html#axum_extras-feature-support-for-axum +//! [serde]: derive.ToSchema.html#partial-serde-attributes-support +//! [fastapi_swagger]: https://docs.rs/fastapi-swagger-ui/ +//! [fastapi_config]: https://docs.rs/fastapi-config/ +//! +//! [security]: openapi/security/index.html +//! [to_schema_derive]: derive.ToSchema.html + +pub mod openapi; + +use std::borrow::Cow; +use std::collections::BTreeMap; +use std::option::Option; + +#[cfg(feature = "macros")] +#[cfg_attr(doc_cfg, doc(cfg(feature = "macros")))] +pub use fastapi_gen::*; + +/// Trait for implementing OpenAPI specification in Rust. +/// +/// This trait is derivable and can be used with `#[derive]` attribute. The derived implementation +/// will use Cargo provided environment variables to implement the default information. For a details of +/// `#[derive(ToSchema)]` refer to [derive documentation][derive]. +/// +/// # Examples +/// +/// Below is derived example of `OpenApi`. +/// ```rust +/// use fastapi::OpenApi; +/// #[derive(OpenApi)] +/// #[openapi()] +/// struct OpenApiDoc; +/// ``` +/// +/// This manual `OpenApi` trait implementation is approximately equal to the above derived one except the derive +/// implementation will by default use the Cargo environment variables to set defaults for *application name, +/// version, application description, license, author name & email*. +/// +/// ```rust +/// struct OpenApiDoc; +/// +/// impl fastapi::OpenApi for OpenApiDoc { +/// fn openapi() -> fastapi::openapi::OpenApi { +/// use fastapi::{ToSchema, Path}; +/// fastapi::openapi::OpenApiBuilder::new() +/// .info(fastapi::openapi::InfoBuilder::new() +/// .title("application name") +/// .version("version") +/// .description(Some("application description")) +/// .license(Some(fastapi::openapi::License::new("MIT"))) +/// .contact( +/// Some(fastapi::openapi::ContactBuilder::new() +/// .name(Some("author name")) +/// .email(Some("author email")).build()), +/// ).build()) +/// .paths(fastapi::openapi::path::Paths::new()) +/// .components(Some(fastapi::openapi::Components::new())) +/// .build() +/// } +/// } +/// ``` +/// [derive]: derive.OpenApi.html +pub trait OpenApi { + /// Return the [`openapi::OpenApi`] instance which can be parsed with serde or served via + /// OpenAPI visualization tool such as Swagger UI. + fn openapi() -> openapi::OpenApi; +} + +/// Trait for implementing OpenAPI Schema object. +/// +/// Generated schemas can be referenced or reused in path operations. +/// +/// This trait is derivable and can be used with `[#derive]` attribute. For a details of +/// `#[derive(ToSchema)]` refer to [derive documentation][derive]. +/// +/// [derive]: derive.ToSchema.html +/// +/// # Examples +/// +/// Use `#[derive]` to implement `ToSchema` trait. +/// ```rust +/// # use fastapi::ToSchema; +/// #[derive(ToSchema)] +/// #[schema(example = json!({"name": "bob the cat", "id": 1}))] +/// struct Pet { +/// id: u64, +/// name: String, +/// age: Option, +/// } +/// ``` +/// +/// Following manual implementation is equal to above derive one. +/// ```rust +/// # struct Pet { +/// # id: u64, +/// # name: String, +/// # age: Option, +/// # } +/// # +/// impl fastapi::ToSchema for Pet { +/// fn name() -> std::borrow::Cow<'static, str> { +/// std::borrow::Cow::Borrowed("Pet") +/// } +/// } +/// impl fastapi::PartialSchema for Pet { +/// fn schema() -> fastapi::openapi::RefOr { +/// fastapi::openapi::ObjectBuilder::new() +/// .property( +/// "id", +/// fastapi::openapi::ObjectBuilder::new() +/// .schema_type(fastapi::openapi::schema::Type::Integer) +/// .format(Some(fastapi::openapi::SchemaFormat::KnownFormat( +/// fastapi::openapi::KnownFormat::Int64, +/// ))), +/// ) +/// .required("id") +/// .property( +/// "name", +/// fastapi::openapi::ObjectBuilder::new() +/// .schema_type(fastapi::openapi::schema::Type::String), +/// ) +/// .required("name") +/// .property( +/// "age", +/// fastapi::openapi::ObjectBuilder::new() +/// .schema_type(fastapi::openapi::schema::Type::Integer) +/// .format(Some(fastapi::openapi::SchemaFormat::KnownFormat( +/// fastapi::openapi::KnownFormat::Int32, +/// ))), +/// ) +/// .example(Some(serde_json::json!({ +/// "name":"bob the cat","id":1 +/// }))) +/// .into() +/// } +/// } +/// ``` +pub trait ToSchema: PartialSchema { + /// Return name of the schema. + /// + /// Name is used by referencing objects to point to this schema object returned with + /// [`PartialSchema::schema`] within the OpenAPI document. + /// + /// In case a generic schema the _`name`_ will be used as prefix for the name in the OpenAPI + /// documentation. + /// + /// The default implementation naively takes the TypeName by removing + /// the module path and generic elements. + /// But you probably don't want to use the default implementation for generic elements. + /// That will produce collision between generics. (eq. `Foo` ) + /// + /// # Example + /// + /// ```rust + /// # use fastapi::ToSchema; + /// # + /// struct Foo(T); + /// + /// impl ToSchema for Foo {} + /// # impl fastapi::PartialSchema for Foo { + /// # fn schema() -> fastapi::openapi::RefOr { + /// # Default::default() + /// # } + /// # } + /// + /// assert_eq!(Foo::<()>::name(), std::borrow::Cow::Borrowed("Foo")); + /// assert_eq!(Foo::<()>::name(), Foo::::name()); // WARNING: these types have the same name + /// ``` + fn name() -> Cow<'static, str> { + let full_type_name = std::any::type_name::(); + let type_name_without_generic = full_type_name + .split_once("<") + .map(|(s1, _)| s1) + .unwrap_or(full_type_name); + let type_name = type_name_without_generic + .rsplit_once("::") + .map(|(_, tn)| tn) + .unwrap_or(type_name_without_generic); + Cow::Borrowed(type_name) + } + + /// Implement reference [`fastapi::openapi::schema::Schema`]s for this type. + /// + /// When [`ToSchema`] is being derived this is implemented automatically but if one needs to + /// manually implement [`ToSchema`] trait then this is needed for `fastapi` to know + /// referencing schemas that need to be present in the resulting OpenAPI spec. + /// + /// The implementation should push to `schemas` [`Vec`] all such field and variant types that + /// implement `ToSchema` and then call `::schemas(schemas)` on that type + /// to forward the recursive reference collection call on that type. + /// + /// # Examples + /// + /// _**Implement `ToSchema` manually with references.**_ + /// + /// ```rust + /// # use fastapi::{ToSchema, PartialSchema}; + /// # + /// #[derive(ToSchema)] + /// struct Owner { + /// name: String + /// } + /// + /// struct Pet { + /// owner: Owner, + /// name: String + /// } + /// impl PartialSchema for Pet { + /// fn schema() -> fastapi::openapi::RefOr { + /// fastapi::openapi::schema::Object::builder() + /// .property("owner", Owner::schema()) + /// .property("name", String::schema()) + /// .into() + /// } + /// } + /// impl ToSchema for Pet { + /// fn schemas(schemas: + /// &mut Vec<(String, fastapi::openapi::RefOr)>) { + /// schemas.push((Owner::name().into(), Owner::schema())); + /// ::schemas(schemas); + /// } + /// } + /// ``` + #[allow(unused)] + fn schemas( + schemas: &mut Vec<( + String, + fastapi::openapi::RefOr, + )>, + ) { + // nothing by default + } +} + +impl From for openapi::RefOr { + fn from(_: T) -> Self { + T::schema() + } +} + +/// Represents _`nullable`_ type. This can be used anywhere where "nothing" needs to be evaluated. +/// This will serialize to _`null`_ in JSON and [`openapi::schema::empty`] is used to create the +/// [`openapi::schema::Schema`] for the type. +pub type TupleUnit = (); + +impl PartialSchema for TupleUnit { + fn schema() -> openapi::RefOr { + openapi::schema::empty().into() + } +} + +impl ToSchema for TupleUnit { + fn name() -> Cow<'static, str> { + Cow::Borrowed("TupleUnit") + } +} + +macro_rules! impl_to_schema { + ( $( $ty:ident ),* ) => { + $( + impl ToSchema for $ty { + fn name() -> std::borrow::Cow<'static, str> { + std::borrow::Cow::Borrowed(stringify!( $ty )) + } + } + )* + }; +} + +#[rustfmt::skip] +impl_to_schema!( + i8, i16, i32, i64, i128, isize, u8, u16, u32, u64, u128, usize, bool, f32, f64, String, str, char +); + +impl ToSchema for &str { + fn name() -> Cow<'static, str> { + str::name() + } +} + +#[cfg(feature = "macros")] +#[cfg_attr(doc_cfg, doc(cfg(feature = "macros")))] +impl ToSchema for Option +where + Option: PartialSchema, +{ + fn schemas( + schemas: &mut Vec<( + String, + fastapi::openapi::RefOr, + )>, + ) { + T::schemas(schemas); + } +} + +#[cfg(feature = "macros")] +#[cfg_attr(doc_cfg, doc(cfg(feature = "macros")))] +impl ToSchema for Vec +where + Vec: PartialSchema, +{ + fn schemas( + schemas: &mut Vec<( + String, + fastapi::openapi::RefOr, + )>, + ) { + T::schemas(schemas); + } +} + +#[cfg(feature = "macros")] +#[cfg_attr(doc_cfg, doc(cfg(feature = "macros")))] +impl ToSchema for std::collections::LinkedList +where + std::collections::LinkedList: PartialSchema, +{ + fn schemas( + schemas: &mut Vec<( + String, + fastapi::openapi::RefOr, + )>, + ) { + T::schemas(schemas); + } +} + +#[cfg(feature = "macros")] +#[cfg_attr(doc_cfg, doc(cfg(feature = "macros")))] +impl ToSchema for [T] +where + [T]: PartialSchema, +{ + fn schemas( + schemas: &mut Vec<( + String, + fastapi::openapi::RefOr, + )>, + ) { + T::schemas(schemas); + } +} + +#[cfg(feature = "macros")] +#[cfg_attr(doc_cfg, doc(cfg(feature = "macros")))] +impl<'t, T: ToSchema> ToSchema for &'t [T] +where + &'t [T]: PartialSchema, +{ + fn schemas( + schemas: &mut Vec<( + String, + fastapi::openapi::RefOr, + )>, + ) { + T::schemas(schemas); + } +} + +#[cfg(feature = "macros")] +#[cfg_attr(doc_cfg, doc(cfg(feature = "macros")))] +impl<'t, T: ToSchema> ToSchema for &'t mut [T] +where + &'t mut [T]: PartialSchema, +{ + fn schemas( + schemas: &mut Vec<( + String, + fastapi::openapi::RefOr, + )>, + ) { + T::schemas(schemas); + } +} + +#[cfg(feature = "macros")] +#[cfg_attr(doc_cfg, doc(cfg(feature = "macros")))] +impl ToSchema for std::collections::HashMap +where + std::collections::HashMap: PartialSchema, +{ + fn schemas( + schemas: &mut Vec<( + String, + fastapi::openapi::RefOr, + )>, + ) { + K::schemas(schemas); + T::schemas(schemas); + } +} + +#[cfg(feature = "macros")] +#[cfg_attr(doc_cfg, doc(cfg(feature = "macros")))] +impl ToSchema for std::collections::BTreeMap +where + std::collections::BTreeMap: PartialSchema, +{ + fn schemas( + schemas: &mut Vec<( + String, + fastapi::openapi::RefOr, + )>, + ) { + K::schemas(schemas); + T::schemas(schemas); + } +} + +#[cfg(feature = "macros")] +#[cfg_attr(doc_cfg, doc(cfg(feature = "macros")))] +impl ToSchema for std::collections::HashSet +where + std::collections::HashSet: PartialSchema, +{ + fn schemas( + schemas: &mut Vec<( + String, + fastapi::openapi::RefOr, + )>, + ) { + K::schemas(schemas); + } +} + +#[cfg(feature = "macros")] +#[cfg_attr(doc_cfg, doc(cfg(feature = "macros")))] +impl ToSchema for std::collections::BTreeSet +where + std::collections::BTreeSet: PartialSchema, +{ + fn schemas( + schemas: &mut Vec<( + String, + fastapi::openapi::RefOr, + )>, + ) { + K::schemas(schemas); + } +} + +#[cfg(all(feature = "macros", feature = "indexmap"))] +#[cfg_attr(doc_cfg, doc(cfg(feature = "macros", feature = "indexmap")))] +impl ToSchema for indexmap::IndexMap +where + indexmap::IndexMap: PartialSchema, +{ + fn schemas( + schemas: &mut Vec<( + String, + fastapi::openapi::RefOr, + )>, + ) { + K::schemas(schemas); + T::schemas(schemas); + } +} + +#[cfg(all(feature = "macros", feature = "indexmap"))] +#[cfg_attr(doc_cfg, doc(cfg(feature = "macros", feature = "indexmap")))] +impl ToSchema for indexmap::IndexSet +where + indexmap::IndexSet: PartialSchema, +{ + fn schemas( + schemas: &mut Vec<( + String, + fastapi::openapi::RefOr, + )>, + ) { + K::schemas(schemas); + } +} + +#[cfg(feature = "macros")] +#[cfg_attr(doc_cfg, doc(cfg(feature = "macros")))] +impl ToSchema for std::boxed::Box +where + std::boxed::Box: PartialSchema, +{ + fn schemas( + schemas: &mut Vec<( + String, + fastapi::openapi::RefOr, + )>, + ) { + T::schemas(schemas); + } +} + +#[cfg(feature = "macros")] +#[cfg_attr(doc_cfg, doc(cfg(feature = "macros")))] +impl<'a, T: ToSchema + Clone> ToSchema for std::borrow::Cow<'a, T> +where + std::borrow::Cow<'a, T>: PartialSchema, +{ + fn schemas( + schemas: &mut Vec<( + String, + fastapi::openapi::RefOr, + )>, + ) { + T::schemas(schemas); + } +} + +#[cfg(feature = "macros")] +#[cfg_attr(doc_cfg, doc(cfg(feature = "macros")))] +impl ToSchema for std::cell::RefCell +where + std::cell::RefCell: PartialSchema, +{ + fn schemas( + schemas: &mut Vec<( + String, + fastapi::openapi::RefOr, + )>, + ) { + T::schemas(schemas); + } +} + +#[cfg(all(feature = "macros", feature = "rc_schema"))] +#[cfg_attr(doc_cfg, doc(cfg(feature = "macros", feature = "rc_schema")))] +impl ToSchema for std::rc::Rc +where + std::rc::Rc: PartialSchema, +{ + fn schemas( + schemas: &mut Vec<( + String, + fastapi::openapi::RefOr, + )>, + ) { + T::schemas(schemas); + } +} + +#[cfg(all(feature = "macros", feature = "rc_schema"))] +#[cfg_attr(doc_cfg, doc(cfg(feature = "macros", feature = "rc_schema")))] +impl ToSchema for std::sync::Arc +where + std::sync::Arc: PartialSchema, +{ + fn schemas( + schemas: &mut Vec<( + String, + fastapi::openapi::RefOr, + )>, + ) { + T::schemas(schemas); + } +} + +impl PartialSchema for serde_json::Value { + fn schema() -> openapi::RefOr { + fastapi::openapi::schema::Object::builder() + .schema_type(fastapi::openapi::schema::SchemaType::AnyValue) + .into() + } +} + +impl ToSchema for serde_json::Value {} + +// Create `fastapi` module so we can use `fastapi-gen` directly from `fastapi` crate. +// ONLY for internal use! +#[doc(hidden)] +#[cfg(feature = "macros")] +#[cfg_attr(doc_cfg, doc(cfg(feature = "macros")))] +mod fastapi { + pub use super::*; +} + +/// Trait used to implement only _`Schema`_ part of the OpenAPI doc. +/// +/// This trait is by default implemented for Rust [`primitive`][primitive] types and some well known types like +/// [`Vec`], [`Option`], [`std::collections::HashMap`] and [`BTreeMap`]. The default implementation adds `schema()` +/// method to the implementing type allowing simple conversion of the type to the OpenAPI Schema +/// object. Moreover this allows handy way of constructing schema objects manually if ever so +/// wished. +/// +/// The trait can be implemented manually easily on any type. This trait comes especially handy +/// with [`macro@schema`] macro that can be used to generate schema for arbitrary types. +/// ```rust +/// # use fastapi::PartialSchema; +/// # use fastapi::openapi::schema::{SchemaType, KnownFormat, SchemaFormat, ObjectBuilder, Schema}; +/// # use fastapi::openapi::RefOr; +/// # +/// struct MyType; +/// +/// impl PartialSchema for MyType { +/// fn schema() -> RefOr { +/// // ... impl schema generation here +/// RefOr::T(Schema::Object(ObjectBuilder::new().build())) +/// } +/// } +/// ``` +/// +/// # Examples +/// +/// _**Create number schema from u64.**_ +/// ```rust +/// # use fastapi::PartialSchema; +/// # use fastapi::openapi::schema::{Type, KnownFormat, SchemaFormat, ObjectBuilder, Schema}; +/// # use fastapi::openapi::RefOr; +/// # +/// let number: RefOr = i64::schema().into(); +/// +// // would be equal to manual implementation +/// let number2 = RefOr::T( +/// Schema::Object( +/// ObjectBuilder::new() +/// .schema_type(Type::Integer) +/// .format(Some(SchemaFormat::KnownFormat(KnownFormat::Int64))) +/// .build() +/// ) +/// ); +/// # assert_json_diff::assert_json_eq!(serde_json::to_value(&number).unwrap(), serde_json::to_value(&number2).unwrap()); +/// ``` +/// +/// _**Construct a Pet object schema manually.**_ +/// ```rust +/// # use fastapi::PartialSchema; +/// # use fastapi::openapi::schema::ObjectBuilder; +/// struct Pet { +/// id: i32, +/// name: String, +/// } +/// +/// let pet_schema = ObjectBuilder::new() +/// .property("id", i32::schema()) +/// .property("name", String::schema()) +/// .required("id").required("name") +/// .build(); +/// ``` +/// +/// [primitive]: https://doc.rust-lang.org/std/primitive/index.html +pub trait PartialSchema { + /// Return ref or schema of implementing type that can then be used to + /// construct combined schemas. + fn schema() -> openapi::RefOr; +} + +/// Trait for implementing OpenAPI PathItem object with path. +/// +/// This trait is implemented via [`#[fastapi::path(...)]`][derive] attribute macro and there +/// is no need to implement this trait manually. +/// +/// # Examples +/// +/// Use `#[fastapi::path(..)]` to implement Path trait +/// ```rust +/// # #[derive(fastapi::ToSchema)] +/// # struct Pet { +/// # id: u64, +/// # name: String, +/// # } +/// # +/// # +/// /// Get pet by id +/// /// +/// /// Get pet from database by pet database id +/// #[fastapi::path( +/// get, +/// path = "/pets/{id}", +/// responses( +/// (status = 200, description = "Pet found successfully", body = Pet), +/// (status = 404, description = "Pet was not found") +/// ), +/// params( +/// ("id" = u64, Path, description = "Pet database id to get Pet for"), +/// ) +/// )] +/// async fn get_pet_by_id(pet_id: u64) -> Pet { +/// Pet { +/// id: pet_id, +/// name: "lightning".to_string(), +/// } +/// } +/// ``` +/// +/// Example of what would manual implementation roughly look like of above `#[fastapi::path(...)]` macro. +/// ```rust +/// fastapi::openapi::PathsBuilder::new().path( +/// "/pets/{id}", +/// fastapi::openapi::PathItem::new( +/// fastapi::openapi::HttpMethod::Get, +/// fastapi::openapi::path::OperationBuilder::new() +/// .responses( +/// fastapi::openapi::ResponsesBuilder::new() +/// .response( +/// "200", +/// fastapi::openapi::ResponseBuilder::new() +/// .description("Pet found successfully") +/// .content("application/json", +/// fastapi::openapi::Content::new( +/// Some(fastapi::openapi::Ref::from_schema_name("Pet")), +/// ), +/// ), +/// ) +/// .response("404", fastapi::openapi::Response::new("Pet was not found")), +/// ) +/// .operation_id(Some("get_pet_by_id")) +/// .deprecated(Some(fastapi::openapi::Deprecated::False)) +/// .summary(Some("Get pet by id")) +/// .description(Some("Get pet by id\n\nGet pet from database by pet database id\n")) +/// .parameter( +/// fastapi::openapi::path::ParameterBuilder::new() +/// .name("id") +/// .parameter_in(fastapi::openapi::path::ParameterIn::Path) +/// .required(fastapi::openapi::Required::True) +/// .deprecated(Some(fastapi::openapi::Deprecated::False)) +/// .description(Some("Pet database id to get Pet for")) +/// .schema( +/// Some(fastapi::openapi::ObjectBuilder::new() +/// .schema_type(fastapi::openapi::schema::Type::Integer) +/// .format(Some(fastapi::openapi::SchemaFormat::KnownFormat(fastapi::openapi::KnownFormat::Int64)))), +/// ), +/// ) +/// .tag("pet_api"), +/// ), +/// ); +/// ``` +/// +/// [derive]: attr.path.html +pub trait Path { + /// List of HTTP methods this path operation is served at. + fn methods() -> Vec; + + /// The path this operation is served at. + fn path() -> String; + + /// [`openapi::path::Operation`] describing http operation details such as request bodies, + /// parameters and responses. + fn operation() -> openapi::path::Operation; +} + +/// Trait that allows OpenApi modification at runtime. +/// +/// Implement this trait if you wish to modify the OpenApi at runtime before it is being consumed +/// *(Before `fastapi::OpenApi::openapi()` function returns)*. +/// This is trait can be used to add or change already generated OpenApi spec to alter the generated +/// specification by user defined condition. For example you can add definitions that should be loaded +/// from some configuration at runtime what may not be available during compile time. +/// +/// See more about [`OpenApi`][derive] derive at [derive documentation][derive]. +/// +/// [derive]: derive.OpenApi.html +/// [security_scheme]: openapi/security/enum.SecurityScheme.html +/// +/// # Examples +/// +/// Add custom JWT [`SecurityScheme`][security_scheme] to [`OpenApi`][`openapi::OpenApi`]. +/// ```rust +/// # use fastapi::{OpenApi, Modify}; +/// # use fastapi::openapi::security::{SecurityScheme, HttpBuilder, HttpAuthScheme}; +/// #[derive(OpenApi)] +/// #[openapi(modifiers(&SecurityAddon))] +/// struct ApiDoc; +/// +/// struct SecurityAddon; +/// +/// impl Modify for SecurityAddon { +/// fn modify(&self, openapi: &mut fastapi::openapi::OpenApi) { +/// openapi.components = Some( +/// fastapi::openapi::ComponentsBuilder::new() +/// .security_scheme( +/// "api_jwt_token", +/// SecurityScheme::Http( +/// HttpBuilder::new() +/// .scheme(HttpAuthScheme::Bearer) +/// .bearer_format("JWT") +/// .build(), +/// ), +/// ) +/// .build(), +/// ) +/// } +/// } +/// ``` +/// +/// Add [OpenAPI Server Object][server] to alter the target server url. This can be used to give context +/// path for api operations. +/// ```rust +/// # use fastapi::{OpenApi, Modify}; +/// # use fastapi::openapi::Server; +/// #[derive(OpenApi)] +/// #[openapi(modifiers(&ServerAddon))] +/// struct ApiDoc; +/// +/// struct ServerAddon; +/// +/// impl Modify for ServerAddon { +/// fn modify(&self, openapi: &mut fastapi::openapi::OpenApi) { +/// openapi.servers = Some(vec![Server::new("/api")]) +/// } +/// } +/// ``` +/// +/// [server]: https://spec.openapis.org/oas/latest.html#server-object +pub trait Modify { + /// Apply mutation for [`openapi::OpenApi`] instance before it is returned by + /// [`openapi::OpenApi::openapi`] method call. + /// + /// This function allows users to run arbitrary code to change the generated + /// [`fastapi::OpenApi`] before it is served. + fn modify(&self, openapi: &mut openapi::OpenApi); +} + +/// Trait used to convert implementing type to OpenAPI parameters. +/// +/// This trait is [derivable][derive] for structs which are used to describe `path` or `query` parameters. +/// For more details of `#[derive(IntoParams)]` refer to [derive documentation][derive]. +/// +/// # Examples +/// +/// Derive [`IntoParams`] implementation. This example will fail to compile because [`IntoParams`] cannot +/// be used alone and it need to be used together with endpoint using the params as well. See +/// [derive documentation][derive] for more details. +/// ``` +/// use fastapi::{IntoParams}; +/// +/// #[derive(IntoParams)] +/// struct PetParams { +/// /// Id of pet +/// id: i64, +/// /// Name of pet +/// name: String, +/// } +/// ``` +/// +/// Roughly equal manual implementation of [`IntoParams`] trait. +/// ```rust +/// # struct PetParams { +/// # /// Id of pet +/// # id: i64, +/// # /// Name of pet +/// # name: String, +/// # } +/// impl fastapi::IntoParams for PetParams { +/// fn into_params( +/// parameter_in_provider: impl Fn() -> Option +/// ) -> Vec { +/// vec![ +/// fastapi::openapi::path::ParameterBuilder::new() +/// .name("id") +/// .required(fastapi::openapi::Required::True) +/// .parameter_in(parameter_in_provider().unwrap_or_default()) +/// .description(Some("Id of pet")) +/// .schema(Some( +/// fastapi::openapi::ObjectBuilder::new() +/// .schema_type(fastapi::openapi::schema::Type::Integer) +/// .format(Some(fastapi::openapi::SchemaFormat::KnownFormat(fastapi::openapi::KnownFormat::Int64))), +/// )) +/// .build(), +/// fastapi::openapi::path::ParameterBuilder::new() +/// .name("name") +/// .required(fastapi::openapi::Required::True) +/// .parameter_in(parameter_in_provider().unwrap_or_default()) +/// .description(Some("Name of pet")) +/// .schema(Some( +/// fastapi::openapi::ObjectBuilder::new() +/// .schema_type(fastapi::openapi::schema::Type::String), +/// )) +/// .build(), +/// ] +/// } +/// } +/// ``` +/// [derive]: derive.IntoParams.html +pub trait IntoParams { + /// Provide [`Vec`] of [`openapi::path::Parameter`]s to caller. The result is used in `fastapi-gen` library to + /// provide OpenAPI parameter information for the endpoint using the parameters. + fn into_params( + parameter_in_provider: impl Fn() -> Option, + ) -> Vec; +} + +/// This trait is implemented to document a type (like an enum) which can represent multiple +/// responses, to be used in operation. +/// +/// # Examples +/// +/// ``` +/// use std::collections::BTreeMap; +/// use fastapi::{ +/// openapi::{Response, ResponseBuilder, ResponsesBuilder, RefOr}, +/// IntoResponses, +/// }; +/// +/// enum MyResponse { +/// Ok, +/// NotFound, +/// } +/// +/// impl IntoResponses for MyResponse { +/// fn responses() -> BTreeMap> { +/// ResponsesBuilder::new() +/// .response("200", ResponseBuilder::new().description("Ok")) +/// .response("404", ResponseBuilder::new().description("Not Found")) +/// .build() +/// .into() +/// } +/// } +/// ``` +pub trait IntoResponses { + /// Returns an ordered map of response codes to responses. + fn responses() -> BTreeMap>; +} + +#[cfg(feature = "auto_into_responses")] +impl IntoResponses for Result { + fn responses() -> BTreeMap> { + let mut responses = T::responses(); + responses.append(&mut E::responses()); + + responses + } +} + +#[cfg(feature = "auto_into_responses")] +impl IntoResponses for () { + fn responses() -> BTreeMap> { + BTreeMap::new() + } +} + +/// This trait is implemented to document a type which represents a single response which can be +/// referenced or reused as a component in multiple operations. +/// +/// _`ToResponse`_ trait can also be derived with [`#[derive(ToResponse)]`][derive]. +/// +/// # Examples +/// +/// ``` +/// use fastapi::{ +/// openapi::{RefOr, Response, ResponseBuilder}, +/// ToResponse, +/// }; +/// +/// struct MyResponse; +/// +/// impl<'__r> ToResponse<'__r> for MyResponse { +/// fn response() -> (&'__r str, RefOr) { +/// ( +/// "MyResponse", +/// ResponseBuilder::new().description("My Response").build().into(), +/// ) +/// } +/// } +/// ``` +/// +/// [derive]: derive.ToResponse.html +pub trait ToResponse<'__r> { + /// Returns a tuple of response component name (to be referenced) to a response. + fn response() -> (&'__r str, openapi::RefOr); +} + +/// Flexible number wrapper used by validation schema attributes to seamlessly support different +/// number syntaxes. +/// +/// # Examples +/// +/// _**Define object with two different number fields with minimum validation attribute.**_ +/// +/// ```rust +/// # use fastapi::Number; +/// # use fastapi::openapi::schema::{ObjectBuilder, SchemaType, Type}; +/// let _ = ObjectBuilder::new() +/// .property("int_value", ObjectBuilder::new() +/// .schema_type(Type::Integer).minimum(Some(1)) +/// ) +/// .property("float_value", ObjectBuilder::new() +/// .schema_type(Type::Number).minimum(Some(-2.5)) +/// ) +/// .build(); +/// ``` +#[derive(Clone, serde::Deserialize, serde::Serialize)] +#[cfg_attr(feature = "debug", derive(Debug))] +#[serde(untagged)] +pub enum Number { + /// Signed integer e.g. `1` or `-2` + Int(isize), + /// Unsigned integer value e.g. `0`. Unsigned integer cannot be below zero. + UInt(usize), + /// Floating point number e.g. `1.34` + Float(f64), +} + +impl Eq for Number {} + +impl PartialEq for Number { + fn eq(&self, other: &Self) -> bool { + match (self, other) { + (Self::Int(left), Self::Int(right)) => left == right, + (Self::UInt(left), Self::UInt(right)) => left == right, + (Self::Float(left), Self::Float(right)) => left == right, + _ => false, + } + } +} + +macro_rules! impl_from_for_number { + ( $( $ty:ident => $pat:ident $( as $as:ident )? ),* ) => { + $( + impl From<$ty> for Number { + fn from(value: $ty) -> Self { + Self::$pat(value $( as $as )?) + } + } + )* + }; +} + +#[rustfmt::skip] +impl_from_for_number!( + f32 => Float as f64, f64 => Float, + i8 => Int as isize, i16 => Int as isize, i32 => Int as isize, i64 => Int as isize, + u8 => UInt as usize, u16 => UInt as usize, u32 => UInt as usize, u64 => UInt as usize, + isize => Int, usize => UInt +); + +/// Internal dev module used internally by fastapi-gen +#[doc(hidden)] +#[cfg(feature = "macros")] +#[cfg_attr(doc_cfg, doc(cfg(feature = "macros")))] +pub mod __dev { + use fastapi_gen::schema; + + use crate::{fastapi, OpenApi, PartialSchema}; + + pub trait PathConfig { + fn path() -> String; + + fn methods() -> Vec; + + fn tags_and_operation() -> (Vec<&'static str>, fastapi::openapi::path::Operation); + } + + pub trait Tags<'t> { + fn tags() -> Vec<&'t str>; + } + + impl fastapi::Path for T { + fn path() -> String { + ::path() + } + + fn methods() -> Vec { + ::methods() + } + + fn operation() -> crate::openapi::path::Operation { + let (tags, mut operation) = ::tags_and_operation(); + + let operation_tags = operation.tags.get_or_insert(Vec::new()); + operation_tags.extend(tags.iter().map(ToString::to_string)); + + operation + } + } + + pub trait NestedApiConfig { + fn config() -> (fastapi::openapi::OpenApi, Vec<&'static str>, &'static str); + } + + impl OpenApi for T { + fn openapi() -> crate::openapi::OpenApi { + let (mut api, tags, module_path) = T::config(); + + api.paths.paths.iter_mut().for_each(|(_, path_item)| { + let update_tags = |operation: Option<&mut crate::openapi::path::Operation>| { + if let Some(operation) = operation { + let operation_tags = operation.tags.get_or_insert(Vec::new()); + operation_tags.extend(tags.iter().map(ToString::to_string)); + if operation_tags.is_empty() && !module_path.is_empty() { + operation_tags.push(module_path.to_string()); + } + } + }; + + update_tags(path_item.get.as_mut()); + update_tags(path_item.put.as_mut()); + update_tags(path_item.post.as_mut()); + update_tags(path_item.delete.as_mut()); + update_tags(path_item.options.as_mut()); + update_tags(path_item.head.as_mut()); + update_tags(path_item.patch.as_mut()); + update_tags(path_item.trace.as_mut()); + }); + + api + } + } + + pub trait ComposeSchema { + fn compose( + new_generics: Vec>, + ) -> fastapi::openapi::RefOr; + } + + macro_rules! impl_compose_schema { + ( $( $ty:ident ),* ) => { + $( + impl ComposeSchema for $ty { + fn compose(_: Vec>) -> fastapi::openapi::RefOr { + schema!( $ty ).into() + } + } + )* + }; + } + + #[rustfmt::skip] + impl_compose_schema!( + i8, i16, i32, i64, i128, isize, u8, u16, u32, u64, u128, usize, bool, f32, f64, String, str, char + ); + + fn schema_or_compose( + schemas: Vec>, + index: usize, + ) -> fastapi::openapi::RefOr { + if let Some(schema) = schemas.get(index) { + schema.clone() + } else { + T::compose(schemas) + } + } + + impl ComposeSchema for &str { + fn compose( + schemas: Vec>, + ) -> fastapi::openapi::RefOr { + str::compose(schemas) + } + } + + impl PartialSchema for T { + fn schema() -> crate::openapi::RefOr { + T::compose(Vec::new()) + } + } + impl ComposeSchema for Option { + fn compose( + schemas: Vec>, + ) -> fastapi::openapi::RefOr { + fastapi::openapi::schema::OneOfBuilder::new() + .item( + fastapi::openapi::schema::ObjectBuilder::new() + .schema_type(fastapi::openapi::schema::Type::Null), + ) + .item(schema_or_compose::(schemas, 0)) + .into() + } + } + + impl ComposeSchema for Vec { + fn compose( + schemas: Vec>, + ) -> fastapi::openapi::RefOr { + fastapi::openapi::schema::ArrayBuilder::new() + .items(schema_or_compose::(schemas, 0)) + .into() + } + } + + impl ComposeSchema for std::collections::LinkedList { + fn compose( + schemas: Vec>, + ) -> fastapi::openapi::RefOr { + fastapi::openapi::schema::ArrayBuilder::new() + .items(schema_or_compose::(schemas, 0)) + .into() + } + } + + impl ComposeSchema for [T] { + fn compose( + schemas: Vec>, + ) -> fastapi::openapi::RefOr { + fastapi::openapi::schema::ArrayBuilder::new() + .items(schema_or_compose::(schemas, 0)) + .into() + } + } + + impl ComposeSchema for &[T] { + fn compose( + schemas: Vec>, + ) -> fastapi::openapi::RefOr { + fastapi::openapi::schema::ArrayBuilder::new() + .items(schema_or_compose::(schemas, 0)) + .into() + } + } + + impl ComposeSchema for &mut [T] { + fn compose( + schemas: Vec>, + ) -> fastapi::openapi::RefOr { + fastapi::openapi::schema::ArrayBuilder::new() + .items(schema_or_compose::(schemas, 0)) + .into() + } + } + + impl ComposeSchema for std::collections::HashMap { + fn compose( + schemas: Vec>, + ) -> fastapi::openapi::RefOr { + fastapi::openapi::ObjectBuilder::new() + .property_names(Some(schema_or_compose::(schemas.clone(), 0))) + .additional_properties(Some(schema_or_compose::(schemas, 1))) + .into() + } + } + + impl ComposeSchema for std::collections::BTreeMap { + fn compose( + schemas: Vec>, + ) -> fastapi::openapi::RefOr { + fastapi::openapi::ObjectBuilder::new() + .property_names(Some(schema_or_compose::(schemas.clone(), 0))) + .additional_properties(Some(schema_or_compose::(schemas, 1))) + .into() + } + } + + impl ComposeSchema for std::collections::HashSet { + fn compose( + schemas: Vec>, + ) -> fastapi::openapi::RefOr { + fastapi::openapi::schema::ArrayBuilder::new() + .items(schema_or_compose::(schemas, 0)) + .unique_items(true) + .into() + } + } + + impl ComposeSchema for std::collections::BTreeSet { + fn compose( + schemas: Vec>, + ) -> fastapi::openapi::RefOr { + fastapi::openapi::schema::ArrayBuilder::new() + .items(schema_or_compose::(schemas, 0)) + .unique_items(true) + .into() + } + } + + #[cfg(feature = "indexmap")] + #[cfg_attr(doc_cfg, doc(cfg(feature = "macros", feature = "indexmap")))] + impl ComposeSchema for indexmap::IndexMap { + fn compose( + schemas: Vec>, + ) -> fastapi::openapi::RefOr { + fastapi::openapi::ObjectBuilder::new() + .property_names(Some(schema_or_compose::(schemas.clone(), 0))) + .additional_properties(Some(schema_or_compose::(schemas, 1))) + .into() + } + } + + #[cfg(feature = "indexmap")] + #[cfg_attr(doc_cfg, doc(cfg(feature = "macros", feature = "indexmap")))] + impl ComposeSchema for indexmap::IndexSet { + fn compose( + schemas: Vec>, + ) -> fastapi::openapi::RefOr { + fastapi::openapi::schema::ArrayBuilder::new() + .items(schema_or_compose::(schemas, 0)) + .unique_items(true) + .into() + } + } + + impl<'a, T: ComposeSchema + Clone> ComposeSchema for std::borrow::Cow<'a, T> { + fn compose( + schemas: Vec>, + ) -> fastapi::openapi::RefOr { + schema_or_compose::(schemas, 0) + } + } + + impl ComposeSchema for std::boxed::Box { + fn compose( + schemas: Vec>, + ) -> fastapi::openapi::RefOr { + schema_or_compose::(schemas, 0) + } + } + + impl ComposeSchema for std::cell::RefCell { + fn compose( + schemas: Vec>, + ) -> fastapi::openapi::RefOr { + schema_or_compose::(schemas, 0) + } + } + + #[cfg(feature = "rc_schema")] + #[cfg_attr(doc_cfg, doc(cfg(feature = "macros", feature = "rc_schema")))] + impl ComposeSchema for std::rc::Rc { + fn compose( + schemas: Vec>, + ) -> fastapi::openapi::RefOr { + schema_or_compose::(schemas, 0) + } + } + + #[cfg(feature = "rc_schema")] + #[cfg_attr(doc_cfg, doc(cfg(feature = "macros", feature = "rc_schema")))] + impl ComposeSchema for std::sync::Arc { + fn compose( + schemas: Vec>, + ) -> fastapi::openapi::RefOr { + schema_or_compose::(schemas, 0) + } + } + + // For types not implementing `ToSchema` + pub trait SchemaReferences { + fn schemas( + schemas: &mut Vec<( + String, + fastapi::openapi::RefOr, + )>, + ); + } +} + +#[cfg(test)] +mod tests { + use assert_json_diff::assert_json_eq; + use serde_json::json; + + use super::*; + + #[test] + fn test_toschema_name() { + struct Foo; + impl ToSchema for Foo {} + impl PartialSchema for Foo { + fn schema() -> openapi::RefOr { + Default::default() + } + } + assert_eq!(Foo::name(), Cow::Borrowed("Foo")); + + struct FooGeneric(T, U); + impl ToSchema for FooGeneric {} + impl PartialSchema for FooGeneric { + fn schema() -> openapi::RefOr { + Default::default() + } + } + assert_eq!( + FooGeneric::::name(), + Cow::Borrowed("FooGeneric") + ); + assert_eq!( + FooGeneric::::name(), + FooGeneric::<(), ()>::name(), + ); + } + + #[cfg(not(feature = "non_strict_integers"))] + #[test] + fn test_partial_schema_strict_integers() { + use assert_json_diff::{assert_json_matches, CompareMode, Config, NumericMode}; + + for (name, schema, value) in [ + ( + "i8", + i8::schema(), + json!({"type": "integer", "format": "int32"}), + ), + ( + "i16", + i16::schema(), + json!({"type": "integer", "format": "int32"}), + ), + ( + "i32", + i32::schema(), + json!({"type": "integer", "format": "int32"}), + ), + ( + "i64", + i64::schema(), + json!({"type": "integer", "format": "int64"}), + ), + ("i128", i128::schema(), json!({"type": "integer"})), + ("isize", isize::schema(), json!({"type": "integer"})), + ( + "u8", + u8::schema(), + json!({"type": "integer", "format": "int32", "minimum": 0.0}), + ), + ( + "u16", + u16::schema(), + json!({"type": "integer", "format": "int32", "minimum": 0.0}), + ), + ( + "u32", + u32::schema(), + json!({"type": "integer", "format": "int32", "minimum": 0.0}), + ), + ( + "u64", + u64::schema(), + json!({"type": "integer", "format": "int64", "minimum": 0.0}), + ), + ] { + println!( + "{name}: {json}", + json = serde_json::to_string(&schema).unwrap() + ); + let schema = serde_json::to_value(schema).unwrap(); + + let config = Config::new(CompareMode::Strict).numeric_mode(NumericMode::AssumeFloat); + assert_json_matches!(schema, value, config); + } + } + + #[cfg(feature = "non_strict_integers")] + #[test] + fn test_partial_schema_non_strict_integers() { + for (name, schema, value) in [ + ( + "i8", + i8::schema(), + json!({"type": "integer", "format": "int8"}), + ), + ( + "i16", + i16::schema(), + json!({"type": "integer", "format": "int16"}), + ), + ( + "i32", + i32::schema(), + json!({"type": "integer", "format": "int32"}), + ), + ( + "i64", + i64::schema(), + json!({"type": "integer", "format": "int64"}), + ), + ("i128", i128::schema(), json!({"type": "integer"})), + ("isize", isize::schema(), json!({"type": "integer"})), + ( + "u8", + u8::schema(), + json!({"type": "integer", "format": "uint8", "minimum": 0}), + ), + ( + "u16", + u16::schema(), + json!({"type": "integer", "format": "uint16", "minimum": 0}), + ), + ( + "u32", + u32::schema(), + json!({"type": "integer", "format": "uint32", "minimum": 0}), + ), + ( + "u64", + u64::schema(), + json!({"type": "integer", "format": "uint64", "minimum": 0}), + ), + ] { + println!( + "{name}: {json}", + json = serde_json::to_string(&schema).unwrap() + ); + let schema = serde_json::to_value(schema).unwrap(); + assert_json_eq!(schema, value); + } + } + + #[test] + fn test_partial_schema() { + for (name, schema, value) in [ + ("bool", bool::schema(), json!({"type": "boolean"})), + ("str", str::schema(), json!({"type": "string"})), + ("String", String::schema(), json!({"type": "string"})), + ("char", char::schema(), json!({"type": "string"})), + ( + "f32", + f32::schema(), + json!({"type": "number", "format": "float"}), + ), + ( + "f64", + f64::schema(), + json!({"type": "number", "format": "double"}), + ), + ] { + println!( + "{name}: {json}", + json = serde_json::to_string(&schema).unwrap() + ); + let schema = serde_json::to_value(schema).unwrap(); + assert_json_eq!(schema, value); + } + } +} diff --git a/fastapi/src/openapi.rs b/fastapi/src/openapi.rs new file mode 100644 index 0000000..ce10279 --- /dev/null +++ b/fastapi/src/openapi.rs @@ -0,0 +1,1078 @@ +//! Rust implementation of Openapi Spec V3.1. + +use serde::{ + de::{Error, Expected, Visitor}, + Deserialize, Deserializer, Serialize, Serializer, +}; +use std::fmt::Formatter; + +use self::path::PathsMap; +pub use self::{ + content::{Content, ContentBuilder}, + external_docs::ExternalDocs, + header::{Header, HeaderBuilder}, + info::{Contact, ContactBuilder, Info, InfoBuilder, License, LicenseBuilder}, + path::{HttpMethod, PathItem, Paths, PathsBuilder}, + response::{Response, ResponseBuilder, Responses, ResponsesBuilder}, + schema::{ + AllOf, AllOfBuilder, Array, ArrayBuilder, Components, ComponentsBuilder, Discriminator, + KnownFormat, Object, ObjectBuilder, OneOf, OneOfBuilder, Ref, Schema, SchemaFormat, + ToArray, Type, + }, + security::SecurityRequirement, + server::{Server, ServerBuilder, ServerVariable, ServerVariableBuilder}, + tag::Tag, +}; + +pub mod content; +pub mod encoding; +pub mod example; +pub mod extensions; +pub mod external_docs; +pub mod header; +pub mod info; +pub mod link; +pub mod path; +pub mod request_body; +pub mod response; +pub mod schema; +pub mod security; +pub mod server; +pub mod tag; +pub mod xml; + +builder! { + /// # Examples + /// + /// Create [`OpenApi`] using [`OpenApiBuilder`]. + /// ```rust + /// # use fastapi::openapi::{Info, Paths, Components, OpenApiBuilder}; + /// let openapi = OpenApiBuilder::new() + /// .info(Info::new("My api", "1.0.0")) + /// .paths(Paths::new()) + /// .components(Some( + /// Components::new() + /// )) + /// .build(); + /// ``` + OpenApiBuilder; + + /// Root object of the OpenAPI document. + /// + /// You can use [`OpenApi::new`] function to construct a new [`OpenApi`] instance and then + /// use the fields with mutable access to modify them. This is quite tedious if you are not simply + /// just changing one thing thus you can also use the [`OpenApiBuilder::new`] to use builder to + /// construct a new [`OpenApi`] object. + /// + /// See more details at . + #[non_exhaustive] + #[derive(Serialize, Deserialize, Default, Clone, PartialEq)] + #[cfg_attr(feature = "debug", derive(Debug))] + #[serde(rename_all = "camelCase")] + pub struct OpenApi { + /// OpenAPI document version. + pub openapi: OpenApiVersion, + + /// Provides metadata about the API. + /// + /// See more details at . + pub info: Info, + + /// Optional list of servers that provides the connectivity information to target servers. + /// + /// This is implicitly one server with `url` set to `/`. + /// + /// See more details at . + #[serde(skip_serializing_if = "Option::is_none")] + pub servers: Option>, + + /// Available paths and operations for the API. + /// + /// See more details at . + pub paths: Paths, + + /// Holds various reusable schemas for the OpenAPI document. + /// + /// Few of these elements are security schemas and object schemas. + /// + /// See more details at . + #[serde(skip_serializing_if = "Option::is_none")] + pub components: Option, + + /// Declaration of global security mechanisms that can be used across the API. The individual operations + /// can override the declarations. You can use `SecurityRequirement::default()` if you wish to make security + /// optional by adding it to the list of securities. + /// + /// See more details at . + #[serde(skip_serializing_if = "Option::is_none")] + pub security: Option>, + + /// Optional list of tags can be used to add additional documentation to matching tags of operations. + /// + /// See more details at . + #[serde(skip_serializing_if = "Option::is_none")] + pub tags: Option>, + + /// Optional global additional documentation reference. + /// + /// See more details at . + #[serde(skip_serializing_if = "Option::is_none")] + pub external_docs: Option, + + /// Schema keyword can be used to override default _`$schema`_ dialect which is by default + /// “”. + /// + /// All the references and individual files could use their own schema dialect. + #[serde(rename = "$schema", default, skip_serializing_if = "String::is_empty")] + pub schema: String, + + /// Optional extensions "x-something". + #[serde(skip_serializing_if = "Option::is_none", flatten)] + pub extensions: Option, + } +} + +impl OpenApi { + /// Construct a new [`OpenApi`] object. + /// + /// Function accepts two arguments one which is [`Info`] metadata of the API; two which is [`Paths`] + /// containing operations for the API. + /// + /// # Examples + /// + /// ```rust + /// # use fastapi::openapi::{Info, Paths, OpenApi}; + /// # + /// let openapi = OpenApi::new(Info::new("pet api", "0.1.0"), Paths::new()); + /// ``` + pub fn new>(info: Info, paths: P) -> Self { + Self { + info, + paths: paths.into(), + ..Default::default() + } + } + + /// Converts this [`OpenApi`] to JSON String. This method essentially calls [`serde_json::to_string`] method. + pub fn to_json(&self) -> Result { + serde_json::to_string(self) + } + + /// Converts this [`OpenApi`] to pretty JSON String. This method essentially calls [`serde_json::to_string_pretty`] method. + pub fn to_pretty_json(&self) -> Result { + serde_json::to_string_pretty(self) + } + + /// Converts this [`OpenApi`] to YAML String. This method essentially calls [`serde_yaml::to_string`] method. + #[cfg(feature = "yaml")] + #[cfg_attr(doc_cfg, doc(cfg(feature = "yaml")))] + pub fn to_yaml(&self) -> Result { + serde_yaml::to_string(self) + } + + /// Merge `other` [`OpenApi`] moving `self` and returning combined [`OpenApi`]. + /// + /// In functionality wise this is exactly same as calling [`OpenApi::merge`] but but provides + /// leaner API for chaining method calls. + pub fn merge_from(mut self, other: OpenApi) -> OpenApi { + self.merge(other); + self + } + + /// Merge `other` [`OpenApi`] consuming it and resuming it's content. + /// + /// Merge function will take all `self` nonexistent _`servers`, `paths`, `schemas`, `responses`, + /// `security_schemes`, `security_requirements` and `tags`_ from _`other`_ [`OpenApi`]. + /// + /// This function performs a shallow comparison for `paths`, `schemas`, `responses` and + /// `security schemes` which means that only _`name`_ and _`path`_ is used for comparison. When + /// match occurs the whole item will be ignored from merged results. Only items not + /// found will be appended to `self`. + /// + /// For _`servers`_, _`tags`_ and _`security_requirements`_ the whole item will be used for + /// comparison. Items not found from `self` will be appended to `self`. + /// + /// **Note!** `info`, `openapi`, `external_docs` and `schema` will not be merged. + pub fn merge(&mut self, mut other: OpenApi) { + if let Some(other_servers) = &mut other.servers { + let servers = self.servers.get_or_insert(Vec::new()); + other_servers.retain(|server| !servers.contains(server)); + servers.append(other_servers); + } + + if !other.paths.paths.is_empty() { + self.paths.merge(other.paths); + }; + + if let Some(other_components) = &mut other.components { + let components = self.components.get_or_insert(Components::default()); + + other_components + .schemas + .retain(|name, _| !components.schemas.contains_key(name)); + components.schemas.append(&mut other_components.schemas); + + other_components + .responses + .retain(|name, _| !components.responses.contains_key(name)); + components.responses.append(&mut other_components.responses); + + other_components + .security_schemes + .retain(|name, _| !components.security_schemes.contains_key(name)); + components + .security_schemes + .append(&mut other_components.security_schemes); + } + + if let Some(other_security) = &mut other.security { + let security = self.security.get_or_insert(Vec::new()); + other_security.retain(|requirement| !security.contains(requirement)); + security.append(other_security); + } + + if let Some(other_tags) = &mut other.tags { + let tags = self.tags.get_or_insert(Vec::new()); + other_tags.retain(|tag| !tags.contains(tag)); + tags.append(other_tags); + } + } + + /// Nest `other` [`OpenApi`] to this [`OpenApi`]. + /// + /// Nesting performs custom [`OpenApi::merge`] where `other` [`OpenApi`] paths are prepended with given + /// `path` and then appended to _`paths`_ of this [`OpenApi`] instance. Rest of the `other` + /// [`OpenApi`] instance is merged to this [`OpenApi`] with [`OpenApi::merge_from`] method. + /// + /// **If multiple** APIs are being nested with same `path` only the **last** one will be retained. + /// + /// Method accepts two arguments, first is the path to prepend .e.g. _`/user`_. Second argument + /// is the [`OpenApi`] to prepend paths for. + /// + /// # Examples + /// + /// _**Merge `user_api` to `api` nesting `user_api` paths under `/api/v1/user`**_ + /// ```rust + /// # use fastapi::openapi::{OpenApi, OpenApiBuilder}; + /// # use fastapi::openapi::path::{PathsBuilder, PathItemBuilder, PathItem, + /// # HttpMethod, OperationBuilder}; + /// let api = OpenApiBuilder::new() + /// .paths( + /// PathsBuilder::new().path( + /// "/api/v1/status", + /// PathItem::new( + /// HttpMethod::Get, + /// OperationBuilder::new() + /// .description(Some("Get status")) + /// .build(), + /// ), + /// ), + /// ) + /// .build(); + /// let user_api = OpenApiBuilder::new() + /// .paths( + /// PathsBuilder::new().path( + /// "/", + /// PathItem::new(HttpMethod::Post, OperationBuilder::new().build()), + /// ) + /// ) + /// .build(); + /// let nested = api.nest("/api/v1/user", user_api); + /// ``` + pub fn nest, O: Into>(self, path: P, other: O) -> Self { + self.nest_with_path_composer(path, other, |base, path| format!("{base}{path}")) + } + + /// Nest `other` [`OpenApi`] with custom path composer. + /// + /// In most cases you should use [`OpenApi::nest`] instead. + /// Only use this method if you need custom path composition for a specific use case. + /// + /// `composer` is a function that takes two strings, the base path and the path to nest, and returns the composed path for the API Specification. + pub fn nest_with_path_composer< + P: Into, + O: Into, + F: Fn(&str, &str) -> String, + >( + mut self, + path: P, + other: O, + composer: F, + ) -> Self { + let path: String = path.into(); + let mut other_api: OpenApi = other.into(); + + let nested_paths = other_api + .paths + .paths + .into_iter() + .map(|(item_path, item)| { + let path = composer(&path, &item_path); + (path, item) + }) + .collect::>(); + + self.paths.paths.extend(nested_paths); + + // paths are already merged, thus we can ignore them + other_api.paths.paths = PathsMap::new(); + self.merge_from(other_api) + } +} + +impl OpenApiBuilder { + /// Add [`Info`] metadata of the API. + pub fn info>(mut self, info: I) -> Self { + set_value!(self info info.into()) + } + + /// Add iterator of [`Server`]s to configure target servers. + pub fn servers>(mut self, servers: Option) -> Self { + set_value!(self servers servers.map(|servers| servers.into_iter().collect())) + } + + /// Add [`Paths`] to configure operations and endpoints of the API. + pub fn paths>(mut self, paths: P) -> Self { + set_value!(self paths paths.into()) + } + + /// Add [`Components`] to configure reusable schemas. + pub fn components(mut self, components: Option) -> Self { + set_value!(self components components) + } + + /// Add iterator of [`SecurityRequirement`]s that are globally available for all operations. + pub fn security>( + mut self, + security: Option, + ) -> Self { + set_value!(self security security.map(|security| security.into_iter().collect())) + } + + /// Add iterator of [`Tag`]s to add additional documentation for **operations** tags. + pub fn tags>(mut self, tags: Option) -> Self { + set_value!(self tags tags.map(|tags| tags.into_iter().collect())) + } + + /// Add [`ExternalDocs`] for referring additional documentation. + pub fn external_docs(mut self, external_docs: Option) -> Self { + set_value!(self external_docs external_docs) + } + + /// Override default `$schema` dialect for the Open API doc. + /// + /// # Examples + /// + /// _**Override default schema dialect.**_ + /// ```rust + /// # use fastapi::openapi::OpenApiBuilder; + /// let _ = OpenApiBuilder::new() + /// .schema("http://json-schema.org/draft-07/schema#") + /// .build(); + /// ``` + pub fn schema>(mut self, schema: S) -> Self { + set_value!(self schema schema.into()) + } +} + +/// Represents available [OpenAPI versions][version]. +/// +/// [version]: +#[derive(Serialize, Clone, PartialEq, Eq, Default)] +#[cfg_attr(feature = "debug", derive(Debug))] +pub enum OpenApiVersion { + /// Will serialize to `3.1.0` the latest released OpenAPI version. + #[serde(rename = "3.1.0")] + #[default] + Version31, +} + +impl<'de> Deserialize<'de> for OpenApiVersion { + fn deserialize(deserializer: D) -> Result + where + D: Deserializer<'de>, + { + struct VersionVisitor; + + impl<'v> Visitor<'v> for VersionVisitor { + type Value = OpenApiVersion; + + fn expecting(&self, formatter: &mut Formatter) -> std::fmt::Result { + formatter.write_str("a version string in 3.1.x format") + } + + fn visit_str(self, v: &str) -> Result + where + E: Error, + { + self.visit_string(v.to_string()) + } + + fn visit_string(self, v: String) -> Result + where + E: Error, + { + let version = v + .split('.') + .flat_map(|digit| digit.parse::()) + .collect::>(); + + if version.len() == 3 && version.first() == Some(&3) && version.get(1) == Some(&1) { + Ok(OpenApiVersion::Version31) + } else { + let expected: &dyn Expected = &"3.1.0"; + Err(Error::invalid_value( + serde::de::Unexpected::Str(&v), + expected, + )) + } + } + } + + deserializer.deserialize_string(VersionVisitor) + } +} + +/// Value used to indicate whether reusable schema, parameter or operation is deprecated. +/// +/// The value will serialize to boolean. +#[derive(PartialEq, Eq, Clone, Default)] +#[cfg_attr(feature = "debug", derive(Debug))] +#[allow(missing_docs)] +pub enum Deprecated { + True, + #[default] + False, +} + +impl Serialize for Deprecated { + fn serialize(&self, serializer: S) -> Result + where + S: Serializer, + { + serializer.serialize_bool(matches!(self, Self::True)) + } +} + +impl<'de> Deserialize<'de> for Deprecated { + fn deserialize(deserializer: D) -> Result + where + D: serde::Deserializer<'de>, + { + struct BoolVisitor; + impl<'de> Visitor<'de> for BoolVisitor { + type Value = Deprecated; + + fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result { + formatter.write_str("a bool true or false") + } + + fn visit_bool(self, v: bool) -> Result + where + E: serde::de::Error, + { + match v { + true => Ok(Deprecated::True), + false => Ok(Deprecated::False), + } + } + } + deserializer.deserialize_bool(BoolVisitor) + } +} + +/// Value used to indicate whether parameter or property is required. +/// +/// The value will serialize to boolean. +#[derive(PartialEq, Eq, Clone, Default)] +#[allow(missing_docs)] +#[cfg_attr(feature = "debug", derive(Debug))] +pub enum Required { + True, + #[default] + False, +} + +impl Serialize for Required { + fn serialize(&self, serializer: S) -> Result + where + S: Serializer, + { + serializer.serialize_bool(matches!(self, Self::True)) + } +} + +impl<'de> Deserialize<'de> for Required { + fn deserialize(deserializer: D) -> Result + where + D: serde::Deserializer<'de>, + { + struct BoolVisitor; + impl<'de> Visitor<'de> for BoolVisitor { + type Value = Required; + + fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result { + formatter.write_str("a bool true or false") + } + + fn visit_bool(self, v: bool) -> Result + where + E: serde::de::Error, + { + match v { + true => Ok(Required::True), + false => Ok(Required::False), + } + } + } + deserializer.deserialize_bool(BoolVisitor) + } +} + +/// A [`Ref`] or some other type `T`. +/// +/// Typically used in combination with [`Components`] and is an union type between [`Ref`] and any +/// other given type such as [`Schema`] or [`Response`]. +#[derive(Serialize, Deserialize, Clone, PartialEq, Eq)] +#[cfg_attr(feature = "debug", derive(Debug))] +#[serde(untagged)] +pub enum RefOr { + /// Represents [`Ref`] reference to another OpenAPI object instance. e.g. + /// `$ref: #/components/schemas/Hello` + Ref(Ref), + /// Represents any value that can be added to the [`struct@Components`] e.g. [`enum@Schema`] + /// or [`struct@Response`]. + T(T), +} + +macro_rules! build_fn { + ( $vis:vis $name:ident $( $field:ident ),+ ) => { + #[doc = concat!("Constructs a new [`", stringify!($name),"`] taking all fields values from this object.")] + $vis fn build(self) -> $name { + $name { + $( + $field: self.$field, + )* + } + } + }; +} +pub(crate) use build_fn; + +macro_rules! set_value { + ( $self:ident $field:ident $value:expr ) => {{ + $self.$field = $value; + + $self + }}; +} +pub(crate) use set_value; + +macro_rules! new { + ( $vis:vis $name:ident ) => { + #[doc = concat!("Constructs a new [`", stringify!($name),"`].")] + $vis fn new() -> $name { + $name { + ..Default::default() + } + } + }; +} +pub(crate) use new; + +macro_rules! from { + ( $name:ident $to:ident $( $field:ident ),+ ) => { + impl From<$name> for $to { + fn from(value: $name) -> Self { + Self { + $( $field: value.$field, )* + } + } + } + + impl From<$to> for $name { + fn from(value: $to) -> Self { + value.build() + } + } + }; +} +pub(crate) use from; + +macro_rules! builder { + ( $( #[$builder_meta:meta] )* $builder_name:ident; $(#[$meta:meta])* $vis:vis $key:ident $name:ident $( $tt:tt )* ) => { + builder!( @type_impl $builder_name $( #[$meta] )* $vis $key $name $( $tt )* ); + builder!( @builder_impl $( #[$builder_meta] )* $builder_name $( #[$meta] )* $vis $key $name $( $tt )* ); + }; + + ( @type_impl $builder_name:ident $( #[$meta:meta] )* $vis:vis $key:ident $name:ident + { $( $( #[$field_meta:meta] )* $field_vis:vis $field:ident: $field_ty:ty, )* } + ) => { + $( #[$meta] )* + $vis $key $name { + $( $( #[$field_meta] )* $field_vis $field: $field_ty, )* + } + + impl $name { + #[doc = concat!("Construct a new ", stringify!($builder_name), ".")] + #[doc = ""] + #[doc = concat!("This is effectively same as calling [`", stringify!($builder_name), "::new`]")] + $vis fn builder() -> $builder_name { + $builder_name::new() + } + } + }; + + ( @builder_impl $( #[$builder_meta:meta] )* $builder_name:ident $( #[$meta:meta] )* $vis:vis $key:ident $name:ident + { $( $( #[$field_meta:meta] )* $field_vis:vis $field:ident: $field_ty:ty, )* } + ) => { + #[doc = concat!("Builder for [`", stringify!($name), + "`] with chainable configuration methods to create a new [`", stringify!($name) , "`].")] + $( #[$builder_meta] )* + #[cfg_attr(feature = "debug", derive(Debug))] + $vis $key $builder_name { + $( $field: $field_ty, )* + } + + impl Default for $builder_name { + fn default() -> Self { + let meta_default: $name = $name::default(); + Self { + $( $field: meta_default.$field, )* + } + } + } + + impl $builder_name { + crate::openapi::new!($vis $builder_name); + crate::openapi::build_fn!($vis $name $( $field ),* ); + } + + crate::openapi::from!($name $builder_name $( $field ),* ); + }; +} +use crate::openapi::extensions::Extensions; +pub(crate) use builder; + +#[cfg(test)] +mod tests { + use assert_json_diff::assert_json_eq; + use serde_json::json; + + use crate::openapi::{ + info::InfoBuilder, + path::{OperationBuilder, PathsBuilder}, + }; + + use super::{response::Response, *}; + + #[test] + fn serialize_deserialize_openapi_version_success() -> Result<(), serde_json::Error> { + assert_eq!(serde_json::to_value(&OpenApiVersion::Version31)?, "3.1.0"); + Ok(()) + } + + #[test] + fn serialize_openapi_json_minimal_success() -> Result<(), serde_json::Error> { + let raw_json = include_str!("openapi/testdata/expected_openapi_minimal.json"); + let openapi = OpenApi::new( + InfoBuilder::new() + .title("My api") + .version("1.0.0") + .description(Some("My api description")) + .license(Some( + LicenseBuilder::new() + .name("MIT") + .url(Some("http://mit.licence")) + .build(), + )) + .build(), + Paths::new(), + ); + let serialized = serde_json::to_string_pretty(&openapi)?; + + assert_eq!( + serialized, raw_json, + "expected serialized json to match raw: \nserialized: \n{serialized} \nraw: \n{raw_json}" + ); + Ok(()) + } + + #[test] + fn serialize_openapi_json_with_paths_success() -> Result<(), serde_json::Error> { + let openapi = OpenApi::new( + Info::new("My big api", "1.1.0"), + PathsBuilder::new() + .path( + "/api/v1/users", + PathItem::new( + HttpMethod::Get, + OperationBuilder::new().response("200", Response::new("Get users list")), + ), + ) + .path( + "/api/v1/users", + PathItem::new( + HttpMethod::Post, + OperationBuilder::new().response("200", Response::new("Post new user")), + ), + ) + .path( + "/api/v1/users/{id}", + PathItem::new( + HttpMethod::Get, + OperationBuilder::new().response("200", Response::new("Get user by id")), + ), + ), + ); + + let serialized = serde_json::to_string_pretty(&openapi)?; + let expected = include_str!("./openapi/testdata/expected_openapi_with_paths.json"); + + assert_eq!( + serialized, expected, + "expected serialized json to match raw: \nserialized: \n{serialized} \nraw: \n{expected}" + ); + Ok(()) + } + + #[test] + fn merge_2_openapi_documents() { + let mut api_1 = OpenApi::new( + Info::new("Api", "v1"), + PathsBuilder::new() + .path( + "/api/v1/user", + PathItem::new( + HttpMethod::Get, + OperationBuilder::new().response("200", Response::new("Get user success")), + ), + ) + .build(), + ); + + let api_2 = OpenApiBuilder::new() + .info(Info::new("Api", "v2")) + .paths( + PathsBuilder::new() + .path( + "/api/v1/user", + PathItem::new( + HttpMethod::Get, + OperationBuilder::new() + .response("200", Response::new("This will not get added")), + ), + ) + .path( + "/ap/v2/user", + PathItem::new( + HttpMethod::Get, + OperationBuilder::new() + .response("200", Response::new("Get user success 2")), + ), + ) + .path( + "/api/v2/user", + PathItem::new( + HttpMethod::Post, + OperationBuilder::new() + .response("200", Response::new("Get user success")), + ), + ) + .build(), + ) + .components(Some( + ComponentsBuilder::new() + .schema( + "User2", + ObjectBuilder::new().schema_type(Type::Object).property( + "name", + ObjectBuilder::new().schema_type(Type::String).build(), + ), + ) + .build(), + )) + .build(); + + api_1.merge(api_2); + let value = serde_json::to_value(&api_1).unwrap(); + + assert_eq!( + value, + json!( + { + "openapi": "3.1.0", + "info": { + "title": "Api", + "version": "v1" + }, + "paths": { + "/ap/v2/user": { + "get": { + "responses": { + "200": { + "description": "Get user success 2" + } + } + } + }, + "/api/v1/user": { + "get": { + "responses": { + "200": { + "description": "Get user success" + } + } + } + }, + "/api/v2/user": { + "post": { + "responses": { + "200": { + "description": "Get user success" + } + } + } + } + }, + "components": { + "schemas": { + "User2": { + "type": "object", + "properties": { + "name": { + "type": "string" + } + } + } + } + } + } + ) + ) + } + + #[test] + fn merge_same_path_diff_methods() { + let mut api_1 = OpenApi::new( + Info::new("Api", "v1"), + PathsBuilder::new() + .path( + "/api/v1/user", + PathItem::new( + HttpMethod::Get, + OperationBuilder::new() + .response("200", Response::new("Get user success 1")), + ), + ) + .extensions(Some(Extensions::from_iter([("x-v1-api", true)]))) + .build(), + ); + + let api_2 = OpenApiBuilder::new() + .info(Info::new("Api", "v2")) + .paths( + PathsBuilder::new() + .path( + "/api/v1/user", + PathItem::new( + HttpMethod::Get, + OperationBuilder::new() + .response("200", Response::new("This will not get added")), + ), + ) + .path( + "/api/v1/user", + PathItem::new( + HttpMethod::Post, + OperationBuilder::new() + .response("200", Response::new("Post user success 1")), + ), + ) + .path( + "/api/v2/user", + PathItem::new( + HttpMethod::Get, + OperationBuilder::new() + .response("200", Response::new("Get user success 2")), + ), + ) + .path( + "/api/v2/user", + PathItem::new( + HttpMethod::Post, + OperationBuilder::new() + .response("200", Response::new("Post user success 2")), + ), + ) + .extensions(Some(Extensions::from_iter([("x-random", "Value")]))) + .build(), + ) + .components(Some( + ComponentsBuilder::new() + .schema( + "User2", + ObjectBuilder::new().schema_type(Type::Object).property( + "name", + ObjectBuilder::new().schema_type(Type::String).build(), + ), + ) + .build(), + )) + .build(); + + api_1.merge(api_2); + let value = serde_json::to_value(&api_1).unwrap(); + + assert_eq!( + value, + json!( + { + "openapi": "3.1.0", + "info": { + "title": "Api", + "version": "v1" + }, + "paths": { + "/api/v2/user": { + "get": { + "responses": { + "200": { + "description": "Get user success 2" + } + } + }, + "post": { + "responses": { + "200": { + "description": "Post user success 2" + } + } + } + }, + "/api/v1/user": { + "get": { + "responses": { + "200": { + "description": "Get user success 1" + } + } + }, + "post": { + "responses": { + "200": { + "description": "Post user success 1" + } + } + } + }, + "x-random": "Value", + "x-v1-api": true, + }, + "components": { + "schemas": { + "User2": { + "type": "object", + "properties": { + "name": { + "type": "string" + } + } + } + } + } + } + ) + ) + } + + #[test] + fn test_nest_open_apis() { + let api = OpenApiBuilder::new() + .paths( + PathsBuilder::new().path( + "/api/v1/status", + PathItem::new( + HttpMethod::Get, + OperationBuilder::new() + .description(Some("Get status")) + .build(), + ), + ), + ) + .build(); + + let user_api = OpenApiBuilder::new() + .paths( + PathsBuilder::new() + .path( + "/", + PathItem::new( + HttpMethod::Get, + OperationBuilder::new() + .description(Some("Get user details")) + .build(), + ), + ) + .path( + "/foo", + PathItem::new(HttpMethod::Post, OperationBuilder::new().build()), + ), + ) + .build(); + + let nest_merged = api.nest("/api/v1/user", user_api); + let value = serde_json::to_value(nest_merged).expect("should serialize as json"); + let paths = value + .pointer("/paths") + .expect("paths should exits in openapi"); + + assert_json_eq!( + paths, + json!({ + "/api/v1/status": { + "get": { + "description": "Get status", + "responses": {} + } + }, + "/api/v1/user/": { + "get": { + "description": "Get user details", + "responses": {} + } + }, + "/api/v1/user/foo": { + "post": { + "responses": {} + } + } + }) + ) + } + + #[test] + fn openapi_custom_extension() { + let mut api = OpenApiBuilder::new().build(); + let extensions = api.extensions.get_or_insert(Default::default()); + extensions.insert( + String::from("x-tagGroup"), + String::from("anything that serializes to Json").into(), + ); + + let api_json = serde_json::to_value(api).expect("OpenApi must serialize to JSON"); + + assert_json_eq!( + api_json, + json!({ + "info": { + "title": "", + "version": "" + }, + "openapi": "3.1.0", + "paths": {}, + "x-tagGroup": "anything that serializes to Json", + }) + ) + } +} diff --git a/fastapi/src/openapi/content.rs b/fastapi/src/openapi/content.rs new file mode 100644 index 0000000..f40bd48 --- /dev/null +++ b/fastapi/src/openapi/content.rs @@ -0,0 +1,124 @@ +//! Implements content object for request body and response. +use std::collections::BTreeMap; + +use serde::{Deserialize, Serialize}; + +use serde_json::Value; + +use super::builder; +use super::example::Example; +use super::extensions::Extensions; +use super::{encoding::Encoding, set_value, RefOr, Schema}; + +builder! { + ContentBuilder; + + + /// Content holds request body content or response content. + /// + /// [`Content`] implements OpenAPI spec [Media Type Object][media_type] + /// + /// [media_type]: + #[derive(Serialize, Deserialize, Default, Clone, PartialEq)] + #[cfg_attr(feature = "debug", derive(Debug))] + #[non_exhaustive] + pub struct Content { + /// Schema used in response body or request body. + #[serde(skip_serializing_if = "Option::is_none")] + pub schema: Option>, + + /// Example for request body or response body. + #[serde(skip_serializing_if = "Option::is_none")] + pub example: Option, + + /// Examples of the request body or response body. [`Content::examples`] should match to + /// media type and specified schema if present. [`Content::examples`] and + /// [`Content::example`] are mutually exclusive. If both are defined `examples` will + /// override value in `example`. + #[serde(skip_serializing_if = "BTreeMap::is_empty", default)] + pub examples: BTreeMap>, + + /// A map between a property name and its encoding information. + /// + /// The key, being the property name, MUST exist in the [`Content::schema`] as a property, with + /// `schema` being a [`Schema::Object`] and this object containing the same property key in + /// [`Object::properties`](crate::openapi::schema::Object::properties). + /// + /// The encoding object SHALL only apply to `request_body` objects when the media type is + /// multipart or `application/x-www-form-urlencoded`. + #[serde(skip_serializing_if = "BTreeMap::is_empty", default)] + pub encoding: BTreeMap, + + /// Optional extensions "x-something". + #[serde(skip_serializing_if = "Option::is_none", flatten)] + pub extensions: Option, + } +} + +impl Content { + /// Construct a new [`Content`] object for provided _`schema`_. + pub fn new>>(schema: Option) -> Self { + Self { + schema: schema.map(|schema| schema.into()), + ..Self::default() + } + } +} + +impl ContentBuilder { + /// Add schema. + pub fn schema>>(mut self, schema: Option) -> Self { + set_value!(self schema schema.map(|schema| schema.into())) + } + + /// Add example of schema. + pub fn example(mut self, example: Option) -> Self { + set_value!(self example example) + } + + /// Add iterator of _`(N, V)`_ where `N` is name of example and `V` is [`Example`][example] to + /// [`Content`] of a request body or response body. + /// + /// [`Content::examples`] and [`Content::example`] are mutually exclusive. If both are defined + /// `examples` will override value in `example`. + /// + /// [example]: ../example/Example.html + pub fn examples_from_iter< + E: IntoIterator, + N: Into, + V: Into>, + >( + mut self, + examples: E, + ) -> Self { + self.examples.extend( + examples + .into_iter() + .map(|(name, example)| (name.into(), example.into())), + ); + + self + } + + /// Add an encoding. + /// + /// The `property_name` MUST exist in the [`Content::schema`] as a property, + /// with `schema` being a [`Schema::Object`] and this object containing the same property + /// key in [`Object::properties`](crate::openapi::schema::Object::properties). + /// + /// The encoding object SHALL only apply to `request_body` objects when the media type is + /// multipart or `application/x-www-form-urlencoded`. + pub fn encoding, E: Into>( + mut self, + property_name: S, + encoding: E, + ) -> Self { + self.encoding.insert(property_name.into(), encoding.into()); + self + } + + /// Add openapi extensions (x-something) of the API. + pub fn extensions(mut self, extensions: Option) -> Self { + set_value!(self extensions extensions) + } +} diff --git a/fastapi/src/openapi/encoding.rs b/fastapi/src/openapi/encoding.rs new file mode 100644 index 0000000..d63a5a0 --- /dev/null +++ b/fastapi/src/openapi/encoding.rs @@ -0,0 +1,94 @@ +//! Implements encoding object for content. + +use std::collections::BTreeMap; + +use serde::{Deserialize, Serialize}; + +use super::extensions::Extensions; +use super::{builder, path::ParameterStyle, set_value, Header}; + +builder! { + EncodingBuilder; + + /// A single encoding definition applied to a single schema [`Object + /// property`](crate::openapi::schema::Object::properties). + #[derive(Serialize, Deserialize, Default, Clone, PartialEq)] + #[cfg_attr(feature = "debug", derive(Debug))] + #[serde(rename_all = "camelCase")] + #[non_exhaustive] + pub struct Encoding { + /// The Content-Type for encoding a specific property. Default value depends on the property + /// type: for string with format being binary – `application/octet-stream`; for other primitive + /// types – `text/plain`; for object - `application/json`; for array – the default is defined + /// based on the inner type. The value can be a specific media type (e.g. `application/json`), + /// a wildcard media type (e.g. `image/*`), or a comma-separated list of the two types. + #[serde(skip_serializing_if = "Option::is_none")] + pub content_type: Option, + + /// A map allowing additional information to be provided as headers, for example + /// Content-Disposition. Content-Type is described separately and SHALL be ignored in this + /// section. This property SHALL be ignored if the request body media type is not a multipart. + #[serde(skip_serializing_if = "BTreeMap::is_empty")] + pub headers: BTreeMap, + + /// Describes how a specific property value will be serialized depending on its type. See + /// Parameter Object for details on the style property. The behavior follows the same values as + /// query parameters, including default values. This property SHALL be ignored if the request + /// body media type is not `application/x-www-form-urlencoded`. + #[serde(skip_serializing_if = "Option::is_none")] + pub style: Option, + + /// When this is true, property values of type array or object generate separate parameters for + /// each value of the array, or key-value-pair of the map. For other types of properties this + /// property has no effect. When style is form, the default value is true. For all other + /// styles, the default value is false. This property SHALL be ignored if the request body + /// media type is not `application/x-www-form-urlencoded`. + #[serde(skip_serializing_if = "Option::is_none")] + pub explode: Option, + + /// Determines whether the parameter value SHOULD allow reserved characters, as defined by + /// RFC3986 `:/?#[]@!$&'()*+,;=` to be included without percent-encoding. The default value is + /// false. This property SHALL be ignored if the request body media type is not + /// `application/x-www-form-urlencoded`. + #[serde(skip_serializing_if = "Option::is_none")] + pub allow_reserved: Option, + + /// Optional extensions "x-something". + #[serde(skip_serializing_if = "Option::is_none", flatten)] + pub extensions: Option, + } +} + +impl EncodingBuilder { + /// Set the content type. See [`Encoding::content_type`]. + pub fn content_type>(mut self, content_type: Option) -> Self { + set_value!(self content_type content_type.map(Into::into)) + } + + /// Add a [`Header`]. See [`Encoding::headers`]. + pub fn header, H: Into
>(mut self, header_name: S, header: H) -> Self { + self.headers.insert(header_name.into(), header.into()); + + self + } + + /// Set the style [`ParameterStyle`]. See [`Encoding::style`]. + pub fn style(mut self, style: Option) -> Self { + set_value!(self style style) + } + + /// Set the explode. See [`Encoding::explode`]. + pub fn explode(mut self, explode: Option) -> Self { + set_value!(self explode explode) + } + + /// Set the allow reserved. See [`Encoding::allow_reserved`]. + pub fn allow_reserved(mut self, allow_reserved: Option) -> Self { + set_value!(self allow_reserved allow_reserved) + } + + /// Add openapi extensions (x-something) of the API. + pub fn extensions(mut self, extensions: Option) -> Self { + set_value!(self extensions extensions) + } +} diff --git a/fastapi/src/openapi/example.rs b/fastapi/src/openapi/example.rs new file mode 100644 index 0000000..648c5c1 --- /dev/null +++ b/fastapi/src/openapi/example.rs @@ -0,0 +1,101 @@ +//! Implements [OpenAPI Example Object][example] can be used to define examples for [`Response`][response]s and +//! [`RequestBody`][request_body]s. +//! +//! [example]: https://spec.openapis.org/oas/latest.html#example-object +//! [response]: response/struct.Response.html +//! [request_body]: request_body/struct.RequestBody.html +use serde::{Deserialize, Serialize}; + +use super::{builder, set_value, RefOr}; + +builder! { + /// # Examples + /// + /// _**Construct a new [`Example`] via builder**_ + /// ```rust + /// # use fastapi::openapi::example::ExampleBuilder; + /// let example = ExampleBuilder::new() + /// .summary("Example string response") + /// .value(Some(serde_json::json!("Example value"))) + /// .build(); + /// ``` + ExampleBuilder; + + /// Implements [OpenAPI Example Object][example]. + /// + /// Example is used on path operations to describe possible response bodies. + /// + /// [example]: https://spec.openapis.org/oas/latest.html#example-object + #[non_exhaustive] + #[derive(Serialize, Deserialize, Default, Clone, PartialEq, Eq)] + #[cfg_attr(feature = "debug", derive(Debug))] + #[serde(rename_all = "camelCase")] + pub struct Example { + /// Short description for the [`Example`]. + #[serde(skip_serializing_if = "String::is_empty", default)] + pub summary: String, + + /// Long description for the [`Example`]. Value supports markdown syntax for rich text + /// representation. + #[serde(skip_serializing_if = "String::is_empty", default)] + pub description: String, + + /// Embedded literal example value. [`Example::value`] and [`Example::external_value`] are + /// mutually exclusive. + #[serde(skip_serializing_if = "Option::is_none")] + pub value: Option, + + /// An URI that points to a literal example value. [`Example::external_value`] provides the + /// capability to references an example that cannot be easily included in JSON or YAML. + /// [`Example::value`] and [`Example::external_value`] are mutually exclusive. + #[serde(skip_serializing_if = "String::is_empty", default)] + pub external_value: String, + } +} + +impl Example { + /// Construct a new empty [`Example`]. This is effectively same as calling + /// [`Example::default`]. + pub fn new() -> Self { + Self::default() + } +} + +impl ExampleBuilder { + /// Add or change a short description for the [`Example`]. Setting this to empty `String` + /// will make it not render in the generated OpenAPI document. + pub fn summary>(mut self, summary: S) -> Self { + set_value!(self summary summary.into()) + } + + /// Add or change a long description for the [`Example`]. Markdown syntax is supported for rich + /// text representation. + /// + /// Setting this to empty `String` will make it not render in the generated + /// OpenAPI document. + pub fn description>(mut self, description: D) -> Self { + set_value!(self description description.into()) + } + + /// Add or change embedded literal example value. [`Example::value`] and [`Example::external_value`] + /// are mutually exclusive. + pub fn value(mut self, value: Option) -> Self { + set_value!(self value value) + } + + /// Add or change an URI that points to a literal example value. [`Example::external_value`] + /// provides the capability to references an example that cannot be easily included + /// in JSON or YAML. [`Example::value`] and [`Example::external_value`] are mutually exclusive. + /// + /// Setting this to an empty String will make the field not to render in the generated OpenAPI + /// document. + pub fn external_value>(mut self, external_value: E) -> Self { + set_value!(self external_value external_value.into()) + } +} + +impl From for RefOr { + fn from(example_builder: ExampleBuilder) -> Self { + Self::T(example_builder.build()) + } +} diff --git a/fastapi/src/openapi/extensions.rs b/fastapi/src/openapi/extensions.rs new file mode 100644 index 0000000..5833b9d --- /dev/null +++ b/fastapi/src/openapi/extensions.rs @@ -0,0 +1,130 @@ +//! Implements [OpenAPI Extensions][extensions]. +//! +//! [extensions]: https://spec.openapis.org/oas/latest.html#specification-extensions +use std::{ + collections::HashMap, + ops::{Deref, DerefMut}, +}; + +use serde::Serialize; + +use super::builder; + +const EXTENSION_PREFIX: &str = "x-"; + +builder! { + ExtensionsBuilder; + + /// Additional [data for extending][extensions] the OpenAPI specification. + /// + /// [extensions]: https://spec.openapis.org/oas/latest.html#specification-extensions + #[derive(Default, Serialize, Clone, PartialEq, Eq)] + #[cfg_attr(feature = "debug", derive(Debug))] + pub struct Extensions{ + #[serde(flatten)] + extensions: HashMap, + } +} + +impl Extensions { + /// Merge other [`Extensions`] into _`self`_. + pub fn merge(&mut self, other: Extensions) { + self.extensions.extend(other.extensions); + } +} + +impl Deref for Extensions { + type Target = HashMap; + + fn deref(&self) -> &Self::Target { + &self.extensions + } +} + +impl DerefMut for Extensions { + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.extensions + } +} + +impl FromIterator<(K, V)> for Extensions +where + K: Into, + V: Into, +{ + fn from_iter>(iter: T) -> Self { + let iter = iter.into_iter().map(|(k, v)| (k.into(), v.into())); + let extensions = HashMap::from_iter(iter); + Self { extensions } + } +} + +impl From for HashMap { + fn from(value: Extensions) -> Self { + value.extensions + } +} + +impl<'de> serde::de::Deserialize<'de> for Extensions { + fn deserialize(deserializer: D) -> Result + where + D: serde::Deserializer<'de>, + { + let extensions: HashMap = HashMap::deserialize(deserializer)?; + let extensions = extensions + .into_iter() + .filter(|(k, _)| k.starts_with(EXTENSION_PREFIX)) + .collect(); + Ok(Self { extensions }) + } +} + +impl ExtensionsBuilder { + /// Adds a key-value pair to the extensions. Extensions keys are prefixed with `"x-"` if + /// not done already. + pub fn add(mut self, key: K, value: V) -> Self + where + K: Into, + V: Into, + { + let mut key: String = key.into(); + if !key.starts_with(EXTENSION_PREFIX) { + key = format!("{EXTENSION_PREFIX}{key}"); + } + self.extensions.insert(key, value.into()); + self + } +} + +#[cfg(test)] +mod tests { + use super::*; + use serde_json::json; + + #[test] + fn extensions_builder() { + let expected = json!("value"); + let extensions = ExtensionsBuilder::new() + .add("x-some-extension", expected.clone()) + .add("another-extension", expected.clone()) + .build(); + + let value = serde_json::to_value(&extensions).unwrap(); + assert_eq!(value.get("x-some-extension"), Some(&expected)); + assert_eq!(value.get("x-another-extension"), Some(&expected)); + } + + #[test] + fn extensions_from_iter() { + let expected = json!("value"); + let extensions: Extensions = [ + ("x-some-extension", expected.clone()), + ("another-extension", expected.clone()), + ] + .into_iter() + .collect(); + + assert_eq!(extensions.get("x-some-extension"), Some(&expected)); + assert_eq!(extensions.get("another-extension"), Some(&expected)); + } +} diff --git a/fastapi/src/openapi/external_docs.rs b/fastapi/src/openapi/external_docs.rs new file mode 100644 index 0000000..3c78850 --- /dev/null +++ b/fastapi/src/openapi/external_docs.rs @@ -0,0 +1,63 @@ +//! Implements [OpenAPI External Docs Object][external_docs] types. +//! +//! [external_docs]: https://spec.openapis.org/oas/latest.html#xml-object +use serde::{Deserialize, Serialize}; + +use super::extensions::Extensions; +use super::{builder, set_value}; + +builder! { + ExternalDocsBuilder; + + /// Reference of external resource allowing extended documentation. + #[non_exhaustive] + #[derive(Serialize, Deserialize, Default, Clone, PartialEq, Eq)] + #[cfg_attr(feature = "debug", derive(Debug))] + #[serde(rename_all = "camelCase")] + pub struct ExternalDocs { + /// Target url for external documentation location. + pub url: String, + /// Additional description supporting markdown syntax of the external documentation. + pub description: Option, + + /// Optional extensions "x-something". + #[serde(skip_serializing_if = "Option::is_none", flatten)] + pub extensions: Option, + } +} + +impl ExternalDocs { + /// Construct a new [`ExternalDocs`]. + /// + /// Function takes target url argument for the external documentation location. + /// + /// # Examples + /// + /// ```rust + /// # use fastapi::openapi::external_docs::ExternalDocs; + /// let external_docs = ExternalDocs::new("https://pet-api.external.docs"); + /// ``` + pub fn new>(url: S) -> Self { + Self { + url: url.as_ref().to_string(), + ..Default::default() + } + } +} + +impl ExternalDocsBuilder { + /// Add target url for external documentation location. + pub fn url>(mut self, url: I) -> Self { + set_value!(self url url.into()) + } + + /// Add additional description of external documentation. + pub fn description>(mut self, description: Option) -> Self { + set_value!(self description description.map(|description| description.into())) + } + + /// Add openapi extensions (x-something) of the API. + pub fn extensions(mut self, extensions: Option) -> Self { + set_value!(self extensions extensions) + } +} diff --git a/fastapi/src/openapi/header.rs b/fastapi/src/openapi/header.rs new file mode 100644 index 0000000..7ee22d2 --- /dev/null +++ b/fastapi/src/openapi/header.rs @@ -0,0 +1,73 @@ +//! Implements [OpenAPI Header Object][header] types. +//! +//! [header]: https://spec.openapis.org/oas/latest.html#header-object + +use serde::{Deserialize, Serialize}; + +use super::{builder, set_value, Object, RefOr, Schema, Type}; + +builder! { + HeaderBuilder; + + /// Implements [OpenAPI Header Object][header] for response headers. + /// + /// [header]: https://spec.openapis.org/oas/latest.html#header-object + #[non_exhaustive] + #[derive(Serialize, Deserialize, Clone, PartialEq)] + #[cfg_attr(feature = "debug", derive(Debug))] + pub struct Header { + /// Schema of header type. + pub schema: RefOr, + + /// Additional description of the header value. + #[serde(skip_serializing_if = "Option::is_none")] + pub description: Option, + } +} + +impl Header { + /// Construct a new [`Header`] with custom schema. If you wish to construct a default + /// header with `String` type you can use [`Header::default`] function. + /// + /// # Examples + /// + /// Create new [`Header`] with integer type. + /// ```rust + /// # use fastapi::openapi::header::Header; + /// # use fastapi::openapi::{Object, Type}; + /// let header = Header::new(Object::with_type(Type::Integer)); + /// ``` + /// + /// Create a new [`Header`] with default type `String` + /// ```rust + /// # use fastapi::openapi::header::Header; + /// let header = Header::default(); + /// ``` + pub fn new>>(component: C) -> Self { + Self { + schema: component.into(), + ..Default::default() + } + } +} + +impl Default for Header { + fn default() -> Self { + Self { + description: Default::default(), + schema: Object::with_type(Type::String).into(), + } + } +} + +impl HeaderBuilder { + /// Add schema of header. + pub fn schema>>(mut self, component: I) -> Self { + set_value!(self schema component.into()) + } + + /// Add additional description for header. + pub fn description>(mut self, description: Option) -> Self { + set_value!(self description description.map(|description| description.into())) + } +} diff --git a/fastapi/src/openapi/info.rs b/fastapi/src/openapi/info.rs new file mode 100644 index 0000000..7f130de --- /dev/null +++ b/fastapi/src/openapi/info.rs @@ -0,0 +1,277 @@ +//! Implements [OpenAPI Metadata][info] types. +//! +//! Refer to [`OpenApi`][openapi_trait] trait and [derive documentation][derive] +//! for examples and usage details. +//! +//! [info]: +//! [openapi_trait]: ../../trait.OpenApi.html +//! [derive]: ../../derive.OpenApi.html + +use serde::{Deserialize, Serialize}; + +use super::{builder, extensions::Extensions, set_value}; + +builder! { + /// # Examples + /// + /// Create [`Info`] using [`InfoBuilder`]. + /// ```rust + /// # use fastapi::openapi::{Info, InfoBuilder, ContactBuilder}; + /// let info = InfoBuilder::new() + /// .title("My api") + /// .version("1.0.0") + /// .contact(Some(ContactBuilder::new() + /// .name(Some("Admin Admin")) + /// .email(Some("amdin@petapi.com")) + /// .build() + /// )) + /// .build(); + /// ``` + InfoBuilder; + + /// OpenAPI [Info][info] object represents metadata of the API. + /// + /// You can use [`Info::new`] to construct a new [`Info`] object or alternatively use [`InfoBuilder::new`] + /// to construct a new [`Info`] with chainable configuration methods. + /// + /// [info]: + #[non_exhaustive] + #[derive(Serialize, Deserialize, Default, Clone, PartialEq, Eq)] + #[cfg_attr(feature = "debug", derive(Debug))] + #[serde(rename_all = "camelCase")] + pub struct Info { + /// Title of the API. + pub title: String, + + /// Optional description of the API. + /// + /// Value supports markdown syntax. + #[serde(skip_serializing_if = "Option::is_none")] + pub description: Option, + + /// Optional url for terms of service. + #[serde(skip_serializing_if = "Option::is_none")] + pub terms_of_service: Option, + + /// Contact information of exposed API. + /// + /// See more details at: . + #[serde(skip_serializing_if = "Option::is_none")] + pub contact: Option, + + /// License of the API. + /// + /// See more details at: . + #[serde(skip_serializing_if = "Option::is_none")] + pub license: Option, + + /// Document version typically the API version. + pub version: String, + + /// Optional extensions "x-something". + #[serde(skip_serializing_if = "Option::is_none", flatten)] + pub extensions: Option, + } +} + +impl Info { + /// Construct a new [`Info`] object. + /// + /// This function accepts two arguments. One which is the title of the API and two the + /// version of the api document typically the API version. + /// + /// # Examples + /// + /// ```rust + /// # use fastapi::openapi::Info; + /// let info = Info::new("Pet api", "1.1.0"); + /// ``` + pub fn new>(title: S, version: S) -> Self { + Self { + title: title.into(), + version: version.into(), + ..Default::default() + } + } +} + +impl InfoBuilder { + /// Add title of the API. + pub fn title>(mut self, title: I) -> Self { + set_value!(self title title.into()) + } + + /// Add version of the api document typically the API version. + pub fn version>(mut self, version: I) -> Self { + set_value!(self version version.into()) + } + + /// Add description of the API. + pub fn description>(mut self, description: Option) -> Self { + set_value!(self description description.map(|description| description.into())) + } + + /// Add url for terms of the API. + pub fn terms_of_service>(mut self, terms_of_service: Option) -> Self { + set_value!(self terms_of_service terms_of_service.map(|terms_of_service| terms_of_service.into())) + } + + /// Add contact information of the API. + pub fn contact(mut self, contact: Option) -> Self { + set_value!(self contact contact) + } + + /// Add license of the API. + pub fn license(mut self, license: Option) -> Self { + set_value!(self license license) + } + + /// Add openapi extensions (x-something) of the API. + pub fn extensions(mut self, extensions: Option) -> Self { + set_value!(self extensions extensions) + } +} + +builder! { + /// See the [`InfoBuilder`] for combined usage example. + ContactBuilder; + + /// OpenAPI [Contact][contact] information of the API. + /// + /// You can use [`Contact::new`] to construct a new [`Contact`] object or alternatively + /// use [`ContactBuilder::new`] to construct a new [`Contact`] with chainable configuration methods. + /// + /// [contact]: + #[non_exhaustive] + #[derive(Serialize, Deserialize, Default, Clone, PartialEq, Eq)] + #[cfg_attr(feature = "debug", derive(Debug))] + #[serde(rename_all = "camelCase")] + pub struct Contact { + /// Identifying name of the contact person or organization of the API. + #[serde(skip_serializing_if = "Option::is_none")] + pub name: Option, + + /// Url pointing to contact information of the API. + #[serde(skip_serializing_if = "Option::is_none")] + pub url: Option, + + /// Email of the contact person or the organization of the API. + #[serde(skip_serializing_if = "Option::is_none")] + pub email: Option, + + /// Optional extensions "x-something". + #[serde(skip_serializing_if = "Option::is_none", flatten)] + pub extensions: Option, + } +} + +impl Contact { + /// Construct a new [`Contact`]. + pub fn new() -> Self { + Default::default() + } +} + +impl ContactBuilder { + /// Add name contact person or organization of the API. + pub fn name>(mut self, name: Option) -> Self { + set_value!(self name name.map(|name| name.into())) + } + + /// Add url pointing to the contact information of the API. + pub fn url>(mut self, url: Option) -> Self { + set_value!(self url url.map(|url| url.into())) + } + + /// Add email of the contact person or organization of the API. + pub fn email>(mut self, email: Option) -> Self { + set_value!(self email email.map(|email| email.into())) + } + + /// Add openapi extensions (x-something) of the API. + pub fn extensions(mut self, extensions: Option) -> Self { + set_value!(self extensions extensions) + } +} + +builder! { + LicenseBuilder; + + /// OpenAPI [License][license] information of the API. + /// + /// [license]: + #[non_exhaustive] + #[derive(Serialize, Deserialize, Default, Clone, PartialEq, Eq)] + #[cfg_attr(feature = "debug", derive(Debug))] + #[serde(rename_all = "camelCase")] + pub struct License { + /// Name of the license used e.g MIT or Apache-2.0. + pub name: String, + + /// Optional url pointing to the license. + #[serde(skip_serializing_if = "Option::is_none")] + pub url: Option, + + /// An [SPDX-Licenses][spdx_licence] expression for the API. The _`identifier`_ field + /// is mutually exclusive of the _`url`_ field. E.g. Apache-2.0 + /// + /// [spdx_licence]: + #[serde(skip_serializing_if = "Option::is_none")] + pub identifier: Option, + + /// Optional extensions "x-something". + #[serde(skip_serializing_if = "Option::is_none", flatten)] + pub extensions: Option, + } +} + +impl License { + /// Construct a new [`License`] object. + /// + /// Function takes name of the license as an argument e.g MIT. + pub fn new>(name: S) -> Self { + Self { + name: name.into(), + ..Default::default() + } + } +} + +impl LicenseBuilder { + /// Add name of the license used in API. + pub fn name>(mut self, name: S) -> Self { + set_value!(self name name.into()) + } + + /// Add url pointing to the license used in API. + pub fn url>(mut self, url: Option) -> Self { + set_value!(self url url.map(|url| url.into())) + } + + /// Add openapi extensions (x-something) of the API. + pub fn extensions(mut self, extensions: Option) -> Self { + set_value!(self extensions extensions) + } + + /// Set identifier of the licence as [SPDX-Licenses][spdx_licence] expression for the API. + /// The _`identifier`_ field is mutually exclusive of the _`url`_ field. E.g. Apache-2.0 + /// + /// [spdx_licence]: + pub fn identifier>(mut self, identifier: Option) -> Self { + set_value!(self identifier identifier.map(|identifier| identifier.into())) + } +} + +#[cfg(test)] +mod tests { + use super::Contact; + + #[test] + fn contact_new() { + let contact = Contact::new(); + + assert!(contact.name.is_none()); + assert!(contact.url.is_none()); + assert!(contact.email.is_none()); + } +} diff --git a/fastapi/src/openapi/link.rs b/fastapi/src/openapi/link.rs new file mode 100644 index 0000000..365d157 --- /dev/null +++ b/fastapi/src/openapi/link.rs @@ -0,0 +1,143 @@ +//! Implements [Open API Link Object][link_object] for responses. +//! +//! [link_object]: https://spec.openapis.org/oas/latest.html#link-object +use std::collections::BTreeMap; + +use serde::{Deserialize, Serialize}; + +use super::extensions::Extensions; +use super::{builder, Server}; + +builder! { + LinkBuilder; + + /// Implements [Open API Link Object][link_object] for responses. + /// + /// The `Link` represents possible design time link for a response. It does not guarantee + /// callers ability to invoke it but rather provides known relationship between responses and + /// other operations. + /// + /// For computing links, and providing instructions to execute them, + /// a runtime [expression][expression] is used for accessing values in an operation + /// and using them as parameters while invoking the linked operation. + /// + /// [expression]: https://spec.openapis.org/oas/latest.html#runtime-expressions + /// [link_object]: https://spec.openapis.org/oas/latest.html#link-object + #[derive(Serialize, Deserialize, Clone, PartialEq, Default)] + #[cfg_attr(feature = "debug", derive(Debug))] + #[non_exhaustive] + pub struct Link { + /// A relative or absolute URI reference to an OAS operation. This field is + /// mutually exclusive of the _`operation_id`_ field, and **must** point to an [Operation + /// Object][operation]. + /// Relative _`operation_ref`_ values may be used to locate an existing [Operation + /// Object][operation] in the OpenAPI definition. See the rules for resolving [Relative + /// References][relative_references]. + /// + /// [relative_references]: https://spec.openapis.org/oas/latest.html#relative-references-in-uris + /// [operation]: ../path/struct.Operation.html + #[serde(skip_serializing_if = "String::is_empty", default)] + pub operation_ref: String, + + /// The name of an existing, resolvable OAS operation, as defined with a unique + /// _`operation_id`_. + /// This field is mutually exclusive of the _`operation_ref`_ field. + #[serde(skip_serializing_if = "String::is_empty", default)] + pub operation_id: String, + + /// A map representing parameters to pass to an operation as specified with _`operation_id`_ + /// or identified by _`operation_ref`_. The key is parameter name to be used and value can + /// be any value supported by JSON or an [expression][expression] e.g. `$path.id` + /// + /// [expression]: https://spec.openapis.org/oas/latest.html#runtime-expressions + #[serde(skip_serializing_if = "BTreeMap::is_empty")] + pub parameters: BTreeMap, + + /// A literal value or an [expression][expression] to be used as request body when operation is called. + /// + /// [expression]: https://spec.openapis.org/oas/latest.html#runtime-expressions + #[serde(skip_serializing_if = "Option::is_none")] + pub request_body: Option, + + /// Description of the link. Value supports Markdown syntax. + #[serde(skip_serializing_if = "String::is_empty", default)] + pub description: String, + + /// A [`Server`][server] object to be used by the target operation. + /// + /// [server]: ../server/struct.Server.html + #[serde(skip_serializing_if = "Option::is_none")] + pub server: Option, + + /// Optional extensions "x-something". + #[serde(skip_serializing_if = "Option::is_none", flatten)] + pub extensions: Option, + } +} + +impl LinkBuilder { + /// Set a relative or absolute URI reference to an OAS operation. This field is + /// mutually exclusive of the _`operation_id`_ field, and **must** point to an [Operation + /// Object][operation]. + /// + /// [operation]: ../path/struct.Operation.html + pub fn operation_ref>(mut self, operation_ref: S) -> Self { + self.operation_ref = operation_ref.into(); + + self + } + + /// Set the name of an existing, resolvable OAS operation, as defined with a unique + /// _`operation_id`_. + /// This field is mutually exclusive of the _`operation_ref`_ field. + pub fn operation_id>(mut self, operation_id: S) -> Self { + self.operation_id = operation_id.into(); + + self + } + + /// Add parameter to be passed to [Operation][operation] upon execution. + /// + /// [operation]: ../path/struct.Operation.html + pub fn parameter, V: Into>( + mut self, + name: N, + value: V, + ) -> Self { + self.parameters.insert(name.into(), value.into()); + + self + } + + /// Set a literal value or an [expression][expression] to be used as request body when operation is called. + /// + /// [expression]: https://spec.openapis.org/oas/latest.html#runtime-expressions + pub fn request_body>(mut self, request_body: Option) -> Self { + self.request_body = request_body.map(|request_body| request_body.into()); + + self + } + + /// Set description of the link. Value supports Markdown syntax. + pub fn description>(mut self, description: S) -> Self { + self.description = description.into(); + + self + } + + /// Set a [`Server`][server] object to be used by the target operation. + /// + /// [server]: ../server/struct.Server.html + pub fn server>(mut self, server: Option) -> Self { + self.server = server.map(|server| server.into()); + + self + } + + /// Add openapi extensions (x-something) of the API. + pub fn extensions(mut self, extensions: Option) -> Self { + self.extensions = extensions; + + self + } +} diff --git a/fastapi/src/openapi/path.rs b/fastapi/src/openapi/path.rs new file mode 100644 index 0000000..5615642 --- /dev/null +++ b/fastapi/src/openapi/path.rs @@ -0,0 +1,1015 @@ +//! Implements [OpenAPI Path Object][paths] types. +//! +//! [paths]: https://spec.openapis.org/oas/latest.html#paths-object +use crate::Path; +use serde::{Deserialize, Serialize}; +use serde_json::Value; + +use super::{ + builder, + extensions::Extensions, + request_body::RequestBody, + response::{Response, Responses}, + security::SecurityRequirement, + set_value, Deprecated, ExternalDocs, RefOr, Required, Schema, Server, +}; + +#[cfg(not(feature = "preserve_path_order"))] +#[allow(missing_docs)] +#[doc(hidden)] +pub type PathsMap = std::collections::BTreeMap; +#[cfg(feature = "preserve_path_order")] +#[allow(missing_docs)] +#[doc(hidden)] +pub type PathsMap = indexmap::IndexMap; + +builder! { + PathsBuilder; + + /// Implements [OpenAPI Paths Object][paths]. + /// + /// Holds relative paths to matching endpoints and operations. The path is appended to the url + /// from [`Server`] object to construct a full url for endpoint. + /// + /// [paths]: https://spec.openapis.org/oas/latest.html#paths-object + #[non_exhaustive] + #[derive(Serialize, Deserialize, Default, Clone, PartialEq)] + #[cfg_attr(feature = "debug", derive(Debug))] + pub struct Paths { + /// Map of relative paths with [`PathItem`]s holding [`Operation`]s matching + /// api endpoints. + #[serde(flatten)] + pub paths: PathsMap, + + /// Optional extensions "x-something". + #[serde(skip_serializing_if = "Option::is_none", flatten)] + pub extensions: Option, + } +} + +impl Paths { + /// Construct a new [`Paths`] object. + pub fn new() -> Self { + Default::default() + } + + /// Return _`Option`_ of reference to [`PathItem`] by given relative path _`P`_ if one exists + /// in [`Paths::paths`] map. Otherwise will return `None`. + /// + /// # Examples + /// + /// _**Get user path item.**_ + /// ```rust + /// # use fastapi::openapi::path::{Paths, HttpMethod}; + /// # let paths = Paths::new(); + /// let path_item = paths.get_path_item("/api/v1/user"); + /// ``` + pub fn get_path_item>(&self, path: P) -> Option<&PathItem> { + self.paths.get(path.as_ref()) + } + + /// Return _`Option`_ of reference to [`Operation`] from map of paths or `None` if not found. + /// + /// * First will try to find [`PathItem`] by given relative path _`P`_ e.g. `"/api/v1/user"`. + /// * Then tries to find [`Operation`] from [`PathItem`]'s operations by given [`HttpMethod`]. + /// + /// # Examples + /// + /// _**Get user operation from paths.**_ + /// ```rust + /// # use fastapi::openapi::path::{Paths, HttpMethod}; + /// # let paths = Paths::new(); + /// let operation = paths.get_path_operation("/api/v1/user", HttpMethod::Get); + /// ``` + pub fn get_path_operation>( + &self, + path: P, + http_method: HttpMethod, + ) -> Option<&Operation> { + self.paths + .get(path.as_ref()) + .and_then(|path| match http_method { + HttpMethod::Get => path.get.as_ref(), + HttpMethod::Put => path.put.as_ref(), + HttpMethod::Post => path.post.as_ref(), + HttpMethod::Delete => path.delete.as_ref(), + HttpMethod::Options => path.options.as_ref(), + HttpMethod::Head => path.head.as_ref(), + HttpMethod::Patch => path.patch.as_ref(), + HttpMethod::Trace => path.trace.as_ref(), + }) + } + + /// Append path operation to the list of paths. + /// + /// Method accepts three arguments; `path` to add operation for, `http_methods` list of + /// allowed HTTP methods for the [`Operation`] and `operation` to be added under the _`path`_. + /// + /// If _`path`_ already exists, the provided [`Operation`] will be set to existing path item for + /// given list of [`HttpMethod`]s. + pub fn add_path_operation, O: Into>( + &mut self, + path: P, + http_methods: Vec, + operation: O, + ) { + let path = path.as_ref(); + let operation = operation.into(); + if let Some(existing_item) = self.paths.get_mut(path) { + for http_method in http_methods { + match http_method { + HttpMethod::Get => existing_item.get = Some(operation.clone()), + HttpMethod::Put => existing_item.put = Some(operation.clone()), + HttpMethod::Post => existing_item.post = Some(operation.clone()), + HttpMethod::Delete => existing_item.delete = Some(operation.clone()), + HttpMethod::Options => existing_item.options = Some(operation.clone()), + HttpMethod::Head => existing_item.head = Some(operation.clone()), + HttpMethod::Patch => existing_item.patch = Some(operation.clone()), + HttpMethod::Trace => existing_item.trace = Some(operation.clone()), + }; + } + } else { + self.paths.insert( + String::from(path), + PathItem::from_http_methods(http_methods, operation), + ); + } + } + + /// Merge _`other_paths`_ into `self`. On conflicting path the path item operations will be + /// merged into existing [`PathItem`]. Otherwise path with [`PathItem`] will be appended to + /// `self`. All [`Extensions`] will be merged from _`other_paths`_ into `self`. + pub fn merge(&mut self, other_paths: Paths) { + for (path, that) in other_paths.paths { + if let Some(this) = self.paths.get_mut(&path) { + this.merge_operations(that); + } else { + self.paths.insert(path, that); + } + } + + if let Some(other_paths_extensions) = other_paths.extensions { + let paths_extensions = self.extensions.get_or_insert(Extensions::default()); + paths_extensions.merge(other_paths_extensions); + } + } +} + +impl PathsBuilder { + /// Append [`PathItem`] with path to map of paths. If path already exists it will merge [`Operation`]s of + /// [`PathItem`] with already found path item operations. + pub fn path>(mut self, path: I, item: PathItem) -> Self { + let path_string = path.into(); + if let Some(existing_item) = self.paths.get_mut(&path_string) { + existing_item.merge_operations(item); + } else { + self.paths.insert(path_string, item); + } + + self + } + + /// Add extensions to the paths section. + pub fn extensions(mut self, extensions: Option) -> Self { + set_value!(self extensions extensions) + } + + /// Appends a [`Path`] to map of paths. Method must be called with one generic argument that + /// implements [`trait@Path`] trait. + /// + /// # Examples + /// + /// _**Append `MyPath` content to the paths.**_ + /// ```rust + /// # struct MyPath; + /// # impl fastapi::Path for MyPath { + /// # fn methods() -> Vec { vec![] } + /// # fn path() -> String { String::new() } + /// # fn operation() -> fastapi::openapi::path::Operation { + /// # fastapi::openapi::path::Operation::new() + /// # } + /// # } + /// let paths = fastapi::openapi::path::PathsBuilder::new(); + /// let _ = paths.path_from::(); + /// ``` + pub fn path_from(self) -> Self { + let methods = P::methods(); + let operation = P::operation(); + + // for one operation method avoid clone + let path_item = if methods.len() == 1 { + PathItem::new( + methods + .into_iter() + .next() + .expect("must have one operation method"), + operation, + ) + } else { + methods + .into_iter() + .fold(PathItemBuilder::new(), |path_item, method| { + path_item.operation(method, operation.clone()) + }) + .build() + }; + + self.path(P::path(), path_item) + } +} + +builder! { + PathItemBuilder; + + /// Implements [OpenAPI Path Item Object][path_item] what describes [`Operation`]s available on + /// a single path. + /// + /// [path_item]: https://spec.openapis.org/oas/latest.html#path-item-object + #[non_exhaustive] + #[derive(Serialize, Deserialize, Default, Clone, PartialEq)] + #[cfg_attr(feature = "debug", derive(Debug))] + #[serde(rename_all = "camelCase")] + pub struct PathItem { + /// Optional summary intended to apply all operations in this [`PathItem`]. + #[serde(skip_serializing_if = "Option::is_none")] + pub summary: Option, + + /// Optional description intended to apply all operations in this [`PathItem`]. + /// Description supports markdown syntax. + #[serde(skip_serializing_if = "Option::is_none")] + pub description: Option, + + /// Alternative [`Server`] array to serve all [`Operation`]s in this [`PathItem`] overriding + /// the global server array. + #[serde(skip_serializing_if = "Option::is_none")] + pub servers: Option>, + + /// List of [`Parameter`]s common to all [`Operation`]s in this [`PathItem`]. Parameters cannot + /// contain duplicate parameters. They can be overridden in [`Operation`] level but cannot be + /// removed there. + #[serde(skip_serializing_if = "Option::is_none")] + pub parameters: Option>, + + /// Get [`Operation`] for the [`PathItem`]. + #[serde(skip_serializing_if = "Option::is_none")] + pub get: Option, + + /// Put [`Operation`] for the [`PathItem`]. + #[serde(skip_serializing_if = "Option::is_none")] + pub put: Option, + + /// Post [`Operation`] for the [`PathItem`]. + #[serde(skip_serializing_if = "Option::is_none")] + pub post: Option, + + /// Delete [`Operation`] for the [`PathItem`]. + #[serde(skip_serializing_if = "Option::is_none")] + pub delete: Option, + + /// Options [`Operation`] for the [`PathItem`]. + #[serde(skip_serializing_if = "Option::is_none")] + pub options: Option, + + /// Head [`Operation`] for the [`PathItem`]. + #[serde(skip_serializing_if = "Option::is_none")] + pub head: Option, + + /// Patch [`Operation`] for the [`PathItem`]. + #[serde(skip_serializing_if = "Option::is_none")] + pub patch: Option, + + /// Trace [`Operation`] for the [`PathItem`]. + #[serde(skip_serializing_if = "Option::is_none")] + pub trace: Option, + + /// Optional extensions "x-something". + #[serde(skip_serializing_if = "Option::is_none", flatten)] + pub extensions: Option, + } +} + +impl PathItem { + /// Construct a new [`PathItem`] with provided [`Operation`] mapped to given [`HttpMethod`]. + pub fn new>(http_method: HttpMethod, operation: O) -> Self { + let mut path_item = Self::default(); + match http_method { + HttpMethod::Get => path_item.get = Some(operation.into()), + HttpMethod::Put => path_item.put = Some(operation.into()), + HttpMethod::Post => path_item.post = Some(operation.into()), + HttpMethod::Delete => path_item.delete = Some(operation.into()), + HttpMethod::Options => path_item.options = Some(operation.into()), + HttpMethod::Head => path_item.head = Some(operation.into()), + HttpMethod::Patch => path_item.patch = Some(operation.into()), + HttpMethod::Trace => path_item.trace = Some(operation.into()), + }; + + path_item + } + + /// Constructs a new [`PathItem`] with given [`Operation`] set for provided [`HttpMethod`]s. + pub fn from_http_methods, O: Into>( + http_methods: I, + operation: O, + ) -> Self { + let mut path_item = Self::default(); + let operation = operation.into(); + for method in http_methods { + match method { + HttpMethod::Get => path_item.get = Some(operation.clone()), + HttpMethod::Put => path_item.put = Some(operation.clone()), + HttpMethod::Post => path_item.post = Some(operation.clone()), + HttpMethod::Delete => path_item.delete = Some(operation.clone()), + HttpMethod::Options => path_item.options = Some(operation.clone()), + HttpMethod::Head => path_item.head = Some(operation.clone()), + HttpMethod::Patch => path_item.patch = Some(operation.clone()), + HttpMethod::Trace => path_item.trace = Some(operation.clone()), + }; + } + + path_item + } + + /// Merge all defined [`Operation`]s from given [`PathItem`] to `self` if `self` does not have + /// existing operation. + pub fn merge_operations(&mut self, path_item: PathItem) { + if path_item.get.is_some() && self.get.is_none() { + self.get = path_item.get; + } + if path_item.put.is_some() && self.put.is_none() { + self.put = path_item.put; + } + if path_item.post.is_some() && self.post.is_none() { + self.post = path_item.post; + } + if path_item.delete.is_some() && self.delete.is_none() { + self.delete = path_item.delete; + } + if path_item.options.is_some() && self.options.is_none() { + self.options = path_item.options; + } + if path_item.head.is_some() && self.head.is_none() { + self.head = path_item.head; + } + if path_item.patch.is_some() && self.patch.is_none() { + self.patch = path_item.patch; + } + if path_item.trace.is_some() && self.trace.is_none() { + self.trace = path_item.trace; + } + } +} + +impl PathItemBuilder { + /// Append a new [`Operation`] by [`HttpMethod`] to this [`PathItem`]. Operations can + /// hold only one operation per [`HttpMethod`]. + pub fn operation>(mut self, http_method: HttpMethod, operation: O) -> Self { + match http_method { + HttpMethod::Get => self.get = Some(operation.into()), + HttpMethod::Put => self.put = Some(operation.into()), + HttpMethod::Post => self.post = Some(operation.into()), + HttpMethod::Delete => self.delete = Some(operation.into()), + HttpMethod::Options => self.options = Some(operation.into()), + HttpMethod::Head => self.head = Some(operation.into()), + HttpMethod::Patch => self.patch = Some(operation.into()), + HttpMethod::Trace => self.trace = Some(operation.into()), + }; + + self + } + + /// Add or change summary intended to apply all operations in this [`PathItem`]. + pub fn summary>(mut self, summary: Option) -> Self { + set_value!(self summary summary.map(|summary| summary.into())) + } + + /// Add or change optional description intended to apply all operations in this [`PathItem`]. + /// Description supports markdown syntax. + pub fn description>(mut self, description: Option) -> Self { + set_value!(self description description.map(|description| description.into())) + } + + /// Add list of alternative [`Server`]s to serve all [`Operation`]s in this [`PathItem`] overriding + /// the global server array. + pub fn servers>(mut self, servers: Option) -> Self { + set_value!(self servers servers.map(|servers| servers.into_iter().collect())) + } + + /// Append list of [`Parameter`]s common to all [`Operation`]s to this [`PathItem`]. + pub fn parameters>(mut self, parameters: Option) -> Self { + set_value!(self parameters parameters.map(|parameters| parameters.into_iter().collect())) + } + + /// Add openapi extensions (x-something) to this [`PathItem`]. + pub fn extensions(mut self, extensions: Option) -> Self { + set_value!(self extensions extensions) + } +} + +/// HTTP method of the operation. +/// +/// List of supported HTTP methods +#[derive(Serialize, Deserialize, PartialEq, Eq, Hash, PartialOrd, Ord, Clone)] +#[serde(rename_all = "lowercase")] +#[cfg_attr(feature = "debug", derive(Debug))] +pub enum HttpMethod { + /// Type mapping for HTTP _GET_ request. + Get, + /// Type mapping for HTTP _POST_ request. + Post, + /// Type mapping for HTTP _PUT_ request. + Put, + /// Type mapping for HTTP _DELETE_ request. + Delete, + /// Type mapping for HTTP _OPTIONS_ request. + Options, + /// Type mapping for HTTP _HEAD_ request. + Head, + /// Type mapping for HTTP _PATCH_ request. + Patch, + /// Type mapping for HTTP _TRACE_ request. + Trace, +} + +builder! { + OperationBuilder; + + /// Implements [OpenAPI Operation Object][operation] object. + /// + /// [operation]: https://spec.openapis.org/oas/latest.html#operation-object + #[non_exhaustive] + #[derive(Serialize, Deserialize, Default, Clone, PartialEq)] + #[cfg_attr(feature = "debug", derive(Debug))] + #[serde(rename_all = "camelCase")] + pub struct Operation { + /// List of tags used for grouping operations. + /// + /// When used with derive [`#[fastapi::path(...)]`][derive_path] attribute macro the default + /// value used will be resolved from handler path provided in `#[openapi(paths(...))]` with + /// [`#[derive(OpenApi)]`][derive_openapi] macro. If path resolves to `None` value `crate` will + /// be used by default. + /// + /// [derive_path]: ../../attr.path.html + /// [derive_openapi]: ../../derive.OpenApi.html + #[serde(skip_serializing_if = "Option::is_none")] + pub tags: Option>, + + /// Short summary what [`Operation`] does. + /// + /// When used with derive [`#[fastapi::path(...)]`][derive_path] attribute macro the value + /// is taken from **first line** of doc comment. + /// + /// [derive_path]: ../../attr.path.html + #[serde(skip_serializing_if = "Option::is_none")] + pub summary: Option, + + /// Long explanation of [`Operation`] behaviour. Markdown syntax is supported. + /// + /// When used with derive [`#[fastapi::path(...)]`][derive_path] attribute macro the + /// doc comment is used as value for description. + /// + /// [derive_path]: ../../attr.path.html + #[serde(skip_serializing_if = "Option::is_none")] + pub description: Option, + + /// Unique identifier for the API [`Operation`]. Most typically this is mapped to handler function name. + /// + /// When used with derive [`#[fastapi::path(...)]`][derive_path] attribute macro the handler function + /// name will be used by default. + /// + /// [derive_path]: ../../attr.path.html + #[serde(skip_serializing_if = "Option::is_none")] + pub operation_id: Option, + + /// Additional external documentation for this operation. + #[serde(skip_serializing_if = "Option::is_none")] + pub external_docs: Option, + + /// List of applicable parameters for this [`Operation`]. + #[serde(skip_serializing_if = "Option::is_none")] + pub parameters: Option>, + + /// Optional request body for this [`Operation`]. + #[serde(skip_serializing_if = "Option::is_none")] + pub request_body: Option, + + /// List of possible responses returned by the [`Operation`]. + pub responses: Responses, + + // TODO + #[allow(missing_docs)] + #[serde(skip_serializing_if = "Option::is_none")] + pub callbacks: Option, + + /// Define whether the operation is deprecated or not and thus should be avoided consuming. + #[serde(skip_serializing_if = "Option::is_none")] + pub deprecated: Option, + + /// Declaration which security mechanisms can be used for for the operation. Only one + /// [`SecurityRequirement`] must be met. + /// + /// Security for the [`Operation`] can be set to optional by adding empty security with + /// [`SecurityRequirement::default`]. + #[serde(skip_serializing_if = "Option::is_none")] + pub security: Option>, + + /// Alternative [`Server`]s for this [`Operation`]. + #[serde(skip_serializing_if = "Option::is_none")] + pub servers: Option>, + + /// Optional extensions "x-something". + #[serde(skip_serializing_if = "Option::is_none", flatten)] + pub extensions: Option, + } +} + +impl Operation { + /// Construct a new API [`Operation`]. + pub fn new() -> Self { + Default::default() + } +} + +impl OperationBuilder { + /// Add or change tags of the [`Operation`]. + pub fn tags, V: Into>(mut self, tags: Option) -> Self { + set_value!(self tags tags.map(|tags| tags.into_iter().map(Into::into).collect())) + } + + /// Append tag to [`Operation`] tags. + pub fn tag>(mut self, tag: S) -> Self { + let tag_string = tag.into(); + match self.tags { + Some(ref mut tags) => tags.push(tag_string), + None => { + self.tags = Some(vec![tag_string]); + } + } + + self + } + + /// Add or change short summary of the [`Operation`]. + pub fn summary>(mut self, summary: Option) -> Self { + set_value!(self summary summary.map(|summary| summary.into())) + } + + /// Add or change description of the [`Operation`]. + pub fn description>(mut self, description: Option) -> Self { + set_value!(self description description.map(|description| description.into())) + } + + /// Add or change operation id of the [`Operation`]. + pub fn operation_id>(mut self, operation_id: Option) -> Self { + set_value!(self operation_id operation_id.map(|operation_id| operation_id.into())) + } + + /// Add or change parameters of the [`Operation`]. + pub fn parameters, P: Into>( + mut self, + parameters: Option, + ) -> Self { + self.parameters = parameters.map(|parameters| { + if let Some(mut params) = self.parameters { + params.extend(parameters.into_iter().map(|parameter| parameter.into())); + params + } else { + parameters + .into_iter() + .map(|parameter| parameter.into()) + .collect() + } + }); + + self + } + + /// Append parameter to [`Operation`] parameters. + pub fn parameter>(mut self, parameter: P) -> Self { + match self.parameters { + Some(ref mut parameters) => parameters.push(parameter.into()), + None => { + self.parameters = Some(vec![parameter.into()]); + } + } + + self + } + + /// Add or change request body of the [`Operation`]. + pub fn request_body(mut self, request_body: Option) -> Self { + set_value!(self request_body request_body) + } + + /// Add or change responses of the [`Operation`]. + pub fn responses>(mut self, responses: R) -> Self { + set_value!(self responses responses.into()) + } + + /// Append status code and a [`Response`] to the [`Operation`] responses map. + /// + /// * `code` must be valid HTTP status code. + /// * `response` is instances of [`Response`]. + pub fn response, R: Into>>( + mut self, + code: S, + response: R, + ) -> Self { + self.responses + .responses + .insert(code.into(), response.into()); + + self + } + + /// Add or change deprecated status of the [`Operation`]. + pub fn deprecated(mut self, deprecated: Option) -> Self { + set_value!(self deprecated deprecated) + } + + /// Add or change list of [`SecurityRequirement`]s that are available for [`Operation`]. + pub fn securities>( + mut self, + securities: Option, + ) -> Self { + set_value!(self security securities.map(|securities| securities.into_iter().collect())) + } + + /// Append [`SecurityRequirement`] to [`Operation`] security requirements. + pub fn security(mut self, security: SecurityRequirement) -> Self { + if let Some(ref mut securities) = self.security { + securities.push(security); + } else { + self.security = Some(vec![security]); + } + + self + } + + /// Add or change list of [`Server`]s of the [`Operation`]. + pub fn servers>(mut self, servers: Option) -> Self { + set_value!(self servers servers.map(|servers| servers.into_iter().collect())) + } + + /// Append a new [`Server`] to the [`Operation`] servers. + pub fn server(mut self, server: Server) -> Self { + if let Some(ref mut servers) = self.servers { + servers.push(server); + } else { + self.servers = Some(vec![server]); + } + + self + } + + /// Add openapi extensions (x-something) of the [`Operation`]. + pub fn extensions(mut self, extensions: Option) -> Self { + set_value!(self extensions extensions) + } +} + +builder! { + ParameterBuilder; + + /// Implements [OpenAPI Parameter Object][parameter] for [`Operation`]. + /// + /// [parameter]: https://spec.openapis.org/oas/latest.html#parameter-object + #[non_exhaustive] + #[derive(Serialize, Deserialize, Default, Clone, PartialEq)] + #[cfg_attr(feature = "debug", derive(Debug))] + #[serde(rename_all = "camelCase")] + pub struct Parameter { + /// Name of the parameter. + /// + /// * For [`ParameterIn::Path`] this must in accordance to path templating. + /// * For [`ParameterIn::Query`] `Content-Type` or `Authorization` value will be ignored. + pub name: String, + + /// Parameter location. + #[serde(rename = "in")] + pub parameter_in: ParameterIn, + + /// Markdown supported description of the parameter. + #[serde(skip_serializing_if = "Option::is_none")] + pub description: Option, + + /// Declares whether the parameter is required or not for api. + /// + /// * For [`ParameterIn::Path`] this must and will be [`Required::True`]. + pub required: Required, + + /// Declares the parameter deprecated status. + #[serde(skip_serializing_if = "Option::is_none")] + pub deprecated: Option, + // pub allow_empty_value: bool, this is going to be removed from further open api spec releases + /// Schema of the parameter. Typically [`Schema::Object`] is used. + #[serde(skip_serializing_if = "Option::is_none")] + pub schema: Option>, + + /// Describes how [`Parameter`] is being serialized depending on [`Parameter::schema`] (type of a content). + /// Default value is based on [`ParameterIn`]. + #[serde(skip_serializing_if = "Option::is_none")] + pub style: Option, + + /// When _`true`_ it will generate separate parameter value for each parameter with _`array`_ and _`object`_ type. + /// This is also _`true`_ by default for [`ParameterStyle::Form`]. + /// + /// With explode _`false`_: + /// ```text + /// color=blue,black,brown + /// ``` + /// + /// With explode _`true`_: + /// ```text + /// color=blue&color=black&color=brown + /// ``` + #[serde(skip_serializing_if = "Option::is_none")] + pub explode: Option, + + /// Defines whether parameter should allow reserved characters defined by + /// [RFC3986](https://tools.ietf.org/html/rfc3986#section-2.2) _`:/?#[]@!$&'()*+,;=`_. + /// This is only applicable with [`ParameterIn::Query`]. Default value is _`false`_. + #[serde(skip_serializing_if = "Option::is_none")] + pub allow_reserved: Option, + + /// Example of [`Parameter`]'s potential value. This examples will override example + /// within [`Parameter::schema`] if defined. + #[serde(skip_serializing_if = "Option::is_none")] + example: Option, + + /// Optional extensions "x-something". + #[serde(skip_serializing_if = "Option::is_none", flatten)] + pub extensions: Option, + } +} + +impl Parameter { + /// Constructs a new required [`Parameter`] with given name. + pub fn new>(name: S) -> Self { + Self { + name: name.into(), + required: Required::True, + ..Default::default() + } + } +} + +impl ParameterBuilder { + /// Add name of the [`Parameter`]. + pub fn name>(mut self, name: I) -> Self { + set_value!(self name name.into()) + } + + /// Add in of the [`Parameter`]. + pub fn parameter_in(mut self, parameter_in: ParameterIn) -> Self { + set_value!(self parameter_in parameter_in) + } + + /// Add required declaration of the [`Parameter`]. If [`ParameterIn::Path`] is + /// defined this is always [`Required::True`]. + pub fn required(mut self, required: Required) -> Self { + self.required = required; + // required must be true, if parameter_in is Path + if self.parameter_in == ParameterIn::Path { + self.required = Required::True; + } + + self + } + + /// Add or change description of the [`Parameter`]. + pub fn description>(mut self, description: Option) -> Self { + set_value!(self description description.map(|description| description.into())) + } + + /// Add or change [`Parameter`] deprecated declaration. + pub fn deprecated(mut self, deprecated: Option) -> Self { + set_value!(self deprecated deprecated) + } + + /// Add or change [`Parameter`]s schema. + pub fn schema>>(mut self, component: Option) -> Self { + set_value!(self schema component.map(|component| component.into())) + } + + /// Add or change serialization style of [`Parameter`]. + pub fn style(mut self, style: Option) -> Self { + set_value!(self style style) + } + + /// Define whether [`Parameter`]s are exploded or not. + pub fn explode(mut self, explode: Option) -> Self { + set_value!(self explode explode) + } + + /// Add or change whether [`Parameter`] should allow reserved characters. + pub fn allow_reserved(mut self, allow_reserved: Option) -> Self { + set_value!(self allow_reserved allow_reserved) + } + + /// Add or change example of [`Parameter`]'s potential value. + pub fn example(mut self, example: Option) -> Self { + set_value!(self example example) + } + + /// Add openapi extensions (x-something) to the [`Parameter`]. + pub fn extensions(mut self, extensions: Option) -> Self { + set_value!(self extensions extensions) + } +} + +/// In definition of [`Parameter`]. +#[derive(Serialize, Deserialize, PartialEq, Eq, Clone)] +#[serde(rename_all = "lowercase")] +#[cfg_attr(feature = "debug", derive(Debug))] +pub enum ParameterIn { + /// Declares that parameter is used as query parameter. + Query, + /// Declares that parameter is used as path parameter. + Path, + /// Declares that parameter is used as header value. + Header, + /// Declares that parameter is used as cookie value. + Cookie, +} + +impl Default for ParameterIn { + fn default() -> Self { + Self::Path + } +} + +/// Defines how [`Parameter`] should be serialized. +#[derive(Serialize, Deserialize, Clone, PartialEq, Eq)] +#[cfg_attr(feature = "debug", derive(Debug))] +#[serde(rename_all = "camelCase")] +pub enum ParameterStyle { + /// Path style parameters defined by [RFC6570](https://tools.ietf.org/html/rfc6570#section-3.2.7) + /// e.g _`;color=blue`_. + /// Allowed with [`ParameterIn::Path`]. + Matrix, + /// Label style parameters defined by [RFC6570](https://datatracker.ietf.org/doc/html/rfc6570#section-3.2.5) + /// e.g _`.color=blue`_. + /// Allowed with [`ParameterIn::Path`]. + Label, + /// Form style parameters defined by [RFC6570](https://datatracker.ietf.org/doc/html/rfc6570#section-3.2.8) + /// e.g. _`color=blue`_. Default value for [`ParameterIn::Query`] [`ParameterIn::Cookie`]. + /// Allowed with [`ParameterIn::Query`] or [`ParameterIn::Cookie`]. + Form, + /// Default value for [`ParameterIn::Path`] [`ParameterIn::Header`]. e.g. _`blue`_. + /// Allowed with [`ParameterIn::Path`] or [`ParameterIn::Header`]. + Simple, + /// Space separated array values e.g. _`blue%20black%20brown`_. + /// Allowed with [`ParameterIn::Query`]. + SpaceDelimited, + /// Pipe separated array values e.g. _`blue|black|brown`_. + /// Allowed with [`ParameterIn::Query`]. + PipeDelimited, + /// Simple way of rendering nested objects using form parameters .e.g. _`color[B]=150`_. + /// Allowed with [`ParameterIn::Query`]. + DeepObject, +} + +#[cfg(test)] +mod tests { + use super::{HttpMethod, Operation, OperationBuilder}; + use crate::openapi::{security::SecurityRequirement, server::Server, PathItem, PathsBuilder}; + + #[test] + fn test_path_order() { + let paths_list = PathsBuilder::new() + .path( + "/todo", + PathItem::new(HttpMethod::Get, OperationBuilder::new()), + ) + .path( + "/todo", + PathItem::new(HttpMethod::Post, OperationBuilder::new()), + ) + .path( + "/todo/{id}", + PathItem::new(HttpMethod::Delete, OperationBuilder::new()), + ) + .path( + "/todo/{id}", + PathItem::new(HttpMethod::Get, OperationBuilder::new()), + ) + .path( + "/todo/{id}", + PathItem::new(HttpMethod::Put, OperationBuilder::new()), + ) + .path( + "/todo/search", + PathItem::new(HttpMethod::Get, OperationBuilder::new()), + ) + .build(); + + let actual_value = paths_list + .paths + .iter() + .flat_map(|(path, path_item)| { + let mut path_methods = + Vec::<(&str, &HttpMethod)>::with_capacity(paths_list.paths.len()); + if path_item.get.is_some() { + path_methods.push((path, &HttpMethod::Get)); + } + if path_item.put.is_some() { + path_methods.push((path, &HttpMethod::Put)); + } + if path_item.post.is_some() { + path_methods.push((path, &HttpMethod::Post)); + } + if path_item.delete.is_some() { + path_methods.push((path, &HttpMethod::Delete)); + } + if path_item.options.is_some() { + path_methods.push((path, &HttpMethod::Options)); + } + if path_item.head.is_some() { + path_methods.push((path, &HttpMethod::Head)); + } + if path_item.patch.is_some() { + path_methods.push((path, &HttpMethod::Patch)); + } + if path_item.trace.is_some() { + path_methods.push((path, &HttpMethod::Trace)); + } + + path_methods + }) + .collect::>(); + + let get = HttpMethod::Get; + let post = HttpMethod::Post; + let put = HttpMethod::Put; + let delete = HttpMethod::Delete; + + #[cfg(not(feature = "preserve_path_order"))] + { + let expected_value = vec![ + ("/todo", &get), + ("/todo", &post), + ("/todo/search", &get), + ("/todo/{id}", &get), + ("/todo/{id}", &put), + ("/todo/{id}", &delete), + ]; + assert_eq!(actual_value, expected_value); + } + + #[cfg(feature = "preserve_path_order")] + { + let expected_value = vec![ + ("/todo", &get), + ("/todo", &post), + ("/todo/{id}", &get), + ("/todo/{id}", &put), + ("/todo/{id}", &delete), + ("/todo/search", &get), + ]; + assert_eq!(actual_value, expected_value); + } + } + + #[test] + fn operation_new() { + let operation = Operation::new(); + + assert!(operation.tags.is_none()); + assert!(operation.summary.is_none()); + assert!(operation.description.is_none()); + assert!(operation.operation_id.is_none()); + assert!(operation.external_docs.is_none()); + assert!(operation.parameters.is_none()); + assert!(operation.request_body.is_none()); + assert!(operation.responses.responses.is_empty()); + assert!(operation.callbacks.is_none()); + assert!(operation.deprecated.is_none()); + assert!(operation.security.is_none()); + assert!(operation.servers.is_none()); + } + + #[test] + fn operation_builder_security() { + let security_requirement1 = + SecurityRequirement::new("api_oauth2_flow", ["edit:items", "read:items"]); + let security_requirement2 = SecurityRequirement::new("api_oauth2_flow", ["remove:items"]); + let operation = OperationBuilder::new() + .security(security_requirement1) + .security(security_requirement2) + .build(); + + assert!(operation.security.is_some()); + } + + #[test] + fn operation_builder_server() { + let server1 = Server::new("/api"); + let server2 = Server::new("/admin"); + let operation = OperationBuilder::new() + .server(server1) + .server(server2) + .build(); + + assert!(operation.servers.is_some()); + } +} diff --git a/fastapi/src/openapi/request_body.rs b/fastapi/src/openapi/request_body.rs new file mode 100644 index 0000000..f708ab3 --- /dev/null +++ b/fastapi/src/openapi/request_body.rs @@ -0,0 +1,221 @@ +//! Implements [OpenAPI Request Body][request_body] types. +//! +//! [request_body]: https://spec.openapis.org/oas/latest.html#request-body-object +use std::collections::BTreeMap; + +use serde::{Deserialize, Serialize}; + +use super::extensions::Extensions; +use super::{builder, set_value, Content, Required}; + +builder! { + RequestBodyBuilder; + + /// Implements [OpenAPI Request Body][request_body]. + /// + /// [request_body]: https://spec.openapis.org/oas/latest.html#request-body-object + #[non_exhaustive] + #[derive(Serialize, Deserialize, Default, Clone, PartialEq)] + #[cfg_attr(feature = "debug", derive(Debug))] + #[serde(rename_all = "camelCase")] + pub struct RequestBody { + /// Additional description of [`RequestBody`] supporting markdown syntax. + #[serde(skip_serializing_if = "Option::is_none")] + pub description: Option, + + /// Map of request body contents mapped by content type e.g. `application/json`. + pub content: BTreeMap, + + /// Determines whether request body is required in the request or not. + #[serde(skip_serializing_if = "Option::is_none")] + pub required: Option, + + /// Optional extensions "x-something". + #[serde(skip_serializing_if = "Option::is_none", flatten)] + pub extensions: Option, + } +} + +impl RequestBody { + /// Construct a new [`RequestBody`]. + pub fn new() -> Self { + Default::default() + } +} + +impl RequestBodyBuilder { + /// Add description for [`RequestBody`]. + pub fn description>(mut self, description: Option) -> Self { + set_value!(self description description.map(|description| description.into())) + } + + /// Define [`RequestBody`] required. + pub fn required(mut self, required: Option) -> Self { + set_value!(self required required) + } + + /// Add [`Content`] by content type e.g `application/json` to [`RequestBody`]. + pub fn content>(mut self, content_type: S, content: Content) -> Self { + self.content.insert(content_type.into(), content); + + self + } + + /// Add openapi extensions (x-something) of the API. + pub fn extensions(mut self, extensions: Option) -> Self { + set_value!(self extensions extensions) + } +} + +/// Trait with convenience functions for documenting request bodies. +/// +/// With a single method call we can add [`Content`] to our [`RequestBodyBuilder`] and +/// [`RequestBody`] that references a [schema][schema] using +/// content-type `"application/json"`. +/// +/// _**Add json request body from schema ref.**_ +/// ```rust +/// use fastapi::openapi::request_body::{RequestBodyBuilder, RequestBodyExt}; +/// +/// let request = RequestBodyBuilder::new().json_schema_ref("EmailPayload").build(); +/// ``` +/// +/// If serialized to JSON, the above will result in a requestBody schema like this. +/// ```json +/// { +/// "content": { +/// "application/json": { +/// "schema": { +/// "$ref": "#/components/schemas/EmailPayload" +/// } +/// } +/// } +/// } +/// ``` +/// +/// [schema]: crate::ToSchema +/// +#[cfg(feature = "openapi_extensions")] +#[cfg_attr(doc_cfg, doc(cfg(feature = "openapi_extensions")))] +pub trait RequestBodyExt { + /// Add [`Content`] to [`RequestBody`] referring to a _`schema`_ + /// with Content-Type `application/json`. + fn json_schema_ref(self, ref_name: &str) -> Self; +} + +#[cfg(feature = "openapi_extensions")] +impl RequestBodyExt for RequestBody { + fn json_schema_ref(mut self, ref_name: &str) -> RequestBody { + self.content.insert( + "application/json".to_string(), + crate::openapi::Content::new(Some(crate::openapi::Ref::from_schema_name(ref_name))), + ); + self + } +} + +#[cfg(feature = "openapi_extensions")] +impl RequestBodyExt for RequestBodyBuilder { + fn json_schema_ref(self, ref_name: &str) -> RequestBodyBuilder { + self.content( + "application/json", + crate::openapi::Content::new(Some(crate::openapi::Ref::from_schema_name(ref_name))), + ) + } +} + +#[cfg(test)] +mod tests { + use assert_json_diff::assert_json_eq; + use serde_json::json; + + use super::{Content, RequestBody, RequestBodyBuilder, Required}; + + #[test] + fn request_body_new() { + let request_body = RequestBody::new(); + + assert!(request_body.content.is_empty()); + assert_eq!(request_body.description, None); + assert!(request_body.required.is_none()); + } + + #[test] + fn request_body_builder() -> Result<(), serde_json::Error> { + let request_body = RequestBodyBuilder::new() + .description(Some("A sample requestBody")) + .required(Some(Required::True)) + .content( + "application/json", + Content::new(Some(crate::openapi::Ref::from_schema_name("EmailPayload"))), + ) + .build(); + let serialized = serde_json::to_string_pretty(&request_body)?; + println!("serialized json:\n {serialized}"); + assert_json_eq!( + request_body, + json!({ + "description": "A sample requestBody", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EmailPayload" + } + } + }, + "required": true + }) + ); + Ok(()) + } +} + +#[cfg(all(test, feature = "openapi_extensions"))] +#[cfg_attr(doc_cfg, doc(cfg(feature = "openapi_extensions")))] +mod openapi_extensions_tests { + use assert_json_diff::assert_json_eq; + use serde_json::json; + + use crate::openapi::request_body::RequestBodyBuilder; + + use super::RequestBodyExt; + + #[test] + fn request_body_ext() { + let request_body = RequestBodyBuilder::new() + .build() + // build a RequestBody first to test the method + .json_schema_ref("EmailPayload"); + assert_json_eq!( + request_body, + json!({ + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EmailPayload" + } + } + } + }) + ); + } + + #[test] + fn request_body_builder_ext() { + let request_body = RequestBodyBuilder::new() + .json_schema_ref("EmailPayload") + .build(); + assert_json_eq!( + request_body, + json!({ + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EmailPayload" + } + } + } + }) + ); + } +} diff --git a/fastapi/src/openapi/response.rs b/fastapi/src/openapi/response.rs new file mode 100644 index 0000000..fdc4a04 --- /dev/null +++ b/fastapi/src/openapi/response.rs @@ -0,0 +1,357 @@ +//! Implements [OpenApi Responses][responses]. +//! +//! [responses]: https://spec.openapis.org/oas/latest.html#responses-object +use std::collections::BTreeMap; + +use indexmap::IndexMap; +use serde::{Deserialize, Serialize}; + +use crate::openapi::{Ref, RefOr}; +use crate::IntoResponses; + +use super::extensions::Extensions; +use super::link::Link; +use super::{builder, header::Header, set_value, Content}; + +builder! { + ResponsesBuilder; + + /// Implements [OpenAPI Responses Object][responses]. + /// + /// Responses is a map holding api operation responses identified by their status code. + /// + /// [responses]: https://spec.openapis.org/oas/latest.html#responses-object + #[non_exhaustive] + #[derive(Serialize, Deserialize, Default, Clone, PartialEq)] + #[cfg_attr(feature = "debug", derive(Debug))] + #[serde(rename_all = "camelCase")] + pub struct Responses { + /// Map containing status code as a key with represented response as a value. + #[serde(flatten)] + pub responses: BTreeMap>, + + /// Optional extensions "x-something". + #[serde(skip_serializing_if = "Option::is_none", flatten)] + pub extensions: Option, + } +} + +impl Responses { + /// Construct a new [`Responses`]. + pub fn new() -> Self { + Default::default() + } +} + +impl ResponsesBuilder { + /// Add a [`Response`]. + pub fn response, R: Into>>( + mut self, + code: S, + response: R, + ) -> Self { + self.responses.insert(code.into(), response.into()); + + self + } + + /// Add responses from an iterator over a pair of `(status_code, response): (String, Response)`. + pub fn responses_from_iter< + I: IntoIterator, + C: Into, + R: Into>, + >( + mut self, + iter: I, + ) -> Self { + self.responses.extend( + iter.into_iter() + .map(|(code, response)| (code.into(), response.into())), + ); + self + } + + /// Add responses from a type that implements [`IntoResponses`]. + pub fn responses_from_into_responses(mut self) -> Self { + self.responses.extend(I::responses()); + self + } + + /// Add openapi extensions (x-something) of the API. + pub fn extensions(mut self, extensions: Option) -> Self { + set_value!(self extensions extensions) + } +} + +impl From for BTreeMap> { + fn from(responses: Responses) -> Self { + responses.responses + } +} + +impl FromIterator<(C, R)> for Responses +where + C: Into, + R: Into>, +{ + fn from_iter>(iter: T) -> Self { + Self { + responses: BTreeMap::from_iter( + iter.into_iter() + .map(|(code, response)| (code.into(), response.into())), + ), + ..Default::default() + } + } +} + +builder! { + ResponseBuilder; + + /// Implements [OpenAPI Response Object][response]. + /// + /// Response is api operation response. + /// + /// [response]: https://spec.openapis.org/oas/latest.html#response-object + #[non_exhaustive] + #[derive(Serialize, Deserialize, Default, Clone, PartialEq)] + #[cfg_attr(feature = "debug", derive(Debug))] + #[serde(rename_all = "camelCase")] + pub struct Response { + /// Description of the response. Response support markdown syntax. + pub description: String, + + /// Map of headers identified by their name. `Content-Type` header will be ignored. + #[serde(skip_serializing_if = "BTreeMap::is_empty", default)] + pub headers: BTreeMap, + + /// Map of response [`Content`] objects identified by response body content type e.g `application/json`. + /// + /// [`Content`]s are stored within [`IndexMap`] to retain their insertion order. Swagger UI + /// will create and show default example according to the first entry in `content` map. + #[serde(skip_serializing_if = "IndexMap::is_empty", default)] + pub content: IndexMap, + + /// Optional extensions "x-something". + #[serde(skip_serializing_if = "Option::is_none", flatten)] + pub extensions: Option, + + /// A map of operations links that can be followed from the response. The key of the + /// map is a short name for the link. + #[serde(skip_serializing_if = "BTreeMap::is_empty", default)] + pub links: BTreeMap>, + } +} + +impl Response { + /// Construct a new [`Response`]. + /// + /// Function takes description as argument. + pub fn new>(description: S) -> Self { + Self { + description: description.into(), + ..Default::default() + } + } +} + +impl ResponseBuilder { + /// Add description. Description supports markdown syntax. + pub fn description>(mut self, description: I) -> Self { + set_value!(self description description.into()) + } + + /// Add [`Content`] of the [`Response`] with content type e.g `application/json`. + pub fn content>(mut self, content_type: S, content: Content) -> Self { + self.content.insert(content_type.into(), content); + + self + } + + /// Add response [`Header`]. + pub fn header>(mut self, name: S, header: Header) -> Self { + self.headers.insert(name.into(), header); + + self + } + + /// Add openapi extensions (x-something) to the [`Header`]. + pub fn extensions(mut self, extensions: Option) -> Self { + set_value!(self extensions extensions) + } + + /// Add link that can be followed from the response. + pub fn link, L: Into>>(mut self, name: S, link: L) -> Self { + self.links.insert(name.into(), link.into()); + + self + } +} + +impl From for RefOr { + fn from(builder: ResponseBuilder) -> Self { + Self::T(builder.build()) + } +} + +impl From for RefOr { + fn from(r: Ref) -> Self { + Self::Ref(r) + } +} + +/// Trait with convenience functions for documenting response bodies. +/// +/// With a single method call we can add [`Content`] to our [`ResponseBuilder`] and [`Response`] +/// that references a [schema][schema] using content-type `"application/json"`. +/// +/// _**Add json response from schema ref.**_ +/// ```rust +/// use fastapi::openapi::response::{ResponseBuilder, ResponseExt}; +/// +/// let request = ResponseBuilder::new() +/// .description("A sample response") +/// .json_schema_ref("MyResponsePayload").build(); +/// ``` +/// +/// If serialized to JSON, the above will result in a response schema like this. +/// ```json +/// { +/// "description": "A sample response", +/// "content": { +/// "application/json": { +/// "schema": { +/// "$ref": "#/components/schemas/MyResponsePayload" +/// } +/// } +/// } +/// } +/// ``` +/// +/// [response]: crate::ToResponse +/// [schema]: crate::ToSchema +/// +#[cfg(feature = "openapi_extensions")] +#[cfg_attr(doc_cfg, doc(cfg(feature = "openapi_extensions")))] +pub trait ResponseExt { + /// Add [`Content`] to [`Response`] referring to a _`schema`_ + /// with Content-Type `application/json`. + fn json_schema_ref(self, ref_name: &str) -> Self; +} + +#[cfg(feature = "openapi_extensions")] +impl ResponseExt for Response { + fn json_schema_ref(mut self, ref_name: &str) -> Response { + self.content.insert( + "application/json".to_string(), + Content::new(Some(crate::openapi::Ref::from_schema_name(ref_name))), + ); + self + } +} + +#[cfg(feature = "openapi_extensions")] +impl ResponseExt for ResponseBuilder { + fn json_schema_ref(self, ref_name: &str) -> ResponseBuilder { + self.content( + "application/json", + Content::new(Some(crate::openapi::Ref::from_schema_name(ref_name))), + ) + } +} + +#[cfg(test)] +mod tests { + use super::{Content, ResponseBuilder, Responses}; + use assert_json_diff::assert_json_eq; + use serde_json::json; + + #[test] + fn responses_new() { + let responses = Responses::new(); + + assert!(responses.responses.is_empty()); + } + + #[test] + fn response_builder() -> Result<(), serde_json::Error> { + let request_body = ResponseBuilder::new() + .description("A sample response") + .content( + "application/json", + Content::new(Some(crate::openapi::Ref::from_schema_name( + "MySchemaPayload", + ))), + ) + .build(); + let serialized = serde_json::to_string_pretty(&request_body)?; + println!("serialized json:\n {serialized}"); + assert_json_eq!( + request_body, + json!({ + "description": "A sample response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MySchemaPayload" + } + } + } + }) + ); + Ok(()) + } +} + +#[cfg(all(test, feature = "openapi_extensions"))] +mod openapi_extensions_tests { + use assert_json_diff::assert_json_eq; + use serde_json::json; + + use crate::openapi::ResponseBuilder; + + use super::ResponseExt; + + #[test] + fn response_ext() { + let request_body = ResponseBuilder::new() + .description("A sample response") + .build() + .json_schema_ref("MySchemaPayload"); + + assert_json_eq!( + request_body, + json!({ + "description": "A sample response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MySchemaPayload" + } + } + } + }) + ); + } + + #[test] + fn response_builder_ext() { + let request_body = ResponseBuilder::new() + .description("A sample response") + .json_schema_ref("MySchemaPayload") + .build(); + assert_json_eq!( + request_body, + json!({ + "description": "A sample response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MySchemaPayload" + } + } + } + }) + ); + } +} diff --git a/fastapi/src/openapi/schema.rs b/fastapi/src/openapi/schema.rs new file mode 100644 index 0000000..a030679 --- /dev/null +++ b/fastapi/src/openapi/schema.rs @@ -0,0 +1,2872 @@ +//! Implements [OpenAPI Schema Object][schema] types which can be +//! used to define field properties, enum values, array or object types. +//! +//! [schema]: https://spec.openapis.org/oas/latest.html#schema-object +use std::collections::BTreeMap; + +use serde::{Deserialize, Serialize}; +use serde_json::Value; + +use super::extensions::Extensions; +use super::RefOr; +use super::{builder, security::SecurityScheme, set_value, xml::Xml, Deprecated, Response}; +use crate::{ToResponse, ToSchema}; + +macro_rules! component_from_builder { + ( $name:ident ) => { + impl From<$name> for Schema { + fn from(builder: $name) -> Self { + builder.build().into() + } + } + }; +} + +macro_rules! to_array_builder { + () => { + /// Construct a new [`ArrayBuilder`] with this component set to [`ArrayBuilder::items`]. + pub fn to_array_builder(self) -> ArrayBuilder { + ArrayBuilder::from(Array::new(self)) + } + }; +} + +/// Create an _`empty`_ [`Schema`] that serializes to _`null`_. +/// +/// Can be used in places where an item can be serialized as `null`. This is used with unit type +/// enum variants and tuple unit types. +pub fn empty() -> Schema { + Schema::Object( + ObjectBuilder::new() + .schema_type(SchemaType::AnyValue) + .default(Some(serde_json::Value::Null)) + .into(), + ) +} + +builder! { + ComponentsBuilder; + + /// Implements [OpenAPI Components Object][components] which holds supported + /// reusable objects. + /// + /// Components can hold either reusable types themselves or references to other reusable + /// types. + /// + /// [components]: https://spec.openapis.org/oas/latest.html#components-object + #[non_exhaustive] + #[derive(Serialize, Deserialize, Default, Clone, PartialEq)] + #[cfg_attr(feature = "debug", derive(Debug))] + #[serde(rename_all = "camelCase")] + pub struct Components { + /// Map of reusable [OpenAPI Schema Object][schema]s. + /// + /// [schema]: https://spec.openapis.org/oas/latest.html#schema-object + #[serde(skip_serializing_if = "BTreeMap::is_empty", default)] + pub schemas: BTreeMap>, + + /// Map of reusable response name, to [OpenAPI Response Object][response]s or [OpenAPI + /// Reference][reference]s to [OpenAPI Response Object][response]s. + /// + /// [response]: https://spec.openapis.org/oas/latest.html#response-object + /// [reference]: https://spec.openapis.org/oas/latest.html#reference-object + #[serde(skip_serializing_if = "BTreeMap::is_empty", default)] + pub responses: BTreeMap>, + + /// Map of reusable [OpenAPI Security Scheme Object][security_scheme]s. + /// + /// [security_scheme]: https://spec.openapis.org/oas/latest.html#security-scheme-object + #[serde(skip_serializing_if = "BTreeMap::is_empty", default)] + pub security_schemes: BTreeMap, + + /// Optional extensions "x-something". + #[serde(skip_serializing_if = "Option::is_none", flatten)] + pub extensions: Option, + } +} + +impl Components { + /// Construct a new [`Components`]. + pub fn new() -> Self { + Self { + ..Default::default() + } + } + /// Add [`SecurityScheme`] to [`Components`]. + /// + /// Accepts two arguments where first is the name of the [`SecurityScheme`]. This is later when + /// referenced by [`SecurityRequirement`][requirement]s. Second parameter is the [`SecurityScheme`]. + /// + /// [requirement]: ../security/struct.SecurityRequirement.html + pub fn add_security_scheme, S: Into>( + &mut self, + name: N, + security_scheme: S, + ) { + self.security_schemes + .insert(name.into(), security_scheme.into()); + } + + /// Add iterator of [`SecurityScheme`]s to [`Components`]. + /// + /// Accepts two arguments where first is the name of the [`SecurityScheme`]. This is later when + /// referenced by [`SecurityRequirement`][requirement]s. Second parameter is the [`SecurityScheme`]. + /// + /// [requirement]: ../security/struct.SecurityRequirement.html + pub fn add_security_schemes_from_iter< + I: IntoIterator, + N: Into, + S: Into, + >( + &mut self, + schemas: I, + ) { + self.security_schemes.extend( + schemas + .into_iter() + .map(|(name, item)| (name.into(), item.into())), + ); + } +} + +impl ComponentsBuilder { + /// Add [`Schema`] to [`Components`]. + /// + /// Accepts two arguments where first is name of the schema and second is the schema itself. + pub fn schema, I: Into>>(mut self, name: S, schema: I) -> Self { + self.schemas.insert(name.into(), schema.into()); + + self + } + + /// Add [`Schema`] to [`Components`]. + /// + /// This is effectively same as calling [`ComponentsBuilder::schema`] but expects to be called + /// with one generic argument that implements [`ToSchema`][trait@ToSchema] trait. + /// + /// # Examples + /// + /// _**Add schema from `Value` type that derives `ToSchema`.**_ + /// + /// ```rust + /// # use fastapi::{ToSchema, openapi::schema::ComponentsBuilder}; + /// #[derive(ToSchema)] + /// struct Value(String); + /// + /// let _ = ComponentsBuilder::new().schema_from::().build(); + /// ``` + pub fn schema_from(mut self) -> Self { + let name = I::name(); + let schema = I::schema(); + self.schemas.insert(name.to_string(), schema); + + self + } + + /// Add [`Schema`]s from iterator. + /// + /// # Examples + /// ```rust + /// # use fastapi::openapi::schema::{ComponentsBuilder, ObjectBuilder, + /// # Type, Schema}; + /// ComponentsBuilder::new().schemas_from_iter([( + /// "Pet", + /// Schema::from( + /// ObjectBuilder::new() + /// .property( + /// "name", + /// ObjectBuilder::new().schema_type(Type::String), + /// ) + /// .required("name") + /// ), + /// )]); + /// ``` + pub fn schemas_from_iter< + I: IntoIterator, + C: Into>, + S: Into, + >( + mut self, + schemas: I, + ) -> Self { + self.schemas.extend( + schemas + .into_iter() + .map(|(name, schema)| (name.into(), schema.into())), + ); + + self + } + + /// Add [`struct@Response`] to [`Components`]. + /// + /// Method accepts tow arguments; `name` of the reusable response and `response` which is the + /// reusable response itself. + pub fn response, R: Into>>( + mut self, + name: S, + response: R, + ) -> Self { + self.responses.insert(name.into(), response.into()); + self + } + + /// Add [`struct@Response`] to [`Components`]. + /// + /// This behaves the same way as [`ComponentsBuilder::schema_from`] but for responses. It + /// allows adding response from type implementing [`trait@ToResponse`] trait. Method is + /// expected to be called with one generic argument that implements the trait. + pub fn response_from<'r, I: ToResponse<'r>>(self) -> Self { + let (name, response) = I::response(); + self.response(name, response) + } + + /// Add multiple [`struct@Response`]s to [`Components`] from iterator. + /// + /// Like the [`ComponentsBuilder::schemas_from_iter`] this allows adding multiple responses by + /// any iterator what returns tuples of (name, response) values. + pub fn responses_from_iter< + I: IntoIterator, + S: Into, + R: Into>, + >( + mut self, + responses: I, + ) -> Self { + self.responses.extend( + responses + .into_iter() + .map(|(name, response)| (name.into(), response.into())), + ); + + self + } + + /// Add [`SecurityScheme`] to [`Components`]. + /// + /// Accepts two arguments where first is the name of the [`SecurityScheme`]. This is later when + /// referenced by [`SecurityRequirement`][requirement]s. Second parameter is the [`SecurityScheme`]. + /// + /// [requirement]: ../security/struct.SecurityRequirement.html + pub fn security_scheme, S: Into>( + mut self, + name: N, + security_scheme: S, + ) -> Self { + self.security_schemes + .insert(name.into(), security_scheme.into()); + + self + } + + /// Add openapi extensions (x-something) of the API. + pub fn extensions(mut self, extensions: Option) -> Self { + set_value!(self extensions extensions) + } +} + +/// Is super type for [OpenAPI Schema Object][schemas]. Schema is reusable resource what can be +/// referenced from path operations and other components using [`Ref`]. +/// +/// [schemas]: https://spec.openapis.org/oas/latest.html#schema-object +#[non_exhaustive] +#[derive(Serialize, Deserialize, Clone, PartialEq)] +#[cfg_attr(feature = "debug", derive(Debug))] +#[serde(untagged, rename_all = "camelCase")] +pub enum Schema { + /// Defines array schema from another schema. Typically used with + /// [`Schema::Object`]. Slice and Vec types are translated to [`Schema::Array`] types. + Array(Array), + /// Defines object schema. Object is either `object` holding **properties** which are other [`Schema`]s + /// or can be a field within the [`Object`]. + Object(Object), + /// Creates a _OneOf_ type [composite Object][composite] schema. This schema + /// is used to map multiple schemas together where API endpoint could return any of them. + /// [`Schema::OneOf`] is created form mixed enum where enum contains various variants. + /// + /// [composite]: https://spec.openapis.org/oas/latest.html#components-object + OneOf(OneOf), + + /// Creates a _AllOf_ type [composite Object][composite] schema. + /// + /// [composite]: https://spec.openapis.org/oas/latest.html#components-object + AllOf(AllOf), + + /// Creates a _AnyOf_ type [composite Object][composite] schema. + /// + /// [composite]: https://spec.openapis.org/oas/latest.html#components-object + AnyOf(AnyOf), +} + +impl Default for Schema { + fn default() -> Self { + Schema::Object(Object::default()) + } +} + +/// OpenAPI [Discriminator][discriminator] object which can be optionally used together with +/// [`OneOf`] composite object. +/// +/// [discriminator]: https://spec.openapis.org/oas/latest.html#discriminator-object +#[derive(Serialize, Deserialize, Clone, Default, PartialEq, Eq)] +#[serde(rename_all = "camelCase")] +#[cfg_attr(feature = "debug", derive(Debug))] +pub struct Discriminator { + /// Defines a discriminator property name which must be found within all composite + /// objects. + pub property_name: String, + + /// An object to hold mappings between payload values and schema names or references. + /// This field can only be populated manually. There is no macro support and no + /// validation. + #[serde(skip_serializing_if = "BTreeMap::is_empty", default)] + pub mapping: BTreeMap, + + /// Optional extensions "x-something". + #[serde(skip_serializing_if = "Option::is_none", flatten)] + pub extensions: Option, +} + +impl Discriminator { + /// Construct a new [`Discriminator`] object with property name. + /// + /// # Examples + /// + /// Create a new [`Discriminator`] object for `pet_type` property. + /// ```rust + /// # use fastapi::openapi::schema::Discriminator; + /// let discriminator = Discriminator::new("pet_type"); + /// ``` + pub fn new>(property_name: I) -> Self { + Self { + property_name: property_name.into(), + mapping: BTreeMap::new(), + ..Default::default() + } + } + + /// Construct a new [`Discriminator`] object with property name and mappings. + /// + /// + /// Method accepts two arguments. First _`property_name`_ to use as `discriminator` and + /// _`mapping`_ for custom property name mappings. + /// + /// # Examples + /// + ///_**Construct an ew [`Discriminator`] with custom mapping.**_ + /// + /// ```rust + /// # use fastapi::openapi::schema::Discriminator; + /// let discriminator = Discriminator::with_mapping("pet_type", [ + /// ("cat","#/components/schemas/Cat") + /// ]); + /// ``` + pub fn with_mapping< + P: Into, + M: IntoIterator, + K: Into, + V: Into, + >( + property_name: P, + mapping: M, + ) -> Self { + Self { + property_name: property_name.into(), + mapping: BTreeMap::from_iter( + mapping + .into_iter() + .map(|(key, val)| (key.into(), val.into())), + ), + ..Default::default() + } + } +} + +builder! { + OneOfBuilder; + + /// OneOf [Composite Object][oneof] component holds + /// multiple components together where API endpoint could return any of them. + /// + /// See [`Schema::OneOf`] for more details. + /// + /// [oneof]: https://spec.openapis.org/oas/latest.html#components-object + #[derive(Serialize, Deserialize, Clone, PartialEq)] + #[cfg_attr(feature = "debug", derive(Debug))] + pub struct OneOf { + /// Components of _OneOf_ component. + #[serde(rename = "oneOf")] + pub items: Vec>, + + /// Type of [`OneOf`] e.g. `SchemaType::new(Type::Object)` for `object`. + /// + /// By default this is [`SchemaType::AnyValue`] as the type is defined by items + /// themselves. + #[serde(rename = "type", default = "SchemaType::any", skip_serializing_if = "SchemaType::is_any_value")] + pub schema_type: SchemaType, + + /// Changes the [`OneOf`] title. + #[serde(skip_serializing_if = "Option::is_none")] + pub title: Option, + + /// Description of the [`OneOf`]. Markdown syntax is supported. + #[serde(skip_serializing_if = "Option::is_none")] + pub description: Option, + + /// Default value which is provided when user has not provided the input in Swagger UI. + #[serde(skip_serializing_if = "Option::is_none")] + pub default: Option, + + /// Example shown in UI of the value for richer documentation. + /// + /// **Deprecated since 3.0.x. Prefer [`OneOf::examples`] instead** + #[serde(skip_serializing_if = "Option::is_none")] + pub example: Option, + + /// Examples shown in UI of the value for richer documentation. + #[serde(skip_serializing_if = "Vec::is_empty", default)] + pub examples: Vec, + + /// Optional discriminator field can be used to aid deserialization, serialization and validation of a + /// specific schema. + #[serde(skip_serializing_if = "Option::is_none")] + pub discriminator: Option, + + /// Optional extensions `x-something`. + #[serde(skip_serializing_if = "Option::is_none", flatten)] + pub extensions: Option, + } +} + +impl OneOf { + /// Construct a new [`OneOf`] component. + pub fn new() -> Self { + Self { + ..Default::default() + } + } + + /// Construct a new [`OneOf`] component with given capacity. + /// + /// OneOf component is then able to contain number of components without + /// reallocating. + /// + /// # Examples + /// + /// Create [`OneOf`] component with initial capacity of 5. + /// ```rust + /// # use fastapi::openapi::schema::OneOf; + /// let one_of = OneOf::with_capacity(5); + /// ``` + pub fn with_capacity(capacity: usize) -> Self { + Self { + items: Vec::with_capacity(capacity), + ..Default::default() + } + } +} + +impl Default for OneOf { + fn default() -> Self { + Self { + items: Default::default(), + schema_type: SchemaType::AnyValue, + title: Default::default(), + description: Default::default(), + default: Default::default(), + example: Default::default(), + examples: Default::default(), + discriminator: Default::default(), + extensions: Default::default(), + } + } +} + +impl OneOfBuilder { + /// Adds a given [`Schema`] to [`OneOf`] [Composite Object][composite]. + /// + /// [composite]: https://spec.openapis.org/oas/latest.html#components-object + pub fn item>>(mut self, component: I) -> Self { + self.items.push(component.into()); + + self + } + + /// Add or change type of the object e.g. to change type to _`string`_ + /// use value `SchemaType::Type(Type::String)`. + pub fn schema_type>(mut self, schema_type: T) -> Self { + set_value!(self schema_type schema_type.into()) + } + + /// Add or change the title of the [`OneOf`]. + pub fn title>(mut self, title: Option) -> Self { + set_value!(self title title.map(|title| title.into())) + } + + /// Add or change optional description for `OneOf` component. + pub fn description>(mut self, description: Option) -> Self { + set_value!(self description description.map(|description| description.into())) + } + + /// Add or change default value for the object which is provided when user has not provided the input in Swagger UI. + pub fn default(mut self, default: Option) -> Self { + set_value!(self default default) + } + + /// Add or change example shown in UI of the value for richer documentation. + /// + /// **Deprecated since 3.0.x. Prefer [`OneOfBuilder::examples`] instead** + #[deprecated = "Since OpenAPI 3.1 prefer using `examples`"] + pub fn example(mut self, example: Option) -> Self { + set_value!(self example example) + } + + /// Add or change examples shown in UI of the value for richer documentation. + pub fn examples, V: Into>(mut self, examples: I) -> Self { + set_value!(self examples examples.into_iter().map(Into::into).collect()) + } + + /// Add or change discriminator field of the composite [`OneOf`] type. + pub fn discriminator(mut self, discriminator: Option) -> Self { + set_value!(self discriminator discriminator) + } + + /// Add openapi extensions (`x-something`) for [`OneOf`]. + pub fn extensions(mut self, extensions: Option) -> Self { + set_value!(self extensions extensions) + } + + to_array_builder!(); +} + +impl From for Schema { + fn from(one_of: OneOf) -> Self { + Self::OneOf(one_of) + } +} + +impl From for RefOr { + fn from(one_of: OneOfBuilder) -> Self { + Self::T(Schema::OneOf(one_of.build())) + } +} + +impl From for ArrayItems { + fn from(value: OneOfBuilder) -> Self { + Self::RefOrSchema(Box::new(value.into())) + } +} + +component_from_builder!(OneOfBuilder); + +builder! { + AllOfBuilder; + + /// AllOf [Composite Object][allof] component holds + /// multiple components together where API endpoint will return a combination of all of them. + /// + /// See [`Schema::AllOf`] for more details. + /// + /// [allof]: https://spec.openapis.org/oas/latest.html#components-object + #[derive(Serialize, Deserialize, Clone, PartialEq)] + #[cfg_attr(feature = "debug", derive(Debug))] + pub struct AllOf { + /// Components of _AllOf_ component. + #[serde(rename = "allOf")] + pub items: Vec>, + + /// Type of [`AllOf`] e.g. `SchemaType::new(Type::Object)` for `object`. + /// + /// By default this is [`SchemaType::AnyValue`] as the type is defined by items + /// themselves. + #[serde(rename = "type", default = "SchemaType::any", skip_serializing_if = "SchemaType::is_any_value")] + pub schema_type: SchemaType, + + /// Changes the [`AllOf`] title. + #[serde(skip_serializing_if = "Option::is_none")] + pub title: Option, + + /// Description of the [`AllOf`]. Markdown syntax is supported. + #[serde(skip_serializing_if = "Option::is_none")] + pub description: Option, + + /// Default value which is provided when user has not provided the input in Swagger UI. + #[serde(skip_serializing_if = "Option::is_none")] + pub default: Option, + + /// Example shown in UI of the value for richer documentation. + /// + /// **Deprecated since 3.0.x. Prefer [`AllOf::examples`] instead** + #[serde(skip_serializing_if = "Option::is_none")] + pub example: Option, + + /// Examples shown in UI of the value for richer documentation. + #[serde(skip_serializing_if = "Vec::is_empty", default)] + pub examples: Vec, + + /// Optional discriminator field can be used to aid deserialization, serialization and validation of a + /// specific schema. + #[serde(skip_serializing_if = "Option::is_none")] + pub discriminator: Option, + + /// Optional extensions `x-something`. + #[serde(skip_serializing_if = "Option::is_none", flatten)] + pub extensions: Option, + } +} + +impl AllOf { + /// Construct a new [`AllOf`] component. + pub fn new() -> Self { + Self { + ..Default::default() + } + } + + /// Construct a new [`AllOf`] component with given capacity. + /// + /// AllOf component is then able to contain number of components without + /// reallocating. + /// + /// # Examples + /// + /// Create [`AllOf`] component with initial capacity of 5. + /// ```rust + /// # use fastapi::openapi::schema::AllOf; + /// let one_of = AllOf::with_capacity(5); + /// ``` + pub fn with_capacity(capacity: usize) -> Self { + Self { + items: Vec::with_capacity(capacity), + ..Default::default() + } + } +} + +impl Default for AllOf { + fn default() -> Self { + Self { + items: Default::default(), + schema_type: SchemaType::AnyValue, + title: Default::default(), + description: Default::default(), + default: Default::default(), + example: Default::default(), + examples: Default::default(), + discriminator: Default::default(), + extensions: Default::default(), + } + } +} + +impl AllOfBuilder { + /// Adds a given [`Schema`] to [`AllOf`] [Composite Object][composite]. + /// + /// [composite]: https://spec.openapis.org/oas/latest.html#components-object + pub fn item>>(mut self, component: I) -> Self { + self.items.push(component.into()); + + self + } + + /// Add or change type of the object e.g. to change type to _`string`_ + /// use value `SchemaType::Type(Type::String)`. + pub fn schema_type>(mut self, schema_type: T) -> Self { + set_value!(self schema_type schema_type.into()) + } + + /// Add or change the title of the [`AllOf`]. + pub fn title>(mut self, title: Option) -> Self { + set_value!(self title title.map(|title| title.into())) + } + + /// Add or change optional description for `AllOf` component. + pub fn description>(mut self, description: Option) -> Self { + set_value!(self description description.map(|description| description.into())) + } + + /// Add or change default value for the object which is provided when user has not provided the input in Swagger UI. + pub fn default(mut self, default: Option) -> Self { + set_value!(self default default) + } + + /// Add or change example shown in UI of the value for richer documentation. + /// + /// **Deprecated since 3.0.x. Prefer [`AllOfBuilder::examples`] instead** + #[deprecated = "Since OpenAPI 3.1 prefer using `examples`"] + pub fn example(mut self, example: Option) -> Self { + set_value!(self example example) + } + + /// Add or change examples shown in UI of the value for richer documentation. + pub fn examples, V: Into>(mut self, examples: I) -> Self { + set_value!(self examples examples.into_iter().map(Into::into).collect()) + } + + /// Add or change discriminator field of the composite [`AllOf`] type. + pub fn discriminator(mut self, discriminator: Option) -> Self { + set_value!(self discriminator discriminator) + } + + /// Add openapi extensions (`x-something`) for [`AllOf`]. + pub fn extensions(mut self, extensions: Option) -> Self { + set_value!(self extensions extensions) + } + + to_array_builder!(); +} + +impl From for Schema { + fn from(one_of: AllOf) -> Self { + Self::AllOf(one_of) + } +} + +impl From for RefOr { + fn from(one_of: AllOfBuilder) -> Self { + Self::T(Schema::AllOf(one_of.build())) + } +} + +impl From for ArrayItems { + fn from(value: AllOfBuilder) -> Self { + Self::RefOrSchema(Box::new(value.into())) + } +} + +component_from_builder!(AllOfBuilder); + +builder! { + AnyOfBuilder; + + /// AnyOf [Composite Object][anyof] component holds + /// multiple components together where API endpoint will return a combination of one or more of them. + /// + /// See [`Schema::AnyOf`] for more details. + /// + /// [anyof]: https://spec.openapis.org/oas/latest.html#components-object + #[derive(Serialize, Deserialize, Clone, PartialEq)] + #[cfg_attr(feature = "debug", derive(Debug))] + pub struct AnyOf { + /// Components of _AnyOf component. + #[serde(rename = "anyOf")] + pub items: Vec>, + + /// Type of [`AnyOf`] e.g. `SchemaType::new(Type::Object)` for `object`. + /// + /// By default this is [`SchemaType::AnyValue`] as the type is defined by items + /// themselves. + #[serde(rename = "type", default = "SchemaType::any", skip_serializing_if = "SchemaType::is_any_value")] + pub schema_type: SchemaType, + + /// Description of the [`AnyOf`]. Markdown syntax is supported. + #[serde(skip_serializing_if = "Option::is_none")] + pub description: Option, + + /// Default value which is provided when user has not provided the input in Swagger UI. + #[serde(skip_serializing_if = "Option::is_none")] + pub default: Option, + + /// Example shown in UI of the value for richer documentation. + /// + /// **Deprecated since 3.0.x. Prefer [`AnyOf::examples`] instead** + #[serde(skip_serializing_if = "Option::is_none")] + pub example: Option, + + /// Examples shown in UI of the value for richer documentation. + #[serde(skip_serializing_if = "Vec::is_empty", default)] + pub examples: Vec, + + /// Optional discriminator field can be used to aid deserialization, serialization and validation of a + /// specific schema. + #[serde(skip_serializing_if = "Option::is_none")] + pub discriminator: Option, + + /// Optional extensions `x-something`. + #[serde(skip_serializing_if = "Option::is_none", flatten)] + pub extensions: Option, + } +} + +impl AnyOf { + /// Construct a new [`AnyOf`] component. + pub fn new() -> Self { + Self { + ..Default::default() + } + } + + /// Construct a new [`AnyOf`] component with given capacity. + /// + /// AnyOf component is then able to contain number of components without + /// reallocating. + /// + /// # Examples + /// + /// Create [`AnyOf`] component with initial capacity of 5. + /// ```rust + /// # use fastapi::openapi::schema::AnyOf; + /// let one_of = AnyOf::with_capacity(5); + /// ``` + pub fn with_capacity(capacity: usize) -> Self { + Self { + items: Vec::with_capacity(capacity), + ..Default::default() + } + } +} + +impl Default for AnyOf { + fn default() -> Self { + Self { + items: Default::default(), + schema_type: SchemaType::AnyValue, + description: Default::default(), + default: Default::default(), + example: Default::default(), + examples: Default::default(), + discriminator: Default::default(), + extensions: Default::default(), + } + } +} + +impl AnyOfBuilder { + /// Adds a given [`Schema`] to [`AnyOf`] [Composite Object][composite]. + /// + /// [composite]: https://spec.openapis.org/oas/latest.html#components-object + pub fn item>>(mut self, component: I) -> Self { + self.items.push(component.into()); + + self + } + + /// Add or change type of the object e.g. to change type to _`string`_ + /// use value `SchemaType::Type(Type::String)`. + pub fn schema_type>(mut self, schema_type: T) -> Self { + set_value!(self schema_type schema_type.into()) + } + + /// Add or change optional description for `AnyOf` component. + pub fn description>(mut self, description: Option) -> Self { + set_value!(self description description.map(|description| description.into())) + } + + /// Add or change default value for the object which is provided when user has not provided the input in Swagger UI. + pub fn default(mut self, default: Option) -> Self { + set_value!(self default default) + } + + /// Add or change example shown in UI of the value for richer documentation. + /// + /// **Deprecated since 3.0.x. Prefer [`AllOfBuilder::examples`] instead** + #[deprecated = "Since OpenAPI 3.1 prefer using `examples`"] + pub fn example(mut self, example: Option) -> Self { + set_value!(self example example) + } + + /// Add or change examples shown in UI of the value for richer documentation. + pub fn examples, V: Into>(mut self, examples: I) -> Self { + set_value!(self examples examples.into_iter().map(Into::into).collect()) + } + + /// Add or change discriminator field of the composite [`AnyOf`] type. + pub fn discriminator(mut self, discriminator: Option) -> Self { + set_value!(self discriminator discriminator) + } + + /// Add openapi extensions (`x-something`) for [`AnyOf`]. + pub fn extensions(mut self, extensions: Option) -> Self { + set_value!(self extensions extensions) + } + + to_array_builder!(); +} + +impl From for Schema { + fn from(any_of: AnyOf) -> Self { + Self::AnyOf(any_of) + } +} + +impl From for RefOr { + fn from(any_of: AnyOfBuilder) -> Self { + Self::T(Schema::AnyOf(any_of.build())) + } +} + +impl From for ArrayItems { + fn from(value: AnyOfBuilder) -> Self { + Self::RefOrSchema(Box::new(value.into())) + } +} + +component_from_builder!(AnyOfBuilder); + +#[cfg(not(feature = "preserve_order"))] +type ObjectPropertiesMap = BTreeMap; +#[cfg(feature = "preserve_order")] +type ObjectPropertiesMap = indexmap::IndexMap; + +builder! { + ObjectBuilder; + + /// Implements subset of [OpenAPI Schema Object][schema] which allows + /// adding other [`Schema`]s as **properties** to this [`Schema`]. + /// + /// This is a generic OpenAPI schema object which can used to present `object`, `field` or an `enum`. + /// + /// [schema]: https://spec.openapis.org/oas/latest.html#schema-object + #[non_exhaustive] + #[derive(Serialize, Deserialize, Default, Clone, PartialEq)] + #[cfg_attr(feature = "debug", derive(Debug))] + #[serde(rename_all = "camelCase")] + pub struct Object { + /// Type of [`Object`] e.g. [`Type::Object`] for `object` and [`Type::String`] for + /// `string` types. + #[serde(rename = "type", skip_serializing_if="SchemaType::is_any_value")] + pub schema_type: SchemaType, + + /// Changes the [`Object`] title. + #[serde(skip_serializing_if = "Option::is_none")] + pub title: Option, + + /// Additional format for detailing the schema type. + #[serde(skip_serializing_if = "Option::is_none")] + pub format: Option, + + /// Description of the [`Object`]. Markdown syntax is supported. + #[serde(skip_serializing_if = "Option::is_none")] + pub description: Option, + + /// Default value which is provided when user has not provided the input in Swagger UI. + #[serde(skip_serializing_if = "Option::is_none")] + pub default: Option, + + /// Enum variants of fields that can be represented as `unit` type `enums`. + #[serde(rename = "enum", skip_serializing_if = "Option::is_none")] + pub enum_values: Option>, + + /// Vector of required field names. + #[serde(skip_serializing_if = "Vec::is_empty", default = "Vec::new")] + pub required: Vec, + + /// Map of fields with their [`Schema`] types. + /// + /// With **preserve_order** feature flag [`indexmap::IndexMap`] will be used as + /// properties map backing implementation to retain property order of [`ToSchema`][to_schema]. + /// By default [`BTreeMap`] will be used. + /// + /// [to_schema]: crate::ToSchema + #[serde(skip_serializing_if = "ObjectPropertiesMap::is_empty", default = "ObjectPropertiesMap::new")] + pub properties: ObjectPropertiesMap>, + + /// Additional [`Schema`] for non specified fields (Useful for typed maps). + #[serde(skip_serializing_if = "Option::is_none")] + pub additional_properties: Option>>, + + /// Additional [`Schema`] to describe property names of an object such as a map. See more + /// details + #[serde(skip_serializing_if = "Option::is_none")] + pub property_names: Option>, + + /// Changes the [`Object`] deprecated status. + #[serde(skip_serializing_if = "Option::is_none")] + pub deprecated: Option, + + /// Example shown in UI of the value for richer documentation. + /// + /// **Deprecated since 3.0.x. Prefer [`Object::examples`] instead** + #[serde(skip_serializing_if = "Option::is_none")] + pub example: Option, + + /// Examples shown in UI of the value for richer documentation. + #[serde(skip_serializing_if = "Vec::is_empty", default)] + pub examples: Vec, + + /// Write only property will be only sent in _write_ requests like _POST, PUT_. + #[serde(skip_serializing_if = "Option::is_none")] + pub write_only: Option, + + /// Read only property will be only sent in _read_ requests like _GET_. + #[serde(skip_serializing_if = "Option::is_none")] + pub read_only: Option, + + /// Additional [`Xml`] formatting of the [`Object`]. + #[serde(skip_serializing_if = "Option::is_none")] + pub xml: Option, + + /// Must be a number strictly greater than `0`. Numeric value is considered valid if value + /// divided by the _`multiple_of`_ value results an integer. + #[serde(skip_serializing_if = "Option::is_none", serialize_with = "omit_decimal_zero")] + pub multiple_of: Option, + + /// Specify inclusive upper limit for the [`Object`]'s value. Number is considered valid if + /// it is equal or less than the _`maximum`_. + #[serde(skip_serializing_if = "Option::is_none", serialize_with = "omit_decimal_zero")] + pub maximum: Option, + + /// Specify inclusive lower limit for the [`Object`]'s value. Number value is considered + /// valid if it is equal or greater than the _`minimum`_. + #[serde(skip_serializing_if = "Option::is_none", serialize_with = "omit_decimal_zero")] + pub minimum: Option, + + /// Specify exclusive upper limit for the [`Object`]'s value. Number value is considered + /// valid if it is strictly less than _`exclusive_maximum`_. + #[serde(skip_serializing_if = "Option::is_none", serialize_with = "omit_decimal_zero")] + pub exclusive_maximum: Option, + + /// Specify exclusive lower limit for the [`Object`]'s value. Number value is considered + /// valid if it is strictly above the _`exclusive_minimum`_. + #[serde(skip_serializing_if = "Option::is_none", serialize_with = "omit_decimal_zero")] + pub exclusive_minimum: Option, + + /// Specify maximum length for `string` values. _`max_length`_ cannot be a negative integer + /// value. Value is considered valid if content length is equal or less than the _`max_length`_. + #[serde(skip_serializing_if = "Option::is_none")] + pub max_length: Option, + + /// Specify minimum length for `string` values. _`min_length`_ cannot be a negative integer + /// value. Setting this to _`0`_ has the same effect as omitting this field. Value is + /// considered valid if content length is equal or more than the _`min_length`_. + #[serde(skip_serializing_if = "Option::is_none")] + pub min_length: Option, + + /// Define a valid `ECMA-262` dialect regular expression. The `string` content is + /// considered valid if the _`pattern`_ matches the value successfully. + #[serde(skip_serializing_if = "Option::is_none")] + pub pattern: Option, + + /// Specify inclusive maximum amount of properties an [`Object`] can hold. + #[serde(skip_serializing_if = "Option::is_none")] + pub max_properties: Option, + + /// Specify inclusive minimum amount of properties an [`Object`] can hold. Setting this to + /// `0` will have same effect as omitting the attribute. + #[serde(skip_serializing_if = "Option::is_none")] + pub min_properties: Option, + + /// Optional extensions `x-something`. + #[serde(skip_serializing_if = "Option::is_none", flatten)] + pub extensions: Option, + + /// The `content_encoding` keyword specifies the encoding used to store the contents, as specified in + /// [RFC 2054, part 6.1](https://tools.ietf.org/html/rfc2045) and [RFC 4648](RFC 2054, part 6.1). + /// + /// Typically this is either unset for _`string`_ content types which then uses the content + /// encoding of the underlying JSON document. If the content is in _`binary`_ format such as an image or an audio + /// set it to `base64` to encode it as _`Base64`_. + /// + /// See more details at + #[serde(skip_serializing_if = "String::is_empty", default)] + pub content_encoding: String, + + /// The _`content_media_type`_ keyword specifies the MIME type of the contents of a string, + /// as described in [RFC 2046](https://tools.ietf.org/html/rfc2046). + /// + /// See more details at + #[serde(skip_serializing_if = "String::is_empty", default)] + pub content_media_type: String, + } +} + +fn is_false(value: &bool) -> bool { + !*value +} + +impl Object { + /// Initialize a new [`Object`] with default [`SchemaType`]. This effectively same as calling + /// `Object::with_type(SchemaType::Object)`. + pub fn new() -> Self { + Self { + ..Default::default() + } + } + + /// Initialize new [`Object`] with given [`SchemaType`]. + /// + /// Create [`std::string`] object type which can be used to define `string` field of an object. + /// ```rust + /// # use fastapi::openapi::schema::{Object, Type}; + /// let object = Object::with_type(Type::String); + /// ``` + pub fn with_type>(schema_type: T) -> Self { + Self { + schema_type: schema_type.into(), + ..Default::default() + } + } +} + +impl From for Schema { + fn from(s: Object) -> Self { + Self::Object(s) + } +} + +impl From for ArrayItems { + fn from(value: Object) -> Self { + Self::RefOrSchema(Box::new(value.into())) + } +} + +impl ToArray for Object {} + +impl ObjectBuilder { + /// Add or change type of the object e.g. to change type to _`string`_ + /// use value `SchemaType::Type(Type::String)`. + pub fn schema_type>(mut self, schema_type: T) -> Self { + set_value!(self schema_type schema_type.into()) + } + + /// Add or change additional format for detailing the schema type. + pub fn format(mut self, format: Option) -> Self { + set_value!(self format format) + } + + /// Add new property to the [`Object`]. + /// + /// Method accepts property name and property component as an arguments. + pub fn property, I: Into>>( + mut self, + property_name: S, + component: I, + ) -> Self { + self.properties + .insert(property_name.into(), component.into()); + + self + } + + /// Add additional [`Schema`] for non specified fields (Useful for typed maps). + pub fn additional_properties>>( + mut self, + additional_properties: Option, + ) -> Self { + set_value!(self additional_properties additional_properties.map(|additional_properties| Box::new(additional_properties.into()))) + } + + /// Add additional [`Schema`] to describe property names of an object such as a map. See more + /// details + pub fn property_names>(mut self, property_name: Option) -> Self { + set_value!(self property_names property_name.map(|property_name| Box::new(property_name.into()))) + } + + /// Add field to the required fields of [`Object`]. + pub fn required>(mut self, required_field: I) -> Self { + self.required.push(required_field.into()); + + self + } + + /// Add or change the title of the [`Object`]. + pub fn title>(mut self, title: Option) -> Self { + set_value!(self title title.map(|title| title.into())) + } + + /// Add or change description of the property. Markdown syntax is supported. + pub fn description>(mut self, description: Option) -> Self { + set_value!(self description description.map(|description| description.into())) + } + + /// Add or change default value for the object which is provided when user has not provided the input in Swagger UI. + pub fn default(mut self, default: Option) -> Self { + set_value!(self default default) + } + + /// Add or change deprecated status for [`Object`]. + pub fn deprecated(mut self, deprecated: Option) -> Self { + set_value!(self deprecated deprecated) + } + + /// Add or change enum property variants. + pub fn enum_values, E: Into>( + mut self, + enum_values: Option, + ) -> Self { + set_value!(self enum_values + enum_values.map(|values| values.into_iter().map(|enum_value| enum_value.into()).collect())) + } + + /// Add or change example shown in UI of the value for richer documentation. + /// + /// **Deprecated since 3.0.x. Prefer [`Object::examples`] instead** + #[deprecated = "Since OpenAPI 3.1 prefer using `examples`"] + pub fn example(mut self, example: Option) -> Self { + set_value!(self example example) + } + + /// Add or change examples shown in UI of the value for richer documentation. + pub fn examples, V: Into>(mut self, examples: I) -> Self { + set_value!(self examples examples.into_iter().map(Into::into).collect()) + } + + /// Add or change write only flag for [`Object`]. + pub fn write_only(mut self, write_only: Option) -> Self { + set_value!(self write_only write_only) + } + + /// Add or change read only flag for [`Object`]. + pub fn read_only(mut self, read_only: Option) -> Self { + set_value!(self read_only read_only) + } + + /// Add or change additional [`Xml`] formatting of the [`Object`]. + pub fn xml(mut self, xml: Option) -> Self { + set_value!(self xml xml) + } + + /// Set or change _`multiple_of`_ validation flag for `number` and `integer` type values. + pub fn multiple_of>(mut self, multiple_of: Option) -> Self { + set_value!(self multiple_of multiple_of.map(|multiple_of| multiple_of.into())) + } + + /// Set or change inclusive maximum value for `number` and `integer` values. + pub fn maximum>(mut self, maximum: Option) -> Self { + set_value!(self maximum maximum.map(|max| max.into())) + } + + /// Set or change inclusive minimum value for `number` and `integer` values. + pub fn minimum>(mut self, minimum: Option) -> Self { + set_value!(self minimum minimum.map(|min| min.into())) + } + + /// Set or change exclusive maximum value for `number` and `integer` values. + pub fn exclusive_maximum>( + mut self, + exclusive_maximum: Option, + ) -> Self { + set_value!(self exclusive_maximum exclusive_maximum.map(|exclusive_maximum| exclusive_maximum.into())) + } + + /// Set or change exclusive minimum value for `number` and `integer` values. + pub fn exclusive_minimum>( + mut self, + exclusive_minimum: Option, + ) -> Self { + set_value!(self exclusive_minimum exclusive_minimum.map(|exclusive_minimum| exclusive_minimum.into())) + } + + /// Set or change maximum length for `string` values. + pub fn max_length(mut self, max_length: Option) -> Self { + set_value!(self max_length max_length) + } + + /// Set or change minimum length for `string` values. + pub fn min_length(mut self, min_length: Option) -> Self { + set_value!(self min_length min_length) + } + + /// Set or change a valid regular expression for `string` value to match. + pub fn pattern>(mut self, pattern: Option) -> Self { + set_value!(self pattern pattern.map(|pattern| pattern.into())) + } + + /// Set or change maximum number of properties the [`Object`] can hold. + pub fn max_properties(mut self, max_properties: Option) -> Self { + set_value!(self max_properties max_properties) + } + + /// Set or change minimum number of properties the [`Object`] can hold. + pub fn min_properties(mut self, min_properties: Option) -> Self { + set_value!(self min_properties min_properties) + } + + /// Add openapi extensions (`x-something`) for [`Object`]. + pub fn extensions(mut self, extensions: Option) -> Self { + set_value!(self extensions extensions) + } + + /// Set of change [`Object::content_encoding`]. Typically left empty but could be `base64` for + /// example. + pub fn content_encoding>(mut self, content_encoding: S) -> Self { + set_value!(self content_encoding content_encoding.into()) + } + + /// Set of change [`Object::content_media_type`]. Value must be valid MIME type e.g. + /// `application/json`. + pub fn content_media_type>(mut self, content_media_type: S) -> Self { + set_value!(self content_media_type content_media_type.into()) + } + + to_array_builder!(); +} + +component_from_builder!(ObjectBuilder); + +impl From for RefOr { + fn from(builder: ObjectBuilder) -> Self { + Self::T(Schema::Object(builder.build())) + } +} + +impl From> for Schema { + fn from(value: RefOr) -> Self { + match value { + RefOr::Ref(_) => { + panic!("Invalid type `RefOr::Ref` provided, cannot convert to RefOr::T") + } + RefOr::T(value) => value, + } + } +} + +impl From for ArrayItems { + fn from(value: ObjectBuilder) -> Self { + Self::RefOrSchema(Box::new(value.into())) + } +} + +/// AdditionalProperties is used to define values of map fields of the [`Schema`]. +/// +/// The value can either be [`RefOr`] or _`bool`_. +#[derive(Serialize, Deserialize, Clone, PartialEq, Eq)] +#[cfg_attr(feature = "debug", derive(Debug))] +#[serde(untagged)] +pub enum AdditionalProperties { + /// Use when value type of the map is a known [`Schema`] or [`Ref`] to the [`Schema`]. + RefOr(RefOr), + /// Use _`AdditionalProperties::FreeForm(true)`_ when any value is allowed in the map. + FreeForm(bool), +} + +impl From> for AdditionalProperties { + fn from(value: RefOr) -> Self { + Self::RefOr(value) + } +} + +impl From for AdditionalProperties { + fn from(value: ObjectBuilder) -> Self { + Self::RefOr(RefOr::T(Schema::Object(value.build()))) + } +} + +impl From for AdditionalProperties { + fn from(value: ArrayBuilder) -> Self { + Self::RefOr(RefOr::T(Schema::Array(value.build()))) + } +} + +impl From for AdditionalProperties { + fn from(value: Ref) -> Self { + Self::RefOr(RefOr::Ref(value)) + } +} + +impl From for AdditionalProperties { + fn from(value: RefBuilder) -> Self { + Self::RefOr(RefOr::Ref(value.build())) + } +} + +impl From for AdditionalProperties { + fn from(value: Schema) -> Self { + Self::RefOr(RefOr::T(value)) + } +} + +impl From for AdditionalProperties { + fn from(value: AllOfBuilder) -> Self { + Self::RefOr(RefOr::T(Schema::AllOf(value.build()))) + } +} + +builder! { + RefBuilder; + + /// Implements [OpenAPI Reference Object][reference] that can be used to reference + /// reusable components such as [`Schema`]s or [`Response`]s. + /// + /// [reference]: https://spec.openapis.org/oas/latest.html#reference-object + #[non_exhaustive] + #[derive(Serialize, Deserialize, Default, Clone, PartialEq, Eq)] + #[cfg_attr(feature = "debug", derive(Debug))] + pub struct Ref { + /// Reference location of the actual component. + #[serde(rename = "$ref")] + pub ref_location: String, + + /// A description which by default should override that of the referenced component. + /// Description supports markdown syntax. If referenced object type does not support + /// description this field does not have effect. + #[serde(skip_serializing_if = "String::is_empty", default)] + pub description: String, + + /// A short summary which by default should override that of the referenced component. If + /// referenced component does not support summary field this does not have effect. + #[serde(skip_serializing_if = "String::is_empty", default)] + pub summary: String, + } +} + +impl Ref { + /// Construct a new [`Ref`] with custom ref location. In most cases this is not necessary + /// and [`Ref::from_schema_name`] could be used instead. + pub fn new>(ref_location: I) -> Self { + Self { + ref_location: ref_location.into(), + ..Default::default() + } + } + + /// Construct a new [`Ref`] from provided schema name. This will create a [`Ref`] that + /// references the the reusable schemas. + pub fn from_schema_name>(schema_name: I) -> Self { + Self::new(format!("#/components/schemas/{}", schema_name.into())) + } + + /// Construct a new [`Ref`] from provided response name. This will create a [`Ref`] that + /// references the reusable response. + pub fn from_response_name>(response_name: I) -> Self { + Self::new(format!("#/components/responses/{}", response_name.into())) + } + + to_array_builder!(); +} + +impl RefBuilder { + /// Add or change reference location of the actual component. + pub fn ref_location(mut self, ref_location: String) -> Self { + set_value!(self ref_location ref_location) + } + + /// Add or change reference location of the actual component automatically formatting the $ref + /// to `#/components/schemas/...` format. + pub fn ref_location_from_schema_name>(mut self, schema_name: S) -> Self { + set_value!(self ref_location format!("#/components/schemas/{}", schema_name.into())) + } + + // TODO: REMOVE THE unnecessary description Option wrapping. + + /// Add or change description which by default should override that of the referenced component. + /// Description supports markdown syntax. If referenced object type does not support + /// description this field does not have effect. + pub fn description>(mut self, description: Option) -> Self { + set_value!(self description description.map(Into::into).unwrap_or_default()) + } + + /// Add or change short summary which by default should override that of the referenced component. If + /// referenced component does not support summary field this does not have effect. + pub fn summary>(mut self, summary: S) -> Self { + set_value!(self summary summary.into()) + } +} + +impl From for RefOr { + fn from(builder: RefBuilder) -> Self { + Self::Ref(builder.build()) + } +} + +impl From for ArrayItems { + fn from(value: RefBuilder) -> Self { + Self::RefOrSchema(Box::new(value.into())) + } +} + +impl From for RefOr { + fn from(r: Ref) -> Self { + Self::Ref(r) + } +} + +impl From for ArrayItems { + fn from(value: Ref) -> Self { + Self::RefOrSchema(Box::new(value.into())) + } +} + +impl From for RefOr { + fn from(t: T) -> Self { + Self::T(t) + } +} + +impl Default for RefOr { + fn default() -> Self { + Self::T(Schema::Object(Object::new())) + } +} + +impl ToArray for RefOr {} + +impl From for RefOr { + fn from(object: Object) -> Self { + Self::T(Schema::Object(object)) + } +} + +impl From for RefOr { + fn from(array: Array) -> Self { + Self::T(Schema::Array(array)) + } +} + +fn omit_decimal_zero( + maybe_value: &Option, + serializer: S, +) -> Result +where + S: serde::Serializer, +{ + match maybe_value { + Some(crate::fastapi::Number::Float(float)) => { + if float.fract() == 0.0 && *float >= i64::MIN as f64 && *float <= i64::MAX as f64 { + serializer.serialize_i64(float.trunc() as i64) + } else { + serializer.serialize_f64(*float) + } + } + Some(crate::fastapi::Number::Int(int)) => serializer.serialize_i64(*int as i64), + Some(crate::fastapi::Number::UInt(uint)) => serializer.serialize_u64(*uint as u64), + None => serializer.serialize_none(), + } +} + +/// Represents [`Array`] items in [JSON Schema Array][json_schema_array]. +/// +/// [json_schema_array]: +#[derive(Serialize, Deserialize, Clone, PartialEq)] +#[cfg_attr(feature = "debug", derive(Debug))] +#[serde(untagged)] +pub enum ArrayItems { + /// Defines [`Array::items`] as [`RefOr::T(Schema)`]. This is the default for [`Array`]. + RefOrSchema(Box>), + /// Defines [`Array::items`] as `false` indicating that no extra items are allowed to the + /// [`Array`]. This can be used together with [`Array::prefix_items`] to disallow [additional + /// items][additional_items] in [`Array`]. + /// + /// [additional_items]: + #[serde(with = "array_items_false")] + False, +} + +mod array_items_false { + use serde::de::Visitor; + + pub fn serialize(serializer: S) -> Result { + serializer.serialize_bool(false) + } + + pub fn deserialize<'de, D: serde::Deserializer<'de>>(deserializer: D) -> Result<(), D::Error> { + struct ItemsFalseVisitor; + + impl<'de> Visitor<'de> for ItemsFalseVisitor { + type Value = (); + fn visit_bool(self, v: bool) -> Result + where + E: serde::de::Error, + { + if !v { + Ok(()) + } else { + Err(serde::de::Error::custom(format!( + "invalid boolean value: {v}, expected false" + ))) + } + } + + fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result { + formatter.write_str("expected boolean false") + } + } + + deserializer.deserialize_bool(ItemsFalseVisitor) + } +} + +impl Default for ArrayItems { + fn default() -> Self { + Self::RefOrSchema(Box::new(Object::with_type(SchemaType::AnyValue).into())) + } +} + +impl From> for ArrayItems { + fn from(value: RefOr) -> Self { + Self::RefOrSchema(Box::new(value)) + } +} + +builder! { + ArrayBuilder; + + /// Array represents [`Vec`] or [`slice`] type of items. + /// + /// See [`Schema::Array`] for more details. + #[non_exhaustive] + #[derive(Serialize, Deserialize, Clone, PartialEq)] + #[cfg_attr(feature = "debug", derive(Debug))] + #[serde(rename_all = "camelCase")] + pub struct Array { + /// Type will always be [`SchemaType::Array`]. + #[serde(rename = "type")] + pub schema_type: SchemaType, + + /// Changes the [`Array`] title. + #[serde(skip_serializing_if = "Option::is_none")] + pub title: Option, + + /// Items of the [`Array`]. + pub items: ArrayItems, + + /// Prefix items of [`Array`] is used to define item validation of tuples according [JSON schema + /// item validation][item_validation]. + /// + /// [item_validation]: + #[serde(skip_serializing_if = "Vec::is_empty", default)] + pub prefix_items: Vec, + + /// Description of the [`Array`]. Markdown syntax is supported. + #[serde(skip_serializing_if = "Option::is_none")] + pub description: Option, + + /// Marks the [`Array`] deprecated. + #[serde(skip_serializing_if = "Option::is_none")] + pub deprecated: Option, + + /// Example shown in UI of the value for richer documentation. + /// + /// **Deprecated since 3.0.x. Prefer [`Array::examples`] instead** + #[serde(skip_serializing_if = "Option::is_none")] + pub example: Option, + + /// Examples shown in UI of the value for richer documentation. + #[serde(skip_serializing_if = "Vec::is_empty", default)] + pub examples: Vec, + + /// Default value which is provided when user has not provided the input in Swagger UI. + #[serde(skip_serializing_if = "Option::is_none")] + pub default: Option, + + /// Max length of the array. + #[serde(skip_serializing_if = "Option::is_none")] + pub max_items: Option, + + /// Min length of the array. + #[serde(skip_serializing_if = "Option::is_none")] + pub min_items: Option, + + /// Setting this to `true` will validate successfully if all elements of this [`Array`] are + /// unique. + #[serde(default, skip_serializing_if = "is_false")] + pub unique_items: bool, + + /// Xml format of the array. + #[serde(skip_serializing_if = "Option::is_none")] + pub xml: Option, + + /// The `content_encoding` keyword specifies the encoding used to store the contents, as specified in + /// [RFC 2054, part 6.1](https://tools.ietf.org/html/rfc2045) and [RFC 4648](RFC 2054, part 6.1). + /// + /// Typically this is either unset for _`string`_ content types which then uses the content + /// encoding of the underlying JSON document. If the content is in _`binary`_ format such as an image or an audio + /// set it to `base64` to encode it as _`Base64`_. + /// + /// See more details at + #[serde(skip_serializing_if = "String::is_empty", default)] + pub content_encoding: String, + + /// The _`content_media_type`_ keyword specifies the MIME type of the contents of a string, + /// as described in [RFC 2046](https://tools.ietf.org/html/rfc2046). + /// + /// See more details at + #[serde(skip_serializing_if = "String::is_empty", default)] + pub content_media_type: String, + + /// Optional extensions `x-something`. + #[serde(skip_serializing_if = "Option::is_none", flatten)] + pub extensions: Option, + } +} + +impl Default for Array { + fn default() -> Self { + Self { + title: Default::default(), + schema_type: Type::Array.into(), + unique_items: bool::default(), + items: Default::default(), + prefix_items: Vec::default(), + description: Default::default(), + deprecated: Default::default(), + example: Default::default(), + examples: Default::default(), + default: Default::default(), + max_items: Default::default(), + min_items: Default::default(), + xml: Default::default(), + extensions: Default::default(), + content_encoding: Default::default(), + content_media_type: Default::default(), + } + } +} + +impl Array { + /// Construct a new [`Array`] component from given [`Schema`]. + /// + /// # Examples + /// + /// _**Create a `String` array component**_. + /// ```rust + /// # use fastapi::openapi::schema::{Schema, Array, Type, Object}; + /// let string_array = Array::new(Object::with_type(Type::String)); + /// ``` + pub fn new>>(component: I) -> Self { + Self { + items: ArrayItems::RefOrSchema(Box::new(component.into())), + ..Default::default() + } + } + + /// Construct a new nullable [`Array`] component from given [`Schema`]. + /// + /// # Examples + /// + /// _**Create a nullable `String` array component**_. + /// ```rust + /// # use fastapi::openapi::schema::{Schema, Array, Type, Object}; + /// let string_array = Array::new_nullable(Object::with_type(Type::String)); + /// ``` + pub fn new_nullable>>(component: I) -> Self { + Self { + items: ArrayItems::RefOrSchema(Box::new(component.into())), + schema_type: SchemaType::from_iter([Type::Array, Type::Null]), + ..Default::default() + } + } +} + +impl ArrayBuilder { + /// Set [`Schema`] type for the [`Array`]. + pub fn items>(mut self, items: I) -> Self { + set_value!(self items items.into()) + } + + /// Add prefix items of [`Array`] to define item validation of tuples according [JSON schema + /// item validation][item_validation]. + /// + /// [item_validation]: + pub fn prefix_items, S: Into>(mut self, items: I) -> Self { + self.prefix_items = items + .into_iter() + .map(|item| item.into()) + .collect::>(); + + self + } + + /// Change type of the array e.g. to change type to _`string`_ + /// use value `SchemaType::Type(Type::String)`. + /// + /// # Examples + /// + /// _**Make nullable string array.**_ + /// ```rust + /// # use fastapi::openapi::schema::{ArrayBuilder, SchemaType, Type, Object}; + /// let _ = ArrayBuilder::new() + /// .schema_type(SchemaType::from_iter([Type::Array, Type::Null])) + /// .items(Object::with_type(Type::String)) + /// .build(); + /// ``` + pub fn schema_type>(mut self, schema_type: T) -> Self { + set_value!(self schema_type schema_type.into()) + } + + /// Add or change the title of the [`Array`]. + pub fn title>(mut self, title: Option) -> Self { + set_value!(self title title.map(|title| title.into())) + } + + /// Add or change description of the property. Markdown syntax is supported. + pub fn description>(mut self, description: Option) -> Self { + set_value!(self description description.map(|description| description.into())) + } + + /// Add or change deprecated status for [`Array`]. + pub fn deprecated(mut self, deprecated: Option) -> Self { + set_value!(self deprecated deprecated) + } + + /// Add or change example shown in UI of the value for richer documentation. + /// + /// **Deprecated since 3.0.x. Prefer [`Array::examples`] instead** + #[deprecated = "Since OpenAPI 3.1 prefer using `examples`"] + pub fn example(mut self, example: Option) -> Self { + set_value!(self example example) + } + + /// Add or change examples shown in UI of the value for richer documentation. + pub fn examples, V: Into>(mut self, examples: I) -> Self { + set_value!(self examples examples.into_iter().map(Into::into).collect()) + } + + /// Add or change default value for the object which is provided when user has not provided the input in Swagger UI. + pub fn default(mut self, default: Option) -> Self { + set_value!(self default default) + } + + /// Set maximum allowed length for [`Array`]. + pub fn max_items(mut self, max_items: Option) -> Self { + set_value!(self max_items max_items) + } + + /// Set minimum allowed length for [`Array`]. + pub fn min_items(mut self, min_items: Option) -> Self { + set_value!(self min_items min_items) + } + + /// Set or change whether [`Array`] should enforce all items to be unique. + pub fn unique_items(mut self, unique_items: bool) -> Self { + set_value!(self unique_items unique_items) + } + + /// Set [`Xml`] formatting for [`Array`]. + pub fn xml(mut self, xml: Option) -> Self { + set_value!(self xml xml) + } + + /// Set of change [`Object::content_encoding`]. Typically left empty but could be `base64` for + /// example. + pub fn content_encoding>(mut self, content_encoding: S) -> Self { + set_value!(self content_encoding content_encoding.into()) + } + + /// Set of change [`Object::content_media_type`]. Value must be valid MIME type e.g. + /// `application/json`. + pub fn content_media_type>(mut self, content_media_type: S) -> Self { + set_value!(self content_media_type content_media_type.into()) + } + + /// Add openapi extensions (`x-something`) for [`Array`]. + pub fn extensions(mut self, extensions: Option) -> Self { + set_value!(self extensions extensions) + } + + to_array_builder!(); +} + +component_from_builder!(ArrayBuilder); + +impl From for Schema { + fn from(array: Array) -> Self { + Self::Array(array) + } +} + +impl From for ArrayItems { + fn from(value: ArrayBuilder) -> Self { + Self::RefOrSchema(Box::new(value.into())) + } +} + +impl From for RefOr { + fn from(array: ArrayBuilder) -> Self { + Self::T(Schema::Array(array.build())) + } +} + +impl ToArray for Array {} + +/// This convenience trait allows quick way to wrap any `RefOr` with [`Array`] schema. +pub trait ToArray +where + RefOr: From, + Self: Sized, +{ + /// Wrap this `RefOr` with [`Array`]. + fn to_array(self) -> Array { + Array::new(self) + } +} + +/// Represents type of [`Schema`]. +/// +/// This is a collection type for [`Type`] that can be represented as a single value +/// or as [`slice`] of [`Type`]s. +#[derive(Serialize, Deserialize, Clone, PartialEq, Eq)] +#[cfg_attr(feature = "debug", derive(Debug))] +#[serde(untagged)] +pub enum SchemaType { + /// Single type known from OpenAPI spec 3.0 + Type(Type), + /// Multiple types rendered as [`slice`] + Array(Vec), + /// Type that is considered typeless. _`AnyValue`_ will omit the type definition from the schema + /// making it to accept any type possible. + AnyValue, +} + +impl Default for SchemaType { + fn default() -> Self { + Self::Type(Type::default()) + } +} + +impl From for SchemaType { + fn from(value: Type) -> Self { + SchemaType::new(value) + } +} + +impl FromIterator for SchemaType { + fn from_iter>(iter: T) -> Self { + Self::Array(iter.into_iter().collect()) + } +} + +impl SchemaType { + /// Instantiate new [`SchemaType`] of given [`Type`] + /// + /// Method accepts one argument `type` to create [`SchemaType`] for. + /// + /// # Examples + /// + /// _**Create string [`SchemaType`]**_ + /// ```rust + /// # use fastapi::openapi::schema::{SchemaType, Type}; + /// let ty = SchemaType::new(Type::String); + /// ``` + pub fn new(r#type: Type) -> Self { + Self::Type(r#type) + } + + //// Instantiate new [`SchemaType::AnyValue`]. + /// + /// This is same as calling [`SchemaType::AnyValue`] but in a function form `() -> SchemaType` + /// allowing it to be used as argument for _serde's_ _`default = "..."`_. + pub fn any() -> Self { + SchemaType::AnyValue + } + + /// Check whether this [`SchemaType`] is any value _(typeless)_ returning true on any value + /// schema type. + pub fn is_any_value(&self) -> bool { + matches!(self, Self::AnyValue) + } +} + +/// Represents data type fragment of [`Schema`]. +/// +/// [`Type`] is used to create a [`SchemaType`] that defines the type of the [`Schema`]. +/// [`SchemaType`] can be created from a single [`Type`] or multiple [`Type`]s according to the +/// OpenAPI 3.1 spec. Since the OpenAPI 3.1 is fully compatible with JSON schema the definition of +/// the _**type**_ property comes from [JSON Schema type](https://json-schema.org/understanding-json-schema/reference/type). +/// +/// # Examples +/// _**Create nullable string [`SchemaType`]**_ +/// ```rust +/// # use std::iter::FromIterator; +/// # use fastapi::openapi::schema::{Type, SchemaType}; +/// let _: SchemaType = [Type::String, Type::Null].into_iter().collect(); +/// ``` +/// _**Create string [`SchemaType`]**_ +/// ```rust +/// # use fastapi::openapi::schema::{Type, SchemaType}; +/// let _ = SchemaType::new(Type::String); +/// ``` +#[derive(Serialize, Deserialize, Clone, PartialEq, Eq, Default)] +#[cfg_attr(feature = "debug", derive(Debug))] +#[serde(rename_all = "lowercase")] +pub enum Type { + /// Used with [`Object`] and [`ObjectBuilder`] to describe schema that has _properties_ + /// describing fields. + #[default] + Object, + /// Indicates string type of content. Used with [`Object`] and [`ObjectBuilder`] on a `string` + /// field. + String, + /// Indicates integer type of content. Used with [`Object`] and [`ObjectBuilder`] on a `number` + /// field. + Integer, + /// Indicates floating point number type of content. Used with + /// [`Object`] and [`ObjectBuilder`] on a `number` field. + Number, + /// Indicates boolean type of content. Used with [`Object`] and [`ObjectBuilder`] on + /// a `bool` field. + Boolean, + /// Used with [`Array`] and [`ArrayBuilder`]. Indicates array type of content. + Array, + /// Null type. Used together with other type to indicate nullable values. + Null, +} + +/// Additional format for [`SchemaType`] to fine tune the data type used. If the **format** is not +/// supported by the UI it may default back to [`SchemaType`] alone. +/// Format is an open value, so you can use any formats, even not those defined by the +/// OpenAPI Specification. +#[derive(Serialize, Deserialize, Clone, PartialEq, Eq)] +#[cfg_attr(feature = "debug", derive(Debug))] +#[serde(rename_all = "lowercase", untagged)] +pub enum SchemaFormat { + /// Use to define additional detail about the value. + KnownFormat(KnownFormat), + /// Can be used to provide additional detail about the value when [`SchemaFormat::KnownFormat`] + /// is not suitable. + Custom(String), +} + +/// Known schema format modifier property to provide fine detail of the primitive type. +/// +/// Known format is defined in and +/// as +/// well as by few known data types that are enabled by specific feature flag e.g. _`uuid`_. +#[derive(Serialize, Deserialize, Clone, PartialEq, Eq)] +#[cfg_attr(feature = "debug", derive(Debug))] +#[serde(rename_all = "kebab-case")] +pub enum KnownFormat { + /// 8 bit integer. + #[cfg(feature = "non_strict_integers")] + #[cfg_attr(doc_cfg, doc(cfg(feature = "non_strict_integers")))] + Int8, + /// 16 bit integer. + #[cfg(feature = "non_strict_integers")] + #[cfg_attr(doc_cfg, doc(cfg(feature = "non_strict_integers")))] + Int16, + /// 32 bit integer. + Int32, + /// 64 bit integer. + Int64, + /// 8 bit unsigned integer. + #[cfg(feature = "non_strict_integers")] + #[cfg_attr(doc_cfg, doc(cfg(feature = "non_strict_integers")))] + UInt8, + /// 16 bit unsigned integer. + #[cfg(feature = "non_strict_integers")] + #[cfg_attr(doc_cfg, doc(cfg(feature = "non_strict_integers")))] + UInt16, + /// 32 bit unsigned integer. + #[cfg(feature = "non_strict_integers")] + #[cfg_attr(doc_cfg, doc(cfg(feature = "non_strict_integers")))] + UInt32, + /// 64 bit unsigned integer. + #[cfg(feature = "non_strict_integers")] + #[cfg_attr(doc_cfg, doc(cfg(feature = "non_strict_integers")))] + UInt64, + /// floating point number. + Float, + /// double (floating point) number. + Double, + /// base64 encoded chars. + Byte, + /// binary data (octet). + Binary, + /// ISO-8601 full time format [RFC3339](https://xml2rfc.ietf.org/public/rfc/html/rfc3339.html#anchor14). + Time, + /// ISO-8601 full date [RFC3339](https://xml2rfc.ietf.org/public/rfc/html/rfc3339.html#anchor14). + Date, + /// ISO-8601 full date time [RFC3339](https://xml2rfc.ietf.org/public/rfc/html/rfc3339.html#anchor14). + DateTime, + /// duration format from [RFC3339 Appendix-A](https://datatracker.ietf.org/doc/html/rfc3339#appendix-A). + Duration, + /// Hint to UI to obscure input. + Password, + /// Used with [`String`] values to indicate value is in UUID format. + /// + /// **uuid** feature need to be enabled. + #[cfg(feature = "uuid")] + #[cfg_attr(doc_cfg, doc(cfg(feature = "uuid")))] + Uuid, + /// Used with [`String`] values to indicate value is in ULID format. + #[cfg(feature = "ulid")] + #[cfg_attr(doc_cfg, doc(cfg(feature = "ulid")))] + Ulid, + /// Used with [`String`] values to indicate value is in Url format according to + /// [RFC3986](https://datatracker.ietf.org/doc/html/rfc3986). + #[cfg(feature = "url")] + #[cfg_attr(doc_cfg, doc(cfg(feature = "url")))] + Uri, + /// A string instance is valid against this attribute if it is a valid URI Reference + /// (either a URI or a relative-reference) according to + /// [RFC3986](https://datatracker.ietf.org/doc/html/rfc3986). + #[cfg(feature = "url")] + #[cfg_attr(doc_cfg, doc(cfg(feature = "url")))] + UriReference, + /// A string instance is valid against this attribute if it is a + /// valid IRI, according to [RFC3987](https://datatracker.ietf.org/doc/html/rfc3987). + #[cfg(feature = "url")] + #[cfg_attr(doc_cfg, doc(cfg(feature = "url")))] + Iri, + /// A string instance is valid against this attribute if it is a valid IRI Reference + /// (either an IRI or a relative-reference) + /// according to [RFC3987](https://datatracker.ietf.org/doc/html/rfc3987). + #[cfg(feature = "url")] + #[cfg_attr(doc_cfg, doc(cfg(feature = "url")))] + IriReference, + /// As defined in "Mailbox" rule [RFC5321](https://datatracker.ietf.org/doc/html/rfc5321#section-4.1.2). + Email, + /// As defined by extended "Mailbox" rule [RFC6531](https://datatracker.ietf.org/doc/html/rfc6531#section-3.3). + IdnEmail, + /// As defined by [RFC1123](https://datatracker.ietf.org/doc/html/rfc1123#section-2.1), including host names + /// produced using the Punycode algorithm + /// specified in [RFC5891](https://datatracker.ietf.org/doc/html/rfc5891#section-4.4). + Hostname, + /// As defined by either [RFC1123](https://datatracker.ietf.org/doc/html/rfc1123#section-2.1) as for hostname, + /// or an internationalized hostname as defined by [RFC5890](https://datatracker.ietf.org/doc/html/rfc5890#section-2.3.2.3). + IdnHostname, + /// An IPv4 address according to [RFC2673](https://datatracker.ietf.org/doc/html/rfc2673#section-3.2). + Ipv4, + /// An IPv6 address according to [RFC4291](https://datatracker.ietf.org/doc/html/rfc4291#section-2.2). + Ipv6, + /// A string instance is a valid URI Template if it is according to + /// [RFC6570](https://datatracker.ietf.org/doc/html/rfc6570). + /// + /// _**Note!**_ There are no separate IRL template. + UriTemplate, + /// A valid JSON string representation of a JSON Pointer according to [RFC6901](https://datatracker.ietf.org/doc/html/rfc6901#section-5). + JsonPointer, + /// A valid relative JSON Pointer according to [draft-handrews-relative-json-pointer-01](https://datatracker.ietf.org/doc/html/draft-handrews-relative-json-pointer-01). + RelativeJsonPointer, + /// Regular expression, which SHOULD be valid according to the + /// [ECMA-262](https://datatracker.ietf.org/doc/html/draft-bhutton-json-schema-validation-00#ref-ecma262). + Regex, +} + +#[cfg(test)] +mod tests { + use assert_json_diff::assert_json_eq; + use serde_json::{json, Value}; + + use super::*; + use crate::openapi::*; + + #[test] + fn create_schema_serializes_json() -> Result<(), serde_json::Error> { + let openapi = OpenApiBuilder::new() + .info(Info::new("My api", "1.0.0")) + .paths(Paths::new()) + .components(Some( + ComponentsBuilder::new() + .schema("Person", Ref::new("#/components/PersonModel")) + .schema( + "Credential", + Schema::from( + ObjectBuilder::new() + .property( + "id", + ObjectBuilder::new() + .schema_type(Type::Integer) + .format(Some(SchemaFormat::KnownFormat(KnownFormat::Int32))) + .description(Some("Id of credential")) + .default(Some(json!(1i32))), + ) + .property( + "name", + ObjectBuilder::new() + .schema_type(Type::String) + .description(Some("Name of credential")), + ) + .property( + "status", + ObjectBuilder::new() + .schema_type(Type::String) + .default(Some(json!("Active"))) + .description(Some("Credential status")) + .enum_values(Some([ + "Active", + "NotActive", + "Locked", + "Expired", + ])), + ) + .property( + "history", + Array::new(Ref::from_schema_name("UpdateHistory")), + ) + .property("tags", Object::with_type(Type::String).to_array()), + ), + ) + .build(), + )) + .build(); + + let serialized = serde_json::to_string_pretty(&openapi)?; + println!("serialized json:\n {serialized}"); + + let value = serde_json::to_value(&openapi)?; + let credential = get_json_path(&value, "components.schemas.Credential.properties"); + let person = get_json_path(&value, "components.schemas.Person"); + + assert!( + credential.get("id").is_some(), + "could not find path: components.schemas.Credential.properties.id" + ); + assert!( + credential.get("status").is_some(), + "could not find path: components.schemas.Credential.properties.status" + ); + assert!( + credential.get("name").is_some(), + "could not find path: components.schemas.Credential.properties.name" + ); + assert!( + credential.get("history").is_some(), + "could not find path: components.schemas.Credential.properties.history" + ); + assert_eq!( + credential + .get("id") + .unwrap_or(&serde_json::value::Value::Null) + .to_string(), + r#"{"default":1,"description":"Id of credential","format":"int32","type":"integer"}"#, + "components.schemas.Credential.properties.id did not match" + ); + assert_eq!( + credential + .get("name") + .unwrap_or(&serde_json::value::Value::Null) + .to_string(), + r#"{"description":"Name of credential","type":"string"}"#, + "components.schemas.Credential.properties.name did not match" + ); + assert_eq!( + credential + .get("status") + .unwrap_or(&serde_json::value::Value::Null) + .to_string(), + r#"{"default":"Active","description":"Credential status","enum":["Active","NotActive","Locked","Expired"],"type":"string"}"#, + "components.schemas.Credential.properties.status did not match" + ); + assert_eq!( + credential + .get("history") + .unwrap_or(&serde_json::value::Value::Null) + .to_string(), + r###"{"items":{"$ref":"#/components/schemas/UpdateHistory"},"type":"array"}"###, + "components.schemas.Credential.properties.history did not match" + ); + assert_eq!( + person.to_string(), + r###"{"$ref":"#/components/PersonModel"}"###, + "components.schemas.Person.ref did not match" + ); + + Ok(()) + } + + // Examples taken from https://spec.openapis.org/oas/latest.html#model-with-map-dictionary-properties + #[test] + fn test_property_order() { + let json_value = ObjectBuilder::new() + .property( + "id", + ObjectBuilder::new() + .schema_type(Type::Integer) + .format(Some(SchemaFormat::KnownFormat(KnownFormat::Int32))) + .description(Some("Id of credential")) + .default(Some(json!(1i32))), + ) + .property( + "name", + ObjectBuilder::new() + .schema_type(Type::String) + .description(Some("Name of credential")), + ) + .property( + "status", + ObjectBuilder::new() + .schema_type(Type::String) + .default(Some(json!("Active"))) + .description(Some("Credential status")) + .enum_values(Some(["Active", "NotActive", "Locked", "Expired"])), + ) + .property( + "history", + Array::new(Ref::from_schema_name("UpdateHistory")), + ) + .property("tags", Object::with_type(Type::String).to_array()) + .build(); + + #[cfg(not(feature = "preserve_order"))] + assert_eq!( + json_value.properties.keys().collect::>(), + vec!["history", "id", "name", "status", "tags"] + ); + + #[cfg(feature = "preserve_order")] + assert_eq!( + json_value.properties.keys().collect::>(), + vec!["id", "name", "status", "history", "tags"] + ); + } + + // Examples taken from https://spec.openapis.org/oas/latest.html#model-with-map-dictionary-properties + #[test] + fn test_additional_properties() { + let json_value = ObjectBuilder::new() + .additional_properties(Some(ObjectBuilder::new().schema_type(Type::String))) + .build(); + assert_json_eq!( + json_value, + json!({ + "type": "object", + "additionalProperties": { + "type": "string" + } + }) + ); + + let json_value = ObjectBuilder::new() + .additional_properties(Some(ArrayBuilder::new().items(ArrayItems::RefOrSchema( + Box::new(ObjectBuilder::new().schema_type(Type::Number).into()), + )))) + .build(); + assert_json_eq!( + json_value, + json!({ + "type": "object", + "additionalProperties": { + "items": { + "type": "number", + }, + "type": "array", + } + }) + ); + + let json_value = ObjectBuilder::new() + .additional_properties(Some(Ref::from_schema_name("ComplexModel"))) + .build(); + assert_json_eq!( + json_value, + json!({ + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/ComplexModel" + } + }) + ) + } + + #[test] + fn test_object_with_title() { + let json_value = ObjectBuilder::new().title(Some("SomeName")).build(); + assert_json_eq!( + json_value, + json!({ + "type": "object", + "title": "SomeName" + }) + ); + } + + #[test] + fn derive_object_with_examples() { + let expected = r#"{"type":"object","examples":[{"age":20,"name":"bob the cat"}]}"#; + let json_value = ObjectBuilder::new() + .examples([Some(json!({"age": 20, "name": "bob the cat"}))]) + .build(); + + let value_string = serde_json::to_string(&json_value).unwrap(); + assert_eq!( + value_string, expected, + "value string != expected string, {value_string} != {expected}" + ); + } + + fn get_json_path<'a>(value: &'a Value, path: &str) -> &'a Value { + path.split('.').fold(value, |acc, fragment| { + acc.get(fragment).unwrap_or(&serde_json::value::Value::Null) + }) + } + + #[test] + fn test_array_new() { + let array = Array::new( + ObjectBuilder::new().property( + "id", + ObjectBuilder::new() + .schema_type(Type::Integer) + .format(Some(SchemaFormat::KnownFormat(KnownFormat::Int32))) + .description(Some("Id of credential")) + .default(Some(json!(1i32))), + ), + ); + + assert!(matches!(array.schema_type, SchemaType::Type(Type::Array))); + } + + #[test] + fn test_array_builder() { + let array: Array = ArrayBuilder::new() + .items( + ObjectBuilder::new().property( + "id", + ObjectBuilder::new() + .schema_type(Type::Integer) + .format(Some(SchemaFormat::KnownFormat(KnownFormat::Int32))) + .description(Some("Id of credential")) + .default(Some(json!(1i32))), + ), + ) + .build(); + + assert!(matches!(array.schema_type, SchemaType::Type(Type::Array))); + } + + #[test] + fn reserialize_deserialized_schema_components() { + let components = ComponentsBuilder::new() + .schemas_from_iter(vec![( + "Comp", + Schema::from( + ObjectBuilder::new() + .property("name", ObjectBuilder::new().schema_type(Type::String)) + .required("name"), + ), + )]) + .responses_from_iter(vec![( + "200", + ResponseBuilder::new().description("Okay").build(), + )]) + .security_scheme( + "TLS", + SecurityScheme::MutualTls { + description: None, + extensions: None, + }, + ) + .build(); + + let serialized_components = serde_json::to_string(&components).unwrap(); + + let deserialized_components: Components = + serde_json::from_str(serialized_components.as_str()).unwrap(); + + assert_eq!( + serialized_components, + serde_json::to_string(&deserialized_components).unwrap() + ) + } + + #[test] + fn reserialize_deserialized_object_component() { + let prop = ObjectBuilder::new() + .property("name", ObjectBuilder::new().schema_type(Type::String)) + .required("name") + .build(); + + let serialized_components = serde_json::to_string(&prop).unwrap(); + let deserialized_components: Object = + serde_json::from_str(serialized_components.as_str()).unwrap(); + + assert_eq!( + serialized_components, + serde_json::to_string(&deserialized_components).unwrap() + ) + } + + #[test] + fn reserialize_deserialized_property() { + let prop = ObjectBuilder::new().schema_type(Type::String).build(); + + let serialized_components = serde_json::to_string(&prop).unwrap(); + let deserialized_components: Object = + serde_json::from_str(serialized_components.as_str()).unwrap(); + + assert_eq!( + serialized_components, + serde_json::to_string(&deserialized_components).unwrap() + ) + } + + #[test] + fn serialize_deserialize_array_within_ref_or_t_object_builder() { + let ref_or_schema = RefOr::T(Schema::Object( + ObjectBuilder::new() + .property( + "test", + RefOr::T(Schema::Array( + ArrayBuilder::new() + .items(RefOr::T(Schema::Object( + ObjectBuilder::new() + .property("element", RefOr::Ref(Ref::new("#/test"))) + .build(), + ))) + .build(), + )), + ) + .build(), + )); + + let json_str = serde_json::to_string(&ref_or_schema).expect(""); + println!("----------------------------"); + println!("{json_str}"); + + let deserialized: RefOr = serde_json::from_str(&json_str).expect(""); + + let json_de_str = serde_json::to_string(&deserialized).expect(""); + println!("----------------------------"); + println!("{json_de_str}"); + + assert_eq!(json_str, json_de_str); + } + + #[test] + fn serialize_deserialize_one_of_within_ref_or_t_object_builder() { + let ref_or_schema = RefOr::T(Schema::Object( + ObjectBuilder::new() + .property( + "test", + RefOr::T(Schema::OneOf( + OneOfBuilder::new() + .item(Schema::Array( + ArrayBuilder::new() + .items(RefOr::T(Schema::Object( + ObjectBuilder::new() + .property("element", RefOr::Ref(Ref::new("#/test"))) + .build(), + ))) + .build(), + )) + .item(Schema::Array( + ArrayBuilder::new() + .items(RefOr::T(Schema::Object( + ObjectBuilder::new() + .property("foobar", RefOr::Ref(Ref::new("#/foobar"))) + .build(), + ))) + .build(), + )) + .build(), + )), + ) + .build(), + )); + + let json_str = serde_json::to_string(&ref_or_schema).expect(""); + println!("----------------------------"); + println!("{json_str}"); + + let deserialized: RefOr = serde_json::from_str(&json_str).expect(""); + + let json_de_str = serde_json::to_string(&deserialized).expect(""); + println!("----------------------------"); + println!("{json_de_str}"); + + assert_eq!(json_str, json_de_str); + } + + #[test] + fn serialize_deserialize_all_of_of_within_ref_or_t_object_builder() { + let ref_or_schema = RefOr::T(Schema::Object( + ObjectBuilder::new() + .property( + "test", + RefOr::T(Schema::AllOf( + AllOfBuilder::new() + .item(Schema::Array( + ArrayBuilder::new() + .items(RefOr::T(Schema::Object( + ObjectBuilder::new() + .property("element", RefOr::Ref(Ref::new("#/test"))) + .build(), + ))) + .build(), + )) + .item(RefOr::T(Schema::Object( + ObjectBuilder::new() + .property("foobar", RefOr::Ref(Ref::new("#/foobar"))) + .build(), + ))) + .build(), + )), + ) + .build(), + )); + + let json_str = serde_json::to_string(&ref_or_schema).expect(""); + println!("----------------------------"); + println!("{json_str}"); + + let deserialized: RefOr = serde_json::from_str(&json_str).expect(""); + + let json_de_str = serde_json::to_string(&deserialized).expect(""); + println!("----------------------------"); + println!("{json_de_str}"); + + assert_eq!(json_str, json_de_str); + } + + #[test] + fn deserialize_reserialize_one_of_default_type() { + let a = OneOfBuilder::new() + .item(Schema::Array( + ArrayBuilder::new() + .items(RefOr::T(Schema::Object( + ObjectBuilder::new() + .property("element", RefOr::Ref(Ref::new("#/test"))) + .build(), + ))) + .build(), + )) + .item(Schema::Array( + ArrayBuilder::new() + .items(RefOr::T(Schema::Object( + ObjectBuilder::new() + .property("foobar", RefOr::Ref(Ref::new("#/foobar"))) + .build(), + ))) + .build(), + )) + .build(); + + let serialized_json = serde_json::to_string(&a).expect("should serialize to json"); + let b: OneOf = serde_json::from_str(&serialized_json).expect("should deserialize OneOf"); + let reserialized_json = serde_json::to_string(&b).expect("reserialized json"); + + println!("{serialized_json}"); + println!("{reserialized_json}",); + assert_eq!(serialized_json, reserialized_json); + } + + #[test] + fn serialize_deserialize_any_of_of_within_ref_or_t_object_builder() { + let ref_or_schema = RefOr::T(Schema::Object( + ObjectBuilder::new() + .property( + "test", + RefOr::T(Schema::AnyOf( + AnyOfBuilder::new() + .item(Schema::Array( + ArrayBuilder::new() + .items(RefOr::T(Schema::Object( + ObjectBuilder::new() + .property("element", RefOr::Ref(Ref::new("#/test"))) + .build(), + ))) + .build(), + )) + .item(RefOr::T(Schema::Object( + ObjectBuilder::new() + .property("foobar", RefOr::Ref(Ref::new("#/foobar"))) + .build(), + ))) + .build(), + )), + ) + .build(), + )); + + let json_str = serde_json::to_string(&ref_or_schema).expect(""); + println!("----------------------------"); + println!("{json_str}"); + + let deserialized: RefOr = serde_json::from_str(&json_str).expect(""); + + let json_de_str = serde_json::to_string(&deserialized).expect(""); + println!("----------------------------"); + println!("{json_de_str}"); + assert!(json_str.contains("\"anyOf\"")); + assert_eq!(json_str, json_de_str); + } + + #[test] + fn serialize_deserialize_schema_array_ref_or_t() { + let ref_or_schema = RefOr::T(Schema::Array( + ArrayBuilder::new() + .items(RefOr::T(Schema::Object( + ObjectBuilder::new() + .property("element", RefOr::Ref(Ref::new("#/test"))) + .build(), + ))) + .build(), + )); + + let json_str = serde_json::to_string(&ref_or_schema).expect(""); + println!("----------------------------"); + println!("{json_str}"); + + let deserialized: RefOr = serde_json::from_str(&json_str).expect(""); + + let json_de_str = serde_json::to_string(&deserialized).expect(""); + println!("----------------------------"); + println!("{json_de_str}"); + + assert_eq!(json_str, json_de_str); + } + + #[test] + fn serialize_deserialize_schema_array_builder() { + let ref_or_schema = ArrayBuilder::new() + .items(RefOr::T(Schema::Object( + ObjectBuilder::new() + .property("element", RefOr::Ref(Ref::new("#/test"))) + .build(), + ))) + .build(); + + let json_str = serde_json::to_string(&ref_or_schema).expect(""); + println!("----------------------------"); + println!("{json_str}"); + + let deserialized: RefOr = serde_json::from_str(&json_str).expect(""); + + let json_de_str = serde_json::to_string(&deserialized).expect(""); + println!("----------------------------"); + println!("{json_de_str}"); + + assert_eq!(json_str, json_de_str); + } + + #[test] + fn serialize_deserialize_schema_with_additional_properties() { + let schema = Schema::Object( + ObjectBuilder::new() + .property( + "map", + ObjectBuilder::new() + .additional_properties(Some(AdditionalProperties::FreeForm(true))), + ) + .build(), + ); + + let json_str = serde_json::to_string(&schema).unwrap(); + println!("----------------------------"); + println!("{json_str}"); + + let deserialized: RefOr = serde_json::from_str(&json_str).unwrap(); + + let json_de_str = serde_json::to_string(&deserialized).unwrap(); + println!("----------------------------"); + println!("{json_de_str}"); + + assert_eq!(json_str, json_de_str); + } + + #[test] + fn serialize_deserialize_schema_with_additional_properties_object() { + let schema = Schema::Object( + ObjectBuilder::new() + .property( + "map", + ObjectBuilder::new().additional_properties(Some( + ObjectBuilder::new().property("name", Object::with_type(Type::String)), + )), + ) + .build(), + ); + + let json_str = serde_json::to_string(&schema).unwrap(); + println!("----------------------------"); + println!("{json_str}"); + + let deserialized: RefOr = serde_json::from_str(&json_str).unwrap(); + + let json_de_str = serde_json::to_string(&deserialized).unwrap(); + println!("----------------------------"); + println!("{json_de_str}"); + + assert_eq!(json_str, json_de_str); + } + + #[test] + fn serialize_discriminator_with_mapping() { + let mut discriminator = Discriminator::new("type"); + discriminator.mapping = [("int".to_string(), "#/components/schemas/MyInt".to_string())] + .into_iter() + .collect::>(); + let one_of = OneOfBuilder::new() + .item(Ref::from_schema_name("MyInt")) + .discriminator(Some(discriminator)) + .build(); + let json_value = serde_json::to_value(one_of).unwrap(); + + assert_json_eq!( + json_value, + json!({ + "oneOf": [ + { + "$ref": "#/components/schemas/MyInt" + } + ], + "discriminator": { + "propertyName": "type", + "mapping": { + "int": "#/components/schemas/MyInt" + } + } + }) + ); + } + + #[test] + fn serialize_deserialize_object_with_multiple_schema_types() { + let object = ObjectBuilder::new() + .schema_type(SchemaType::from_iter([Type::Object, Type::Null])) + .build(); + + let json_str = serde_json::to_string(&object).unwrap(); + println!("----------------------------"); + println!("{json_str}"); + + let deserialized: Object = serde_json::from_str(&json_str).unwrap(); + + let json_de_str = serde_json::to_string(&deserialized).unwrap(); + println!("----------------------------"); + println!("{json_de_str}"); + + assert_eq!(json_str, json_de_str); + } + + #[test] + fn object_with_extensions() { + let expected = json!("value"); + let extensions = extensions::ExtensionsBuilder::new() + .add("x-some-extension", expected.clone()) + .build(); + let json_value = ObjectBuilder::new().extensions(Some(extensions)).build(); + + let value = serde_json::to_value(&json_value).unwrap(); + assert_eq!(value.get("x-some-extension"), Some(&expected)); + } + + #[test] + fn array_with_extensions() { + let expected = json!("value"); + let extensions = extensions::ExtensionsBuilder::new() + .add("x-some-extension", expected.clone()) + .build(); + let json_value = ArrayBuilder::new().extensions(Some(extensions)).build(); + + let value = serde_json::to_value(&json_value).unwrap(); + assert_eq!(value.get("x-some-extension"), Some(&expected)); + } + + #[test] + fn oneof_with_extensions() { + let expected = json!("value"); + let extensions = extensions::ExtensionsBuilder::new() + .add("x-some-extension", expected.clone()) + .build(); + let json_value = OneOfBuilder::new().extensions(Some(extensions)).build(); + + let value = serde_json::to_value(&json_value).unwrap(); + assert_eq!(value.get("x-some-extension"), Some(&expected)); + } + + #[test] + fn allof_with_extensions() { + let expected = json!("value"); + let extensions = extensions::ExtensionsBuilder::new() + .add("x-some-extension", expected.clone()) + .build(); + let json_value = AllOfBuilder::new().extensions(Some(extensions)).build(); + + let value = serde_json::to_value(&json_value).unwrap(); + assert_eq!(value.get("x-some-extension"), Some(&expected)); + } + + #[test] + fn anyof_with_extensions() { + let expected = json!("value"); + let extensions = extensions::ExtensionsBuilder::new() + .add("x-some-extension", expected.clone()) + .build(); + let json_value = AnyOfBuilder::new().extensions(Some(extensions)).build(); + + let value = serde_json::to_value(&json_value).unwrap(); + assert_eq!(value.get("x-some-extension"), Some(&expected)); + } +} diff --git a/fastapi/src/openapi/security.rs b/fastapi/src/openapi/security.rs new file mode 100644 index 0000000..235c6d9 --- /dev/null +++ b/fastapi/src/openapi/security.rs @@ -0,0 +1,1321 @@ +//! Implements [OpenAPI Security Schema][security] types. +//! +//! Refer to [`SecurityScheme`] for usage and more details. +//! +//! [security]: https://spec.openapis.org/oas/latest.html#security-scheme-object +use std::{collections::BTreeMap, iter}; + +use serde::{Deserialize, Serialize}; + +use super::{builder, extensions::Extensions}; + +/// OpenAPI [security requirement][security] object. +/// +/// Security requirement holds list of required [`SecurityScheme`] *names* and possible *scopes* required +/// to execute the operation. They can be defined in [`#[fastapi::path(...)]`][path] or in `#[openapi(...)]` +/// of [`OpenApi`][openapi]. +/// +/// Applying the security requirement to [`OpenApi`][openapi] will make it globally +/// available to all operations. When applied to specific [`#[fastapi::path(...)]`][path] will only +/// make the security requirements available for that operation. Only one of the requirements must be +/// satisfied. +/// +/// [security]: https://spec.openapis.org/oas/latest.html#security-requirement-object +/// [path]: ../../attr.path.html +/// [openapi]: ../../derive.OpenApi.html +#[non_exhaustive] +#[derive(Serialize, Deserialize, Default, Clone, PartialEq, Eq)] +#[cfg_attr(feature = "debug", derive(Debug))] +pub struct SecurityRequirement { + #[serde(flatten)] + value: BTreeMap>, +} + +impl SecurityRequirement { + /// Construct a new [`SecurityRequirement`]. + /// + /// Accepts name for the security requirement which must match to the name of available [`SecurityScheme`]. + /// Second parameter is [`IntoIterator`] of [`Into`] scopes needed by the [`SecurityRequirement`]. + /// Scopes must match to the ones defined in [`SecurityScheme`]. + /// + /// # Examples + /// + /// Create new security requirement with scopes. + /// ```rust + /// # use fastapi::openapi::security::SecurityRequirement; + /// SecurityRequirement::new("api_oauth2_flow", ["edit:items", "read:items"]); + /// ``` + /// + /// You can also create an empty security requirement with `Default::default()`. + /// ```rust + /// # use fastapi::openapi::security::SecurityRequirement; + /// SecurityRequirement::default(); + /// ``` + /// + /// If you have more than one name in the security requirement you can use + /// [`SecurityRequirement::add`]. + pub fn new, S: IntoIterator, I: Into>( + name: N, + scopes: S, + ) -> Self { + Self { + value: BTreeMap::from_iter(iter::once_with(|| { + ( + Into::::into(name), + scopes + .into_iter() + .map(|scope| Into::::into(scope)) + .collect::>(), + ) + })), + } + } + + /// Allows to add multiple names to security requirement. + /// + /// Accepts name for the security requirement which must match to the name of available [`SecurityScheme`]. + /// Second parameter is [`IntoIterator`] of [`Into`] scopes needed by the [`SecurityRequirement`]. + /// Scopes must match to the ones defined in [`SecurityScheme`]. + /// + /// # Examples + /// + /// Make both API keys required: + /// ```rust + /// # use fastapi::openapi::security::{SecurityRequirement, HttpAuthScheme, HttpBuilder, SecurityScheme}; + /// # use fastapi::{openapi, Modify, OpenApi}; + /// # use serde::Serialize; + /// #[derive(Debug, Serialize)] + /// struct Foo; + /// + /// impl Modify for Foo { + /// fn modify(&self, openapi: &mut openapi::OpenApi) { + /// if let Some(schema) = openapi.components.as_mut() { + /// schema.add_security_scheme( + /// "api_key1", + /// SecurityScheme::Http( + /// HttpBuilder::new() + /// .scheme(HttpAuthScheme::Bearer) + /// .bearer_format("JWT") + /// .build(), + /// ), + /// ); + /// schema.add_security_scheme( + /// "api_key2", + /// SecurityScheme::Http( + /// HttpBuilder::new() + /// .scheme(HttpAuthScheme::Bearer) + /// .bearer_format("JWT") + /// .build(), + /// ), + /// ); + /// } + /// } + /// } + /// + /// #[derive(Default, OpenApi)] + /// #[openapi( + /// modifiers(&Foo), + /// security( + /// ("api_key1" = ["edit:items", "read:items"], "api_key2" = ["edit:items", "read:items"]), + /// ) + /// )] + /// struct ApiDoc; + /// ``` + pub fn add, S: IntoIterator, I: Into>( + mut self, + name: N, + scopes: S, + ) -> Self { + self.value.insert( + Into::::into(name), + scopes.into_iter().map(Into::::into).collect(), + ); + + self + } +} + +/// OpenAPI [security scheme][security] for path operations. +/// +/// [security]: https://spec.openapis.org/oas/latest.html#security-scheme-object +/// +/// # Examples +/// +/// Create implicit oauth2 flow security schema for path operations. +/// ```rust +/// # use fastapi::openapi::security::{SecurityScheme, OAuth2, Implicit, Flow, Scopes}; +/// SecurityScheme::OAuth2( +/// OAuth2::with_description([Flow::Implicit( +/// Implicit::new( +/// "https://localhost/auth/dialog", +/// Scopes::from_iter([ +/// ("edit:items", "edit my items"), +/// ("read:items", "read my items") +/// ]), +/// ), +/// )], "my oauth2 flow") +/// ); +/// ``` +/// +/// Create JWT header authentication. +/// ```rust +/// # use fastapi::openapi::security::{SecurityScheme, HttpAuthScheme, HttpBuilder}; +/// SecurityScheme::Http( +/// HttpBuilder::new().scheme(HttpAuthScheme::Bearer).bearer_format("JWT").build() +/// ); +/// ``` +#[derive(Serialize, Deserialize, Clone, PartialEq, Eq)] +#[serde(tag = "type", rename_all = "camelCase")] +#[cfg_attr(feature = "debug", derive(Debug))] +pub enum SecurityScheme { + /// Oauth flow authentication. + #[serde(rename = "oauth2")] + OAuth2(OAuth2), + /// Api key authentication sent in *`header`*, *`cookie`* or *`query`*. + ApiKey(ApiKey), + /// Http authentication such as *`bearer`* or *`basic`*. + Http(Http), + /// Open id connect url to discover OAuth2 configuration values. + OpenIdConnect(OpenIdConnect), + /// Authentication is done via client side certificate. + /// + /// OpenApi 3.1 type + #[serde(rename = "mutualTLS")] + MutualTls { + #[allow(missing_docs)] + #[serde(skip_serializing_if = "Option::is_none")] + description: Option, + /// Optional extensions "x-something". + #[serde(skip_serializing_if = "Option::is_none", flatten)] + extensions: Option, + }, +} + +/// Api key authentication [`SecurityScheme`]. +#[derive(Serialize, Deserialize, Clone, PartialEq, Eq)] +#[serde(tag = "in", rename_all = "lowercase")] +#[cfg_attr(feature = "debug", derive(Debug))] +pub enum ApiKey { + /// Create api key which is placed in HTTP header. + Header(ApiKeyValue), + /// Create api key which is placed in query parameters. + Query(ApiKeyValue), + /// Create api key which is placed in cookie value. + Cookie(ApiKeyValue), +} + +/// Value object for [`ApiKey`]. +#[non_exhaustive] +#[derive(Serialize, Deserialize, Clone, PartialEq, Eq)] +#[cfg_attr(feature = "debug", derive(Debug))] +pub struct ApiKeyValue { + /// Name of the [`ApiKey`] parameter. + pub name: String, + + /// Description of the the [`ApiKey`] [`SecurityScheme`]. Supports markdown syntax. + #[serde(skip_serializing_if = "Option::is_none")] + pub description: Option, + + /// Optional extensions "x-something". + #[serde(skip_serializing_if = "Option::is_none", flatten)] + pub extensions: Option, +} + +impl ApiKeyValue { + /// Constructs new api key value. + /// + /// # Examples + /// + /// Create new api key security schema with name `api_key`. + /// ```rust + /// # use fastapi::openapi::security::ApiKeyValue; + /// let api_key = ApiKeyValue::new("api_key"); + /// ``` + pub fn new>(name: S) -> Self { + Self { + name: name.into(), + description: None, + extensions: Default::default(), + } + } + + /// Construct a new api key with optional description supporting markdown syntax. + /// + /// # Examples + /// + /// Create new api key security schema with name `api_key` with description. + /// ```rust + /// # use fastapi::openapi::security::ApiKeyValue; + /// let api_key = ApiKeyValue::with_description("api_key", "my api_key token"); + /// ``` + pub fn with_description>(name: S, description: S) -> Self { + Self { + name: name.into(), + description: Some(description.into()), + extensions: Default::default(), + } + } +} + +builder! { + HttpBuilder; + + /// Http authentication [`SecurityScheme`] builder. + /// + /// Methods can be chained to configure _bearer_format_ or to add _description_. + #[non_exhaustive] + #[derive(Serialize, Deserialize, Clone, Default, PartialEq, Eq)] + #[serde(rename_all = "camelCase")] + #[cfg_attr(feature = "debug", derive(Debug))] + pub struct Http { + /// Http authorization scheme in HTTP `Authorization` header value. + pub scheme: HttpAuthScheme, + + /// Optional hint to client how the bearer token is formatted. Valid only with [`HttpAuthScheme::Bearer`]. + #[serde(skip_serializing_if = "Option::is_none")] + pub bearer_format: Option, + + /// Optional description of [`Http`] [`SecurityScheme`] supporting markdown syntax. + #[serde(skip_serializing_if = "Option::is_none")] + pub description: Option, + + /// Optional extensions "x-something". + #[serde(skip_serializing_if = "Option::is_none", flatten)] + pub extensions: Option, + } +} + +impl Http { + /// Create new http authentication security schema. + /// + /// Accepts one argument which defines the scheme of the http authentication. + /// + /// # Examples + /// + /// Create http security schema with basic authentication. + /// ```rust + /// # use fastapi::openapi::security::{SecurityScheme, Http, HttpAuthScheme}; + /// SecurityScheme::Http(Http::new(HttpAuthScheme::Basic)); + /// ``` + pub fn new(scheme: HttpAuthScheme) -> Self { + Self { + scheme, + bearer_format: None, + description: None, + extensions: Default::default(), + } + } +} + +impl HttpBuilder { + /// Add or change http authentication scheme used. + /// + /// # Examples + /// + /// Create new [`Http`] [`SecurityScheme`] via [`HttpBuilder`]. + /// ```rust + /// # use fastapi::openapi::security::{HttpBuilder, HttpAuthScheme}; + /// let http = HttpBuilder::new().scheme(HttpAuthScheme::Basic).build(); + /// ``` + pub fn scheme(mut self, scheme: HttpAuthScheme) -> Self { + self.scheme = scheme; + + self + } + /// Add or change informative bearer format for http security schema. + /// + /// This is only applicable to [`HttpAuthScheme::Bearer`]. + /// + /// # Examples + /// + /// Add JTW bearer format for security schema. + /// ```rust + /// # use fastapi::openapi::security::{HttpBuilder, HttpAuthScheme}; + /// HttpBuilder::new().scheme(HttpAuthScheme::Bearer).bearer_format("JWT").build(); + /// ``` + pub fn bearer_format>(mut self, bearer_format: S) -> Self { + if self.scheme == HttpAuthScheme::Bearer { + self.bearer_format = Some(bearer_format.into()); + } + + self + } + + /// Add or change optional description supporting markdown syntax. + pub fn description>(mut self, description: Option) -> Self { + self.description = description.map(|description| description.into()); + + self + } +} + +/// Implements types according [RFC7235](https://datatracker.ietf.org/doc/html/rfc7235#section-5.1). +/// +/// Types are maintained at . +#[derive(Serialize, Deserialize, Clone, PartialEq, Eq)] +#[cfg_attr(feature = "debug", derive(Debug))] +#[serde(rename_all = "lowercase")] +#[allow(missing_docs)] +pub enum HttpAuthScheme { + Basic, + Bearer, + Digest, + Hoba, + Mutual, + Negotiate, + OAuth, + #[serde(rename = "scram-sha-1")] + ScramSha1, + #[serde(rename = "scram-sha-256")] + ScramSha256, + Vapid, +} + +impl Default for HttpAuthScheme { + fn default() -> Self { + Self::Basic + } +} + +/// Open id connect [`SecurityScheme`]. +#[non_exhaustive] +#[derive(Serialize, Deserialize, Clone, PartialEq, Eq)] +#[serde(rename_all = "camelCase")] +#[cfg_attr(feature = "debug", derive(Debug))] +pub struct OpenIdConnect { + /// Url of the [`OpenIdConnect`] to discover OAuth2 connect values. + pub open_id_connect_url: String, + + /// Description of [`OpenIdConnect`] [`SecurityScheme`] supporting markdown syntax. + #[serde(skip_serializing_if = "Option::is_none")] + pub description: Option, + + /// Optional extensions "x-something". + #[serde(skip_serializing_if = "Option::is_none", flatten)] + pub extensions: Option, +} + +impl OpenIdConnect { + /// Construct a new open id connect security schema. + /// + /// # Examples + /// + /// ```rust + /// # use fastapi::openapi::security::OpenIdConnect; + /// OpenIdConnect::new("https://localhost/openid"); + /// ``` + pub fn new>(open_id_connect_url: S) -> Self { + Self { + open_id_connect_url: open_id_connect_url.into(), + description: None, + extensions: Default::default(), + } + } + + /// Construct a new [`OpenIdConnect`] [`SecurityScheme`] with optional description + /// supporting markdown syntax. + /// + /// # Examples + /// + /// ```rust + /// # use fastapi::openapi::security::OpenIdConnect; + /// OpenIdConnect::with_description("https://localhost/openid", "my pet api open id connect"); + /// ``` + pub fn with_description>(open_id_connect_url: S, description: S) -> Self { + Self { + open_id_connect_url: open_id_connect_url.into(), + description: Some(description.into()), + extensions: Default::default(), + } + } +} + +/// OAuth2 [`Flow`] configuration for [`SecurityScheme`]. +#[non_exhaustive] +#[derive(Serialize, Deserialize, Clone, PartialEq, Eq)] +#[cfg_attr(feature = "debug", derive(Debug))] +pub struct OAuth2 { + /// Map of supported OAuth2 flows. + pub flows: BTreeMap, + + /// Optional description for the [`OAuth2`] [`Flow`] [`SecurityScheme`]. + #[serde(skip_serializing_if = "Option::is_none")] + pub description: Option, + + /// Optional extensions "x-something". + #[serde(skip_serializing_if = "Option::is_none", flatten)] + pub extensions: Option, +} + +impl OAuth2 { + /// Construct a new OAuth2 security schema configuration object. + /// + /// Oauth flow accepts slice of [`Flow`] configuration objects and can be optionally provided with description. + /// + /// # Examples + /// + /// Create new OAuth2 flow with multiple authentication flows. + /// ```rust + /// # use fastapi::openapi::security::{OAuth2, Flow, Password, AuthorizationCode, Scopes}; + /// OAuth2::new([Flow::Password( + /// Password::with_refresh_url( + /// "https://localhost/oauth/token", + /// Scopes::from_iter([ + /// ("edit:items", "edit my items"), + /// ("read:items", "read my items") + /// ]), + /// "https://localhost/refresh/token" + /// )), + /// Flow::AuthorizationCode( + /// AuthorizationCode::new( + /// "https://localhost/authorization/token", + /// "https://localhost/token/url", + /// Scopes::from_iter([ + /// ("edit:items", "edit my items"), + /// ("read:items", "read my items") + /// ])), + /// ), + /// ]); + /// ``` + pub fn new>(flows: I) -> Self { + Self { + flows: BTreeMap::from_iter( + flows + .into_iter() + .map(|auth_flow| (String::from(auth_flow.get_type_as_str()), auth_flow)), + ), + extensions: None, + description: None, + } + } + + /// Construct a new OAuth2 flow with optional description supporting markdown syntax. + /// + /// # Examples + /// + /// Create new OAuth2 flow with multiple authentication flows with description. + /// ```rust + /// # use fastapi::openapi::security::{OAuth2, Flow, Password, AuthorizationCode, Scopes}; + /// OAuth2::with_description([Flow::Password( + /// Password::with_refresh_url( + /// "https://localhost/oauth/token", + /// Scopes::from_iter([ + /// ("edit:items", "edit my items"), + /// ("read:items", "read my items") + /// ]), + /// "https://localhost/refresh/token" + /// )), + /// Flow::AuthorizationCode( + /// AuthorizationCode::new( + /// "https://localhost/authorization/token", + /// "https://localhost/token/url", + /// Scopes::from_iter([ + /// ("edit:items", "edit my items"), + /// ("read:items", "read my items") + /// ]) + /// ), + /// ), + /// ], "my oauth2 flow"); + /// ``` + pub fn with_description, S: Into>( + flows: I, + description: S, + ) -> Self { + Self { + flows: BTreeMap::from_iter( + flows + .into_iter() + .map(|auth_flow| (String::from(auth_flow.get_type_as_str()), auth_flow)), + ), + extensions: None, + description: Some(description.into()), + } + } +} + +/// [`OAuth2`] flow configuration object. +/// +/// See more details at . +#[derive(Serialize, Deserialize, Clone, PartialEq, Eq)] +#[serde(untagged)] +#[cfg_attr(feature = "debug", derive(Debug))] +pub enum Flow { + /// Define implicit [`Flow`] type. See [`Implicit::new`] for usage details. + /// + /// Soon to be deprecated by . + Implicit(Implicit), + /// Define password [`Flow`] type. See [`Password::new`] for usage details. + Password(Password), + /// Define client credentials [`Flow`] type. See [`ClientCredentials::new`] for usage details. + ClientCredentials(ClientCredentials), + /// Define authorization code [`Flow`] type. See [`AuthorizationCode::new`] for usage details. + AuthorizationCode(AuthorizationCode), +} + +impl Flow { + fn get_type_as_str(&self) -> &str { + match self { + Self::Implicit(_) => "implicit", + Self::Password(_) => "password", + Self::ClientCredentials(_) => "clientCredentials", + Self::AuthorizationCode(_) => "authorizationCode", + } + } +} + +/// Implicit [`Flow`] configuration for [`OAuth2`]. +#[non_exhaustive] +#[derive(Serialize, Deserialize, Clone, PartialEq, Eq)] +#[serde(rename_all = "camelCase")] +#[cfg_attr(feature = "debug", derive(Debug))] +pub struct Implicit { + /// Authorization token url for the flow. + pub authorization_url: String, + + /// Optional refresh token url for the flow. + #[serde(skip_serializing_if = "Option::is_none")] + pub refresh_url: Option, + + /// Scopes required by the flow. + #[serde(flatten)] + pub scopes: Scopes, + + /// Optional extensions "x-something". + #[serde(skip_serializing_if = "Option::is_none", flatten)] + pub extensions: Option, +} + +impl Implicit { + /// Construct a new implicit oauth2 flow. + /// + /// Accepts two arguments: one which is authorization url and second map of scopes. Scopes can + /// also be an empty map. + /// + /// # Examples + /// + /// Create new implicit flow with scopes. + /// ```rust + /// # use fastapi::openapi::security::{Implicit, Scopes}; + /// Implicit::new( + /// "https://localhost/auth/dialog", + /// Scopes::from_iter([ + /// ("edit:items", "edit my items"), + /// ("read:items", "read my items") + /// ]), + /// ); + /// ``` + /// + /// Create new implicit flow without any scopes. + /// ```rust + /// # use fastapi::openapi::security::{Implicit, Scopes}; + /// Implicit::new( + /// "https://localhost/auth/dialog", + /// Scopes::new(), + /// ); + /// ``` + pub fn new>(authorization_url: S, scopes: Scopes) -> Self { + Self { + authorization_url: authorization_url.into(), + refresh_url: None, + scopes, + extensions: Default::default(), + } + } + + /// Construct a new implicit oauth2 flow with refresh url for getting refresh tokens. + /// + /// This is essentially same as [`Implicit::new`] but allows defining `refresh_url` for the [`Implicit`] + /// oauth2 flow. + /// + /// # Examples + /// + /// Create a new implicit oauth2 flow with refresh token. + /// ```rust + /// # use fastapi::openapi::security::{Implicit, Scopes}; + /// Implicit::with_refresh_url( + /// "https://localhost/auth/dialog", + /// Scopes::new(), + /// "https://localhost/refresh-token" + /// ); + /// ``` + pub fn with_refresh_url>( + authorization_url: S, + scopes: Scopes, + refresh_url: S, + ) -> Self { + Self { + authorization_url: authorization_url.into(), + refresh_url: Some(refresh_url.into()), + scopes, + extensions: Default::default(), + } + } +} + +/// Authorization code [`Flow`] configuration for [`OAuth2`]. +#[non_exhaustive] +#[derive(Serialize, Deserialize, Clone, PartialEq, Eq)] +#[serde(rename_all = "camelCase")] +#[cfg_attr(feature = "debug", derive(Debug))] +pub struct AuthorizationCode { + /// Url for authorization token. + pub authorization_url: String, + /// Token url for the flow. + pub token_url: String, + + /// Optional refresh token url for the flow. + #[serde(skip_serializing_if = "Option::is_none")] + pub refresh_url: Option, + + /// Scopes required by the flow. + #[serde(flatten)] + pub scopes: Scopes, + + /// Optional extensions "x-something". + #[serde(skip_serializing_if = "Option::is_none", flatten)] + pub extensions: Option, +} + +impl AuthorizationCode { + /// Construct a new authorization code oauth flow. + /// + /// Accepts three arguments: one which is authorization url, two a token url and + /// three a map of scopes for oauth flow. + /// + /// # Examples + /// + /// Create new authorization code flow with scopes. + /// ```rust + /// # use fastapi::openapi::security::{AuthorizationCode, Scopes}; + /// AuthorizationCode::new( + /// "https://localhost/auth/dialog", + /// "https://localhost/token", + /// Scopes::from_iter([ + /// ("edit:items", "edit my items"), + /// ("read:items", "read my items") + /// ]), + /// ); + /// ``` + /// + /// Create new authorization code flow without any scopes. + /// ```rust + /// # use fastapi::openapi::security::{AuthorizationCode, Scopes}; + /// AuthorizationCode::new( + /// "https://localhost/auth/dialog", + /// "https://localhost/token", + /// Scopes::new(), + /// ); + /// ``` + pub fn new, T: Into>( + authorization_url: A, + token_url: T, + scopes: Scopes, + ) -> Self { + Self { + authorization_url: authorization_url.into(), + token_url: token_url.into(), + refresh_url: None, + scopes, + extensions: Default::default(), + } + } + + /// Construct a new [`AuthorizationCode`] OAuth2 flow with additional refresh token url. + /// + /// This is essentially same as [`AuthorizationCode::new`] but allows defining extra parameter `refresh_url` + /// for fetching refresh token. + /// + /// # Examples + /// + /// Create [`AuthorizationCode`] OAuth2 flow with refresh url. + /// ```rust + /// # use fastapi::openapi::security::{AuthorizationCode, Scopes}; + /// AuthorizationCode::with_refresh_url( + /// "https://localhost/auth/dialog", + /// "https://localhost/token", + /// Scopes::new(), + /// "https://localhost/refresh-token" + /// ); + /// ``` + pub fn with_refresh_url>( + authorization_url: S, + token_url: S, + scopes: Scopes, + refresh_url: S, + ) -> Self { + Self { + authorization_url: authorization_url.into(), + token_url: token_url.into(), + refresh_url: Some(refresh_url.into()), + scopes, + extensions: Default::default(), + } + } +} + +/// Password [`Flow`] configuration for [`OAuth2`]. +#[non_exhaustive] +#[derive(Serialize, Deserialize, Clone, PartialEq, Eq)] +#[serde(rename_all = "camelCase")] +#[cfg_attr(feature = "debug", derive(Debug))] +pub struct Password { + /// Token url for this OAuth2 flow. OAuth2 standard requires TLS. + pub token_url: String, + + /// Optional refresh token url. + #[serde(skip_serializing_if = "Option::is_none")] + pub refresh_url: Option, + + /// Scopes required by the flow. + #[serde(flatten)] + pub scopes: Scopes, + + /// Optional extensions "x-something". + #[serde(skip_serializing_if = "Option::is_none", flatten)] + pub extensions: Option, +} + +impl Password { + /// Construct a new password oauth flow. + /// + /// Accepts two arguments: one which is a token url and + /// two a map of scopes for oauth flow. + /// + /// # Examples + /// + /// Create new password flow with scopes. + /// ```rust + /// # use fastapi::openapi::security::{Password, Scopes}; + /// Password::new( + /// "https://localhost/token", + /// Scopes::from_iter([ + /// ("edit:items", "edit my items"), + /// ("read:items", "read my items") + /// ]), + /// ); + /// ``` + /// + /// Create new password flow without any scopes. + /// ```rust + /// # use fastapi::openapi::security::{Password, Scopes}; + /// Password::new( + /// "https://localhost/token", + /// Scopes::new(), + /// ); + /// ``` + pub fn new>(token_url: S, scopes: Scopes) -> Self { + Self { + token_url: token_url.into(), + refresh_url: None, + scopes, + extensions: Default::default(), + } + } + + /// Construct a new password oauth flow with additional refresh url. + /// + /// This is essentially same as [`Password::new`] but allows defining third parameter for `refresh_url` + /// for fetching refresh tokens. + /// + /// # Examples + /// + /// Create new password flow with refresh url. + /// ```rust + /// # use fastapi::openapi::security::{Password, Scopes}; + /// Password::with_refresh_url( + /// "https://localhost/token", + /// Scopes::from_iter([ + /// ("edit:items", "edit my items"), + /// ("read:items", "read my items") + /// ]), + /// "https://localhost/refres-token" + /// ); + /// ``` + pub fn with_refresh_url>(token_url: S, scopes: Scopes, refresh_url: S) -> Self { + Self { + token_url: token_url.into(), + refresh_url: Some(refresh_url.into()), + scopes, + extensions: Default::default(), + } + } +} + +/// Client credentials [`Flow`] configuration for [`OAuth2`]. +#[non_exhaustive] +#[derive(Serialize, Deserialize, Clone, PartialEq, Eq)] +#[serde(rename_all = "camelCase")] +#[cfg_attr(feature = "debug", derive(Debug))] +pub struct ClientCredentials { + /// Token url used for [`ClientCredentials`] flow. OAuth2 standard requires TLS. + pub token_url: String, + + /// Optional refresh token url. + #[serde(skip_serializing_if = "Option::is_none")] + pub refresh_url: Option, + + /// Scopes required by the flow. + #[serde(flatten)] + pub scopes: Scopes, + + /// Optional extensions "x-something". + #[serde(skip_serializing_if = "Option::is_none", flatten)] + pub extensions: Option, +} + +impl ClientCredentials { + /// Construct a new client credentials oauth flow. + /// + /// Accepts two arguments: one which is a token url and + /// two a map of scopes for oauth flow. + /// + /// # Examples + /// + /// Create new client credentials flow with scopes. + /// ```rust + /// # use fastapi::openapi::security::{ClientCredentials, Scopes}; + /// ClientCredentials::new( + /// "https://localhost/token", + /// Scopes::from_iter([ + /// ("edit:items", "edit my items"), + /// ("read:items", "read my items") + /// ]), + /// ); + /// ``` + /// + /// Create new client credentials flow without any scopes. + /// ```rust + /// # use fastapi::openapi::security::{ClientCredentials, Scopes}; + /// ClientCredentials::new( + /// "https://localhost/token", + /// Scopes::new(), + /// ); + /// ``` + pub fn new>(token_url: S, scopes: Scopes) -> Self { + Self { + token_url: token_url.into(), + refresh_url: None, + scopes, + extensions: Default::default(), + } + } + + /// Construct a new client credentials oauth flow with additional refresh url. + /// + /// This is essentially same as [`ClientCredentials::new`] but allows defining third parameter for + /// `refresh_url`. + /// + /// # Examples + /// + /// Create new client credentials for with refresh url. + /// ```rust + /// # use fastapi::openapi::security::{ClientCredentials, Scopes}; + /// ClientCredentials::with_refresh_url( + /// "https://localhost/token", + /// Scopes::from_iter([ + /// ("edit:items", "edit my items"), + /// ("read:items", "read my items") + /// ]), + /// "https://localhost/refresh-url" + /// ); + /// ``` + pub fn with_refresh_url>(token_url: S, scopes: Scopes, refresh_url: S) -> Self { + Self { + token_url: token_url.into(), + refresh_url: Some(refresh_url.into()), + scopes, + extensions: Default::default(), + } + } +} + +/// [`OAuth2`] flow scopes object defines required permissions for oauth flow. +/// +/// Scopes must be given to oauth2 flow but depending on need one of few initialization methods +/// could be used. +/// +/// * Create empty map of scopes you can use [`Scopes::new`]. +/// * Create map with only one scope you can use [`Scopes::one`]. +/// * Create multiple scopes from iterator with [`Scopes::from_iter`]. +/// +/// # Examples +/// +/// Create empty map of scopes. +/// ```rust +/// # use fastapi::openapi::security::Scopes; +/// let scopes = Scopes::new(); +/// ``` +/// +/// Create [`Scopes`] holding one scope. +/// ```rust +/// # use fastapi::openapi::security::Scopes; +/// let scopes = Scopes::one("edit:item", "edit pets"); +/// ``` +/// +/// Create map of scopes from iterator. +/// ```rust +/// # use fastapi::openapi::security::Scopes; +/// let scopes = Scopes::from_iter([ +/// ("edit:items", "edit my items"), +/// ("read:items", "read my items") +/// ]); +/// ``` +#[derive(Default, Serialize, Deserialize, Clone, PartialEq, Eq)] +#[cfg_attr(feature = "debug", derive(Debug))] +pub struct Scopes { + scopes: BTreeMap, +} + +impl Scopes { + /// Construct new [`Scopes`] with empty map of scopes. This is useful if oauth flow does not need + /// any permission scopes. + /// + /// # Examples + /// + /// Create empty map of scopes. + /// ```rust + /// # use fastapi::openapi::security::Scopes; + /// let scopes = Scopes::new(); + /// ``` + pub fn new() -> Self { + Self { + ..Default::default() + } + } + + /// Construct new [`Scopes`] with holding one scope. + /// + /// * `scope` Is be the permission required. + /// * `description` Short description about the permission. + /// + /// # Examples + /// + /// Create map of scopes with one scope item. + /// ```rust + /// # use fastapi::openapi::security::Scopes; + /// let scopes = Scopes::one("edit:item", "edit items"); + /// ``` + pub fn one>(scope: S, description: S) -> Self { + Self { + scopes: BTreeMap::from_iter(iter::once_with(|| (scope.into(), description.into()))), + } + } +} + +impl FromIterator<(I, I)> for Scopes +where + I: Into, +{ + fn from_iter>(iter: T) -> Self { + Self { + scopes: iter + .into_iter() + .map(|(key, value)| (key.into(), value.into())) + .collect(), + } + } +} + +#[cfg(test)] +mod tests { + use super::*; + + macro_rules! test_fn { + ($name:ident: $schema:expr; $expected:literal) => { + #[test] + fn $name() { + let value = serde_json::to_value($schema).unwrap(); + let expected_value: serde_json::Value = serde_json::from_str($expected).unwrap(); + + assert_eq!( + value, + expected_value, + "testing serializing \"{}\": \nactual:\n{}\nexpected:\n{}", + stringify!($name), + value, + expected_value + ); + + println!("{}", &serde_json::to_string_pretty(&$schema).unwrap()); + } + }; + } + + test_fn! { + security_scheme_correct_http_bearer_json: + SecurityScheme::Http( + HttpBuilder::new().scheme(HttpAuthScheme::Bearer).bearer_format("JWT").build() + ); + r###"{ + "type": "http", + "scheme": "bearer", + "bearerFormat": "JWT" +}"### + } + + test_fn! { + security_scheme_correct_basic_auth: + SecurityScheme::Http(Http::new(HttpAuthScheme::Basic)); + r###"{ + "type": "http", + "scheme": "basic" +}"### + } + + test_fn! { + security_scheme_correct_digest_auth: + SecurityScheme::Http(Http::new(HttpAuthScheme::Digest)); + r###"{ + "type": "http", + "scheme": "digest" +}"### + } + + test_fn! { + security_scheme_correct_hoba_auth: + SecurityScheme::Http(Http::new(HttpAuthScheme::Hoba)); + r###"{ + "type": "http", + "scheme": "hoba" +}"### + } + + test_fn! { + security_scheme_correct_mutual_auth: + SecurityScheme::Http(Http::new(HttpAuthScheme::Mutual)); + r###"{ + "type": "http", + "scheme": "mutual" +}"### + } + + test_fn! { + security_scheme_correct_negotiate_auth: + SecurityScheme::Http(Http::new(HttpAuthScheme::Negotiate)); + r###"{ + "type": "http", + "scheme": "negotiate" +}"### + } + + test_fn! { + security_scheme_correct_oauth_auth: + SecurityScheme::Http(Http::new(HttpAuthScheme::OAuth)); + r###"{ + "type": "http", + "scheme": "oauth" +}"### + } + + test_fn! { + security_scheme_correct_scram_sha1_auth: + SecurityScheme::Http(Http::new(HttpAuthScheme::ScramSha1)); + r###"{ + "type": "http", + "scheme": "scram-sha-1" +}"### + } + + test_fn! { + security_scheme_correct_scram_sha256_auth: + SecurityScheme::Http(Http::new(HttpAuthScheme::ScramSha256)); + r###"{ + "type": "http", + "scheme": "scram-sha-256" +}"### + } + + test_fn! { + security_scheme_correct_api_key_cookie_auth: + SecurityScheme::ApiKey(ApiKey::Cookie(ApiKeyValue::new(String::from("api_key")))); + r###"{ + "type": "apiKey", + "name": "api_key", + "in": "cookie" +}"### + } + + test_fn! { + security_scheme_correct_api_key_header_auth: + SecurityScheme::ApiKey(ApiKey::Header(ApiKeyValue::new("api_key"))); + r###"{ + "type": "apiKey", + "name": "api_key", + "in": "header" +}"### + } + + test_fn! { + security_scheme_correct_api_key_query_auth: + SecurityScheme::ApiKey(ApiKey::Query(ApiKeyValue::new(String::from("api_key")))); + r###"{ + "type": "apiKey", + "name": "api_key", + "in": "query" +}"### + } + + test_fn! { + security_scheme_correct_open_id_connect_auth: + SecurityScheme::OpenIdConnect(OpenIdConnect::new("https://localhost/openid")); + r###"{ + "type": "openIdConnect", + "openIdConnectUrl": "https://localhost/openid" +}"### + } + + test_fn! { + security_scheme_correct_oauth2_implicit: + SecurityScheme::OAuth2( + OAuth2::with_description([Flow::Implicit( + Implicit::new( + "https://localhost/auth/dialog", + Scopes::from_iter([ + ("edit:items", "edit my items"), + ("read:items", "read my items") + ]), + ), + )], "my oauth2 flow") + ); + r###"{ + "type": "oauth2", + "flows": { + "implicit": { + "authorizationUrl": "https://localhost/auth/dialog", + "scopes": { + "edit:items": "edit my items", + "read:items": "read my items" + } + } + }, + "description": "my oauth2 flow" +}"### + } + + test_fn! { + security_scheme_correct_oauth2_password: + SecurityScheme::OAuth2( + OAuth2::with_description([Flow::Password( + Password::with_refresh_url( + "https://localhost/oauth/token", + Scopes::from_iter([ + ("edit:items", "edit my items"), + ("read:items", "read my items") + ]), + "https://localhost/refresh/token" + ), + )], "my oauth2 flow") + ); + r###"{ + "type": "oauth2", + "flows": { + "password": { + "tokenUrl": "https://localhost/oauth/token", + "refreshUrl": "https://localhost/refresh/token", + "scopes": { + "edit:items": "edit my items", + "read:items": "read my items" + } + } + }, + "description": "my oauth2 flow" +}"### + } + + test_fn! { + security_scheme_correct_oauth2_client_credentials: + SecurityScheme::OAuth2( + OAuth2::new([Flow::ClientCredentials( + ClientCredentials::with_refresh_url( + "https://localhost/oauth/token", + Scopes::from_iter([ + ("edit:items", "edit my items"), + ("read:items", "read my items") + ]), + "https://localhost/refresh/token" + ), + )]) + ); + r###"{ + "type": "oauth2", + "flows": { + "clientCredentials": { + "tokenUrl": "https://localhost/oauth/token", + "refreshUrl": "https://localhost/refresh/token", + "scopes": { + "edit:items": "edit my items", + "read:items": "read my items" + } + } + } +}"### + } + + test_fn! { + security_scheme_correct_oauth2_authorization_code: + SecurityScheme::OAuth2( + OAuth2::new([Flow::AuthorizationCode( + AuthorizationCode::with_refresh_url( + "https://localhost/authorization/token", + "https://localhost/token/url", + Scopes::from_iter([ + ("edit:items", "edit my items"), + ("read:items", "read my items") + ]), + "https://localhost/refresh/token" + ), + )]) + ); + r###"{ + "type": "oauth2", + "flows": { + "authorizationCode": { + "authorizationUrl": "https://localhost/authorization/token", + "tokenUrl": "https://localhost/token/url", + "refreshUrl": "https://localhost/refresh/token", + "scopes": { + "edit:items": "edit my items", + "read:items": "read my items" + } + } + } +}"### + } + + test_fn! { + security_scheme_correct_oauth2_authorization_code_no_scopes: + SecurityScheme::OAuth2( + OAuth2::new([Flow::AuthorizationCode( + AuthorizationCode::with_refresh_url( + "https://localhost/authorization/token", + "https://localhost/token/url", + Scopes::new(), + "https://localhost/refresh/token" + ), + )]) + ); + r###"{ + "type": "oauth2", + "flows": { + "authorizationCode": { + "authorizationUrl": "https://localhost/authorization/token", + "tokenUrl": "https://localhost/token/url", + "refreshUrl": "https://localhost/refresh/token", + "scopes": {} + } + } +}"### + } + + test_fn! { + security_scheme_correct_mutual_tls: + SecurityScheme::MutualTls { + description: Some(String::from("authorization is performed with client side certificate")), + extensions: None, + }; + r###"{ + "type": "mutualTLS", + "description": "authorization is performed with client side certificate" +}"### + } +} diff --git a/fastapi/src/openapi/server.rs b/fastapi/src/openapi/server.rs new file mode 100644 index 0000000..0481024 --- /dev/null +++ b/fastapi/src/openapi/server.rs @@ -0,0 +1,262 @@ +//! Implements [OpenAPI Server Object][server] types to configure target servers. +//! +//! OpenAPI will implicitly add [`Server`] with `url = "/"` to [`OpenApi`][openapi] when no servers +//! are defined. +//! +//! [`Server`] can be used to alter connection url for _**path operations**_. It can be a +//! relative path e.g `/api/v1` or valid http url e.g. `http://alternative.api.com/api/v1`. +//! +//! Relative path will append to the **sever address** so the connection url for _**path operations**_ +//! will become `server address + relative path`. +//! +//! Optionally it also supports parameter substitution with `{variable}` syntax. +//! +//! See [`Modify`][modify] trait for details how add servers to [`OpenApi`][openapi]. +//! +//! # Examples +//! +//! Create new server with relative path. +//! ```rust +//! # use fastapi::openapi::server::Server; +//! Server::new("/api/v1"); +//! ``` +//! +//! Create server with custom url using a builder. +//! ```rust +//! # use fastapi::openapi::server::ServerBuilder; +//! ServerBuilder::new().url("https://alternative.api.url.test/api").build(); +//! ``` +//! +//! Create server with builder and variable substitution. +//! ```rust +//! # use fastapi::openapi::server::{ServerBuilder, ServerVariableBuilder}; +//! ServerBuilder::new().url("/api/{version}/{username}") +//! .parameter("version", ServerVariableBuilder::new() +//! .enum_values(Some(["v1", "v2"])) +//! .default_value("v1")) +//! .parameter("username", ServerVariableBuilder::new() +//! .default_value("the_user")).build(); +//! ``` +//! +//! [server]: https://spec.openapis.org/oas/latest.html#server-object +//! [openapi]: ../struct.OpenApi.html +//! [modify]: ../../trait.Modify.html +use std::{collections::BTreeMap, iter}; + +use serde::{Deserialize, Serialize}; + +use super::extensions::Extensions; +use super::{builder, set_value}; + +builder! { + ServerBuilder; + + /// Represents target server object. It can be used to alter server connection for + /// _**path operations**_. + /// + /// By default OpenAPI will implicitly implement [`Server`] with `url = "/"` if no servers is provided to + /// the [`OpenApi`][openapi]. + /// + /// [openapi]: ../struct.OpenApi.html + #[non_exhaustive] + #[derive(Serialize, Deserialize, Default, Clone, PartialEq, Eq)] + #[cfg_attr(feature = "debug", derive(Debug))] + #[serde(rename_all = "camelCase")] + pub struct Server { + /// Target url of the [`Server`]. It can be valid http url or relative path. + /// + /// Url also supports variable substitution with `{variable}` syntax. The substitutions + /// then can be configured with [`Server::variables`] map. + pub url: String, + + /// Optional description describing the target server url. Description supports markdown syntax. + #[serde(skip_serializing_if = "Option::is_none")] + pub description: Option, + + /// Optional map of variable name and its substitution value used in [`Server::url`]. + #[serde(skip_serializing_if = "Option::is_none")] + pub variables: Option>, + + /// Optional extensions "x-something". + #[serde(skip_serializing_if = "Option::is_none", flatten)] + pub extensions: Option, + } +} + +impl Server { + /// Construct a new [`Server`] with given url. Url can be valid http url or context path of the url. + /// + /// If url is valid http url then all path operation request's will be forwarded to the selected [`Server`]. + /// + /// If url is path of url e.g. `/api/v1` then the url will be appended to the servers address and the + /// operations will be forwarded to location `server address + url`. + /// + /// + /// # Examples + /// + /// Create new server with url path. + /// ```rust + /// # use fastapi::openapi::server::Server; + /// Server::new("/api/v1"); + /// ``` + /// + /// Create new server with alternative server. + /// ```rust + /// # use fastapi::openapi::server::Server; + /// Server::new("https://alternative.pet-api.test/api/v1"); + /// ``` + pub fn new>(url: S) -> Self { + Self { + url: url.into(), + ..Default::default() + } + } +} + +impl ServerBuilder { + /// Add url to the target [`Server`]. + pub fn url>(mut self, url: U) -> Self { + set_value!(self url url.into()) + } + + /// Add or change description of the [`Server`]. + pub fn description>(mut self, description: Option) -> Self { + set_value!(self description description.map(|description| description.into())) + } + + /// Add parameter to [`Server`] which is used to substitute values in [`Server::url`]. + /// + /// * `name` Defines name of the parameter which is being substituted within the url. If url has + /// `{username}` substitution then the name should be `username`. + /// * `parameter` Use [`ServerVariableBuilder`] to define how the parameter is being substituted + /// within the url. + pub fn parameter, V: Into>( + mut self, + name: N, + variable: V, + ) -> Self { + match self.variables { + Some(ref mut variables) => { + variables.insert(name.into(), variable.into()); + } + None => { + self.variables = Some(BTreeMap::from_iter(iter::once(( + name.into(), + variable.into(), + )))) + } + } + + self + } + + /// Add openapi extensions (x-something) of the API. + pub fn extensions(mut self, extensions: Option) -> Self { + set_value!(self extensions extensions) + } +} + +builder! { + ServerVariableBuilder; + + /// Implements [OpenAPI Server Variable][server_variable] used to substitute variables in [`Server::url`]. + /// + /// [server_variable]: https://spec.openapis.org/oas/latest.html#server-variable-object + #[non_exhaustive] + #[derive(Serialize, Deserialize, Default, Clone, PartialEq, Eq)] + #[cfg_attr(feature = "debug", derive(Debug))] + pub struct ServerVariable { + /// Default value used to substitute parameter if no other value is being provided. + #[serde(rename = "default")] + pub default_value: String, + + /// Optional description describing the variable of substitution. Markdown syntax is supported. + #[serde(skip_serializing_if = "Option::is_none")] + pub description: Option, + + /// Enum values can be used to limit possible options for substitution. If enum values is used + /// the [`ServerVariable::default_value`] must contain one of the enum values. + #[serde(rename = "enum", skip_serializing_if = "Option::is_none")] + pub enum_values: Option>, + + /// Optional extensions "x-something". + #[serde(skip_serializing_if = "Option::is_none", flatten)] + pub extensions: Option, + } +} + +impl ServerVariableBuilder { + /// Add default value for substitution. + pub fn default_value>(mut self, default_value: S) -> Self { + set_value!(self default_value default_value.into()) + } + + /// Add or change description of substituted parameter. + pub fn description>(mut self, description: Option) -> Self { + set_value!(self description description.map(|description| description.into())) + } + + /// Add or change possible values used to substitute parameter. + pub fn enum_values, V: Into>( + mut self, + enum_values: Option, + ) -> Self { + set_value!(self enum_values enum_values + .map(|enum_values| enum_values.into_iter().map(|value| value.into()).collect())) + } + + /// Add openapi extensions (x-something) of the API. + pub fn extensions(mut self, extensions: Option) -> Self { + set_value!(self extensions extensions) + } +} + +#[cfg(test)] +mod tests { + use super::*; + + macro_rules! test_fn { + ($name:ident: $schema:expr; $expected:literal) => { + #[test] + fn $name() { + let value = serde_json::to_value($schema).unwrap(); + let expected_value: serde_json::Value = serde_json::from_str($expected).unwrap(); + + assert_eq!( + value, + expected_value, + "testing serializing \"{}\": \nactual:\n{}\nexpected:\n{}", + stringify!($name), + value, + expected_value + ); + + println!("{}", &serde_json::to_string_pretty(&$schema).unwrap()); + } + }; + } + + test_fn! { + create_server_with_builder_and_variable_substitution: + ServerBuilder::new().url("/api/{version}/{username}") + .parameter("version", ServerVariableBuilder::new() + .enum_values(Some(["v1", "v2"])) + .description(Some("api version")) + .default_value("v1")) + .parameter("username", ServerVariableBuilder::new() + .default_value("the_user")).build(); + r###"{ + "url": "/api/{version}/{username}", + "variables": { + "version": { + "enum": ["v1", "v2"], + "default": "v1", + "description": "api version" + }, + "username": { + "default": "the_user" + } + } +}"### + } +} diff --git a/fastapi/src/openapi/tag.rs b/fastapi/src/openapi/tag.rs new file mode 100644 index 0000000..9ea2d18 --- /dev/null +++ b/fastapi/src/openapi/tag.rs @@ -0,0 +1,68 @@ +//! Implements [OpenAPI Tag Object][tag] types. +//! +//! [tag]: https://spec.openapis.org/oas/latest.html#tag-object +use serde::{Deserialize, Serialize}; + +use super::{builder, extensions::Extensions, external_docs::ExternalDocs, set_value}; + +builder! { + TagBuilder; + + /// Implements [OpenAPI Tag Object][tag]. + /// + /// Tag can be used to provide additional metadata for tags used by path operations. + /// + /// [tag]: https://spec.openapis.org/oas/latest.html#tag-object + #[non_exhaustive] + #[derive(Serialize, Deserialize, Default, Clone, PartialEq, Eq)] + #[cfg_attr(feature = "debug", derive(Debug))] + #[serde(rename_all = "camelCase")] + pub struct Tag { + /// Name of the tag. Should match to tag of **operation**. + pub name: String, + + /// Additional description for the tag shown in the document. + #[serde(skip_serializing_if = "Option::is_none")] + pub description: Option, + + /// Additional external documentation for the tag. + #[serde(skip_serializing_if = "Option::is_none")] + pub external_docs: Option, + + /// Optional extensions "x-something". + #[serde(skip_serializing_if = "Option::is_none", flatten)] + pub extensions: Option, + } +} + +impl Tag { + /// Construct a new [`Tag`] with given name. + pub fn new>(name: S) -> Self { + Self { + name: name.as_ref().to_string(), + ..Default::default() + } + } +} + +impl TagBuilder { + /// Add name of the tag. + pub fn name>(mut self, name: I) -> Self { + set_value!(self name name.into()) + } + + /// Add additional description for the tag. + pub fn description>(mut self, description: Option) -> Self { + set_value!(self description description.map(|description| description.into())) + } + + /// Add additional external documentation for the tag. + pub fn external_docs(mut self, external_docs: Option) -> Self { + set_value!(self external_docs external_docs) + } + + /// Add openapi extensions (x-something) to the tag. + pub fn extensions(mut self, extensions: Option) -> Self { + set_value!(self extensions extensions) + } +} diff --git a/fastapi/src/openapi/testdata/expected_openapi_minimal.json b/fastapi/src/openapi/testdata/expected_openapi_minimal.json new file mode 100644 index 0000000..ce3fccb --- /dev/null +++ b/fastapi/src/openapi/testdata/expected_openapi_minimal.json @@ -0,0 +1,13 @@ +{ + "openapi": "3.1.0", + "info": { + "title": "My api", + "description": "My api description", + "license": { + "name": "MIT", + "url": "http://mit.licence" + }, + "version": "1.0.0" + }, + "paths": {} +} \ No newline at end of file diff --git a/fastapi/src/openapi/testdata/expected_openapi_with_paths.json b/fastapi/src/openapi/testdata/expected_openapi_with_paths.json new file mode 100644 index 0000000..c18ab68 --- /dev/null +++ b/fastapi/src/openapi/testdata/expected_openapi_with_paths.json @@ -0,0 +1,34 @@ +{ + "openapi": "3.1.0", + "info": { + "title": "My big api", + "version": "1.1.0" + }, + "paths": { + "/api/v1/users": { + "get": { + "responses": { + "200": { + "description": "Get users list" + } + } + }, + "post": { + "responses": { + "200": { + "description": "Post new user" + } + } + } + }, + "/api/v1/users/{id}": { + "get": { + "responses": { + "200": { + "description": "Get user by id" + } + } + } + } + } +} \ No newline at end of file diff --git a/fastapi/src/openapi/xml.rs b/fastapi/src/openapi/xml.rs new file mode 100644 index 0000000..a54b0a2 --- /dev/null +++ b/fastapi/src/openapi/xml.rs @@ -0,0 +1,119 @@ +//! Implements [OpenAPI Xml Object][xml_object] types. +//! +//! [xml_object]: https://spec.openapis.org/oas/latest.html#xml-object +use std::borrow::Cow; + +use serde::{Deserialize, Serialize}; + +use super::{builder, set_value}; + +builder! { + /// # Examples + /// + /// Create [`Xml`] with [`XmlBuilder`]. + /// ```rust + /// # use fastapi::openapi::xml::XmlBuilder; + /// let xml = XmlBuilder::new() + /// .name(Some("some_name")) + /// .prefix(Some("prefix")) + /// .build(); + /// ``` + XmlBuilder; + /// Implements [OpenAPI Xml Object][xml_object]. + /// + /// Can be used to modify xml output format of specific [OpenAPI Schema Object][schema_object] which are + /// implemented in [`schema`][schema] module. + /// + /// [xml_object]: https://spec.openapis.org/oas/latest.html#xml-object + /// [schema_object]: https://spec.openapis.org/oas/latest.html#schema-object + /// [schema]: ../schema/index.html + #[non_exhaustive] + #[derive(Serialize, Deserialize, Default, Clone, PartialEq, Eq)] + #[cfg_attr(feature = "debug", derive(Debug))] + pub struct Xml { + /// Used to replace the name of attribute or type used in schema property. + /// When used with [`Xml::wrapped`] attribute the name will be used as a wrapper name + /// for wrapped array instead of the item or type name. + #[serde(skip_serializing_if = "Option::is_none")] + pub name: Option>, + + /// Valid uri definition of namespace used in xml. + #[serde(skip_serializing_if = "Option::is_none")] + pub namespace: Option>, + + /// Prefix for xml element [`Xml::name`]. + #[serde(skip_serializing_if = "Option::is_none")] + pub prefix: Option>, + + /// Flag deciding will this attribute translate to element attribute instead of xml element. + #[serde(skip_serializing_if = "Option::is_none")] + pub attribute: Option, + + /// Flag only usable with array definition. If set to true the output xml will wrap the array of items + /// `` instead of unwrapped ``. + #[serde(skip_serializing_if = "Option::is_none")] + pub wrapped: Option, + } +} + +impl Xml { + /// Construct a new [`Xml`] object. + pub fn new() -> Self { + Self { + ..Default::default() + } + } +} + +impl XmlBuilder { + /// Add [`Xml::name`] to xml object. + /// + /// Builder style chainable consuming add name method. + pub fn name>>(mut self, name: Option) -> Self { + set_value!(self name name.map(|name| name.into())) + } + + /// Add [`Xml::namespace`] to xml object. + /// + /// Builder style chainable consuming add namespace method. + pub fn namespace>>(mut self, namespace: Option) -> Self { + set_value!(self namespace namespace.map(|namespace| namespace.into())) + } + + /// Add [`Xml::prefix`] to xml object. + /// + /// Builder style chainable consuming add prefix method. + pub fn prefix>>(mut self, prefix: Option) -> Self { + set_value!(self prefix prefix.map(|prefix| prefix.into())) + } + + /// Mark [`Xml`] object as attribute. See [`Xml::attribute`]. + /// + /// Builder style chainable consuming add attribute method. + pub fn attribute(mut self, attribute: Option) -> Self { + set_value!(self attribute attribute) + } + + /// Mark [`Xml`] object wrapped. See [`Xml::wrapped`]. + /// + /// Builder style chainable consuming add wrapped method. + pub fn wrapped(mut self, wrapped: Option) -> Self { + set_value!(self wrapped wrapped) + } +} + +#[cfg(test)] +mod tests { + use super::Xml; + + #[test] + fn xml_new() { + let xml = Xml::new(); + + assert!(xml.name.is_none()); + assert!(xml.namespace.is_none()); + assert!(xml.prefix.is_none()); + assert!(xml.attribute.is_none()); + assert!(xml.wrapped.is_none()); + } +} diff --git a/scripts/coverage.sh b/scripts/coverage.sh old mode 100644 new mode 100755 diff --git a/scripts/doc.sh b/scripts/doc.sh old mode 100644 new mode 100755 diff --git a/scripts/test.sh b/scripts/test.sh old mode 100644 new mode 100755 diff --git a/scripts/update-swagger-ui.sh b/scripts/update-swagger-ui.sh old mode 100644 new mode 100755 diff --git a/scripts/validate-examples.sh b/scripts/validate-examples.sh old mode 100644 new mode 100755

*mU(K!PyLnW9YKRIc$lAg}bS0zC8Fg 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⪻Z4Ym&xvO_beK@qZ-_i?2xfF{3)w_aK? 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