Skip to main content

runx_contracts/
redaction.rs

1//! Redaction contracts: redacted-field markers and hash commitments.
2use serde::{Deserialize, Serialize};
3
4use crate::Reference;
5use crate::schema::{IsoDateTime, NonEmptyString, RunxSchema};
6
7pub const REDACTION_SCHEMA: &str = "runx.redaction.v1";
8
9#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize, RunxSchema)]
10pub enum RedactionSchema {
11    #[serde(rename = "runx.redaction.v1")]
12    V1,
13}
14
15#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize, RunxSchema)]
16#[serde(rename_all = "snake_case")]
17pub enum HashAlgorithm {
18    Sha256,
19}
20
21#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize, RunxSchema)]
22#[serde(deny_unknown_fields)]
23pub struct HashCommitment {
24    pub algorithm: HashAlgorithm,
25    pub value: NonEmptyString,
26    pub canonicalization: NonEmptyString,
27}
28
29#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize, RunxSchema)]
30#[serde(deny_unknown_fields)]
31#[runx_schema(id = "runx.redaction.v1")]
32pub struct Redaction {
33    pub schema: RedactionSchema,
34    pub redaction_id: NonEmptyString,
35    pub policy_ref: Reference,
36    #[serde(default)]
37    pub redacted_fields: Vec<NonEmptyString>,
38    #[serde(default)]
39    pub hash_commitments: Vec<HashCommitment>,
40    pub canonicalization: NonEmptyString,
41    pub performed_by_ref: Reference,
42    pub performed_at: IsoDateTime,
43}