class Builder {

        /**
         * Utility constructor.
         */
        private Builder() {
        }

        /**
         * Creates new {@link SetArgs} and enable {@literal EX}.
         *
         * @param timeout expire time in seconds.
         * @return new {@link SetArgs} with {@literal EX} enabled.
         * @see SetArgs#ex(long)
         */
        public static SetArgs ex(long timeout) {
            return new SetArgs().ex(timeout);
        }

        /**
         * Creates new {@link SetArgs} and enable {@literal EX}.
         *
         * @param timeout expire time as duration.
         * @return new {@link SetArgs} with {@literal EX} enabled.
         * @see SetArgs#ex(long)
         * @since 6.1
         */
        public static SetArgs ex(Duration timeout) {
            return new SetArgs().ex(timeout);
        }

        /**
         * Creates new {@link SetArgs} and enable {@literal EXAT}.
         *
         * @param timestamp the timestamp type: posix time in seconds.
         * @return new {@link SetArgs} with {@literal EXAT} enabled.
         * @see SetArgs#exAt(long)
         */
        public static SetArgs exAt(long timestamp) {
            return new SetArgs().exAt(timestamp);
        }

        /**
         * Creates new {@link SetArgs} and enable {@literal EXAT}.
         *
         * @param timestamp the timestamp type: posix time in seconds.
         * @return new {@link SetArgs} with {@literal EXAT} enabled.
         * @see SetArgs#exAt(Date)
         * @since 6.1
         */
        public static SetArgs exAt(Date timestamp) {
            return new SetArgs().exAt(timestamp);
        }

        /**
         * Creates new {@link SetArgs} and enable {@literal EXAT}.
         *
         * @param timestamp the timestamp type: posix time in seconds.
         * @return new {@link SetArgs} with {@literal EXAT} enabled.
         * @see SetArgs#exAt(Instant)
         * @since 6.1
         */
        public static SetArgs exAt(Instant timestamp) {
            return new SetArgs().exAt(timestamp);
        }

        /**
         * Creates new {@link SetArgs} and enable {@literal PX}.
         *
         * @param timeout expire time in milliseconds.
         * @return new {@link SetArgs} with {@literal PX} enabled.
         * @see SetArgs#px(long)
         */
        public static SetArgs px(long timeout) {
            return new SetArgs().px(timeout);
        }

        /**
         * Creates new {@link SetArgs} and enable {@literal PX}.
         *
         * @param timeout expire time in milliseconds.
         * @return new {@link SetArgs} with {@literal PX} enabled.
         * @see SetArgs#px(long)
         * @since 6.1
         */
        public static SetArgs px(Duration timeout) {
            return new SetArgs().px(timeout);
        }

        /**
         * Creates new {@link SetArgs} and enable {@literal PXAT}.
         *
         * @param timestamp the timestamp type: posix time.
         * @return new {@link SetArgs} with {@literal PXAT} enabled.
         * @see SetArgs#pxAt(long)
         */
        public static SetArgs pxAt(long timestamp) {
            return new SetArgs().pxAt(timestamp);
        }

        /**
         * Creates new {@link SetArgs} and enable {@literal PXAT}.
         *
         * @param timestamp the timestamp type: posix time.
         * @return new {@link SetArgs} with {@literal PXAT} enabled.
         * @see SetArgs#pxAt(Date)
         * @since 6.1
         */
        public static SetArgs pxAt(Date timestamp) {
            return new SetArgs().pxAt(timestamp);
        }

        /**
         * Creates new {@link SetArgs} and enable {@literal PXAT}.
         *
         * @param timestamp the timestamp type: posix time.
         * @return new {@link SetArgs} with {@literal PXAT} enabled.
         * @see SetArgs#pxAt(Instant)
         * @since 6.1
         */
        public static SetArgs pxAt(Instant timestamp) {
            return new SetArgs().pxAt(timestamp);
        }

        /**
         * Creates new {@link SetArgs} and enable {@literal NX}.
         *
         * @return new {@link SetArgs} with {@literal NX} enabled.
         * @see SetArgs#nx()
         */
        public static SetArgs nx() {
            return new SetArgs().nx();
        }

        /**
         * Creates new {@link SetArgs} and enable {@literal XX}.
         *
         * @return new {@link SetArgs} with {@literal XX} enabled.
         * @see SetArgs#xx()
         */
        public static SetArgs xx() {
            return new SetArgs().xx();
        }

        /**
         * Creates new {@link SetArgs} and enable {@literal KEEPTTL}.
         *
         * @return new {@link SetArgs} with {@literal KEEPTTL} enabled.
         * @see SetArgs#keepttl()
         * @since 5.3
         */
        public static SetArgs keepttl() {
            return new SetArgs().keepttl();
        }

    }

    /**
     * Set the specified expire time, in seconds.
     *
     * @param timeout expire time in seconds.
     * @return {@code this} {@link SetArgs}.
     */
    public SetArgs ex(long timeout) {

        this.ex = timeout;
        return this;
    }

    /**
     * Set the specified expire time, in seconds.
     *
     * @param timeout expire time in seconds.
     * @return {@code this} {@link SetArgs}.
     * @since 6.1
     */
    public SetArgs ex(Duration timeout) {<FILL_FUNCTION_BODY>


        LettuceAssert.notNull(timeout, "Timeout must not be null");

        this.ex = timeout.toMillis() / 1000;
        return this;
    
<no_super_class>