flams_ontology/content/
macros.rs

1#[macro_export]
2macro_rules! oms {
3    (ftml:$i:ident) => {
4        $crate::content::terms::Term::OMID($crate::uris::ContentURI::Symbol($crate::ftml!($i)))
5    };
6    (=ftml:$i:ident) => {
7        $crate::content::terms::Term::OMID($crate::uris::ContentURI::Symbol($crate::metatheory::$i))
8    };
9    ($s:expr) => {
10        $crate::content::terms::Term::OMID($crate::uris::ContentURI::Symbol($s))
11    };
12}
13
14#[macro_export]
15macro_rules! omsp {
16    ($p:pat) => {
17        $crate::content::terms::Term::OMID($crate::uris::ContentURI::Symbol($p))
18    };
19}
20
21#[macro_export]
22macro_rules! omfp {
23    (($e:expr).($f:expr) = ($o:expr)) => {
24        $crate::content::terms::Term::Field {
25            record: Box::new($e),
26            key: $f,
27            owner: Some(Box::new($o)),
28        }
29    };
30}
31
32#[macro_export]
33macro_rules! ftml {
34    ($name:ident) => {
35        ($crate::metatheory::$name).clone()
36    };
37}
38#[macro_export]
39macro_rules! oma {
40    //matches!(self,oma!(omsp!(fp),[N:_,N:_]) if *fp == *crate::metatheory::FIELD_PROJECTION)
41    ($head:expr,[$({$($tt:tt)*}),+]) => {
42        $crate::content::terms::Term::OMA{
43            head:Box::new($head),
44            args:Box::new([$crate::$(oma!(@ARGS $($tt)*)),+])
45        }
46    };
47    ($head:expr,[$($i:ident),+]) => {
48        $crate::content::terms::Term::OMA{
49            head:Box::new($head),
50            args:Box::new([$($i),+])
51        }
52    };
53    /*($head:pat,[$($i:ident:$p:pat),+]) => {
54        $crate::content::terms::Term::OMA{
55            head:$head,
56            args:[$($crate::oma!(@ARGSPAT $i:$p )),+]
57        }
58    };*/
59    ($head:pat,$args:pat) => {
60        $crate::content::terms::Term::OMA{
61            head:$head,
62            args:$args
63        }
64    };
65    ($head:expr,I@$($args:tt)*) => {
66        $crate::content::terms::Term::OMA{
67            head:Box::new($head),
68            args:$crate::oma!(@ARGSITER $($args)*)
69        }
70    };
71    (@ARGSITER $mode:ident:$args:expr) => {
72        $args.map(|term| $crate::content::terms::Arg{term,mode:$crate::oma!(@MODE $mode)})
73            .collect::<Box<[_]>>()
74    };
75    (@ARGSPAT $mode:ident:$p:pat) => {
76        $crate::content::terms::Arg{term:$p,mode:$crate::oma!(@MODE $mode)}
77    };
78    (@ARGS $mode:ident:$a:expr) => {
79        $crate::content::terms::Arg{term:$a,mode:$crate::oma!(@MODE $mode)}
80    };
81
82    (@MODE N) => {$crate::content::terms::ArgMode::Normal};
83}
84
85#[macro_export]
86macro_rules! oml {
87    ($name:expr; $(:$tp:expr;)? $(:=$df:expr)?) => {
88        $crate::content::terms::Term::OML{
89            name:$name,
90            tp:$crate::oml!(@TPDF $($tp)?),
91            df:$crate::oml!(@TPDF $($df)?),
92        }
93    };
94    (@TPDF $tpdf:expr) => {Some(Box::new($tpdf))};
95    (@TPDF) => {None};
96}
97#[macro_export]
98macro_rules! omv {
99    ($name:expr;) => {
100        $crate::content::terms::Term::OMV($crate::content::terms::Var::Name($name))
101    };
102}