use prost::Message;
use dyn_encoding::{WireTypeId, WireValue};
#[derive(Clone, Eq, PartialEq, Message)]
pub struct RpbMapRedReq {
#[prost(bytes = "vec", tag = "1")]
pub request: Vec<u8>,
#[prost(bytes = "vec", tag = "2")]
pub content_type: Vec<u8>,
}
impl WireValue for RpbMapRedReq {
fn wire_type_id() -> WireTypeId {
WireTypeId::new("riak.RpbMapRedReq")
}
}
#[derive(Clone, Eq, PartialEq, Message)]
pub struct RpbMapRedResp {
#[prost(uint32, optional, tag = "1")]
pub phase: Option<u32>,
#[prost(bytes = "vec", optional, tag = "2")]
pub response: Option<Vec<u8>>,
#[prost(bool, optional, tag = "3")]
pub done: Option<bool>,
}
impl WireValue for RpbMapRedResp {
fn wire_type_id() -> WireTypeId {
WireTypeId::new("riak.RpbMapRedResp")
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn req_round_trips() {
let req = RpbMapRedReq {
request: b"{\"inputs\":[],\"query\":[]}".to_vec(),
content_type: b"application/json".to_vec(),
};
let bytes = req.encode_to_vec();
let back = RpbMapRedReq::decode(bytes.as_slice()).expect("decode");
assert_eq!(back, req);
}
#[test]
fn resp_round_trips_with_all_fields() {
let resp = RpbMapRedResp {
phase: Some(1),
response: Some(b"[42]".to_vec()),
done: Some(true),
};
let bytes = resp.encode_to_vec();
let back = RpbMapRedResp::decode(bytes.as_slice()).expect("decode");
assert_eq!(back, resp);
}
#[test]
fn resp_round_trips_with_only_done() {
let resp = RpbMapRedResp {
phase: None,
response: None,
done: Some(true),
};
let bytes = resp.encode_to_vec();
let back = RpbMapRedResp::decode(bytes.as_slice()).expect("decode");
assert_eq!(back, resp);
}
#[test]
fn empty_req_is_decodable() {
let req = RpbMapRedReq::default();
let bytes = req.encode_to_vec();
let back = RpbMapRedReq::decode(bytes.as_slice()).expect("decode");
assert_eq!(back, req);
}
#[test]
fn wire_type_ids_are_stable() {
assert_eq!(
RpbMapRedReq::wire_type_id(),
WireTypeId::new("riak.RpbMapRedReq")
);
assert_eq!(
RpbMapRedResp::wire_type_id(),
WireTypeId::new("riak.RpbMapRedResp")
);
}
}