use serde::ser::{Serialize, SerializeStruct, Serializer};
use std::fmt::Debug;
use super::AttributeValue;
use crate::datafile;
#[derive(Debug, Clone)]
pub struct UserAttribute {
id: String,
key: String,
value: AttributeValue,
}
impl UserAttribute {
pub(crate) fn from_attribute_and_value(attribute: &datafile::Attribute, value: AttributeValue) -> UserAttribute {
UserAttribute {
id: attribute.id().into(),
key: attribute.key().into(),
value,
}
}
pub fn id(&self) -> &str {
&self.id
}
pub fn key(&self) -> &str {
&self.key
}
pub fn value(&self) -> &AttributeValue {
&self.value
}
}
impl Serialize for UserAttribute {
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where
S: Serializer,
{
let mut st = serializer.serialize_struct("UserAttribute", 4)?;
st.serialize_field("entity_id", &self.id)?;
st.serialize_field("key", &self.key)?;
st.serialize_field("attribute_type", "custom")?;
st.serialize_field("value", &String::from(&self.value))?;
st.end()
}
}