]> git.proxmox.com Git - rustc.git/blame - vendor/time-macros/src/format_description/mod.rs
New upstream version 1.68.2+dfsg1
[rustc.git] / vendor / time-macros / src / format_description / mod.rs
CommitLineData
9c376795
FG
1mod component;
2pub(crate) mod error;
3pub(crate) mod modifier;
4pub(crate) mod parse;
5
6use proc_macro::{Literal, TokenStream};
7
8pub(crate) use self::component::Component;
9pub(crate) use self::parse::parse;
10use crate::to_tokens::ToTokenStream;
11
12mod 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)]
26pub(crate) enum FormatItem<'a> {
27 Literal(&'a [u8]),
28 Component(Component),
29}
30
31impl 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}