Skip to content

Commit

Permalink
Generate crate:: prefix for all the reference types
Browse files Browse the repository at this point in the history
  • Loading branch information
YushiOMOTE committed Sep 6, 2022
1 parent 26cf73e commit 51e1ca3
Show file tree
Hide file tree
Showing 7 changed files with 33 additions and 25 deletions.
8 changes: 4 additions & 4 deletions examples/rust-generate-crate/__snapshots__/index.spec.ts.snap
Original file line number Diff line number Diff line change
Expand Up @@ -20,19 +20,19 @@ pub struct Address {
#[serde(rename=\\"marriage\\", skip_serializing_if = \\"Option::is_none\\")]
marriage: Option<bool>,
#[serde(rename=\\"members\\", skip_serializing_if = \\"Option::is_none\\")]
members: Option<Box<Members>>,
members: Option<Box<crate::Members>>,
#[serde(rename=\\"tuple_type\\", skip_serializing_if = \\"Option::is_none\\")]
tuple_type: Option<Box<TupleType>>,
tuple_type: Option<Box<crate::TupleType>>,
#[serde(rename=\\"array_type\\")]
array_type: Vec<String>,
#[serde(rename=\\"enum_type\\", skip_serializing_if = \\"Option::is_none\\")]
enum_type: Option<Box<EnumType>>,
enum_type: Option<Box<crate::EnumType>>,
#[serde(rename=\\"additionalProperties\\", skip_serializing_if = \\"Option::is_none\\")]
additional_properties: Option<std::collections::HashMap<String, String>>,
}
impl Address {
pub fn new(street_name: String, city: String, state: String, house_number: f64, marriage: Option<bool>, members: Option<Members>, tuple_type: Option<TupleType>, array_type: Vec<String>, enum_type: Option<EnumType>, additional_properties: Option<std::collections::HashMap<String, String>>) -> Address {
pub fn new(street_name: String, city: String, state: String, house_number: f64, marriage: Option<bool>, members: Option<crate::Members>, tuple_type: Option<crate::TupleType>, array_type: Vec<String>, enum_type: Option<crate::EnumType>, additional_properties: Option<std::collections::HashMap<String, String>>) -> Address {
Address {
street_name,
city,
Expand Down
7 changes: 5 additions & 2 deletions src/generators/rust/RustConstrainer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -253,7 +253,8 @@ export const RustDefaultTypeMapping: TypeMapping<RustOptions> = {
return `${constrainedModel.name}`;
},
Array({ constrainedModel }): string {
return `Vec<${FormatHelpers.upperFirst(constrainedModel.valueModel.type)}>`;
let prefix = (constrainedModel.valueModel instanceof ConstrainedReferenceModel) ? 'crate::' : '';
return `Vec<${prefix}${FormatHelpers.upperFirst(constrainedModel.valueModel.type)}>`;
},
Enum({ constrainedModel }): string {
return constrainedModel.name;
Expand All @@ -262,7 +263,9 @@ export const RustDefaultTypeMapping: TypeMapping<RustOptions> = {
return constrainedModel.name;
},
Dictionary({ constrainedModel }): string {
return `std::collections::HashMap<${constrainedModel.key.type}, ${constrainedModel.value.type}>`;
let key_prefix = (constrainedModel.key instanceof ConstrainedReferenceModel) ? 'crate::' : '';
let value_prefix = (constrainedModel.value instanceof ConstrainedReferenceModel) ? 'crate::' : '';
return `std::collections::HashMap<${key_prefix}${constrainedModel.key.type}, ${value_prefix}${constrainedModel.value.type}>`;
}
};

Expand Down
7 changes: 5 additions & 2 deletions src/generators/rust/presets/CommonPreset.ts
Original file line number Diff line number Diff line change
Expand Up @@ -68,15 +68,18 @@ export const RUST_COMMON_PRESET: RustPreset<RustCommonPresetOptions> = {
const args: string[] = [];
const fields: string[] = [];
for (const v of Object.values(properties)) {
let prefix = (v.property instanceof ConstrainedReferenceModel) ? 'crate::' : '';
let fieldType = prefix + v.property.type;

if (v.required) {
args.push(`${v.propertyName}: ${v.property.type}`);
args.push(`${v.propertyName}: ${fieldType}`);
fields.push(`${v.propertyName},`);
// use map to box reference if field is optional
} else if (!v.required && (v.property instanceof ConstrainedReferenceModel || v.property instanceof ConstrainedUnionModel)) {
args.push(`${v.propertyName}: Option<crate::${v.property.type}>`);
fields.push(`${v.propertyName}: ${v.propertyName}.map(Box::new),`);
} else {
args.push(`${v.propertyName}: Option<${v.property.type}>`);
args.push(`${v.propertyName}: Option<${fieldType}>`);
fields.push(`${v.propertyName},`);
}
}
Expand Down
4 changes: 3 additions & 1 deletion src/generators/rust/renderers/StructRenderer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,9 @@ export const RUST_DEFAULT_STRUCT_PRESET: StructPresetType<RustOptions> = {
return `#[serde(${serdeArgs.join(', ')})]`;
},
field({ field }) {
let fieldType = field.property.type;
let prefix = (field.property instanceof ConstrainedReferenceModel) ? 'crate::' : '';
let fieldType = prefix + field.property.type ;

if (!field.required && (field.property instanceof ConstrainedReferenceModel || field.property instanceof ConstrainedUnionModel)) {
fieldType = `Option<Box<${fieldType}>>`;
} else if (!field.required) {
Expand Down
2 changes: 1 addition & 1 deletion src/generators/rust/renderers/UnionRenderer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ export const RUST_DEFAULT_UNION_PRESET: UnionPresetType<RustOptions> = {
},
item({ item }) {
if (item instanceof ConstrainedReferenceModel) {
return `${item.name}(${item.ref.type})`;
return `${item.name}(crate::${item.ref.type})`;
} else {
return `${item.name}(${item.type})`;
}
Expand Down
8 changes: 4 additions & 4 deletions test/generators/rust/__snapshots__/RustGenerator.spec.ts.snap
Original file line number Diff line number Diff line change
Expand Up @@ -136,9 +136,9 @@ pub struct Address {
#[serde(rename=\\"marriage\\", skip_serializing_if = \\"Option::is_none\\")]
marriage: Option<bool>,
#[serde(rename=\\"members\\", skip_serializing_if = \\"Option::is_none\\")]
members: Option<Box<Members>>,
members: Option<Box<crate::Members>>,
#[serde(rename=\\"tuple_type\\", skip_serializing_if = \\"Option::is_none\\")]
tuple_type: Option<Box<TupleType>>,
tuple_type: Option<Box<crate::TupleType>>,
#[serde(rename=\\"array_type\\")]
array_type: Vec<String>,
#[serde(rename=\\"additionalProperties\\", skip_serializing_if = \\"Option::is_none\\")]
Expand Down Expand Up @@ -185,9 +185,9 @@ pub struct Address {
#[serde(rename=\\"marriage\\", skip_serializing_if = \\"Option::is_none\\")]
marriage: Option<bool>,
#[serde(rename=\\"members\\", skip_serializing_if = \\"Option::is_none\\")]
members: Option<Box<Members>>,
members: Option<Box<crate::Members>>,
#[serde(rename=\\"tuple_type\\", skip_serializing_if = \\"Option::is_none\\")]
tuple_type: Option<Box<TupleType>>,
tuple_type: Option<Box<crate::TupleType>>,
#[serde(rename=\\"array_type\\")]
array_type: Vec<String>,
#[serde(rename=\\"additionalProperties\\", skip_serializing_if = \\"Option::is_none\\")]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,15 @@ exports[`RUST_COMMON_PRESET Enum should render \`enum\` of union type with Defau
#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub struct Address {
#[serde(rename=\\"members\\")]
members: Members,
members: crate::Members,
#[serde(rename=\\"optional_members\\", skip_serializing_if = \\"Option::is_none\\")]
optional_members: Option<Box<OptionalMembers>>,
optional_members: Option<Box<crate::OptionalMembers>>,
#[serde(rename=\\"additionalProperties\\", skip_serializing_if = \\"Option::is_none\\")]
additional_properties: Option<std::collections::HashMap<String, String>>,
}
impl Address {
pub fn new(members: Members, optional_members: Option<OptionalMembers>, additional_properties: Option<std::collections::HashMap<String, String>>) -> Address {
pub fn new(members: crate::Members, optional_members: Option<crate::OptionalMembers>, additional_properties: Option<std::collections::HashMap<String, String>>) -> Address {
Address {
members,
optional_members: optional_members.map(Box::new),
Expand Down Expand Up @@ -59,15 +59,15 @@ exports[`RUST_COMMON_PRESET Enum should render \`enum\` of union type with Defau
#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub struct Address {
#[serde(rename=\\"members\\")]
members: Members,
members: crate::Members,
#[serde(rename=\\"optional_members\\", skip_serializing_if = \\"Option::is_none\\")]
optional_members: Option<Box<OptionalMembers>>,
optional_members: Option<Box<crate::OptionalMembers>>,
#[serde(rename=\\"additionalProperties\\", skip_serializing_if = \\"Option::is_none\\")]
additional_properties: Option<std::collections::HashMap<String, String>>,
}
impl Address {
pub fn new(members: Members, optional_members: Option<OptionalMembers>, additional_properties: Option<std::collections::HashMap<String, String>>) -> Address {
pub fn new(members: crate::Members, optional_members: Option<crate::OptionalMembers>, additional_properties: Option<std::collections::HashMap<String, String>>) -> Address {
Address {
members,
optional_members: optional_members.map(Box::new),
Expand Down Expand Up @@ -203,17 +203,17 @@ pub struct Address {
#[serde(rename=\\"marriage\\", skip_serializing_if = \\"Option::is_none\\")]
marriage: Option<bool>,
#[serde(rename=\\"members\\", skip_serializing_if = \\"Option::is_none\\")]
members: Option<Box<Members>>,
members: Option<Box<crate::Members>>,
#[serde(rename=\\"tuple_type\\", skip_serializing_if = \\"Option::is_none\\")]
tuple_type: Option<Box<TupleType>>,
tuple_type: Option<Box<crate::TupleType>>,
#[serde(rename=\\"array_type\\")]
array_type: Vec<String>,
#[serde(rename=\\"additionalProperties\\", skip_serializing_if = \\"Option::is_none\\")]
additional_properties: Option<std::collections::HashMap<String, String>>,
}
impl Address {
pub fn new(street_name: String, city: String, state: String, house_number: f64, marriage: Option<bool>, members: Option<Members>, tuple_type: Option<TupleType>, array_type: Vec<String>, additional_properties: Option<std::collections::HashMap<String, String>>) -> Address {
pub fn new(street_name: String, city: String, state: String, house_number: f64, marriage: Option<bool>, members: Option<crate::Members>, tuple_type: Option<crate::TupleType>, array_type: Vec<String>, additional_properties: Option<std::collections::HashMap<String, String>>) -> Address {
Address {
street_name,
city,
Expand Down Expand Up @@ -274,9 +274,9 @@ pub struct Address {
#[serde(rename=\\"marriage\\", skip_serializing_if = \\"Option::is_none\\")]
marriage: Option<bool>,
#[serde(rename=\\"members\\", skip_serializing_if = \\"Option::is_none\\")]
members: Option<Box<Members>>,
members: Option<Box<crate::Members>>,
#[serde(rename=\\"tuple_type\\", skip_serializing_if = \\"Option::is_none\\")]
tuple_type: Option<Box<TupleType>>,
tuple_type: Option<Box<crate::TupleType>>,
#[serde(rename=\\"array_type\\")]
array_type: Vec<String>,
#[serde(rename=\\"additionalProperties\\", skip_serializing_if = \\"Option::is_none\\")]
Expand Down

0 comments on commit 51e1ca3

Please sign in to comment.