• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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