starweaver_model/transport/
types.rs1use std::{collections::BTreeMap, time::Duration};
2
3use serde::{Deserialize, Serialize};
4use serde_json::{Map, Value};
5use starweaver_core::CancellationToken;
6
7#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
9#[serde(rename_all = "UPPERCASE")]
10pub enum HttpMethod {
11 Post,
13}
14
15#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
17pub struct HttpRequest {
18 pub method: HttpMethod,
20 pub url: String,
22 #[serde(default, skip_serializing_if = "BTreeMap::is_empty")]
24 pub headers: BTreeMap<String, String>,
25 pub body: Value,
27 #[serde(default, skip_serializing_if = "Option::is_none")]
29 pub timeout: Option<Duration>,
30 #[serde(default, skip_serializing_if = "Map::is_empty")]
32 pub metadata: Map<String, Value>,
33 #[serde(skip, default)]
35 pub cancellation_token: CancellationToken,
36}
37
38#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
40pub struct HttpResponse {
41 pub status: u16,
43 #[serde(default, skip_serializing_if = "BTreeMap::is_empty")]
45 pub headers: BTreeMap<String, String>,
46 pub body: Value,
48}
49
50impl HttpResponse {
51 #[must_use]
53 pub const fn ok(body: Value) -> Self {
54 Self {
55 status: 200,
56 headers: BTreeMap::new(),
57 body,
58 }
59 }
60}
61
62#[derive(Clone, Copy, Debug, Default, Deserialize, Eq, PartialEq, Serialize)]
64#[serde(rename_all = "snake_case")]
65pub enum MaxTokensParameter {
66 #[default]
68 Default,
69 MaxTokens,
71 MaxOutputTokens,
73 MaxCompletionTokens,
75 Omit,
77}