signature

Macro signature 

Source
signature!() { /* proc-macro */ }
Expand description

Constructs a const Signature with compile-time validation.

This macro creates a Signature from a string literal at compile time, validating that the signature string is valid D-Bus signature. Invalid signatures will cause a compilation error.

§Examples

§Basic usage

use zvariant::signature;

// Create signatures for basic types
let sig = signature!("s");  // String signature
assert_eq!(sig.to_string(), "s");

let sig = signature!("i");  // 32-bit integer signature
assert_eq!(sig.to_string(), "i");

§Container types

use zvariant::signature;

// Array of strings
let sig = signature!("as");
assert_eq!(sig.to_string(), "as");

// Dictionary mapping strings to variants
let sig = signature!("a{sv}");
assert_eq!(sig.to_string(), "a{sv}");

// Structures
let sig = signature!("(isx)");
assert_eq!(sig.to_string(), "(isx)");

§Const signatures

The macro can be used to create const signatures, which is especially useful for defining signatures at compile time:

use zvariant::{signature, Signature};

const MY_SIGNATURE: Signature = signature!("a{sv}");

fn process_data(_data: &str) {
    assert_eq!(MY_SIGNATURE.to_string(), "a{sv}");
}

§Using the dict alias

For convenience, dict is an alias for a{sv} (string-to-variant dictionary):

use zvariant::signature;

let sig = signature!("dict");
assert_eq!(sig.to_string(), "a{sv}");

§Compile-time validation

Invalid signatures will be caught at compile time:

use zvariant::signature;

// This will fail to compile because 'z' is not a valid D-Bus type
let sig = signature!("z");