viewport-lib-io 0.1.0

File format loaders and exporters for viewport-lib
Documentation
use crate::error::IoError;

use vtkio::Error as VtkError;
use vtkio::model::Error as VtkModelError;

#[derive(thiserror::Error, Debug)]
pub enum ReadError {
    #[error("IO error: {0}")]
    Io(#[from] std::io::Error),
    #[error("VTK parse error: {0}")]
    Parse(#[from] VtkError),
    #[error("VTK model error: {0}")]
    Model(#[from] VtkModelError),
    #[error("Unsupported format: {0}")]
    UnsupportedFormat(String),
    #[error("Empty dataset")]
    Empty,
    #[error("PVD parse error: {0}")]
    Pvd(String),
    #[error("XDMF parse error: {0}")]
    Xdmf(String),
    #[error("HDF5 error: {0}")]
    Hdf5(String),
    #[error("OpenFOAM parse error: {0}")]
    OpenFoam(String),
    #[error("CGNS parse error: {0}")]
    Cgns(String),
    #[error("Exodus II parse error: {0}")]
    Exodus(String),
    #[error("EnSight parse error: {0}")]
    EnSight(String),
    #[error("Tecplot parse error: {0}")]
    Tecplot(String),
    #[error("NetCDF parse error: {0}")]
    NetCdf(String),
    #[error("CSV parse error: {0}")]
    Csv(String),
    #[error("Geometry parse error: {0}")]
    Geometry(String),
    #[error("Raw manifest parse error: {0}")]
    Raw(String),
}

impl From<ReadError> for IoError {
    fn from(value: ReadError) -> Self {
        match value {
            ReadError::Io(error) => IoError::Io(error),
            ReadError::UnsupportedFormat(message) => IoError::UnsupportedFormat(message),
            ReadError::Empty => IoError::Parse("empty dataset".to_string()),
            other => IoError::Parse(other.to_string()),
        }
    }
}