use crate::enums::CoordinateKind;
use crate::Primitives;
pub trait Query<P: Primitives> {
fn input_type(&self) -> &P::String;
fn output_type(&self) -> &P::String;
}
pub trait CoordinateQuery<P: Primitives>: Query<P> {
fn has_coordinate_kind(&self) -> CoordinateKind;
}
pub trait MetricQuery<P: Primitives>: Query<P> {}
pub trait RepresentationQuery<P: Primitives>: Query<P> {}
pub trait RelationQuery<P: Primitives>: Query<P> {
type Address: crate::kernel::address::Address<P>;
fn source_address(&self) -> &Self::Address;
type Constraint: crate::user::type_::Constraint<P>;
fn relation_type(&self) -> &Self::Constraint;
type FiberBudget: crate::bridge::partition::FiberBudget<P>;
fn target_fiber(&self) -> &Self::FiberBudget;
type GroundingMap: crate::user::morphism::GroundingMap<P>;
fn grounding_map(&self) -> &Self::GroundingMap;
type ProjectionMap: crate::user::morphism::ProjectionMap<P>;
fn projection_map(&self) -> &Self::ProjectionMap;
type Context: crate::user::state::Context<P>;
fn session_context(&self) -> &Self::Context;
}
pub trait SessionQuery<P: Primitives>: RelationQuery<P> {
type Session: crate::user::state::Session<P>;
fn session_membership(&self) -> &Self::Session;
}
pub mod stratum_coordinate {}
pub mod spectrum_coordinate {}
pub mod address_coordinate {}