use crate::types::{
AppendEventRequest, CanonicalEntityRecord, CanonicalWriteRequest, CanonicalWriteResult,
EntityLink, EntityLinkRequest, EntityRecord, EntityRef, EntitySearchQuery, EventRecord,
EventStreamRequest, EvidenceItem, EvidenceQuery, ExternalReferencePayload,
ExternalReferenceRequest, HealthReport, OntologyPath, PackEmission, PathQuery,
PersistProjectionRequest, ProjectionCheckpoint, ProjectionRebuildRequest, ProjectionRecord,
ProviderError, ProviderMetadata, ProviderMetricQuery, ProviderMetricResult,
RelationshipInstance, RelationshipQuery, SorNamespace,
};
pub trait ProviderMetadataSource {
fn metadata(&self) -> ProviderMetadata;
fn pack_emission(&self) -> PackEmission;
}
pub trait ProviderHealth {
fn health(&self) -> Result<HealthReport, ProviderError>;
}
pub trait ConfigValidator {
fn validate_config(&self, config_json: &str) -> Result<(), ProviderError>;
}
pub trait EventStoreProvider {
fn append_event(&self, request: AppendEventRequest) -> Result<EventRecord, ProviderError>;
fn read_event_stream(
&self,
request: EventStreamRequest,
) -> Result<Vec<EventRecord>, ProviderError>;
}
pub trait ProjectionProvider {
fn persist_projection(
&self,
request: PersistProjectionRequest,
) -> Result<ProjectionRecord, ProviderError>;
fn get_projection(
&self,
projection_name: &str,
projection_key: &str,
) -> Result<Option<ProjectionRecord>, ProviderError>;
fn rebuild_projection(
&self,
request: ProjectionRebuildRequest,
) -> Result<ProjectionCheckpoint, ProviderError>;
}
pub trait ExternalReferenceProvider {
fn resolve_external_reference(
&self,
request: ExternalReferenceRequest,
) -> Result<ExternalReferencePayload, ProviderError>;
}
pub trait EvidenceProvider {
fn query_evidence(&self, query: EvidenceQuery) -> Result<Vec<EvidenceItem>, ProviderError>;
}
pub trait MetricProvider {
fn query_metric(
&self,
query: ProviderMetricQuery,
) -> Result<ProviderMetricResult, ProviderError>;
}
pub trait EntityStoreProvider {
fn upsert_entity(&self, entity: EntityRecord) -> Result<EntityRecord, ProviderError>;
fn get_entity(&self, entity: EntityRef) -> Result<Option<EntityRecord>, ProviderError>;
fn search_entities(
&self,
request: EntitySearchQuery,
) -> Result<Vec<EntityRecord>, ProviderError>;
}
pub trait CanonicalEntityStoreProvider {
fn upsert_canonical_entity(
&self,
record: CanonicalEntityRecord,
) -> Result<CanonicalEntityRecord, ProviderError>;
fn get_canonical_entity(
&self,
namespace: SorNamespace,
entity_type: &str,
entity_id: &str,
) -> Result<Option<CanonicalEntityRecord>, ProviderError>;
}
pub trait CanonicalWriteProvider {
fn apply_canonical_write(
&self,
request: CanonicalWriteRequest,
) -> Result<CanonicalWriteResult, ProviderError>;
}
pub trait OntologyGraphProvider {
fn query_relationships(
&self,
request: RelationshipQuery,
) -> Result<Vec<RelationshipInstance>, ProviderError>;
fn find_paths(&self, request: PathQuery) -> Result<Vec<OntologyPath>, ProviderError>;
}
pub trait EntityLinkProvider {
fn link_entities(&self, request: EntityLinkRequest) -> Result<Vec<EntityLink>, ProviderError>;
}
pub trait ExternalMappingProvider {
fn validate_mapping(&self, mapping_json: &str) -> Result<(), ProviderError>;
}