aboutsummaryrefslogtreecommitdiff
path: root/src/bun.js/bindings/bindings.zig
diff options
context:
space:
mode:
Diffstat (limited to 'src/bun.js/bindings/bindings.zig')
-rw-r--r--src/bun.js/bindings/bindings.zig17
1 files changed, 17 insertions, 0 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);