near_jsonrpc_primitives/types/
config.rs1use serde_json::Value;
2
3#[derive(serde::Serialize, serde::Deserialize, Debug)]
4#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
5pub struct RpcProtocolConfigRequest {
6 #[serde(flatten)]
7 pub block_reference: near_primitives::types::BlockReference,
8}
9
10#[derive(serde::Serialize, serde::Deserialize, Debug)]
11#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
12pub struct RpcProtocolConfigResponse {
13 #[serde(flatten)]
14 pub config_view: near_chain_configs::ProtocolConfigView,
15}
16
17#[derive(thiserror::Error, Debug, Clone, serde::Serialize, serde::Deserialize)]
18#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
19#[serde(tag = "name", content = "info", rename_all = "SCREAMING_SNAKE_CASE")]
20pub enum RpcProtocolConfigError {
21 #[error("Block has never been observed: {error_message}")]
22 UnknownBlock {
23 #[serde(skip_serializing)]
24 error_message: String,
25 },
26 #[error("The node reached its limits. Try again later. More details: {error_message}")]
27 InternalError { error_message: String },
28}
29
30impl From<RpcProtocolConfigError> for crate::errors::RpcError {
31 fn from(error: RpcProtocolConfigError) -> Self {
32 let error_data = match &error {
33 RpcProtocolConfigError::UnknownBlock { error_message } => {
34 Some(Value::String(format!("Block Not Found: {}", error_message)))
35 }
36 RpcProtocolConfigError::InternalError { .. } => Some(Value::String(error.to_string())),
37 };
38
39 let error_data_value = match serde_json::to_value(error) {
40 Ok(value) => value,
41 Err(err) => {
42 return Self::new_internal_error(
43 None,
44 format!("Failed to serialize RpcProtocolConfigError: {:?}", err),
45 );
46 }
47 };
48
49 Self::new_internal_or_handler_error(error_data, error_data_value)
50 }
51}