use std::convert::TryFrom;
use uuid::Uuid;
use crate::value::Value;
use super::{FromValue, FromValueError, ParseIr};
impl From<Uuid> for Value {
fn from(uuid: Uuid) -> Value {
Value::Bytes(uuid.as_bytes().to_vec())
}
}
impl TryFrom<Value> for ParseIr<Uuid> {
type Error = FromValueError;
fn try_from(v: Value) -> Result<Self, Self::Error> {
match v {
Value::Bytes(ref bytes) => match Uuid::from_slice(bytes.as_slice()) {
Ok(val) => Ok(ParseIr(val, v)),
Err(_) => Err(FromValueError(v)),
},
v => Err(FromValueError(v)),
}
}
}
impl From<ParseIr<Uuid>> for Uuid {
fn from(value: ParseIr<Uuid>) -> Self {
value.commit()
}
}
impl From<ParseIr<Uuid>> for Value {
fn from(value: ParseIr<Uuid>) -> Self {
value.rollback()
}
}
impl FromValue for Uuid {
type Intermediate = ParseIr<Uuid>;
}