From 995110e5a71fc10d869d3f0b24bfe005405a9cf2 Mon Sep 17 00:00:00 2001 From: Meghan Denny Date: Sun, 20 Sep 2026 02:29:40 -0700 Subject: [PATCH] add an Error decl --- src/lib.zig | 8 ++++++++ src/postgresql.zig | 2 ++ src/sqlite3.zig | 8 +++++--- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/lib.zig b/src/lib.zig index a2e35c1dc0085a6160c9abaef20cd7a6f642d8d2..79f8c37bf8865175ee07726456e454a5fb3fffa4 100644 --- a/src/lib.zig +++ b/src/lib.zig @@ -12,6 +12,14 @@ pub fn Driver(comptime etype: DriverType) type { }; } +pub const Error = blk: { + var Err: type = error{}; + for (@typeInfo(DriverType).@"enum".fields) |f| { + Err = Err || Driver(@field(DriverType, f.name)).Error; + } + break :blk Err; +}; + pub fn connect(_type: DriverType, allocator: std.mem.Allocator, connection: [:0]const u8) !Engine { return switch (_type) { inline else => |t| @unionInit(Engine, @tagName(t), try .connect(allocator, connection)), diff --git a/src/postgresql.zig b/src/postgresql.zig index 29909cac0de51b4a75fe03ef3cef1ac7b971953d..3648e0b638a6659c254dd07bada97ddb97794376 100644 --- a/src/postgresql.zig +++ b/src/postgresql.zig @@ -19,6 +19,8 @@ const sys = switch (builtin.target.os.tag) { const Driver = @This(); +pub const Error = error{}; + conn: net.Stream, bufw: nio.BufferedWriter(4096, net.Stream), bufr: nio.BufferedReader(4096, net.Stream), diff --git a/src/sqlite3.zig b/src/sqlite3.zig index 5bdcdc50855bbd4f7ab6aaae8eedc4cd33c73485..c65fd185ddb833b13d6aee863226017c913de495 100644 --- a/src/sqlite3.zig +++ b/src/sqlite3.zig @@ -8,6 +8,8 @@ const Driver = @This(); const SQLITE_STATIC: *allowzero anyopaque = @ptrFromInt(0); const SQLITE_TRANSIENT: *allowzero anyopaque = @ptrFromInt(std.math.maxInt(usize)); +pub const Error = s.Error || error{Overflow}; + db: *c.sqlite3, pub fn connect(allocator: std.mem.Allocator, path: [:0]const u8) !Driver { @@ -230,7 +232,7 @@ pub const s = struct { SQLITE_NOTICE, SQLITE_WARNING, }; - pub fn rc2e(code: c_int) Error { + pub fn rc2e(code: c_int) s.Error { if (code == c.SQLITE_ERROR) return error.SQLITE_ERROR; if (code == c.SQLITE_INTERNAL) return error.SQLITE_INTERNAL; if (code == c.SQLITE_PERM) return error.SQLITE_PERM; @@ -261,7 +263,7 @@ pub const s = struct { if (code == c.SQLITE_WARNING) return error.SQLITE_WARNING; return error.Unexpected; } - pub fn rc2p(code: c_int) Error { + pub fn rc2p(code: c_int) s.Error { if (builtin.mode == .Debug) @panic(std.mem.sliceTo(c.sqlite3_errstr(code), 0)); return rc2e(code); } @@ -273,7 +275,7 @@ pub const s = struct { if (code == c.SQLITE_OK) return; return rc2p(code); } - pub fn rc2p_d(db: *c.sqlite3, code: c_int) Error { + pub fn rc2p_d(db: *c.sqlite3, code: c_int) s.Error { if (builtin.mode == .Debug) @panic(std.mem.sliceTo(c.sqlite3_errmsg(db), 0)); return rc2e(code); } -- 2.54.0