diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 00:47:55 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 00:47:55 +0000 |
commit | 26a029d407be480d791972afb5975cf62c9360a6 (patch) | |
tree | f435a8308119effd964b339f76abb83a57c29483 /third_party/rust/zerovec/src/flexzerovec/databake.rs | |
parent | Initial commit. (diff) | |
download | firefox-26a029d407be480d791972afb5975cf62c9360a6.tar.xz firefox-26a029d407be480d791972afb5975cf62c9360a6.zip |
Adding upstream version 124.0.1.upstream/124.0.1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'third_party/rust/zerovec/src/flexzerovec/databake.rs')
-rw-r--r-- | third_party/rust/zerovec/src/flexzerovec/databake.rs | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/third_party/rust/zerovec/src/flexzerovec/databake.rs b/third_party/rust/zerovec/src/flexzerovec/databake.rs new file mode 100644 index 0000000000..bd165352e8 --- /dev/null +++ b/third_party/rust/zerovec/src/flexzerovec/databake.rs @@ -0,0 +1,66 @@ +// This file is part of ICU4X. For terms of use, please see the file +// called LICENSE at the top level of the ICU4X source tree +// (online at: https://github.com/unicode-org/icu4x/blob/main/LICENSE ). + +use super::{FlexZeroSlice, FlexZeroVec}; +use databake::*; + +impl Bake for FlexZeroVec<'_> { + fn bake(&self, env: &CrateEnv) -> TokenStream { + env.insert("zerovec"); + if self.is_empty() { + quote! { zerovec::vecs::FlexZeroVec::new() } + } else { + let slice = self.as_ref().bake(env); + quote! { #slice.as_flexzerovec() } + } + } +} + +impl Bake for &FlexZeroSlice { + fn bake(&self, env: &CrateEnv) -> TokenStream { + env.insert("zerovec"); + if self.is_empty() { + quote! { zerovec::vecs::FlexZeroSlice::new_empty() } + } else { + let bytes = databake::Bake::bake(&self.as_bytes(), env); + quote! { unsafe { zerovec::vecs::FlexZeroSlice::from_byte_slice_unchecked(#bytes) } } + } + } +} + +#[test] +fn test_baked_vec() { + test_bake!( + FlexZeroVec, + const: crate::vecs::FlexZeroVec::new(), + zerovec + ); + test_bake!( + FlexZeroVec, + const: unsafe { + crate::vecs::FlexZeroSlice::from_byte_slice_unchecked( + b"\x02\x01\0\x16\0M\x01\x11" + ) + }.as_flexzerovec(), + zerovec + ); +} + +#[test] +fn test_baked_slice() { + test_bake!( + &FlexZeroSlice, + const: crate::vecs::FlexZeroSlice::new_empty(), + zerovec + ); + test_bake!( + &FlexZeroSlice, + const: unsafe { + crate::vecs::FlexZeroSlice::from_byte_slice_unchecked( + b"\x02\x01\0\x16\0M\x01\x11" + ) + }, + zerovec + ); +} |