2 个不稳定版本
0.2.0 | 2023 年 11 月 25 日 |
---|---|
0.1.0 | 2023 年 11 月 22 日 |
#2544 在 解析器实现
27KB
574 行
将更新更多更改
当前正在对序列化器进行更改,反序列化器的工作仍在 TODO 中
Serde YANG
Serde 是一个用于 序列化 和 反序列化 的 Rust 库。serde YANG 用于 YANG 建模语言的序列化和反序列化。
[dependencies]
serde_yang = "0.1.0"
YANG 是一种能够在一个资源中传递一个或多个文档的数据序列化格式。该格式通常不用于传输实际数据,而是用于建模将通过其他格式(例如 JSON、XML 等)发送的数据。
该语言在网络世界中得到广泛应用,用于建模 NETCONF 和 RESTCONF 中的数据。
YANG 的一个基本数据模型示例
leaf host-name {
type string;
description "Hostname for this system";
}
通过序列化数据结构创建 YANG
让我们看看如何将 Rust 数据类型序列化为 YANG 字符串
use serde_yang::ser::serializer::to_string;
use serde::Serialize;
#[derive(Serialize, Debug)]
#[serde(rename="leaf--message")]
struct MessageLeaf {
#[serde(name="type--")]
message_type: String,
#[serde(name="description--")]
message_description: String
}
fn main() {
let leaf = MessageLeaf {
message_type: String::from("string"),
message_description: String::from(r#"This field will be used to hold the message"#)
};
println!("{}", to_string(&leaf).unwrap().as_str());
/*
* Expected:
* leaf message {
* type string;
* description "This field will be used to hold the message";
* }
*/
}
一个 YANG 节点示例
让我们看看对 serde_yang 操作非常重要的几行
#[serde(rename="leaf--message")]
此字段为我们声明了一个 YANG 叶子节点。叶子节点将按照以下形式定义:leaf--{nodename}
,其中 nodename 是节点的名称。这将导致创建 leaf nodename {
叶子节点是 YANG 中定义的节点的示例之一。我们还有 YANG 定义的多种节点。有关 serde_yang 支持的所有字段的列表,请参阅 这些节点类型。
节点可能包含单个字段,也可能包含其他节点。
一个 YANG 字段示例
虽然节点包含字段或其他节点,但字段只包含有关它们自己的信息。它们可以定义类型、描述等。
在上面的示例中,我们定义了以下类型
#[serde(name="type--")]
message_type: String,
#[serde(name="description--")]
message_description: String
您可能会注意到,与 leaf--{nodename}
不同,这里我们只有 type
或 description--
。这是 serde YANG 中字段的特性。目前支持的字段是 type
和 description
,但随着时间的推移将添加更多。
序列化器正在进行重大变更,反序列化器的开发仍在待办事项中。1.0.0 版本应该具有更全面的 serde 实现,但在此期间请尽情享受。:)
依赖项
~0.4–1MB
~24K SLoC