1use crate::{maps::ZeroMapBorrowed, maps::ZeroMapKV, ZeroMap};
6use databake::*;
7
8impl<'a, K, V> Bake for ZeroMap<'a, K, V>
9where
10 K: ZeroMapKV<'a> + ?Sized,
11 V: ZeroMapKV<'a> + ?Sized,
12 K::Container: Bake,
13 V::Container: Bake,
14{
15 fn bake(&self, env: &CrateEnv) -> TokenStream {
16 env.insert("zerovec");
17 let keys = self.keys.bake(env);
18 let values = self.values.bake(env);
19 quote! { unsafe { #[allow(unused_unsafe)] zerovec::ZeroMap::from_parts_unchecked(#keys, #values) } }
20 }
21}
22
23impl<'a, K, V> BakeSize for ZeroMap<'a, K, V>
24where
25 K: ZeroMapKV<'a> + ?Sized,
26 V: ZeroMapKV<'a> + ?Sized,
27 K::Container: BakeSize,
28 V::Container: BakeSize,
29{
30 fn borrows_size(&self) -> usize {
31 self.keys.borrows_size() + self.values.borrows_size()
32 }
33}
34
35impl<'a, K, V> Bake for ZeroMapBorrowed<'a, K, V>
36where
37 K: ZeroMapKV<'a> + ?Sized,
38 V: ZeroMapKV<'a> + ?Sized,
39 &'a K::Slice: Bake,
40 &'a V::Slice: Bake,
41{
42 fn bake(&self, env: &CrateEnv) -> TokenStream {
43 env.insert("zerovec");
44 let keys = self.keys.bake(env);
45 let values = self.values.bake(env);
46 quote! { unsafe { #[allow(unused_unsafe)] zerovec::maps::ZeroMapBorrowed::from_parts_unchecked(#keys, #values) } }
47 }
48}
49
50impl<'a, K, V> BakeSize for ZeroMapBorrowed<'a, K, V>
51where
52 K: ZeroMapKV<'a> + ?Sized,
53 V: ZeroMapKV<'a> + ?Sized,
54 &'a K::Slice: BakeSize,
55 &'a V::Slice: BakeSize,
56{
57 fn borrows_size(&self) -> usize {
58 self.keys.borrows_size() + self.values.borrows_size()
59 }
60}
61
62#[test]
63fn test_baked_map() {
64 test_bake!(
65 ZeroMap<str, str>,
66 const,
67 unsafe {
68 #[allow(unused_unsafe)]
69 crate::ZeroMap::from_parts_unchecked(
70 unsafe {
71 crate::vecs::VarZeroVec16::from_bytes_unchecked(
72 b"\x02\0\0\0\0\0\0\0\x02\0\0\0adbc"
73 )
74 },
75 unsafe {
76 crate::vecs::VarZeroVec16::from_bytes_unchecked(
77 b"\x02\0\0\0\0\0\0\0\x04\0\0\0ERA1ERA0"
78 )
79 },
80 )
81 },
82 zerovec
83 );
84}
85
86#[test]
87fn test_baked_borrowed_map() {
88 test_bake!(
89 ZeroMapBorrowed<str, str>,
90 const,
91 unsafe {
92 #[allow(unused_unsafe)]
93 crate::maps::ZeroMapBorrowed::from_parts_unchecked(
94 unsafe {
95 crate::vecs::VarZeroSlice16::from_bytes_unchecked(
96 b"\x02\0\0\0\0\0\0\0\x02\0\0\0adbc"
97 )
98 },
99 unsafe {
100 crate::vecs::VarZeroSlice16::from_bytes_unchecked(
101 b"\x02\0\0\0\0\0\0\0\x04\0\0\0ERA1ERA0"
102 )
103 },
104 )
105 },
106 zerovec
107 );
108}