What I'm thinking of here is Rust's match statements, which do give you the ability to make use of those intermediary values by making use of Rust's enum type.
https://doc.rust-lang.org/book/second-edition/ch06-02-match....