From 40e46ecc0e1ca0cfea9c17b461cef22168e619e7 Mon Sep 17 00:00:00 2001 From: owjs3901 Date: Mon, 12 Jan 2026 16:12:25 +0900 Subject: [PATCH 1/2] Add serde rename_all --- .../changepack_log_704kg_iEBBm4fOMKrftai.json | 1 + Cargo.lock | 20 +++++++++---------- crates/vespertide-config/src/config.rs | 14 +++++++++++++ crates/vespertide-config/src/lib.rs | 1 + crates/vespertide-config/src/name_case.rs | 9 +++++++++ crates/vespertide-exporter/src/seaorm/mod.rs | 8 ++++++++ ...__render_enum_snapshots@integer_color.snap | 1 + ..._render_enum_snapshots@integer_status.snap | 1 + ..._enum_snapshots@string_numeric_prefix.snap | 1 + ...er_enum_snapshots@string_order_status.snap | 1 + ...nteger_enum_default_value_snapshots@1.snap | 1 + ...efault_value_snapshots@pending_status.snap | 1 + ...napshots@params_enum_multiple_columns.snap | 2 ++ ...entity_snapshots@params_enum_nullable.snap | 1 + ...r_entity_snapshots@params_enum_shared.snap | 1 + ..._snapshots@params_enum_special_values.snap | 1 + ...der_entity_snapshots@params_enum_type.snap | 1 + ...ty_snapshots@params_enum_with_default.snap | 1 + 18 files changed, 56 insertions(+), 10 deletions(-) create mode 100644 .changepacks/changepack_log_704kg_iEBBm4fOMKrftai.json diff --git a/.changepacks/changepack_log_704kg_iEBBm4fOMKrftai.json b/.changepacks/changepack_log_704kg_iEBBm4fOMKrftai.json new file mode 100644 index 0000000..fc5bfae --- /dev/null +++ b/.changepacks/changepack_log_704kg_iEBBm4fOMKrftai.json @@ -0,0 +1 @@ +{"changes":{"crates/vespertide-macro/Cargo.toml":"Patch","crates/vespertide-loader/Cargo.toml":"Patch","crates/vespertide-query/Cargo.toml":"Patch","crates/vespertide-core/Cargo.toml":"Patch","crates/vespertide/Cargo.toml":"Patch","crates/vespertide-naming/Cargo.toml":"Patch","crates/vespertide-exporter/Cargo.toml":"Patch","crates/vespertide-planner/Cargo.toml":"Patch","crates/vespertide-config/Cargo.toml":"Patch","crates/vespertide-cli/Cargo.toml":"Patch"},"note":"Add serde_rename_all","date":"2026-01-12T07:12:06.946795300Z"} \ No newline at end of file diff --git a/Cargo.lock b/Cargo.lock index 78804d5..cb236a0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2995,7 +2995,7 @@ checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" [[package]] name = "vespertide" -version = "0.1.24" +version = "0.1.26" dependencies = [ "vespertide-core", "vespertide-macro", @@ -3003,7 +3003,7 @@ dependencies = [ [[package]] name = "vespertide-cli" -version = "0.1.24" +version = "0.1.26" dependencies = [ "anyhow", "assert_cmd", @@ -3028,7 +3028,7 @@ dependencies = [ [[package]] name = "vespertide-config" -version = "0.1.24" +version = "0.1.26" dependencies = [ "clap", "schemars", @@ -3038,7 +3038,7 @@ dependencies = [ [[package]] name = "vespertide-core" -version = "0.1.24" +version = "0.1.26" dependencies = [ "rstest", "schemars", @@ -3050,7 +3050,7 @@ dependencies = [ [[package]] name = "vespertide-exporter" -version = "0.1.24" +version = "0.1.26" dependencies = [ "insta", "rstest", @@ -3061,7 +3061,7 @@ dependencies = [ [[package]] name = "vespertide-loader" -version = "0.1.24" +version = "0.1.26" dependencies = [ "anyhow", "rstest", @@ -3076,7 +3076,7 @@ dependencies = [ [[package]] name = "vespertide-macro" -version = "0.1.24" +version = "0.1.26" dependencies = [ "proc-macro2", "quote", @@ -3093,11 +3093,11 @@ dependencies = [ [[package]] name = "vespertide-naming" -version = "0.1.24" +version = "0.1.26" [[package]] name = "vespertide-planner" -version = "0.1.24" +version = "0.1.26" dependencies = [ "insta", "rstest", @@ -3108,7 +3108,7 @@ dependencies = [ [[package]] name = "vespertide-query" -version = "0.1.24" +version = "0.1.26" dependencies = [ "insta", "rstest", diff --git a/crates/vespertide-config/src/config.rs b/crates/vespertide-config/src/config.rs index 4eaf6d7..a5c4a38 100644 --- a/crates/vespertide-config/src/config.rs +++ b/crates/vespertide-config/src/config.rs @@ -22,17 +22,26 @@ pub struct SeaOrmConfig { /// Additional derive macros to add to generated entity model types. #[serde(default)] pub extra_model_derives: Vec, + /// Naming case for serde rename_all attribute on generated enums. + /// Default: `Camel` (generates `#[serde(rename_all = "camelCase")]`) + #[serde(default = "default_enum_naming_case")] + pub enum_naming_case: NameCase, } fn default_extra_enum_derives() -> Vec { vec!["vespera::Schema".to_string()] } +fn default_enum_naming_case() -> NameCase { + NameCase::Camel +} + impl Default for SeaOrmConfig { fn default() -> Self { Self { extra_enum_derives: default_extra_enum_derives(), extra_model_derives: Vec::new(), + enum_naming_case: default_enum_naming_case(), } } } @@ -47,6 +56,11 @@ impl SeaOrmConfig { pub fn extra_model_derives(&self) -> &[String] { &self.extra_model_derives } + + /// Get the naming case for serde rename_all attribute on generated enums. + pub fn enum_naming_case(&self) -> NameCase { + self.enum_naming_case + } } /// Top-level vespertide configuration. diff --git a/crates/vespertide-config/src/lib.rs b/crates/vespertide-config/src/lib.rs index 10f3270..1ec2e86 100644 --- a/crates/vespertide-config/src/lib.rs +++ b/crates/vespertide-config/src/lib.rs @@ -49,6 +49,7 @@ mod tests { let cfg = SeaOrmConfig { extra_enum_derives: vec!["A".to_string(), "B".to_string()], extra_model_derives: vec!["C".to_string()], + ..Default::default() }; assert_eq!(cfg.extra_enum_derives(), &["A", "B"]); assert_eq!(cfg.extra_model_derives(), &["C"]); diff --git a/crates/vespertide-config/src/name_case.rs b/crates/vespertide-config/src/name_case.rs index ad1f6f1..99c97e4 100644 --- a/crates/vespertide-config/src/name_case.rs +++ b/crates/vespertide-config/src/name_case.rs @@ -25,4 +25,13 @@ impl NameCase { pub fn is_pascal(self) -> bool { matches!(self, NameCase::Pascal) } + + /// Returns the serde rename_all attribute value for this case. + pub fn serde_rename_all(self) -> &'static str { + match self { + NameCase::Snake => "snake_case", + NameCase::Camel => "camelCase", + NameCase::Pascal => "PascalCase", + } + } } diff --git a/crates/vespertide-exporter/src/seaorm/mod.rs b/crates/vespertide-exporter/src/seaorm/mod.rs index ad80335..42699ec 100644 --- a/crates/vespertide-exporter/src/seaorm/mod.rs +++ b/crates/vespertide-exporter/src/seaorm/mod.rs @@ -869,6 +869,10 @@ fn render_enum( derives.extend(extra_derives); lines.push(format!("#[derive({})]", derives.join(", "))); + lines.push(format!( + "#[serde(rename_all = \"{}\")]", + config.enum_naming_case().serde_rename_all() + )); match values { EnumValues::Integer(_) => { @@ -2747,6 +2751,7 @@ mod tests { let config = SeaOrmConfig { extra_enum_derives: vec!["CustomDerive".to_string()], extra_model_derives: vec!["ModelDerive".to_string()], + ..Default::default() }; let exporter = SeaOrmExporterWithConfig::new(&config); @@ -2778,6 +2783,7 @@ mod tests { let config = SeaOrmConfig { extra_enum_derives: vec!["CustomEnumDerive".to_string()], extra_model_derives: vec![], + ..Default::default() }; let exporter = SeaOrmExporterWithConfig::new(&config); @@ -2825,6 +2831,7 @@ mod tests { let config = SeaOrmConfig { extra_enum_derives: vec![], extra_model_derives: vec!["SchemaDerive".to_string()], + ..Default::default() }; let exporter = SeaOrmExporterWithConfig::new(&config); @@ -2857,6 +2864,7 @@ mod tests { let config = SeaOrmConfig { extra_enum_derives: vec![], extra_model_derives: vec![], + ..Default::default() }; let exporter = SeaOrmExporterWithConfig::new(&config); diff --git a/crates/vespertide-exporter/src/seaorm/snapshots/vespertide_exporter__seaorm__helper_tests__render_enum_snapshots@integer_color.snap b/crates/vespertide-exporter/src/seaorm/snapshots/vespertide_exporter__seaorm__helper_tests__render_enum_snapshots@integer_color.snap index f4d4a4d..6f51c71 100644 --- a/crates/vespertide-exporter/src/seaorm/snapshots/vespertide_exporter__seaorm__helper_tests__render_enum_snapshots@integer_color.snap +++ b/crates/vespertide-exporter/src/seaorm/snapshots/vespertide_exporter__seaorm__helper_tests__render_enum_snapshots@integer_color.snap @@ -3,6 +3,7 @@ source: crates/vespertide-exporter/src/seaorm/mod.rs expression: result --- #[derive(Debug, Clone, PartialEq, Eq, EnumIter, DeriveActiveEnum, Serialize, Deserialize, vespera::Schema)] +#[serde(rename_all = "camelCase")] #[sea_orm(rs_type = "i32", db_type = "Integer")] pub enum Color { Black = 0, diff --git a/crates/vespertide-exporter/src/seaorm/snapshots/vespertide_exporter__seaorm__helper_tests__render_enum_snapshots@integer_status.snap b/crates/vespertide-exporter/src/seaorm/snapshots/vespertide_exporter__seaorm__helper_tests__render_enum_snapshots@integer_status.snap index 04f506b..c3d0e8f 100644 --- a/crates/vespertide-exporter/src/seaorm/snapshots/vespertide_exporter__seaorm__helper_tests__render_enum_snapshots@integer_status.snap +++ b/crates/vespertide-exporter/src/seaorm/snapshots/vespertide_exporter__seaorm__helper_tests__render_enum_snapshots@integer_status.snap @@ -3,6 +3,7 @@ source: crates/vespertide-exporter/src/seaorm/mod.rs expression: result --- #[derive(Debug, Clone, PartialEq, Eq, EnumIter, DeriveActiveEnum, Serialize, Deserialize, vespera::Schema)] +#[serde(rename_all = "camelCase")] #[sea_orm(rs_type = "i32", db_type = "Integer")] pub enum TaskStatus { Pending = 0, diff --git a/crates/vespertide-exporter/src/seaorm/snapshots/vespertide_exporter__seaorm__helper_tests__render_enum_snapshots@string_numeric_prefix.snap b/crates/vespertide-exporter/src/seaorm/snapshots/vespertide_exporter__seaorm__helper_tests__render_enum_snapshots@string_numeric_prefix.snap index 553572d..76e3aa8 100644 --- a/crates/vespertide-exporter/src/seaorm/snapshots/vespertide_exporter__seaorm__helper_tests__render_enum_snapshots@string_numeric_prefix.snap +++ b/crates/vespertide-exporter/src/seaorm/snapshots/vespertide_exporter__seaorm__helper_tests__render_enum_snapshots@string_numeric_prefix.snap @@ -3,6 +3,7 @@ source: crates/vespertide-exporter/src/seaorm/mod.rs expression: result --- #[derive(Debug, Clone, PartialEq, Eq, EnumIter, DeriveActiveEnum, Serialize, Deserialize, vespera::Schema)] +#[serde(rename_all = "camelCase")] #[sea_orm(rs_type = "String", db_type = "Enum", enum_name = "tasks_priority")] pub enum Priority { #[sea_orm(string_value = "1_high")] diff --git a/crates/vespertide-exporter/src/seaorm/snapshots/vespertide_exporter__seaorm__helper_tests__render_enum_snapshots@string_order_status.snap b/crates/vespertide-exporter/src/seaorm/snapshots/vespertide_exporter__seaorm__helper_tests__render_enum_snapshots@string_order_status.snap index 7b42ed8..18dc90d 100644 --- a/crates/vespertide-exporter/src/seaorm/snapshots/vespertide_exporter__seaorm__helper_tests__render_enum_snapshots@string_order_status.snap +++ b/crates/vespertide-exporter/src/seaorm/snapshots/vespertide_exporter__seaorm__helper_tests__render_enum_snapshots@string_order_status.snap @@ -3,6 +3,7 @@ source: crates/vespertide-exporter/src/seaorm/mod.rs expression: result --- #[derive(Debug, Clone, PartialEq, Eq, EnumIter, DeriveActiveEnum, Serialize, Deserialize, vespera::Schema)] +#[serde(rename_all = "camelCase")] #[sea_orm(rs_type = "String", db_type = "Enum", enum_name = "orders_order_status")] pub enum OrderStatus { #[sea_orm(string_value = "pending")] diff --git a/crates/vespertide-exporter/src/seaorm/snapshots/vespertide_exporter__seaorm__tests__integer_enum_default_value_snapshots@1.snap b/crates/vespertide-exporter/src/seaorm/snapshots/vespertide_exporter__seaorm__tests__integer_enum_default_value_snapshots@1.snap index 9d0a349..1e99750 100644 --- a/crates/vespertide-exporter/src/seaorm/snapshots/vespertide_exporter__seaorm__tests__integer_enum_default_value_snapshots@1.snap +++ b/crates/vespertide-exporter/src/seaorm/snapshots/vespertide_exporter__seaorm__tests__integer_enum_default_value_snapshots@1.snap @@ -6,6 +6,7 @@ use sea_orm::entity::prelude::*; use serde::{Deserialize, Serialize}; #[derive(Debug, Clone, PartialEq, Eq, EnumIter, DeriveActiveEnum, Serialize, Deserialize, vespera::Schema)] +#[serde(rename_all = "camelCase")] #[sea_orm(rs_type = "i32", db_type = "Integer")] pub enum TaskStatus { Pending = 0, diff --git a/crates/vespertide-exporter/src/seaorm/snapshots/vespertide_exporter__seaorm__tests__integer_enum_default_value_snapshots@pending_status.snap b/crates/vespertide-exporter/src/seaorm/snapshots/vespertide_exporter__seaorm__tests__integer_enum_default_value_snapshots@pending_status.snap index 011eea9..fb10cfe 100644 --- a/crates/vespertide-exporter/src/seaorm/snapshots/vespertide_exporter__seaorm__tests__integer_enum_default_value_snapshots@pending_status.snap +++ b/crates/vespertide-exporter/src/seaorm/snapshots/vespertide_exporter__seaorm__tests__integer_enum_default_value_snapshots@pending_status.snap @@ -6,6 +6,7 @@ use sea_orm::entity::prelude::*; use serde::{Deserialize, Serialize}; #[derive(Debug, Clone, PartialEq, Eq, EnumIter, DeriveActiveEnum, Serialize, Deserialize, vespera::Schema)] +#[serde(rename_all = "camelCase")] #[sea_orm(rs_type = "i32", db_type = "Integer")] pub enum TaskStatus { Pending = 0, diff --git a/crates/vespertide-exporter/src/seaorm/snapshots/vespertide_exporter__seaorm__tests__render_entity_snapshots@params_enum_multiple_columns.snap b/crates/vespertide-exporter/src/seaorm/snapshots/vespertide_exporter__seaorm__tests__render_entity_snapshots@params_enum_multiple_columns.snap index d535817..a0bc011 100644 --- a/crates/vespertide-exporter/src/seaorm/snapshots/vespertide_exporter__seaorm__tests__render_entity_snapshots@params_enum_multiple_columns.snap +++ b/crates/vespertide-exporter/src/seaorm/snapshots/vespertide_exporter__seaorm__tests__render_entity_snapshots@params_enum_multiple_columns.snap @@ -6,6 +6,7 @@ use sea_orm::entity::prelude::*; use serde::{Deserialize, Serialize}; #[derive(Debug, Clone, PartialEq, Eq, EnumIter, DeriveActiveEnum, Serialize, Deserialize, vespera::Schema)] +#[serde(rename_all = "camelCase")] #[sea_orm(rs_type = "String", db_type = "Enum", enum_name = "products_product_category")] pub enum ProductCategory { #[sea_orm(string_value = "electronics")] @@ -17,6 +18,7 @@ pub enum ProductCategory { } #[derive(Debug, Clone, PartialEq, Eq, EnumIter, DeriveActiveEnum, Serialize, Deserialize, vespera::Schema)] +#[serde(rename_all = "camelCase")] #[sea_orm(rs_type = "String", db_type = "Enum", enum_name = "products_availability_status")] pub enum AvailabilityStatus { #[sea_orm(string_value = "in_stock")] diff --git a/crates/vespertide-exporter/src/seaorm/snapshots/vespertide_exporter__seaorm__tests__render_entity_snapshots@params_enum_nullable.snap b/crates/vespertide-exporter/src/seaorm/snapshots/vespertide_exporter__seaorm__tests__render_entity_snapshots@params_enum_nullable.snap index ebdb24a..913ee06 100644 --- a/crates/vespertide-exporter/src/seaorm/snapshots/vespertide_exporter__seaorm__tests__render_entity_snapshots@params_enum_nullable.snap +++ b/crates/vespertide-exporter/src/seaorm/snapshots/vespertide_exporter__seaorm__tests__render_entity_snapshots@params_enum_nullable.snap @@ -6,6 +6,7 @@ use sea_orm::entity::prelude::*; use serde::{Deserialize, Serialize}; #[derive(Debug, Clone, PartialEq, Eq, EnumIter, DeriveActiveEnum, Serialize, Deserialize, vespera::Schema)] +#[serde(rename_all = "camelCase")] #[sea_orm(rs_type = "String", db_type = "Enum", enum_name = "tasks_task_priority")] pub enum TaskPriority { #[sea_orm(string_value = "low")] diff --git a/crates/vespertide-exporter/src/seaorm/snapshots/vespertide_exporter__seaorm__tests__render_entity_snapshots@params_enum_shared.snap b/crates/vespertide-exporter/src/seaorm/snapshots/vespertide_exporter__seaorm__tests__render_entity_snapshots@params_enum_shared.snap index 8167ddd..a41b333 100644 --- a/crates/vespertide-exporter/src/seaorm/snapshots/vespertide_exporter__seaorm__tests__render_entity_snapshots@params_enum_shared.snap +++ b/crates/vespertide-exporter/src/seaorm/snapshots/vespertide_exporter__seaorm__tests__render_entity_snapshots@params_enum_shared.snap @@ -6,6 +6,7 @@ use sea_orm::entity::prelude::*; use serde::{Deserialize, Serialize}; #[derive(Debug, Clone, PartialEq, Eq, EnumIter, DeriveActiveEnum, Serialize, Deserialize, vespera::Schema)] +#[serde(rename_all = "camelCase")] #[sea_orm(rs_type = "String", db_type = "Enum", enum_name = "documents_doc_status")] pub enum DocStatus { #[sea_orm(string_value = "draft")] diff --git a/crates/vespertide-exporter/src/seaorm/snapshots/vespertide_exporter__seaorm__tests__render_entity_snapshots@params_enum_special_values.snap b/crates/vespertide-exporter/src/seaorm/snapshots/vespertide_exporter__seaorm__tests__render_entity_snapshots@params_enum_special_values.snap index 06d097c..cc9c602 100644 --- a/crates/vespertide-exporter/src/seaorm/snapshots/vespertide_exporter__seaorm__tests__render_entity_snapshots@params_enum_special_values.snap +++ b/crates/vespertide-exporter/src/seaorm/snapshots/vespertide_exporter__seaorm__tests__render_entity_snapshots@params_enum_special_values.snap @@ -6,6 +6,7 @@ use sea_orm::entity::prelude::*; use serde::{Deserialize, Serialize}; #[derive(Debug, Clone, PartialEq, Eq, EnumIter, DeriveActiveEnum, Serialize, Deserialize, vespera::Schema)] +#[serde(rename_all = "camelCase")] #[sea_orm(rs_type = "String", db_type = "Enum", enum_name = "events_event_severity")] pub enum EventSeverity { #[sea_orm(string_value = "info-level")] diff --git a/crates/vespertide-exporter/src/seaorm/snapshots/vespertide_exporter__seaorm__tests__render_entity_snapshots@params_enum_type.snap b/crates/vespertide-exporter/src/seaorm/snapshots/vespertide_exporter__seaorm__tests__render_entity_snapshots@params_enum_type.snap index a692d24..6f4671b 100644 --- a/crates/vespertide-exporter/src/seaorm/snapshots/vespertide_exporter__seaorm__tests__render_entity_snapshots@params_enum_type.snap +++ b/crates/vespertide-exporter/src/seaorm/snapshots/vespertide_exporter__seaorm__tests__render_entity_snapshots@params_enum_type.snap @@ -6,6 +6,7 @@ use sea_orm::entity::prelude::*; use serde::{Deserialize, Serialize}; #[derive(Debug, Clone, PartialEq, Eq, EnumIter, DeriveActiveEnum, Serialize, Deserialize, vespera::Schema)] +#[serde(rename_all = "camelCase")] #[sea_orm(rs_type = "String", db_type = "Enum", enum_name = "orders_order_status")] pub enum OrderStatus { #[sea_orm(string_value = "pending")] diff --git a/crates/vespertide-exporter/src/seaorm/snapshots/vespertide_exporter__seaorm__tests__render_entity_snapshots@params_enum_with_default.snap b/crates/vespertide-exporter/src/seaorm/snapshots/vespertide_exporter__seaorm__tests__render_entity_snapshots@params_enum_with_default.snap index 327864c..60202c5 100644 --- a/crates/vespertide-exporter/src/seaorm/snapshots/vespertide_exporter__seaorm__tests__render_entity_snapshots@params_enum_with_default.snap +++ b/crates/vespertide-exporter/src/seaorm/snapshots/vespertide_exporter__seaorm__tests__render_entity_snapshots@params_enum_with_default.snap @@ -6,6 +6,7 @@ use sea_orm::entity::prelude::*; use serde::{Deserialize, Serialize}; #[derive(Debug, Clone, PartialEq, Eq, EnumIter, DeriveActiveEnum, Serialize, Deserialize, vespera::Schema)] +#[serde(rename_all = "camelCase")] #[sea_orm(rs_type = "String", db_type = "Enum", enum_name = "tasks_task_status")] pub enum TaskStatus { #[sea_orm(string_value = "pending")] From 490150b34466ef9fd7991a56c286dce37babc3db Mon Sep 17 00:00:00 2001 From: owjs3901 Date: Mon, 12 Jan 2026 16:30:32 +0900 Subject: [PATCH 2/2] Add civerage --- crates/vespertide-config/src/name_case.rs | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/crates/vespertide-config/src/name_case.rs b/crates/vespertide-config/src/name_case.rs index 99c97e4..a47dd13 100644 --- a/crates/vespertide-config/src/name_case.rs +++ b/crates/vespertide-config/src/name_case.rs @@ -35,3 +35,15 @@ impl NameCase { } } } + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_serde_rename_all() { + assert_eq!(NameCase::Snake.serde_rename_all(), "snake_case"); + assert_eq!(NameCase::Camel.serde_rename_all(), "camelCase"); + assert_eq!(NameCase::Pascal.serde_rename_all(), "PascalCase"); + } +}