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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
//! Model struct for ListPaymentRefundsParameters (query parameters)

use super::{
    enums::{PaymentRefundStatus, PaymentSourceType, SortOrder},
    DateTime,
};

/// This is a model struct for ListPaymentRefundsParameters (query parameters)
#[derive(Clone, Debug, Default)]
pub struct ListPaymentRefundsParameters {
    /// The timestamp for the beginning of the reporting period. Inclusive.
    ///
    /// Default: The current time minus one year.
    pub begin_time: Option<DateTime>,
    /// The timestamp for the end of the reporting period.
    ///
    /// Default: The current time.
    pub end_time: Option<DateTime>,
    /// The order in which results are listed.
    /// * `ASC` - Oldest to newest.
    /// * `DESC` - Newest to oldest (default).
    pub sort_order: Option<SortOrder>,
    /// A pagination cursor returned by a previous call to this endpoint. Provide this cursor to
    /// retrieve the next set of results for the original query.
    ///
    /// For more information, see
    /// [Pagination](https://developer.squareup.com/docs/basics/api101/pagination).
    pub cursor: Option<String>,
    /// Limit results to the location supplied. By default, results are returned for all locations
    /// associated with the seller.
    pub location_id: Option<String>,
    /// If provided, only refunds with the given status are returned.
    ///
    /// Default: If omitted, refunds are returned regardless of their status.
    pub status: Option<PaymentRefundStatus>,
    /// If provided, only returns refunds whose payments have the indicated source type. Current
    /// values include CARD, BANK_ACCOUNT, WALLET, CASH, and EXTERNAL. For information about these
    /// payment source types,
    /// see [Take Payments](https://developer.squareup.com/docs/payments-api/take-payments).
    ///
    /// Default: If omitted, refunds are returned regardless of the source type.
    pub source_type: Option<PaymentSourceType>,
    /// The maximum number of results to be returned in a single page. It is possible to receive
    /// fewer results than the specified limit on a given page.
    ///
    /// The default value of 100 is also the maximum allowed value. If the provided value is greater
    /// than 100, it is ignored and the default value is used instead.
    ///
    /// Default: `100`
    pub limit: Option<i32>,
}

impl ListPaymentRefundsParameters {
    pub fn to_query_string(&self) -> String {
        self.to_string()
    }
}

impl From<ListPaymentRefundsParameters> for String {
    fn from(list_payment_refunds_parameters: ListPaymentRefundsParameters) -> Self {
        list_payment_refunds_parameters.to_string()
    }
}

impl ToString for ListPaymentRefundsParameters {
    fn to_string(&self) -> String {
        let mut params = Vec::new();

        if let Some(begin_time) = &self.begin_time {
            params.push(format!("begin_time={}", begin_time));
        }

        if let Some(end_time) = &self.end_time {
            params.push(format!("end_time={}", end_time));
        }

        if let Some(sort_order) = &self.sort_order {
            params.push(format!("sort_order={}", serde_json::to_string(sort_order).unwrap()));
        }

        if let Some(cursor) = &self.cursor {
            params.push(format!("cursor={}", cursor));
        }

        if let Some(location_id) = &self.location_id {
            params.push(format!("location_id={}", location_id));
        }

        if let Some(status) = &self.status {
            params.push(format!("status={}", serde_json::to_string(status).unwrap()));
        }

        if let Some(source_type) = &self.source_type {
            params.push(format!("source_type={}", serde_json::to_string(source_type).unwrap()));
        }

        if let Some(limit) = &self.limit {
            params.push(format!("limit={}", limit));
        }

        if params.is_empty() {
            String::new()
        } else {
            format!("?{}", params.join("&"))
        }
    }
}