use serde::{Deserialize, Serialize};
use utoipa::ToSchema;
use uuid::Uuid;
#[derive(Debug, Clone, Deserialize, ToSchema)]
#[serde(rename_all = "camelCase")]
pub struct StorePrincipalConfigurationPayloadDTO {
pub name: String,
pub config: serde_json::Value,
}
#[derive(Debug, Clone, Serialize, ToSchema)]
pub struct PrincipalConfigurationDTO {
pub id: Uuid,
#[serde(rename = "ownerId")]
pub owner_id: Uuid,
pub name: String,
pub configuration: serde_json::Value,
#[serde(rename = "createdAt")]
pub created_at: chrono::DateTime<chrono::Utc>,
#[serde(rename = "updatedAt")]
pub updated_at: Option<chrono::DateTime<chrono::Utc>>,
}
#[cfg(test)]
#[allow(
clippy::unwrap_used,
clippy::expect_used,
reason = "test code — panics are acceptable failures"
)]
mod tests {
use super::*;
#[test]
fn dto_serializes_with_camel_and_snake_keys() {
let dto = PrincipalConfigurationDTO {
id: Uuid::nil(),
owner_id: Uuid::nil(),
name: "default".into(),
configuration: serde_json::json!({}),
created_at: chrono::Utc::now(),
updated_at: None,
};
let s = serde_json::to_string(&dto).expect("serialize");
assert!(s.contains(r#""id":"#));
assert!(s.contains(r#""ownerId":"#));
assert!(s.contains(r#""name":"default""#));
assert!(s.contains(r#""configuration":"#));
assert!(s.contains(r#""createdAt":"#));
assert!(s.contains(r#""updatedAt":null"#));
assert!(!s.contains(r#""owner_id":"#));
}
}