From b028ddf4d644f2cf8739dee4892dea79bbe43c1a Mon Sep 17 00:00:00 2001 From: Julian Hurst Date: Fri, 15 Nov 2024 01:59:36 +0100 Subject: Better rtaskerror handling --- hatask.ha | 30 ++++++++++++++++++++++-------- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/hatask.ha b/hatask.ha index fd04ea3..df8cf6d 100644 --- a/hatask.ha +++ b/hatask.ha @@ -25,10 +25,9 @@ type task = struct { def METADATASEP: str = "----"; type rtaskerror = !(fs::error | ini::error | strconv::error | io::error | - utf8::invalid); + utf8::invalid | path::error); -fn listtasks(root: str = "tasks", context: str = "*") ([]task | rtaskerror | - path::error) = { +fn listtasks(root: str = "tasks", context: str = "*") ([]task | rtaskerror) = { const dirents = os::readdir(root)?; defer fs::dirents_free(dirents); let tasks: []task = []; @@ -120,6 +119,23 @@ fn sortname(a: const *opaque, b: const *opaque) int = { return strings::compare(a.name, b.name); }; +fn strrtaskerror(e: rtaskerror) str = { + return match (e) { + case let e: fs::error => + yield fs::strerror(e); + case let e: ini::error => + yield ini::strerror(e); + case let e: strconv::error => + yield strconv::strerror(e); + case let e: io::error => + yield io::strerror(e); + case let e: utf8::invalid => + yield utf8::strerror(e); + case let e: path::error => + yield path::strerror(e); + }; +}; + export fn main() void = { const cmd = getopt::parse(os::args, "tasklist", @@ -152,11 +168,9 @@ export fn main() void = { }; - const tasks = match (listtasks(cfg.tasksdir)) { - case let e: fs::error => - fmt::fatal(fs::strerror(e)); - case let e: path::error => - fmt::fatal(path::strerror(e)); + const tasks = match (listtasks(cfg.tasksdir, cfg.context)) { + case let e: rtaskerror => + fmt::fatal(strrtaskerror(e)); case let tasks: []task => yield tasks; }; -- cgit v1.2.3