]> git.proxmox.com Git - rustc.git/blob - vendor/zerovec/src/varzerovec/databake.rs
New upstream version 1.67.1+dfsg1
[rustc.git] / vendor / zerovec / src / varzerovec / databake.rs
1 // This file is part of ICU4X. For terms of use, please see the file
2 // called LICENSE at the top level of the ICU4X source tree
3 // (online at: https://github.com/unicode-org/icu4x/blob/main/LICENSE ).
4
5 use crate::{ule::VarULE, VarZeroSlice, VarZeroVec};
6 use databake::*;
7
8 impl<T: VarULE + ?Sized> Bake for VarZeroVec<'_, T> {
9 fn bake(&self, env: &CrateEnv) -> TokenStream {
10 env.insert("zerovec");
11 let bytes = self.as_bytes();
12 // Safe because self.as_bytes is a safe input
13 quote! { unsafe { ::zerovec::VarZeroVec::from_bytes_unchecked(&[#(#bytes),*]) } }
14 }
15 }
16
17 impl<T: VarULE + ?Sized> Bake for &VarZeroSlice<T> {
18 fn bake(&self, env: &CrateEnv) -> TokenStream {
19 env.insert("zerovec");
20 let bytes = self.as_bytes();
21 // Safe because self.as_bytes is a safe input
22 quote! { unsafe { ::zerovec::VarZeroSlice::from_bytes_unchecked(&[#(#bytes),*]) } }
23 }
24 }
25
26 #[test]
27 fn test_baked_vec() {
28 test_bake!(
29 VarZeroVec<str>,
30 const: unsafe {
31 crate::VarZeroVec::from_bytes_unchecked(&[
32 2u8, 1u8, 0u8, 22u8, 0u8, 77u8, 1u8, 92u8, 17u8,
33 ])
34 },
35 zerovec
36 );
37 }
38
39 #[test]
40 fn test_baked_slice() {
41 test_bake!(
42 &VarZeroSlice<str>,
43 const: unsafe {
44 crate::VarZeroSlice::from_bytes_unchecked(&[
45 2u8, 1u8, 0u8, 22u8, 0u8, 77u8, 1u8, 92u8, 17u8,
46 ])
47 },
48 zerovec
49 );
50 }