use crate::GraphError;
use oxigraph::io::{RdfFormat, RdfSerializer};
use oxigraph::model::{GraphNameRef, Quad};
use std::io::Write;
pub fn serialize_to_writer<W: Write>(
quads: &[Quad], format: RdfFormat, mut writer: W,
) -> Result<(), GraphError> {
let temp_store = oxigraph::store::Store::new().map_err(GraphError::Oxigraph)?;
for quad in quads {
temp_store.insert(quad).map_err(GraphError::Oxigraph)?;
}
if format.supports_datasets() {
temp_store
.dump_to_writer(RdfSerializer::from_format(format), &mut writer)
.map_err(|e| GraphError::Serialization(e.to_string()))?;
} else {
temp_store
.dump_graph_to_writer(
GraphNameRef::DefaultGraph,
RdfSerializer::from_format(format),
&mut writer,
)
.map_err(|e| GraphError::Serialization(e.to_string()))?;
}
Ok(())
}
pub fn serialize_to_string(quads: &[Quad], format: RdfFormat) -> Result<String, GraphError> {
let mut buffer = Vec::new();
serialize_to_writer(quads, format, &mut buffer)?;
String::from_utf8(buffer).map_err(|e| GraphError::Serialization(e.to_string()))
}