mirror of
https://github.com/kataras/iris.git
synced 2025-01-24 11:11:03 +01:00
50 lines
996 B
Go
50 lines
996 B
Go
|
package rule
|
||
|
|
||
|
import (
|
||
|
"github.com/kataras/iris/context"
|
||
|
)
|
||
|
|
||
|
// Conditional is a Rule witch adds a predicate in order to its methods to execute
|
||
|
type conditionalRule struct {
|
||
|
claimPredicate func() bool
|
||
|
validPredicate func() bool
|
||
|
}
|
||
|
|
||
|
var emptyConditionalPredicate = func() bool {
|
||
|
return true
|
||
|
}
|
||
|
|
||
|
var _ Rule = &conditionalRule{}
|
||
|
|
||
|
// Conditional returns a new rule witch has conditionals
|
||
|
func Conditional(claimPredicate func() bool, validPredicate func() bool) Rule {
|
||
|
if claimPredicate == nil {
|
||
|
claimPredicate = emptyConditionalPredicate
|
||
|
}
|
||
|
|
||
|
if validPredicate == nil {
|
||
|
validPredicate = emptyConditionalPredicate
|
||
|
}
|
||
|
|
||
|
return &conditionalRule{
|
||
|
claimPredicate: claimPredicate,
|
||
|
validPredicate: validPredicate,
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Claim validator
|
||
|
func (c *conditionalRule) Claim(ctx context.Context) bool {
|
||
|
if !c.claimPredicate() {
|
||
|
return false
|
||
|
}
|
||
|
return true
|
||
|
}
|
||
|
|
||
|
// Valid validator
|
||
|
func (c *conditionalRule) Valid(ctx context.Context) bool {
|
||
|
if !c.validPredicate() {
|
||
|
return false
|
||
|
}
|
||
|
return true
|
||
|
}
|