use std::collections::HashMap;
use serde::{Deserialize, Serialize};
use uuid::Uuid;
pub type DomainIdBindings = HashMap<&'static str, Vec<String>>;
pub type DomainIdValues = HashMap<&'static str, DomainIdValue>;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum DomainIdValue {
Value(String),
None,
}
impl DomainIdValue {
pub fn some(value: impl Into<String>) -> Self {
Self::Value(value.into())
}
pub fn none() -> Self {
Self::None
}
pub fn as_option(&self) -> Option<&str> {
match self {
Self::Value(v) => Some(v.as_str()),
Self::None => None,
}
}
pub fn into_option(self) -> Option<String> {
match self {
Self::Value(v) => Some(v),
Self::None => None,
}
}
}
impl From<String> for DomainIdValue {
fn from(value: String) -> Self {
Self::Value(value)
}
}
impl From<&str> for DomainIdValue {
fn from(value: &str) -> Self {
Self::Value(value.to_string())
}
}
impl From<u64> for DomainIdValue {
fn from(value: u64) -> Self {
Self::Value(value.to_string())
}
}
impl From<Uuid> for DomainIdValue {
fn from(value: Uuid) -> Self {
Self::Value(value.to_string())
}
}
impl<T: Into<String>> From<Option<T>> for DomainIdValue {
fn from(value: Option<T>) -> Self {
match value {
Some(v) => Self::Value(v.into()),
None => Self::None,
}
}
}