Fix few tui generated code issues

Change-Id: Iac7169de7ee07fa06e48dec56d0e9656c2d7e45a
This commit is contained in:
Artem Goncharov 2024-12-17 11:19:23 +01:00
parent ca373468f7
commit 5d38233548
3 changed files with 28 additions and 12 deletions

View File

@ -28,6 +28,10 @@ class String(common_rust.String):
type_hint: str = "String"
class ArrayInput(common_rust.Array):
pass
class TypeManager(common_rust.TypeManager):
"""Rust SDK type manager
@ -41,7 +45,11 @@ class TypeManager(common_rust.TypeManager):
model.ConstraintString: String,
}
data_type_mapping = {model.Struct: common_rust.Struct}
data_type_mapping = {
model.Struct: common_rust.Struct,
model.Array: ArrayInput,
model.CommaSeparatedList: ArrayInput,
}
request_parameter_class: Type[common_rust.RequestParameter] = (
common_rust.RequestParameter

View File

@ -172,7 +172,7 @@ Some({{ val }})
{{ dst_var }}.{{ param.remote_name }}({{ val_var | replace("&", "" )}});
{%- elif param.data_type.__class__.__name__ in ["ArrayInput"] %}
{{ sdk_plain_array_setter(param, val_var.replace("&", ""), dst_var) }}
{{ sdk_plain_array_setter(param, val_var.replace("&", ""), dst_var, by_ref=by_ref) }}
{%- elif param.data_type.__class__.__name__ in ["JsonValue"] %}
@ -342,7 +342,7 @@ Some({{ val }})
{%- endif %}
{%- endmacro %}
{%- macro sdk_plain_array_setter(param, val_var, dst_var) %}
{%- macro sdk_plain_array_setter(param, val_var, dst_var, by_ref=False) %}
{%- set original_type = param.data_type.original_data_type %}
{%- set original_item_type = param.data_type.item_type.original_data_type %}
{%- if param.data_type.item_type.__class__.__name__ == "JsonValue" and original_type.__class__.__name__ == "StructInput" %}
@ -377,7 +377,7 @@ Some({{ val }})
{%- elif param["setter_type"] is defined %}
{#- Param with setter present #}
{{ dst_var }}.{{ param.remote_name }}(
{{ val_var }}.iter()
{{ val_var }}{{ ".iter()" if not by_ref else ".into_iter().cloned()" }}
);
{%- elif original_item_type and original_item_type.__class__.__name__ == "DictionaryInput" %}
use std::collections::BTreeMap;

View File

@ -34,10 +34,9 @@ use {{ mod }};
{%- if data_type.__class__.__name__ == "Struct" %}
#[derive(Debug, Default, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct {{ class_name }}{
{%- for name, param in type_manager.parameters | dictsort %}
{%- if param.location != "header" %}
{%- for name, param in type_manager.parameters|dictsort if param.location != "header" %}
{{ param.local_name }}: {{ param.type_hint }},
{%- if param.local_name.endswith("id") %}
{%- if param.local_name.endswith("id") and (param.local_name[:-2] + "name") not in type_manager.parameters.keys() %}
{%- set param_type = False %}
{{ param.local_name[:-2] }}name:
{%- if param.type_hint.startswith("Option") %}
@ -46,7 +45,6 @@ pub struct {{ class_name }}{
Option<{{ param.type_hint }}>,
{%- endif %}
{%- endif %}
{%- endif %}
{%- endfor %}
}
@ -55,16 +53,18 @@ impl fmt::Display for {{ class_name }} {
let mut parts: Vec<String> = Vec::new();
{%- for name, param in type_manager.parameters | dictsort %}
{%- if param.location != "header" %}
{%- if param.local_name.endswith("_id") %}
{%- set alt_name = param.local_name.replace("_id", "_name") %}
{%- if param.local_name.endswith("id") %}
{%- set alt_name = param.local_name[:-2] + "name" %}
{%- if param.type_hint.startswith("Option") %}
if self.{{ param.local_name }}.is_some() || self.{{ alt_name }}.is_some() {
parts.push(format!(
"{{ param.local_name[:-3] }}: {}",
"{{ param.local_name[:-3] or "name/id" }}: {}",
self.{{ alt_name }}
.as_ref()
.or(self.{{ param.local_name }}.as_ref())
.unwrap_or(&String::new())
.unwrap_or(
&{{ param.data_type.type_hint }}::default()
)
));
}
{% else %}
@ -152,7 +152,15 @@ impl ConfirmableRequest for {{ class_name }} {
fn get_confirm_message(&self) -> Option<String> {
Some(format!(
"Delete {{ sdk_service_name }} {{ resource_name.title() }} {} ?",
{%- if "id" in dict(type_manager.get_parameters("path")).keys() %}
self.name.clone().unwrap_or(self.id.clone())
{%- else %}
{%- for (k, v) in type_manager.get_parameters("path") %}
{%- if k.endswith("id") %}
self.{{ k[:-2] }}name.clone().unwrap_or(self.{{ k[:-2] }}id.clone())
{%- endif %}
{%- endfor %}
{%- endif %}
))
}
}