pub trait ProvenanceSource:
Copy
+ Send
+ Sync
+ 'static {
// Required method
fn as_str(&self) -> &'static str;
// Provided methods
fn provenance(self) -> Provenance { ... }
fn proposed_fact<T>(
self,
key: ContextKey,
id: impl Into<ProposalId>,
payload: T,
) -> ProposedFact
where T: FactPayload + PartialEq { ... }
}Expand description
Stable, audit-friendly identifier for an extension that emits facts into the convergence loop.
Implementors are typically zero-sized marker types declared by
each fact-emitting crate. The trait gives them a single canonical
as_str plus a default
proposed_fact constructor
that stamps the resulting ProposedFact with the right
Provenance string.
§Migration from the per-crate ProvenanceSource enum
Earlier fact-emitting extensions each duplicated an 8-variant
ProvenanceSource enum and a *_PROVENANCE constant. This trait
replaces that pattern. Each crate now declares only its own marker
and canonical provenance constant:
use converge_pack::{ProvenanceSource, ContextKey, TextPayload};
pub struct Arbiter;
impl ProvenanceSource for Arbiter {
fn as_str(&self) -> &'static str { "arbiter" }
}
pub const ARBITER_PROVENANCE: Arbiter = Arbiter;
let provenance = ARBITER_PROVENANCE.provenance();
let fact = ARBITER_PROVENANCE.proposed_fact(
ContextKey::Diagnostic,
"decision-001",
TextPayload::new("hello"),
);
assert_eq!(fact.provenance_ref(), &provenance);Extensions no longer need to enumerate every sibling extension.
Required Methods§
Sourcefn as_str(&self) -> &'static str
fn as_str(&self) -> &'static str
Canonical lowercase identifier carried on
ProposedFact.provenance. Stable across the extension’s
public API.
Provided Methods§
Sourcefn provenance(self) -> Provenance
fn provenance(self) -> Provenance
Construct typed Provenance from this marker.
Sourcefn proposed_fact<T>(
self,
key: ContextKey,
id: impl Into<ProposalId>,
payload: T,
) -> ProposedFactwhere
T: FactPayload + PartialEq,
fn proposed_fact<T>(
self,
key: ContextKey,
id: impl Into<ProposalId>,
payload: T,
) -> ProposedFactwhere
T: FactPayload + PartialEq,
Construct a ProposedFact stamped with this provenance and
a typed payload.
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety".