1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
use serde::{Deserialize, Serialize};

#[derive(Debug, Serialize, Deserialize)]
pub struct WebhookVerificationQueryParams {
    #[serde(rename = "hub.mode")]
    pub hub_mode: String,

    #[serde(rename = "hub.challenge")]
    pub hub_challenge: String,

    #[serde(rename = "hub.verify_token")]
    pub hub_verify_token: String,
}

#[derive(Debug, Serialize, Deserialize)]
pub struct WebhookVerificationResponse {
    #[serde(rename = "hub.challenge")]
    pub hub_challenge: String,
}

#[derive(Serialize, Deserialize, Debug)]
struct WebhookEventData {
    object_type: WebhookEventDataObjectType,
    object_id: i64,
    aspect_type: WebhookEventDataAspectType,
    updates: WebhookEventDataUpdates,
    owner_id: i32,
    subscription_id: i64,
    event_time: i64,
}

#[derive(Serialize, Deserialize, Debug)]
struct WebhookEventDataUpdates {
    authorized: Option<String>,
}

#[derive(Serialize, Deserialize, Debug)]
pub enum WebhookEventDataObjectType {
    #[serde(rename = "activity")]
    Activity,
    #[serde(rename = "athlete")]
    Athlete,
}

#[derive(Serialize, Deserialize, Debug)]
pub enum WebhookEventDataAspectType {
    #[serde(rename = "create")]
    Create,
    #[serde(rename = "update")]
    Update,
    #[serde(rename = "delete")]
    Delete,
}