use serde::{Deserialize, Serialize};
use typed_builder::TypedBuilder;
#[derive(Debug, Default, Eq, PartialEq, Clone, Serialize, Deserialize)]
#[serde(tag = "type")]
pub enum ObjType {
#[default]
#[serde(alias = "hosted")]
HostedBadge,
#[serde(alias = "signed")]
SignedBadge {
#[serde(skip_serializing_if = "Option::is_none")]
creator: Option<String>,
},
VerificationObject,
}
#[derive(Debug, Default, Eq, PartialEq, Clone, Serialize, Deserialize, TypedBuilder)]
pub struct Obj {
#[serde(flatten)]
#[serde(default)]
#[builder(default)]
pub r#type: ObjType,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(default)]
#[builder(default)]
#[builder(setter(into))]
pub verification_property: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(default)]
#[builder(default)]
#[builder(setter(into))]
pub starts_with: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(default)]
#[builder(default)]
#[builder(setter(into))]
pub allowed_origins: Option<String>,
}
impl Obj {
#[must_use]
pub const fn new(r#type: ObjType) -> Self {
Self {
r#type,
verification_property: None,
starts_with: None,
allowed_origins: None,
}
}
}