use serde::Deserialize;
#[derive(Debug, Clone, Default, PartialEq, serde::Serialize, serde::Deserialize)]
pub struct WxOpenAuthorizationInfo {
#[serde(rename = "authorizer_appid", default)]
pub authorizer_appid: Option<String>,
#[serde(rename = "authorizer_access_token", default)]
pub authorizer_access_token: Option<String>,
#[serde(rename = "expires_in", default)]
pub expires_in: Option<i32>,
#[serde(rename = "authorizer_refresh_token", default)]
pub authorizer_refresh_token: Option<String>,
#[serde(rename = "func_info", default, deserialize_with = "de_func_info")]
pub func_info: Vec<i32>,
}
fn de_func_info<'de, D>(d: D) -> Result<Vec<i32>, D::Error>
where
D: serde::Deserializer<'de>,
{
let v = <Vec<serde_json::Value> as Deserialize>::deserialize(d)
.map_err(serde::de::Error::custom)?;
Ok(v.iter()
.filter_map(|item| {
item.get("funcscope_category")
.and_then(|c| c.get("id"))
.and_then(|x| x.as_i64())
.map(|x| x as i32)
})
.collect())
}