rippling_api/
entitlements.rs1use anyhow::Result;
2
3use crate::Client;
4#[derive(Clone, Debug)]
5pub struct Entitlements {
6 pub client: Client,
7}
8
9impl Entitlements {
10 #[doc(hidden)]
11 pub fn new(client: Client) -> Self {
12 Self { client }
13 }
14
15 #[doc = "List entitlements\n\nA List of entitlements\n- Requires: `API Tier 1`\n\n**Parameters:**\n\n- `cursor: Option<String>`\n\n```rust,no_run\nuse futures_util::TryStreamExt;\nasync fn example_entitlements_list_stream() -> anyhow::Result<()> {\n let client = rippling_api::Client::new_from_env();\n let mut entitlements = client.entitlements();\n let mut stream = entitlements.list_stream();\n loop {\n match stream.try_next().await {\n Ok(Some(item)) => {\n println!(\"{:?}\", item);\n }\n Ok(None) => {\n break;\n }\n Err(err) => {\n return Err(err.into());\n }\n }\n }\n\n Ok(())\n}\n```"]
16 #[tracing::instrument]
17 pub async fn list<'a>(
18 &'a self,
19 cursor: Option<String>,
20 ) -> Result<crate::types::ListEntitlementsResponse, crate::types::error::Error> {
21 let mut req = self.client.client.request(
22 http::Method::GET,
23 format!("{}/{}", self.client.base_url, "entitlements"),
24 );
25 req = req.bearer_auth(&self.client.token);
26 let mut query_params = vec![];
27 if let Some(p) = cursor {
28 query_params.push(("cursor", p));
29 }
30
31 req = req.query(&query_params);
32 let resp = req.send().await?;
33 let status = resp.status();
34 if status.is_success() {
35 let text = resp.text().await.unwrap_or_default();
36 serde_json::from_str(&text).map_err(|err| {
37 crate::types::error::Error::from_serde_error(
38 format_serde_error::SerdeError::new(text.to_string(), err),
39 status,
40 )
41 })
42 } else {
43 let text = resp.text().await.unwrap_or_default();
44 Err(crate::types::error::Error::Server {
45 body: text.to_string(),
46 status,
47 })
48 }
49 }
50
51 #[doc = "List entitlements\n\nA List of entitlements\n- Requires: `API Tier 1`\n\n**Parameters:**\n\n- `cursor: Option<String>`\n\n```rust,no_run\nuse futures_util::TryStreamExt;\nasync fn example_entitlements_list_stream() -> anyhow::Result<()> {\n let client = rippling_api::Client::new_from_env();\n let mut entitlements = client.entitlements();\n let mut stream = entitlements.list_stream();\n loop {\n match stream.try_next().await {\n Ok(Some(item)) => {\n println!(\"{:?}\", item);\n }\n Ok(None) => {\n break;\n }\n Err(err) => {\n return Err(err.into());\n }\n }\n }\n\n Ok(())\n}\n```"]
52 #[tracing::instrument]
53 #[cfg(not(feature = "js"))]
54 pub fn list_stream<'a>(
55 &'a self,
56 ) -> impl futures::Stream<
57 Item = Result<crate::types::EntitlementModel, crate::types::error::Error>,
58 > + Unpin
59 + '_ {
60 use futures::{StreamExt, TryFutureExt, TryStreamExt};
61
62 use crate::types::paginate::Pagination;
63 self.list(None)
64 .map_ok(move |result| {
65 let items = futures::stream::iter(result.items().into_iter().map(Ok));
66 let next_pages = futures::stream::try_unfold(
67 (None, result),
68 move |(prev_page_token, new_result)| async move {
69 if new_result.has_more_pages()
70 && !new_result.items().is_empty()
71 && prev_page_token != new_result.next_page_token()
72 {
73 async {
74 let mut req = self.client.client.request(
75 http::Method::GET,
76 format!("{}/{}", self.client.base_url, "entitlements"),
77 );
78 req = req.bearer_auth(&self.client.token);
79 let mut request = req.build()?;
80 request = new_result.next_page(request)?;
81 let resp = self.client.client.execute(request).await?;
82 let status = resp.status();
83 if status.is_success() {
84 let text = resp.text().await.unwrap_or_default();
85 serde_json::from_str(&text).map_err(|err| {
86 crate::types::error::Error::from_serde_error(
87 format_serde_error::SerdeError::new(
88 text.to_string(),
89 err,
90 ),
91 status,
92 )
93 })
94 } else {
95 let text = resp.text().await.unwrap_or_default();
96 Err(crate::types::error::Error::Server {
97 body: text.to_string(),
98 status,
99 })
100 }
101 }
102 .map_ok(|result: crate::types::ListEntitlementsResponse| {
103 Some((
104 futures::stream::iter(result.items().into_iter().map(Ok)),
105 (new_result.next_page_token(), result),
106 ))
107 })
108 .await
109 } else {
110 Ok(None)
111 }
112 },
113 )
114 .try_flatten();
115 items.chain(next_pages)
116 })
117 .try_flatten_stream()
118 .boxed()
119 }
120}