package com.qianwen.core.redis.ratelimiter; import java.util.concurrent.TimeUnit; import com.qianwen.core.tool.function.CheckedSupplier; import com.qianwen.core.tool.utils.Exceptions; /* loaded from: blade-starter-redis-9.3.0.0-SNAPSHOT.jar:org/springblade/core/redis/ratelimiter/RateLimiterClient.class */ public interface RateLimiterClient { boolean isAllowed(String key, long max, long ttl, TimeUnit timeUnit); default boolean isAllowed(String key, long max, long ttl) { return isAllowed(key, max, ttl, TimeUnit.SECONDS); } default T allow(String key, long max, long ttl, CheckedSupplier supplier) { return (T) allow(key, max, ttl, TimeUnit.SECONDS, supplier); } default T allow(String key, long max, long ttl, TimeUnit timeUnit, CheckedSupplier supplier) { boolean isAllowed = isAllowed(key, max, ttl, timeUnit); if (isAllowed) { try { return (T) supplier.get(); } catch (Throwable e) { throw Exceptions.unchecked(e); } } throw new RateLimiterException(key, max, ttl, timeUnit); } }