Skip to main content

wx_rust_open/bean/auth/
wx_open_authorizer_info.rs

1//! 授权方基本信息。
2//!
3//! 对应 Java `me.chanjar.weixin.open.bean.auth.WxOpenAuthorizerInfo`。
4//! 由 `WxOpenAuthorizerInfoGsonAdapter` 驱动解析(snake_case 键、
5//! `service_type_info`/`verify_type_info` 为 `{"id":N}` 扁平为 Integer、
6//! `MiniProgramInfo` 键为大驼峰),与字段名直映不同,故人工迁移:
7//! Rust 以 serde rename + 自定义反序列化函数表达同一线格式。
8
9use std::collections::HashMap;
10
11use serde::Deserialize;
12
13/// 授权方基本信息。
14#[derive(Debug, Clone, Default, PartialEq, serde::Serialize, serde::Deserialize)]
15pub struct WxOpenAuthorizerInfo {
16    /// 授权方昵称。
17    #[serde(rename = "nick_name", default)]
18    pub nick_name: Option<String>,
19    /// 授权方头像。
20    #[serde(rename = "head_img", default)]
21    pub head_img: Option<String>,
22    /// 公众号类型(对应 Java `serviceTypeInfo`,`{"id":N}` 扁平化)。
23    #[serde(rename = "service_type_info", default, deserialize_with = "de_id")]
24    pub service_type_info: Option<i32>,
25    /// 认证类型(对应 Java `verifyTypeInfo`,`{"id":N}` 扁平化)。
26    #[serde(rename = "verify_type_info", default, deserialize_with = "de_id")]
27    pub verify_type_info: Option<i32>,
28    /// 授权方主体名称。
29    #[serde(rename = "user_name", default)]
30    pub user_name: Option<String>,
31    /// 授权方主体名称(认证主体)。
32    #[serde(rename = "principal_name", default)]
33    pub principal_name: Option<String>,
34    /// 业务信息(对应 Java `businessInfo`)。
35    #[serde(rename = "business_info", default)]
36    pub business_info: Option<HashMap<String, i32>>,
37    /// 授权方账号的账号名称。
38    #[serde(rename = "alias", default)]
39    pub alias: Option<String>,
40    /// 二维码图片的URL。
41    #[serde(rename = "qrcode_url", default)]
42    pub qrcode_url: Option<String>,
43    /// 帐号状态:1 正常 / 14 已注销 / 16 已封禁 / 18 已告警 / 19 已冻结。
44    #[serde(rename = "account_status", default)]
45    pub account_status: Option<i32>,
46    /// 账号介绍。
47    #[serde(rename = "signature", default)]
48    pub signature: Option<String>,
49    /// 小程序信息(授权方为小程序时返回)。
50    #[serde(rename = "MiniProgramInfo", default)]
51    pub mini_program_info: Option<MiniProgramInfo>,
52    /// 小程序注册方式(0 普通 / 2 复用公众号创建 / 6 法人扫脸 / 13 试用 /
53    /// 15 联盟 / 16 个人 / 17 个人交易 / 19 试用转正 / 22 复用商户号 / 23 复用商户号转正)。
54    #[serde(rename = "register_type", default)]
55    pub register_type: Option<i32>,
56    /// 小程序基础配置信息。
57    #[serde(rename = "basic_config", default)]
58    pub basic_config: Option<BasicConfig>,
59}
60
61/// 解析 `{"id": N}` 或裸数值 N → `Option<i32>`
62/// (对应 Java adapter 的 service_type_info/verify_type_info 扁平化)。
63fn de_id<'de, D>(d: D) -> Result<Option<i32>, D::Error>
64where
65    D: serde::Deserializer<'de>,
66{
67    let v: serde_json::Value =
68        serde_json::Value::deserialize(d).map_err(serde::de::Error::custom)?;
69    Ok(match v {
70        serde_json::Value::Object(m) => m.get("id").and_then(|x| x.as_i64()).map(|x| x as i32),
71        serde_json::Value::Number(n) => n.as_i64().map(|x| x as i32),
72        _ => None,
73    })
74}
75
76/// 小程序信息(对应 Java 内嵌类 `WxOpenAuthorizerInfo.MiniProgramInfo`)。
77#[derive(Debug, Clone, Default, PartialEq, serde::Serialize, serde::Deserialize)]
78pub struct MiniProgramInfo {
79    /// 小程序访问状态。
80    #[serde(rename = "visit_status", default)]
81    pub visit_status: Option<i32>,
82    /// 小程序已设置的各个服务器域名。
83    #[serde(default)]
84    pub network: Option<Network>,
85    /// 小程序已设置的类目。
86    #[serde(default)]
87    pub categories: Option<Vec<Category>>,
88}
89
90/// 小程序类目(对应 Java 内嵌类 `MiniProgramInfo.Category`)。
91#[derive(Debug, Clone, Default, PartialEq, serde::Serialize, serde::Deserialize)]
92pub struct Category {
93    #[serde(default)]
94    pub first: Option<String>,
95    #[serde(default)]
96    pub second: Option<String>,
97}
98
99/// 小程序服务器域名(对应 Java 内嵌类 `MiniProgramInfo.Network`)。
100#[derive(Debug, Clone, Default, PartialEq, serde::Serialize, serde::Deserialize)]
101pub struct Network {
102    #[serde(rename = "RequestDomain", default)]
103    pub request_domain: Option<Vec<String>>,
104    #[serde(rename = "WsRequestDomain", default)]
105    pub ws_request_domain: Option<Vec<String>>,
106    #[serde(rename = "UploadDomain", default)]
107    pub upload_domain: Option<Vec<String>>,
108    #[serde(rename = "DownloadDomain", default)]
109    pub download_domain: Option<Vec<String>>,
110    #[serde(rename = "BizDomain", default)]
111    pub biz_domain: Option<Vec<String>>,
112}
113
114/// 小程序基础配置(对应 Java 内嵌类 `WxOpenAuthorizerInfo.BasicConfig`)。
115#[derive(Debug, Clone, Default, PartialEq, serde::Serialize, serde::Deserialize)]
116pub struct BasicConfig {
117    #[serde(rename = "is_phone_configured", default)]
118    pub is_phone_configured: Option<bool>,
119    #[serde(rename = "is_email_configured", default)]
120    pub is_email_configured: Option<bool>,
121}