从 Zotero 项目中获取标题
get title from Zotero item
对 Rust 还是很陌生,试图了解如何使用 Zotero crate.
提取 JournalArticle
的 title
我知道了,可以确认物品已成功取回:
let zc = ZoteroCredentials::new();
let z = ZoteroInit::set_user(&zc.api_id, &zc.api_key);
let item = z.get_item(item_id, None).unwrap();
从这里,我看到 item.data
是 ItemType
,特别是 JournalArticleData。但我基本上不太了解如何 a) 将其序列化为 JSON,或 b) 将 .title
作为 属性.
访问
对于上下文,这将是 Rocket GET
路线的结果。
如有任何帮助,我们将不胜感激!
听起来您缺少的部分是如何对枚举使用模式匹配。我不熟悉 zotero
所以这一切都基于文档,详细的类型注释明确说明我认为我在做什么:
use zotero::data_structure::item::{Item, ItemType, JournalArticleData};
let item: Item = z.get_item(item_id, None).unwrap();
// Now we must extract the JournalArticle from the ItemType, which is an enum
// and therefore requires pattern matching.
let article: JournalArticleData = match item.data {
ItemType::JournalArticle(a) => a,
something_else => todo!("handle wrong type of item"),
}
let title: String = article.title;
(match
也可以写成 if let
。)
您还可以使用模式匹配遍历整个结构,而不仅仅是需要它的枚举:
match z.get_item(item_id, None).unwrap() {
Item {
data: ItemType::JournalArticle(JournalArticleData {
title,
..
}),
..
} => {
// Use the `title` variable here
},
something_else => todo!("handle wrong type of item"),
}
对 Rust 还是很陌生,试图了解如何使用 Zotero crate.
提取JournalArticle
的 title
我知道了,可以确认物品已成功取回:
let zc = ZoteroCredentials::new();
let z = ZoteroInit::set_user(&zc.api_id, &zc.api_key);
let item = z.get_item(item_id, None).unwrap();
从这里,我看到 item.data
是 ItemType
,特别是 JournalArticleData。但我基本上不太了解如何 a) 将其序列化为 JSON,或 b) 将 .title
作为 属性.
对于上下文,这将是 Rocket GET
路线的结果。
如有任何帮助,我们将不胜感激!
听起来您缺少的部分是如何对枚举使用模式匹配。我不熟悉 zotero
所以这一切都基于文档,详细的类型注释明确说明我认为我在做什么:
use zotero::data_structure::item::{Item, ItemType, JournalArticleData};
let item: Item = z.get_item(item_id, None).unwrap();
// Now we must extract the JournalArticle from the ItemType, which is an enum
// and therefore requires pattern matching.
let article: JournalArticleData = match item.data {
ItemType::JournalArticle(a) => a,
something_else => todo!("handle wrong type of item"),
}
let title: String = article.title;
(match
也可以写成 if let
。)
您还可以使用模式匹配遍历整个结构,而不仅仅是需要它的枚举:
match z.get_item(item_id, None).unwrap() {
Item {
data: ItemType::JournalArticle(JournalArticleData {
title,
..
}),
..
} => {
// Use the `title` variable here
},
something_else => todo!("handle wrong type of item"),
}