]>
Commit | Line | Data |
---|---|---|
9c376795 FG |
1 | mod component; |
2 | pub(crate) mod error; | |
3 | pub(crate) mod modifier; | |
4 | pub(crate) mod parse; | |
5 | ||
6 | use proc_macro::{Literal, TokenStream}; | |
7 | ||
8 | pub(crate) use self::component::Component; | |
9 | pub(crate) use self::parse::parse; | |
10 | use crate::to_tokens::ToTokenStream; | |
11 | ||
12 | mod helper { | |
13 | #[must_use = "This does not modify the original slice."] | |
14 | pub(crate) fn consume_whitespace<'a>(bytes: &'a [u8], index: &mut usize) -> &'a [u8] { | |
15 | let first_non_whitespace = bytes | |
16 | .iter() | |
17 | .position(|c| !c.is_ascii_whitespace()) | |
18 | .unwrap_or(bytes.len()); | |
19 | *index += first_non_whitespace; | |
20 | &bytes[first_non_whitespace..] | |
21 | } | |
22 | } | |
23 | ||
24 | #[allow(single_use_lifetimes)] // false positive | |
25 | #[allow(variant_size_differences)] | |
26 | pub(crate) enum FormatItem<'a> { | |
27 | Literal(&'a [u8]), | |
28 | Component(Component), | |
29 | } | |
30 | ||
31 | impl ToTokenStream for FormatItem<'_> { | |
32 | fn append_to(self, ts: &mut TokenStream) { | |
33 | quote_append! { ts | |
34 | ::time::format_description::FormatItem::#S(match self { | |
35 | FormatItem::Literal(bytes) => quote! { Literal(#(Literal::byte_string(bytes))) }, | |
36 | FormatItem::Component(component) => quote! { Component(#S(component)) }, | |
37 | }) | |
38 | } | |
39 | } | |
40 | } |