syn_utils/
control_flow.rs1use 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}