pub struct ApiVisibilityComparison { /* private fields */ }Expand description
One host-paired API visibility comparison.
This contract is intentionally atomic. The host must compare the same logical resource under the declared views before constructing it; the rule engine never combines independent UI, API, or principal observations. Context and scope identifiers must be opaque, non-secret handles. Raw credentials, tokens, URLs, response values, and resource names do not belong in this contract or its resulting evidence.
§Examples
use termivar_core::{
ApiSurfaceKind, ApiVisibilityComparison, ApiVisibilityDimension,
ApiVisibilityPairKind, ApiVisibilityResult, ConfidenceScore,
};
let comparison = ApiVisibilityComparison::new(
"comparison-17",
ApiSurfaceKind::JsonHttp,
ApiVisibilityPairKind::AuthorizationContext,
ApiVisibilityResult::Different,
ApiVisibilityDimension::Fields,
"anonymous-context",
"member-context",
"account-resource",
)?;
let observation = comparison.to_observation("host.api-comparator", ConfidenceScore::MAX)?;
let evidence = observation.evidence();
assert!(evidence.subject().as_str().starts_with("api-comparison:"));
assert_eq!(evidence.source().correlation_id(), Some(evidence.subject().as_str()));
assert_eq!(observation.scope_relation().to(), observation.resource_scope());Implementations§
Source§impl ApiVisibilityComparison
impl ApiVisibilityComparison
Sourcepub fn new(
comparison_id: impl Into<String>,
surface: ApiSurfaceKind,
pair: ApiVisibilityPairKind,
result: ApiVisibilityResult,
dimension: ApiVisibilityDimension,
baseline_context_id: impl Into<String>,
candidate_context_id: impl Into<String>,
resource_scope_id: impl Into<String>,
) -> Result<Self, ApiVocabularyError>
pub fn new( comparison_id: impl Into<String>, surface: ApiSurfaceKind, pair: ApiVisibilityPairKind, result: ApiVisibilityResult, dimension: ApiVisibilityDimension, baseline_context_id: impl Into<String>, candidate_context_id: impl Into<String>, resource_scope_id: impl Into<String>, ) -> Result<Self, ApiVocabularyError>
Creates one validated, already-paired observation.
Sourcepub fn new_typed(
comparison_id: ComparisonId,
surface: ApiSurfaceKind,
pair: ApiVisibilityPairKind,
result: ApiVisibilityResult,
dimension: ApiVisibilityDimension,
baseline_context_id: OpaqueContextId,
candidate_context_id: OpaqueContextId,
resource_scope_id: ResourceScopeId,
) -> Result<Self, ApiVocabularyError>
pub fn new_typed( comparison_id: ComparisonId, surface: ApiSurfaceKind, pair: ApiVisibilityPairKind, result: ApiVisibilityResult, dimension: ApiVisibilityDimension, baseline_context_id: OpaqueContextId, candidate_context_id: OpaqueContextId, resource_scope_id: ResourceScopeId, ) -> Result<Self, ApiVocabularyError>
Creates one already-validated paired observation from typed identifiers.
The baseline and candidate remain checked here because individually valid context identifiers must still represent distinct views.
Sourcepub fn comparison_id(&self) -> &str
pub fn comparison_id(&self) -> &str
Returns the opaque host comparison identifier.
Sourcepub const fn typed_comparison_id(&self) -> &ComparisonId
pub const fn typed_comparison_id(&self) -> &ComparisonId
Returns the typed opaque host comparison identifier.
Sourcepub const fn baseline_context_id(&self) -> &OpaqueContextId
pub const fn baseline_context_id(&self) -> &OpaqueContextId
Returns the typed opaque baseline context identifier.
Sourcepub const fn candidate_context_id(&self) -> &OpaqueContextId
pub const fn candidate_context_id(&self) -> &OpaqueContextId
Returns the typed opaque candidate context identifier.
Sourcepub const fn resource_scope_id(&self) -> &ResourceScopeId
pub const fn resource_scope_id(&self) -> &ResourceScopeId
Returns the typed opaque resource-scope identifier.
Sourcepub const fn surface(&self) -> ApiSurfaceKind
pub const fn surface(&self) -> ApiSurfaceKind
Returns the API surface that was compared.
Sourcepub const fn pair(&self) -> ApiVisibilityPairKind
pub const fn pair(&self) -> ApiVisibilityPairKind
Returns the pair of views that was compared.
Sourcepub const fn result(&self) -> ApiVisibilityResult
pub const fn result(&self) -> ApiVisibilityResult
Returns the paired comparison result.
Sourcepub const fn dimension(&self) -> ApiVisibilityDimension
pub const fn dimension(&self) -> ApiVisibilityDimension
Returns the measured visibility dimension.
Sourcepub const fn observed_at_ms(&self) -> u64
pub const fn observed_at_ms(&self) -> u64
Returns when the host constructed this paired observation.
Sourcepub fn with_observed_at_ms(self, observed_at_ms: u64) -> Self
pub fn with_observed_at_ms(self, observed_at_ms: u64) -> Self
Replaces the observation time for deterministic replay or import.
Sourcepub fn subject(&self) -> EntityId
pub fn subject(&self) -> EntityId
Returns a raw-value-free, stable entity ID unique to this comparison.
This SHA-256 identity is pseudonymous, not a cryptographic attestation; hosts should supply non-secret, suitably opaque context handles.
Sourcepub fn resource_scope(&self) -> EntityId
pub fn resource_scope(&self) -> EntityId
Returns the opaque resource entity that the host compared.
Sourcepub fn to_observation(
&self,
component: impl Into<String>,
reliability: ConfidenceScore,
) -> Result<ApiVisibilityObservation, ApiVocabularyError>
pub fn to_observation( &self, component: impl Into<String>, reliability: ConfidenceScore, ) -> Result<ApiVisibilityObservation, ApiVocabularyError>
Emits the evidence and a stable evidence-backed resource-scope edge.
Sourcepub fn to_evidence(
&self,
component: impl Into<String>,
reliability: ConfidenceScore,
) -> Result<Evidence, ApiVocabularyError>
pub fn to_evidence( &self, component: impl Into<String>, reliability: ConfidenceScore, ) -> Result<Evidence, ApiVocabularyError>
Emits a detached immutable evidence record for this comparison.
The source correlation and subject use the same digest, so separate
principals or comparison turns cannot contaminate one another. Prefer
Self::to_observation for durable storage; callers using this lower-
level method must persist an equivalent resource mapping themselves.
Trait Implementations§
Source§impl Clone for ApiVisibilityComparison
impl Clone for ApiVisibilityComparison
Source§fn clone(&self) -> ApiVisibilityComparison
fn clone(&self) -> ApiVisibilityComparison
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for ApiVisibilityComparison
impl Debug for ApiVisibilityComparison
Source§impl<'de> Deserialize<'de> for ApiVisibilityComparison
impl<'de> Deserialize<'de> for ApiVisibilityComparison
Source§fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>where
D: Deserializer<'de>,
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>where
D: Deserializer<'de>,
impl Eq for ApiVisibilityComparison
Source§impl PartialEq for ApiVisibilityComparison
impl PartialEq for ApiVisibilityComparison
Source§impl Serialize for ApiVisibilityComparison
impl Serialize for ApiVisibilityComparison
impl StructuralPartialEq for ApiVisibilityComparison
Auto Trait Implementations§
impl Freeze for ApiVisibilityComparison
impl RefUnwindSafe for ApiVisibilityComparison
impl Send for ApiVisibilityComparison
impl Sync for ApiVisibilityComparison
impl Unpin for ApiVisibilityComparison
impl UnsafeUnpin for ApiVisibilityComparison
impl UnwindSafe for ApiVisibilityComparison
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.