// Path: src/main/java/com/optimaize/command4j/ext/extensions/exception/ExceptionExtensions.java
// public class ExceptionExtensions {
// 
//     public static final ExceptionExtensions INSTANCE = new ExceptionExtensions();
//     private ExceptionExtensions(){}
// 
// 
//     /**
//      * @see ExceptionTranslationExtension
//      */
//     public static <A, R> BaseCommand<A, R> withExceptionTranslation(@NotNull Command<A, R> cmd,
//                                                                           @NotNull ExceptionTranslator exceptionTranslator) {
//         return new ExceptionTranslationExtension.Interceptor<>(cmd, exceptionTranslator);
//     }
// 
// }
// 
// Path: src/main/java/com/optimaize/command4j/ext/extensions/failover/FailoverExtensions.java
// public class FailoverExtensions {
// 
//     public static final FailoverExtensions INSTANCE = new FailoverExtensions();
//     private FailoverExtensions(){}
// 
// 
// 
//     /**
//      * Uses the {@link AutoRetryExtension}.
//      * @see AutoRetryExtension
//      */
//     public static <A, V> BaseCommand<A, V> withAutoRetry(@NotNull Command<A, V> cmd) {
//         return new AutoRetryExtension.Interceptor<>(cmd);
//     }
// 
//     /**
//      * @see AutoRetryExtension
//      */
//     public static <A, V> BaseCommand<A, V> withAutoRetry(@NotNull Command<A, V> cmd,
//                                                                @NotNull AutoRetryStrategy strategy) {
//         return new AutoRetryExtension.Interceptor<>(cmd, strategy);
//     }
// 
// }
// 
// Path: src/main/java/com/optimaize/command4j/ext/extensions/logging/LoggingExtensions.java
// public class LoggingExtensions {
// 
//     public static final LoggingExtensions INSTANCE = new LoggingExtensions();
//     private LoggingExtensions(){}
// 
// 
//     /**
//      * @see StdoutLoggingExtension
//      */
//     public static <A, R> BaseCommand<A, R> withStdoutLogging(@NotNull Command<A, R> cmd) {
//         return new StdoutLoggingExtension.Interceptor<>(cmd);
//     }
// 
//     /**
//      * @see CustomLoggingExtension
//      */
//     public static <A, R> BaseCommand<A, R> withCustomLogging(@NotNull Command<A, R> cmd,
//                                                                    @NotNull CommandExecutionLogger<A, R> commandExecutionLogger) {
//         return new CustomLoggingExtension.Interceptor<>(cmd, commandExecutionLogger);
//     }
// 
// }
// 
// Path: src/main/java/com/optimaize/command4j/ext/extensions/timeout/TimeoutExtensions.java
// public class TimeoutExtensions {
// 
//     public static final TimeoutExtensions INSTANCE = new TimeoutExtensions();
//     private TimeoutExtensions(){}
// 
// 
//     /**
//      * @see TimeoutExtension
//      */
//     public static <A, V> BaseCommand<A, V> withTimeout(@NotNull Command<A, V> cmd, @NotNull Duration duration) {
//         return new TimeoutExtension.Interceptor<>(cmd, duration);
//     }
// 
// }


import com.optimaize.command4j.ext.extensions.exception.ExceptionExtensions;
import com.optimaize.command4j.ext.extensions.failover.FailoverExtensions;
import com.optimaize.command4j.ext.extensions.logging.LoggingExtensions;
import com.optimaize.command4j.ext.extensions.timeout.TimeoutExtensions;
import org.jetbrains.annotations.NotNull;
package com.optimaize.command4j.ext;


/**
 * A hub-class for easy access to common built-in extensions.
 *
 * @author Fabian Kessler
 */
public class Extensions {

    public static final Extensions INSTANCE = new Extensions();
    private Extensions(){}


    @NotNull
    public static LoggingExtensions logging() {
        return LoggingExtensions.INSTANCE;
    }

    @NotNull
    public static ExceptionExtensions exception() {
        return ExceptionExtensions.INSTANCE;
    }

    @NotNull
    public static TimeoutExtensions timeout() {
        return TimeoutExtensions.INSTANCE;
    }

