time_macros/utc_datetime.rs
1use std::iter::Peekable;
2
3use proc_macro::{token_stream, TokenTree};
4
5use crate::date::Date;
6use crate::error::Error;
7use crate::time::Time;
8use crate::to_tokens::ToTokenTree;
9use crate::{date, time};
10
11pub(crate) struct UtcDateTime {
12 date: Date,
13 time: Time,
14}
15
16pub(crate) fn parse(chars: &mut Peekable<token_stream::IntoIter>) -> Result<UtcDateTime, Error> {
17 let date = date::parse(chars)?;
18 let time = time::parse(chars)?;
19
20 if let Some(token) = chars.peek() {
21 return Err(Error::UnexpectedToken {
22 tree: token.clone(),
23 });
24 }
25
26 Ok(UtcDateTime { date, time })
27}
28
29impl ToTokenTree for UtcDateTime {
30 fn into_token_tree(self) -> TokenTree {
31 quote_group! {{
32 const DATE_TIME: ::time::UtcDateTime = ::time::UtcDateTime::new(
33 #(self.date),
34 #(self.time),
35 );
36 DATE_TIME
37 }}
38 }
39}