RespResponse.java
package redis.clients.jedis.util.server;
import java.util.List;
/**
* Utility class for building RESP (Redis Serialization Protocol) responses. This makes it easier to
* construct proper Redis protocol responses for testing.
*/
public class RespResponse {
/**
* Create a simple string response (+OK, +PONG, etc.).
* @param value The string value
* @return A RESP simple string response
*/
public static String simpleString(String value) {
return "+" + value + "\r\n";
}
/**
* Create an error response (-ERR message).
* @param message The error message
* @return A RESP error response
*/
public static String error(String message) {
return "-" + message + "\r\n";
}
/**
* Create an integer response (:123).
* @param value The integer value
* @return A RESP integer response
*/
public static String integer(long value) {
return ":" + value + "\r\n";
}
/**
* Create a bulk string response ($5\r\nhello\r\n).
* @param value The string value (null for null bulk string)
* @return A RESP bulk string response
*/
public static String bulkString(String value) {
if (value == null) {
return "$-1\r\n";
}
byte[] bytes = value.getBytes();
return "$" + bytes.length + "\r\n" + value + "\r\n";
}
/**
* Create a bulk string response from byte array.
* @param bytes The byte array (null for null bulk string)
* @return A RESP bulk string response
*/
public static String bulkString(byte[] bytes) {
if (bytes == null) {
return "$-1\r\n";
}
return "$" + bytes.length + "\r\n" + new String(bytes) + "\r\n";
}
/**
* Create an array response (*2\r\n$5\r\nhello\r\n$5\r\nworld\r\n).
* @param elements The array elements as RESP strings
* @return A RESP array response
*/
public static String array(String... elements) {
if (elements == null) {
return "*-1\r\n";
}
StringBuilder sb = new StringBuilder();
sb.append("*").append(elements.length).append("\r\n");
for (String element : elements) {
sb.append(element);
}
return sb.toString();
}
/**
* Create an array response from a list of strings as bulk strings.
* @param strings The list of strings
* @return A RESP array response with bulk string elements
*/
public static String arrayOfBulkStrings(List<String> strings) {
if (strings == null) {
return "*-1\r\n";
}
String[] elements = new String[strings.size()];
for (int i = 0; i < strings.size(); i++) {
elements[i] = bulkString(strings.get(i));
}
return array(elements);
}
/**
* Create an array response from string values (automatically converts to bulk strings).
* @param values The string values
* @return A RESP array response with bulk string elements
*/
public static String arrayOfBulkStrings(String... values) {
if (values == null) {
return "*-1\r\n";
}
String[] elements = new String[values.length];
for (int i = 0; i < values.length; i++) {
elements[i] = bulkString(values[i]);
}
return array(elements);
}
/**
* Create an empty array response (*0\r\n).
* @return A RESP empty array response
*/
public static String emptyArray() {
return "*0\r\n";
}
/**
* Create a null array response (*-1\r\n).
* @return A RESP null array response
*/
public static String nullArray() {
return "*-1\r\n";
}
/**
* Create a null bulk string response ($-1\r\n).
* @return A RESP null bulk string response
*/
public static String nullBulkString() {
return "$-1\r\n";
}
/**
* Create an OK response (+OK\r\n).
* @return A RESP OK response
*/
public static String ok() {
return simpleString("OK");
}
/**
* Create a PONG response (+PONG\r\n).
* @return A RESP PONG response
*/
public static String pong() {
return simpleString("PONG");
}
}