union Error [src]
Fields
invalid_escape_character: usizeThe character after backslash is missing or not recognized.
expected_hex_digit: usizeExpected hex digit at this index.
empty_unicode_escape_sequence: usizeUnicode escape sequence had no digits with rbrace at this index.
expected_hex_digit_or_rbrace: usizeExpected hex digit or '}' at this index.
invalid_unicode_codepoint: usizeInvalid unicode codepoint at this index.
expected_lbrace: usizeExpected '{' at this index.
expected_rbrace: usizeExpected '}' at this index.
expected_single_quote: usizeExpected ''' at this index.
invalid_character: usizeThe character at this index cannot be represented without an escape sequence.
empty_char_literal''. Not returned for string literals.
Members
Source
pub const Error = union(enum) {
/// The character after backslash is missing or not recognized.
invalid_escape_character: usize,
/// Expected hex digit at this index.
expected_hex_digit: usize,
/// Unicode escape sequence had no digits with rbrace at this index.
empty_unicode_escape_sequence: usize,
/// Expected hex digit or '}' at this index.
expected_hex_digit_or_rbrace: usize,
/// Invalid unicode codepoint at this index.
invalid_unicode_codepoint: usize,
/// Expected '{' at this index.
expected_lbrace: usize,
/// Expected '}' at this index.
expected_rbrace: usize,
/// Expected '\'' at this index.
expected_single_quote: usize,
/// The character at this index cannot be represented without an escape sequence.
invalid_character: usize,
/// `''`. Not returned for string literals.
empty_char_literal,
const FormatMessage = struct {
err: Error,
raw_string: []const u8,
};
fn formatMessage(
self: FormatMessage,
comptime f: []const u8,
options: std.fmt.FormatOptions,
writer: anytype,
) !void {
_ = f;
_ = options;
switch (self.err) {
.invalid_escape_character => |bad_index| try writer.print(
"invalid escape character: '{c}'",
.{self.raw_string[bad_index]},
),
.expected_hex_digit => |bad_index| try writer.print(
"expected hex digit, found '{c}'",
.{self.raw_string[bad_index]},
),
.empty_unicode_escape_sequence => try writer.writeAll(
"empty unicode escape sequence",
),
.expected_hex_digit_or_rbrace => |bad_index| try writer.print(
"expected hex digit or '}}', found '{c}'",
.{self.raw_string[bad_index]},
),
.invalid_unicode_codepoint => try writer.writeAll(
"unicode escape does not correspond to a valid unicode scalar value",
),
.expected_lbrace => |bad_index| try writer.print(
"expected '{{', found '{c}'",
.{self.raw_string[bad_index]},
),
.expected_rbrace => |bad_index| try writer.print(
"expected '}}', found '{c}'",
.{self.raw_string[bad_index]},
),
.expected_single_quote => |bad_index| try writer.print(
"expected single quote ('), found '{c}'",
.{self.raw_string[bad_index]},
),
.invalid_character => |bad_index| try writer.print(
"invalid byte in string or character literal: '{c}'",
.{self.raw_string[bad_index]},
),
.empty_char_literal => try writer.writeAll(
"empty character literal",
),
}
}
pub fn fmt(self: @This(), raw_string: []const u8) std.fmt.Formatter(formatMessage) {
return .{ .data = .{
.err = self,
.raw_string = raw_string,
} };
}
pub fn offset(err: Error) usize {
return switch (err) {
inline .invalid_escape_character,
.expected_hex_digit,
.empty_unicode_escape_sequence,
.expected_hex_digit_or_rbrace,
.invalid_unicode_codepoint,
.expected_lbrace,
.expected_rbrace,
.expected_single_quote,
.invalid_character,
=> |n| n,
.empty_char_literal => 0,
};
}
}