use crate::{DaemonicClock, DaemonicError};
use crate::daemonic::observation::observable::Observable;
use crate::daemonic::glass::Severity;
use crate::daemonic::glass::Glass;
use crate::daemonic::{SemanticAnchor, TopologySegment};
pub trait DaemonicObserver<GLASS: Glass<GLASS> + Iterator>: Send + Sync {
type Clock: for<'clock> DaemonicClock<'clock, GLASS>;
fn observe<T: Observable>(
&self,
target: &T,
) -> impl Glass<T::Observed>;
fn position(&self) -> &TopologySegment;
fn re_observe<T: Observable>(
&self,
target: &T,
prior_severity: Severity,
) -> impl Glass<T::Observed> {
self.observe(target)
}
fn broken_sword(&self, err: impl SemanticAnchor) -> GLASS;
}