notedown_ast 0.14.5

Notedown Abstract Syntax Tree
Documentation
use crate::{nodes::Value, NoteError};
use std::convert::TryFrom;

macro_rules! from_value {
    ($source:tt => $target:ty) => {
        impl TryFrom<Value> for $target {
            type Error = NoteError;

            fn try_from(value: Value) -> Result<Self, Self::Error> {
                match value {
                    Value::$source(v) => Ok(Self::try_from(v)?),
                    _ => Err(NoteError::unreachable()),
                }
            }
        }
    };
    ($($source:tt => $target:ty),+ $(,)?) => (
        $(from_value!($source=> $target);)+
    );
}

from_value! [
    Boolean => bool,
    Decimal => f64,
    Integer => u8,
    Integer => u16,
    Integer => u32,
    Integer => u64,
    Integer => u128,
    Integer => usize,
    Integer => i8,
    Integer => i16,
    Integer => i32,
    Integer => i64,
    Integer => i128,
    Integer => isize,
    String => String,
];