use alloc::string::{String, ToString};
use core::fmt::{Formatter, Pointer};
use core::marker::PhantomData;
use core::ops::{ControlFlow, FromResidual, Try};
use crate::daemonic::{
Daemonic, SymbolicAnchor, TopologySegment};
use crate::daemonic::{Anchor, AnchorDomainSet, TemporalAnchor};
use crate::{const_daemonic_hash, DaemonicError, AXIOM_OFFSET};
pub mod error;
pub mod states;
pub mod primitive_implementations;
pub mod daemonic_path_buffer;
pub use error::*;
use crate::daemonic::glass::daemonic_system_call::DaemonicSystemCall;
use crate::daemonic::TopologyAnchor;
pub mod glass_flags;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum Severity {
Stable,
Cracked,
Fractured,
Drift,
Warped,
Shattered,
Impossible,
Paradox,
Opaque,
Echo,
Unknown,
}
impl core::fmt::Display for Severity {
fn fmt(&self, f: &mut Formatter<'_>) -> core::fmt::Result {
f.write_str(match self {
Severity::Stable => "Stable",
Severity::Cracked => "Cracked",
Severity::Fractured => "Fractured",
Severity::Drift => "Drift",
Severity::Warped => "Warped",
Severity::Shattered => "Shattered",
Severity::Impossible => "Impossible",
Severity::Paradox => "Paradox",
Severity::Opaque => "Opaque",
Severity::Echo => "Echo",
Severity::Unknown => "Unknown",
})
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum ObservationTier {
Absolute,
Primitive,
Composed,
GlyphicExecutable,
Unknown,
Opaque,
}
#[derive(Clone, Debug)]
pub enum Annotation {
None,
Note(String),
Help(String),
Suggestion(String),
Sensitive(String),
}
impl core::fmt::Display for Annotation {
fn fmt(&self, f: &mut Formatter<'_>) -> core::fmt::Result {
f.write_str(match self {
Annotation::None => "",
Annotation::Note(s) => s,
Annotation::Help(s) => s,
Annotation::Suggestion(s) => s,
Annotation::Sensitive(_) => "Sensitive",
})
}
}
#[derive(Debug, Clone, Copy)]
pub enum Temporal {
Current,
Echo { original_tick: u64 },
Drift { from_severity: Severity, to_severity: Severity },
}
impl Anchor for Temporal {
fn anchor_domains(&self) -> AnchorDomainSet {
AnchorDomainSet::TEMPORAL
}
}
impl TemporalAnchor for Temporal {
fn anchor_tick(&self) -> u64 {
1
}
}
#[derive(Debug, Clone)]
pub enum Accessibility {
Clear,
Opaque { reason: String },
}
#[derive(Debug, Clone, Copy)]
pub enum Consistency {
Singular,
Paradox,
}
#[derive(Debug, Clone, Copy)]
pub enum Assessment {
Assessed,
Unknown,
}
#[derive(Debug, Clone, Copy)]
pub enum FidelityAction {
Continue,
Attend,
Warn,
Halt,
Abort,
Drop,
}
pub trait Glass<GLASS: ?Sized>:
{
type Anchor: TopologyAnchor;
fn position(&self) -> &TopologySegment;
fn severity(&self) -> Severity;
fn annotation(&self) -> Annotation {
Annotation::None
}
fn temporal(&self) -> Temporal {
Temporal::Current
}
fn accessibility(&self) -> Accessibility {
Accessibility::Clear
}
fn consistency(&self) -> Consistency {
Consistency::Singular
}
fn assessment(&self) -> Assessment {
Assessment::Unknown
}
fn tier(&self) -> ObservationTier {
ObservationTier::Composed
}
fn payload(&self) -> Option<&GLASS>;
fn into_payload(self) -> Option<GLASS>
where
Self: Sized,
GLASS: Sized;
fn fidelity_action(&self) -> FidelityAction {
severity_to_fidelity(self.severity())
}
fn has_payload(&self) -> bool {
self.payload().is_some()
}
fn is_clear(&self) -> bool {
matches!(self.severity(), Severity::Stable)
&& matches!(self.assessment(), Assessment::Assessed)
}
fn as_report(&self) -> GlassReport {
GlassReport {
position: self.position().clone(),
severity: self.severity(),
tier: self.tier(),
annotation: self.annotation(),
temporal: self.temporal(),
accessibility: self.accessibility(),
consistency: self.consistency(),
assessment: self.assessment(),
fidelity_action: self.fidelity_action(),
}
}
}
pub fn severity_to_fidelity(severity: Severity) -> FidelityAction {
match severity {
Severity::Stable => FidelityAction::Continue,
Severity::Cracked => FidelityAction::Warn,
Severity::Fractured => FidelityAction::Halt,
Severity::Warped => FidelityAction::Halt,
Severity::Shattered => FidelityAction::Halt,
Severity::Impossible => FidelityAction::Abort,
Severity::Unknown => FidelityAction::Attend,
Severity::Drift => FidelityAction::Attend,
Severity::Paradox => FidelityAction::Warn,
Severity::Opaque => FidelityAction::Halt,
Severity::Echo => FidelityAction::Attend,
}
}
pub struct GlassReport {
pub position: TopologySegment,
pub severity: Severity,
pub tier: ObservationTier,
pub annotation: Annotation,
pub temporal: Temporal,
pub accessibility: Accessibility,
pub consistency: Consistency,
pub assessment: Assessment,
pub fidelity_action: FidelityAction,
}
impl GlassReport {
pub fn is_clear(&self) -> bool {
matches!(self.severity, Severity::Stable)
&& matches!(self.assessment, Assessment::Assessed)
}
pub fn needs_attention(&self) -> bool {
!matches!(self.fidelity_action, FidelityAction::Continue)
}
pub fn category(&self) -> &str {
todo!(
"GlassReport::category() is not yet implemented"
)
}
}
pub use states::*;
pub use {GlassStable};
pub use {GlassCracked};
pub use {GlassFractured};
pub use {GlassShattered};
pub use {GlassUnknown};
pub use {GlassEcho};
pub use {GlassImpossible};
pub use {GlassOpaque};
pub use {GlassWarped};
pub use {GlassDrift};
pub use {GlassParadox};
use crate::daemonic::topology::TOPOLOGY_ANCHOR;
use super::observation::*;
pub(crate) mod daemonic_system_call;