mirror of
https://github.com/rsteube/carapace-bin.git
synced 2025-05-05 15:32:53 +00:00
54 lines
971 B
Go
54 lines
971 B
Go
package condition
|
|
|
|
import (
|
|
"github.com/carapace-sh/carapace"
|
|
"github.com/carapace-sh/carapace-spec/pkg/macro"
|
|
)
|
|
|
|
type Macro struct {
|
|
macro.Macro[Condition]
|
|
Description string
|
|
}
|
|
|
|
func (m Macro) WithDescription(s string) Macro {
|
|
m.Description = s
|
|
return m
|
|
}
|
|
|
|
func (m Macro) Parse(s string) Condition {
|
|
return func(c carapace.Context) bool {
|
|
b, err := m.Macro.Parse(s)
|
|
if err != nil {
|
|
return false
|
|
}
|
|
return (*b)(c)
|
|
}
|
|
}
|
|
|
|
func MacroI[A any](f func(arg A) Condition) Macro {
|
|
return Macro{
|
|
Macro: macro.MacroI[A, Condition](func(arg A) (*Condition, error) {
|
|
a := f(arg)
|
|
return &a, nil
|
|
}),
|
|
}
|
|
}
|
|
|
|
func MacroN(f func() Condition) Macro {
|
|
return Macro{
|
|
Macro: macro.MacroN[Condition](func() (*Condition, error) {
|
|
a := f()
|
|
return &a, nil
|
|
}),
|
|
}
|
|
}
|
|
|
|
func MacroV[A any](f func(args ...A) Condition) Macro {
|
|
return Macro{
|
|
Macro: macro.MacroV[A, Condition](func(args ...A) (*Condition, error) {
|
|
a := f(args...)
|
|
return &a, nil
|
|
}),
|
|
}
|
|
}
|