All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.vertx.redis.client.impl.RequestImpl Maven / Gradle / Ivy

There is a newer version: 4.5.10
Show newest version
/*
 * Copyright 2019 Red Hat, Inc.
 * 

* All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Apache License v2.0 which accompanies this distribution. *

* The Eclipse Public License is available at * http://www.eclipse.org/legal/epl-v10.html *

* The Apache License v2.0 is available at * http://www.opensource.org/licenses/apache2.0.php *

* You may elect to redistribute this code under either of these licenses. */ package io.vertx.redis.client.impl; import io.vertx.core.buffer.Buffer; import io.vertx.redis.client.Request; import io.vertx.redis.client.Command; import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.Collections; import java.util.List; import static io.vertx.redis.client.impl.RESPEncoder.*; public final class RequestImpl implements Request { private static final byte[] EMPTY_BULK = "$0\r\n\r\n".getBytes(StandardCharsets.ISO_8859_1); private static final byte[] EMPTY_BYTES = new byte[0]; private static final byte[] NULL_BULK = "$-1\r\n".getBytes(StandardCharsets.ISO_8859_1); private static final byte[] EOL = "\r\n".getBytes(StandardCharsets.ISO_8859_1); private final Command cmd; private final List args; public RequestImpl(Command cmd) { this.cmd = cmd; if (cmd.getArity() != 0) { args = new ArrayList<>(Math.abs(cmd.getArity())); } else { args = Collections.emptyList(); } } @Override public Command command() { return cmd; } // arguments // integer @Override public Request arg(long arg) { args.add(numToBytes(arg)); return this; } // null @Override public Request nullArg() { args.add(null); return this; } // bulk string @Override public Request arg(byte[] arg) { if (arg == null) { return nullArg(); } if (arg.length == 0) { args.add(arg); return this; } args.add(arg); return this; } @Override public Request arg(Buffer arg) { if (arg == null) { return nullArg(); } if (arg.length() == 0) { args.add(EMPTY_BYTES); return this; } args.add(arg.getBytes()); return this; } Buffer encode() { return encode(Buffer.buffer()); } Buffer encode(Buffer buffer) { buffer // array header .appendByte((byte) '*') .appendBytes(numToBytes(args.size() + 1)) .appendBytes(EOL) // command .appendBytes(cmd.getBytes()); for (final byte[] arg : args) { if (arg == null) { buffer.appendBytes(NULL_BULK); continue; } if (arg.length == 0) { buffer.appendBytes(EMPTY_BULK); continue; } buffer .appendByte((byte) '$') .appendBytes(numToBytes(arg.length)) .appendBytes(EOL) .appendBytes(arg) .appendBytes(EOL); } return buffer; } List getArgs() { return args; } @Override public String toString() { return encode().toString(); } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy