func()

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))
}