// run-pass
#![allow(unused_imports)]
// A model for how the `Fn` traits could work. You can implement at
// most one of `Go`, `GoMut`, or `GoOnce`, and then the others follow
// automatically.

// aux-build:go_trait.rs


extern crate go_trait;

use go_trait::{Go, GoMut, GoOnce, go, go_mut, go_once};

use std::rc::Rc;
use std::cell::Cell;

struct SomeGoableThing {
    counter: Rc<Cell<isize>>
}

impl Go for SomeGoableThing {
    fn go(&self, arg: isize) {
        self.counter.set(self.counter.get() + arg);
    }
}

struct SomeGoOnceableThing {
    counter: Rc<Cell<isize>>
}

impl GoOnce for SomeGoOnceableThing {
    fn go_once(self, arg: isize) {
        self.counter.set(self.counter.get() + arg);
    }
}

fn main() {
    let counter = Rc::new(Cell::new(0));
    let mut x = SomeGoableThing { counter: counter.clone() };

    go(&x, 10);
    assert_eq!(counter.get(), 10);

    go_mut(&mut x, 100);
    assert_eq!(counter.get(), 110);

    go_once(x, 1_000);
    assert_eq!(counter.get(), 1_110);

    let x = SomeGoOnceableThing { counter: counter.clone() };

    go_once(x, 10_000);
    assert_eq!(counter.get(), 11_110);
}
