Trait FileFormat

Source
pub trait FileFormat<T> {
    type FormatError: Error;

    // Required methods
    fn from_reader<R: Read>(&self, reader: R) -> Result<T, Self::FormatError>;
    fn to_writer<W: Write>(
        &self,
        writer: W,
        value: &T,
    ) -> Result<(), Self::FormatError>;

    // Provided methods
    fn from_reader_buffered<R: Read>(
        &self,
        reader: R,
    ) -> Result<T, Self::FormatError> { ... }
    fn from_buffer(&self, buf: &[u8]) -> Result<T, Self::FormatError> { ... }
    fn to_writer_buffered<W: Write>(
        &self,
        writer: W,
        value: &T,
    ) -> Result<(), Self::FormatError> { ... }
    fn to_buffer(&self, value: &T) -> Result<Vec<u8>, Self::FormatError> { ... }
}
Expand description

A trait that describes how a file’s contents should be interpreted.

Usually, you will want to implement a simple wrapper over your file format’s to_writer and from_reader functions, using your favorite serialization framework.

§Example

struct Json;

impl<T> FileFormat<T> for Json
where T: Serialize + DeserializeOwned {
  type FormatError = serde_json::Error;

  fn to_writer<W: Write>(&self, writer: W, value: &T) -> Result<(), Self::FormatError> {
    serde_json::to_writer_pretty(writer, value).map_err(From::from)
  }

  fn from_reader<R: Read>(&self, reader: R) -> Result<T, Self::FormatError> {
    serde_json::from_reader(reader).map_err(From::from)
  }
}

Required Associated Types§

Source

type FormatError: Error

The type of error to return from to_writer and from_reader.

Required Methods§

Source

fn from_reader<R: Read>(&self, reader: R) -> Result<T, Self::FormatError>

Deserialize a value from a Read stream.

If you are reading directly from a File, you should consider using from_reader_buffered instead.

Source

fn to_writer<W: Write>( &self, writer: W, value: &T, ) -> Result<(), Self::FormatError>

Serialize a value into a Write stream.

If you are writing directly to a File, you should consider using to_writer_buffered instead.

Provided Methods§

Source

fn from_reader_buffered<R: Read>( &self, reader: R, ) -> Result<T, Self::FormatError>

Identical to FileFormat::from_reader, however the provided reader is buffered with BufReader.

You should override this function if your file format reads to a buffer internally in order to avoid double-buffering.

Source

fn from_buffer(&self, buf: &[u8]) -> Result<T, Self::FormatError>

Deserialize a value from a byte vec.

Source

fn to_writer_buffered<W: Write>( &self, writer: W, value: &T, ) -> Result<(), Self::FormatError>

Identical to FileFormat::to_writer, however the provided writer is buffered with BufWriter.

You should override this function if your file format writes to a buffer internally in order to avoid double-buffering.

Source

fn to_buffer(&self, value: &T) -> Result<Vec<u8>, Self::FormatError>

Serialize a value into a byte vec.

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementations on Foreign Types§

Source§

impl<T, Format: FileFormat<T>> FileFormat<T> for &Format

Source§

type FormatError = <Format as FileFormat<T>>::FormatError

Source§

fn from_reader_buffered<R: Read>( &self, reader: R, ) -> Result<T, Self::FormatError>

Source§

fn from_reader<R: Read>(&self, reader: R) -> Result<T, Self::FormatError>

Source§

fn to_writer<W: Write>( &self, writer: W, value: &T, ) -> Result<(), Self::FormatError>

Source§

fn to_writer_buffered<W: Write>( &self, writer: W, value: &T, ) -> Result<(), Self::FormatError>

Source§

fn to_buffer(&self, value: &T) -> Result<Vec<u8>, Self::FormatError>

Source§

impl<T, Format: FileFormat<T>> FileFormat<T> for Box<Format>

Source§

type FormatError = <Format as FileFormat<T>>::FormatError

Source§

fn from_reader_buffered<R: Read>( &self, reader: R, ) -> Result<T, Self::FormatError>

Source§

fn from_reader<R: Read>(&self, reader: R) -> Result<T, Self::FormatError>

Source§

fn to_writer<W: Write>( &self, writer: W, value: &T, ) -> Result<(), Self::FormatError>

Source§

fn to_writer_buffered<W: Write>( &self, writer: W, value: &T, ) -> Result<(), Self::FormatError>

Source§

fn to_buffer(&self, value: &T) -> Result<Vec<u8>, Self::FormatError>

Source§

impl<T, Format: FileFormat<T>> FileFormat<T> for Rc<Format>

Source§

type FormatError = <Format as FileFormat<T>>::FormatError

Source§

fn from_reader_buffered<R: Read>( &self, reader: R, ) -> Result<T, Self::FormatError>

Source§

fn from_reader<R: Read>(&self, reader: R) -> Result<T, Self::FormatError>

Source§

fn to_writer<W: Write>( &self, writer: W, value: &T, ) -> Result<(), Self::FormatError>

Source§

fn to_writer_buffered<W: Write>( &self, writer: W, value: &T, ) -> Result<(), Self::FormatError>

Source§

fn to_buffer(&self, value: &T) -> Result<Vec<u8>, Self::FormatError>

Source§

impl<T, Format: FileFormat<T>> FileFormat<T> for Arc<Format>

Source§

type FormatError = <Format as FileFormat<T>>::FormatError

Source§

fn from_reader_buffered<R: Read>( &self, reader: R, ) -> Result<T, Self::FormatError>

Source§

fn from_reader<R: Read>(&self, reader: R) -> Result<T, Self::FormatError>

Source§

fn to_writer<W: Write>( &self, writer: W, value: &T, ) -> Result<(), Self::FormatError>

Source§

fn to_writer_buffered<W: Write>( &self, writer: W, value: &T, ) -> Result<(), Self::FormatError>

Source§

fn to_buffer(&self, value: &T) -> Result<Vec<u8>, Self::FormatError>

Implementors§