range_checker 0.1.0

derive-macro crate aimed to provide declarative bounds checking and filtering for structure.
Documentation
pub use range_checker_macro::Check;
pub use range_checker_macro::CheckVerbose;

use thiserror::Error;

#[derive(Error, Debug)]
pub enum Error {
    #[error("check failed! check_statement: {check_statement}, failed value: {ident} = {value}")]
    CheckFailed {
        ident: String,
        value: String,
        check_statement: String,
    },
    #[error("fallback success! check_statement: {check_statement}, failed value: {ident} = {value}, fallback to: {fallback}")]
    Fallback {
        ident: String,
        value: String,
        check_statement: String,
        fallback: String,
    },
}

pub trait Check {
    fn check(&self) -> Result<(), ()>;
    fn check_with_fallback(&mut self) -> Result<(), ()>;
}

pub trait CheckVerbose {
    fn check(&self) -> Result<(), Vec<Error>>;
    fn check_with_fallback(&mut self) ->  Result<Vec<Error>, Vec<Error>>;
}