Skip to main content

ai_provider_sdk/
request_options.rs

1//! 单次请求覆盖选项。用于在全局默认配置之外做局部覆写。
2
3use std::collections::HashMap;
4use std::time::Duration;
5
6use serde_json::Value;
7
8#[derive(Debug, Clone, Default)]
9/// 单次请求覆盖项。
10///
11/// 优先级:调用级 `RequestOptions` > 客户端默认配置。
12pub struct RequestOptions {
13    /// 追加/覆盖本次请求的 HTTP 头。
14    ///
15    /// 典型用途:注入追踪头、灰度头、临时鉴权头。
16    pub extra_headers: HashMap<String, String>,
17    /// 追加本次请求的查询参数。
18    ///
19    /// 与客户端默认查询参数合并;同名键以本字段写入顺序参与拼接。
20    pub extra_query: HashMap<String, String>,
21    /// 追加到 JSON 请求体的额外字段。
22    ///
23    /// - 当原请求体与该值均为对象时,按键合并,冲突键由 `extra_body` 覆盖。
24    /// - 非对象场景下,`extra_body` 将直接替换请求体。
25    pub extra_body: Option<Value>,
26    /// 覆盖本次请求超时(含连接后请求阶段)。
27    pub timeout: Option<Duration>,
28}
29
30impl RequestOptions {
31    /// 创建空覆盖项,等价于 `Default::default()`。
32    pub fn new() -> Self {
33        Self::default()
34    }
35
36    /// 追加一个请求头。
37    pub fn header(mut self, key: impl Into<String>, value: impl Into<String>) -> Self {
38        self.extra_headers.insert(key.into(), value.into());
39        self
40    }
41
42    /// 追加一个查询参数。
43    pub fn query(mut self, key: impl Into<String>, value: impl Into<String>) -> Self {
44        self.extra_query.insert(key.into(), value.into());
45        self
46    }
47
48    /// 追加 JSON 请求体扩展字段。
49    pub fn extra_body(mut self, value: Value) -> Self {
50        self.extra_body = Some(value);
51        self
52    }
53
54    /// 设置本次请求超时覆盖值。
55    pub fn timeout(mut self, timeout: Duration) -> Self {
56        self.timeout = Some(timeout);
57        self
58    }
59}