Data Modeling Capstone
Enum Ticket State
Model a Closed Set
An enum captures a closed set of possible states, and helper functions keep conversion and display logic together.
Program
Play the program to choose a state code and build a typed ticket.
enum_ticket_state.rs
enum TicketState {
Open,
Closed,
Escalated,
}
struct Ticket {
id: u32,
state: TicketState,
}
fn main() {
let state_code = ;
let ticket = Ticket { id: 42, state: state_from(state_code) };
let label = state_label(&ticket.state);
println!("{}:{}", ticket.id, label);
}
fn state_from(code: u8) -> TicketState {
match code {
0 => TicketState::Open,
1 => TicketState::Closed,
_ => TicketState::Escalated,
}
}
fn state_label(state: &TicketState) -> &'static str {
match state {
TicketState::Open => "open",
TicketState::Closed => "closed",
TicketState::Escalated => "escalated",
}
}
enum TicketState {
Open,
Closed,
Escalated,
}
struct Ticket {
id: u32,
state: TicketState,
}
fn main() {
let state_code = ;
let ticket = Ticket { id: 42, state: state_from(state_code) };
let label = state_label(&ticket.state);
println!("{}:{}", ticket.id, label);
}
fn state_from(code: u8) -> TicketState {
match code {
0 => TicketState::Open,
1 => TicketState::Closed,
_ => TicketState::Escalated,
}
}
fn state_label(state: &TicketState) -> &'static str {
match state {
TicketState::Open => "open",
TicketState::Closed => "closed",
TicketState::Escalated => "escalated",
}
}
enum TicketState {
Open,
Closed,
Escalated,
}
struct Ticket {
id: u32,
state: TicketState,
}
fn main() {
let state_code = ;
let ticket = Ticket { id: 42, state: state_from(state_code) };
let label = state_label(&ticket.state);
println!("{}:{}", ticket.id, label);
}
fn state_from(code: u8) -> TicketState {
match code {
0 => TicketState::Open,
1 => TicketState::Closed,
_ => TicketState::Escalated,
}
}
fn state_label(state: &TicketState) -> &'static str {
match state {
TicketState::Open => "open",
TicketState::Closed => "closed",
TicketState::Escalated => "escalated",
}
}
enum
`TicketState` makes the allowed states explicit and finite.
conversion
`state_from` converts a raw code into the typed model.
display helper
`state_label` keeps presentation labels close to the model.