linked-data 0.2.0

Linked-Data dateset serialization/deserialization traits
Documentation
use crate::RdfUnordered;

use super::{LinkedDataSerializer, SerializeLinkedData};

impl<R: Clone + Ord, T: SerializeLinkedDataUnordered<R>> SerializeLinkedData<R>
	for RdfUnordered<T>
{
	fn serialize_rdf<S>(&self, serializer: S, graph: Option<&R>) -> Result<S::Ok, S::Error>
	where
		S: LinkedDataSerializer<R>,
	{
		self.0.serialize_rdf_unordered(serializer, graph)
	}
}

pub trait SerializeLinkedDataUnordered<R: Clone + Ord> {
	fn serialize_rdf_unordered<S>(
		&self,
		serializer: S,
		graph: Option<&R>,
	) -> Result<S::Ok, S::Error>
	where
		S: LinkedDataSerializer<R>;
}

impl<R: Clone + Ord, T: ?Sized + SerializeLinkedDataUnordered<R>> SerializeLinkedDataUnordered<R>
	for &T
{
	fn serialize_rdf_unordered<S>(
		&self,
		serializer: S,
		graph: Option<&R>,
	) -> Result<S::Ok, S::Error>
	where
		S: LinkedDataSerializer<R>,
	{
		T::serialize_rdf_unordered(*self, serializer, graph)
	}
}

impl<R: Clone + Ord, T: SerializeLinkedData<R>> SerializeLinkedDataUnordered<R> for [T] {
	fn serialize_rdf_unordered<S>(
		&self,
		mut serializer: S,
		graph: Option<&R>,
	) -> Result<S::Ok, S::Error>
	where
		S: LinkedDataSerializer<R>,
	{
		for item in self {
			item.serialize_rdf(serializer.as_dyn_mut(), graph)?;
		}

		serializer.end()
	}
}

impl<R: Clone + Ord, T: SerializeLinkedData<R>> SerializeLinkedDataUnordered<R> for Vec<T> {
	fn serialize_rdf_unordered<S>(
		&self,
		serializer: S,
		graph: Option<&R>,
	) -> Result<S::Ok, S::Error>
	where
		S: LinkedDataSerializer<R>,
	{
		self.as_slice().serialize_rdf_unordered(serializer, graph)
	}
}