1 个不稳定版本
0.1.0 | 2024年3月21日 |
---|
#1746 in 编码
14KB
jrd
json资源描述符,按照 https://www.packetizer.com/json/jrd/ 规范
这个小巧的crate提供了Json资源描述符的struct表示,并派生了serde traits
有关其使用的更多信息,请访问 docs.rs
原因
这个crate非常小巧,功能也很少,主要依赖于Packetizer的文档
我在一个项目中编写了这个crate和文档,为了更好地了解JRD,我认为其他人可能也会觉得它有用,所以我决定公开分享
lib.rs
:
JRD
from Packetizer
JSON资源描述符(JRD)是一个简单的JSON对象,用于描述互联网上的“资源”,其中“资源”是指通过URI或IRI标识的任何互联网实体。例如,一个人的账户URI(例如,acct:[email protected])是一种资源。所有的Web URI(例如,https://www.packetizer.com/)也是。
JSON资源描述符最初在RFC 6415中提出,基于可扩展资源描述符(XRD)格式,被用于WebFinger协议,尽管它的使用不仅限于WebFinger或RFC 6415。
这个crate提供了JRDs [JsonResourceDescriptor]的结构表示,以及serde::Serialize和serde::Deserialize的实现。
所有文档都是直接从packetizer.com复制过来的。
用法
let jrd_string = r#"{
"subject": "acct:[email protected]",
"properties": {
"http://packetizer.com/ns/name": "Paul E. Jones"
},
"links": [
{
"rel": "http://webfinger.net/rel/profile-page",
"href": "http://www.packetizer.com/people/paulej/"
},
{
"rel": "http://packetizer.com/rel/blog",
"type": "text/html",
"href": "http://www.packetizer.com/people/paulej/blog/",
"titles": {
"en-us": "Paul E. Jones' Blog"
}
}
]
}"#;
let jrd_struct = jrd::JsonResourceDescriptor {
subject: "acct:[email protected]".into(),
aliases: Vec::new(),
properties: [("http://packetizer.com/ns/name".to_string(), "Paul E. Jones".to_string())].into(),
expires: None,
links: vec![
jrd::JsonResourceDescriptorLink {
rel: "http://webfinger.net/rel/profile-page".into(),
href: Some("http://www.packetizer.com/people/paulej/".into()),
link_type: None,
titles: jrd::Map::default(),
properties: jrd::Map::default(),
},
jrd::JsonResourceDescriptorLink {
rel: "http://packetizer.com/rel/blog".into(),
href: Some("http://www.packetizer.com/people/paulej/blog/".into()),
link_type: Some("text/html".into()),
titles: [("en-us".to_string(), "Paul E. Jones' Blog".to_string())].into(),
properties: jrd::Map::default(),
},
],
};
// deserialize
assert_eq!(serde_json::from_str::<jrd::JsonResourceDescriptor>(jrd_string).unwrap(), jrd_struct);
// serialize
assert_eq!(serde_json::to_string_pretty(&jrd_struct).unwrap(), jrd_string)
依赖项
~1.3–2.1MB
~40K SLoC