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
10 use super::*;
11
12use std::error::Error;
13use std::net::TcpStream;
14
15use packetio::{PacketReceiver, PacketSender};
16use rustacean_db_protocol::{Request, Response};
17
18pub mod blocking {
19 use std::sync::Arc;
20 use super::*;
21
22 pub fn get(ip: &str, key: &str) -> Result<Option<Arc<[u8]>>, Box<dyn Error>> {
23 let mut connection = TcpStream::connect(ip)?;
24 connection.send_packet(Request::Get(key.to_string()))?;
25 let resp: Response = connection.recv_packet()?;
26 match resp {
27 Response::Value(v) => Ok(v),
28 _ => Err("Unexpected response".into()),
29 }
30 }
31
32 pub fn post(ip: &str, key: &str, value: Vec<u8>) -> Result<(), Box<dyn Error>> {
33 let mut connection = TcpStream::connect(ip)?;
34
35 let arc_value: Arc<[u8]> = Arc::from(value.into_boxed_slice());
37
38 connection.send_packet(Request::Post(key.to_string(), arc_value))?;
39 let resp: Response = connection.recv_packet()?;
40 match resp {
41 Response::Ack(true) => Ok(()),
42 _ => Err("Server did not acknowledge".into()),
43 }
44 }
45}
46
47
48 pub fn post(ip: &str, key: &str, value: Vec<u8>) -> Result<(), Box<dyn Error>> {
49 let mut connection = TcpStream::connect(ip)?;
50 connection.send_packet(Request::Post(key.to_string(), Arc::from(value.as_slice())))?;
51 let resp: Response = connection.recv_packet()?;
52 match resp {
53 Response::Ack(true) => Ok(()),
54 _ => Err("Server did not acknowledge".into()),
55 }
56 }
57}