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