pub const SOURCE_TOO_LONG: u16 = 1;
pub const EXPECTED_EQUALS: u16 = 2;
pub const EMPTY_ID: u16 = 3;
pub const EMPTY_ID_PART: u16 = 4;
pub const UNTERMINATED_SECTION: u16 = 5;
pub const TRAILING_AFTER_SECTION: u16 = 6;
pub const UNEXPECTED_FRONTMATTER: u16 = 7;
pub const STRAY_CONTINUATION: u16 = 8;
pub const INVALID_ESCAPE: u16 = 9;
pub const DANGLING_LINE_BREAK: u16 = 10;
pub const RAW_CONTROL: u16 = 11;
pub const RAW_LINE_SEPARATOR: u16 = 12;
pub const EXPECTED_PROPERTY_NAME: u16 = 13;
pub const DETACHED_PROPERTY: u16 = 14;
pub const ID_LIKE_FRONTMATTER: u16 = 15;
pub const BAD_HEX_ESCAPE: u16 = 16;
pub const UNESCAPED_ID_CHAR: u16 = 17;
pub fn message(code: u16) -> &'static str {
match code {
SOURCE_TOO_LONG => "the source is longer than u32::MAX bytes",
EXPECTED_EQUALS => "an entry needs `=` between its id and its value",
EMPTY_ID => "an id is empty",
EMPTY_ID_PART => "an id has an empty part",
UNTERMINATED_SECTION => "a section head is missing its `]`",
TRAILING_AFTER_SECTION => "nothing may follow a section head's `]`",
UNEXPECTED_FRONTMATTER => {
"the frontmatter separator `---` may appear only once, before any entry"
}
STRAY_CONTINUATION => "an indented line continues nothing",
INVALID_ESCAPE => "`\\` is followed by a character that is not an escape",
DANGLING_LINE_BREAK => "an escaped line break is not followed by a continuation line",
RAW_CONTROL => "a control character must be escaped",
RAW_LINE_SEPARATOR => "U+2028 and U+2029 must be escaped",
EXPECTED_PROPERTY_NAME => "a property needs a name after `@`",
DETACHED_PROPERTY => "a property is cut off from what it describes by an empty line",
ID_LIKE_FRONTMATTER => "an id may not look like the frontmatter separator `---`",
BAD_HEX_ESCAPE => "a hex escape is not a Unicode scalar value",
UNESCAPED_ID_CHAR => "an id part needs `\\` before this character",
_ => "a resource syntax error",
}
}
pub const ALL: [u16; 17] = [
SOURCE_TOO_LONG,
EXPECTED_EQUALS,
EMPTY_ID,
EMPTY_ID_PART,
UNTERMINATED_SECTION,
TRAILING_AFTER_SECTION,
UNEXPECTED_FRONTMATTER,
STRAY_CONTINUATION,
INVALID_ESCAPE,
DANGLING_LINE_BREAK,
RAW_CONTROL,
RAW_LINE_SEPARATOR,
EXPECTED_PROPERTY_NAME,
DETACHED_PROPERTY,
ID_LIKE_FRONTMATTER,
BAD_HEX_ESCAPE,
UNESCAPED_ID_CHAR,
];