From 6a7e2863832bc405faf5c63b376eb41c7f8382c3 Mon Sep 17 00:00:00 2001 From: Adam Perry Date: Thu, 25 Jun 2026 14:43:42 +0000 Subject: [PATCH] define schema breakage violations --- codex-rs/Cargo.lock | 1 + codex-rs/schema-evolution/Cargo.toml | 1 + codex-rs/schema-evolution/src/lib.rs | 3 +++ codex-rs/schema-evolution/src/violation.rs | 26 ++++++++++++++++++++++ 4 files changed, 31 insertions(+) create mode 100644 codex-rs/schema-evolution/src/violation.rs diff --git a/codex-rs/Cargo.lock b/codex-rs/Cargo.lock index 78ff5bd62c..17bab1e24b 100644 --- a/codex-rs/Cargo.lock +++ b/codex-rs/Cargo.lock @@ -3844,6 +3844,7 @@ version = "0.0.0" dependencies = [ "anyhow", "pretty_assertions", + "serde", "serde_json", ] diff --git a/codex-rs/schema-evolution/Cargo.toml b/codex-rs/schema-evolution/Cargo.toml index 9a4f50a078..3dc8e0247d 100644 --- a/codex-rs/schema-evolution/Cargo.toml +++ b/codex-rs/schema-evolution/Cargo.toml @@ -14,6 +14,7 @@ workspace = true [dependencies] anyhow = { workspace = true } +serde = { workspace = true, features = ["derive"] } serde_json = { workspace = true } [dev-dependencies] diff --git a/codex-rs/schema-evolution/src/lib.rs b/codex-rs/schema-evolution/src/lib.rs index 7f769f7996..c2e7c1a15c 100644 --- a/codex-rs/schema-evolution/src/lib.rs +++ b/codex-rs/schema-evolution/src/lib.rs @@ -1,5 +1,6 @@ mod model; mod parse; +mod violation; pub use model::ApiSchema; pub(crate) use model::Arguments; @@ -14,3 +15,5 @@ pub(crate) use model::TypeSet; pub(crate) use model::UnionKind; pub(crate) use model::UnionSchema; pub(crate) use model::ValueSet; +pub use violation::SchemaBreakage; +pub use violation::ViolationKind; diff --git a/codex-rs/schema-evolution/src/violation.rs b/codex-rs/schema-evolution/src/violation.rs new file mode 100644 index 0000000000..60947a2718 --- /dev/null +++ b/codex-rs/schema-evolution/src/violation.rs @@ -0,0 +1,26 @@ +use serde::Deserialize; +use serde::Serialize; +use serde_json::Value; + +#[derive(Clone, Debug, Deserialize, Eq, Ord, PartialEq, PartialOrd, Serialize)] +#[serde(rename_all = "camelCase")] +pub enum ViolationKind { + AdditionalPropertiesNarrowed, + ConstraintChanged, + EnumNarrowed, + MethodRemoved, + PropertyRemoved, + RequiredPropertyAdded, + TypeNarrowed, + UnionVariantRemoved, +} + +#[derive(Clone, Debug, Eq, PartialEq, Serialize)] +#[serde(rename_all = "camelCase")] +pub struct SchemaBreakage { + pub kind: ViolationKind, + pub method: String, + pub path: String, + pub before: Value, + pub after: Value, +}