#![no_std]
#![no_std]
#[macro_export]
macro_rules! build_flatbuffer {
($builder:expr, $typ:ty) => {
{
paste::paste! {
let args = [<$typ Args>]::default() ;
$typ::create($builder, &args)
}
}
} ;
($builder:expr, $typ:ty, $($field:ident $(= $value:expr)?),+ ) => {
{
paste::paste! {
let args = [<$typ Args>] {
$($field $(: $value)?,)*
..[<$typ Args>]::default()
} ;
$typ::create($builder, &args)
} }
} ;
}
#[macro_export]
macro_rules! flatbuffer_builderbuilder {
($DOLLAR:tt $root:ty, $union:ty) => {
paste::paste! {
macro_rules! [<build_ $root _buffer>]
{
($builder:expr, $bodytype:ident) => {{
let body = build_flatbuffer!($builder, $bodytype) ;
let args = [ <$root Args> ] {
[ <$union:snake _type> ]: $union::$bodytype,
[<$union:snake>]: Some(body.as_union_value()),
..[<$root Args>]::default()
} ;
let msg = $root::create($builder, &args) ;
$builder.finish_size_prefixed(msg, None);
$builder.finished_data()
}} ;
($builder:expr, $bodytype:ident, $DOLLAR($field:ident $DOLLAR(= $value:expr)?),+ ) => {{
let body = build_flatbuffer!($builder, $bodytype, $DOLLAR($field $DOLLAR(= $value)?),+ );
let args = [ <$root Args> ] {
[ <$union:snake _type> ]: $union::$bodytype,
[<$union:snake>]: Some(body.as_union_value()),
..[<$root Args>]::default()
} ;
let msg = $root::create($builder, &args) ;
$builder.finish_size_prefixed(msg, None);
$builder.finished_data()
}} ;
($builder:expr, $DOLLAR($rootfield:ident $DOLLAR(= $rootvalue:expr)?),* => $bodytype:ident, $DOLLAR($field:ident $DOLLAR(= $value:expr)?),+ ) => {{
let body = build_flatbuffer!($builder, $bodytype, $DOLLAR($field $DOLLAR(= $value)?),+ );
let args = [ <$root Args> ] {
[ <$union:snake _type> ]: $union::$bodytype,
[<$union:snake>]: Some(body.as_union_value()),
$DOLLAR($rootfield $DOLLAR(: $rootvalue)?,)*
..[<$root Args>]::default()
} ;
let msg = $root::create($builder, &args) ;
$builder.finish_size_prefixed(msg, None);
$builder.finished_data()
}} ;
}
}
}
}