use core::fmt;
use std::ops::Range;
#[derive(Debug, Copy, Clone)]
pub enum StringStandard {
Trivet,
Rust,
JSON,
TOML,
C,
Python,
}
impl fmt::Display for StringStandard {
fn fmt(&self, form: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::C => write!(form, "C"),
Self::JSON => write!(form, "JSON"),
Self::TOML => write!(form, "TOML"),
Self::Python => write!(form, "Python"),
Self::Rust => write!(form, "Rust"),
Self::Trivet => write!(form, "Trivet"),
}
}
}
#[derive(Clone)]
pub enum UnknownEscapeProtocol {
Discard,
DropEscape,
LiteralEscape,
ReplacementCharacter,
Replace(char),
Error,
}
#[derive(Clone)]
pub enum IllegalUnicodeProtocol {
Discard,
Error,
ReplacementCharacter,
Replace(char),
}
#[derive(Clone, Copy)]
pub enum EscapeType {
Char(char),
NakedASCII,
NakedByte,
NakedU4,
NakedU8,
BraceU16,
BraceU18,
BracketUNamed,
Discard,
DiscardWS,
Undefined,
}
pub enum EncodingStandard {
OnlyControl,
ASCII,
EncodeAbove(u32),
EncodeRanges(Vec<Range<u32>>),
}
pub enum EncodingMethod {
Naked4,
Naked48,
Braced6,
Braced8,
Naked2,
}
#[cfg(not(feature = "no_ucd"))]
pub const TRIVET_ESCAPES: [(char, EscapeType); 16] = [
('\n', EscapeType::Discard),
('\\', EscapeType::Char('\\')),
('\'', EscapeType::Char('\'')),
('\"', EscapeType::Char('\"')),
('a', EscapeType::Char('\x07')),
('b', EscapeType::Char('\x08')),
('e', EscapeType::Char('\x1b')),
('f', EscapeType::Char('\x0c')),
('n', EscapeType::Char('\n')),
('r', EscapeType::Char('\r')),
('t', EscapeType::Char('\t')),
('v', EscapeType::Char('\x0b')),
('x', EscapeType::NakedByte),
('u', EscapeType::BraceU18),
('N', EscapeType::BracketUNamed),
('?', EscapeType::Char('?')),
];
#[cfg(feature = "no_ucd")]
pub const TRIVET_ESCAPES: [(char, EscapeType); 15] = [
('\n', EscapeType::Discard),
('\\', EscapeType::Char('\\')),
('\'', EscapeType::Char('\'')),
('\"', EscapeType::Char('\"')),
('a', EscapeType::Char('\x07')),
('b', EscapeType::Char('\x08')),
('e', EscapeType::Char('\x1b')),
('f', EscapeType::Char('\x0c')),
('n', EscapeType::Char('\n')),
('r', EscapeType::Char('\r')),
('t', EscapeType::Char('\t')),
('v', EscapeType::Char('\x0b')),
('x', EscapeType::NakedByte),
('u', EscapeType::BraceU18),
('?', EscapeType::Char('?')),
];
pub const C_ESCAPES: [(char, EscapeType); 16] = [
('\n', EscapeType::Discard),
('\\', EscapeType::Char('\\')),
('\'', EscapeType::Char('\'')),
('\"', EscapeType::Char('\"')),
('a', EscapeType::Char('\x07')),
('b', EscapeType::Char('\x08')),
('e', EscapeType::Char('\x1b')),
('f', EscapeType::Char('\x0c')),
('n', EscapeType::Char('\n')),
('r', EscapeType::Char('\r')),
('t', EscapeType::Char('\t')),
('v', EscapeType::Char('\x0b')),
('x', EscapeType::NakedByte),
('u', EscapeType::NakedU4),
('U', EscapeType::NakedU8),
('?', EscapeType::Char('?')),
];
#[cfg(not(feature = "no_ucd"))]
pub const PYTHON_ESCAPES: [(char, EscapeType); 15] = [
('\n', EscapeType::Discard),
('\\', EscapeType::Char('\\')),
('\'', EscapeType::Char('\'')),
('\"', EscapeType::Char('\"')),
('a', EscapeType::Char('\x07')),
('b', EscapeType::Char('\x08')),
('f', EscapeType::Char('\x0c')),
('n', EscapeType::Char('\n')),
('r', EscapeType::Char('\r')),
('t', EscapeType::Char('\t')),
('v', EscapeType::Char('\x0b')),
('x', EscapeType::NakedByte),
('N', EscapeType::BracketUNamed),
('u', EscapeType::NakedU4),
('U', EscapeType::NakedU8),
];
#[cfg(feature = "no_ucd")]
pub const PYTHON_ESCAPES: [(char, EscapeType); 14] = [
('\n', EscapeType::Discard),
('\\', EscapeType::Char('\\')),
('\'', EscapeType::Char('\'')),
('\"', EscapeType::Char('\"')),
('a', EscapeType::Char('\x07')),
('b', EscapeType::Char('\x08')),
('f', EscapeType::Char('\x0c')),
('n', EscapeType::Char('\n')),
('r', EscapeType::Char('\r')),
('t', EscapeType::Char('\t')),
('v', EscapeType::Char('\x0b')),
('x', EscapeType::NakedByte),
('u', EscapeType::NakedU4),
('U', EscapeType::NakedU8),
];
pub const RUST_ESCAPES: [(char, EscapeType); 10] = [
('\n', EscapeType::DiscardWS),
('\\', EscapeType::Char('\\')),
('\'', EscapeType::Char('\'')),
('\"', EscapeType::Char('\"')),
('0', EscapeType::Char('\0')),
('n', EscapeType::Char('\n')),
('r', EscapeType::Char('\r')),
('t', EscapeType::Char('\t')),
('x', EscapeType::NakedASCII),
('u', EscapeType::BraceU16),
];
pub const JSON_ESCAPES: [(char, EscapeType); 10] = [
('\"', EscapeType::Char('\"')),
('\\', EscapeType::Char('\\')),
('\n', EscapeType::Discard),
('/', EscapeType::Char('/')),
('b', EscapeType::Char('\x08')),
('f', EscapeType::Char('\x0c')),
('n', EscapeType::Char('\n')),
('r', EscapeType::Char('\r')),
('t', EscapeType::Char('\t')),
('u', EscapeType::NakedU4),
];
pub const TOML_ESCAPES: [(char, EscapeType); 10] = [
('\"', EscapeType::Char('\"')),
('\\', EscapeType::Char('\\')),
('\n', EscapeType::DiscardWS),
('b', EscapeType::Char('\x08')),
('f', EscapeType::Char('\x0c')),
('n', EscapeType::Char('\n')),
('r', EscapeType::Char('\r')),
('t', EscapeType::Char('\t')),
('u', EscapeType::NakedU4),
('U', EscapeType::NakedU8),
];