use crate::event::{AttributeMap, AttributeValue};
pub fn string_attr(value: &str) -> AttributeValue {
AttributeValue::String(value.to_string())
}
pub fn int_attr(value: i64) -> AttributeValue {
AttributeValue::Integer(value)
}
pub fn float_attr(value: f64) -> AttributeValue {
AttributeValue::Float(value)
}
pub fn bool_attr(value: bool) -> AttributeValue {
AttributeValue::Boolean(value)
}
pub fn list_attr(values: Vec<AttributeValue>) -> AttributeValue {
AttributeValue::List(values)
}
pub fn map_attr<M>(map: M) -> AttributeValue
where
M: IntoIterator<Item = (String, AttributeValue)>,
{
AttributeValue::Map(AttributeMap::from_iter(map))
}
#[macro_export]
macro_rules! attr_map {
( $( $key:expr => $value:expr ),* $(,)? ) => {
{
let mut map = AttributeMap::new();
$(
map.insert($key.to_string(), $value);
)*
map
}
};
}
#[macro_export]
macro_rules! list_from_ints {
( $( $value:expr ),* $(,)? ) => {
AttributeValue::List(vec![ $( AttributeValue::Integer($value as i64) ),* ])
};
}
#[macro_export]
macro_rules! list_from_strs {
( $( $value:expr ),* $(,)? ) => {
AttributeValue::List(vec![ $( AttributeValue::String($value.to_string()) ),* ])
};
}
#[macro_export]
macro_rules! list_from_floats {
( $( $value:expr ),* $(,)? ) => {
AttributeValue::List(vec![ $( AttributeValue::Float($value as f64) ),* ])
};
}
#[macro_export]
macro_rules! list_from_bools {
( $( $value:expr ),* $(,)? ) => {
AttributeValue::List(vec![ $( AttributeValue::Boolean($value) ),* ])
};
}
#[macro_export]
macro_rules! map_from_attr_values {
( $( $key:expr => $value:expr ),* $(,)? ) => {
AttributeValue::Map(attr_map!( $( $key => $value ),* ))
};
}
#[macro_export]
macro_rules! list_from_attr_values {
( $( $value:expr ),* $(,)? ) => {
AttributeValue::List(vec![ $( $value ),* ])
};
}