facebook_signed_request/
data_deletion_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 #[serde(with = "ts_seconds")]
17 pub expires: DateTime<Utc>,
18}
19impl crate::Payload for Payload {
20 fn algorithm(&self) -> Option<&str> {
21 Some(&self.algorithm)
22 }
23}
24
25pub fn parse(signed_request: &str, app_secret: &str) -> Result<Payload, ParseError> {
26 crate::parse(signed_request, app_secret)
27}
28
29#[cfg(test)]
30mod tests {
31 use super::*;
32
33 #[test]
34 fn test_de() {
35 let json = r#"{"user_id":"218471","algorithm":"HMAC-SHA256","issued_at":1291836800,"expires":1291840400}"#;
36
37 match serde_json::from_str::<Payload>(json) {
38 Ok(payload) => {
39 assert_eq!(payload.user_id, 218471);
40 assert_eq!(payload.algorithm, "HMAC-SHA256");
41 assert_eq!(payload.issued_at.timestamp(), 1291836800);
42 assert_eq!(payload.expires.timestamp(), 1291840400);
43 }
44 Err(err) => panic!("{}", err),
45 }
46 }
47}