47 lines
1.4 KiB
Rust
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),
|
|
}
|
|
}
|