use super::access::{Access, IAccess};
use super::pointers::ISharedPointer;
use crate::Resolver;
use std::rc::Rc;
pub trait IShared {
type Pointer: ISharedPointer + IAccess<Target = Self::Target>;
type Target;
type Error;
fn construct(ctn: Resolver) -> Result<Self::Pointer, Self::Error>;
fn resolved(_this: &mut Self::Pointer, _ctn: Resolver) {}
}
pub trait IOwned {
type Instance;
type Parameters;
type Error;
fn construct(ctn: Resolver, params: Self::Parameters) -> Result<Self::Instance, Self::Error>;
fn resolved(_this: &mut Self::Instance, _ctn: Resolver) {}
}
impl IShared for () {
type Pointer = Rc<Access<()>>;
type Target = ();
type Error = ();
fn construct(_: Resolver) -> Result<Self::Pointer, Self::Error> {
Ok(Rc::new(Access::new(())))
}
}
impl IOwned for () {
type Instance = ();
type Parameters = ();
type Error = ();
fn construct(_: Resolver, _: Self::Parameters) -> Result<Self, Self::Error> {
Ok(())
}
}