rustev_contract/
snapshot.rs1use serde::{Deserialize, Serialize};
8use serde_json::Value;
9
10use crate::definition::ProvenanceClass;
11use crate::grade::Grade;
12use crate::ids::SnapshotId;
13use crate::limits::SNAPSHOT_V1;
14use crate::schema;
15use crate::time::Timestamp;
16
17#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, schemars::JsonSchema)]
18#[serde(deny_unknown_fields)]
19pub struct Snapshot {
20 pub schema: String,
21 pub entries: Vec<Entry>,
22}
23
24crate::document::versioned_document!(
25 Snapshot,
26 [schema::SNAPSHOT, schema::SNAPSHOT_V2],
27 "rustev.snapshot/1 or rustev.snapshot/2",
28 SNAPSHOT_V1,
29 SnapshotId
30);
31
32#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, schemars::JsonSchema)]
33#[serde(deny_unknown_fields)]
34pub struct Entry {
35 pub field: String,
37 pub value: Value,
39 pub provenance: ProvenanceClass,
40 pub as_of_ms: Timestamp,
41 pub source: String,
43 #[serde(default, skip_serializing_if = "Option::is_none")]
46 pub grade: Option<Grade>,
47 #[serde(
49 default,
50 skip_serializing_if = "Option::is_none",
51 deserialize_with = "crate::screening::present"
52 )]
53 pub producer: Option<Producer>,
54}
55
56#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, schemars::JsonSchema)]
57#[serde(deny_unknown_fields)]
58pub struct Producer {
59 pub artifact_id: crate::ids::ArtifactId,
60 pub template_digest: TemplateDigest,
61 pub produced_at_ms: Timestamp,
62}
63#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, schemars::JsonSchema)]
64#[serde(rename_all = "snake_case")]
65pub enum TemplateDigest {
66 None,
67 #[serde(untagged)]
68 Digest(crate::ids::PromptTemplateId),
69}