use crate::{value::Constructor, Ctx, Object, Result};
use core::marker::PhantomData;
pub trait MethodImplementor<T>: Sized {
fn implement<'js>(&self, _proto: &Object<'js>) -> Result<()> {
Ok(())
}
}
pub trait ConstructorCreator<'js, T>: Sized {
fn create_constructor(&self, _ctx: &Ctx<'js>) -> Result<Option<Constructor<'js>>> {
Ok(None)
}
}
#[derive(Default)]
pub struct MethodImpl<T>(PhantomData<T>);
impl<T> MethodImpl<T> {
pub fn new() -> Self {
MethodImpl(PhantomData)
}
}
#[derive(Default)]
pub struct ConstructorCreate<T>(PhantomData<T>);
impl<T> ConstructorCreate<T> {
pub fn new() -> Self {
ConstructorCreate(PhantomData)
}
}
impl<T> MethodImplementor<T> for &MethodImpl<T> {}
impl<'js, T> ConstructorCreator<'js, T> for &ConstructorCreate<T> {}
pub struct CloneWrapper<'a, T>(pub &'a T);
pub trait CloneTrait<T> {
fn wrap_clone(&self) -> T;
}
impl<'a, T: Clone> CloneTrait<T> for CloneWrapper<'a, T> {
fn wrap_clone(&self) -> T {
self.0.clone()
}
}