sexprs-parser 0.0.5

sexprs is a minimal lisp dialect to evaluate written in Rust.
Documentation
use std::borrow::Cow;

use crate::{Source, Span, SpanPosition};

#[macro_export]
macro_rules! assert_parsed_display {
    ($code:literal) => {{
        use sexprs_parser::parse_source;

        let value = match parse_source($code) {
            Ok(value) => value,
            Err(error) => {
                eprintln!(
                    "{}",
                    [
                        format!("when parsing:"),
                        $code.to_string(),
                        format!("error: {}", error)
                    ]
                    .join("\n")
                );
                std::process::exit(101);
            },
        };
        let code = value.to_string();
        k9::assert_equal!(code, $code);
    }};
}

pub fn stub_span_info<'a>(
    input: &'a str,
    start_pos: (usize, usize),
    end_pos: (usize, usize),
) -> Span<'a> {
    let span_info = Span {
        source: Source {
            source: Cow::from(input),
            filename: None,
        },
        name: None,
        input: Cow::from(input),
        start_pos: SpanPosition::from_tuple(start_pos),
        end_pos: SpanPosition::from_tuple(end_pos),
        inner: None,
    };
    span_info
}
pub fn stub_input<'a>(input: &'a str) -> (String, Span<'a>) {
    let span_info = stub_span_info(input, (1, 1), (1, input.len() + 1));
    (input.to_string(), span_info)
}