diff --git a/.changepacks/changepack_log_pia6k8tX2O_9OQBhQCDDF.json b/.changepacks/changepack_log_pia6k8tX2O_9OQBhQCDDF.json new file mode 100644 index 0000000..1b38897 --- /dev/null +++ b/.changepacks/changepack_log_pia6k8tX2O_9OQBhQCDDF.json @@ -0,0 +1 @@ +{"changes":{"crates/vespera_core/Cargo.toml":"Patch","crates/vespera_macro/Cargo.toml":"Patch","crates/vespera/Cargo.toml":"Patch"},"note":"Remove raw prefix","date":"2026-01-14T03:53:02.608967800Z"} \ No newline at end of file diff --git a/crates/vespera_macro/src/openapi_generator.rs b/crates/vespera_macro/src/openapi_generator.rs index 1f3ed5c..c45a5a2 100644 --- a/crates/vespera_macro/src/openapi_generator.rs +++ b/crates/vespera_macro/src/openapi_generator.rs @@ -10,7 +10,7 @@ use vespera_core::{ use crate::metadata::CollectedMetadata; use crate::parser::{ build_operation_from_function, extract_default, extract_field_rename, extract_rename_all, - parse_enum_to_schema, parse_struct_to_schema, rename_field, + parse_enum_to_schema, parse_struct_to_schema, rename_field, strip_raw_prefix, }; /// Generate OpenAPI document from collected metadata @@ -260,7 +260,7 @@ fn process_default_functions( let rust_field_name = field .ident .as_ref() - .map(|i| i.to_string()) + .map(|i| strip_raw_prefix(&i.to_string()).to_string()) .unwrap_or_else(|| "unknown".to_string()); let field_name = if let Some(renamed) = extract_field_rename(&field.attrs) { @@ -291,7 +291,7 @@ fn process_default_functions( let rust_field_name = field .ident .as_ref() - .map(|i| i.to_string()) + .map(|i| strip_raw_prefix(&i.to_string()).to_string()) .unwrap_or_else(|| "unknown".to_string()); let field_name = if let Some(renamed) = extract_field_rename(&field.attrs) { diff --git a/crates/vespera_macro/src/parser/mod.rs b/crates/vespera_macro/src/parser/mod.rs index be8fc10..8148a47 100644 --- a/crates/vespera_macro/src/parser/mod.rs +++ b/crates/vespera_macro/src/parser/mod.rs @@ -8,5 +8,5 @@ mod schema; pub use operation::build_operation_from_function; pub use schema::{ extract_default, extract_field_rename, extract_rename_all, parse_enum_to_schema, - parse_struct_to_schema, rename_field, + parse_struct_to_schema, rename_field, strip_raw_prefix, }; diff --git a/crates/vespera_macro/src/parser/schema.rs b/crates/vespera_macro/src/parser/schema.rs index 79a34bc..0604020 100644 --- a/crates/vespera_macro/src/parser/schema.rs +++ b/crates/vespera_macro/src/parser/schema.rs @@ -3,6 +3,12 @@ use std::collections::{BTreeMap, HashMap}; use syn::{Fields, Type}; use vespera_core::schema::{Reference, Schema, SchemaRef, SchemaType}; +/// Strips the `r#` prefix from raw identifiers. +/// E.g., `r#type` becomes `type`. +pub fn strip_raw_prefix(ident: &str) -> &str { + ident.strip_prefix("r#").unwrap_or(ident) +} + pub fn extract_rename_all(attrs: &[syn::Attribute]) -> Option { for attr in attrs { if attr.path().is_ident("serde") { @@ -394,7 +400,7 @@ pub fn parse_enum_to_schema( let mut enum_values = Vec::new(); for variant in &enum_item.variants { - let variant_name = variant.ident.to_string(); + let variant_name = strip_raw_prefix(&variant.ident.to_string()).to_string(); // Check for variant-level rename attribute first (takes precedence) let enum_value = if let Some(renamed) = extract_field_rename(&variant.attrs) { @@ -421,7 +427,7 @@ pub fn parse_enum_to_schema( let mut one_of_schemas = Vec::new(); for variant in &enum_item.variants { - let variant_name = variant.ident.to_string(); + let variant_name = strip_raw_prefix(&variant.ident.to_string()).to_string(); // Check for variant-level rename attribute first (takes precedence) let variant_key = if let Some(renamed) = extract_field_rename(&variant.attrs) { @@ -505,7 +511,7 @@ pub fn parse_enum_to_schema( let rust_field_name = field .ident .as_ref() - .map(|i| i.to_string()) + .map(|i| strip_raw_prefix(&i.to_string()).to_string()) .unwrap_or_else(|| "unknown".to_string()); // Check for field-level rename attribute first (takes precedence) @@ -608,7 +614,7 @@ pub fn parse_struct_to_schema( let rust_field_name = field .ident .as_ref() - .map(|i| i.to_string()) + .map(|i| strip_raw_prefix(&i.to_string()).to_string()) .unwrap_or_else(|| "unknown".to_string()); // Check for field-level rename attribute first (takes precedence)