Macro libspa::pod::builder::builder_add
source · macro_rules! builder_add { ($builder:expr, None) => { ... }; ($builder:expr, Bool($val:expr)) => { ... }; ($builder:expr, Id($val:expr)) => { ... }; ($builder:expr, Int($val:expr)) => { ... }; ($builder:expr, Long($val:expr)) => { ... }; ($builder:expr, Float($val:expr)) => { ... }; ($builder:expr, Double($val:expr)) => { ... }; ($builder:expr, String($val:expr)) => { ... }; ($builder:expr, Bytes($val:expr)) => { ... }; ($builder:expr, Pointer($type_:expr, $val:expr)) => { ... }; ($builder:expr, Fd($val:expr)) => { ... }; ($builder:expr, Rectangle($val:expr)) => { ... }; ($builder:expr, Fraction($val:expr)) => { ... }; ( $builder:expr, Struct { $( $field_type:tt $field:tt ),* $(,)? } ) => { ... }; ( $builder:expr, Object($type_:expr, $id:expr $(,)?) { $( $key:expr => $value_type:tt $value:tt ),* $(,)? } ) => { ... }; }
Expand description
Convenience macro to build a pod from values using a spa pod builder.
For arguments, the macro accepts the builder, and then the structure of the desired pod:
ⓘ
builder_add!(<&mut libspa::pod::builder::Builder>, Bool(<bool>));
builder_add!(<&mut libspa::pod::builder::Builder>, Id(<ibspa::utils::Id>));
builder_add!(<&mut libspa::pod::builder::Builder>, Int(<i32>));
builder_add!(<&mut libspa::pod::builder::Builder>, Long(<i64>));
builder_add!(<&mut libspa::pod::builder::Builder>, Float(<f32>));
builder_add!(<&mut libspa::pod::builder::Builder>, Double(<f64>));
builder_add!(<&mut libspa::pod::builder::Builder>, Bytes(<&[u8]>));
// Macro using `Pointer` can only be called in `unsafe` block.
// Safety rules from `Builder::add_pointer()` apply.
builder_add!(<&mut libspa::pod::builder::Builder>, Pointer(<*const c_void>));
builder_add!(<&mut libspa::pod::builder::Builder>, Fd(<i64>));
builder_add!(<&mut libspa::pod::builder::Builder>, Rectangle(<libspa::utils::Rectangle>));
builder_add!(<&mut libspa::pod::builder::Builder>, Fraction(<libspa::utils::Fraction>));
builder_add!(<&mut libspa::pod::builder::Builder>,
Struct {
// 0 to n fields, e.g.:
Struct {
Int(<i32>),
Float(<f32>),
},
Bytes(<&[u8]>),
}
);
builder_add!(<&mut libspa::pod::builder::Builder>,
Object(
<type as u32>,
<id as u32>
) {
// 0 to n properties of format
// `<key as u32> => <value>`
// e.g.
0 => Bool(false),
313 => String("313"),
}
);
§Returns
The macro returns a Result<(), Errno>
.
If building succeeds, an Ok(())
is returned.
Otherwise, the Err(Errno)
from the point where building failed is returned, and the rest of the values are not added.