use serde::{Deserialize, Serialize};
use crate::event::identity::RunId;
use crate::locator::{GitOid, Locator};
use crate::model::Effort;
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(untagged)]
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
pub enum CheckpointCommitted {
JobPinned {
#[cfg_attr(feature = "schema", schemars(with = "String"))]
job: Locator,
},
Committed(Commit),
}
#[derive(Debug, Clone, PartialEq, Eq, Default, Serialize, Deserialize)]
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
pub struct CommitAttribution {
#[serde(default)]
pub model: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub effort: Option<Effort>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub predecessor: Option<RunId>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
pub struct Commit {
#[cfg_attr(feature = "schema", schemars(with = "String"))]
pub oid: GitOid,
#[serde(flatten)]
pub by: CommitAttribution,
#[serde(default)]
pub scope: Vec<String>,
#[serde(default)]
pub files: Vec<String>,
}
#[cfg(test)]
#[allow(
clippy::unwrap_used,
clippy::expect_used,
clippy::panic,
clippy::indexing_slicing,
reason = "test code"
)]
mod tests;