From 01dec6dbe79a7c2ae79bdcbe4f387ec952a2b299 Mon Sep 17 00:00:00 2001 From: Snider Date: Fri, 20 Mar 2026 14:27:12 +0000 Subject: [PATCH] =?UTF-8?q?feat:=20Result.New()=20=E2=80=94=20maps=20Go=20?= =?UTF-8?q?(value,=20error)=20to=20Result?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Result{}.New(file, err) // OK = err == nil, Value = file Result{}.New(value) // OK = true, Value = value Result{}.New() // OK = false Enables: return Result{}.New(s.fsys.Open(path)) Replaces manual if err != nil { return Result{} } blocks. Co-Authored-By: Virgil --- pkg/core/options.go | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/pkg/core/options.go b/pkg/core/options.go index 10f50a6..29b5e15 100644 --- a/pkg/core/options.go +++ b/pkg/core/options.go @@ -43,6 +43,31 @@ type Result struct { OK bool } +// New creates a Result from variadic args. +// Maps Go (value, error) pairs and multi-value returns to Result. +// +// Result{}.New(file, err) // OK = err == nil, Value = file +// Result{}.New(value) // OK = true, Value = value +// Result{}.New() // OK = false +// Result{}.New("1", 1) // OK = true, Value = first arg +func (r Result) New(args ...any) Result { + if len(args) == 0 { + return Result{} + } + + // Check if last arg is an error + if len(args) >= 2 { + if err, ok := args[len(args)-1].(error); ok { + if err != nil { + return Result{Value: err} + } + return Result{Value: args[0], OK: true} + } + } + + return Result{Value: args[0], OK: true} +} + // Option is a single key-value configuration pair. // // core.Option{K: "name", V: "brain"}