Skip to main content

uarp_sdk/generated/api/
feed.rs

1// Code generated by @uarp/codegen from spec/openapi.json. DO NOT EDIT.
2//!
3//! Activity feed and real-time event streaming
4
5#![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/// Query and header parameters for `getActivityFeed`.
20#[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/// Query and header parameters for `streamActivityFeed`.
37#[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/// Activity feed and real-time event streaming
52#[derive(Debug, Clone)]
53pub struct FeedApi {
54    pub(crate) client: Client,
55}
56
57impl Client {
58    /// Activity feed and real-time event streaming
59    pub fn feed(&self) -> FeedApi {
60        FeedApi { client: self.clone() }
61    }
62}
63
64impl FeedApi {
65    /// Activity feed
66    ///
67    /// `GET /api/v1/feed`
68    ///
69    /// Required scopes: `runs:read`.
70    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    /// Stream every item returned by `getActivityFeed`, following the `cursor` cursor until the
84    /// server reports no further pages.
85    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    /// SSE activity feed stream
107    ///
108    /// `GET /api/v1/feed/stream`
109    ///
110    /// Required scopes: `runs:read`.
111    ///
112    /// Returns a server-sent event stream.
113    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}