aldrin-parser 0.4.0

Aldrin schema parser library.
Documentation
use crate::issues::Issues;
use crate::{Error, Schema, Warning};
use std::collections::HashMap;
use std::path::PathBuf;

pub(crate) struct Validate<'a> {
    schema_name: &'a str,
    issues: &'a mut Issues,
    schemas: &'a HashMap<String, Schema>,
    is_main_schema: bool,
    schema_paths: &'a [PathBuf],
}

impl<'a> Validate<'a> {
    pub fn new(
        schema_name: &'a str,
        issues: &'a mut Issues,
        schemas: &'a HashMap<String, Schema>,
        is_main_schema: bool,
        schema_paths: &'a [PathBuf],
    ) -> Self {
        Validate {
            schema_name,
            issues,
            schemas,
            is_main_schema,
            schema_paths,
        }
    }

    pub fn schema_name(&self) -> &'a str {
        self.schema_name
    }

    pub fn add_error<E>(&mut self, e: E)
    where
        E: Into<Error>,
    {
        self.issues.add_error(e);
    }

    pub fn add_warning<W>(&mut self, w: W)
    where
        W: Into<Warning>,
    {
        if self.is_main_schema {
            self.issues.add_warning(w);
        } else {
            self.issues.add_other_warning(w);
        }
    }

    pub fn get_schema(&self, schema_name: &str) -> Option<&'a Schema> {
        self.schemas.get(schema_name)
    }

    pub fn get_current_schema(&self) -> &'a Schema {
        self.get_schema(self.schema_name).unwrap()
    }

    pub fn schema_paths(&self) -> &'a [PathBuf] {
        self.schema_paths
    }
}