fedimint_core/
admin_client.rs1use std::collections::BTreeMap;
2use std::fmt::Debug;
3
4use fedimint_core::util::SafeUrl;
5use serde::{Deserialize, Serialize};
6#[cfg(not(target_family = "wasm"))]
7use tokio_rustls::rustls::Certificate as RustlsCertificate;
8
9use crate::config::ServerModuleConfigGenParamsRegistry;
10use crate::PeerId;
11
12#[derive(Debug, Clone, Default, Serialize, Deserialize, Eq, PartialEq)]
14#[serde(rename_all = "snake_case")]
15pub enum ServerStatus {
16 #[default]
18 AwaitingPassword,
19 SharingConfigGenParams,
21 ReadyForConfigGen,
23 ConfigGenFailed,
25 VerifyingConfigs,
27 VerifiedConfigs,
29 ConsensusRunning,
31 SetupRestarted,
34}
35
36#[cfg(target_family = "wasm")]
37#[derive(Debug, Clone, Eq, Hash, Ord, PartialEq, PartialOrd)]
38struct RustlsCertificate(pub Vec<u8>);
39
40#[derive(Debug, Clone, Serialize, Deserialize)]
42pub struct ConfigGenConnectionsRequest {
43 pub our_name: String,
45 pub leader_api_url: Option<SafeUrl>,
48}
49
50#[derive(Clone, Debug, Serialize, Deserialize, Eq, PartialEq)]
51pub struct PeerServerParams {
53 #[serde(with = "serde_tls_cert")]
55 pub cert: RustlsCertificate,
56 pub p2p_url: SafeUrl,
58 pub api_url: SafeUrl,
60 pub name: String,
62 pub status: Option<ServerStatus>,
64}
65
66#[derive(Debug, Clone, Serialize, Deserialize, Eq, PartialEq)]
69pub struct ConfigGenParamsConsensus {
70 pub peers: BTreeMap<PeerId, PeerServerParams>,
72 pub meta: BTreeMap<String, String>,
74 pub modules: ServerModuleConfigGenParamsRegistry,
76}
77
78#[derive(Debug, Clone, Serialize, Deserialize, Eq, PartialEq)]
80pub struct ConfigGenParamsResponse {
81 pub consensus: ConfigGenParamsConsensus,
83 pub our_current_id: PeerId,
85}
86
87#[derive(Debug, Clone, Default, Serialize, Deserialize, Eq, PartialEq)]
89pub struct ConfigGenParamsRequest {
90 pub meta: BTreeMap<String, String>,
92 pub modules: ServerModuleConfigGenParamsRegistry,
94}
95
96mod serde_tls_cert {
97 use std::borrow::Cow;
98
99 use hex::{FromHex, ToHex};
100 use serde::de::Error;
101 use serde::{Deserialize, Deserializer, Serializer};
102
103 use super::RustlsCertificate;
104
105 pub fn serialize<S>(certs: &RustlsCertificate, serializer: S) -> Result<S::Ok, S::Error>
106 where
107 S: Serializer,
108 {
109 let hex_str = certs.0.encode_hex::<String>();
110 serializer.serialize_str(&hex_str)
111 }
112
113 pub fn deserialize<'de, D>(deserializer: D) -> Result<RustlsCertificate, D::Error>
114 where
115 D: Deserializer<'de>,
116 {
117 let value: Cow<str> = Deserialize::deserialize(deserializer)?;
118 Ok(RustlsCertificate(
119 Vec::from_hex(value.as_ref()).map_err(D::Error::custom)?,
120 ))
121 }
122}