From 0f870d5a5fed483c9b85f30af7c14961a847c50b Mon Sep 17 00:00:00 2001 From: Artem Goncharov Date: Thu, 3 Apr 2025 12:57:07 +0200 Subject: [PATCH] Import IntString from openstack_sdk We are moving IntString, NumString, BoolString from cli to sdk so that we can also use them in tui. Change-Id: Ib2dcdd2f54481feacb7848037fb26fae4ef5d738 --- codegenerator/rust_cli.py | 6 ++--- codegenerator/rust_tui.py | 55 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 58 insertions(+), 3 deletions(-) diff --git a/codegenerator/rust_cli.py b/codegenerator/rust_cli.py index 7962b0f..467e067 100644 --- a/codegenerator/rust_cli.py +++ b/codegenerator/rust_cli.py @@ -72,7 +72,7 @@ class SecretString(String): class IntString(common.BasePrimitiveType): """CLI Integer or String""" - imports: set[str] = {"crate::common::IntString"} + imports: set[str] = {"openstack_sdk::types::IntString"} type_hint: str = "IntString" clap_macros: set[str] = set() @@ -80,7 +80,7 @@ class IntString(common.BasePrimitiveType): class NumString(common.BasePrimitiveType): """CLI Number or String""" - imports: set[str] = {"crate::common::NumString"} + imports: set[str] = {"openstack_sdk::types::NumString"} type_hint: str = "NumString" clap_macros: set[str] = set() @@ -88,7 +88,7 @@ class NumString(common.BasePrimitiveType): class BoolString(common.BasePrimitiveType): """CLI Boolean or String""" - imports: set[str] = {"crate::common::BoolString"} + imports: set[str] = {"openstack_sdk::types::BoolString"} type_hint: str = "BoolString" clap_macros: set[str] = set() diff --git a/codegenerator/rust_tui.py b/codegenerator/rust_tui.py index 5028fc1..edb08fb 100644 --- a/codegenerator/rust_tui.py +++ b/codegenerator/rust_tui.py @@ -50,6 +50,30 @@ class String(common_rust.String): return f"{source_var_name}.clone()" +class IntString(common.BasePrimitiveType): + """TUI Integer or String""" + + imports: set[str] = {"openstack_sdk::types::IntString"} + type_hint: str = "IntString" + clap_macros: set[str] = set() + + +class NumString(common.BasePrimitiveType): + """TUI Number or String""" + + imports: set[str] = {"openstack_sdk::types::NumString"} + type_hint: str = "NumString" + clap_macros: set[str] = set() + + +class BoolString(common.BasePrimitiveType): + """TUI Boolean or String""" + + imports: set[str] = {"openstack_sdk::types::BoolString"} + type_hint: str = "BoolString" + clap_macros: set[str] = set() + + class ArrayInput(common_rust.Array): original_data_type: ( common_rust.BaseCompoundType @@ -363,6 +387,32 @@ class ResponseTypeManager(common_rust.TypeManager): for x in re.split(common.SPLIT_NAME_RE, model_ref.name) ) + def _simplify_oneof_combinations(self, type_model, kinds): + """Simplify certain known oneOf combinations""" + kinds_classes = [x["class"] for x in kinds] + if ( + common_rust.String in kinds_classes + and common_rust.Number in kinds_classes + ): + # oneOf [string, number] => NumString + kinds.clear() + kinds.append({"local": NumString(), "class": NumString}) + elif ( + common_rust.String in kinds_classes + and common_rust.Integer in kinds_classes + ): + # oneOf [string, integer] => NumString + kinds.clear() + kinds.append({"local": IntString(), "class": IntString}) + elif ( + common_rust.String in kinds_classes + and common_rust.Boolean in kinds_classes + ): + # oneOf [string, boolean] => String + kinds.clear() + kinds.append({"local": BoolString(), "class": BoolString}) + super()._simplify_oneof_combinations(type_model, kinds) + def _get_struct_type(self, type_model: model.Struct) -> common_rust.Struct: """Convert model.Struct into Rust `Struct`""" struct_class = self.data_type_mapping[model.Struct] @@ -705,6 +755,11 @@ class RustTuiGenerator(BaseGenerator): "crate::cloud_worker::ConfirmableRequest" ) + additional_imports.update(response_type_manager.get_imports()) + # Deserialize is already in template since it is uncoditionally required + additional_imports.discard("serde::Deserialize") + additional_imports.discard("serde::Serialize") + context = { "additional_imports": additional_imports, "operation_id": operation_id,