class LatencyMeteredCommand<K, V, T> extends CommandWrapper<K, V, T> implements WithLatency {

    private long sentNs = -1;

    private long firstResponseNs = -1;

    private long completedNs = -1;

    public LatencyMeteredCommand(RedisCommand<K, V, T> command) {
        super(command);
    }

    @Override
    public void sent(long timeNs) {<FILL_FUNCTION_BODY>}

    @Override
    public void firstResponse(long timeNs) {
        firstResponseNs = timeNs;
    }

    @Override
    public void completed(long timeNs) {
        completedNs = timeNs;
    }

    @Override
    public long getSent() {
        return sentNs;
    }

    @Override
    public long getFirstResponse() {
        return firstResponseNs;
    }

    @Override
    public long getCompleted() {
        return completedNs;
    }

}

        sentNs = timeNs;
        firstResponseNs = -1;
        completedNs = -1;
    
<methods>public void <init>(RedisCommand<K,V,T>) ,public void cancel() ,public void complete() ,public boolean completeExceptionally(java.lang.Throwable) ,public void encode(ByteBuf) ,public boolean equals(java.lang.Object) ,public CommandArgs<K,V> getArgs() ,public RedisCommand<K,V,T> getDelegate() ,public CommandOutput<K,V,T> getOutput() ,public io.lettuce.core.protocol.ProtocolKeyword getType() ,public int hashCode() ,public boolean isCancelled() ,public boolean isDone() ,public void onComplete(Consumer<? super T>) ,public void onComplete(BiConsumer<? super T,java.lang.Throwable>) ,public void setOutput(CommandOutput<K,V,T>) ,public java.lang.String toString() ,public static RedisCommand<K,V,T> unwrap(RedisCommand<K,V,T>) ,public static R unwrap(RedisCommand<K,V,T>, Class<R>) <variables>private static final java.lang.Object[] COMPLETE,private static final java.lang.Object[] EMPTY,private static final AtomicReferenceFieldUpdater<CommandWrapper#RAW,java.lang.Object[]> ONCOMPLETE,protected final non-sealed RedisCommand<K,V,T> command,private volatile java.lang.Object[] onComplete