use std::collections::HashMap;
use serde::Deserialize;
#[derive(Debug, Clone, Default, PartialEq, serde::Serialize, serde::Deserialize)]
pub struct WxOpenAuthorizerInfo {
#[serde(rename = "nick_name", default)]
pub nick_name: Option<String>,
#[serde(rename = "head_img", default)]
pub head_img: Option<String>,
#[serde(rename = "service_type_info", default, deserialize_with = "de_id")]
pub service_type_info: Option<i32>,
#[serde(rename = "verify_type_info", default, deserialize_with = "de_id")]
pub verify_type_info: Option<i32>,
#[serde(rename = "user_name", default)]
pub user_name: Option<String>,
#[serde(rename = "principal_name", default)]
pub principal_name: Option<String>,
#[serde(rename = "business_info", default)]
pub business_info: Option<HashMap<String, i32>>,
#[serde(rename = "alias", default)]
pub alias: Option<String>,
#[serde(rename = "qrcode_url", default)]
pub qrcode_url: Option<String>,
#[serde(rename = "account_status", default)]
pub account_status: Option<i32>,
#[serde(rename = "signature", default)]
pub signature: Option<String>,
#[serde(rename = "MiniProgramInfo", default)]
pub mini_program_info: Option<MiniProgramInfo>,
#[serde(rename = "register_type", default)]
pub register_type: Option<i32>,
#[serde(rename = "basic_config", default)]
pub basic_config: Option<BasicConfig>,
}
fn de_id<'de, D>(d: D) -> Result<Option<i32>, D::Error>
where
D: serde::Deserializer<'de>,
{
let v: serde_json::Value =
serde_json::Value::deserialize(d).map_err(serde::de::Error::custom)?;
Ok(match v {
serde_json::Value::Object(m) => m.get("id").and_then(|x| x.as_i64()).map(|x| x as i32),
serde_json::Value::Number(n) => n.as_i64().map(|x| x as i32),
_ => None,
})
}
#[derive(Debug, Clone, Default, PartialEq, serde::Serialize, serde::Deserialize)]
pub struct MiniProgramInfo {
#[serde(rename = "visit_status", default)]
pub visit_status: Option<i32>,
#[serde(default)]
pub network: Option<Network>,
#[serde(default)]
pub categories: Option<Vec<Category>>,
}
#[derive(Debug, Clone, Default, PartialEq, serde::Serialize, serde::Deserialize)]
pub struct Category {
#[serde(default)]
pub first: Option<String>,
#[serde(default)]
pub second: Option<String>,
}
#[derive(Debug, Clone, Default, PartialEq, serde::Serialize, serde::Deserialize)]
pub struct Network {
#[serde(rename = "RequestDomain", default)]
pub request_domain: Option<Vec<String>>,
#[serde(rename = "WsRequestDomain", default)]
pub ws_request_domain: Option<Vec<String>>,
#[serde(rename = "UploadDomain", default)]
pub upload_domain: Option<Vec<String>>,
#[serde(rename = "DownloadDomain", default)]
pub download_domain: Option<Vec<String>>,
#[serde(rename = "BizDomain", default)]
pub biz_domain: Option<Vec<String>>,
}
#[derive(Debug, Clone, Default, PartialEq, serde::Serialize, serde::Deserialize)]
pub struct BasicConfig {
#[serde(rename = "is_phone_configured", default)]
pub is_phone_configured: Option<bool>,
#[serde(rename = "is_email_configured", default)]
pub is_email_configured: Option<bool>,
}