#[repr(C)]pub struct ProvenanceHeader {
pub node_type: ProvNodeType,
pub node_id: u64,
pub relations: [ProvRelation; 4],
pub overflow_ref: Option<u64>,
pub prov_timestamp: HlcTimestamp,
pub plan_id: Option<u64>,
}Expand description
PROV-O attribution metadata attached to a message envelope.
- Absent:
MessageEnvelope::provenance == None- 1 byte overhead. - Present: ~
size_of::<ProvenanceHeader>()bytes inline (verified by test [tests::test_provenance_header_size]). The spec notes a ~88 byte target; actual size depends on natural alignment and is asserted in the test module. - With >4 relations: one extra cache line referenced by
overflow_ref(caller owns that off-band record).
Fields§
§node_type: ProvNodeTypeClassification of the node this header describes.
node_id: u64Globally unique PROV node ID (Entity/Activity/Agent/Plan).
relations: [ProvRelation; 4]Inline PROV relations. Empty slots have kind == ProvRelationKind::None.
When more than 4 relations are needed, callers set overflow_ref.
overflow_ref: Option<u64>Optional off-band pointer to an extended relations record. None
when all relations fit inline.
prov_timestamp: HlcTimestampHLC timestamp of the PROV event (generation / attribution time).
plan_id: Option<u64>Optional Plan ID when this activity is executed under a Plan.
Implementations§
Source§impl ProvenanceHeader
impl ProvenanceHeader
Sourcepub const fn new(node_type: ProvNodeType, node_id: u64) -> Self
pub const fn new(node_type: ProvNodeType, node_id: u64) -> Self
Construct a header with all empty relation slots.
Sourcepub fn relation_count(&self) -> usize
pub fn relation_count(&self) -> usize
Number of populated inline relations.
Sourcepub const fn has_overflow(&self) -> bool
pub const fn has_overflow(&self) -> bool
Whether any overflow relations are referenced.
Sourcepub fn iter_relations(&self) -> impl Iterator<Item = &ProvRelation>
pub fn iter_relations(&self) -> impl Iterator<Item = &ProvRelation>
Iterate over the populated inline relations.
Sourcepub fn find_relation(&self, kind: ProvRelationKind) -> Option<&ProvRelation>
pub fn find_relation(&self, kind: ProvRelationKind) -> Option<&ProvRelation>
Find the first relation of a given kind, if present inline.
Sourcepub fn validate(&self) -> Result<(), ProvenanceError>
pub fn validate(&self) -> Result<(), ProvenanceError>
Validate structural invariants that are cheap to check.
node_idmust be non-zero (0 is reserved as “unset”).- At most one self-loop is allowed (would indicate a cycle).
- Relation kinds must be consistent with the declared
node_typewhen they have an expected source type.
Trait Implementations§
Source§impl Archive for ProvenanceHeaderwhere
ProvNodeType: Archive,
u64: Archive,
[ProvRelation; 4]: Archive,
Option<u64>: Archive,
HlcTimestamp: Archive,
impl Archive for ProvenanceHeaderwhere
ProvNodeType: Archive,
u64: Archive,
[ProvRelation; 4]: Archive,
Option<u64>: Archive,
HlcTimestamp: Archive,
Source§type Archived = ArchivedProvenanceHeader
type Archived = ArchivedProvenanceHeader
Source§type Resolver = ProvenanceHeaderResolver
type Resolver = ProvenanceHeaderResolver
Source§impl Clone for ProvenanceHeader
impl Clone for ProvenanceHeader
Source§fn clone(&self) -> ProvenanceHeader
fn clone(&self) -> ProvenanceHeader
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for ProvenanceHeader
impl Debug for ProvenanceHeader
Source§impl Default for ProvenanceHeader
impl Default for ProvenanceHeader
Source§impl<__D: Fallible + ?Sized> Deserialize<ProvenanceHeader, __D> for Archived<ProvenanceHeader>where
ProvNodeType: Archive,
Archived<ProvNodeType>: Deserialize<ProvNodeType, __D>,
u64: Archive,
Archived<u64>: Deserialize<u64, __D>,
[ProvRelation; 4]: Archive,
Archived<[ProvRelation; 4]>: Deserialize<[ProvRelation; 4], __D>,
Option<u64>: Archive,
Archived<Option<u64>>: Deserialize<Option<u64>, __D>,
HlcTimestamp: Archive,
Archived<HlcTimestamp>: Deserialize<HlcTimestamp, __D>,
impl<__D: Fallible + ?Sized> Deserialize<ProvenanceHeader, __D> for Archived<ProvenanceHeader>where
ProvNodeType: Archive,
Archived<ProvNodeType>: Deserialize<ProvNodeType, __D>,
u64: Archive,
Archived<u64>: Deserialize<u64, __D>,
[ProvRelation; 4]: Archive,
Archived<[ProvRelation; 4]>: Deserialize<[ProvRelation; 4], __D>,
Option<u64>: Archive,
Archived<Option<u64>>: Deserialize<Option<u64>, __D>,
HlcTimestamp: Archive,
Archived<HlcTimestamp>: Deserialize<HlcTimestamp, __D>,
Source§fn deserialize(
&self,
deserializer: &mut __D,
) -> Result<ProvenanceHeader, __D::Error>
fn deserialize( &self, deserializer: &mut __D, ) -> Result<ProvenanceHeader, __D::Error>
Source§impl PartialEq for ProvenanceHeader
impl PartialEq for ProvenanceHeader
Source§impl<__S: Fallible + ?Sized> Serialize<__S> for ProvenanceHeaderwhere
ProvNodeType: Serialize<__S>,
u64: Serialize<__S>,
[ProvRelation; 4]: Serialize<__S>,
Option<u64>: Serialize<__S>,
HlcTimestamp: Serialize<__S>,
impl<__S: Fallible + ?Sized> Serialize<__S> for ProvenanceHeaderwhere
ProvNodeType: Serialize<__S>,
u64: Serialize<__S>,
[ProvRelation; 4]: Serialize<__S>,
Option<u64>: Serialize<__S>,
HlcTimestamp: Serialize<__S>,
impl Copy for ProvenanceHeader
impl Eq for ProvenanceHeader
impl StructuralPartialEq for ProvenanceHeader
Auto Trait Implementations§
impl Freeze for ProvenanceHeader
impl RefUnwindSafe for ProvenanceHeader
impl Send for ProvenanceHeader
impl Sync for ProvenanceHeader
impl Unpin for ProvenanceHeader
impl UnsafeUnpin for ProvenanceHeader
impl UnwindSafe for ProvenanceHeader
Blanket Implementations§
Source§impl<T> ArchivePointee for T
impl<T> ArchivePointee for T
Source§type ArchivedMetadata = ()
type ArchivedMetadata = ()
Source§fn pointer_metadata(
_: &<T as ArchivePointee>::ArchivedMetadata,
) -> <T as Pointee>::Metadata
fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata
Source§impl<T> ArchiveUnsized for Twhere
T: Archive,
impl<T> ArchiveUnsized for Twhere
T: Archive,
Source§type Archived = <T as Archive>::Archived
type Archived = <T as Archive>::Archived
Archive, it may be unsized. Read more