use bevy::prelude::Component;
use serde::{Deserialize, Deserializer, Serialize, Serializer};
#[derive(Component, Debug, Clone, PartialEq, Eq, Hash)]
pub struct Guid {
value: String,
}
impl Serialize for Guid {
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where
S: Serializer,
{
serializer.serialize_str(&self.value)
}
}
impl<'de> Deserialize<'de> for Guid {
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where
D: Deserializer<'de>,
{
String::deserialize(deserializer).map(Guid::new)
}
}
impl Guid {
pub fn new(id: String) -> Self {
Self { value: id }
}
pub fn id(&self) -> &str {
&self.value
}
pub fn key_field() -> crate::core::query::FilterExpression {
crate::core::query::FilterExpression::DocumentKey
}
}