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
This commit is contained in:
Artem Goncharov 2025-04-03 12:57:07 +02:00
parent e0f1e9c0b2
commit 0f870d5a5f
2 changed files with 58 additions and 3 deletions

@ -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()

@ -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,