    @NotNull
    public static FailoverExtensions failover() {
// Path: src/main/java/com/optimaize/command4j/ext/extensions/exception/ExceptionExtensions.java
// public class ExceptionExtensions {
// 
//     public static final ExceptionExtensions INSTANCE = new ExceptionExtensions();
//     private ExceptionExtensions(){}
// 
// 
//     /**
//      * @see ExceptionTranslationExtension
//      */
//     public static <A, R> BaseCommand<A, R> withExceptionTranslation(@NotNull Command<A, R> cmd,
//                                                                           @NotNull ExceptionTranslator exceptionTranslator) {
//         return new ExceptionTranslationExtension.Interceptor<>(cmd, exceptionTranslator);
//     }
// 
// }
// 
// Path: src/main/java/com/optimaize/command4j/ext/extensions/failover/FailoverExtensions.java
// public class FailoverExtensions {
// 
//     public static final FailoverExtensions INSTANCE = new FailoverExtensions();
//     private FailoverExtensions(){}
// 
// 
// 
//     /**
//      * Uses the {@link AutoRetryExtension}.
//      * @see AutoRetryExtension
//      */
//     public static <A, V> BaseCommand<A, V> withAutoRetry(@NotNull Command<A, V> cmd) {
//         return new AutoRetryExtension.Interceptor<>(cmd);
//     }
// 
//     /**
//      * @see AutoRetryExtension
//      */
//     public static <A, V> BaseCommand<A, V> withAutoRetry(@NotNull Command<A, V> cmd,
//                                                                @NotNull AutoRetryStrategy strategy) {
//         return new AutoRetryExtension.Interceptor<>(cmd, strategy);
//     }
// 
// }
// 
// Path: src/main/java/com/optimaize/command4j/ext/extensions/logging/LoggingExtensions.java
// public class LoggingExtensions {
// 
//     public static final LoggingExtensions INSTANCE = new LoggingExtensions();
//     private LoggingExtensions(){}
// 
// 
//     /**
//      * @see StdoutLoggingExtension
//      */
//     public static <A, R> BaseCommand<A, R> withStdoutLogging(@NotNull Command<A, R> cmd) {
//         return new StdoutLoggingExtension.Interceptor<>(cmd);
//     }
// 
//     /**
//      * @see CustomLoggingExtension
//      */
//     public static <A, R> BaseCommand<A, R> withCustomLogging(@NotNull Command<A, R> cmd,
//                                                                    @NotNull CommandExecutionLogger<A, R> commandExecutionLogger) {
//         return new CustomLoggingExtension.Interceptor<>(cmd, commandExecutionLogger);
//     }
// 
// }
// 
// Path: src/main/java/com/optimaize/command4j/ext/extensions/timeout/TimeoutExtensions.java
// public class TimeoutExtensions {
// 
//     public static final TimeoutExtensions INSTANCE = new TimeoutExtensions();
//     private TimeoutExtensions(){}
// 
// 
//     /**
//      * @see TimeoutExtension
//      */
//     public static <A, V> BaseCommand<A, V> withTimeout(@NotNull Command<A, V> cmd, @NotNull Duration duration) {
//         return new TimeoutExtension.Interceptor<>(cmd, duration);
//     }
// 
// }


// Path: src/main/java/com/optimaize/command4j/ext/Extensions.java
import com.optimaize.command4j.ext.extensions.exception.ExceptionExtensions;
import com.optimaize.command4j.ext.extensions.failover.FailoverExtensions;
import com.optimaize.command4j.ext.extensions.logging.LoggingExtensions;
import com.optimaize.command4j.ext.extensions.timeout.TimeoutExtensions;
import org.jetbrains.annotations.NotNull;

package com.optimaize.command4j.ext;


/**
 * A hub-class for easy access to common built-in extensions.
 *
 * @author Fabian Kessler
 */
public class Extensions {

    public static final Extensions INSTANCE = new Extensions();
    private Extensions(){}


    @NotNull
    public static LoggingExtensions logging() {
        return LoggingExtensions.INSTANCE;
    }

    @NotNull
    public static ExceptionExtensions exception() {
        return ExceptionExtensions.INSTANCE;
    }

    @NotNull
    public static TimeoutExtensions timeout() {
        return TimeoutExtensions.INSTANCE;
    }

    @NotNull
    public static FailoverExtensions failover() {
        return FailoverExtensions.INSTANCE;