diff --git a/src/browser/html/History.zig b/src/browser/html/History.zig
index f8be6bb3..b920d66d 100644
--- a/src/browser/html/History.zig
+++ b/src/browser/html/History.zig
@@ -33,22 +33,10 @@ const HistoryEntry = struct {
};
const ScrollRestorationMode = enum {
+ pub const ENUM_JS_USE_TAG = true;
+
auto,
manual,
-
- pub fn fromString(str: []const u8) ?ScrollRestorationMode {
- for (std.enums.values(ScrollRestorationMode)) |mode| {
- if (std.ascii.eqlIgnoreCase(str, @tagName(mode))) {
- return mode;
- }
- } else {
- return null;
- }
- }
-
- pub fn toString(self: ScrollRestorationMode) []const u8 {
- return @tagName(self);
- }
};
scroll_restoration: ScrollRestorationMode = .auto,
@@ -63,8 +51,8 @@ pub fn get_scrollRestoration(self: *History) ScrollRestorationMode {
return self.scroll_restoration;
}
-pub fn set_scrollRestoration(self: *History, mode: []const u8) void {
- self.scroll_restoration = ScrollRestorationMode.fromString(mode) orelse self.scroll_restoration;
+pub fn set_scrollRestoration(self: *History, mode: ScrollRestorationMode) void {
+ self.scroll_restoration = mode;
}
pub fn get_state(self: *History, page: *Page) !?js.Value {
diff --git a/src/browser/js/Context.zig b/src/browser/js/Context.zig
index d4ccb887..be7cf7c4 100644
--- a/src/browser/js/Context.zig
+++ b/src/browser/js/Context.zig
@@ -750,9 +750,16 @@ pub fn jsValueToZig(self: *Context, comptime named_function: NamedFunction, comp
unreachable;
},
.@"enum" => |e| {
- switch (@typeInfo(e.tag_type)) {
- .int => return std.meta.intToEnum(T, try jsIntToZig(e.tag_type, js_value, self.v8_context)),
- else => @compileError(named_function.full_name ++ " has an unsupported enum parameter type: " ++ @typeName(T)),
+ if (@hasDecl(T, "ENUM_JS_USE_TAG")) {
+ const str = try self.jsValueToZig(named_function, []const u8, js_value);
+ return std.meta.stringToEnum(T, str) orelse return error.InvalidEnumValue;
+ } else {
+ switch (@typeInfo(e.tag_type)) {
+ .int => return std.meta.intToEnum(T, try jsIntToZig(e.tag_type, js_value, self.v8_context)),
+ else => {
+ @compileError(named_function.full_name ++ " has an unsupported enum parameter type: " ++ @typeName(T));
+ },
+ }
}
},
else => {},
diff --git a/src/browser/js/js.zig b/src/browser/js/js.zig
index 31cf5442..aeff6540 100644
--- a/src/browser/js/js.zig
+++ b/src/browser/js/js.zig
@@ -378,8 +378,13 @@ pub fn simpleZigValueToJs(isolate: v8.Isolate, value: anytype, comptime fail: bo
.@"enum" => {
const T = @TypeOf(value);
if (@hasDecl(T, "toString")) {
+ // This should be deprecated in favor of the ENUM_JS_USE_TAG.
return simpleZigValueToJs(isolate, value.toString(), fail);
}
+
+ if (@hasDecl(T, "ENUM_JS_USE_TAG")) {
+ return simpleZigValueToJs(isolate, @tagName(value), fail);
+ }
},
else => {},
}