use quick_impl::quick_impl_all;
#[derive(Debug)]
#[quick_impl_all(pub const is)]
pub enum Status {
#[quick_impl(impl Default)]
Pending,
#[quick_impl(pub try_into, impl TryInto)]
Approved(i32),
#[quick_impl(pub try_into, impl TryFrom)]
Rejected(String),
}
fn main() {
let status = Status::default();
assert!(status.is_pending());
let status = Status::Approved(200);
let code: Result<i32, Status> = status.try_into_approved();
assert_eq!(code.unwrap(), 200);
let status = Status::Pending;
let result: Result<i32, Status> = status.try_into_approved();
assert!(result.is_err());
let status = Status::Approved(200);
let code: Result<i32, Status> = status.try_into();
assert_eq!(code.unwrap(), 200);
let status = Status::Rejected("Invalid request".to_string());
let reason = String::try_from(status);
assert_eq!(reason.unwrap(), "Invalid request");
}