feat: Result.New() — maps Go (value, error) to Result

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 <virgil@lethean.io>
This commit is contained in:
Snider 2026-03-20 14:27:12 +00:00
parent 2d6415b3aa
commit 01dec6dbe7

View file

@ -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"}