#![allow( clippy::no_effect_underscore_binding, clippy::too_many_lines, clippy::used_underscore_binding )] #[rustfmt::skip] mod gen; use proc_macro2::{Ident, Literal, TokenStream}; use ref_cast::RefCast; use std::fmt::{self, Debug}; use std::ops::Deref; use syn::punctuated::Punctuated; #[derive(RefCast)] #[repr(transparent)] pub struct Lite { value: T, } #[allow(non_snake_case)] pub fn Lite(value: &T) -> &Lite { Lite::ref_cast(value) } impl Deref for Lite { type Target = T; fn deref(&self) -> &Self::Target { &self.value } } impl Debug for Lite { fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { write!(formatter, "{}", self.value) } } impl Debug for Lite { fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { write!(formatter, "{}", self.value) } } impl Debug for Lite { fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { write!(formatter, "{}", self.value) } } impl Debug for Lite { fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { write!(formatter, "{:?}", self.value) } } impl Debug for Lite { fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { write!(formatter, "{:?}", self.value.to_string()) } } impl Debug for Lite { fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { write!(formatter, "{}", self.value) } } impl Debug for Lite { fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { let string = self.value.to_string(); if string.len() <= 80 { write!(formatter, "TokenStream(`{}`)", self.value) } else { formatter .debug_tuple("TokenStream") .field(&format_args!("`{}`", string)) .finish() } } } impl Debug for Lite<&T> where Lite: Debug, { fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { Debug::fmt(Lite(self.value), formatter) } } impl Debug for Lite> where Lite: Debug, { fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { Debug::fmt(Lite(&*self.value), formatter) } } impl Debug for Lite> where Lite: Debug, { fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { formatter .debug_list() .entries(self.value.iter().map(Lite)) .finish() } } impl Debug for Lite> where Lite: Debug, Lite

: Debug, { fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { let mut list = formatter.debug_list(); for pair in self.pairs() { let (node, punct) = pair.into_tuple(); list.entry(Lite(node)); list.entries(punct.map(Lite)); } list.finish() } } struct Present; impl Debug for Present { fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { formatter.write_str("Some") } } struct Option { present: bool, } impl Debug for Option { fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { formatter.write_str(if self.present { "Some" } else { "None" }) } }