1use crate::transport::request::Request;
2use crate::{Error, QueueItemId};
3use serde_json::Value;
4
5#[derive(Clone)]
7#[cfg(feature = "async")]
8pub struct QueueService {
9 client: crate::Client,
10}
11
12#[cfg(feature = "async")]
13impl QueueService {
14 pub(crate) fn new(client: crate::Client) -> Self {
15 Self { client }
16 }
17}
18
19#[cfg(feature = "async")]
20impl QueueService {
21 pub async fn list(&self, tree: Option<&str>) -> Result<Value, Error> {
23 let mut req = Request::get(["queue", "api", "json"]);
24 if let Some(tree) = tree {
25 req = req.query_pair("tree", tree);
26 }
27 self.client.send_json(req).await
28 }
29
30 pub async fn item(
32 &self,
33 id: impl Into<QueueItemId>,
34 tree: Option<&str>,
35 ) -> Result<Value, Error> {
36 let id = id.into();
37 let mut req = Request::get(["queue", "item", id.as_str(), "api", "json"]);
38 if let Some(tree) = tree {
39 req = req.query_pair("tree", tree);
40 }
41 self.client.send_json(req).await
42 }
43
44 pub async fn cancel(&self, id: impl Into<QueueItemId>) -> Result<(), Error> {
46 let id = id.into();
47 let req = Request::post(["queue", "cancelItem"]).query_pair("id", id.as_str());
48 self.client.send_unit(req).await
49 }
50}
51
52#[cfg(feature = "blocking")]
54#[derive(Clone)]
55pub struct BlockingQueueService {
56 client: crate::BlockingClient,
57}
58
59#[cfg(feature = "blocking")]
60impl BlockingQueueService {
61 pub(crate) fn new(client: crate::BlockingClient) -> Self {
62 Self { client }
63 }
64}
65
66#[cfg(feature = "blocking")]
67impl BlockingQueueService {
68 pub fn list(&self, tree: Option<&str>) -> Result<Value, Error> {
70 let mut req = Request::get(["queue", "api", "json"]);
71 if let Some(tree) = tree {
72 req = req.query_pair("tree", tree);
73 }
74 self.client.send_json(req)
75 }
76
77 pub fn item(&self, id: impl Into<QueueItemId>, tree: Option<&str>) -> Result<Value, Error> {
79 let id = id.into();
80 let mut req = Request::get(["queue", "item", id.as_str(), "api", "json"]);
81 if let Some(tree) = tree {
82 req = req.query_pair("tree", tree);
83 }
84 self.client.send_json(req)
85 }
86
87 pub fn cancel(&self, id: impl Into<QueueItemId>) -> Result<(), Error> {
89 let id = id.into();
90 let req = Request::post(["queue", "cancelItem"]).query_pair("id", id.as_str());
91 self.client.send_unit(req)
92 }
93}