use std::{collections::BTreeMap, time::Duration};
use serde::{Deserialize, Serialize};
use serde_json::{Map, Value};
use starweaver_core::CancellationToken;
#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
#[serde(rename_all = "UPPERCASE")]
pub enum HttpMethod {
Post,
}
#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub struct HttpRequest {
pub method: HttpMethod,
pub url: String,
#[serde(default, skip_serializing_if = "BTreeMap::is_empty")]
pub headers: BTreeMap<String, String>,
pub body: Value,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub timeout: Option<Duration>,
#[serde(default, skip_serializing_if = "Map::is_empty")]
pub metadata: Map<String, Value>,
#[serde(skip, default)]
pub cancellation_token: CancellationToken,
}
#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub struct HttpResponse {
pub status: u16,
#[serde(default, skip_serializing_if = "BTreeMap::is_empty")]
pub headers: BTreeMap<String, String>,
pub body: Value,
}
impl HttpResponse {
#[must_use]
pub const fn ok(body: Value) -> Self {
Self {
status: 200,
headers: BTreeMap::new(),
body,
}
}
}
#[derive(Clone, Copy, Debug, Default, Deserialize, Eq, PartialEq, Serialize)]
#[serde(rename_all = "snake_case")]
pub enum MaxTokensParameter {
#[default]
Default,
MaxTokens,
MaxOutputTokens,
MaxCompletionTokens,
Omit,
}