|
1 | 1 | use crate::{Message, Request as KiRequest}; |
| 2 | +pub use alloy::rpc::client::Authorization; |
2 | 3 | pub use alloy::rpc::json_rpc::ErrorPayload; |
3 | 4 | pub use alloy::rpc::types::eth::pubsub::SubscriptionResult; |
4 | 5 | pub use alloy::rpc::types::pubsub::Params; |
@@ -219,21 +220,67 @@ pub struct ProviderConfig { |
219 | 220 | pub provider: NodeOrRpcUrl, |
220 | 221 | } |
221 | 222 |
|
222 | | -#[derive(Clone, Debug, Deserialize, Serialize, Hash, Eq, PartialEq)] |
| 223 | +#[derive(Clone, Debug, Serialize, Hash, Eq, PartialEq)] |
223 | 224 | pub enum NodeOrRpcUrl { |
224 | 225 | Node { |
225 | 226 | kns_update: crate::net::KnsUpdate, |
226 | 227 | use_as_provider: bool, // false for just-routers inside saved config |
227 | 228 | }, |
228 | | - RpcUrl(String), |
| 229 | + RpcUrl { |
| 230 | + url: String, |
| 231 | + auth: Option<Authorization>, |
| 232 | + }, |
229 | 233 | } |
230 | 234 |
|
231 | 235 | impl std::cmp::PartialEq<str> for NodeOrRpcUrl { |
232 | 236 | fn eq(&self, other: &str) -> bool { |
233 | 237 | match self { |
234 | 238 | NodeOrRpcUrl::Node { kns_update, .. } => kns_update.name == other, |
235 | | - NodeOrRpcUrl::RpcUrl(url) => url == other, |
| 239 | + NodeOrRpcUrl::RpcUrl { url, .. } => url == other, |
| 240 | + } |
| 241 | + } |
| 242 | +} |
| 243 | + |
| 244 | +impl<'de> Deserialize<'de> for NodeOrRpcUrl { |
| 245 | + fn deserialize<D>(serde::deserializer: D) -> Result<Self, D::Error> |
| 246 | + where |
| 247 | + D: serde::Deserializer<'de>, |
| 248 | + { |
| 249 | + #[derive(Deserialize)] |
| 250 | + #[serde(untagged)] |
| 251 | + enum RpcUrlHelper { |
| 252 | + String(String), |
| 253 | + Struct { |
| 254 | + url: String, |
| 255 | + auth: Option<Authorization>, |
| 256 | + }, |
236 | 257 | } |
| 258 | + |
| 259 | + #[derive(Deserialize)] |
| 260 | + #[serde(tag = "type")] |
| 261 | + enum Helper { |
| 262 | + Node { |
| 263 | + kns_update: crate::core::KnsUpdate, |
| 264 | + use_as_provider: bool, |
| 265 | + }, |
| 266 | + RpcUrl(RpcUrlHelper), |
| 267 | + } |
| 268 | + |
| 269 | + let helper = Helper::deserialize(deserializer)?; |
| 270 | + |
| 271 | + Ok(match helper { |
| 272 | + Helper::Node { |
| 273 | + kns_update, |
| 274 | + use_as_provider, |
| 275 | + } => NodeOrRpcUrl::Node { |
| 276 | + kns_update, |
| 277 | + use_as_provider, |
| 278 | + }, |
| 279 | + Helper::RpcUrl(url_helper) => match url_helper { |
| 280 | + RpcUrlHelper::String(url) => NodeOrRpcUrl::RpcUrl { url, auth: None }, |
| 281 | + RpcUrlHelper::Struct { url, auth } => NodeOrRpcUrl::RpcUrl { url, auth }, |
| 282 | + }, |
| 283 | + }) |
237 | 284 | } |
238 | 285 | } |
239 | 286 |
|
|
0 commit comments