Skip to content

Commit 5dbc78f

Browse files
committed
Add config
1 parent 8b062a5 commit 5dbc78f

33 files changed

Lines changed: 77 additions & 12 deletions

File tree

crates/vespertide-config/src/config.rs

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,10 @@ pub struct SeaOrmConfig {
2626
/// Default: `Camel` (generates `#[serde(rename_all = "camelCase")]`)
2727
#[serde(default = "default_enum_naming_case")]
2828
pub enum_naming_case: NameCase,
29+
/// Naming case for serde rename_all attribute on generated models.
30+
/// Default: `Camel` (generates `#[serde(rename_all = "camelCase")]`)
31+
#[serde(default = "default_model_naming_case")]
32+
pub model_naming_case: NameCase,
2933
}
3034

3135
fn default_extra_enum_derives() -> Vec<String> {
@@ -40,12 +44,17 @@ fn default_enum_naming_case() -> NameCase {
4044
NameCase::Camel
4145
}
4246

47+
fn default_model_naming_case() -> NameCase {
48+
NameCase::Camel
49+
}
50+
4351
impl Default for SeaOrmConfig {
4452
fn default() -> Self {
4553
Self {
4654
extra_enum_derives: default_extra_enum_derives(),
47-
extra_model_derives: Vec::new(),
55+
extra_model_derives: default_extra_model_derives(),
4856
enum_naming_case: default_enum_naming_case(),
57+
model_naming_case: default_model_naming_case(),
4958
}
5059
}
5160
}
@@ -65,6 +74,11 @@ impl SeaOrmConfig {
6574
pub fn enum_naming_case(&self) -> NameCase {
6675
self.enum_naming_case
6776
}
77+
78+
/// Get the naming case for serde rename_all attribute on generated models.
79+
pub fn model_naming_case(&self) -> NameCase {
80+
self.model_naming_case
81+
}
6882
}
6983

7084
/// Top-level vespertide configuration.
@@ -195,7 +209,11 @@ mod tests {
195209
config.seaorm.extra_enum_derives,
196210
vec!["vespera::Schema".to_string()]
197211
);
198-
assert!(config.seaorm.extra_model_derives.is_empty());
212+
assert_eq!(
213+
config.seaorm.extra_model_derives,
214+
vec!["vespera::Schema".to_string()]
215+
);
216+
assert_eq!(config.seaorm.model_naming_case, NameCase::Camel);
199217
assert_eq!(config.prefix, "");
200218
}
201219

