use super::traits::*;
use std::rc::Rc;
use std::sync::Arc;
macro_rules! blanket {
($type:ty, $trait:ident) => {
#[portrait::fill(portrait::delegate(T; *self))]
impl<T> $trait for $type where T: $trait {}
};
}
macro_rules! blanket_ids {
($type:ty, $trait:ident) => {
#[portrait::fill(portrait::delegate(T))]
impl<T> $trait for $type where T: $trait {}
};
}
macro_rules! blanket_id_impls {
($trait:ident) => {
blanket_ids!(&T, $trait);
blanket_ids!(&mut T, $trait);
blanket_ids!(Rc<T>, $trait);
blanket_ids!(Arc<T>, $trait);
blanket_ids!(Box<T>, $trait);
};
}
macro_rules! blanket_impls {
($trait:ident) => {
blanket!(&T, $trait);
blanket!(&mut T, $trait);
blanket!(Rc<T>, $trait);
blanket!(Arc<T>, $trait);
blanket!(Box<T>, $trait);
};
}
macro_rules! blanket_impls_mut {
($trait:ident) => {
blanket!(&mut T, $trait);
blanket!(Box<T>, $trait);
};
}
blanket_id_impls!(HierarchyIds);
blanket_impls!(HierarchyBase);
blanket_impls_mut!(HierarchyEdit);
blanket_id_impls!(NetlistIds);
blanket_impls!(NetlistBase);
blanket_impls_mut!(NetlistEdit);
blanket_id_impls!(LayoutIds);
blanket_impls!(LayoutBase);
blanket_impls_mut!(LayoutEdit);
blanket_impls!(L2NBase);
blanket_impls_mut!(L2NEdit);