use const_format::concatcp;
pub use self::error::ParseError;
pub use self::generator::FmtOptions;
pub use self::generator::FmtRepr;
pub use self::parser::ParseRepr;
pub use self::parser::parse;
_____!();
pub(crate) use self::generator::impl_display_debug_for_fmt_repr;
_____!();
use derive_more::IsVariant;
pub(crate) const LIST_LEFT: char = '[';
pub(crate) const LIST_RIGHT: char = ']';
pub(crate) const MAP_LEFT: char = '{';
pub(crate) const MAP_RIGHT: char = '}';
pub(crate) const SCOPE_LEFT: char = '(';
pub(crate) const SCOPE_RIGHT: char = ')';
pub(crate) const SPACE: char = ' ';
pub(crate) const SEPARATOR: char = ',';
pub(crate) const TEXT_QUOTE: char = '"';
pub(crate) const KEY_QUOTE: char = '\'';
pub(crate) const EMPTY: &str = concatcp!(EMPTY_CHAR);
pub(crate) const EMPTY_CHAR: char = '_';
pub(crate) const UNIT: &str = ".";
pub(crate) const PAIR: &str = ":";
pub(crate) const SOLVE: &str = "?";
pub(crate) const TRUE: &str = "true";
pub(crate) const FALSE: &str = "false";
pub(crate) const COMMENT: &str = "!";
pub(crate) const LEFT: &str = "<";
pub(crate) const RIGHT: &str = ">";
pub(crate) const TOKEN: &str = "#";
pub(crate) const INT: &str = "integer";
pub(crate) const DECIMAL: &str = "decimal";
pub(crate) const BYTE: &str = "byte";
pub(crate) fn is_delimiter(c: char) -> bool {
matches!(
c,
SPACE
| SEPARATOR
| LIST_LEFT
| LIST_RIGHT
| MAP_LEFT
| MAP_RIGHT
| SCOPE_LEFT
| SCOPE_RIGHT
| TEXT_QUOTE
| KEY_QUOTE
)
}
pub(crate) fn keyword(s: &str) -> bool {
matches!(s, EMPTY | UNIT | PAIR | SOLVE | TRUE | FALSE)
}
#[derive(Default, Copy, Clone, PartialEq, Eq, IsVariant)]
pub enum Direction {
Left,
#[default]
Right,
}
#[derive(Copy, Clone, IsVariant)]
pub enum ReprType {
Unit,
Bit,
Key,
Text,
Int,
Decimal,
Byte,
Cell,
Pair,
List,
Map,
Quote,
Call,
Solve,
Other,
}
pub mod repr;
mod parser;
mod generator;
mod error;