cloudflare/endpoints/argo_tunnel/
data_structures.rs

1use chrono::{offset::Utc, DateTime};
2use uuid::Uuid;
3
4use crate::framework::ApiResultTraits;
5
6/// A Named Argo Tunnel
7/// This is an Argo Tunnel that has been created. It can be used for routing and subsequent running.
8/// https://api.cloudflare.com/#argo-tunnel-properties
9#[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Eq)]
10pub struct Tunnel {
11    pub id: Uuid,
12    pub created_at: DateTime<Utc>,
13    pub deleted_at: Option<DateTime<Utc>>,
14    pub name: String,
15    pub connections: Vec<ActiveConnection>,
16    pub metadata: serde_json::Value,
17}
18
19/// An active connection for a Named Argo Tunnel.
20/// https://api.cloudflare.com/#argo-tunnel-properties
21#[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Eq)]
22pub struct ActiveConnection {
23    pub colo_name: String,
24    pub id: Uuid,
25    pub is_pending_reconnect: bool,
26}
27
28impl ApiResultTraits for Tunnel {}
29impl ApiResultTraits for Vec<Tunnel> {}
30
31/// The result of a route request for a Named Argo Tunnel
32#[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Eq)]
33#[serde(untagged)]
34pub enum RouteResult {
35    Dns(DnsRouteResult),
36    Lb(LoadBalancerRouteResult),
37}
38
39#[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Eq)]
40pub struct DnsRouteResult {
41    pub cname: Change,
42}
43
44#[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Eq)]
45pub struct LoadBalancerRouteResult {
46    pub load_balancer: Change,
47    pub pool: Change,
48}
49
50#[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Eq)]
51#[serde(rename_all = "lowercase")]
52pub enum Change {
53    Unchanged,
54    New,
55    Updated,
56}
57
58impl ApiResultTraits for RouteResult {}