Files
aria2-rust-pro/crates/aria2-rust-pro-rpc/src/dispatcher/faults.rs
T

47 lines
1.4 KiB
Rust

use std::collections::BTreeMap;
use crate::{
model::{RpcError, RpcValue},
xmlrpc::{XmlRpcMember, XmlRpcValue},
};
/// Converts an RPC error into the JSON-RPC error-object shape used by multicall.
pub(super) fn rpc_error_value(error: RpcError) -> RpcValue {
RpcValue::Object(BTreeMap::from([
(
"code".to_owned(),
RpcValue::Number(i64::from(error.code as i32)),
),
("message".to_owned(), RpcValue::String(error.message)),
]))
}
/// Converts an RPC error into the XML-RPC fault-value shape used by multicall.
pub(super) fn xmlrpc_error_value(error: RpcError) -> XmlRpcValue {
xmlrpc_fault_value(xmlrpc_fault_from_error(error))
}
/// Serializes an XML-RPC fault struct into a value payload.
pub(super) fn xmlrpc_fault_value(fault: crate::xmlrpc::XmlRpcFault) -> XmlRpcValue {
XmlRpcValue::Struct(vec![
XmlRpcMember {
name: "faultCode".to_owned(),
value: XmlRpcValue::Int(fault.code),
},
XmlRpcMember {
name: "faultString".to_owned(),
value: XmlRpcValue::String(fault.message),
},
])
}
/// Wraps an RPC error in the XML-RPC fault envelope expected by aria2 clients.
pub(super) fn xmlrpc_fault_from_error(error: RpcError) -> crate::xmlrpc::XmlRpcFault {
let message = error.message.clone();
crate::xmlrpc::XmlRpcFault {
code: 1,
message,
error: Some(error),
}
}