crates/vespertide-config/src/lib.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ mod tests {
4141
fn seaorm_config_default_has_vespera_schema() {
4242
let cfg = SeaOrmConfig::default();
4343
assert_eq!(cfg.extra_enum_derives(), &["vespera::Schema".to_string()]);
44-
assert!(cfg.extra_model_derives().is_empty());
44+
assert_eq!(cfg.extra_model_derives(), &["vespera::Schema".to_string()]);
4545
}
4646

4747
#[test]
@@ -70,7 +70,8 @@ mod tests {
7070
let json = r#"{}"#;
7171
let cfg: SeaOrmConfig = serde_json::from_str(json).unwrap();
7272
assert_eq!(cfg.extra_enum_derives(), &["vespera::Schema".to_string()]);
73-
assert!(cfg.extra_model_derives().is_empty());
73+
assert_eq!(cfg.extra_model_derives(), &["vespera::Schema".to_string()]);
74+
assert_eq!(cfg.model_naming_case(), NameCase::Camel);
7475
}
7576

7677
#[test]

crates/vespertide-exporter/src/seaorm/mod.rs

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,15 @@ pub fn render_entity_with_config(
103103
}
104104

105105
// Build model derive line with optional extra derives
106-
let mut model_derives = vec!["Clone", "Debug", "PartialEq", "Eq", "DeriveEntityModel"];
106+
let mut model_derives = vec![
107+
"Clone",
108+
"Debug",
109+
"PartialEq",
110+
"Eq",
111+
"DeriveEntityModel",
112+
"Serialize",
113+
"Deserialize",
114+
];
107115
let extra_model_derives: Vec<&str> = config
108116
.extra_model_derives()
109117
.iter()
@@ -120,6 +128,10 @@ pub fn render_entity_with_config(
120128

121129
lines.push("#[sea_orm::model]".into());
122130
lines.push(format!("#[derive({})]", model_derives.join(", ")));
131+
lines.push(format!(
132+
"#[serde(rename_all = \"{}\")]",
133+
config.model_naming_case().serde_rename_all()
134+
));
123135
lines.push(format!(
124136
"#[sea_orm(table_name = \"{}{}\")]",
125137
prefix, table.name

crates/vespertide-exporter/src/seaorm/snapshots/vespertide_exporter__seaorm__tests__integer_enum_default_value_snapshots@1.snap

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ pub enum TaskStatus {
1616

1717
#[sea_orm::model]
1818
#[derive(Clone, Debug, PartialEq, Eq, DeriveEntityModel, Serialize, Deserialize)]
19+
#[serde(rename_all = "camelCase")]
1920
#[sea_orm(table_name = "tasks")]
2021
pub struct Model {
2122
#[sea_orm(primary_key)]

crates/vespertide-exporter/src/seaorm/snapshots/vespertide_exporter__seaorm__tests__integer_enum_default_value_snapshots@pending_status.snap

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ pub enum TaskStatus {
1616

1717
#[sea_orm::model]
1818
#[derive(Clone, Debug, PartialEq, Eq, DeriveEntityModel, Serialize, Deserialize)]
19+
#[serde(rename_all = "camelCase")]
1920
#[sea_orm(table_name = "tasks")]
2021
pub struct Model {
2122
#[sea_orm(primary_key)]

crates/vespertide-exporter/src/seaorm/snapshots/vespertide_exporter__seaorm__tests__render_entity_snapshots@params_basic_single_pk.snap

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ use serde::{Deserialize, Serialize};
77

88
#[sea_orm::model]
99
#[derive(Clone, Debug, PartialEq, Eq, DeriveEntityModel, Serialize, Deserialize)]
10+
#[serde(rename_all = "camelCase")]
1011
#[sea_orm(table_name = "users")]
1112
pub struct Model {
1213
#[sea_orm(primary_key)]

crates/vespertide-exporter/src/seaorm/snapshots/vespertide_exporter__seaorm__tests__render_entity_snapshots@params_composite_pk.snap

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ use serde::{Deserialize, Serialize};
77

88
#[sea_orm::model]
99
#[derive(Clone, Debug, PartialEq, Eq, DeriveEntityModel, Serialize, Deserialize)]
10+
#[serde(rename_all = "camelCase")]
1011
#[sea_orm(table_name = "accounts")]
1112
pub struct Model {
1213
#[sea_orm(primary_key, auto_increment = false)]

crates/vespertide-exporter/src/seaorm/snapshots/vespertide_exporter__seaorm__tests__render_entity_snapshots@params_enum_multiple_columns.snap

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ pub enum AvailabilityStatus {
3131

3232
#[sea_orm::model]
3333
#[derive(Clone, Debug, PartialEq, Eq, DeriveEntityModel, Serialize, Deserialize)]
34+
#[serde(rename_all = "camelCase")]
3435
#[sea_orm(table_name = "products")]
3536
pub struct Model {
3637
#[sea_orm(primary_key)]

crates/vespertide-exporter/src/seaorm/snapshots/vespertide_exporter__seaorm__tests__render_entity_snapshots@params_enum_nullable.snap

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ pub enum TaskPriority {
2121

2222
#[sea_orm::model]
2323
#[derive(Clone, Debug, PartialEq, Eq, DeriveEntityModel, Serialize, Deserialize)]
24+
#[serde(rename_all = "camelCase")]
2425
#[sea_orm(table_name = "tasks")]
2526
pub struct Model {
2627
#[sea_orm(primary_key)]

crates/vespertide-exporter/src/seaorm/snapshots/vespertide_exporter__seaorm__tests__render_entity_snapshots@params_enum_shared.snap

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ pub enum DocStatus {
1919

2020
#[sea_orm::model]
2121
#[derive(Clone, Debug, PartialEq, Eq, DeriveEntityModel, Serialize, Deserialize)]
22+
#[serde(rename_all = "camelCase")]
2223
#[sea_orm(table_name = "documents")]
2324
pub struct Model {
2425
#[sea_orm(primary_key)]

0 commit comments

Comments
 (0)