error_tree/
from_impl_generation_config.rs

1crate::ix!();
2
3#[derive(Debug,Clone)]
4pub struct FromImplGenerationConfig {
5    conversion_chain: ConversionChain,
6}
7
8impl From<ConversionChain> for FromImplGenerationConfig {
9
10    fn from(conversion_chain: ConversionChain
11
12    ) -> Self {
13
14        Self {
15            conversion_chain,
16        }
17    }
18}
19
20impl ToTokens for FromImplGenerationConfig {
21
22    fn to_tokens(&self, tokens: &mut TokenStream2) {
23
24        let from_src = self.conversion_chain.source().expect("expected non null ConversionChain");
25        let from_dst = self.conversion_chain.destination().expect("expected non null ConversionChain");
26
27        let conversion_chain_tokens = self.conversion_chain.clone().into_token_stream();
28
29        tokens.extend(
30            quote! {
31                impl From<#from_src> for #from_dst {
32                    fn from(x: #from_src) -> Self {
33                        #conversion_chain_tokens
34                    }
35                }
36            }
37        );
38    }
39}
40
41impl From<&ErrorTree> for Vec<FromImplGenerationConfig> {
42
43    fn from(tree: &ErrorTree) -> Vec<FromImplGenerationConfig> {
44
45        let mut emitter = FromImplGenerationConfigEmitter::new(tree);
46
47        for e in &tree.enums {
48            emitter.visit_error_enum(e);
49        }
50
51        emitter.emit()
52    }
53}