Fix HTTP string errors deserialization (#1821)
This commit is contained in:
parent
a35ed83c88
commit
8eac52315b
3 changed files with 39 additions and 6 deletions
|
@ -179,11 +179,32 @@ async fn query(request: RequestBuilder) -> Result<QueryResponse> {
|
|||
info!(target: LOG, "{request:?}");
|
||||
let response = request.send().await?.error_for_status()?;
|
||||
let bytes = response.bytes().await?;
|
||||
let responses: Vec<HttpQueryResponse> =
|
||||
bung::from_slice(&bytes).map_err(|error| Error::ResponseFromBinary {
|
||||
let responses = match bung::from_slice::<Vec<HttpQueryResponse>>(&bytes) {
|
||||
Ok(responses) => responses,
|
||||
Err(_) => {
|
||||
let vec =
|
||||
bung::from_slice::<Vec<(String, Status, String)>>(&bytes).map_err(|error| {
|
||||
Error::ResponseFromBinary {
|
||||
binary: bytes.to_vec(),
|
||||
error,
|
||||
}
|
||||
})?;
|
||||
let mut responses = Vec::with_capacity(vec.len());
|
||||
for (time, status, data) in vec {
|
||||
let (result, detail) = match status {
|
||||
Status::Ok => (Value::from(data), String::new()),
|
||||
Status::Err => (Value::None, data),
|
||||
};
|
||||
responses.push(HttpQueryResponse {
|
||||
time,
|
||||
status,
|
||||
result,
|
||||
detail,
|
||||
});
|
||||
}
|
||||
responses
|
||||
}
|
||||
};
|
||||
let mut map = IndexMap::<usize, QueryResult>::with_capacity(responses.len());
|
||||
for (index, response) in responses.into_iter().enumerate() {
|
||||
match response.status {
|
||||
|
|
|
@ -5,6 +5,8 @@ mod api_integration {
|
|||
use serde_json::json;
|
||||
use std::borrow::Cow;
|
||||
use std::ops::Bound;
|
||||
use surrealdb::error::Api as ApiError;
|
||||
use surrealdb::error::Db as DbError;
|
||||
use surrealdb::opt::auth::Database;
|
||||
use surrealdb::opt::auth::Jwt;
|
||||
use surrealdb::opt::auth::Namespace;
|
||||
|
@ -16,6 +18,7 @@ mod api_integration {
|
|||
use surrealdb::sql::statements::CommitStatement;
|
||||
use surrealdb::sql::thing;
|
||||
use surrealdb::sql::Thing;
|
||||
use surrealdb::Error;
|
||||
use surrealdb::Surreal;
|
||||
use ulid::Ulid;
|
||||
|
||||
|
|
|
@ -9,7 +9,16 @@ async fn connect() {
|
|||
#[tokio::test]
|
||||
async fn yuse() {
|
||||
let db = new_db().await;
|
||||
db.use_ns(NS).use_db(Ulid::new().to_string()).await.unwrap();
|
||||
let item = Ulid::new().to_string();
|
||||
let error = db.create::<Vec<()>>(item.as_str()).await.unwrap_err();
|
||||
match error {
|
||||
// Local engines return this error
|
||||
Error::Db(DbError::NsEmpty) => {}
|
||||
// Remote engines return this error
|
||||
Error::Api(ApiError::Query(error)) if error.contains("Specify a namespace to use") => {}
|
||||
error => panic!("{:?}", error),
|
||||
}
|
||||
db.use_ns(NS).use_db(item).await.unwrap();
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
|
|
Loading…
Reference in a new issue