zig-zyrup/src/utf8_string.zig

40 lines
973 B
Zig

const std = @import("std");
const testing = std.testing;
const Serializer = @import("ser.zig");
const Self = @This();
bytes: []const u8,
pub const Error = error{InvalidEncoding};
pub fn init(bytes: []const u8) Error!@This() {
if (!std.unicode.utf8ValidateSlice(bytes)) {
return error.InvalidEncoding;
}
return initAssumeEncoding(bytes);
}
pub fn initAssumeEncoding(bytes: []const u8) @This() {
return .{
.bytes = bytes,
};
}
pub const @"getty.sb" = struct {
pub fn serialize(
_: ?std.mem.Allocator,
value: anytype,
serializer: anytype,
) @TypeOf(serializer).Error!@TypeOf(serializer).Ok {
if (@TypeOf(serializer.context) == Serializer and @TypeOf(value) == Self) {
try Serializer.serializeGenericString("\"", serializer.context.writer, value.bytes);
}
}
};
test "test invalid utf8" {
try testing.expectError(Self.Error.InvalidEncoding, Self.init("abc\xc0"));
}