1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
use serde_json::value::Value;
use std::error;
extern crate url;
use url::form_urlencoded::{byte_serialize};
/// Perform delete operations on Zotero items and collections.
pub trait Delete<'a> {
fn delete_request(
&self,
params: &str,
last_version: &str,
) -> Result<Value, Box<dyn error::Error>>;
fn get_id(&self) -> &'a str;
/// Delete a Zotero item.
/// ```no_run
/// # use zotero::ZoteroInit;
/// # use zotero::Delete;
/// let z = ZoteroInit::set_user("123456789", "bZARysJ579K5SdmYuaAJ");
/// z.delete_item("PJTUB2WE", "2050");
/// ```
fn delete_item<S: AsRef<str> + std::fmt::Display>(
&self,
item_key: S,
last_version: S,
) -> Result<Value, Box<dyn error::Error>> {
let params = format!("items/{}", item_key);
self.delete_request(¶ms, last_version.as_ref())
}
/// Delete a Zotero item.
/// ```no_run
/// # use zotero::ZoteroInit;
/// # use zotero::Delete;
/// let z = ZoteroInit::set_user("123456789", "bZARysJ579K5SdmYuaAJ");
/// z.delete_items(vec!["PJTUB2WE", "YXT5PJU9"], "2050");
/// ```
fn delete_items<S: AsRef<str> + std::fmt::Display>(
&self,
items_keys: Vec<S>,
last_version: S,
) -> Result<Value, Box<dyn error::Error>> {
let params = format!("items/{}", items_keys.iter().map(|elem| elem.as_ref()).collect::<Vec<&str>>().join(" || "));
self.delete_request(¶ms, last_version.as_ref())
}
/// Delete a Zotero collection.
/// ```no_run
/// # use zotero::ZoteroInit;
/// # use zotero::Delete;
/// let z = ZoteroInit::set_user("123456789", "bZARysJ579K5SdmYuaAJ");
/// z.delete_collection("TYQDGEZR", "2050");
/// ```
fn delete_collection<S: AsRef<str> + std::fmt::Display>(
&self,
item_key: S,
last_version: S,
) -> Result<Value, Box<dyn error::Error>> {
let params = format!("collections/{}", item_key);
self.delete_request(¶ms, last_version.as_ref())
}
/// Delete a Zotero search.
fn delete_search<S: AsRef<str> + std::fmt::Display>(
&self,
search_key: S,
last_version: S,
) -> Result<Value, Box<dyn error::Error>> {
let params = format!("searches?searchKey={}", search_key);
self.delete_request(¶ms, last_version.as_ref())
}
/// Delete a Zotero tag.
/// ```no_run
/// # use zotero::ZoteroInit;
/// # use zotero::Delete;
/// let z = ZoteroInit::set_user("123456789", "bZARysJ579K5SdmYuaAJ");
/// z.delete_tag("history", "2050");
/// ```
fn delete_tag<S: AsRef<str> + std::fmt::Display>(
&self,
tag_key: S,
last_version: S,
) -> Result<Value, Box<dyn error::Error>> {
let params = format!("tags?tag={}", tag_key);
self.delete_request(¶ms, last_version.as_ref())
}
/// Delete multiple Zotero tags.
/// ```no_run
/// # use zotero::ZoteroInit;
/// # use zotero::Delete;
/// let z = ZoteroInit::set_user("123456789", "bZARysJ579K5SdmYuaAJ");
/// z.delete_tags(vec!["history", "philosophy", "art"], "2050");
/// ```
fn delete_tags<S: AsRef<str> + std::fmt::Display>(
&self,
tags_keys: Vec<S>,
last_version: S,
) -> Result<Value, Box<dyn error::Error>> {
let params = format!("tags?tag={}", tags_keys.iter().map(|elem| byte_serialize(elem.as_ref().as_bytes()).collect()).collect::<Vec<String>>().join(" || "));
self.delete_request(¶ms, last_version.as_ref())
}
}