use crate::HostTypes;
pub trait IOBoundary<H: HostTypes> {}
pub trait Source<H: HostTypes>: IOBoundary<H> {
type TypeDefinition: crate::user::type_::TypeDefinition<H>;
fn source_type(&self) -> &Self::TypeDefinition;
}
pub trait Sink<H: HostTypes>: IOBoundary<H> {
type TypeDefinition: crate::user::type_::TypeDefinition<H>;
fn sink_type(&self) -> &Self::TypeDefinition;
}
pub trait BoundaryEffect<H: HostTypes>: crate::kernel::effect::ExternalEffect<H> {
type IOBoundary: IOBoundary<H>;
fn effect_boundary(&self) -> &Self::IOBoundary;
fn is_idempotent(&self) -> bool;
}
pub trait IngestEffect<H: HostTypes>: BoundaryEffect<H> {
type Source: Source<H>;
fn ingest_source(&self) -> &Self::Source;
}
pub trait EmitEffect<H: HostTypes>: BoundaryEffect<H> {
type Sink: Sink<H>;
fn emit_sink(&self) -> &Self::Sink;
}
pub trait BoundaryProtocol<H: HostTypes> {
type TypeDefinition: crate::user::type_::TypeDefinition<H>;
fn protocol_type(&self) -> &Self::TypeDefinition;
type Conjunction: crate::user::type_::Conjunction<H>;
fn protocol_ordering(&self) -> &Self::Conjunction;
}
pub trait BoundarySession<H: HostTypes>: crate::user::state::Session<H> {
type IOBoundary: IOBoundary<H>;
fn session_boundaries(&self) -> &[Self::IOBoundary];
fn crossing_count(&self) -> u64;
}