uarp_sdk/generated/api/
feed.rs1#![allow(unused_imports, clippy::too_many_arguments)]
6
7use reqwest::Method;
8use serde::{Deserialize, Serialize};
9use futures_core::Stream;
10
11use crate::client::{Client, Request, NO_BODY, NO_QUERY};
12use crate::error::Result;
13use crate::generated::models;
14use crate::multipart::{field_text, FilePart};
15use crate::pagination::CursorGuard;
16use crate::sse::EventStream;
17use crate::util::encode_path;
18
19#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
21pub struct GetActivityFeedParams {
22 #[serde(default, skip_serializing_if = "Option::is_none")]
23 pub limit: Option<i64>,
24 #[serde(default, skip_serializing_if = "Option::is_none")]
25 pub cursor: Option<String>,
26 #[serde(default, skip_serializing_if = "Option::is_none")]
27 pub agent_id: Option<String>,
28 #[serde(default, skip_serializing_if = "Option::is_none")]
29 pub company_id: Option<String>,
30 #[serde(default, skip_serializing_if = "Option::is_none")]
31 pub team_id: Option<String>,
32 #[serde(default, skip_serializing_if = "Option::is_none")]
33 pub types: Option<String>,
34}
35
36#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
38pub struct StreamActivityFeedParams {
39 #[serde(default, skip_serializing_if = "Option::is_none")]
40 pub limit: Option<i64>,
41 #[serde(default, skip_serializing_if = "Option::is_none")]
42 pub agent_id: Option<String>,
43 #[serde(default, skip_serializing_if = "Option::is_none")]
44 pub company_id: Option<String>,
45 #[serde(default, skip_serializing_if = "Option::is_none")]
46 pub team_id: Option<String>,
47 #[serde(default, skip_serializing_if = "Option::is_none")]
48 pub types: Option<String>,
49}
50
51#[derive(Debug, Clone)]
53pub struct FeedApi {
54 pub(crate) client: Client,
55}
56
57impl Client {
58 pub fn feed(&self) -> FeedApi {
60 FeedApi { client: self.clone() }
61 }
62}
63
64impl FeedApi {
65 pub async fn get_activity_feed(&self, params: &GetActivityFeedParams) -> Result<models::GetActivityFeedResponse> {
71 self.client
72 .request_json(Request {
73 method: Method::GET,
74 path: "/api/v1/feed".to_string(),
75 query: Some(params),
76 body: NO_BODY,
77 headers: Vec::new(),
78 idempotent: false,
79 })
80 .await
81 }
82
83 pub fn get_activity_feed_all<'a>(&'a self, params: &'a GetActivityFeedParams) -> impl Stream<Item = Result<models::FeedEntry>> + 'a {
86 async_stream::try_stream! {
87 let mut guard = CursorGuard::new();
88 let mut cursor = params.cursor.clone();
89 loop {
90 let mut page_params = params.clone();
91 page_params.cursor = cursor.clone();
92 let page = self.get_activity_feed(&page_params).await?;
93 let items = page.entries.unwrap_or_default();
94 let was_empty = items.is_empty();
95 for item in items {
96 yield item;
97 }
98 match guard.advance(page.cursor, None, was_empty) {
99 Some(next) => cursor = Some(next),
100 None => break,
101 }
102 }
103 }
104 }
105
106 pub fn stream_activity_feed(&self, params: &StreamActivityFeedParams) -> EventStream {
114 self.client.request_stream(
115 "/api/v1/feed/stream",
116 Some(params),
117 Vec::new(),
118 )
119 }
120}