lib.rs (826B)
1 pub mod builder; 2 pub mod calculator; 3 pub mod factory; 4 pub mod number; 5 pub mod operator; 6 pub mod token; 7 8 /// This trait defines all number types across different calculator modes 9 pub trait NumberToken { 10 fn value(&self) -> f64; 11 fn format(&self) -> String; 12 } 13 14 pub trait OperatorToken { 15 fn precedence(&self) -> u8; 16 fn evaluate(&self, args: &[f64]) -> Result<f64, String>; 17 } 18 19 /// TokenFactory trait that ties everything together. It ensures that tokens 20 /// created by the factory are always compatible. 21 pub trait TokenFactory { 22 /// The associated Number and Operator types are the key to type safety 23 type Number: NumberToken; 24 type Operator: OperatorToken; 25 26 fn create_number(&self, s: &str) -> Result<Self::Number, String>; 27 fn create_operator(&self, s: &str) -> Result<Self::Operator, String>; 28 }