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 fields: Option<&str>,
175) -> Result<models::TraceWithFullDetails, Error<TraceGetError>> {
176 let p_path_trace_id = trace_id;
178 let p_query_fields = fields;
179
180 let uri_str = format!(
181 "{}/api/public/traces/{traceId}",
182 configuration.base_path,
183 traceId = crate::apis::urlencode(p_path_trace_id)
184 );
185 let mut req_builder = configuration.client.request(reqwest::Method::GET, &uri_str);
186
187 if let Some(ref param_value) = p_query_fields {
188 req_builder = req_builder.query(&[("fields", ¶m_value.to_string())]);
189 }
190 if let Some(ref user_agent) = configuration.user_agent {
191 req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
192 }
193 if let Some(ref auth_conf) = configuration.basic_auth {
194 req_builder = req_builder.basic_auth(auth_conf.0.to_owned(), auth_conf.1.to_owned());
195 };
196
197 let req = req_builder.build()?;
198 let resp = configuration.client.execute(req).await?;
199
200 let status = resp.status();
201 let content_type = resp
202 .headers()
203 .get("content-type")
204 .and_then(|v| v.to_str().ok())
205 .unwrap_or("application/octet-stream");
206 let content_type = super::ContentType::from(content_type);
207
208 if !status.is_client_error() && !status.is_server_error() {
209 let content = resp.text().await?;
210 match content_type {
211 ContentType::Json => serde_json::from_str(&content).map_err(Error::from),
212 ContentType::Text => return Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `models::TraceWithFullDetails`"))),
213 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`")))),
214 }
215 } else {
216 let content = resp.text().await?;
217 let entity: Option<TraceGetError> = serde_json::from_str(&content).ok();
218 Err(Error::ResponseError(ResponseContent {
219 status,
220 content,
221 entity,
222 }))
223 }
224}
225
226#[bon::builder]
228pub async fn trace_list(
229 configuration: &configuration::Configuration,
230 page: Option<i32>,
231 limit: Option<i32>,
232 user_id: Option<&str>,
233 name: Option<&str>,
234 session_id: Option<&str>,
235 from_timestamp: Option<String>,
236 to_timestamp: Option<String>,
237 order_by: Option<&str>,
238 tags: Option<Vec<String>>,
239 version: Option<&str>,
240 release: Option<&str>,
241 environment: Option<Vec<String>>,
242 fields: Option<&str>,
243 filter: Option<&str>,
244) -> Result<models::Traces, Error<TraceListError>> {
245 let p_query_page = page;
247 let p_query_limit = limit;
248 let p_query_user_id = user_id;
249 let p_query_name = name;
250 let p_query_session_id = session_id;
251 let p_query_from_timestamp = from_timestamp;
252 let p_query_to_timestamp = to_timestamp;
253 let p_query_order_by = order_by;
254 let p_query_tags = tags;
255 let p_query_version = version;
256 let p_query_release = release;
257 let p_query_environment = environment;
258 let p_query_fields = fields;
259 let p_query_filter = filter;
260
261 let uri_str = format!("{}/api/public/traces", configuration.base_path);
262 let mut req_builder = configuration.client.request(reqwest::Method::GET, &uri_str);
263
264 if let Some(ref param_value) = p_query_page {
265 req_builder = req_builder.query(&[("page", ¶m_value.to_string())]);
266 }
267 if let Some(ref param_value) = p_query_limit {
268 req_builder = req_builder.query(&[("limit", ¶m_value.to_string())]);
269 }
270 if let Some(ref param_value) = p_query_user_id {
271 req_builder = req_builder.query(&[("userId", ¶m_value.to_string())]);
272 }
273 if let Some(ref param_value) = p_query_name {
274 req_builder = req_builder.query(&[("name", ¶m_value.to_string())]);
275 }
276 if let Some(ref param_value) = p_query_session_id {
277 req_builder = req_builder.query(&[("sessionId", ¶m_value.to_string())]);
278 }
279 if let Some(ref param_value) = p_query_from_timestamp {
280 req_builder = req_builder.query(&[("fromTimestamp", ¶m_value.to_string())]);
281 }
282 if let Some(ref param_value) = p_query_to_timestamp {
283 req_builder = req_builder.query(&[("toTimestamp", ¶m_value.to_string())]);
284 }
285 if let Some(ref param_value) = p_query_order_by {
286 req_builder = req_builder.query(&[("orderBy", ¶m_value.to_string())]);
287 }
288 if let Some(ref param_value) = p_query_tags {
289 req_builder = match "multi" {
290 "multi" => req_builder.query(
291 ¶m_value
292 .into_iter()
293 .map(|p| ("tags".to_owned(), p.to_string()))
294 .collect::<Vec<(std::string::String, std::string::String)>>(),
295 ),
296 _ => req_builder.query(&[(
297 "tags",
298 ¶m_value
299 .into_iter()
300 .map(|p| p.to_string())
301 .collect::<Vec<String>>()
302 .join(",")
303 .to_string(),
304 )]),
305 };
306 }
307 if let Some(ref param_value) = p_query_version {
308 req_builder = req_builder.query(&[("version", ¶m_value.to_string())]);
309 }
310 if let Some(ref param_value) = p_query_release {
311 req_builder = req_builder.query(&[("release", ¶m_value.to_string())]);
312 }
313 if let Some(ref param_value) = p_query_environment {
314 req_builder = match "multi" {
315 "multi" => req_builder.query(
316 ¶m_value
317 .into_iter()
318 .map(|p| ("environment".to_owned(), p.to_string()))
319 .collect::<Vec<(std::string::String, std::string::String)>>(),
320 ),
321 _ => req_builder.query(&[(
322 "environment",
323 ¶m_value
324 .into_iter()
325 .map(|p| p.to_string())
326 .collect::<Vec<String>>()
327 .join(",")
328 .to_string(),
329 )]),
330 };
331 }
332 if let Some(ref param_value) = p_query_fields {
333 req_builder = req_builder.query(&[("fields", ¶m_value.to_string())]);
334 }
335 if let Some(ref param_value) = p_query_filter {
336 req_builder = req_builder.query(&[("filter", ¶m_value.to_string())]);
337 }
338 if let Some(ref user_agent) = configuration.user_agent {
339 req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
340 }
341 if let Some(ref auth_conf) = configuration.basic_auth {
342 req_builder = req_builder.basic_auth(auth_conf.0.to_owned(), auth_conf.1.to_owned());
343 };
344
345 let req = req_builder.build()?;
346 let resp = configuration.client.execute(req).await?;
347
348 let status = resp.status();
349 let content_type = resp
350 .headers()
351 .get("content-type")
352 .and_then(|v| v.to_str().ok())
353 .unwrap_or("application/octet-stream");
354 let content_type = super::ContentType::from(content_type);
355
356 if !status.is_client_error() && !status.is_server_error() {
357 let content = resp.text().await?;
358 match content_type {
359 ContentType::Json => serde_json::from_str(&content).map_err(Error::from),
360 ContentType::Text => return Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `models::Traces`"))),
361 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`")))),
362 }
363 } else {
364 let content = resp.text().await?;
365 let entity: Option<TraceListError> = serde_json::from_str(&content).ok();
366 Err(Error::ResponseError(ResponseContent {
367 status,
368 content,
369 entity,
370 }))
371 }
372}