use serde::{Deserialize, Serialize}; use serde_json::Value as JsonValue; use utoipa::{IntoParams, ToSchema}; use validator::Validate; #[derive(Debug, Clone, Deserialize, IntoParams)] pub struct PermissionSetQueryParams { #[serde(default)] pub pack_ref: Option, } #[derive(Debug, Clone, Serialize, ToSchema)] pub struct IdentitySummary { pub id: i64, pub login: String, pub display_name: Option, pub attributes: JsonValue, } pub type IdentityResponse = IdentitySummary; #[derive(Debug, Clone, Serialize, ToSchema)] pub struct PermissionSetSummary { pub id: i64, pub r#ref: String, pub pack_ref: Option, pub label: Option, pub description: Option, pub grants: JsonValue, } #[derive(Debug, Clone, Serialize, ToSchema)] pub struct PermissionAssignmentResponse { pub id: i64, pub identity_id: i64, pub permission_set_id: i64, pub permission_set_ref: String, pub created: chrono::DateTime, } #[derive(Debug, Clone, Deserialize, ToSchema)] pub struct CreatePermissionAssignmentRequest { pub identity_id: Option, pub identity_login: Option, pub permission_set_ref: String, } #[derive(Debug, Clone, Deserialize, Validate, ToSchema)] pub struct CreateIdentityRequest { #[validate(length(min = 3, max = 255))] pub login: String, #[validate(length(max = 255))] pub display_name: Option, #[validate(length(min = 8, max = 128))] pub password: Option, #[serde(default)] pub attributes: JsonValue, } #[derive(Debug, Clone, Deserialize, ToSchema)] pub struct UpdateIdentityRequest { pub display_name: Option, pub password: Option, pub attributes: Option, }