github.com/juju/juju@v0.0.0-20240327075706-a90865de2538/core/quota/multichecker.go (about) 1 // Copyright 2020 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package quota 5 6 // Checker is implemented by types that can perform quota limit checks. 7 type Checker interface { 8 Check(interface{}) 9 Outcome() error 10 } 11 12 var _ Checker = (*MultiChecker)(nil) 13 14 // MultiChecker composes a list of individual Checker instances. 15 type MultiChecker struct { 16 checkers []Checker 17 } 18 19 // NewMultiChecker returns a Checker that composes the Check/Outcome logic for 20 // the specified list of Checkers. 21 func NewMultiChecker(checkers ...Checker) *MultiChecker { 22 return &MultiChecker{ 23 checkers: checkers, 24 } 25 } 26 27 // Check passes v to the Check method for each one of the composed Checkers. 28 func (c MultiChecker) Check(v interface{}) { 29 for _, checker := range c.checkers { 30 checker.Check(v) 31 } 32 } 33 34 // Outcome invokes Outcome on each composed Checker and returns back any 35 // obtained error or nil if all checks succeeded. 36 func (c MultiChecker) Outcome() error { 37 for _, checker := range c.checkers { 38 if err := checker.Outcome(); err != nil { 39 return err 40 } 41 } 42 return nil 43 }