open_lark/core/request_builder/
header_builder.rs

1use crate::core::{
2    config::Config,
3    constants::{CUSTOM_REQUEST_ID, USER_AGENT_HEADER},
4    req_option::RequestOption,
5    utils::user_agent,
6};
7use reqwest::RequestBuilder;
8
9/// 构建通用请求头
10pub struct HeaderBuilder;
11
12impl HeaderBuilder {
13    /// 构建所有必要的请求头
14    pub fn build_headers(
15        mut req_builder: RequestBuilder,
16        config: &Config,
17        option: &RequestOption,
18    ) -> RequestBuilder {
19        // 1. 添加请求ID(如果有)
20        if !option.request_id.is_empty() {
21            req_builder = req_builder.header(CUSTOM_REQUEST_ID, &option.request_id);
22        }
23
24        // 2. 添加选项中的自定义头
25        for (key, value) in &option.header {
26            req_builder = req_builder.header(key, value);
27        }
28
29        // 3. 添加配置中的全局头
30        for (key, value) in &config.header {
31            req_builder = req_builder.header(key, value);
32        }
33
34        // 4. 添加 User-Agent
35        req_builder = req_builder.header(USER_AGENT_HEADER, user_agent());
36
37        req_builder
38    }
39
40    /// 添加单个请求头(工具方法)
41    pub fn add_header(req_builder: RequestBuilder, key: &str, value: &str) -> RequestBuilder {
42        req_builder.header(key, value)
43    }
44
45    /// 批量添加请求头(工具方法)
46    pub fn add_headers(
47        mut req_builder: RequestBuilder,
48        headers: &[(String, String)],
49    ) -> RequestBuilder {
50        for (key, value) in headers {
51            req_builder = req_builder.header(key, value);
52        }
53        req_builder
54    }
55}