@Override
    public Object handle(ProceedingJoinPoint proceedingJoinPoint, RateLimiter rateLimiter,
        String methodName) throws Throwable {
        Object returnValue = proceedingJoinPoint.proceed();
        if (Flux.class.isAssignableFrom(returnValue.getClass())) {
            Flux<?> fluxReturnValue = (Flux<?>) returnValue;
            return fluxReturnValue.transformDeferred(RateLimiterOperator.of(rateLimiter));
        } else if (Mono.class.isAssignableFrom(returnValue.getClass())) {
            Mono<?> monoReturnValue = (Mono<?>) returnValue;
            return monoReturnValue.transformDeferred(RateLimiterOperator.of(rateLimiter));
        } else {
            logger.error("Unsupported type for Reactor rateLimiter {}",
                returnValue.getClass().getTypeName());
            throw new IllegalArgumentException(
                "Not Supported type for the rateLimiter in Reactor :" + returnValue.getClass()
                    .getName());

        }
    }
@Test
    public void testReactorTypes() throws Throwable {
        RateLimiter rateLimiter = RateLimiter.ofDefaults("test");

        when(proceedingJoinPoint.proceed()).thenReturn(Mono.just("Test"));
        assertThat(
            reactorRateLimiterAspectExt.handle(proceedingJoinPoint, rateLimiter, "testMethod"))
            .isNotNull();

        when(proceedingJoinPoint.proceed()).thenReturn(Flux.just("Test"));
        assertThat(
            reactorRateLimiterAspectExt.handle(proceedingJoinPoint, rateLimiter, "testMethod"))
            .isNotNull();
    }