use alloc::{string::String, vec::Vec};
use serde::{Deserialize, Serialize};
pub use crate::common::*;
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct Ens {
pub registry: String,
}
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct Explorer {
pub name: String,
pub url: String,
pub standard: String,
}
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct Bridge {
pub url: String,
}
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct Parent {
#[serde(rename = "type")]
pub type_: String,
pub chain: String,
pub bridges: Option<Vec<Bridge>>,
}
#[derive(Clone, Debug, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub enum RedFlag {
ReusedChainId,
}
#[derive(Clone, Debug, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct Chain {
pub name: String,
pub short_name: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub title: Option<String>,
pub chain: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub icon: Option<String>,
pub rpc: Vec<String>,
pub faucets: Vec<String>,
pub native_currency: NativeCurrency,
#[serde(rename = "infoURL")]
pub info_url: String,
pub chain_id: u64,
pub network_id: u64,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub slip44: Option<u64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub ens: Option<Ens>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub explorers: Option<Vec<Explorer>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub parent: Option<Parent>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub status: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub red_flags: Option<Vec<RedFlag>>,
}