exercises

Log | Files | Refs | README

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 }