langfuse_client_base/apis/
trace_api.rs1use super::{configuration, ContentType, Error};
12use crate::{apis::ResponseContent, models};
13use reqwest;
14use serde::{de::Error as _, Deserialize, Serialize};
15
16#[derive(Debug, Clone, Serialize, Deserialize)]
18#[serde(untagged)]
19pub enum TraceDeleteError {
20 Status400(serde_json::Value),
21 Status401(serde_json::Value),
22 Status403(serde_json::Value),
23 Status404(serde_json::Value),
24 Status405(serde_json::Value),
25 UnknownValue(serde_json::Value),
26}
27
28#[derive(Debug, Clone, Serialize, Deserialize)]
30#[serde(untagged)]
31pub enum TraceDeleteMultipleError {
32 Status400(serde_json::Value),
33 Status401(serde_json::Value),
34 Status403(serde_json::Value),
35 Status404(serde_json::Value),
36 Status405(serde_json::Value),
37 UnknownValue(serde_json::Value),
38}
39
40#[derive(Debug, Clone, Serialize, Deserialize)]
42#[serde(untagged)]
43pub enum TraceGetError {
44 Status400(serde_json::Value),
45 Status401(serde_json::Value),
46 Status403(serde_json::Value),
47 Status404(serde_json::Value),
48 Status405(serde_json::Value),
49 UnknownValue(serde_json::Value),
50}
51
52#[derive(Debug, Clone, Serialize, Deserialize)]
54#[serde(untagged)]
55pub enum TraceListError {
56 Status400(serde_json::Value),
57 Status401(serde_json::Value),
58 Status403(serde_json::Value),
59 Status404(serde_json::Value),
60 Status405(serde_json::Value),
61 UnknownValue(serde_json::Value),
62}
63
64#[bon::builder]
66pub async fn trace_delete(
67 configuration: &configuration::Configuration,
68 trace_id: &str,
69) -> Result<models::DeleteTraceResponse, Error<TraceDeleteError>> {
70 let p_path_trace_id = trace_id;
72
73 let uri_str = format!(
74 "{}/api/public/traces/{traceId}",
75 configuration.base_path,
76 traceId = crate::apis::urlencode(p_path_trace_id)
77 );
78 let mut req_builder = configuration
79 .client
80 .request(reqwest::Method::DELETE, &uri_str);
81
82 if let Some(ref user_agent) = configuration.user_agent {
83 req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
84 }
85 if let Some(ref auth_conf) = configuration.basic_auth {
86 req_builder = req_builder.basic_auth(auth_conf.0.to_owned(), auth_conf.1.to_owned());
87 };
88
89 let req = req_builder.build()?;
90 let resp = configuration.client.execute(req).await?;
91
92 let status = resp.status();
93 let content_type = resp
94 .headers()
95 .get("content-type")
96 .and_then(|v| v.to_str().ok())
97 .unwrap_or("application/octet-stream");
98 let content_type = super::ContentType::from(content_type);
99
100 if !status.is_client_error() && !status.is_server_error() {
101 let content = resp.text().await?;
102 match content_type {
103 ContentType::Json => serde_json::from_str(&content).map_err(Error::from),
104 ContentType::Text => return Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `models::DeleteTraceResponse`"))),
105 ContentType::Unsupported(unknown_type) => return Err(Error::from(serde_json::Error::custom(format!("Received `{unknown_type}` content type response that cannot be converted to `models::DeleteTraceResponse`")))),
106 }
107 } else {
108 let content = resp.text().await?;
109 let entity: Option<TraceDeleteError> = serde_json::from_str(&content).ok();
110 Err(Error::ResponseError(ResponseContent {
111 status,
112 content,
113 entity,
114 }))
115 }
116}
117
118#[bon::builder]
120pub async fn trace_delete_multiple(
121 configuration: &configuration::Configuration,
122 trace_delete_multiple_request: models::TraceDeleteMultipleRequest,
123) -> Result<models::DeleteTraceResponse, Error<TraceDeleteMultipleError>> {
124 let p_body_trace_delete_multiple_request = trace_delete_multiple_request;
126
127 let uri_str = format!("{}/api/public/traces", configuration.base_path);
128 let mut req_builder = configuration
129 .client
130 .request(reqwest::Method::DELETE, &uri_str);
131
132 if let Some(ref user_agent) = configuration.user_agent {
133 req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
134 }
135 if let Some(ref auth_conf) = configuration.basic_auth {
136 req_builder = req_builder.basic_auth(auth_conf.0.to_owned(), auth_conf.1.to_owned());
137 };
138 req_builder = req_builder.json(&p_body_trace_delete_multiple_request);
139
140 let req = req_builder.build()?;
141 let resp = configuration.client.execute(req).await?;
142
143 let status = resp.status();
144 let content_type = resp
145 .headers()
146 .get("content-type")
147 .and_then(|v| v.to_str().ok())
148 .unwrap_or("application/octet-stream");
149 let content_type = super::ContentType::from(content_type);
150
151 if !status.is_client_error() && !status.is_server_error() {
152 let content = resp.text().await?;
153 match content_type {
154 ContentType::Json => serde_json::from_str(&content).map_err(Error::from),
155 ContentType::Text => return Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `models::DeleteTraceResponse`"))),
156 ContentType::Unsupported(unknown_type) => return Err(Error::from(serde_json::Error::custom(format!("Received `{unknown_type}` content type response that cannot be converted to `models::DeleteTraceResponse`")))),
157 }
158 } else {
159 let content = resp.text().await?;
160 let entity: Option<TraceDeleteMultipleError> = serde_json::from_str(&content).ok();
161 Err(Error::ResponseError(ResponseContent {
162 status,
163 content,
164 entity,
165 }))
166 }
167}
168
169#[bon::builder]
171pub async fn trace_get(
172 configuration: &configuration::Configuration,
173 trace_id: &str,
174) -> Result<models::TraceWithFullDetails, Error<TraceGetError>> {
175 let p_path_trace_id = trace_id;
177
178 let uri_str = format!(
179 "{}/api/public/traces/{traceId}",
180 configuration.base_path,
181 traceId = crate::apis::urlencode(p_path_trace_id)
182 );
183 let mut req_builder = configuration.client.request(reqwest::Method::GET, &uri_str);
184
185 if let Some(ref user_agent) = configuration.user_agent {
186 req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
187 }
188 if let Some(ref auth_conf) = configuration.basic_auth {
189 req_builder = req_builder.basic_auth(auth_conf.0.to_owned(), auth_conf.1.to_owned());
190 };
191
192 let req = req_builder.build()?;
193 let resp = configuration.client.execute(req).await?;
194
195 let status = resp.status();
196 let content_type = resp
197 .headers()
198 .get("content-type")
199 .and_then(|v| v.to_str().ok())
200 .unwrap_or("application/octet-stream");
201 let content_type = super::ContentType::from(content_type);
202
203 if !status.is_client_error() && !status.is_server_error() {
204 let content = resp.text().await?;
205 match content_type {
206 ContentType::Json => serde_json::from_str(&content).map_err(Error::from),
207 ContentType::Text => return Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `models::TraceWithFullDetails`"))),
208 ContentType::Unsupported(unknown_type) => return Err(Error::from(serde_json::Error::custom(format!("Received `{unknown_type}` content type response that cannot be converted to `models::TraceWithFullDetails`")))),
209 }
210 } else {
211 let content = resp.text().await?;
212 let entity: Option<TraceGetError> = serde_json::from_str(&content).ok();
213 Err(Error::ResponseError(ResponseContent {
214 status,
215 content,
216 entity,
217 }))
218 }
219}
220
221#[bon::builder]
223pub async fn trace_list(
224 configuration: &configuration::Configuration,
225 page: Option<i32>,
226 limit: Option<i32>,
227 user_id: Option<&str>,
228 name: Option<&str>,
229 session_id: Option<&str>,
230 from_timestamp: Option<String>,
231 to_timestamp: Option<String>,
232 order_by: Option<&str>,
233 tags: Option<Vec<String>>,
234 version: Option<&str>,
235 release: Option<&str>,
236 environment: Option<Vec<String>>,
237 fields: Option<&str>,
238 filter: Option<&str>,
239) -> Result<models::Traces, Error<TraceListError>> {
240 let p_query_page = page;
242 let p_query_limit = limit;
243 let p_query_user_id = user_id;
244 let p_query_name = name;
245 let p_query_session_id = session_id;
246 let p_query_from_timestamp = from_timestamp;
247 let p_query_to_timestamp = to_timestamp;
248 let p_query_order_by = order_by;
249 let p_query_tags = tags;
250 let p_query_version = version;
251 let p_query_release = release;
252 let p_query_environment = environment;
253 let p_query_fields = fields;
254 let p_query_filter = filter;
255
256 let uri_str = format!("{}/api/public/traces", configuration.base_path);
257 let mut req_builder = configuration.client.request(reqwest::Method::GET, &uri_str);
258
259 if let Some(ref param_value) = p_query_page {
260 req_builder = req_builder.query(&[("page", ¶m_value.to_string())]);
261 }
262 if let Some(ref param_value) = p_query_limit {
263 req_builder = req_builder.query(&[("limit", ¶m_value.to_string())]);
264 }
265 if let Some(ref param_value) = p_query_user_id {
266 req_builder = req_builder.query(&[("userId", ¶m_value.to_string())]);
267 }
268 if let Some(ref param_value) = p_query_name {
269 req_builder = req_builder.query(&[("name", ¶m_value.to_string())]);
270 }
271 if let Some(ref param_value) = p_query_session_id {
272 req_builder = req_builder.query(&[("sessionId", ¶m_value.to_string())]);
273 }
274 if let Some(ref param_value) = p_query_from_timestamp {
275 req_builder = req_builder.query(&[("fromTimestamp", ¶m_value.to_string())]);
276 }
277 if let Some(ref param_value) = p_query_to_timestamp {
278 req_builder = req_builder.query(&[("toTimestamp", ¶m_value.to_string())]);
279 }
280 if let Some(ref param_value) = p_query_order_by {
281 req_builder = req_builder.query(&[("orderBy", ¶m_value.to_string())]);
282 }
283 if let Some(ref param_value) = p_query_tags {
284 req_builder = match "multi" {
285 "multi" => req_builder.query(
286 ¶m_value
287 .into_iter()
288 .map(|p| ("tags".to_owned(), p.to_string()))
289 .collect::<Vec<(std::string::String, std::string::String)>>(),
290 ),
291 _ => req_builder.query(&[(
292 "tags",
293 ¶m_value
294 .into_iter()
295 .map(|p| p.to_string())
296 .collect::<Vec<String>>()
297 .join(",")
298 .to_string(),
299 )]),
300 };
301 }
302 if let Some(ref param_value) = p_query_version {
303 req_builder = req_builder.query(&[("version", ¶m_value.to_string())]);
304 }
305 if let Some(ref param_value) = p_query_release {
306 req_builder = req_builder.query(&[("release", ¶m_value.to_string())]);
307 }
308 if let Some(ref param_value) = p_query_environment {
309 req_builder = match "multi" {
310 "multi" => req_builder.query(
311 ¶m_value
312 .into_iter()
313 .map(|p| ("environment".to_owned(), p.to_string()))
314 .collect::<Vec<(std::string::String, std::string::String)>>(),
315 ),
316 _ => req_builder.query(&[(
317 "environment",
318 ¶m_value
319 .into_iter()
320 .map(|p| p.to_string())
321 .collect::<Vec<String>>()
322 .join(",")
323 .to_string(),
324 )]),
325 };
326 }
327 if let Some(ref param_value) = p_query_fields {
328 req_builder = req_builder.query(&[("fields", ¶m_value.to_string())]);
329 }
330 if let Some(ref param_value) = p_query_filter {
331 req_builder = req_builder.query(&[("filter", ¶m_value.to_string())]);
332 }
333 if let Some(ref user_agent) = configuration.user_agent {
334 req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
335 }
336 if let Some(ref auth_conf) = configuration.basic_auth {
337 req_builder = req_builder.basic_auth(auth_conf.0.to_owned(), auth_conf.1.to_owned());
338 };
339
340 let req = req_builder.build()?;
341 let resp = configuration.client.execute(req).await?;
342
343 let status = resp.status();
344 let content_type = resp
345 .headers()
346 .get("content-type")
347 .and_then(|v| v.to_str().ok())
348 .unwrap_or("application/octet-stream");
349 let content_type = super::ContentType::from(content_type);
350
351 if !status.is_client_error() && !status.is_server_error() {
352 let content = resp.text().await?;
353 match content_type {
354 ContentType::Json => serde_json::from_str(&content).map_err(Error::from),
355 ContentType::Text => return Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `models::Traces`"))),
356 ContentType::Unsupported(unknown_type) => return Err(Error::from(serde_json::Error::custom(format!("Received `{unknown_type}` content type response that cannot be converted to `models::Traces`")))),
357 }
358 } else {
359 let content = resp.text().await?;
360 let entity: Option<TraceListError> = serde_json::from_str(&content).ok();
361 Err(Error::ResponseError(ResponseContent {
362 status,
363 content,
364 entity,
365 }))
366 }
367}