From 8f3d0f1d79d8eef3746eeaeac237e7d445da8eb7 Mon Sep 17 00:00:00 2001 From: xelab04 Date: Mon, 9 Mar 2026 23:02:50 +0400 Subject: [PATCH 1/2] feat: add field_name to field opts --- cot-codegen/src/model.rs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/cot-codegen/src/model.rs b/cot-codegen/src/model.rs index 1d410c27..04b4b63f 100644 --- a/cot-codegen/src/model.rs +++ b/cot-codegen/src/model.rs @@ -146,6 +146,7 @@ pub struct FieldOpts { pub ty: syn::Type, pub primary_key: darling::util::Flag, pub unique: darling::util::Flag, + pub field_name: Option, } impl FieldOpts { @@ -206,7 +207,12 @@ impl FieldOpts { self_reference: Option<&String>, ) -> Result { let name = self.ident.clone().expect("Only structs are supported"); - let column_name = name.unraw().to_string(); + + let column_name = if let Some(specified_field_name) = &self.field_name { + specified_field_name.clone() + } else { + name.unraw().to_string() + }; let (auto_value, foreign_key) = ( self.find_type("cot::db::Auto", symbol_resolver).is_some(), From cec3f11ecd2014525e84fde92e7eea90391da40e Mon Sep 17 00:00:00 2001 From: xelab04 Date: Mon, 9 Mar 2026 23:06:26 +0400 Subject: [PATCH 2/2] add tests for custom field name --- cot-codegen/src/model.rs | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/cot-codegen/src/model.rs b/cot-codegen/src/model.rs index 04b4b63f..8b2f6bf9 100644 --- a/cot-codegen/src/model.rs +++ b/cot-codegen/src/model.rs @@ -495,6 +495,20 @@ mod tests { assert_eq!(field.column_name, "abstract"); } + #[test] + fn field_opts_specified_field_name() { + let input: syn::Field = parse_quote! { + #[model(field_name="test_field")] + test: String + }; + let field_opts = FieldOpts::from_field(&input).unwrap(); + let field = field_opts + .as_field(&SymbolResolver::new(vec![]), Some(&"TestModel".to_string())) + .unwrap(); + assert_eq!(field.name.to_string(), "test"); + assert_eq!(field.column_name, "test_field"); + } + #[test] fn find_type_resolved() { let input: syn::Type =