use std::fmt::Display;
use super::IntoSqlType;
use crate::error::*;
pub trait SqlEnum: Sized + 'static + Clone {
type IntegerType: Display + TryInto<usize> + IntoSqlType;
const ENUM_NAME: &'static str;
const VARIANTS_IN_ORDER: &'static [Self];
fn from_integer(integer: Self::IntegerType) -> Result<Self> {
let err = Error::NoSuchEnumVariant {
enum_name: Self::ENUM_NAME,
integer_string: integer.to_string(),
};
let as_usize: usize = match integer.try_into() {
Ok(v) => v,
Err(_) => return Err(err),
};
Self::VARIANTS_IN_ORDER.get(as_usize).cloned().ok_or(err)
}
fn to_integer(self) -> Self::IntegerType;
}