filter_field_set

Macro filter_field_set 

Source
macro_rules! filter_field_set {
    ($selector:expr, { 
        $(
            $($field_part:tt).+ => $($output:expr);+
        ),* $(,)?
    }) => { ... };
}
Expand description

Create a BTreeSet of enabled field paths that match specified patterns.

This macro checks which fields are enabled and formats them according to the provided patterns. It supports multiple outputs per field using the ; separator for cases where one field should map to multiple output values. Field paths use dot notation for nested access.

ยงExamples

let mut selector = user.serialize_fields();
selector.enable_dot_hierarchy("id");
selector.enable_dot_hierarchy("name");
selector.enable_dot_hierarchy("profile.bio");

// Single output per field
let field_set = filter_field_set!(selector, {
    id => format!("user_id"),
    name => format!("user_name"),
    profile.bio => format!("profile_bio"),
    profile.avatar => format!("profile_avatar")
});

// Multiple outputs per field using ; separator
let multi_field_set = filter_field_set!(selector, {
    id => "user_id".to_string() ; "id".to_string() ; "primary_key".to_string(),
    name => "user_name".to_string() ; "username".to_string(),
    profile.bio => "bio".to_string() ; "biography".to_string() ; "profile_bio".to_string(),
});

// Only enabled fields are included (all outputs for that field)
assert!(multi_field_set.contains("user_id"));
assert!(multi_field_set.contains("id"));
assert!(multi_field_set.contains("primary_key"));
assert!(multi_field_set.contains("bio"));
assert!(multi_field_set.contains("biography"));
assert!(multi_field_set.contains("profile_bio"));