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.