Enums
An enum may contain many types including other enums.
pub enum Error {
    StateError: StateError,
    UserError: UserError,
}
pub enum StateError {
    Void: (),
    Pending: (),
    Completed: (),
}
pub enum UserError {
    InsufficientPermissions: (),
    Unauthorized: (),
}
Encouraged
The preferred way to use enums is to use the individual (not nested) enums directly because they are easy to follow and the lines are short:
    let error1 = StateError::Void;
    let error2 = UserError::Unauthorized;
Discouraged
If you wish to use the nested form of enums via the Error enum from the example above, then you can instantiate them into variables using the following syntax:
    let error1 = Error::StateError(StateError::Void);
    let error2 = Error::UserError(UserError::Unauthorized);
Key points to note:
- You must import all of the enums i.e. Error,StateError&UserError
- The lines may get unnecessarily long (depending on the names)
- The syntax is unergonomic