Match pattern from vector

match, rust

Solution

You can combine patterns using the pipe (`|`) operator:

match symbol {
      letter @ 'a'..'z' => Token { ... },
      digit @ '0'..'9' => Token { ... },
      '\r' | '\t' | '\n' => Token {...}
}

But binding match to a variable is ugly:

match symbol {
      letter @ 'a'..'z' => Token { ... },
      digit @ '0'..'9' => Token { ... },
      ws @ '\r' | ws @ '\t' | ws @ '\n' => Token {...}
}

Problem

Let's say I'm having this function: ``` match symbol { letter @ 'a'..'z' => Token { ... }, digit @ '0'..'9' => Token { ... }, whitespace @ ['\r', '\t', '\n'] => Token {...} } ``` This obviously doesn't work. Is there any way to have `whitespace` use similar construct, without writing this like: ``` match symbol { letter @ 'a'..'z' => Token { ... }, digit @ '0'..'9' => Token { ... }, '\r' => Token {...}, '\n' => Token {...}, '\r' => Token {...}, } ```

Original source