wishcasting /ˈwɪʃˌkɑːstɪŋ/
n. — The act of interpreting information or a situation in a way that casts it as favorable or desired, although there is no evidence for such a conclusion; a wishful forecast.
pattern-wishcast
proc macro implementing some parts of pattern types, a proposed rust language feature which may be added soon™
here's to hoping that demonstrating the usefulness of predicate subtyping with this limited hack speeds the addition of real pattern types
what
compile-time subtyping relationships between enums with conditionally uninhabited variants. hopefully probably maybe safe transmute-based conversions. miri seems happy.
pattern_wishcast!
generates transmute-based upcasts and runtime-checked downcasts. auto-generated safety tests.
limitations
- only patterns that make entire variants conditional work. can't restrict a field to a range like real rust patterns
- downcast gen has builtin support for only
Vec<T>,Box<T>,Option<T>for generic containers containing Value types- requires #[unsafe_transmute_check(iter = ".values()")] for custom containers, don't mess up or you'll transmute never types into existence
examples
see examples/expression_evaluator.rs for stuck evaluation -> resolved evaluation demo using CompleteValue and PartialValue
status
works but hacky. would be much cleaner with native pattern types support in rustc.
pre-release for now, expect the API to change. might be small changes, might get reworked. have only been iterating on this for a few days.