use schemars::JsonSchema;
use serde::Serialize;
use serde_json::Value;
#[derive(Debug, Clone, Copy)]
pub struct ReportContract {
pub schema_name: &'static str,
pub machine_output_kind: MachineOutputKind,
pub output_discriminator: Option<OutputDiscriminator>,
pub schema: fn() -> Value,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct OutputDiscriminator {
pub field: &'static str,
pub value: &'static str,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum MachineOutputKind {
Json,
JsonLines,
JsonOrJsonLines,
}
pub trait HeddleReport: Serialize + JsonSchema {
const CONTRACT: ReportContract;
}
pub fn schema_for_report<T>() -> Value
where
T: JsonSchema,
{
serde_json::to_value(schemars::schema_for!(T))
.unwrap_or_else(|_| serde_json::json!({ "type": "object" }))
}