solana_pay/
query_parameters.rs

1const AMOUNT: &str = "amount";
2const SPL_TOKEN: &str = "spl-token";
3const REFERENCE: &str = "reference";
4const LABEL: &str = "label";
5const MESSAGE: &str = "message";
6const MEMO: &str = "memo";
7
8#[derive(PartialEq, Clone, Hash, Eq)]
9pub enum QueryParameter {
10    Amount,
11    SplToken,
12    Reference,
13    Label,
14    Message,
15    Memo,
16    Extension(String),
17}
18
19impl ToString for QueryParameter {
20    fn to_string(&self) -> String {
21        self.as_str().to_string()
22    }
23}
24
25impl QueryParameter {
26    pub fn as_str(&self) -> &str {
27        match self {
28            Self::Amount => AMOUNT,
29            Self::SplToken => SPL_TOKEN,
30            Self::Reference => REFERENCE,
31            Self::Label => LABEL,
32            Self::Message => MESSAGE,
33            Self::Memo => MEMO,
34            Self::Extension(extension) => extension,
35        }
36    }
37    pub fn allows_multiple(&self) -> bool {
38        matches!(
39            self,
40            QueryParameter::Reference | QueryParameter::Extension(_)
41        )
42    }
43}
44
45impl From<&str> for QueryParameter {
46    fn from(token: &str) -> QueryParameter {
47        match token {
48            AMOUNT => QueryParameter::Amount,
49            SPL_TOKEN => QueryParameter::SplToken,
50            REFERENCE => QueryParameter::Reference,
51            LABEL => QueryParameter::Label,
52            MESSAGE => QueryParameter::Message,
53            MEMO => QueryParameter::Memo,
54            _ => QueryParameter::Extension(token.to_string()),
55        }
56    }
57}