ark/
integration.rs

1
2use std::fmt;
3use std::str::FromStr;
4
5// When adding token types don't forget to update `ParseTokenTypeError`.
6#[derive(Debug, Clone, Copy, Serialize, Deserialize, Hash, PartialEq, Eq)]
7pub enum TokenType {
8	SingleUseBoard,
9}
10
11#[derive(Debug, Clone, PartialEq, Eq, thiserror::Error)]
12#[error("invalid token type: Pick single-use-board")]
13pub struct ParseTokenTypeError {
14}
15
16impl FromStr for TokenType {
17	type Err = ParseTokenTypeError;
18
19	fn from_str(s: &str) -> Result<Self, Self::Err> {
20		match s {
21			"single-use-board" => Ok(TokenType::SingleUseBoard),
22			_ => Err(ParseTokenTypeError {}),
23		}
24	}
25}
26
27impl fmt::Display for TokenType {
28	fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
29		match self {
30			TokenType::SingleUseBoard => f.write_str("single-use-board"),
31		}
32	}
33}
34
35
36#[derive(Debug, Clone, Copy, Serialize, Deserialize, Hash, PartialEq, Eq)]
37pub enum TokenStatus {
38	Unused,
39	Used,
40	Abused,
41	Disabled,
42}
43
44#[derive(Debug, Clone, PartialEq, Eq, thiserror::Error)]
45#[error("invalid token status")]
46pub struct ParseTokenStatusError {
47	pub msg: &'static str,
48}
49
50impl FromStr for TokenStatus {
51	type Err = ParseTokenStatusError;
52
53	fn from_str(s: &str) -> Result<Self, Self::Err> {
54		match s {
55			"unused" => Ok(TokenStatus::Unused),
56			"used" => Ok(TokenStatus::Used),
57			"abused" => Ok(TokenStatus::Abused),
58			"disabled" => Ok(TokenStatus::Disabled),
59			_ => Err(ParseTokenStatusError { msg: "invalid token status" }),
60		}
61	}
62}
63
64impl fmt::Display for TokenStatus {
65	fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
66		match self {
67			TokenStatus::Unused => f.write_str("unused"),
68			TokenStatus::Used => f.write_str("used"),
69			TokenStatus::Abused => f.write_str("abused"),
70			TokenStatus::Disabled => f.write_str("disabled"),
71		}
72	}
73}