shapes_converter 0.1.1

RDF data shapes implementation in Rust
Documentation
use std::{
    fs, io,
    path::{Path, PathBuf},
};

use serde::{Deserialize, Serialize};
use thiserror::Error;

#[derive(Serialize, Deserialize, PartialEq, Debug)]
pub struct ShEx2HtmlConfig {
    landing_page_name: String,
    pub title: String,
    pub target_folder: PathBuf,
}

impl Default for ShEx2HtmlConfig {
    fn default() -> Self {
        Self {
            title: "Generated shapes".to_string(),
            landing_page_name: "index.html".to_string(),
            target_folder: PathBuf::new(),
        }
    }
}

impl ShEx2HtmlConfig {
    pub fn with_target_folder<P: AsRef<Path>>(mut self, target_folder: P) -> Self {
        self.target_folder = target_folder.as_ref().to_path_buf();
        self
    }

    pub fn landing_page(&self) -> PathBuf {
        self.target_folder
            .as_path()
            .join(self.landing_page_name.as_str())
    }

    pub fn from_file(file_name: &str) -> Result<ShEx2HtmlConfig, ShEx2HtmlConfigError> {
        let config_str = fs::read_to_string(file_name).map_err(|e| {
            ShEx2HtmlConfigError::ReadingConfigError {
                path_name: file_name.to_string(),
                error: e,
            }
        })?;
        serde_yaml::from_str::<ShEx2HtmlConfig>(&config_str).map_err(|e| {
            ShEx2HtmlConfigError::YamlError {
                path_name: file_name.to_string(),
                error: e,
            }
        })
    }
}

#[derive(Error, Debug)]
pub enum ShEx2HtmlConfigError {
    #[error("Reading path {path_name:?} error: {error:?}")]
    ReadingConfigError { path_name: String, error: io::Error },

    #[error("Reading YAML from {path_name:?}. Error: {error:?}")]
    YamlError {
        path_name: String,
        error: serde_yaml::Error,
    },
}