Can templates be stored in variables somehow?
No. Templates are a compile-time construct, and variables contain runtime concepts.
Is there a better or more idiomatic way to do this?
Creating a function or method is always a good solution to avoid code repetition.
fn is_whitespace(c: char) -> bool { match c { ' ' | '\n' | '\t' | '\r' => true, _ => false, } } fn main() { let ch = ' '; match ch { x if is_whitespace(x) => println!("whitespace"), _ => println!("token"), } }
I also highly recommend using an existing parser, of which there are many , but everyone wants their rust "hello world" to parse for any reason.
The parsing library I use allows me to write code close to this, where whitespace is a function that can analyze valid types of spaces:
sequence!(pm, pt, { _ = literal("if"); ws = whitespace; _ = literal("let"); ws = append_whitespace(ws); pattern = pattern; ws = optional_whitespace(ws); _ = literal("="); ws = optional_whitespace(ws); expression = expression; }, |_, _| /* do something with pieces */);
Each of the things on the right side still has separate functions that can parse something specific.
source share