pub struct Closure<State, Input, Output> {
f: fn(&State, Input) -> Output,
t: State,
}
impl<State, Input, Output> Copy for Closure<State, Input, Output>
where
State: Copy,
{
}
impl<State, Input, Output> Clone for Closure<State, Input, Output>
where
State: Clone,
{
fn clone(&self) -> Closure<State, Input, Output> {
Closure::new(self.f, self.t.clone())
}
}
pub struct ClosureRef<'a, State, Input, Output>
where
State: 'a,
{
f: fn(&State, Input) -> Output,
t: &'a State,
}
impl<'a, State, Input, Output> Copy for ClosureRef<'a, State, Input, Output> {}
impl<'a, State, Input, Output> Clone for ClosureRef<'a, State, Input, Output> {
fn clone(&self) -> ClosureRef<'a, State, Input, Output> {
*self
}
}
pub struct ClosureMut<State, Input, Output> {
f: fn(&mut State, Input) -> Output,
t: State,
}
impl<State, Input, Output> Copy for ClosureMut<State, Input, Output>
where
State: Copy,
{
}
impl<State, Input, Output> Clone for ClosureMut<State, Input, Output>
where
State: Clone,
{
fn clone(&self) -> ClosureMut<State, Input, Output> {
ClosureMut::new(self.f, self.t.clone())
}
}
pub struct ClosureRefMut<'a, State, Input, Output>
where
State: 'a,
{
f: fn(&mut State, Input) -> Output,
t: &'a mut State,
}
pub struct ClosureOnce<State, Input, Output> {
f: fn(State, Input) -> Output,
t: State,
}
impl<State, Input, Output> Copy for ClosureOnce<State, Input, Output>
where
State: Copy,
{
}
impl<State, Input, Output> Clone for ClosureOnce<State, Input, Output>
where
State: Clone,
{
fn clone(&self) -> ClosureOnce<State, Input, Output> {
ClosureOnce::new(self.f, self.t.clone())
}
}
impl<State, Input, Output> Closure<State, Input, Output> {
pub fn new(f: fn(&State, Input) -> Output, t: State) -> Closure<State, Input, Output> {
Closure { f, t }
}
}
impl<'a, State, Input, Output> ClosureRef<'a, State, Input, Output> {
pub fn new(f: fn(&State, Input) -> Output, t: &'a State) -> ClosureRef<'a, State, Input, Output>
where
State: 'a,
{
ClosureRef { f, t }
}
}
impl<State, Input, Output> ClosureMut<State, Input, Output> {
pub fn new(f: fn(&mut State, Input) -> Output, t: State) -> ClosureMut<State, Input, Output> {
ClosureMut { f, t }
}
}
impl<'a, State, Input, Output> ClosureRefMut<'a, State, Input, Output> {
pub fn new(
f: fn(&mut State, Input) -> Output,
t: &'a mut State,
) -> ClosureRefMut<'a, State, Input, Output> {
ClosureRefMut { f, t }
}
}
impl<State, Input, Output> ClosureOnce<State, Input, Output> {
pub fn new(f: fn(State, Input) -> Output, t: State) -> ClosureOnce<State, Input, Output> {
ClosureOnce { f, t }
}
}
impl<State, Input, Output> FnOnce<Input> for Closure<State, Input, Output> {
type Output = Output;
extern "rust-call" fn call_once(self, i: Input) -> Output {
let Closure { f, t } = self;
f(&t, i)
}
}
impl<'a, State, Input, Output> FnOnce<Input> for ClosureRef<'a, State, Input, Output> {
type Output = Output;
extern "rust-call" fn call_once(self, i: Input) -> Output {
let ClosureRef { f, t } = self;
f(&t, i)
}
}
impl<State, Input, Output> FnOnce<Input> for ClosureMut<State, Input, Output> {
type Output = Output;
extern "rust-call" fn call_once(self, i: Input) -> Output {
let ClosureMut { f, mut t } = self;
f(&mut t, i)
}
}
impl<'a, State, Input, Output> FnOnce<Input> for ClosureRefMut<'a, State, Input, Output> {
type Output = Output;
extern "rust-call" fn call_once(self, i: Input) -> Output {
let ClosureRefMut { f, mut t } = self;
f(&mut t, i)
}
}
impl<State, Input, Output> FnOnce<Input> for ClosureOnce<State, Input, Output> {
type Output = Output;
extern "rust-call" fn call_once(self, i: Input) -> Output {
let ClosureOnce { f, t } = self;
f(t, i)
}
}
impl<State, Input, Output> FnMut<Input> for Closure<State, Input, Output> {
extern "rust-call" fn call_mut(&mut self, i: Input) -> Output {
let Closure { f, t } = self;
f(t, i)
}
}
impl<'a, State, Input, Output> FnMut<Input> for ClosureRef<'a, State, Input, Output> {
extern "rust-call" fn call_mut(&mut self, i: Input) -> Output {
let ClosureRef { f, t } = self;
f(t, i)
}
}
impl<State, Input, Output> FnMut<Input> for ClosureMut<State, Input, Output> {
extern "rust-call" fn call_mut(&mut self, i: Input) -> Output {
let ClosureMut { ref f, ref mut t } = self;
f(t, i)
}
}
impl<'a, State, Input, Output> FnMut<Input> for ClosureRefMut<'a, State, Input, Output> {
extern "rust-call" fn call_mut(&mut self, i: Input) -> Output {
let ClosureRefMut { ref f, ref mut t } = self;
f(t, i)
}
}
impl<State, Input, Output> Fn<Input> for Closure<State, Input, Output> {
extern "rust-call" fn call(&self, i: Input) -> Output {
let Closure { f, t } = self;
f(t, i)
}
}
impl<'a, State, Input, Output> Fn<Input> for ClosureRef<'a, State, Input, Output> {
extern "rust-call" fn call(&self, i: Input) -> Output {
let ClosureRef { f, t } = self;
f(t, i)
}
}