mirror of
https://github.com/kataras/iris.git
synced 2025-01-24 03:01:03 +01:00
57 lines
975 B
Go
57 lines
975 B
Go
|
package rule
|
||
|
|
||
|
import (
|
||
|
"github.com/kataras/iris/context"
|
||
|
)
|
||
|
|
||
|
// chainedRule is a Rule with next Rule
|
||
|
type chainedRule struct {
|
||
|
Rule
|
||
|
next Rule
|
||
|
}
|
||
|
|
||
|
var _ Rule = &chainedRule{}
|
||
|
|
||
|
// chainedSingle returns a new rule witch has a next rule too
|
||
|
func chainedSingle(rule Rule, next Rule) Rule {
|
||
|
if next == nil {
|
||
|
next = Satisfied()
|
||
|
}
|
||
|
|
||
|
return &chainedRule{
|
||
|
Rule: rule,
|
||
|
next: next,
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Chained returns a new rule which has more than one coming next ruleset
|
||
|
func Chained(rule Rule, next ...Rule) Rule {
|
||
|
if len(next) == 0 {
|
||
|
return chainedSingle(rule, nil)
|
||
|
}
|
||
|
c := chainedSingle(rule, next[0])
|
||
|
|
||
|
for i := 1; i < len(next); i++ {
|
||
|
c = chainedSingle(c, next[i])
|
||
|
}
|
||
|
|
||
|
return c
|
||
|
|
||
|
}
|
||
|
|
||
|
// Claim validator
|
||
|
func (c *chainedRule) Claim(ctx context.Context) bool {
|
||
|
if !c.Rule.Claim(ctx) {
|
||
|
return false
|
||
|
}
|
||
|
return c.next.Claim(ctx)
|
||
|
}
|
||
|
|
||
|
// Valid validator
|
||
|
func (c *chainedRule) Valid(ctx context.Context) bool {
|
||
|
if !c.Rule.Valid(ctx) {
|
||
|
return false
|
||
|
}
|
||
|
return c.next.Valid(ctx)
|
||
|
}
|