scsys_core/macros/
builder.rs1#[macro_export]
7macro_rules! builder {
8 ($(#[derive($($d:ident),+)])?$name:ident::<$inner:ty> {$($k:ident: $v:ty),* $(,)?}) => {
9 builder!(@loop builder: $name, derive: [$($($d),+)?], inner: $inner {$($k: $v),*});
10 };
11 ($(#[derive($($d:ident),+)])? $name:ident($inner:ty) {$($k:ident: $v:ty),* $(,)?}) => {
12 builder!(@loop builder: $name, derive: [$($($d),+)?], inner: $inner {$($k: $v),*});
13 };
14 (@loop builder: $name:ident, derive: [$($d:ident),* $(,)?], inner: $inner:ty {$($k:ident: $v:ty),* $(,)?}) => {
15
16 #[derive(Default, $($d),*)]
17 pub struct $name {
18 inner: $inner,
19 }
20
21 builder!(@impl builder: $name, inner: $inner {$($k: $v),*});
22 };
23 (@impl builder: $name:ident, inner: $inner:ty {$($k:ident: $v:ty),* $(,)?}) => {
24 impl $name {
25 pub fn new() -> Self {
26 Self {
27 inner: Default::default()
28 }
29 }
30
31 pub fn from_inner(inner: $inner) -> Self {
32 Self { inner }
33 }
34
35 pub fn build(self) -> $inner {
36 self.inner
37 }
38
39 $(
40 pub fn $k(mut self, $k: $v) -> Self {
41 self.inner.$k = $k;
42 self
43 }
44 )*
45 }
46 };
47}