net_name.rs 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. use std::str::FromStr;
  2. use serde::{Deserialize, Serialize};
  3. use crate::{
  4. util::serial::{Decodable, Encodable},
  5. Result,
  6. };
  7. #[derive(Debug, PartialEq, Eq, Hash, Clone, Serialize, Deserialize)]
  8. pub enum NetworkName {
  9. DarkFi,
  10. Solana,
  11. Bitcoin,
  12. Ethereum,
  13. }
  14. impl std::fmt::Display for NetworkName {
  15. fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
  16. match self {
  17. Self::DarkFi => {
  18. write!(f, "DarkFi")
  19. }
  20. Self::Solana => {
  21. write!(f, "Solana")
  22. }
  23. Self::Bitcoin => {
  24. write!(f, "Bitcoin")
  25. }
  26. Self::Ethereum => {
  27. write!(f, "Ethereum")
  28. }
  29. }
  30. }
  31. }
  32. impl FromStr for NetworkName {
  33. type Err = crate::Error;
  34. fn from_str(s: &str) -> std::result::Result<Self, Self::Err> {
  35. match s.to_lowercase().as_str() {
  36. "drk" | "darkfi" => Ok(NetworkName::DarkFi),
  37. "sol" | "solana" => Ok(NetworkName::Solana),
  38. "btc" | "bitcoin" => Ok(NetworkName::Bitcoin),
  39. "eth" | "ethereum" => Ok(NetworkName::Ethereum),
  40. _ => Err(crate::Error::UnsupportedCoinNetwork),
  41. }
  42. }
  43. }
  44. impl Encodable for NetworkName {
  45. fn encode<S: std::io::Write>(&self, s: S) -> Result<usize> {
  46. let name = self.to_string();
  47. let len = name.encode(s)?;
  48. Ok(len)
  49. }
  50. }
  51. impl Decodable for NetworkName {
  52. fn decode<D: std::io::Read>(mut d: D) -> Result<Self> {
  53. let name: String = Decodable::decode(&mut d)?;
  54. let name = NetworkName::from_str(&name)?;
  55. Ok(name)
  56. }
  57. }