aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2023-01-19 21:00:53 -0800
committerGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2023-01-19 21:00:53 -0800
commitf993975ae6e94e367f30f66ddba9c69a693f8aa4 (patch)
tree88b36aaba0bb3a8c792ab6e974dd4f3ec0deef29
parent53f7bd32d8872d4a4def120b67ddf180bb0c23b0 (diff)
downloadbun-f993975ae6e94e367f30f66ddba9c69a693f8aa4.tar.gz
bun-f993975ae6e94e367f30f66ddba9c69a693f8aa4.tar.zst
bun-f993975ae6e94e367f30f66ddba9c69a693f8aa4.zip
make this code easier to read
-rw-r--r--src/bun.js/bindings/bindings.zig17
-rw-r--r--src/bun.js/node/types.zig30
-rw-r--r--src/bun.js/webcore/encoding.zig8
3 files changed, 26 insertions, 29 deletions
diff --git a/src/bun.js/bindings/bindings.zig b/src/bun.js/bindings/bindings.zig
index a7bede295..49e0fad23 100644
--- a/src/bun.js/bindings/bindings.zig
+++ b/src/bun.js/bindings/bindings.zig
@@ -91,6 +91,23 @@ pub const ZigString = extern struct {
ptr: [*]const u8,
len: usize,
+ pub const ByteString = union(enum) {
+ latin1: []const u8,
+ utf16: []const u16,
+ };
+
+ pub inline fn as(this: ZigString) ByteString {
+ return if (this.is16Bit()) .{ .utf16 = this.utf16SliceAligned() } else .{ .latin1 = this.slice() };
+ }
+
+ pub fn encode(this: ZigString, encoding: JSC.Node.Encoding) []u8 {
+ return switch (this.as()) {
+ inline else => |repr| switch (encoding) {
+ inline else => |enc| JSC.WebCore.Encoder.constructFrom(std.meta.Child(@TypeOf(repr)), repr, enc),
+ },
+ };
+ }
+
/// This function is not optimized!
pub fn eqlCaseInsensitive(this: ZigString, other: ZigString) bool {
var fallback = std.heap.stackFallback(1024, bun.default_allocator);
diff --git a/src/bun.js/node/types.zig b/src/bun.js/node/types.zig
index 33f6492e7..d25023eb4 100644
--- a/src/bun.js/node/types.zig
+++ b/src/bun.js/node/types.zig
@@ -417,35 +417,7 @@ pub const SliceOrBuffer = union(Tag) {
return fromJS(global, allocator, value);
}
- const out = brk: {
- if (!zig_str.is16Bit()) {
- const buf = zig_str.slice();
- break :brk switch (encoding) {
- Encoding.utf8 => JSC.WebCore.Encoder.constructFromU8(buf.ptr, buf.len, .utf8),
- Encoding.ucs2 => JSC.WebCore.Encoder.constructFromU8(buf.ptr, buf.len, .ucs2),
- Encoding.utf16le => JSC.WebCore.Encoder.constructFromU8(buf.ptr, buf.len, .utf16le),
- Encoding.latin1 => JSC.WebCore.Encoder.constructFromU8(buf.ptr, buf.len, .latin1),
- Encoding.ascii => JSC.WebCore.Encoder.constructFromU8(buf.ptr, buf.len, .ascii),
- Encoding.base64 => JSC.WebCore.Encoder.constructFromU8(buf.ptr, buf.len, .base64),
- Encoding.hex => JSC.WebCore.Encoder.constructFromU8(buf.ptr, buf.len, .hex),
- Encoding.buffer => JSC.WebCore.Encoder.constructFromU8(buf.ptr, buf.len, .buffer),
- Encoding.base64url => JSC.WebCore.Encoder.constructFromU8(buf.ptr, buf.len, .base64url),
- };
- } else {
- const buf = zig_str.utf16SliceAligned();
- break :brk switch (encoding) {
- Encoding.utf8 => JSC.WebCore.Encoder.constructFromU16(buf.ptr, buf.len, .utf8),
- Encoding.ucs2 => JSC.WebCore.Encoder.constructFromU16(buf.ptr, buf.len, .ucs2),
- Encoding.utf16le => JSC.WebCore.Encoder.constructFromU16(buf.ptr, buf.len, .utf16le),
- Encoding.latin1 => JSC.WebCore.Encoder.constructFromU16(buf.ptr, buf.len, .latin1),
- Encoding.ascii => JSC.WebCore.Encoder.constructFromU16(buf.ptr, buf.len, .ascii),
- Encoding.base64 => JSC.WebCore.Encoder.constructFromU16(buf.ptr, buf.len, .base64),
- Encoding.hex => JSC.WebCore.Encoder.constructFromU16(buf.ptr, buf.len, .hex),
- Encoding.buffer => JSC.WebCore.Encoder.constructFromU16(buf.ptr, buf.len, .buffer),
- Encoding.base64url => JSC.WebCore.Encoder.constructFromU16(buf.ptr, buf.len, .base64url),
- };
- }
- };
+ const out = zig_str.encode(encoding);
return .{ .string = JSC.ZigString.Slice.from(out, allocator) };
}
diff --git a/src/bun.js/webcore/encoding.zig b/src/bun.js/webcore/encoding.zig
index dda9c0bc4..f39a082d8 100644
--- a/src/bun.js/webcore/encoding.zig
+++ b/src/bun.js/webcore/encoding.zig
@@ -1064,6 +1064,14 @@ pub const Encoder = struct {
}
}
+ pub fn constructFrom(comptime T: type, input: []const T, comptime encoding: JSC.Node.Encoding) []u8 {
+ return switch (comptime T) {
+ u16 => constructFromU16(input.ptr, input.len, encoding),
+ u8 => constructFromU8(input.ptr, input.len, encoding),
+ else => @compileError("Unsupported type for constructFrom: " ++ @typeName(T)),
+ };
+ }
+
pub fn constructFromU8(input: [*]const u8, len: usize, comptime encoding: JSC.Node.Encoding) []u8 {
if (len == 0)
return &[_]u8{};