pub mod glass {
pub const STABLE: char = '◇';
pub const WARNING: char = '◆';
pub const FRACTURED: char = '◈';
pub const SHATTERED: char = '▓';
pub const ALL: [char; 4] = [STABLE, WARNING, FRACTURED, SHATTERED];
}
pub mod transition {
pub const NATURAL: &str = "→";
pub const FORCED: &str = "⇒";
pub const RECURSIVE: &str = "↻";
pub const TERMINATED: &str = "⊗";
pub const MERGED: &str = "⊕";
pub const DIVERGED: &str = "⊖";
}
pub mod action {
pub const SUGGEST: &str = "◇→";
pub const ATTENTION: char = '⚠';
pub const RESOLVED: char = '✓';
pub const FAILED: char = '✗';
}
pub mod operation {
pub const TRANSMUTE: char = '⚗';
pub const MECHANICAL: char = '⚙';
pub const VOLATILE: char = '☿';
pub const HEAVY: char = '♄';
pub const COMPUTE: char = '△';
pub const FLOW: char = '▽';
pub const COMPLETE: char = '○';
pub const PENDING: char = '●';
}
pub mod alchemy {
pub const AIR: char = '🜁';
pub const FIRE: char = '🜂';
pub const EARTH: char = '🜃';
pub const WATER: char = '🜄';
pub const GOLD: char = '🜎';
pub const LUNA: char = '🜏';
pub const CRUCIBLE: char = '🝊';
}
pub mod text {
pub const INTACT: &str = "[OK]";
pub const WARNING: &str = "[WARN]";
pub const FRACTURED: &str = "[ERROR]";
pub const SHATTERED: &str = "[FATAL]";
pub const TRANSITION: &str = "->";
pub const FORCED: &str = "=>";
pub const RECURSIVE: &str = "[LOOP]";
pub const TERMINATED: &str = "[TERM]";
pub const SUGGEST: &str = "[SUGGEST]";
}
pub struct GlyphChain {
states: Vec<char>,
transitions: Vec<&'static str>,
terminator: Option<&'static str>,
}
impl GlyphChain {
pub fn new(initial: char) -> Self {
Self {
states: vec![initial],
transitions: vec![],
terminator: None,
}
}
pub fn then(mut self, transition: &'static str, state: char) -> Self {
self.transitions.push(transition);
self.states.push(state);
self
}
pub fn terminate(mut self, terminator: &'static str) -> Self {
self.terminator = Some(terminator);
self
}
pub fn to_string(&self) -> String {
let mut result = String::new();
for (i, state) in self.states.iter().enumerate() {
if i > 0 {
result.push_str(self.transitions[i - 1]);
}
result.push(*state);
}
if let Some(term) = self.terminator {
result.push_str(term);
}
result
}
}