use super::*;
#[derive(Debug, PartialEq, Clone)]
pub enum Nullable<T> {
NotNull(T),
Null,
}
impl<'a, T> FromRobj<'a> for Nullable<T>
where
T: FromRobj<'a>,
{
fn from_robj(robj: &'a Robj) -> std::result::Result<Self, &'static str> {
if robj.is_null() {
Ok(Nullable::Null)
} else {
Ok(Nullable::NotNull(<T>::from_robj(robj)?))
}
}
}
impl<T> From<Nullable<T>> for Robj
where
T: Into<Robj>,
{
fn from(val: Nullable<T>) -> Self {
match val {
Nullable::NotNull(t) => t.into(),
Nullable::Null => r!(NULL),
}
}
}