Skip to content

Commit cf375f0

Browse files
committed
fix: merging tls and non-tls functions
1 parent f257e41 commit cf375f0

2 files changed

Lines changed: 35 additions & 51 deletions

File tree

src/engine/mod.rs

Lines changed: 34 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
use colored::Colorize;
22
use rustls::OwnedTrustAnchor;
33
use serde::{Deserialize, Serialize};
4+
45
use std::fs::File;
56
use std::io::BufReader;
67
use std::path::Path;
78
use std::sync::Arc;
8-
use tokio::io::{AsyncReadExt, AsyncWriteExt};
9+
10+
use tokio::io::{AsyncRead, AsyncReadExt, AsyncWrite, AsyncWriteExt};
911
use tokio::net::TcpStream;
1012
use tokio_rustls::{client::TlsStream, TlsConnector};
1113

@@ -109,8 +111,7 @@ impl Rustbase {
109111
}
110112
}
111113

112-
pub async fn request(&mut self, request: Request) {
113-
let client = self.client.as_mut().unwrap();
114+
pub async fn request(&mut self, request: Request, tls: bool) {
114115
match request {
115116
Request::Query(query) => {
116117
let doc = bson::doc! {
@@ -120,15 +121,21 @@ impl Rustbase {
120121
},
121122
};
122123

123-
client
124-
.write_all(&bson::to_vec(&doc).unwrap())
124+
let response = if !tls {
125+
Rustbase::send_and_receive(
126+
self.client.as_mut().unwrap(),
127+
bson::to_vec(&doc).unwrap(),
128+
)
125129
.await
126-
.unwrap();
127-
128-
let mut buf = vec![0; BUFFER_SIZE];
129-
let n = client.read(&mut buf).await.unwrap();
130+
} else {
131+
Rustbase::send_and_receive(
132+
self.tls_client.as_mut().unwrap(),
133+
bson::to_vec(&doc).unwrap(),
134+
)
135+
.await
136+
};
130137

131-
let doc: Response = bson::from_slice(&buf[..n]).unwrap();
138+
let doc: Response = bson::from_slice(&response).unwrap();
132139

133140
match doc.status {
134141
Status::Ok => {
@@ -152,47 +159,28 @@ impl Rustbase {
152159
}
153160
}
154161

155-
pub async fn request_tls(&mut self, request: Request) {
156-
let client = self.tls_client.as_mut().unwrap();
157-
match request {
158-
Request::Query(query) => {
159-
let doc = bson::doc! {
160-
"body": {
161-
"query": query,
162-
"database": self.database.clone(),
163-
},
164-
};
165-
166-
client
167-
.write_all(&bson::to_vec(&doc).unwrap())
168-
.await
169-
.unwrap();
170-
171-
let mut buf = vec![0; BUFFER_SIZE];
172-
let n = client.read(&mut buf).await.unwrap();
162+
async fn send_and_receive<IO>(client: &mut IO, data: Vec<u8>) -> Vec<u8>
163+
where
164+
IO: AsyncRead + AsyncWrite + Unpin,
165+
{
166+
let mut buffer = vec![0; BUFFER_SIZE];
167+
let mut final_buffer = Vec::new();
173168

174-
let doc: Response = bson::from_slice(&buf[..n]).unwrap();
169+
client.write_all(&data).await.unwrap();
175170

176-
match doc.status {
177-
Status::Ok => {
178-
if doc.body.is_some() {
179-
println!("{}", doc.body.unwrap());
180-
} else {
181-
println!("{} Ok", "[Success]".green());
182-
}
183-
}
184-
185-
Status::SyntaxError => {
186-
println!("{}", "[Error]".red());
187-
println!("{}", doc.message.unwrap());
188-
}
171+
while let Ok(n) = client.read(&mut buffer).await {
172+
if n == 0 {
173+
println!("[Wirewave] connection closed");
174+
break;
175+
}
189176

190-
_ => {
191-
println!("{} {}", "[Error]".red(), status_string(doc.status));
192-
}
193-
}
177+
final_buffer.extend_from_slice(&buffer[..n]);
178+
if n < BUFFER_SIZE {
179+
break;
194180
}
195181
}
182+
183+
final_buffer
196184
}
197185
}
198186

src/main.rs

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -122,11 +122,7 @@ async fn main() -> Result<()> {
122122
}
123123

124124
if !line.is_empty() {
125-
if args.tls {
126-
client.request_tls(engine::Request::Query(line)).await;
127-
} else {
128-
client.request(engine::Request::Query(line)).await;
129-
}
125+
client.request(engine::Request::Query(line), args.tls).await;
130126
}
131127
}
132128
Err(ReadlineError::Interrupted) => {

0 commit comments

Comments
 (0)