time_macros_impl/
lib.rs

1#![deny(
2    anonymous_parameters,
3    clippy::all,
4    const_err,
5    illegal_floating_point_literal_pattern,
6    late_bound_lifetime_arguments,
7    path_statements,
8    patterns_in_fns_without_body,
9    rust_2018_idioms,
10    trivial_casts,
11    trivial_numeric_casts,
12    unreachable_pub,
13    unsafe_code,
14    unused_extern_crates
15)]
16#![warn(
17    clippy::dbg_macro,
18    clippy::decimal_literal_representation,
19    clippy::get_unwrap,
20    clippy::nursery,
21    clippy::pedantic,
22    clippy::print_stdout,
23    clippy::todo,
24    clippy::unimplemented,
25    clippy::unwrap_used,
26    clippy::use_debug,
27    missing_copy_implementations,
28    missing_debug_implementations,
29    single_use_lifetimes,
30    unused_qualifications,
31    variant_size_differences
32)]
33#![allow(
34    clippy::cast_lossless,
35    clippy::cast_possible_truncation,
36    clippy::cast_possible_wrap,
37    clippy::cast_precision_loss,
38    clippy::cast_sign_loss,
39    clippy::enum_glob_use,
40    clippy::inline_always,
41    clippy::missing_const_for_fn,
42    clippy::missing_errors_doc,
43    clippy::module_name_repetitions,
44    clippy::must_use_candidate,
45    clippy::redundant_pub_crate,
46    clippy::suspicious_arithmetic_impl,
47    clippy::use_self,
48    clippy::wildcard_imports,
49    clippy::zero_prefixed_literal,
50    unstable_name_collisions
51)]
52
53// This is required on rustc < 1.42.0.
54#[allow(unused_extern_crates)]
55extern crate proc_macro;
56
57macro_rules! error {
58    ($message:literal) => {
59        error!(::proc_macro2::Span::call_site(), $message)
60    };
61
62    ($span:expr, $message:literal) => {
63        Err(::syn::Error::new($span, $message))
64    };
65
66    ($span:expr, $($args:expr),+) => {
67        Err(::syn::Error::new($span, format!($($args),+)))
68    };
69}
70
71mod kw {
72    use syn::custom_keyword;
73    custom_keyword!(am);
74    custom_keyword!(pm);
75    custom_keyword!(AM);
76    custom_keyword!(PM);
77    custom_keyword!(utc);
78    custom_keyword!(UTC);
79}
80
81mod date;
82mod ext;
83mod offset;
84mod time;
85mod time_crate;
86
87use date::Date;
88use offset::Offset;
89use proc_macro_hack::proc_macro_hack;
90use quote::ToTokens;
91use syn::parse_macro_input;
92use time::Time;
93
94#[proc_macro_hack]
95#[allow(clippy::unimplemented)]
96pub fn time(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
97    parse_macro_input!(input as Time).to_token_stream().into()
98}
99
100#[proc_macro_hack]
101#[allow(clippy::unimplemented)]
102pub fn offset(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
103    parse_macro_input!(input as Offset).to_token_stream().into()
104}
105
106#[proc_macro_hack]
107#[allow(clippy::unimplemented)]
108pub fn date(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
109    parse_macro_input!(input as Date).to_token_stream().into()
110}