Skip to main content

uptrakit_openapi_client/
surfaces.rs

1use crate::Result;
2use crate::UptrakitClient;
3use crate::types_impl::surfaces::{
4    InvokeSurfaceInteractionRequest, SurfaceProviderInfo, SurfaceReadResponse, SurfaceResponse,
5};
6
7impl UptrakitClient {
8    /// List registered surfaces. Optional `slot` and `page` filters map to query params.
9    pub async fn list_surfaces(
10        &self,
11        slot: Option<&str>,
12        page: Option<&str>,
13    ) -> Result<Vec<SurfaceResponse>> {
14        let url = format!("{}{}", self.base_url, crate::paths::surfaces::BASE);
15        let mut req = self.http.get(&url).bearer_auth(self.token_or_err()?);
16        let mut query_params: Vec<(&str, &str)> = Vec::new();
17        if let Some(slot) = slot {
18            query_params.push(("slot", slot));
19        }
20        if let Some(page) = page {
21            query_params.push(("page", page));
22        }
23        if !query_params.is_empty() {
24            req = req.query(&query_params);
25        }
26        let resp = self.send_with_retry(req).await?;
27        self.handle_response(resp).await
28    }
29
30    /// List targeted providers for a surface.
31    pub async fn list_surface_providers(
32        &self,
33        surface_id: &str,
34    ) -> Result<Vec<SurfaceProviderInfo>> {
35        self.get(&crate::paths::surfaces::providers(surface_id))
36            .await
37    }
38
39    /// Read a single surface with its interactions and data sources.
40    pub async fn read_surface(&self, surface_id: &str) -> Result<SurfaceReadResponse> {
41        self.get(&crate::paths::surfaces::read(surface_id)).await
42    }
43
44    /// Invoke a surface interaction.
45    pub async fn invoke_surface_interaction(
46        &self,
47        surface_id: &str,
48        interaction_id: &str,
49        request: &InvokeSurfaceInteractionRequest,
50    ) -> Result<serde_json::Value> {
51        self.post_json(
52            &crate::paths::surfaces::interaction(surface_id, interaction_id),
53            request,
54        )
55        .await
56    }
57}