use bytes::Bytes;
fn main() {
println!("=== RESP2 ===\n");
let data = Bytes::from("+OK\r\n");
let (frame, _) = resp_rs::resp2::parse_frame(data).unwrap();
println!("Simple string: {frame:?}");
let data = Bytes::from("*3\r\n$3\r\nSET\r\n$5\r\nmykey\r\n$7\r\nmyvalue\r\n");
let (frame, _) = resp_rs::resp2::parse_frame(data).unwrap();
println!("SET command: {frame:?}");
let frame = resp_rs::resp2::Frame::Array(Some(vec![
resp_rs::resp2::Frame::BulkString(Some(Bytes::from("GET"))),
resp_rs::resp2::Frame::BulkString(Some(Bytes::from("mykey"))),
]));
let wire = resp_rs::resp2::frame_to_bytes(&frame);
println!("Serialized: {:?}", String::from_utf8_lossy(&wire));
println!("\n=== RESP3 ===\n");
let cases: &[(&str, &[u8])] = &[
("Null", b"_\r\n"),
("Boolean", b"#t\r\n"),
("Double", b",3.14159\r\n"),
(
"Big number",
b"(3492890328409238509324850943850943825024385\r\n",
),
("Verbatim", b"=15\r\ntxt:hello world\r\n"),
];
for (label, raw) in cases {
let (frame, _) = resp_rs::resp3::parse_frame(Bytes::from(*raw)).unwrap();
println!("{label:12}: {frame:?}");
}
let data = Bytes::from("%2\r\n+name\r\n$5\r\nAlice\r\n+age\r\n:30\r\n");
let (frame, _) = resp_rs::resp3::parse_frame(data).unwrap();
println!("{:12}: {frame:?}", "Map");
println!("\n=== Streaming parser ===\n");
let mut parser = resp_rs::resp2::Parser::new();
parser.feed(Bytes::from("*2\r\n$4\r\nPIN"));
println!(
"Fed partial data, buffered {} bytes",
parser.buffered_bytes()
);
println!("Next frame: {:?}", parser.next_frame().unwrap());
parser.feed(Bytes::from("G\r\n$0\r\n\r\n"));
println!("Fed remaining data");
let frame = parser.next_frame().unwrap().unwrap();
println!("Got frame: {frame:?}");
}