You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写可反序列化为含结构体枚举的结构体的TOML文件?

解决Rust中枚举结构体成员的多行TOML反序列化问题

针对你定义的AOrB枚举和Config结构体,要实现多行TOML的正确反序列化,核心是遵循serde对枚举的TOML序列化规则:枚举字段必须是一个仅包含单个子表的结构,子表的键对应枚举变体的名称。

正确的多行TOML写法

1. 使用A单元变体时

z = "你的字符串值"

[a_or_b.A]
# 单元变体无需额外字段,保留空表即可

2. 使用B结构体变体时

z = "长文本值可以直接写,或者用TOML多行语法"

[a_or_b.B]
b1 = "超长的b1内容,这里可以直接换行写,或者用TOML的多行字符串语法"
b2 = """
这是一个跨多行的字符串
无需用反斜杠续行
适合内容较长的场景
"""

错误写法分析

你遇到的enum table must contain exactly one table错误,通常是因为错误地将B的字段直接放在a_or_b的表下,比如:

# 错误示例,会触发报错
z = "test"
[a_or_b]
b1 = "x"
b2 = "y"

这种写法会让serde将a_or_b识别为普通结构体,而非枚举,因此不符合预期的枚举反序列化规则。

补充:TOML多行字符串技巧

如果字段值特别长,TOML支持两种多行字符串格式:

  • 双引号""":会保留换行符,支持转义字符
  • 单引号''':保留换行符,但不解析转义字符,适合包含双引号的内容

内容的提问来源于stack exchange,提问作者MetroWind

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 08:25:15