macro_rules! with_tags {
($action:expr) => { ... };
}Expand description
A macro for accessing the global tags store in a read-only manner.
This macro provides safe access to a global TagsStore instance that persists
for the entire application lifetime. It executes the provided closure with a
reference to the tags store.
§Use Cases
Use this macro when you need to:
- Look up tag names or values
- Access tag summarizers
- Format diagnostic output with tag information
- Resolve tags in any read-only operation
§Examples
use dcbor::prelude::*;
use std::sync::Arc;
// Use with_tags to access the global tags store in a read-only manner
let tag_name = with_tags!(|tags: &TagsStore| {
// First, let's register a tag in the global store for demonstration
if tags.tag_for_value(42).is_none() {
// We don't have direct mutable access here, but in a real app
// you would use with_tags_mut! to register tags first
// This is just for demonstration purposes
}
// Look up a tag name by its value (could be "date" if standard tags are registered)
// or the numeric value as a string if not registered
tags.name_for_value(42)
});
// Verify we got some kind of tag name or value
assert!(!tag_name.is_empty());
// Use with diagnostic output
let cbor = CBOR::from(42);
// We can format the CBOR value using tag information from the store
with_tags!(|tags| {
let _formatted = cbor.diagnostic_opt(true, false, false, Some(tags));
// In a real app, we would use the formatted output
});§Thread Safety
This macro is thread-safe. The global tags store is protected by a mutex, and this macro acquires a read lock on that mutex.