use linked_data::LinkedDataDeserializer;
use rdf_syntax::{CowGroundTerm, CowTerm};
use crate::JsonLdValue;
pub fn try_deserialize_value_object<R, D>(
deserializer: &mut D,
subject: &R,
) -> Result<Option<JsonLdValue>, D::Error>
where
R: ToOwned,
D: LinkedDataDeserializer<R>,
{
let mut value = None;
for term in deserializer.terms_of(subject)? {
if let CowTerm::Ground(CowGroundTerm::Literal(literal)) = term?
&& let Some(other) = value.replace(literal.into_owned())
&& Some(other) != value
{
return Err(linked_data::de::Error::custom("ambiguous literal value"));
}
}
Ok(value.map(Into::into))
}