Skip to content

Commit 8e0f811

Browse files
committed
add missing files
1 parent 39a4948 commit 8e0f811

4 files changed

Lines changed: 84 additions & 3 deletions

File tree

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
use synstructure::BindingInfo;
2+
3+
use synstructure::Structure;
4+
5+
use syn::Result;
6+
7+
pub(crate) trait FilterExt {
8+
type Item<'a>;
9+
10+
fn filter<F>(&mut self, f: F) -> &mut Self
11+
where
12+
F: for<'a> FnMut(Self::Item<'a>) -> bool;
13+
14+
fn try_filter<F>(&mut self, mut f: F) -> Result<&mut Self>
15+
where
16+
F: for<'a> FnMut(Self::Item<'a>) -> Result<bool>,
17+
{
18+
let mut filter_err = None;
19+
20+
let result = self.filter(|value| {
21+
if filter_err.is_some() {
22+
return false;
23+
}
24+
25+
f(value).unwrap_or_else(|err| {
26+
filter_err = Some(err);
27+
false
28+
})
29+
});
30+
31+
filter_err.map(Err).unwrap_or(Ok(result))
32+
}
33+
}
34+
35+
impl FilterExt for Structure<'_> {
36+
type Item<'a> = &'a BindingInfo<'a>;
37+
38+
fn filter<F>(&mut self, mut f: F) -> &mut Self
39+
where
40+
F: for<'a> FnMut(&'a BindingInfo<'a>) -> bool,
41+
{
42+
self.filter(|value| f(value))
43+
}
44+
}

custom_debug_derive/src/lib.rs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ fn filter_out_skipped_fields(structure: &mut Structure) -> Result<()> {
4040
let skip_ident: Ident = parse_str("skip").unwrap();
4141

4242
structure.try_filter(|binding| {
43-
for meta in get_metas(binding) {
43+
for meta in get_custom_debug_metas(binding) {
4444
let meta = meta?;
4545

4646
if let NestedMeta::Meta(Meta::Path(ref path)) = meta {
@@ -84,7 +84,7 @@ fn generate_match_arm_body(variant: &VariantInfo) -> Result<TokenStream> {
8484
fn generate_debug_builder_call(binding: &BindingInfo) -> Result<TokenStream> {
8585
let mut format = None;
8686

87-
for meta in get_metas(binding) {
87+
for meta in get_custom_debug_metas(binding) {
8888
let meta = meta?;
8989

9090
match meta {
@@ -158,7 +158,9 @@ fn generate_name_value_builder_call(
158158
}
159159
}
160160

161-
fn get_metas<'a>(binding: &BindingInfo<'a>) -> impl Iterator<Item = Result<NestedMeta>> + 'a {
161+
fn get_custom_debug_metas<'a>(
162+
binding: &BindingInfo<'a>,
163+
) -> impl Iterator<Item = Result<NestedMeta>> + 'a {
162164
let debug_attr = parse_str::<Path>("debug").unwrap();
163165

164166
binding

custom_debug_derive/src/macros.rs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
macro_rules! error {
2+
($span:expr, $message:expr $(, $($rest:tt),*)?) => {{
3+
let message = format!(concat!("custom_debug: ", $message) $(, $($rest),*)?);
4+
5+
syn::Error::new($span, message)
6+
}};
7+
}
8+
9+
pub(crate) use error;
10+
11+
macro_rules! bail {
12+
($span:expr, $message:expr $(, $($rest:tt),*)?) => {
13+
return Err($crate::error!($span, $message $(, $($rest),*)?))
14+
};
15+
}
16+
17+
pub(crate) use bail;
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
use syn::Result;
2+
3+
use syn;
4+
5+
use proc_macro2::TokenStream;
6+
7+
pub(crate) trait ResultIntoStreamExt {
8+
fn into_stream(self) -> TokenStream;
9+
}
10+
11+
impl ResultIntoStreamExt for syn::Result<TokenStream> {
12+
fn into_stream(self) -> TokenStream {
13+
match self {
14+
Ok(stream) => stream,
15+
Err(err) => err.into_compile_error(),
16+
}
17+
}
18+
}

0 commit comments

Comments
 (0)