kv

Macro kv 

Source
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");