in lib/limit.go [114:142]
func (l limitLib) translatePolicy(args ...ref.Val) ref.Val {
if len(args) != 3 {
return types.NewErr("no such overload")
}
headers, ok := args[0].(traits.Mapper)
if !ok {
return types.ValOrErr(headers, "no such overload for headers: %s", args[0].Type())
}
policy, ok := args[1].(types.String)
if !ok {
return types.ValOrErr(policy, "no such overload for policy: %s", args[1].Type())
}
window, ok := args[2].(types.Duration)
if !ok {
return types.ValOrErr(window, "no such overload for window: %s", args[2].Type())
}
translate, ok := l.policies[string(policy)]
if !ok {
return types.NewErr("unknown policy: %q", policy)
}
if translate == nil {
return types.NewErr("policy is nil: %q", policy)
}
h, err := mapStrings(headers)
if err != nil {
return types.NewErr("%s", err)
}
return types.DefaultTypeAdapter.NativeToValue(translate(h, window.Duration))
}