Serde
Using serde with a field that can be an uuid or an empty string
#![allow(unused)]
fn main() {
use serde::Deserialize;
use std::convert::TryFrom;
use uuid::Uuid;
#[derive(Deserialize)]
struct Foo {
parent: Id
}
#[derive(Deserialize)]
#[serde(try_from = "String")]
enum Id {
Root,
Uuid(Uuid)
}
impl TryFrom<String> for Id {
type Error = uuid::Error;
fn try_from(value: String) -> Result<Self, Self::Error> {
if value == "" {
Ok(Self::Root)
} else {
let uuid = Uuid::parse_str(&value)?;
Ok(Self::Uuid(uuid))
}
}
}
}
borsh is alternative to
serde
.