ya_client_model/payment/
document_status.rs

1use serde::{Deserialize, Serialize};
2use std::convert::TryFrom;
3use std::fmt::{Display, Formatter, Result as FmtResult};
4
5#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
6#[serde(rename_all = "UPPERCASE")]
7pub enum DocumentStatus {
8    Issued,
9    Received,
10    Accepted,
11    Rejected,
12    Failed,
13    Settled,
14    Cancelled,
15}
16
17#[derive(Debug, thiserror::Error)]
18#[error("invalid EventType option: \"{0}\"")]
19pub struct InvalidOption(String);
20
21impl TryFrom<String> for DocumentStatus {
22    type Error = InvalidOption;
23
24    fn try_from(value: String) -> Result<Self, Self::Error> {
25        match value.as_str() {
26            "ISSUED" => Ok(DocumentStatus::Issued),
27            "RECEIVED" => Ok(DocumentStatus::Received),
28            "ACCEPTED" => Ok(DocumentStatus::Accepted),
29            "REJECTED" => Ok(DocumentStatus::Rejected),
30            "FAILED" => Ok(DocumentStatus::Failed),
31            "SETTLED" => Ok(DocumentStatus::Settled),
32            "CANCELLED" => Ok(DocumentStatus::Cancelled),
33            _ => Err(InvalidOption(value)),
34        }
35    }
36}
37
38impl From<DocumentStatus> for String {
39    fn from(invoice_status: DocumentStatus) -> Self {
40        invoice_status.to_string()
41    }
42}
43
44impl Display for DocumentStatus {
45    fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult {
46        let str = serde_json::to_string(self)
47            .unwrap()
48            .trim_matches('"')
49            .to_owned();
50        write!(f, "{}", str)
51    }
52}