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::TinyAsciiStr;
6 use crate::UnvalidatedTinyAsciiStr;
7 use databake::*;
8
9 impl<const N: usize> Bake for TinyAsciiStr<N> {
bake(&self, env: &CrateEnv) -> TokenStream10 fn bake(&self, env: &CrateEnv) -> TokenStream {
11 env.insert("tinystr");
12 let string = self.as_str();
13 quote! {
14 tinystr::tinystr!(#N, #string)
15 }
16 }
17 }
18
19 impl<const N: usize> BakeSize for TinyAsciiStr<N> {
borrows_size(&self) -> usize20 fn borrows_size(&self) -> usize {
21 0
22 }
23 }
24
25 impl<const N: usize> databake::Bake for UnvalidatedTinyAsciiStr<N> {
bake(&self, env: &databake::CrateEnv) -> databake::TokenStream26 fn bake(&self, env: &databake::CrateEnv) -> databake::TokenStream {
27 match self.try_into_tinystr() {
28 Ok(tiny) => {
29 let tiny = tiny.bake(env);
30 databake::quote! {
31 #tiny.to_unvalidated()
32 }
33 }
34 Err(_) => {
35 let bytes = self.0.bake(env);
36 env.insert("tinystr");
37 databake::quote! {
38 tinystr::UnvalidatedTinyAsciiStr::from_utf8_unchecked(#bytes)
39 }
40 }
41 }
42 }
43 }
44
45 impl<const N: usize> databake::BakeSize for UnvalidatedTinyAsciiStr<N> {
borrows_size(&self) -> usize46 fn borrows_size(&self) -> usize {
47 0
48 }
49 }
50
51 #[test]
test()52 fn test() {
53 test_bake!(
54 TinyAsciiStr<10>,
55 const,
56 crate::tinystr!(10usize, "foo"),
57 tinystr
58 );
59 }
60
61 #[test]
test_unvalidated()62 fn test_unvalidated() {
63 test_bake!(
64 UnvalidatedTinyAsciiStr<10>,
65 const,
66 crate::tinystr!(10usize, "foo").to_unvalidated(),
67 tinystr
68 );
69 test_bake!(
70 UnvalidatedTinyAsciiStr<3>,
71 const,
72 crate::UnvalidatedTinyAsciiStr::from_utf8_unchecked(*b"AB\xCD"),
73 tinystr
74 );
75 }
76