zerovec/map2d/
databake.rs1use crate::{maps::ZeroMap2dBorrowed, maps::ZeroMapKV, ZeroMap2d};
6use databake::*;
7
8impl<'a, K0, K1, V> Bake for ZeroMap2d<'a, K0, K1, V>
9where
10 K0: ZeroMapKV<'a> + ?Sized,
11 K1: ZeroMapKV<'a> + ?Sized,
12 V: ZeroMapKV<'a> + ?Sized,
13 K0::Container: Bake,
14 K1::Container: Bake,
15 V::Container: Bake,
16{
17 fn bake(&self, env: &CrateEnv) -> TokenStream {
18 env.insert("zerovec");
19 let keys0 = self.keys0.bake(env);
20 let joiner = self.joiner.bake(env);
21 let keys1 = self.keys1.bake(env);
22 let values = self.values.bake(env);
23 quote! { unsafe { #[allow(unused_unsafe)] zerovec::ZeroMap2d::from_parts_unchecked(#keys0, #joiner, #keys1, #values) } }
24 }
25}
26
27impl<'a, K0, K1, V> BakeSize for ZeroMap2d<'a, K0, K1, V>
28where
29 K0: ZeroMapKV<'a> + ?Sized,
30 K1: ZeroMapKV<'a> + ?Sized,
31 V: ZeroMapKV<'a> + ?Sized,
32 K0::Container: BakeSize,
33 K1::Container: BakeSize,
34 V::Container: BakeSize,
35{
36 fn borrows_size(&self) -> usize {
37 self.keys0.borrows_size()
38 + self.joiner.borrows_size()
39 + self.keys1.borrows_size()
40 + self.values.borrows_size()
41 }
42}
43
44impl<'a, K0, K1, V> Bake for ZeroMap2dBorrowed<'a, K0, K1, V>
45where
46 K0: ZeroMapKV<'a> + ?Sized,
47 K1: ZeroMapKV<'a> + ?Sized,
48 V: ZeroMapKV<'a> + ?Sized,
49 &'a K0::Slice: Bake,
50 &'a K1::Slice: Bake,
51 &'a V::Slice: Bake,
52{
53 fn bake(&self, env: &CrateEnv) -> TokenStream {
54 env.insert("zerovec");
55 let keys0 = self.keys0.bake(env);
56 let joiner = self.joiner.bake(env);
57 let keys1 = self.keys1.bake(env);
58 let values = self.values.bake(env);
59 quote! { unsafe { #[allow(unused_unsafe)] zerovec::maps::ZeroMap2dBorrowed::from_parts_unchecked(#keys0, #joiner, #keys1, #values) } }
60 }
61}
62
63impl<'a, K0, K1, V> BakeSize for ZeroMap2dBorrowed<'a, K0, K1, V>
64where
65 K0: ZeroMapKV<'a> + ?Sized,
66 K1: ZeroMapKV<'a> + ?Sized,
67 V: ZeroMapKV<'a> + ?Sized,
68 &'a K0::Slice: BakeSize,
69 &'a K1::Slice: BakeSize,
70 &'a V::Slice: BakeSize,
71{
72 fn borrows_size(&self) -> usize {
73 self.keys0.borrows_size()
74 + self.joiner.borrows_size()
75 + self.keys1.borrows_size()
76 + self.values.borrows_size()
77 }
78}
79
80#[test]
81fn test_baked_map() {
82 test_bake!(
83 ZeroMap2d<str, str, str>,
84 const,
85 unsafe {
86 #[allow(unused_unsafe)]
87 crate::ZeroMap2d::from_parts_unchecked(
88 unsafe {
89 crate::vecs::VarZeroVec16::from_bytes_unchecked(
90 b"\x0E\0\0\0\0\0\x05\0\x07\0\t\0\x0B\0\x10\0\x12\0\x14\0\x1C\0\x1E\0#\0%\0'\0,\0arcazcuenffgrckkkukylifmanmnpapalsdtgugunruzyuezh"
91 )
92 },
93 unsafe {
94 crate::ZeroVec::from_bytes_unchecked(
95 b"\x02\0\0\0\x03\0\0\0\x04\0\0\0\x05\0\0\0\x06\0\0\0\x07\0\0\0\x08\0\0\0\n\0\0\0\x0C\0\0\0\r\0\0\0\x0E\0\0\0\x0F\0\0\0\x10\0\0\0\x11\0\0\0\x14\0\0\0\x15\0\0\0\x16\0\0\0\x17\0\0\0\x18\0\0\0\x19\0\0\0\x1C\0\0\0"
96 )
97 },
98 unsafe {
99 crate::vecs::VarZeroVec16::from_bytes_unchecked(
100 b"\x1C\0\0\0\0\0\x04\0\x08\0\x0C\0\x10\0\x14\0\x18\0\x1C\0 \0$\0(\0,\x000\x004\08\0<\0@\0D\0H\0L\0P\0T\0X\0\\\0`\0d\0h\0l\0NbatPalmArabGlagShawAdlmLinbArabArabYeziArabLatnLimbNkooMongArabPhlpDevaKhojSindArabCyrlDevaArabHansBopoHanbHant"
101 )
102 },
103 unsafe {
104 crate::vecs::VarZeroVec16::from_bytes_unchecked(
105 b"\x1C\0\0\0\0\0\x02\0\x04\0\x06\0\x08\0\n\0\x0C\0\x0E\0\x10\0\x12\0\x14\0\x16\0\x18\0\x1A\0\x1C\0\x1E\0 \0\"\0$\0&\0(\0*\0,\0.\x000\x002\x004\x006\0JOSYIRBGGBGNGRCNIQGECNTRINGNCNPKCNINININPKKZNPAFCNTWTWTW"
106 )
107 },
108 )
109 },
110 zerovec
111 );
112}
113
114#[test]
115fn test_baked_borrowed_map() {
116 test_bake!(
117 ZeroMap2dBorrowed<str, str, str>,
118 const,
119 unsafe {
120 #[allow(unused_unsafe)]
121 crate::maps::ZeroMap2dBorrowed::from_parts_unchecked(
122 unsafe {
123 crate::vecs::VarZeroSlice16::from_bytes_unchecked(
124 b"\x0E\0\0\0\0\0\x05\0\x07\0\t\0\x0B\0\x10\0\x12\0\x14\0\x1C\0\x1E\0#\0%\0'\0,\0arcazcuenffgrckkkukylifmanmnpapalsdtgugunruzyuezh"
125 )
126 },
127 unsafe {
128 crate::ZeroSlice::from_bytes_unchecked(
129 b"\x02\0\0\0\x03\0\0\0\x04\0\0\0\x05\0\0\0\x06\0\0\0\x07\0\0\0\x08\0\0\0\n\0\0\0\x0C\0\0\0\r\0\0\0\x0E\0\0\0\x0F\0\0\0\x10\0\0\0\x11\0\0\0\x14\0\0\0\x15\0\0\0\x16\0\0\0\x17\0\0\0\x18\0\0\0\x19\0\0\0\x1C\0\0\0"
130 )
131 },
132 unsafe {
133 crate::vecs::VarZeroSlice16::from_bytes_unchecked(
134 b"\x1C\0\0\0\0\0\x04\0\x08\0\x0C\0\x10\0\x14\0\x18\0\x1C\0 \0$\0(\0,\x000\x004\08\0<\0@\0D\0H\0L\0P\0T\0X\0\\\0`\0d\0h\0l\0NbatPalmArabGlagShawAdlmLinbArabArabYeziArabLatnLimbNkooMongArabPhlpDevaKhojSindArabCyrlDevaArabHansBopoHanbHant"
135 )
136 },
137 unsafe {
138 crate::vecs::VarZeroSlice16::from_bytes_unchecked(
139 b"\x1C\0\0\0\0\0\x02\0\x04\0\x06\0\x08\0\n\0\x0C\0\x0E\0\x10\0\x12\0\x14\0\x16\0\x18\0\x1A\0\x1C\0\x1E\0 \0\"\0$\0&\0(\0*\0,\0.\x000\x002\x004\x006\0JOSYIRBGGBGNGRCNIQGECNTRINGNCNPKCNINININPKKZNPAFCNTWTWTW"
140 )
141 },
142 )
143 },
144 zerovec
145 );
146}