libreda_db/
blanket_impl.rs1use super::traits::*;
8use std::rc::Rc;
9use std::sync::Arc;
10
11macro_rules! blanket {
12 ($type:ty, $trait:ident) => {
13 #[portrait::fill(portrait::delegate(T; *self))]
14 impl<T> $trait for $type where T: $trait {}
15 };
16}
17
18macro_rules! blanket_ids {
19 ($type:ty, $trait:ident) => {
20 #[portrait::fill(portrait::delegate(T))]
21 impl<T> $trait for $type where T: $trait {}
22 };
23}
24
25macro_rules! blanket_id_impls {
26 ($trait:ident) => {
27 blanket_ids!(&T, $trait);
28 blanket_ids!(&mut T, $trait);
29 blanket_ids!(Rc<T>, $trait);
30 blanket_ids!(Arc<T>, $trait);
31 blanket_ids!(Box<T>, $trait);
32 };
33}
34
35macro_rules! blanket_impls {
36 ($trait:ident) => {
37 blanket!(&T, $trait);
38 blanket!(&mut T, $trait);
39 blanket!(Rc<T>, $trait);
40 blanket!(Arc<T>, $trait);
41 blanket!(Box<T>, $trait);
42 };
43}
44
45macro_rules! blanket_impls_mut {
46 ($trait:ident) => {
47 blanket!(&mut T, $trait);
48 blanket!(Box<T>, $trait);
49 };
50}
51
52blanket_id_impls!(HierarchyIds);
53blanket_impls!(HierarchyBase);
54blanket_impls_mut!(HierarchyEdit);
55
56blanket_id_impls!(NetlistIds);
57blanket_impls!(NetlistBase);
58blanket_impls_mut!(NetlistEdit);
59
60blanket_id_impls!(LayoutIds);
61blanket_impls!(LayoutBase);
62blanket_impls_mut!(LayoutEdit);
63
64blanket_impls!(L2NBase);
65blanket_impls_mut!(L2NEdit);