59 lines
1.6 KiB
Rust
59 lines
1.6 KiB
Rust
use serde_json::Value;
|
|
|
|
use crate::{check_err, mk_payload, Body, RpcResult, Runner};
|
|
|
|
#[derive(Debug, Default, Clone)]
|
|
pub struct Kv {
|
|
pub service: &'static str,
|
|
}
|
|
|
|
impl Kv {
|
|
pub fn seq() -> Self {
|
|
Kv { service: "seq-kv" }
|
|
}
|
|
|
|
pub fn lin() -> Self {
|
|
Kv { service: "lin-kv" }
|
|
}
|
|
|
|
pub fn lww() -> Self {
|
|
Kv { service: "lww-kv" }
|
|
}
|
|
|
|
pub fn read(&self, runner: &Runner, key: &str) -> RpcResult {
|
|
let payload = mk_payload(&[("key", key.into())]);
|
|
let body = Body::from_type("read").with_payload(payload);
|
|
let rx = runner.rpc(self.service, body);
|
|
let msg = rx.recv().unwrap();
|
|
check_err(&msg)?;
|
|
Ok(Some(msg.body.payload.get("value").unwrap().to_owned()))
|
|
}
|
|
|
|
pub fn write(&self, runner: &Runner, key: &str, val: Value) -> RpcResult {
|
|
let payload = mk_payload(&[("key", key.into()), ("value", val)]);
|
|
let body = Body::from_type("write").with_payload(payload);
|
|
let msg = runner.rpc(self.service, body).recv().unwrap();
|
|
check_err(&msg)?;
|
|
Ok(None)
|
|
}
|
|
|
|
pub fn cas(
|
|
&self,
|
|
runner: &Runner,
|
|
key: &str,
|
|
from: Value,
|
|
to: Value,
|
|
create: bool,
|
|
) -> RpcResult {
|
|
let payload = mk_payload(&[
|
|
("key", key.into()),
|
|
("from", from),
|
|
("to", to),
|
|
("create_if_not_exists", create.into()),
|
|
]);
|
|
let body = Body::from_type("cas").with_payload(payload);
|
|
let msg = runner.rpc(self.service, body).recv().unwrap();
|
|
check_err(&msg)?;
|
|
Ok(None)
|
|
}
|
|
}
|