// 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);
}
