1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
use async_trait::async_trait;
use bonsaidb_core::{
custom_api::CustomApi,
keyvalue::KeyValue,
networking::{DatabaseRequest, DatabaseResponse, Request, Response},
};
#[async_trait]
impl<A> KeyValue for super::RemoteDatabase<A>
where
A: CustomApi,
{
async fn execute_key_operation(
&self,
op: bonsaidb_core::keyvalue::KeyOperation,
) -> Result<bonsaidb_core::keyvalue::Output, bonsaidb_core::Error> {
match self
.client
.send_request(Request::Database {
database: self.name.to_string(),
request: DatabaseRequest::ExecuteKeyOperation(op),
})
.await?
{
Response::Database(DatabaseResponse::KvOutput(output)) => Ok(output),
Response::Error(err) => Err(err),
other => Err(bonsaidb_core::Error::Networking(
bonsaidb_core::networking::Error::UnexpectedResponse(format!("{:?}", other)),
)),
}
}
}