pub trait ToTokens {
// Required method
fn to_tokens(&self, output: &mut TokenStream);
// Provided methods
fn to_token_stream(&self) -> TokenStream { ... }
fn to_m2(&self) -> String { ... }
fn to_code(&self) -> String { ... }
}Required Methods§
fn to_tokens(&self, output: &mut TokenStream)
Provided Methods§
Sourcefn to_token_stream(&self) -> TokenStream
fn to_token_stream(&self) -> TokenStream
Examples found in repository?
examples/parse_emit_walkthrough.rs (line 55)
54 fn to_tokens(&self, output: &mut TokenStream) {
55 output.extend(self.left.to_token_stream());
56 output.extend(self.operator.to_token_stream());
57 output.extend(self.right.to_token_stream());
58 }
59}
60
61fn main() -> Result<(), TokenParseError> {
62 let quoted = quote_m2!(left + right);
63 println!("1. quote_m2! produced:\n{quoted:#?}\n");
64
65 let parsed: Addition = parse1(quoted)?;
66 println!("2. Parse produced:\n{parsed:#?}\n");
67
68 let emitted = parsed.to_token_stream();
69 println!("3. ToTokens produced:\n{emitted:#?}\n");
70 println!("4. Display merged those tokens as: {emitted}");
71
72 let reparsed: Addition = parse1(emitted)?;
73 assert_eq!(reparsed, parsed);
74
75 Ok(())
76}fn to_m2(&self) -> String
Sourcefn to_code(&self) -> String
fn to_code(&self) -> String
Examples found in repository?
examples/hierarchy_visit_emit.rs (line 32)
17fn main() -> Result<(), ParseError> {
18 let quoted = quote_m2! {
19 left + right 2
20 };
21 let source_file = parse_tokens("ed, SourceId(1))?;
22 let AnyCell::ExpressionCell(cell) = &source_file.elements[0] else {
23 panic!("quoted expression did not reconstruct as an ExpressionCell");
24 };
25 require_cell(cell);
26
27 let mut collector = SymbolCollector::default();
28 collector.visit_source_file(&source_file);
29
30 println!("hierarchy: CellNode -> ExpressionCell -> AnyCell -> SourceFile");
31 println!("visited: {}", collector.symbols.join(", "));
32 print!("generated: {}", source_file.to_code());
33 Ok(())
34}Dyn Compatibility§
This trait is dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety".