#![allow(deprecated)] //! Utilities to write RDF graphs and datasets. use crate::io::{DatasetFormat, GraphFormat}; use crate::model::*; use oxrdfio::{RdfSerializer, ToWriteQuadWriter}; use std::io::{self, Write}; /// A serializer for RDF graph serialization formats. /// /// It currently supports the following formats: /// * [N-Triples](https://www.w3.org/TR/n-triples/) ([`GraphFormat::NTriples`]) /// * [Turtle](https://www.w3.org/TR/turtle/) ([`GraphFormat::Turtle`]) /// * [RDF/XML](https://www.w3.org/TR/rdf-syntax-grammar/) ([`GraphFormat::RdfXml`]) /// /// ``` /// use oxigraph::io::{GraphFormat, GraphSerializer}; /// use oxigraph::model::*; /// /// let mut buffer = Vec::new(); /// let mut writer = GraphSerializer::from_format(GraphFormat::NTriples).triple_writer(&mut buffer); /// writer.write(&Triple { /// subject: NamedNode::new("http://example.com/s")?.into(), /// predicate: NamedNode::new("http://example.com/p")?, /// object: NamedNode::new("http://example.com/o")?.into() /// })?; /// writer.finish()?; /// /// assert_eq!(buffer.as_slice(), " .\n".as_bytes()); /// # Result::<_,Box>::Ok(()) /// ``` #[deprecated(note = "Use RdfSerializer instead")] pub struct GraphSerializer { inner: RdfSerializer, } impl GraphSerializer { /// Builds a serializer for the given format #[inline] pub fn from_format(format: GraphFormat) -> Self { Self { inner: RdfSerializer::from_format(format.into()), } } /// Returns a [`TripleWriter`] allowing writing triples into the given [`Write`] implementation pub fn triple_writer(&self, writer: W) -> TripleWriter { TripleWriter { writer: self.inner.serialize_to_write(writer), } } } /// Allows writing triples. /// Could be built using a [`GraphSerializer`]. /// /// Warning: Do not forget to run the [`finish`](TripleWriter::finish()) method to properly write the last bytes of the file. /// /// ``` /// use oxigraph::io::{GraphFormat, GraphSerializer}; /// use oxigraph::model::*; /// /// let mut buffer = Vec::new(); /// let mut writer = GraphSerializer::from_format(GraphFormat::NTriples).triple_writer(&mut buffer); /// writer.write(&Triple { /// subject: NamedNode::new("http://example.com/s")?.into(), /// predicate: NamedNode::new("http://example.com/p")?, /// object: NamedNode::new("http://example.com/o")?.into() /// })?; /// writer.finish()?; /// /// assert_eq!(buffer.as_slice(), " .\n".as_bytes()); /// # Result::<_,Box>::Ok(()) /// ``` #[must_use] pub struct TripleWriter { writer: ToWriteQuadWriter, } impl TripleWriter { /// Writes a triple pub fn write<'a>(&mut self, triple: impl Into>) -> io::Result<()> { self.writer.write_triple(triple) } /// Writes the last bytes of the file pub fn finish(self) -> io::Result<()> { self.writer.finish() } } /// A serializer for RDF graph serialization formats. /// /// It currently supports the following formats: /// * [N-Quads](https://www.w3.org/TR/n-quads/) ([`DatasetFormat::NQuads`]) /// * [TriG](https://www.w3.org/TR/trig/) ([`DatasetFormat::TriG`]) /// /// ``` /// use oxigraph::io::{DatasetFormat, DatasetSerializer}; /// use oxigraph::model::*; /// /// let mut buffer = Vec::new(); /// let mut writer = DatasetSerializer::from_format(DatasetFormat::NQuads).quad_writer(&mut buffer); /// writer.write(&Quad { /// subject: NamedNode::new("http://example.com/s")?.into(), /// predicate: NamedNode::new("http://example.com/p")?, /// object: NamedNode::new("http://example.com/o")?.into(), /// graph_name: NamedNode::new("http://example.com/g")?.into(), /// })?; /// writer.finish()?; /// /// assert_eq!(buffer.as_slice(), " .\n".as_bytes()); /// # Result::<_,Box>::Ok(()) /// ``` #[deprecated(note = "Use RdfSerializer instead")] pub struct DatasetSerializer { inner: RdfSerializer, } impl DatasetSerializer { /// Builds a serializer for the given format #[inline] pub fn from_format(format: DatasetFormat) -> Self { Self { inner: RdfSerializer::from_format(format.into()), } } /// Returns a [`QuadWriter`] allowing writing triples into the given [`Write`] implementation pub fn quad_writer(&self, writer: W) -> QuadWriter { QuadWriter { writer: self.inner.serialize_to_write(writer), } } } /// Allows writing triples. /// Could be built using a [`DatasetSerializer`]. /// /// Warning: Do not forget to run the [`finish`](QuadWriter::finish()) method to properly write the last bytes of the file. /// /// ``` /// use oxigraph::io::{DatasetFormat, DatasetSerializer}; /// use oxigraph::model::*; /// /// let mut buffer = Vec::new(); /// let mut writer = DatasetSerializer::from_format(DatasetFormat::NQuads).quad_writer(&mut buffer); /// writer.write(&Quad { /// subject: NamedNode::new("http://example.com/s")?.into(), /// predicate: NamedNode::new("http://example.com/p")?, /// object: NamedNode::new("http://example.com/o")?.into(), /// graph_name: NamedNode::new("http://example.com/g")?.into(), /// })?; /// writer.finish()?; /// /// assert_eq!(buffer.as_slice(), " .\n".as_bytes()); /// # Result::<_,Box>::Ok(()) /// ``` #[must_use] pub struct QuadWriter { writer: ToWriteQuadWriter, } impl QuadWriter { /// Writes a quad pub fn write<'a>(&mut self, quad: impl Into>) -> io::Result<()> { self.writer.write_quad(quad) } /// Writes the last bytes of the file pub fn finish(self) -> io::Result<()> { self.writer.finish() } }