net_name.rs 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  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. Solana,
  10. Bitcoin,
  11. Ethereum,
  12. Empty,
  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::Solana => {
  18. write!(f, "Solana")
  19. }
  20. Self::Bitcoin => {
  21. write!(f, "Bitcoin")
  22. }
  23. Self::Ethereum => {
  24. write!(f, "Ethereum")
  25. }
  26. Self::Empty => {
  27. write!(f, "No Supported Network")
  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. "sol" | "solana" => Ok(NetworkName::Solana),
  37. "btc" | "bitcoin" => Ok(NetworkName::Bitcoin),
  38. "eth" | "ethereum" => Ok(NetworkName::Ethereum),
  39. _ => Err(crate::Error::UnsupportedCoinNetwork),
  40. }
  41. }
  42. }
  43. impl Encodable for NetworkName {
  44. fn encode<S: std::io::Write>(&self, s: S) -> Result<usize> {
  45. let name = self.to_string();
  46. let len = name.encode(s)?;
  47. Ok(len)
  48. }
  49. }
  50. impl Decodable for NetworkName {
  51. fn decode<D: std::io::Read>(mut d: D) -> Result<Self> {
  52. let name: String = Decodable::decode(&mut d)?;
  53. let name = NetworkName::from_str(&name)?;
  54. Ok(name)
  55. }
  56. }