Skip to main content

openlark_core/api/
helpers.rs

1//! 通用 HTTP 管道 helper(canonical copy)。
2//!
3//! 业务 crate 的 `common::api_utils` 应 re-export 此处定义,避免各 crate 各派生一份
4//! 导致 locality 失守(#330)。错误统一经 `map_context` 附加 `operation` / `resource`
5//! (caller 传入的 context)/ `request_id`(响应携带时)结构化诊断上下文。
6
7use crate::SDKResult;
8use crate::error::validation_error;
9
10/// 标准化参数序列化。
11///
12/// 序列化失败时返回 `validation_error`,附加 `operation=serialize_params` + `resource=<context>`。
13pub fn serialize_params<T: serde::Serialize>(
14    params: &T,
15    context: &str,
16) -> SDKResult<serde_json::Value> {
17    serde_json::to_value(params).map_err(|e| {
18        validation_error("request.params", format!("无法序列化请求参数: {e}")).map_context(|ctx| {
19            ctx.set_operation("serialize_params")
20                .add_context("resource", context);
21        })
22    })
23}
24
25#[cfg(test)]
26mod tests {
27    use super::*;
28
29    #[test]
30    fn serialize_params_success() {
31        let params = vec!["a", "b"];
32        let v = serialize_params(&params, "测试").expect("序列化应成功");
33        assert_eq!(v, serde_json::json!(["a", "b"]));
34    }
35}