diff --git a/derive/src/args.rs b/derive/src/args.rs index f4b588976..48b5c8e23 100644 --- a/derive/src/args.rs +++ b/derive/src/args.rs @@ -219,6 +219,8 @@ pub struct SimpleObject { #[darling(default)] pub input_name: Option, #[darling(default)] + pub input_name_suffix: Option, + #[darling(default)] pub guard: Option, #[darling(default, multiple, rename = "directive")] pub directives: Vec, @@ -372,6 +374,8 @@ pub struct Union { // for OneofObject #[darling(default)] pub input_name: Option, + #[darling(default)] + pub input_name_suffix: Option, } #[derive(FromVariant)] @@ -438,6 +442,8 @@ pub struct InputObject { #[darling(default)] pub input_name: Option, #[darling(default)] + pub input_name_suffix: Option, + #[darling(default)] pub rename_fields: Option, #[darling(default)] pub visible: Option, @@ -490,6 +496,8 @@ pub struct OneofObject { #[darling(default)] pub input_name: Option, #[darling(default)] + pub input_name_suffix: Option, + #[darling(default)] pub name_type: bool, #[darling(default)] pub rename_fields: Option, diff --git a/derive/src/input_object.rs b/derive/src/input_object.rs index 795bd334c..9822473cd 100644 --- a/derive/src/input_object.rs +++ b/derive/src/input_object.rs @@ -41,12 +41,16 @@ pub fn generate(object_args: &args::InputObject) -> GeneratorResult } let gql_typename = if !object_args.name_type { - let name = object_args + let mut name = object_args .input_name .clone() .or_else(|| object_args.name.clone()) .unwrap_or_else(|| RenameTarget::Type.rename(ident.to_string())); + if let Some(suffix) = &object_args.input_name_suffix { + name.push_str(suffix); + } + quote!(::std::borrow::Cow::Borrowed(#name)) } else { quote!(::type_name()) diff --git a/derive/src/oneof_object.rs b/derive/src/oneof_object.rs index 9b2fd6fe6..0f04bb339 100644 --- a/derive/src/oneof_object.rs +++ b/derive/src/oneof_object.rs @@ -23,11 +23,16 @@ pub fn generate(object_args: &args::OneofObject) -> GeneratorResult .map(|tag| quote!(::std::string::ToString::to_string(#tag))) .collect::>(); let gql_typename = if !object_args.name_type { - let name = object_args + let mut name = object_args .input_name .clone() .or_else(|| object_args.name.clone()) .unwrap_or_else(|| RenameTarget::Type.rename(ident.to_string())); + + if let Some(suffix) = &object_args.input_name_suffix { + name.push_str(suffix); + } + quote!(::std::borrow::Cow::Borrowed(#name)) } else { quote!(::type_name())