3 个不稳定版本

0.2.0 2024年4月29日
0.1.1 2023年7月25日
0.1.0 2022年1月9日

编码 中排名 347

Download history 363/week @ 2024-05-03 143/week @ 2024-05-10 155/week @ 2024-05-17 132/week @ 2024-05-24 187/week @ 2024-05-31 169/week @ 2024-06-07 104/week @ 2024-06-14 81/week @ 2024-06-21 66/week @ 2024-06-28 111/week @ 2024-07-05 112/week @ 2024-07-12 154/week @ 2024-07-19 57/week @ 2024-07-26 105/week @ 2024-08-02 48/week @ 2024-08-09 136/week @ 2024-08-16

每月下载量 366
用于 testcontainers

MIT 许可证

41KB
903

Serde Java Properties

Docs License Version

Java Properties 是一种简单、面向行的格式,用于指定在 Java 程序中使用的键值资源。此 crate 提供了基本(反)序列化器,用于与 serde 启用的数据结构一起使用。

field_a: a value
field_b: 100
field_c: true

实现

内部,使用 java-properties crate 在输入流中迭代键值对,并将键值对写入输出流。

反序列化结构体

通常,该格式是无类型的,即它将反序列化为从 StringString 的映射。此 crate 使用整数、浮点数和布尔值的默认 std::str::FromStr 实现,为之上提供有类型接口。这样,可以加载属性文件中的简单结构或实现 serde::Deserialize 的映射。

use serde::Deserialize;

#[derive(Debug, PartialEq, Deserialize)]
struct Data {
    field_a: String,
    field_b: usize,
    field_c: bool,
}
let text = "
field_a: a value
field_b: 100
field_c: true
";

let data: Data = serde_java_properties::from_str(text).unwrap();

assert_eq!(data.field_a, "a value");
assert_eq!(data.field_b, 100);
assert_eq!(data.field_c, true);

序列化结构体

序列化使用每个原始类型的默认 std::fmt::Display 实现。

在顶级 Serializer 中支持

  • 映射
  • 结构体
  • 结构体变体的枚举
  • 所有这些的可选

在字段级别 Serializer 中支持

  • 整数(i8i16i32i64u8u16u32u64
  • 浮点数(f32f64
  • 布尔值(truefalse
  • 字符串
  • 单元变体的枚举
  • 所有这些的可选
use serde::Serialize;

#[derive(Debug, PartialEq, Serialize)]
struct Data {
    field_a: String,
    field_b: usize,
    field_c: bool,
}

let data = Data { field_a: "value".to_string(), field_b: 100, field_c: true };
let string = serde_java_properties::to_string(&data).unwrap();

assert_eq!(string, "field_a=value\nfield_b=100\nfield_c=true\n");

替代方案

类似于java-properties crate本身,这个crate应该与Java中指定的格式完全匹配,如Java所述。如果您需要一个更强大的配置语法,支持嵌套结构,您可能应该使用HOCON

依赖项

约7MB
约181K SLoC