///|
pub(all) enum UserStatus {
  Pending
  Approved
  Rejected
} derive(Debug, Eq)

///|
pub fn UserStatus::from_string(s : String) -> UserStatus {
  match s {
    "approved" => Approved
    "rejected" => Rejected
    _ => Pending
  }
}

///|
pub fn UserStatus::to_string(self : UserStatus) -> String {
  match self {
    Pending => "pending"
    Approved => "approved"
    Rejected => "rejected"
  }
}

///|
pub impl ToJson for UserStatus with fn to_json(self) {
  self.to_string().to_json()
}

///|
pub impl @json.FromJson for UserStatus with fn from_json(json, path) {
  let s : String = @json.FromJson::from_json(json, path)
  UserStatus::from_string(s)
}