enum MATH { ADD, SUB, MUL, DEV, } struct Math { a: i32, b: i32, } impl Math { fn init(a: i32, b: i32) -> Math { return Math { a, b }; } fn calculate(&self, operation: MATH) -> i32 { match operation { MATH::ADD => return self.a + self.b, MATH::SUB => return self.a - self.b, MATH::MUL => return self.a * self.b, MATH::DEV => { if self.b == 0 { return 0; } else { return self.a / self.b; } } } } fn reinit(&mut self, a: i32, b: i32) { self.a = a; self.b = b; } } fn main() { let operation: MATH = MATH::ADD; let mut calculator: Math = Math::init(10, 4); print!("ans: {}\n", calculator.calculate(operation)); calculator.reinit(32, 2); println!("ans after reinit: {}", calculator.calculate(MATH::DEV)); }