clone_solana_cluster_type/
lib.rs1#![cfg_attr(feature = "frozen-abi", feature(min_specialization))]
2#![cfg_attr(docsrs, feature(doc_auto_cfg))]
3#[cfg(feature = "frozen-abi")]
4use clone_solana_frozen_abi_macro::{AbiEnumVisitor, AbiExample};
5use {clone_solana_hash::Hash, std::str::FromStr};
6
7#[cfg_attr(feature = "frozen-abi", derive(AbiExample, AbiEnumVisitor))]
9#[cfg_attr(
10 feature = "serde",
11 derive(serde_derive::Deserialize, serde_derive::Serialize)
12)]
13#[derive(Debug, Clone, Copy, PartialEq, Eq)]
14pub enum ClusterType {
15 Testnet,
16 MainnetBeta,
17 Devnet,
18 Development,
19}
20
21impl ClusterType {
22 pub const STRINGS: [&'static str; 4] = ["development", "devnet", "testnet", "mainnet-beta"];
23
24 pub fn get_genesis_hash(&self) -> Option<Hash> {
26 match self {
27 Self::MainnetBeta => {
28 Some(Hash::from_str("5eykt4UsFv8P8NJdTREpY1vzqKqZKvdpKuc147dw2N9d").unwrap())
29 }
30 Self::Testnet => {
31 Some(Hash::from_str("4uhcVJyU9pJkvQyS88uRDiswHXSCkY3zQawwpjk2NsNY").unwrap())
32 }
33 Self::Devnet => {
34 Some(Hash::from_str("EtWTRABZaYq6iMfeYKouRu166VU2xqa1wcaWoxPkrZBG").unwrap())
35 }
36 Self::Development => None,
37 }
38 }
39}
40
41impl FromStr for ClusterType {
42 type Err = String;
43
44 fn from_str(s: &str) -> Result<Self, Self::Err> {
45 match s {
46 "development" => Ok(ClusterType::Development),
47 "devnet" => Ok(ClusterType::Devnet),
48 "testnet" => Ok(ClusterType::Testnet),
49 "mainnet-beta" => Ok(ClusterType::MainnetBeta),
50 _ => Err(format!("{s} is unrecognized for cluster type")),
51 }
52 }
53}