40 lines
973 B
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"));
|
|
}
|