mirror of
https://github.com/lightpanda-io/browser.git
synced 2025-10-28 22:53:28 +00:00
Add UndefinedOr(T) union
Some apis want a value or undefined. For these, we can't use an Optional return type, null maps to JS null. Adds an Env.UndefinedOr(T) generic union for such return types.
This commit is contained in:
@@ -17,6 +17,7 @@
|
||||
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
const std = @import("std");
|
||||
const parser = @import("../netsurf.zig");
|
||||
const Env = @import("../env.zig").Env;
|
||||
const Page = @import("../page.zig").Page;
|
||||
|
||||
const Allocator = std.mem.Allocator;
|
||||
@@ -25,16 +26,12 @@ const DataSet = @This();
|
||||
|
||||
element: *parser.Element,
|
||||
|
||||
const GetResult = union(enum) {
|
||||
value: []const u8,
|
||||
undefined: void,
|
||||
};
|
||||
pub fn named_get(self: *const DataSet, name: []const u8, _: *bool, page: *Page) !GetResult {
|
||||
pub fn named_get(self: *const DataSet, name: []const u8, _: *bool, page: *Page) !Env.UndefinedOr([]const u8) {
|
||||
const normalized_name = try normalize(page.call_arena, name);
|
||||
if (try parser.elementGetAttribute(self.element, normalized_name)) |value| {
|
||||
return .{ .value = value };
|
||||
}
|
||||
return .{ .undefined = {} };
|
||||
return .undefined;
|
||||
}
|
||||
|
||||
pub fn named_set(self: *DataSet, name: []const u8, value: []const u8, _: *bool, page: *Page) !void {
|
||||
|
||||
@@ -72,15 +72,11 @@ pub const ErrorEvent = struct {
|
||||
return self.colno;
|
||||
}
|
||||
|
||||
const ErrorValue = union(enum) {
|
||||
obj: Env.JsObject,
|
||||
undefined: void,
|
||||
};
|
||||
pub fn get_error(self: *const ErrorEvent) ErrorValue {
|
||||
pub fn get_error(self: *const ErrorEvent) Env.UndefinedOr(Env.JsObject) {
|
||||
if (self.@"error") |e| {
|
||||
return .{ .obj = e };
|
||||
return .{ .value = e };
|
||||
}
|
||||
return .{ .undefined = {} };
|
||||
return .undefined;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -1858,6 +1858,13 @@ pub fn Env(comptime State: type, comptime WebApis: type) type {
|
||||
}
|
||||
};
|
||||
|
||||
pub fn UndefinedOr(comptime T: type) type {
|
||||
return union(enum) {
|
||||
value: T,
|
||||
undefined: void,
|
||||
};
|
||||
}
|
||||
|
||||
fn compileModule(isolate: v8.Isolate, src: []const u8, name: []const u8) !v8.Module {
|
||||
// compile
|
||||
const script_name = v8.String.initUtf8(isolate, name);
|
||||
|
||||
Reference in New Issue
Block a user