ya_client_model/payment/
document_status.rs1use 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}