macro_rules! create_datapoint {
(@ field $point : ident $name : expr, $string : expr, String) => { ... };
(@ field $point : ident $name : expr, $value : expr, i64) => { ... };
(@ field $point : ident $name : expr, $value : expr, f64) => { ... };
(@ field $point : ident $name : expr, $value : expr, bool) => { ... };
(@ fields $point : ident) => { ... };
(@ fields $point : ident($name : expr, $value : expr, $type : ident),
$($rest : tt) *) => { ... };
(@ fields $point : ident($name : expr, $value : expr, $type : ident)) => { ... };
(@ point $name : expr, $($fields : tt) +) => { ... };
(@ point $name : expr) => { ... };
}