use crate::method::method_structure::{MethodArguments, MethodResult};
pub struct MethodCallableClosure<'a> {
closure: Box<dyn Fn(MethodArguments) -> MethodResult + 'a>
}
pub trait MethodCallable {
fn call(&self, arguments: MethodArguments) -> MethodResult;
}
impl<'a> MethodCallableClosure<'a> {
pub fn new<C>(closure: C) -> Self where C: Fn(MethodArguments) -> MethodResult + 'a {
Self {
closure: Box::new(closure)
}
}
}
impl MethodCallable for MethodCallableClosure<'_> {
fn call(&self, arguments: MethodArguments) -> MethodResult {
(self.closure)(arguments)
}
}
unsafe impl Send for MethodCallableClosure<'_> {}
unsafe impl Sync for MethodCallableClosure<'_> {}