macro_rules! import_schema {
($path:literal) => {
include!(concat!("flatbuffers/", $path));
};
($module:ident, $path:literal) => {
#[allow(
unsafe_op_in_unsafe_fn,
dead_code,
unused_imports,
clippy::extra_unused_lifetimes,
clippy::needless_lifetimes,
clippy::unwrap_used
)]
mod $module {
import_schema!($path);
}
pub(crate) use $module::*;
};
}
pub(crate) mod transforms {
import_schema!(transform_generated, "transforms/transform_generated.rs");
import_schema!(
transform_kind_generated,
"transforms/transform_kind_generated.rs"
);
import_schema!(
null_transform_generated,
"transforms/null_transform_generated.rs"
);
import_schema!(
padding_hadamard_generated,
"transforms/padding_hadamard_generated.rs"
);
import_schema!(
double_hadamard_generated,
"transforms/double_hadamard_generated.rs"
);
import_schema!(
random_rotation_generated,
"transforms/random_rotation_generated.rs"
);
}
pub(crate) mod spherical {
use super::*;
import_schema!(
supported_metric_generated,
"spherical/supported_metric_generated.rs"
);
import_schema!(
spherical_quantizer_generated,
"spherical/spherical_quantizer_generated.rs"
);
import_schema!(quantizer_generated, "spherical/quantizer_generated.rs");
}
#[cfg(test)]
pub(crate) fn to_flatbuffer<'a, T, F>(packer: F) -> Vec<u8>
where
F: FnOnce(&mut flatbuffers::FlatBufferBuilder<'a>) -> flatbuffers::WIPOffset<T>,
T: 'a,
{
let mut buf = flatbuffers::FlatBufferBuilder::new();
let offset = packer(&mut buf);
buf.finish(offset, None);
buf.finished_data().to_vec()
}