Crates.io | dxr |
lib.rs | dxr |
version | 0.6.3 |
source | src |
created_at | 2022-02-04 21:07:45.825472 |
updated_at | 2024-07-13 18:51:46.583075 |
description | Declarative XML-RPC |
homepage | |
repository | https://github.com/ironthree/dxr |
max_upload_size | |
id | 527081 |
size | 158,396 |
The dxr project provides crates for writing XML-RPC API clients and servers in Rust. The goal is to match the XML-RPC Specification -- even though some parts of it are under-specified -- and provide optional support for some common non-standard extensions.
dateTime.iso8861
value typebase64
type<i8>
(64-bit unsigned integer) and <nil/>
valuesreqwest
) and servers (with axum
)All conversion methods (both between Rust XML-RPC values and XML strings, and between
Rust primitives and Rust XML-RPC values) are extensively checked for correctness by unit
tests and property-based tests using quickcheck
.
Only valid UTF-8 is currently supported in both XML-RPC requests and responses. Support for other encodings can be handled manually by implementing a custom client or server which handles other encodings transparently.
dxr
: implementation of XML-RPC types, conversion traits between XML-RPC types and
Rust types, and (de)serialization implementations for converting between XML strings and
XML-RPC valuesdxr_derive
: TryFromDXR
and TryToDxr
derive macros for custom data typesdxr_client
: XML-RPC client implementation using reqwest
dxr_server
: generic XML-RPC server functionalitySearching for xml-rpc
on crates.io yields a few results, but they all did not fit my
use case, or were very hard to use. Either they didn't support implementing both clients
and servers, or no easy conversion methods from Rust types to XML-RPC types was available.
And none of the crates supports (de)serializing both Rust types and custom user-defined
types by using derive macros.
Because of this state of the XML-RPC crate ecosystem in Rust, the defining purpose of the
dxr
crate is that it should be opinionated, but also very easy to use, for implementing
both XML-RPC clients and servers, with first-class support for (de)serializing custom
types, in addition to built-in support for transparently converting Rust primitives to
XML-RPC values.
Additionally, the crate is built on top of best-in-class (in my opinion) libraries for
(de)serializing XML (quick-xml
), HTTP client side (reqwest
), HTTP server side
(axum
).