use onemessagebus::{Registry, SchemaId};
use serde_json::Value;
use crate::event::{Envelope, EventFilter, Labels};
pub const EVENT_ENVELOPE_FAMILY: &str = "agent.event-envelope";
pub const EVENT_ENVELOPE_READS: &[u32] = &[2, 1];
pub const ARTIFACT_REF: SchemaId = SchemaId::literal("agent", "artifact-ref", 1);
pub const EVENT_FILTER: SchemaId = SchemaId::literal("agent", "event-filter", 1);
#[must_use]
pub fn event_envelope_schema(version: u32) -> Value {
let mut schema = schemars::schema_for!(Envelope).to_value();
if let Some(v) = schema.pointer_mut("/properties/v") {
if let Some(object) = v.as_object_mut() {
object.insert("const".to_owned(), Value::from(version));
}
}
schema
}
#[must_use]
pub fn registry() -> Registry {
let mut registry = Registry::new();
for version in EVENT_ENVELOPE_READS {
registry
.register_schema(
SchemaId::literal("agent", "event-envelope", *version),
event_envelope_schema(*version),
)
.expect("the event envelope schema registers");
}
registry
.register_schema(
ARTIFACT_REF,
schemars::schema_for!(crate::ArtifactRef).to_value(),
)
.expect("the artifact reference schema registers");
registry
.register_schema(EVENT_FILTER, schemars::schema_for!(EventFilter).to_value())
.expect("the filter schema registers");
registry
.register::<Labels>()
.expect("the labels schema registers");
registry
.register::<crate::note::Note>()
.expect("the note schema registers");
onemessagebus::transport::register_protocol(&mut registry)
.expect("the transport plugin protocol's schemas register");
registry
}