18个版本

0.6.3 2024年7月13日
0.6.2 2024年1月28日
0.6.1 2023年9月21日
0.6.0 2023年7月28日
0.3.1 2022年2月19日

#342编码

Download history 294/week @ 2024-04-24 60/week @ 2024-05-01 84/week @ 2024-05-08 168/week @ 2024-05-15 158/week @ 2024-05-22 365/week @ 2024-05-29 328/week @ 2024-06-05 269/week @ 2024-06-12 340/week @ 2024-06-19 368/week @ 2024-06-26 591/week @ 2024-07-03 698/week @ 2024-07-10 368/week @ 2024-07-17 633/week @ 2024-07-24 780/week @ 2024-07-31 263/week @ 2024-08-07

2,126 每月下载量
用于 3 crates

MIT/Apache

145KB
4K SLoC

DXR:声明式XML-RPC

crates.io crates.io crates.io docs.rs

dxr项目提供了用于在Rust中编写XML-RPC API客户端和服务器crate。目标是匹配XML-RPC规范 -- 尽管其中一些部分未明确规定 -- 并提供对某些常见非标准扩展的可选支持。

功能

  • 支持将XML-RPC XML字符串转换为强类型Rust值的序列化和反序列化
  • XML-RPC值与Rust原语、数组、切片、字节数组、元组、哈希表和自定义结构体之间的转换特性(通过derive宏)
  • 内置字符串参数的XML转义和解转义
  • 内置对dateTime.iso8861值类型的日期和时间解析
  • 内置字节数组的base64编码和解码(对于base64类型)
  • 可选支持(非标准)的<i8>(64位无符号整数)和<nil/>
  • 支持任意方法调用参数类型,无需首先转换值(最多支持8个参数;如需支持更多,可进行实现)
  • 对XML-RPC客户端(使用reqwest)和服务器(使用axum)的基本支持

所有转换方法(Rust XML-RPC值与XML字符串之间,以及Rust原语与Rust XML-RPC值之间的转换)都通过单元测试和基于属性的测试(使用quickcheck)进行了广泛的正确性检查。

限制

目前只支持XML-RPC请求和响应中的有效UTF-8。其他编码的支持可以通过手动实现一个处理其他编码的自定义客户端或服务器来处理。

组件

  • dxr:XML-RPC类型的实现、XML-RPC类型与Rust类型之间的转换特性、以及将XML字符串与XML-RPC值之间进行转换的序列化和反序列化实现
  • dxr_deriveTryFromDXRTryToDxr派生宏,用于自定义数据类型
  • dxr_client:使用reqwest实现的XML-RPC客户端
  • dxr_server:通用XML-RPC服务器功能

为什么还需要另一个XML-RPC的crate?

在crates.io上搜索xml-rpc会得到一些结果,但它们都不符合我的使用情况,或者非常难以使用。要么不支持同时实现客户端和服务器,要么没有从Rust类型到XML-RPC类型的简单转换方法。而且没有任何crate支持使用派生宏将Rust类型和自定义用户定义的类型进行(反)序列化。

目标

鉴于Rust中XML-RPC crate生态系统的这种状态,dxr crate的明确目的是,它应该是具有指导性的,同时也非常易于使用,用于实现XML-RPC客户端和服务器,除了内置的将Rust原始类型转换为XML-RPC值的支持外,还提供了对自定义类型(反)序列化的第一级支持。

此外,该crate构建在(据我所知)最佳(反)序列化XML的库(quick-xml)、HTTP客户端(reqwest)、HTTP服务器端(axum)之上。

依赖关系

~2.7–4MB
~69K SLoC