use serde::{Deserialize, Serialize};
use std::collections::HashMap;
use crate::schema::types::schema::Schema;
#[derive(Debug, Serialize, Deserialize)]
pub struct SchemaLoadingReport {
pub discovered_schemas: Vec<String>,
pub loaded_schemas: Vec<String>,
pub failed_schemas: Vec<(String, String)>,
pub schema_states: HashMap<String, SchemaState>,
pub loading_sources: HashMap<String, SchemaSource>,
pub last_updated: chrono::DateTime<chrono::Utc>,
}
#[derive(Debug, Serialize, Deserialize)]
pub enum SchemaSource {
AvailableDirectory,
DataDirectory,
Persistence,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, Default)]
pub enum SchemaState {
#[default]
Available,
Approved,
Blocked,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SchemaWithState {
#[serde(flatten)]
pub schema: Schema,
pub state: SchemaState,
}
impl SchemaWithState {
pub fn new(schema: Schema, state: SchemaState) -> Self {
Self { schema, state }
}
pub fn name(&self) -> &str {
&self.schema.name
}
}