Skip to content
Snippets Groups Projects
Unverified Commit b3a39c77 authored by Emre's avatar Emre Committed by GitHub
Browse files

Make id String in the JSON RPC request/response

JSONRPC specs suggests that IDs can be strings or numbers. https://www.jsonrpc.org/specification
parent b3b71441
No related branches found
No related tags found
1 merge request!1New caching system plus various other fixes
...@@ -51,7 +51,7 @@ enum APICall { ...@@ -51,7 +51,7 @@ enum APICall {
#[derive(Serialize, Deserialize, Debug)] #[derive(Serialize, Deserialize, Debug)]
struct APIRequest { struct APIRequest {
jsonrpc: String, jsonrpc: String,
id: u32, id: String,
method: String, method: String,
#[serde(skip_serializing_if = "Option::is_none")] #[serde(skip_serializing_if = "Option::is_none")]
params: Option<Value>, params: Option<Value>,
...@@ -79,7 +79,7 @@ impl Serialize for ErrorField { ...@@ -79,7 +79,7 @@ impl Serialize for ErrorField {
#[derive(Serialize, Deserialize, Debug)] #[derive(Serialize, Deserialize, Debug)]
struct ErrorStructure { struct ErrorStructure {
jsonrpc: String, jsonrpc: String,
id: u32, id: String,
code: i32, code: i32,
message: String, message: String,
error: ErrorField, error: ErrorField,
...@@ -95,7 +95,7 @@ enum Endpoints { ...@@ -95,7 +95,7 @@ enum Endpoints {
struct APICallResponse { struct APICallResponse {
jsonrpc: String, jsonrpc: String,
result: Value, result: Value,
id: u32, id: String,
cached: bool, cached: bool,
} }
...@@ -138,7 +138,7 @@ async fn handle_request( ...@@ -138,7 +138,7 @@ async fn handle_request(
let new_params = params[2].clone(); let new_params = params[2].clone();
let new_request = APIRequest { let new_request = APIRequest {
jsonrpc: "2.0".to_string(), jsonrpc: "2.0".to_string(),
id: request.id, id: request.id.clone(),
method: format_new_method, method: format_new_method,
params: Some(new_params), params: Some(new_params),
}; };
...@@ -216,7 +216,7 @@ async fn handle_request( ...@@ -216,7 +216,7 @@ async fn handle_request(
return Ok(APICallResponse { return Ok(APICallResponse {
jsonrpc: request.jsonrpc.clone(), jsonrpc: request.jsonrpc.clone(),
result: result["result"].clone(), result: result["result"].clone(),
id: request.id, id: request.id.clone(),
cached: true, cached: true,
}); });
} }
...@@ -235,7 +235,7 @@ async fn handle_request( ...@@ -235,7 +235,7 @@ async fn handle_request(
error_message.push_str(&endpoints.to_string()); error_message.push_str(&endpoints.to_string());
return Err(ErrorStructure { return Err(ErrorStructure {
jsonrpc: request.jsonrpc.clone(), jsonrpc: request.jsonrpc.clone(),
id : request.id, id : request.id.clone(),
code: -32700, code: -32700,
message: format!("Unable to send request to endpoint."), message: format!("Unable to send request to endpoint."),
error: ErrorField::Message(error_message), error: ErrorField::Message(error_message),
...@@ -247,7 +247,7 @@ async fn handle_request( ...@@ -247,7 +247,7 @@ async fn handle_request(
Err(err) => { Err(err) => {
return Err(ErrorStructure { return Err(ErrorStructure {
jsonrpc: request.jsonrpc.clone(), jsonrpc: request.jsonrpc.clone(),
id : request.id, id : request.id.clone(),
code: -32600, code: -32600,
message: format!("Received an invalid response from the endpoint."), message: format!("Received an invalid response from the endpoint."),
error: ErrorField::Message(err.to_string()), error: ErrorField::Message(err.to_string()),
...@@ -259,7 +259,7 @@ async fn handle_request( ...@@ -259,7 +259,7 @@ async fn handle_request(
Err(err) => { Err(err) => {
return Err(ErrorStructure { return Err(ErrorStructure {
jsonrpc: request.jsonrpc.clone(), jsonrpc: request.jsonrpc.clone(),
id : request.id, id : request.id.clone(),
code: -32602, code: -32602,
message: format!("Unable to parse endpoint data."), message: format!("Unable to parse endpoint data."),
error: ErrorField::Message(err.to_string()), error: ErrorField::Message(err.to_string()),
...@@ -269,7 +269,7 @@ async fn handle_request( ...@@ -269,7 +269,7 @@ async fn handle_request(
if json_body["error"].is_object() { if json_body["error"].is_object() {
return Err(ErrorStructure { return Err(ErrorStructure {
jsonrpc: request.jsonrpc.clone(), jsonrpc: request.jsonrpc.clone(),
id : request.id, id : request.id.clone(),
code: -32700, code: -32700,
message: format!("Endpoint returned an error."), message: format!("Endpoint returned an error."),
error: ErrorField::Object(json_body["error"].clone()), error: ErrorField::Object(json_body["error"].clone()),
...@@ -294,7 +294,7 @@ async fn handle_request( ...@@ -294,7 +294,7 @@ async fn handle_request(
Ok(APICallResponse { Ok(APICallResponse {
jsonrpc: request.jsonrpc.clone(), jsonrpc: request.jsonrpc.clone(),
result: json_body["result"].clone(), result: json_body["result"].clone(),
id: request.id, id: request.id.clone(),
cached: false, cached: false,
}) })
} }
...@@ -315,7 +315,7 @@ async fn api_call( ...@@ -315,7 +315,7 @@ async fn api_call(
Err(_) => { Err(_) => {
return HttpResponse::InternalServerError().json(ErrorStructure { return HttpResponse::InternalServerError().json(ErrorStructure {
jsonrpc: "2.0".to_string(), jsonrpc: "2.0".to_string(),
id: 0, id: "0".to_string(),
code: -32000, code: -32000,
message: "Internal Server Error".to_string(), message: "Internal Server Error".to_string(),
error: ErrorField::Message("Invalid Cloudflare Proxy Header.".to_string()), error: ErrorField::Message("Invalid Cloudflare Proxy Header.".to_string()),
...@@ -343,7 +343,7 @@ async fn api_call( ...@@ -343,7 +343,7 @@ async fn api_call(
if requests.len() > 100 { if requests.len() > 100 {
return HttpResponse::InternalServerError().json(ErrorStructure { return HttpResponse::InternalServerError().json(ErrorStructure {
jsonrpc: "2.0".to_string(), jsonrpc: "2.0".to_string(),
id: 0, id: "0".to_string(),
code: -32600, code: -32600,
message: "Request parameter error.".to_string(), message: "Request parameter error.".to_string(),
error: ErrorField::Message( error: ErrorField::Message(
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment