)]}'
{"id":"openstack%2Fcodegenerator~1000424","triplet_id":"openstack%2Fcodegenerator~master~I0c6a54229407f180ac8c676ae6c6313ca79cf61f","project":"openstack/codegenerator","branch":"master","hashtags":[],"change_id":"I0c6a54229407f180ac8c676ae6c6313ca79cf61f","subject":"feat(rust): emit BODY_SCHEMA const on generated request structs","status":"MERGED","created":"2026-08-11 10:23:37.000000000","updated":"2026-08-11 12:49:17.000000000","submitted":"2026-08-11 12:48:16.000000000","submitter":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"total_comment_count":0,"unresolved_comment_count":0,"has_review_started":true,"submission_id":"1000424","meta_rev_id":"dd9d358d47827591e042d595fe4f65b219cb7ead","_number":1000424,"virtual_id_number":1000424,"owner":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"actions":{},"labels":{"Verified":{"approved":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"all":[{"value":0,"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},{"tag":"autogenerated:zuul:gate","value":2,"date":"2026-08-11 12:48:15.000000000","permitted_voting_range":{"min":2,"max":2},"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}],"values":{"-2":"Fails","-1":"Doesn\u0027t seem to work"," 0":"No score","+1":"Works for me","+2":"Verified"},"description":"","default_value":0,"optional":true},"Code-Review":{"approved":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"all":[{"value":2,"date":"2026-08-11 11:55:37.000000000","permitted_voting_range":{"min":2,"max":2},"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},{"value":0,"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}],"values":{"-2":"Do not merge","-1":"This patch needs further work before it can be merged"," 0":"No score","+1":"Looks good to me, but someone else must approve","+2":"Looks good to me (core reviewer)"},"description":"","default_value":0,"optional":true},"Workflow":{"approved":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"all":[{"value":1,"date":"2026-08-11 11:55:37.000000000","permitted_voting_range":{"min":1,"max":1},"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},{"value":0,"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}],"values":{"-1":"Work in progress"," 0":"Ready for reviews","+1":"Approved"},"description":"","default_value":0,"optional":true}},"removable_reviewers":[],"reviewers":{"REVIEWER":[{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"}]},"pending_reviewers":{},"reviewer_updates":[{"updated":"2026-08-11 11:12:30.000000000","updated_by":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"reviewer":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"state":"REVIEWER"}],"messages":[{"id":"c3c13c663140ea05ae3ea719f9a9ef0083f3ea1a","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"date":"2026-08-11 10:23:37.000000000","message":"Uploaded patch set 1.","accounts_in_message":[],"_revision_number":1},{"id":"f920304d024ab8dd5caf09485b811f2f612b7fe2","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-08-11 11:12:30.000000000","message":"Patch Set 1: Verified+1\n\nBuild succeeded (check pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/f1fbb6918dac4a94884c2175949858c2\n\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/c71a5cce5dca479e9fcafba1b3de2729 : SUCCESS in 2m 51s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/2065053f1a0c4621a1a53fed975e8b12 : SUCCESS in 3m 14s\n- openstack-tox-py311 https://zuul.opendev.org/t/openstack/build/5140c7d30a0041219819f58fce681514 : SUCCESS in 2m 45s\n- codegenerator-openapi-baremetal-tips-with-api-ref https://zuul.opendev.org/t/openstack/build/deef11c13c254cab9fe873ea1da6a2d5 : SUCCESS in 5m 40s\n- codegenerator-openapi-block-storage-tips-with-api-ref https://zuul.opendev.org/t/openstack/build/05c2f817e4554662b2124e80e9e1ae2d : SUCCESS in 5m 22s\n- codegenerator-openapi-compute-tips-with-api-ref https://zuul.opendev.org/t/openstack/build/1c43b23b54ad49ea8cad5dfeb7d66dee : SUCCESS in 7m 32s\n- codegenerator-openapi-container-infrastructure-management-tips-with-api-ref https://zuul.opendev.org/t/openstack/build/70f2680a241c4a149a79292e5cfd5716 : SUCCESS in 5m 23s\n- codegenerator-openapi-dns-tips-with-api-ref https://zuul.opendev.org/t/openstack/build/e1feb6e7b2164d6a88f6ee0c7993a8aa : SUCCESS in 6m 59s\n- codegenerator-openapi-identity-tips-with-api-ref https://zuul.opendev.org/t/openstack/build/10b931bc8c6f44acb8fe19dccdd101d1 : SUCCESS in 7m 52s\n- codegenerator-openapi-identity-tips https://zuul.opendev.org/t/openstack/build/566f9f58a4c8413c9ad54e4036da5183 : SUCCESS in 4m 39s\n- codegenerator-openapi-image-tips-with-api-ref https://zuul.opendev.org/t/openstack/build/8e2ca7e24e75492e8b393f6ea81b88a6 : SUCCESS in 6m 12s\n- codegenerator-openapi-key-manager-tips https://zuul.opendev.org/t/openstack/build/d374baedc6a24c928a73f1e8d33b3630 : SUCCESS in 4m 53s\n- codegenerator-openapi-load-balancing-tips-with-api-ref https://zuul.opendev.org/t/openstack/build/bd2672c6e9dc409c984aa94e3ad285f8 : SUCCESS in 5m 51s\n- codegenerator-openapi-network-tips-with-api-ref https://zuul.opendev.org/t/openstack/build/17c62a424a7c4f96a49ae32ef636953b : SUCCESS in 8m 03s\n- codegenerator-openapi-object-store-static https://zuul.opendev.org/t/openstack/build/2114232a15c2465aaba8c146c7486403 : SUCCESS in 1m 32s\n- codegenerator-openapi-placement-tips-with-api-ref https://zuul.opendev.org/t/openstack/build/098a503fa83e4cf4a6c2f4327db38df2 : SUCCESS in 4m 50s\n- codegenerator-openapi-shared-file-system-tips-with-api-ref https://zuul.opendev.org/t/openstack/build/e8d814a6b4ff403b8246f526b200ee15 : SUCCESS in 6m 05s\n- codegenerator-tox-publish-openapi-specs https://zuul.opendev.org/t/openstack/build/c840f3b19245437a892977bfcea4b045 : SUCCESS in 4m 16s\n- codegenerator-rust-all https://zuul.opendev.org/t/openstack/build/2ffba2e73fae48478fba2c9f257cb528 : SUCCESS in 24m 38s","accounts_in_message":[],"_revision_number":1},{"id":"5199c8790d9e3574455c98194ef9f9db81588bbd","author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"date":"2026-08-11 11:55:37.000000000","message":"Patch Set 1: Code-Review+2 Workflow+1","accounts_in_message":[],"_revision_number":1},{"id":"28c28e26e8dfd8397a1497b001fb52a85cccc9c4","tag":"autogenerated:zuul:gate","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-08-11 11:56:07.000000000","message":"Patch Set 1: -Verified\n\nStarting gate jobs.","accounts_in_message":[],"_revision_number":1},{"id":"6e6be9c1bdda25a75cb295b1f42dd72d0d868835","tag":"autogenerated:zuul:gate","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-08-11 12:48:15.000000000","message":"Patch Set 1: Verified+2\n\nBuild succeeded (gate pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/8cb1cc7227d74bc0b18ced1592bb13a5\n\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/1222ec2df08345f080ab1635ad69048d : SUCCESS in 2m 31s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/01fb29afb5594ff5b8471f1e259e73a9 : SUCCESS in 2m 44s\n- openstack-tox-py311 https://zuul.opendev.org/t/openstack/build/e25f3afadd19400aabfad5da2dbfe93a : SUCCESS in 3m 00s\n- codegenerator-openapi-baremetal-tips-with-api-ref https://zuul.opendev.org/t/openstack/build/655412d51f594a99a9f809dcdf234b94 : SUCCESS in 6m 09s\n- codegenerator-openapi-block-storage-tips-with-api-ref https://zuul.opendev.org/t/openstack/build/72d8013ded8d4039ab6122c1808f0984 : SUCCESS in 3m 57s\n- codegenerator-openapi-compute-tips-with-api-ref https://zuul.opendev.org/t/openstack/build/9fe0bbe484d54f45b97a1754611239c5 : SUCCESS in 7m 20s\n- codegenerator-openapi-container-infrastructure-management-tips-with-api-ref https://zuul.opendev.org/t/openstack/build/66ab0e025af848509b5df9000f3b88ce : SUCCESS in 3m 19s\n- codegenerator-openapi-dns-tips-with-api-ref https://zuul.opendev.org/t/openstack/build/0b29070f3a9941df9ce13dce61c03d6f : SUCCESS in 5m 54s\n- codegenerator-openapi-identity-tips-with-api-ref https://zuul.opendev.org/t/openstack/build/b0c941d01cc640e48011c02bddba6b53 : SUCCESS in 6m 51s\n- codegenerator-openapi-image-tips-with-api-ref https://zuul.opendev.org/t/openstack/build/e40a06a4ea144a808f228ebc383fa31d : SUCCESS in 6m 29s\n- codegenerator-openapi-key-manager-tips https://zuul.opendev.org/t/openstack/build/093aeb2bcf284e1d9fdbde7c18a41702 : SUCCESS in 3m 45s\n- codegenerator-openapi-load-balancing-tips-with-api-ref https://zuul.opendev.org/t/openstack/build/fd0d89c7b5aa47499c2b56ee46479832 : SUCCESS in 6m 11s\n- codegenerator-openapi-network-tips-with-api-ref https://zuul.opendev.org/t/openstack/build/4d823f45c5674b8496f4fbcfe243440c : SUCCESS in 5m 26s\n- codegenerator-openapi-object-store-static https://zuul.opendev.org/t/openstack/build/9958fd2e88504ce7b9b4583e2ed89707 : SUCCESS in 1m 35s\n- codegenerator-openapi-placement-tips-with-api-ref https://zuul.opendev.org/t/openstack/build/80bd3b5706274fd6a580c7e9eb30106d : SUCCESS in 4m 35s\n- codegenerator-openapi-shared-file-system-tips-with-api-ref https://zuul.opendev.org/t/openstack/build/398ede5b293f4be9aaf0d41cdf38d060 : SUCCESS in 6m 55s\n- codegenerator-tox-publish-openapi-specs https://zuul.opendev.org/t/openstack/build/90ffd71617b44031879525c31edc60af : SUCCESS in 2m 54s\n- codegenerator-rust-all https://zuul.opendev.org/t/openstack/build/996c62be0ed94af5a1f013558f0c6fb2 : SUCCESS in 39m 45s","accounts_in_message":[],"_revision_number":1},{"id":"968c614a60d6407b2736132e479e5fbe4922333a","tag":"autogenerated:gerrit:merged","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-08-11 12:48:16.000000000","message":"Change has been successfully merged","accounts_in_message":[],"_revision_number":1},{"id":"dd9d358d47827591e042d595fe4f65b219cb7ead","tag":"autogenerated:zuul:promote","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-08-11 12:49:17.000000000","message":"Patch Set 1:\n\nBuild succeeded (promote pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/f52aa6bb5ba74d9aa9843f86fb901e86\n\n- promote-openstack-tox-docs https://zuul.opendev.org/t/openstack/build/0aeb494810da436cbf04142b69ebb9b4 : SUCCESS in 42s\n- codegenerator-propose-rust-openstack-change https://zuul.opendev.org/t/openstack/build/3b54a0a101494536a3161c794098cd9e : SUCCESS in 52s\n\nWarning:\n  File openstack/release-plz.toml found in build home directory during playbook opendev.org/opendev/base-jobs/playbooks/base/post.yaml for job codegenerator-propose-rust-openstack-change.  Add to preserve-home-paths if safe, or otherwise remove.\n  File openstack/Dockerfile found in build home directory during playbook opendev.org/opendev/base-jobs/playbooks/base/post.yaml for job codegenerator-propose-rust-openstack-change.  Add to preserve-home-paths if safe, or otherwise remove.\n  File openstack/.gitignore found in build home directory during playbook opendev.org/opendev/base-jobs/playbooks/base/post.yaml for job codegenerator-propose-rust-openstack-change.  Add to preserve-home-paths if safe, or otherwise remove.\n  File openstack/.clog.toml found in build home directory during playbook opendev.org/opendev/base-jobs/playbooks/base/post.yaml for job codegenerator-propose-rust-openstack-change.  Add to preserve-home-paths if safe, or otherwise remove.\n  File openstack/CONTRIBUTING.md found in build home directory during playbook opendev.org/opendev/base-jobs/playbooks/base/post.yaml for job codegenerator-propose-rust-openstack-change.  Add to preserve-home-paths if safe, or otherwise remove.\n  File .ssh/known_hosts.old found in build home directory during playbook opendev.org/opendev/base-jobs/playbooks/base/post.yaml for job codegenerator-propose-rust-openstack-change.  Add to preserve-home-paths if safe, or otherwise remove.\n  File .ssh/known_hosts.old found in build home directory during playbook opendev.org/opendev/base-jobs/playbooks/base/cleanup.yaml for job codegenerator-propose-rust-openstack-change.  Add to preserve-home-paths if safe, or otherwise remove.\n  File .ssh/known_hosts.old found in build home directory during playbook opendev.org/opendev/base-jobs/playbooks/base/post-logs.yaml for job codegenerator-propose-rust-openstack-change.  Add to preserve-home-paths if safe, or otherwise remove.","accounts_in_message":[],"_revision_number":1}],"current_revision_number":1,"current_revision":"d95d02a2347cd427be9146ad71e7726cbfc9b116","revisions":{"d95d02a2347cd427be9146ad71e7726cbfc9b116":{"kind":"REWORK","_number":1,"created":"2026-08-11 10:23:37.000000000","uploader":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"ref":"refs/changes/24/1000424/1","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/codegenerator","ref":"refs/changes/24/1000424/1","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/codegenerator refs/changes/24/1000424/1 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/codegenerator refs/changes/24/1000424/1 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/codegenerator refs/changes/24/1000424/1 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/codegenerator refs/changes/24/1000424/1"}}},"commit":{"parents":[{"commit":"7f1a89c244c4c720877829d3615be4ca8bf5be46","subject":"feat: Implement \"waitable\" interface for rust","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/codegenerator/commit/7f1a89c244c4c720877829d3615be4ca8bf5be46"}]}],"author":{"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","date":"2026-08-11 10:14:38.000000000","tz":120},"committer":{"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","date":"2026-08-11 10:19:36.000000000","tz":120},"subject":"feat(rust): emit BODY_SCHEMA const on generated request structs","message":"feat(rust): emit BODY_SCHEMA const on generated request structs\n\nSerializes the raw OpenAPI request-body schema (before required-ness\nand oneOf/mutex info is dropped while building the Rust struct) into a\nBODY_SCHEMA string constant next to both the SDK and TUI request\nstructs. Consumers (e.g. TUI editor-template validation) can now\nvalidate an edited buffer against the actual constraints -- required\nfields, enums, ranges, mutually-exclusive fields -- instead of relying\non Option\u003cT\u003e alone.\n\nEscaping is done in Python rather than trusting json.dumps output to\nbe a valid Rust string literal verbatim, since JSON\u0027s \\uXXXX/ensure_ascii\nescaping isn\u0027t Rust-compatible.\n\nChange-Id: I0c6a54229407f180ac8c676ae6c6313ca79cf61f\nSigned-off-by: Artem Goncharov \u003cartem.goncharov@gmail.com\u003e\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/codegenerator/commit/d95d02a2347cd427be9146ad71e7726cbfc9b116"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/codegenerator/commit/d95d02a2347cd427be9146ad71e7726cbfc9b116"}]},"branch":"refs/heads/master"}},"requirements":[],"submit_records":[{"rule_name":"gerrit~DefaultSubmitRule","status":"CLOSED","labels":[{"label":"Verified","status":"MAY","applied_by":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}},{"label":"Code-Review","status":"MAY","applied_by":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"}},{"label":"Workflow","status":"MAY","applied_by":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"}}]}],"submit_requirements":[{"name":"Verified","description":"Verified in gate by CI","status":"SATISFIED","is_legacy":false,"submittability_expression_result":{"expression":"label:Verified\u003dMAX AND -label:Verified\u003dMIN","fulfilled":true,"status":"PASS","passing_atoms":["label:Verified\u003dMAX"],"failing_atoms":["label:Verified\u003dMIN"],"atom_explanations":{"label:Verified\u003dMAX":"","label:Verified\u003dMIN":""}}},{"name":"Code-Review","description":"Code reviewed by core reviewer","status":"SATISFIED","is_legacy":false,"submittability_expression_result":{"expression":"label:Code-Review\u003dMAX AND -label:Code-Review\u003dMIN","fulfilled":true,"status":"PASS","passing_atoms":["label:Code-Review\u003dMAX"],"failing_atoms":["label:Code-Review\u003dMIN"],"atom_explanations":{"label:Code-Review\u003dMAX":"","label:Code-Review\u003dMIN":""}}},{"name":"Workflow","description":"Approved for gate by core reviewer","status":"SATISFIED","is_legacy":false,"submittability_expression_result":{"expression":"label:Workflow\u003dMAX AND -label:Workflow\u003dMIN","fulfilled":true,"status":"PASS","passing_atoms":["label:Workflow\u003dMAX"],"failing_atoms":["label:Workflow\u003dMIN"],"atom_explanations":{"label:Workflow\u003dMAX":"","label:Workflow\u003dMIN":""}}}]}
