1use std::error::Error;
2use std::net::TcpStream;
3
4use packetio::{PacketReceiver, PacketSender};
5use rustacean_db_protocol::{Request, Response};
6
7pub mod blocking {
8 use std::sync::Arc;
9 use super::*;
10
11 pub fn get(ip: &str, key: &str) -> Result<Option<Arc<[u8]>>, Box<dyn Error>> {
12 let mut connection = TcpStream::connect(ip)?;
13 connection.send_packet(Request::Get(key.to_string()))?;
14 let resp: Response = connection.recv_packet()?;
15 match resp {
16 Response::Value(v) => Ok(v),
17 _ => Err("Unexpected response".into()),
18 }
19 }
20
21 pub fn post(ip: &str, key: &str, value: Vec<u8>) -> Result<(), Box<dyn Error>> {
22 let mut connection = TcpStream::connect(ip)?;
23
24 let arc_value: Arc<[u8]> = Arc::from(value.into_boxed_slice());
26
27 connection.send_packet(Request::Post(key.to_string(), arc_value))?;
28 let resp: Response = connection.recv_packet()?;
29 match resp {
30 Response::Ack(true) => Ok(()),
31 _ => Err("Server did not acknowledge".into()),
32 }
33 }
34}