facebook_signed_request/
fb_login_deauth_callback.rs1use chrono::{serde::ts_seconds, DateTime, Utc};
4use serde::Deserialize;
5use serde_aux::field_attributes::deserialize_number_from_string;
6
7use crate::ParseError;
8
9#[derive(Deserialize, Debug, Clone)]
10pub struct Payload {
11 #[serde(deserialize_with = "deserialize_number_from_string")]
12 pub user_id: u64,
13 pub algorithm: String,
14 #[serde(with = "ts_seconds")]
15 pub issued_at: DateTime<Utc>,
16}
17impl crate::Payload for Payload {
18 fn algorithm(&self) -> Option<&str> {
19 Some(&self.algorithm)
20 }
21}
22
23pub fn parse(signed_request: &str, app_secret: &str) -> Result<Payload, ParseError> {
24 crate::parse(signed_request, app_secret)
25}
26
27#[cfg(test)]
28mod tests {
29 use super::*;
30
31 #[test]
32 fn test_de() {
33 let json = r#"{"user_id":"0","algorithm":"HMAC-SHA256","issued_at":1624244156}"#;
34
35 match serde_json::from_str::<Payload>(json) {
36 Ok(payload) => {
37 assert_eq!(payload.user_id, 0);
38 assert_eq!(payload.algorithm, "HMAC-SHA256");
39 assert_eq!(payload.issued_at.timestamp(), 1624244156);
40 }
41 Err(err) => panic!("{}", err),
42 }
43 }
44}