tptp 0.31.1

Parse the TPTP format
Documentation
use alloc::fmt;
use alloc::format;
use insta::{assert_debug_snapshot, assert_display_snapshot};

use crate::{Parse, Result};

fn check_parse<'a, P, T: 'a>(parser: P, input: &'a [u8]) -> T
where
    P: FnOnce(&'a [u8]) -> Result<T, ()>,
{
    match parser(input) {
        Ok((b"\0", result)) => result,
        Ok((_, _)) => panic!("parsed, but bytes remaining"),
        Err(_) => panic!("parse error"),
    }
}

pub(crate) fn parse_unit<'a, P, T: 'a>(parser: P, input: &'a [u8])
where
    P: FnOnce(&'a [u8]) -> Result<T, ()>,
{
    check_parse(parser, input);
}

pub(crate) fn parse<'a, T: 'a>(input: &'a [u8])
where
    T: Parse<'a, ()> + fmt::Debug + fmt::Display,
{
    let parsed = check_parse(T::parse, input);
    assert_debug_snapshot!(parsed);
    assert_display_snapshot!(parsed);
}

pub(crate) fn check_size<T>() {
    assert!(core::mem::size_of::<T>() <= 64);
}