cloudflare/endpoints/argo_tunnel/
list_tunnels.rs

1use chrono::{DateTime, Utc};
2use serde::Serialize;
3
4use super::Tunnel;
5use crate::framework::endpoint::{serialize_query, EndpointSpec, Method};
6use crate::framework::response::ApiSuccess;
7
8/// List/search tunnels in an account.
9/// <https://api.cloudflare.com/#argo-tunnel-list-argo-tunnels>
10#[derive(Debug)]
11pub struct ListTunnels<'a> {
12    pub account_identifier: &'a str,
13    pub params: Params,
14}
15
16impl EndpointSpec for ListTunnels<'_> {
17    type JsonResponse = Vec<Tunnel>;
18    type ResponseType = ApiSuccess<Self::JsonResponse>;
19
20    fn method(&self) -> Method {
21        Method::GET
22    }
23    fn path(&self) -> String {
24        format!("accounts/{}/tunnels", self.account_identifier)
25    }
26    #[inline]
27    fn query(&self) -> Option<String> {
28        serialize_query(&self.params)
29    }
30}
31
32/// Params for filtering listed tunnels
33#[serde_with::skip_serializing_none]
34#[derive(Serialize, Clone, Debug, Default)]
35pub struct Params {
36    pub name: Option<String>,
37    pub uuid: Option<String>,
38    pub is_deleted: Option<bool>,
39    pub existed_at: Option<DateTime<Utc>>,
40    pub name_prefix: Option<String>,
41    pub was_inactive_at: Option<DateTime<Utc>>,
42    pub exclude_prefix: Option<String>,
43    #[serde(flatten)]
44    pub pagination_params: Option<PaginationParams>,
45}
46
47#[derive(Serialize, Clone, Debug)]
48pub struct PaginationParams {
49    pub page: u64,
50    pub per_page: u64,
51}