use std::path::PathBuf;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum SchemaKind {
CrashMetadata,
LogAttributes,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SchemaSpec {
pub kind: SchemaKind,
pub path: PathBuf,
}
#[derive(Debug, thiserror::Error)]
pub enum SchemaError {
#[error("schema I/O error reading `{path}`: {source}")]
Io {
path: PathBuf,
#[source]
source: std::io::Error,
},
#[error("schema parse error in `{path}`: {source}")]
Parse {
path: PathBuf,
#[source]
source: serde_json::Error,
},
#[error("validation failed for {kind:?}: {errors:?}")]
Validation {
kind: SchemaKind,
errors: Vec<String>,
},
#[error("no schema registered for project `{project}` / kind `{kind:?}`")]
UnknownSchema {
project: String,
kind: SchemaKind,
},
}