Skip to content

Instantly share code, notes, and snippets.

@stmtk1
Created November 19, 2019 04:16
Show Gist options
  • Save stmtk1/52ece9b4c0ae037cc3ee3f2307949361 to your computer and use it in GitHub Desktop.
Save stmtk1/52ece9b4c0ae037cc3ee3f2307949361 to your computer and use it in GitHub Desktop.
use std::rc::Rc;
use std::cell::RefCell;
use std::fmt::{ self, Display };
enum MyNumber {
One(Rc<RefCell<MyNumber>>),
Zero,
}
impl MyNumber {
fn zero() -> MyNumber {
MyNumber::Zero
}
fn plus(self) -> MyNumber {
MyNumber::One(Rc::new(RefCell::new(self)))
}
fn value(&self) -> u8 {
match self {
MyNumber::Zero => 0,
MyNumber::One(val) => {
(*val).borrow().value() + 1
},
}
}
}
impl Display for MyNumber {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "{}", self.value())
}
}
fn main() {
println!("{}", MyNumber::zero().plus());
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment