Using enums to represent state in Rust

Making illegal states unrepresentable