Skip to main content

helm_schema_ir/contract/
document.rs

1use serde::{Deserialize, Serialize};
2
3use super::ContractUse;
4use crate::contract_normalization::canonicalize_contract_uses;
5
6/// Versioned serialized contract document for stable inspection and tooling.
7#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
8pub struct ContractDocument {
9    /// Serialized contract format version.
10    pub version: u32,
11    /// Canonical contract uses carried by the document.
12    pub uses: Vec<ContractUse>,
13}
14
15impl ContractDocument {
16    /// Current serialized contract format version.
17    pub const VERSION: u32 = 3;
18
19    /// Canonicalizes contract uses and wraps them in the current format.
20    #[must_use]
21    pub fn from_contract_uses(mut uses: Vec<ContractUse>) -> Self {
22        canonicalize_contract_uses(&mut uses);
23        Self {
24            version: Self::VERSION,
25            uses,
26        }
27    }
28}
29
30#[cfg(test)]
31#[path = "../tests/contract/document.rs"]
32mod tests;