syn_utils/
control_flow.rs

1use crate::*;
2
3#[derive(Default, Clone, Debug)]
4pub struct ControlFlow {
5  pub dummy: Option<TokenStream2>,
6}
7
8impl ControlFlow {
9  pub fn new() -> Self {
10    Self { dummy: None }
11  }
12
13  pub fn with_custom_dummy(dummy: &TokenStream2) -> Self {
14    Self {
15      dummy: Some(dummy.to_token_stream()),
16    }
17  }
18}
19
20pub trait MacroError {
21  fn append_unimplemented(self) -> TokenStream2;
22}
23
24impl MacroError for syn::Error {
25  fn append_unimplemented(self) -> TokenStream2 {
26    let error = self.into_compile_error();
27
28    quote! { #error; unimplemented!() }
29  }
30}
31
32pub trait MacroResult: Sized {
33  fn unwrap_or_unimplemented(self) -> TokenStream2;
34}
35
36impl<T: ToTokens> MacroResult for syn::Result<T> {
37  fn unwrap_or_unimplemented(self) -> TokenStream2 {
38    self.map_or_else(
39      |error| {
40        let error = error.into_compile_error();
41
42        quote! { #error; unimplemented!() }
43      },
44      |v| v.into_token_stream(),
45    )
46  }
47}