#[macro_export]
macro_rules! table {
($t:path{ $($key:ident:$value:expr$(,)?)+ }) => {
{
let mut temp_table_data = <$t>::default();
$(temp_table_data.$key = $value.into();)+
temp_table_data
}
}
}
#[allow(unused_macros)]
#[macro_export]
macro_rules! table_field_vec {
(&$vec_ref:expr,$($field_name:ident$(.)?)+) => {{
let vec = &$vec_ref;
let mut ids = std::vec::Vec::with_capacity(vec.len());
for item in vec {
match &item $(.$field_name)+ {
std::option::Option::Some(v) => {
ids.push(v.to_owned());
}
_ => {}
}
}
ids
}};
($vec_ref:expr,$($field_name:ident$(.)?)+) => {{
let vec = $vec_ref;
let mut ids = std::vec::Vec::with_capacity(vec.len());
for item in vec {
match item $(.$field_name)+.to_owned() {
std::option::Option::Some(v) => {
ids.push(v.to_owned());
}
_ => {}
}
}
ids
}};
}
#[allow(unused_macros)]
#[macro_export]
macro_rules! table_field_set {
(&$vec_ref:expr,$($field_name:ident$(.)?)+) => {{
let vec = &$vec_ref;
let mut ids = std::collections::HashSet::with_capacity(vec.len());
for item in vec {
match &item $(.$field_name)+ {
std::option::Option::Some(v) => {
ids.insert(v.to_owned());
}
_ => {}
}
}
ids
}};
($vec_ref:expr,$($field_name:ident$(.)?)+) => {{
let vec = $vec_ref;
let mut ids = std::collections::HashSet::with_capacity(vec.len());
for item in vec {
match item $(.$field_name)+.to_owned() {
std::option::Option::Some(v) => {
ids.insert(v.to_owned());
}
_ => {}
}
}
ids
}};
}
#[allow(unused_macros)]
#[macro_export]
macro_rules! table_field_map {
($vec_ref:expr,$($field_name:ident$(.)?)+) => {{
let vec = $vec_ref;
let mut ids = std::collections::HashMap::with_capacity(vec.len());
for item in vec {
match item $(.$field_name)+ {
std::option::Option::Some(ref v) => {
ids.insert(v.clone(), item);
}
_ => {}
}
}
ids
}};
}
#[allow(unused_macros)]
#[macro_export]
macro_rules! table_field_btree {
($vec_ref:expr,$($field_name:ident$(.)?)+) => {{
let mut ids = std::collections::BTreeMap::new();
for item in $vec_ref {
match &item $(.$field_name)+ {
std::option::Option::Some(ref v) => {
ids.insert(v.clone(), item);
}
_ => {}
}
}
ids
}};
}
#[allow(unused_macros)]
#[macro_export]
macro_rules! field_name {
($t:ident.$field:ident) => {{
if false {
let _ = |a: $t| a.$field;
}
stringify!($field).trim_start_matches("r#")
}};
($t:ident.$field1:ident.$field2:ident) => {{
if false {
let _ = |a: $t| a.$field1.$field2;
}
stringify!($field2).trim_start_matches("r#")
}};
($t:ident.$field1:ident.$field2:ident.$field3:ident) => {{
if false {
let _ = |a: $t| a.$field1.$field2.$field3;
}
stringify!($field3).trim_start_matches("r#")
}};
}
#[allow(unused_macros)]
#[macro_export]
macro_rules! field_key {
($t:ident::$field:ident) => {{
if false {
let _ = |a: $t| a.$field;
}
stringify!($field).trim_start_matches("r#")
}};
($t:ident::$field1:ident::$field2:ident) => {{
if false {
let _ = |a: $t| a.$field1.$field2;
}
stringify!($field2).trim_start_matches("r#")
}};
($t:ident::$field1:ident::$field2:ident::$field3:ident) => {{
if false {
let _ = |a: $t| a.$field1.$field2.$field3;
}
stringify!($field3).trim_start_matches("r#")
}};
}