use serde::{Deserialize, Serialize};
pub type Sha256 = String;
pub type IsoTime = String;
pub type Uri = String;
pub type Did = String;
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
pub struct Signature {
pub alg: String,
pub kid: String,
pub sig: String,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
pub struct SpanShape {
pub tool_id: String,
pub tool_version: String,
#[serde(rename = "param_schema")]
pub param_schema: serde_json::Value,
#[serde(skip_serializing_if = "Option::is_none")]
pub checker_ref: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
pub struct MethodShapeManifest {
pub schema_version: String,
pub method_id: String,
pub version: String,
pub method_shape_root: Sha256,
#[serde(skip_serializing_if = "Option::is_none")]
pub method_dag_hash: Option<Sha256>,
pub runtime: RuntimePins,
#[serde(default)]
pub checker_refs: Vec<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub default_policy_id: Option<String>,
pub publisher_sig: Signature,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
pub struct RuntimePins {
pub image_digest: Sha256,
pub method_fingerprint: String,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
pub struct Trace {
pub schema_version: String,
pub trace_id: String,
pub method_ref: MethodRef,
pub data_shape_hash: Sha256,
pub policy_id: String,
pub identity_route: Did,
pub content_route: Uri,
#[serde(skip_serializing_if = "Option::is_none")]
pub execution_route: Option<ExecutionRoute>,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
pub struct MethodRef {
pub method_id: String,
pub version: String,
pub method_shape_root: Sha256,
pub image_digest: Sha256,
pub method_fingerprint: String,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
pub struct ExecutionRoute {
pub provider: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub account: Option<String>,
pub region: String,
pub runtime_digest: Sha256,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
pub struct SpanCommitment {
pub schema_version: String,
pub trace_id: String,
pub span_id: String,
pub method_ref: MethodRef,
pub data_shape_hash: Sha256,
pub span_shape_hash: Sha256,
pub inputs: Vec<ArtifactRef>,
pub outputs: Vec<ArtifactRef>,
pub start_time: IsoTime,
pub end_time: IsoTime,
pub status: SpanStatus,
#[serde(skip_serializing_if = "Option::is_none")]
pub meta: Option<SpanMeta>,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
pub struct ArtifactRef {
pub name: String,
pub content_hash: Sha256,
#[serde(skip_serializing_if = "Option::is_none")]
pub uri: Option<Uri>,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
#[serde(rename_all = "UPPERCASE")]
pub enum SpanStatus {
OK,
ERROR,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
pub struct SpanMeta {
#[serde(skip_serializing_if = "Option::is_none")]
pub lamport: Option<u64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub parents: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub order_index: Option<u64>,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
pub struct SignedSpan {
pub commitment: SpanCommitment,
pub signature: Signature,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
pub struct TraceRoots {
pub trace_id: String,
pub span_commitments: Vec<Sha256>,
pub trace_set_root: Sha256,
#[serde(skip_serializing_if = "Option::is_none")]
pub identity_root: Option<Sha256>,
#[serde(skip_serializing_if = "Option::is_none")]
pub trace_seq_root: Option<Sha256>,
pub method_shape_root: Sha256,
#[serde(skip_serializing_if = "Option::is_none")]
pub tier01_status: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub server_sig: Option<Signature>,
}