|
5 | 5 | //! by the tracker server crate, but also by other crates in the Torrust
|
6 | 6 | //! ecosystem.
|
7 | 7 | use std::collections::BTreeMap;
|
| 8 | +use std::fmt; |
| 9 | +use std::str::FromStr; |
8 | 10 | use std::time::Duration;
|
9 | 11 |
|
10 | 12 | use info_hash::InfoHash;
|
@@ -92,6 +94,32 @@ impl Default for TrackerMode {
|
92 | 94 | }
|
93 | 95 | }
|
94 | 96 |
|
| 97 | +impl fmt::Display for TrackerMode { |
| 98 | + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { |
| 99 | + let display_str = match self { |
| 100 | + TrackerMode::Public => "public", |
| 101 | + TrackerMode::Listed => "listed", |
| 102 | + TrackerMode::Private => "private", |
| 103 | + TrackerMode::PrivateListed => "private_listed", |
| 104 | + }; |
| 105 | + write!(f, "{display_str}") |
| 106 | + } |
| 107 | +} |
| 108 | + |
| 109 | +impl FromStr for TrackerMode { |
| 110 | + type Err = String; |
| 111 | + |
| 112 | + fn from_str(s: &str) -> Result<Self, Self::Err> { |
| 113 | + match s.to_lowercase().as_str() { |
| 114 | + "public" => Ok(TrackerMode::Public), |
| 115 | + "listed" => Ok(TrackerMode::Listed), |
| 116 | + "private" => Ok(TrackerMode::Private), |
| 117 | + "private_listed" => Ok(TrackerMode::PrivateListed), |
| 118 | + _ => Err(format!("Unknown tracker mode: {s}")), |
| 119 | + } |
| 120 | + } |
| 121 | +} |
| 122 | + |
95 | 123 | impl TrackerMode {
|
96 | 124 | #[must_use]
|
97 | 125 | pub fn is_open(&self) -> bool {
|
|
0 commit comments