beam: new routing functions Route.KeyEquals, Route.KeyIncludes, Route.NoKey

Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
This commit is contained in:
Solomon Hykes 2014-04-02 20:04:33 -07:00
parent df3bbb2875
commit d1528caaac

View file

@ -117,6 +117,41 @@ func (r *Route) KeyStartsWith(k string, beginning ...string) *Route {
return r return r
} }
func (r *Route) KeyEquals(k string, full...string) *Route {
r.rules = append(r.rules, func(payload []byte, attachment *os.File) bool {
values := data.Message(payload).Get(k)
if len(values) != len(full) {
return false
}
for i, v := range full {
if v != values[i] {
return false
}
}
return true
})
return r
}
func (r *Route) KeyIncludes(k, v string) *Route {
r.rules = append(r.rules, func(payload []byte, attachment *os.File) bool {
for _, val := range data.Message(payload).Get(k) {
if val == v {
return true
}
}
return false
})
return r
}
func (r *Route) NoKey(k string) *Route {
r.rules = append(r.rules, func(payload []byte, attachment *os.File) bool {
return len(data.Message(payload).Get(k)) == 0
})
return r
}
func (r *Route) Passthrough(dst Sender) *Route { func (r *Route) Passthrough(dst Sender) *Route {
r.handler = func(payload []byte, attachment *os.File) error { r.handler = func(payload []byte, attachment *os.File) error {
return dst.Send(payload, attachment) return dst.Send(payload, attachment)