2023-07-15 19:29:29 +01:00

27 lines
579 B
Go

package defaults
type ShouldApplyCheck func() bool
type ApplicatorFunc func()
type DefaultApplicator struct {
ShouldApply ShouldApplyCheck
Apply ApplicatorFunc
}
func NewDefaultApplicator[T any](shouldApplyGenerator func(T) ShouldApplyCheck, ptr *T, defaultValue T) DefaultApplicator {
return DefaultApplicator{
ShouldApply: shouldApplyGenerator(*ptr),
Apply: func() {
*ptr = defaultValue
},
}
}
func ApplyDefaults(applicators ...DefaultApplicator) {
for _, applicator := range applicators {
if applicator.ShouldApply() {
applicator.Apply()
}
}
}