macro_rules! kv {
(ty: $value: expr) => { ... };
(type: $value: expr) => { ... };
($($body:tt)+) => { ... };
}Expand description
Creates a KeyValue pair for error attachments with flexible key-value syntax.
§Examples
§Type-based key-value pairs
use bigerror::{kv, KeyValue, attachment::Type};
let number = 42;
let kv_pair = kv!(ty: number);
assert_eq!(format!("{kv_pair}"), "<i32>: 42");§Field/variable extraction
use bigerror::{kv, KeyValue};
let username = "alice";
let kv_var = kv!(username);
assert_eq!(kv_var, KeyValue("username", "alice"));
#[derive(Clone)]
struct User { name: String }
let user = User { name: "bob".to_string() };
let kv_field = kv!(user.name.clone());
assert_eq!(format!("{kv_field}"), "user.name: bob");
// adding a `%` will use just the field name
let kv_field = kv!(user.%name.clone());
assert_eq!(format!("{kv_field}"), "name: bob");
// `%` works on methods too!
impl User {
fn name(&self) -> &str {
self.name.as_str()
}
}
let kv_field = kv!(user.%name());
assert_eq!(format!("{kv_field}"), "name: bob");