mirror of
https://github.com/kairos-io/kairos-sdk.git
synced 2025-04-28 11:24:40 +00:00
31 lines
422 B
Go
31 lines
422 B
Go
|
package system
|
||
|
|
||
|
import (
|
||
|
"github.com/hashicorp/go-multierror"
|
||
|
)
|
||
|
|
||
|
type Changeset []func() error
|
||
|
|
||
|
func (c *Changeset) Add(f func() error) {
|
||
|
*c = append(*c, f)
|
||
|
}
|
||
|
|
||
|
type Option func(c *Changeset) error
|
||
|
|
||
|
func Apply(opts ...Option) error {
|
||
|
|
||
|
c := &Changeset{}
|
||
|
for _, o := range opts {
|
||
|
if err := o(c); err != nil {
|
||
|
return err
|
||
|
}
|
||
|
}
|
||
|
|
||
|
var err error
|
||
|
for _, f := range *c {
|
||
|
err = multierror.Append(f())
|
||
|
}
|
||
|
|
||
|
return err
|
||
|
}
|