mirror of
https://github.com/Cuprate/cuprate.git
synced 2024-12-22 19:49:28 +00:00
rpc-types: add traits and enum
requests/responses (#241)
Some checks failed
CI / fmt (push) Has been cancelled
CI / typo (push) Has been cancelled
CI / ci (macos-latest, stable, bash) (push) Has been cancelled
CI / ci (ubuntu-latest, stable, bash) (push) Has been cancelled
CI / ci (windows-latest, stable-x86_64-pc-windows-gnu, msys2 {0}) (push) Has been cancelled
Doc / build (push) Has been cancelled
Doc / deploy (push) Has been cancelled
Some checks failed
CI / fmt (push) Has been cancelled
CI / typo (push) Has been cancelled
CI / ci (macos-latest, stable, bash) (push) Has been cancelled
CI / ci (ubuntu-latest, stable, bash) (push) Has been cancelled
CI / ci (windows-latest, stable-x86_64-pc-windows-gnu, msys2 {0}) (push) Has been cancelled
Doc / build (push) Has been cancelled
Doc / deploy (push) Has been cancelled
apply diff
This commit is contained in:
parent
dced4ed7ec
commit
bd375eae40
7 changed files with 700 additions and 61 deletions
|
@ -7,6 +7,8 @@ This crate ports the types used in Monero's RPC interface, including:
|
||||||
- Mixed types
|
- Mixed types
|
||||||
- Other commonly used RPC types
|
- Other commonly used RPC types
|
||||||
|
|
||||||
|
It also includes some traits for these types.
|
||||||
|
|
||||||
# Modules
|
# Modules
|
||||||
This crate's types are split in the following manner:
|
This crate's types are split in the following manner:
|
||||||
|
|
||||||
|
@ -94,6 +96,12 @@ The invariants that can be relied upon:
|
||||||
- Types in [`bin`] will implement `epee` correctly
|
- Types in [`bin`] will implement `epee` correctly
|
||||||
- Misc types will implement `serde/epee` correctly as needed
|
- Misc types will implement `serde/epee` correctly as needed
|
||||||
|
|
||||||
|
# Requests and responses
|
||||||
|
For `enum`s that encapsulate all request/response types, see:
|
||||||
|
- [`crate::json::JsonRpcRequest`] & [`crate::json::JsonRpcResponse`]
|
||||||
|
- [`crate::bin::BinRequest`] & [`crate::bin::BinResponse`]
|
||||||
|
- [`crate::other::OtherRequest`] & [`crate::other::OtherResponse`]
|
||||||
|
|
||||||
# Feature flags
|
# Feature flags
|
||||||
List of feature flags for `cuprate-rpc-types`.
|
List of feature flags for `cuprate-rpc-types`.
|
||||||
|
|
||||||
|
|
|
@ -28,6 +28,7 @@ use crate::{
|
||||||
HardforkEntry, HistogramEntry, OutKeyBin, OutputDistributionData, Peer, PoolInfoExtent,
|
HardforkEntry, HistogramEntry, OutKeyBin, OutputDistributionData, Peer, PoolInfoExtent,
|
||||||
PoolTxInfo, SetBan, Span, Status, TxBacklogEntry,
|
PoolTxInfo, SetBan, Span, Status, TxBacklogEntry,
|
||||||
},
|
},
|
||||||
|
rpc_call::{RpcCall, RpcCallValue},
|
||||||
};
|
};
|
||||||
|
|
||||||
//---------------------------------------------------------------------------------------------------- Definitions
|
//---------------------------------------------------------------------------------------------------- Definitions
|
||||||
|
@ -393,6 +394,72 @@ impl EpeeObject for GetBlocksResponse {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------------------------------- Request
|
||||||
|
/// Binary requests.
|
||||||
|
///
|
||||||
|
/// This enum contains all [`crate::bin`] requests.
|
||||||
|
///
|
||||||
|
/// See also: [`BinResponse`].
|
||||||
|
#[cfg_attr(feature = "serde", derive(Deserialize, Serialize))]
|
||||||
|
#[cfg_attr(feature = "serde", serde(untagged))]
|
||||||
|
#[allow(missing_docs)]
|
||||||
|
#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
|
||||||
|
pub enum BinRequest {
|
||||||
|
GetBlocks(GetBlocksRequest),
|
||||||
|
GetBlocksByHeight(GetBlocksByHeightRequest),
|
||||||
|
GetHashes(GetHashesRequest),
|
||||||
|
GetOutputIndexes(GetOutputIndexesRequest),
|
||||||
|
GetOuts(GetOutsRequest),
|
||||||
|
GetTransactionPoolHashes(GetTransactionPoolHashesRequest),
|
||||||
|
GetOutputDistribution(crate::json::GetOutputDistributionRequest),
|
||||||
|
}
|
||||||
|
|
||||||
|
impl RpcCallValue for BinRequest {
|
||||||
|
fn is_restricted(&self) -> bool {
|
||||||
|
match self {
|
||||||
|
Self::GetBlocks(x) => x.is_restricted(),
|
||||||
|
Self::GetBlocksByHeight(x) => x.is_restricted(),
|
||||||
|
Self::GetHashes(x) => x.is_restricted(),
|
||||||
|
Self::GetOutputIndexes(x) => x.is_restricted(),
|
||||||
|
Self::GetOuts(x) => x.is_restricted(),
|
||||||
|
Self::GetTransactionPoolHashes(x) => x.is_restricted(),
|
||||||
|
Self::GetOutputDistribution(x) => x.is_restricted(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn is_empty(&self) -> bool {
|
||||||
|
match self {
|
||||||
|
Self::GetBlocks(x) => x.is_empty(),
|
||||||
|
Self::GetBlocksByHeight(x) => x.is_empty(),
|
||||||
|
Self::GetHashes(x) => x.is_empty(),
|
||||||
|
Self::GetOutputIndexes(x) => x.is_empty(),
|
||||||
|
Self::GetOuts(x) => x.is_empty(),
|
||||||
|
Self::GetTransactionPoolHashes(x) => x.is_empty(),
|
||||||
|
Self::GetOutputDistribution(x) => x.is_empty(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------------------------------- Response
|
||||||
|
/// Binary responses.
|
||||||
|
///
|
||||||
|
/// This enum contains all [`crate::bin`] responses.
|
||||||
|
///
|
||||||
|
/// See also: [`BinRequest`].
|
||||||
|
#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
|
||||||
|
#[cfg_attr(feature = "serde", derive(Deserialize, Serialize))]
|
||||||
|
#[cfg_attr(feature = "serde", serde(untagged))]
|
||||||
|
#[allow(missing_docs)]
|
||||||
|
pub enum BinResponse {
|
||||||
|
GetBlocks(GetBlocksResponse),
|
||||||
|
GetBlocksByHeight(GetBlocksByHeightResponse),
|
||||||
|
GetHashes(GetHashesResponse),
|
||||||
|
GetOutputIndexes(GetOutputIndexesResponse),
|
||||||
|
GetOuts(GetOutsResponse),
|
||||||
|
GetTransactionPoolHashes(GetTransactionPoolHashesResponse),
|
||||||
|
GetOutputDistribution(crate::json::GetOutputDistributionResponse),
|
||||||
|
}
|
||||||
|
|
||||||
//---------------------------------------------------------------------------------------------------- Tests
|
//---------------------------------------------------------------------------------------------------- Tests
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod test {
|
mod test {
|
||||||
|
|
|
@ -3,6 +3,9 @@
|
||||||
//! All types are originally defined in [`rpc/core_rpc_server_commands_defs.h`](https://github.com/monero-project/monero/blob/cc73fe71162d564ffda8e549b79a350bca53c454/src/rpc/core_rpc_server_commands_defs.h).
|
//! All types are originally defined in [`rpc/core_rpc_server_commands_defs.h`](https://github.com/monero-project/monero/blob/cc73fe71162d564ffda8e549b79a350bca53c454/src/rpc/core_rpc_server_commands_defs.h).
|
||||||
|
|
||||||
//---------------------------------------------------------------------------------------------------- Import
|
//---------------------------------------------------------------------------------------------------- Import
|
||||||
|
#[cfg(feature = "serde")]
|
||||||
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
base::{AccessResponseBase, ResponseBase},
|
base::{AccessResponseBase, ResponseBase},
|
||||||
defaults::{
|
defaults::{
|
||||||
|
@ -16,6 +19,7 @@ use crate::{
|
||||||
GetMinerDataTxBacklogEntry, HardforkEntry, HistogramEntry, OutputDistributionData, SetBan,
|
GetMinerDataTxBacklogEntry, HardforkEntry, HistogramEntry, OutputDistributionData, SetBan,
|
||||||
Span, Status, SyncInfoPeer, TxBacklogEntry,
|
Span, Status, SyncInfoPeer, TxBacklogEntry,
|
||||||
},
|
},
|
||||||
|
rpc_call::RpcCallValue,
|
||||||
};
|
};
|
||||||
|
|
||||||
//---------------------------------------------------------------------------------------------------- Macro
|
//---------------------------------------------------------------------------------------------------- Macro
|
||||||
|
@ -93,7 +97,17 @@ define_request_and_response! {
|
||||||
cc73fe71162d564ffda8e549b79a350bca53c454 => core_rpc_server_commands_defs.h => 943..=994,
|
cc73fe71162d564ffda8e549b79a350bca53c454 => core_rpc_server_commands_defs.h => 943..=994,
|
||||||
|
|
||||||
// The base type name.
|
// The base type name.
|
||||||
GetBlockTemplate,
|
//
|
||||||
|
// After the type name, 2 optional idents are allowed:
|
||||||
|
// - `restricted`
|
||||||
|
// - `empty`
|
||||||
|
//
|
||||||
|
// These have to be within `()` and will affect the
|
||||||
|
// [`crate::RpcCall`] implementation on the request type.
|
||||||
|
//
|
||||||
|
// This type is not either restricted or empty so nothing is
|
||||||
|
// here, but the correct syntax is shown in a comment below:
|
||||||
|
GetBlockTemplate /* (restricted, empty) */,
|
||||||
|
|
||||||
// The request type.
|
// The request type.
|
||||||
//
|
//
|
||||||
|
@ -218,7 +232,7 @@ define_request_and_response! {
|
||||||
get_block_count,
|
get_block_count,
|
||||||
cc73fe71162d564ffda8e549b79a350bca53c454 =>
|
cc73fe71162d564ffda8e549b79a350bca53c454 =>
|
||||||
core_rpc_server_commands_defs.h => 919..=933,
|
core_rpc_server_commands_defs.h => 919..=933,
|
||||||
GetBlockCount,
|
GetBlockCount (empty),
|
||||||
|
|
||||||
// There are no request fields specified,
|
// There are no request fields specified,
|
||||||
// this will cause the macro to generate a
|
// this will cause the macro to generate a
|
||||||
|
@ -300,7 +314,7 @@ define_request_and_response! {
|
||||||
cc73fe71162d564ffda8e549b79a350bca53c454 =>
|
cc73fe71162d564ffda8e549b79a350bca53c454 =>
|
||||||
core_rpc_server_commands_defs.h => 1130..=1161,
|
core_rpc_server_commands_defs.h => 1130..=1161,
|
||||||
|
|
||||||
GenerateBlocks,
|
GenerateBlocks (restricted),
|
||||||
|
|
||||||
#[doc = serde_doc_test!(
|
#[doc = serde_doc_test!(
|
||||||
GENERATE_BLOCKS_REQUEST => GenerateBlocksRequest {
|
GENERATE_BLOCKS_REQUEST => GenerateBlocksRequest {
|
||||||
|
@ -633,7 +647,7 @@ define_request_and_response! {
|
||||||
cc73fe71162d564ffda8e549b79a350bca53c454 =>
|
cc73fe71162d564ffda8e549b79a350bca53c454 =>
|
||||||
core_rpc_server_commands_defs.h => 1734..=1754,
|
core_rpc_server_commands_defs.h => 1734..=1754,
|
||||||
|
|
||||||
GetConnections,
|
GetConnections (restricted, empty),
|
||||||
|
|
||||||
Request {},
|
Request {},
|
||||||
|
|
||||||
|
@ -708,7 +722,7 @@ define_request_and_response! {
|
||||||
get_info,
|
get_info,
|
||||||
cc73fe71162d564ffda8e549b79a350bca53c454 =>
|
cc73fe71162d564ffda8e549b79a350bca53c454 =>
|
||||||
core_rpc_server_commands_defs.h => 693..=789,
|
core_rpc_server_commands_defs.h => 693..=789,
|
||||||
GetInfo,
|
GetInfo (empty),
|
||||||
Request {},
|
Request {},
|
||||||
|
|
||||||
#[doc = serde_doc_test!(
|
#[doc = serde_doc_test!(
|
||||||
|
@ -802,7 +816,7 @@ define_request_and_response! {
|
||||||
hard_fork_info,
|
hard_fork_info,
|
||||||
cc73fe71162d564ffda8e549b79a350bca53c454 =>
|
cc73fe71162d564ffda8e549b79a350bca53c454 =>
|
||||||
core_rpc_server_commands_defs.h => 1958..=1995,
|
core_rpc_server_commands_defs.h => 1958..=1995,
|
||||||
HardForkInfo,
|
HardForkInfo (empty),
|
||||||
Request {},
|
Request {},
|
||||||
|
|
||||||
#[doc = serde_doc_test!(
|
#[doc = serde_doc_test!(
|
||||||
|
@ -834,7 +848,8 @@ define_request_and_response! {
|
||||||
set_bans,
|
set_bans,
|
||||||
cc73fe71162d564ffda8e549b79a350bca53c454 =>
|
cc73fe71162d564ffda8e549b79a350bca53c454 =>
|
||||||
core_rpc_server_commands_defs.h => 2032..=2067,
|
core_rpc_server_commands_defs.h => 2032..=2067,
|
||||||
SetBans,
|
|
||||||
|
SetBans (restricted),
|
||||||
|
|
||||||
#[doc = serde_doc_test!(
|
#[doc = serde_doc_test!(
|
||||||
SET_BANS_REQUEST => SetBansRequest {
|
SET_BANS_REQUEST => SetBansRequest {
|
||||||
|
@ -862,7 +877,7 @@ define_request_and_response! {
|
||||||
get_bans,
|
get_bans,
|
||||||
cc73fe71162d564ffda8e549b79a350bca53c454 =>
|
cc73fe71162d564ffda8e549b79a350bca53c454 =>
|
||||||
core_rpc_server_commands_defs.h => 1997..=2030,
|
core_rpc_server_commands_defs.h => 1997..=2030,
|
||||||
GetBans,
|
GetBans (restricted, empty),
|
||||||
Request {},
|
Request {},
|
||||||
|
|
||||||
#[doc = serde_doc_test!(
|
#[doc = serde_doc_test!(
|
||||||
|
@ -891,7 +906,8 @@ define_request_and_response! {
|
||||||
banned,
|
banned,
|
||||||
cc73fe71162d564ffda8e549b79a350bca53c454 =>
|
cc73fe71162d564ffda8e549b79a350bca53c454 =>
|
||||||
core_rpc_server_commands_defs.h => 2069..=2094,
|
core_rpc_server_commands_defs.h => 2069..=2094,
|
||||||
Banned,
|
|
||||||
|
Banned (restricted),
|
||||||
|
|
||||||
#[doc = serde_doc_test!(
|
#[doc = serde_doc_test!(
|
||||||
BANNED_REQUEST => BannedRequest {
|
BANNED_REQUEST => BannedRequest {
|
||||||
|
@ -920,7 +936,8 @@ define_request_and_response! {
|
||||||
flush_txpool,
|
flush_txpool,
|
||||||
cc73fe71162d564ffda8e549b79a350bca53c454 =>
|
cc73fe71162d564ffda8e549b79a350bca53c454 =>
|
||||||
core_rpc_server_commands_defs.h => 2096..=2116,
|
core_rpc_server_commands_defs.h => 2096..=2116,
|
||||||
FlushTransactionPool,
|
|
||||||
|
FlushTransactionPool (restricted),
|
||||||
|
|
||||||
#[doc = serde_doc_test!(
|
#[doc = serde_doc_test!(
|
||||||
FLUSH_TRANSACTION_POOL_REQUEST => FlushTransactionPoolRequest {
|
FLUSH_TRANSACTION_POOL_REQUEST => FlushTransactionPoolRequest {
|
||||||
|
@ -986,7 +1003,7 @@ define_request_and_response! {
|
||||||
cc73fe71162d564ffda8e549b79a350bca53c454 =>
|
cc73fe71162d564ffda8e549b79a350bca53c454 =>
|
||||||
core_rpc_server_commands_defs.h => 2213..=2248,
|
core_rpc_server_commands_defs.h => 2213..=2248,
|
||||||
|
|
||||||
GetCoinbaseTxSum,
|
GetCoinbaseTxSum (restricted),
|
||||||
|
|
||||||
#[doc = serde_doc_test!(
|
#[doc = serde_doc_test!(
|
||||||
GET_COINBASE_TX_SUM_REQUEST => GetCoinbaseTxSumRequest {
|
GET_COINBASE_TX_SUM_REQUEST => GetCoinbaseTxSumRequest {
|
||||||
|
@ -1025,7 +1042,7 @@ define_request_and_response! {
|
||||||
cc73fe71162d564ffda8e549b79a350bca53c454 =>
|
cc73fe71162d564ffda8e549b79a350bca53c454 =>
|
||||||
core_rpc_server_commands_defs.h => 2170..=2211,
|
core_rpc_server_commands_defs.h => 2170..=2211,
|
||||||
|
|
||||||
GetVersion,
|
GetVersion (empty),
|
||||||
Request {},
|
Request {},
|
||||||
|
|
||||||
#[doc = serde_doc_test!(
|
#[doc = serde_doc_test!(
|
||||||
|
@ -1116,7 +1133,7 @@ define_request_and_response! {
|
||||||
get_fee_estimate,
|
get_fee_estimate,
|
||||||
cc73fe71162d564ffda8e549b79a350bca53c454 =>
|
cc73fe71162d564ffda8e549b79a350bca53c454 =>
|
||||||
core_rpc_server_commands_defs.h => 2250..=2277,
|
core_rpc_server_commands_defs.h => 2250..=2277,
|
||||||
GetFeeEstimate,
|
GetFeeEstimate (empty),
|
||||||
Request {},
|
Request {},
|
||||||
|
|
||||||
#[doc = serde_doc_test!(
|
#[doc = serde_doc_test!(
|
||||||
|
@ -1138,7 +1155,7 @@ define_request_and_response! {
|
||||||
get_alternate_chains,
|
get_alternate_chains,
|
||||||
cc73fe71162d564ffda8e549b79a350bca53c454 =>
|
cc73fe71162d564ffda8e549b79a350bca53c454 =>
|
||||||
core_rpc_server_commands_defs.h => 2279..=2310,
|
core_rpc_server_commands_defs.h => 2279..=2310,
|
||||||
GetAlternateChains,
|
GetAlternateChains (restricted, empty),
|
||||||
Request {},
|
Request {},
|
||||||
|
|
||||||
#[doc = serde_doc_test!(
|
#[doc = serde_doc_test!(
|
||||||
|
@ -1178,7 +1195,7 @@ define_request_and_response! {
|
||||||
cc73fe71162d564ffda8e549b79a350bca53c454 =>
|
cc73fe71162d564ffda8e549b79a350bca53c454 =>
|
||||||
core_rpc_server_commands_defs.h => 2361..=2381,
|
core_rpc_server_commands_defs.h => 2361..=2381,
|
||||||
|
|
||||||
RelayTx,
|
RelayTx (restricted),
|
||||||
|
|
||||||
#[doc = serde_doc_test!(
|
#[doc = serde_doc_test!(
|
||||||
RELAY_TX_REQUEST => RelayTxRequest {
|
RELAY_TX_REQUEST => RelayTxRequest {
|
||||||
|
@ -1205,7 +1222,8 @@ define_request_and_response! {
|
||||||
cc73fe71162d564ffda8e549b79a350bca53c454 =>
|
cc73fe71162d564ffda8e549b79a350bca53c454 =>
|
||||||
core_rpc_server_commands_defs.h => 2383..=2443,
|
core_rpc_server_commands_defs.h => 2383..=2443,
|
||||||
|
|
||||||
SyncInfo,
|
SyncInfo (restricted, empty),
|
||||||
|
|
||||||
Request {},
|
Request {},
|
||||||
|
|
||||||
#[doc = serde_doc_test!(
|
#[doc = serde_doc_test!(
|
||||||
|
@ -1294,7 +1312,7 @@ define_request_and_response! {
|
||||||
get_txpool_backlog,
|
get_txpool_backlog,
|
||||||
cc73fe71162d564ffda8e549b79a350bca53c454 =>
|
cc73fe71162d564ffda8e549b79a350bca53c454 =>
|
||||||
core_rpc_server_commands_defs.h => 1637..=1664,
|
core_rpc_server_commands_defs.h => 1637..=1664,
|
||||||
GetTransactionPoolBacklog,
|
GetTransactionPoolBacklog (empty),
|
||||||
Request {},
|
Request {},
|
||||||
|
|
||||||
// TODO: enable test after binary string impl.
|
// TODO: enable test after binary string impl.
|
||||||
|
@ -1361,7 +1379,7 @@ define_request_and_response! {
|
||||||
get_miner_data,
|
get_miner_data,
|
||||||
cc73fe71162d564ffda8e549b79a350bca53c454 =>
|
cc73fe71162d564ffda8e549b79a350bca53c454 =>
|
||||||
core_rpc_server_commands_defs.h => 996..=1044,
|
core_rpc_server_commands_defs.h => 996..=1044,
|
||||||
GetMinerData,
|
GetMinerData (empty),
|
||||||
Request {},
|
Request {},
|
||||||
|
|
||||||
#[doc = serde_doc_test!(
|
#[doc = serde_doc_test!(
|
||||||
|
@ -1405,7 +1423,7 @@ define_request_and_response! {
|
||||||
cc73fe71162d564ffda8e549b79a350bca53c454 =>
|
cc73fe71162d564ffda8e549b79a350bca53c454 =>
|
||||||
core_rpc_server_commands_defs.h => 2747..=2772,
|
core_rpc_server_commands_defs.h => 2747..=2772,
|
||||||
|
|
||||||
PruneBlockchain,
|
PruneBlockchain (restricted),
|
||||||
|
|
||||||
#[derive(Copy)]
|
#[derive(Copy)]
|
||||||
#[doc = serde_doc_test!(
|
#[doc = serde_doc_test!(
|
||||||
|
@ -1435,7 +1453,7 @@ define_request_and_response! {
|
||||||
cc73fe71162d564ffda8e549b79a350bca53c454 =>
|
cc73fe71162d564ffda8e549b79a350bca53c454 =>
|
||||||
core_rpc_server_commands_defs.h => 1046..=1066,
|
core_rpc_server_commands_defs.h => 1046..=1066,
|
||||||
|
|
||||||
CalcPow,
|
CalcPow (restricted),
|
||||||
|
|
||||||
#[doc = serde_doc_test!(
|
#[doc = serde_doc_test!(
|
||||||
CALC_POW_REQUEST => CalcPowRequest {
|
CALC_POW_REQUEST => CalcPowRequest {
|
||||||
|
@ -1469,7 +1487,7 @@ define_request_and_response! {
|
||||||
cc73fe71162d564ffda8e549b79a350bca53c454 =>
|
cc73fe71162d564ffda8e549b79a350bca53c454 =>
|
||||||
core_rpc_server_commands_defs.h => 2774..=2796,
|
core_rpc_server_commands_defs.h => 2774..=2796,
|
||||||
|
|
||||||
FlushCache,
|
FlushCache (restricted),
|
||||||
|
|
||||||
#[derive(Copy)]
|
#[derive(Copy)]
|
||||||
#[doc = serde_doc_test!(
|
#[doc = serde_doc_test!(
|
||||||
|
@ -1534,6 +1552,203 @@ define_request_and_response! {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
define_request_and_response! {
|
||||||
|
UNDOCUMENTED_METHOD,
|
||||||
|
cc73fe71162d564ffda8e549b79a350bca53c454 =>
|
||||||
|
core_rpc_server_commands_defs.h => 2798..=2823,
|
||||||
|
|
||||||
|
GetTxIdsLoose,
|
||||||
|
|
||||||
|
Request {
|
||||||
|
txid_template: String,
|
||||||
|
num_matching_bits: u32,
|
||||||
|
},
|
||||||
|
ResponseBase {
|
||||||
|
txids: Vec<String>,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------------------------------- Request
|
||||||
|
/// JSON-RPC requests.
|
||||||
|
///
|
||||||
|
/// This enum contains all [`crate::json`] requests.
|
||||||
|
///
|
||||||
|
/// See also: [`JsonRpcResponse`].
|
||||||
|
///
|
||||||
|
/// TODO: document and test (de)serialization behavior after figuring out `method/params`.
|
||||||
|
#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
|
||||||
|
#[cfg_attr(feature = "serde", derive(Deserialize, Serialize))]
|
||||||
|
#[cfg_attr(
|
||||||
|
feature = "serde",
|
||||||
|
serde(rename_all = "snake_case", tag = "method", content = "params")
|
||||||
|
)]
|
||||||
|
#[allow(missing_docs)]
|
||||||
|
pub enum JsonRpcRequest {
|
||||||
|
GetBlockCount(GetBlockCountRequest),
|
||||||
|
OnGetBlockHash(OnGetBlockHashRequest),
|
||||||
|
SubmitBlock(SubmitBlockRequest),
|
||||||
|
GenerateBlocks(GenerateBlocksRequest),
|
||||||
|
GetLastBlockHeader(GetLastBlockHeaderRequest),
|
||||||
|
GetBlockHeaderByHash(GetBlockHeaderByHashRequest),
|
||||||
|
GetBlockHeaderByHeight(GetBlockHeaderByHeightRequest),
|
||||||
|
GetBlockHeadersRange(GetBlockHeadersRangeRequest),
|
||||||
|
GetBlock(GetBlockRequest),
|
||||||
|
GetConnections(GetConnectionsRequest),
|
||||||
|
GetInfo(GetInfoRequest),
|
||||||
|
HardForkInfo(HardForkInfoRequest),
|
||||||
|
SetBans(SetBansRequest),
|
||||||
|
GetBans(GetBansRequest),
|
||||||
|
Banned(BannedRequest),
|
||||||
|
FlushTransactionPool(FlushTransactionPoolRequest),
|
||||||
|
GetOutputHistogram(GetOutputHistogramRequest),
|
||||||
|
GetCoinbaseTxSum(GetCoinbaseTxSumRequest),
|
||||||
|
GetVersion(GetVersionRequest),
|
||||||
|
GetFeeEstimate(GetFeeEstimateRequest),
|
||||||
|
GetAlternateChains(GetAlternateChainsRequest),
|
||||||
|
RelayTx(RelayTxRequest),
|
||||||
|
SyncInfo(SyncInfoRequest),
|
||||||
|
GetTransactionPoolBacklog(GetTransactionPoolBacklogRequest),
|
||||||
|
GetMinerData(GetMinerDataRequest),
|
||||||
|
PruneBlockchain(PruneBlockchainRequest),
|
||||||
|
CalcPow(CalcPowRequest),
|
||||||
|
FlushCache(FlushCacheRequest),
|
||||||
|
AddAuxPow(AddAuxPowRequest),
|
||||||
|
GetTxIdsLoose(GetTxIdsLooseRequest),
|
||||||
|
}
|
||||||
|
|
||||||
|
impl RpcCallValue for JsonRpcRequest {
|
||||||
|
fn is_restricted(&self) -> bool {
|
||||||
|
match self {
|
||||||
|
Self::GetBlockCount(x) => x.is_restricted(),
|
||||||
|
Self::OnGetBlockHash(x) => x.is_restricted(),
|
||||||
|
Self::SubmitBlock(x) => x.is_restricted(),
|
||||||
|
Self::GetLastBlockHeader(x) => x.is_restricted(),
|
||||||
|
Self::GetBlockHeaderByHash(x) => x.is_restricted(),
|
||||||
|
Self::GetBlockHeaderByHeight(x) => x.is_restricted(),
|
||||||
|
Self::GetBlockHeadersRange(x) => x.is_restricted(),
|
||||||
|
Self::GetBlock(x) => x.is_restricted(),
|
||||||
|
Self::GetInfo(x) => x.is_restricted(),
|
||||||
|
Self::HardForkInfo(x) => x.is_restricted(),
|
||||||
|
Self::GetOutputHistogram(x) => x.is_restricted(),
|
||||||
|
Self::GetVersion(x) => x.is_restricted(),
|
||||||
|
Self::GetFeeEstimate(x) => x.is_restricted(),
|
||||||
|
Self::GetTransactionPoolBacklog(x) => x.is_restricted(),
|
||||||
|
Self::GetMinerData(x) => x.is_restricted(),
|
||||||
|
Self::AddAuxPow(x) => x.is_restricted(),
|
||||||
|
Self::GetTxIdsLoose(x) => x.is_restricted(),
|
||||||
|
Self::GenerateBlocks(x) => x.is_restricted(),
|
||||||
|
Self::GetConnections(x) => x.is_restricted(),
|
||||||
|
Self::SetBans(x) => x.is_restricted(),
|
||||||
|
Self::GetBans(x) => x.is_restricted(),
|
||||||
|
Self::Banned(x) => x.is_restricted(),
|
||||||
|
Self::FlushTransactionPool(x) => x.is_restricted(),
|
||||||
|
Self::GetCoinbaseTxSum(x) => x.is_restricted(),
|
||||||
|
Self::GetAlternateChains(x) => x.is_restricted(),
|
||||||
|
Self::RelayTx(x) => x.is_restricted(),
|
||||||
|
Self::SyncInfo(x) => x.is_restricted(),
|
||||||
|
Self::PruneBlockchain(x) => x.is_restricted(),
|
||||||
|
Self::CalcPow(x) => x.is_restricted(),
|
||||||
|
Self::FlushCache(x) => x.is_restricted(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn is_empty(&self) -> bool {
|
||||||
|
match self {
|
||||||
|
Self::GetBlockCount(x) => x.is_empty(),
|
||||||
|
Self::OnGetBlockHash(x) => x.is_empty(),
|
||||||
|
Self::SubmitBlock(x) => x.is_empty(),
|
||||||
|
Self::GetLastBlockHeader(x) => x.is_empty(),
|
||||||
|
Self::GetBlockHeaderByHash(x) => x.is_empty(),
|
||||||
|
Self::GetBlockHeaderByHeight(x) => x.is_empty(),
|
||||||
|
Self::GetBlockHeadersRange(x) => x.is_empty(),
|
||||||
|
Self::GetBlock(x) => x.is_empty(),
|
||||||
|
Self::GetInfo(x) => x.is_empty(),
|
||||||
|
Self::HardForkInfo(x) => x.is_empty(),
|
||||||
|
Self::GetOutputHistogram(x) => x.is_empty(),
|
||||||
|
Self::GetVersion(x) => x.is_empty(),
|
||||||
|
Self::GetFeeEstimate(x) => x.is_empty(),
|
||||||
|
Self::GetTransactionPoolBacklog(x) => x.is_empty(),
|
||||||
|
Self::GetMinerData(x) => x.is_empty(),
|
||||||
|
Self::AddAuxPow(x) => x.is_empty(),
|
||||||
|
Self::GetTxIdsLoose(x) => x.is_empty(),
|
||||||
|
Self::GenerateBlocks(x) => x.is_empty(),
|
||||||
|
Self::GetConnections(x) => x.is_empty(),
|
||||||
|
Self::SetBans(x) => x.is_empty(),
|
||||||
|
Self::GetBans(x) => x.is_empty(),
|
||||||
|
Self::Banned(x) => x.is_empty(),
|
||||||
|
Self::FlushTransactionPool(x) => x.is_empty(),
|
||||||
|
Self::GetCoinbaseTxSum(x) => x.is_empty(),
|
||||||
|
Self::GetAlternateChains(x) => x.is_empty(),
|
||||||
|
Self::RelayTx(x) => x.is_empty(),
|
||||||
|
Self::SyncInfo(x) => x.is_empty(),
|
||||||
|
Self::PruneBlockchain(x) => x.is_empty(),
|
||||||
|
Self::CalcPow(x) => x.is_empty(),
|
||||||
|
Self::FlushCache(x) => x.is_empty(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------------------------------- Response
|
||||||
|
/// JSON-RPC responses.
|
||||||
|
///
|
||||||
|
/// This enum contains all [`crate::json`] responses.
|
||||||
|
///
|
||||||
|
/// See also: [`JsonRpcRequest`].
|
||||||
|
///
|
||||||
|
/// # (De)serialization
|
||||||
|
/// The `serde` implementation will (de)serialize from
|
||||||
|
/// the inner variant itself, e.g. [`JsonRpcRequest::Banned`]
|
||||||
|
/// has the same (de)serialization as [`BannedResponse`].
|
||||||
|
///
|
||||||
|
/// ```rust
|
||||||
|
/// use cuprate_rpc_types::{misc::*, json::*};
|
||||||
|
///
|
||||||
|
/// let response = JsonRpcResponse::Banned(BannedResponse {
|
||||||
|
/// banned: true,
|
||||||
|
/// seconds: 123,
|
||||||
|
/// status: Status::Ok,
|
||||||
|
/// });
|
||||||
|
/// let json = serde_json::to_string(&response).unwrap();
|
||||||
|
/// assert_eq!(json, r#"{"banned":true,"seconds":123,"status":"OK"}"#);
|
||||||
|
/// let response: JsonRpcResponse = serde_json::from_str(&json).unwrap();
|
||||||
|
/// ```
|
||||||
|
#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
|
||||||
|
#[cfg_attr(feature = "serde", derive(Deserialize, Serialize))]
|
||||||
|
#[cfg_attr(feature = "serde", serde(untagged, rename_all = "snake_case"))]
|
||||||
|
#[allow(missing_docs)]
|
||||||
|
pub enum JsonRpcResponse {
|
||||||
|
GetBlockCount(GetBlockCountResponse),
|
||||||
|
OnGetBlockHash(OnGetBlockHashResponse),
|
||||||
|
SubmitBlock(SubmitBlockResponse),
|
||||||
|
GenerateBlocks(GenerateBlocksResponse),
|
||||||
|
GetLastBlockHeader(GetLastBlockHeaderResponse),
|
||||||
|
GetBlockHeaderByHash(GetBlockHeaderByHashResponse),
|
||||||
|
GetBlockHeaderByHeight(GetBlockHeaderByHeightResponse),
|
||||||
|
GetBlockHeadersRange(GetBlockHeadersRangeResponse),
|
||||||
|
GetBlock(GetBlockResponse),
|
||||||
|
GetConnections(GetConnectionsResponse),
|
||||||
|
GetInfo(GetInfoResponse),
|
||||||
|
HardForkInfo(HardForkInfoResponse),
|
||||||
|
SetBans(SetBansResponse),
|
||||||
|
GetBans(GetBansResponse),
|
||||||
|
Banned(BannedResponse),
|
||||||
|
FlushTransactionPool(FlushTransactionPoolResponse),
|
||||||
|
GetOutputHistogram(GetOutputHistogramResponse),
|
||||||
|
GetCoinbaseTxSum(GetCoinbaseTxSumResponse),
|
||||||
|
GetVersion(GetVersionResponse),
|
||||||
|
GetFeeEstimate(GetFeeEstimateResponse),
|
||||||
|
GetAlternateChains(GetAlternateChainsResponse),
|
||||||
|
RelayTx(RelayTxResponse),
|
||||||
|
SyncInfo(SyncInfoResponse),
|
||||||
|
GetTransactionPoolBacklog(GetTransactionPoolBacklogResponse),
|
||||||
|
GetMinerData(GetMinerDataResponse),
|
||||||
|
PruneBlockchain(PruneBlockchainResponse),
|
||||||
|
CalcPow(CalcPowResponse),
|
||||||
|
FlushCache(FlushCacheResponse),
|
||||||
|
AddAuxPow(AddAuxPowResponse),
|
||||||
|
GetTxIdsLoose(GetTxIdsLooseResponse),
|
||||||
|
}
|
||||||
|
|
||||||
//---------------------------------------------------------------------------------------------------- Tests
|
//---------------------------------------------------------------------------------------------------- Tests
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod test {
|
mod test {
|
||||||
|
|
|
@ -112,6 +112,7 @@ mod constants;
|
||||||
mod defaults;
|
mod defaults;
|
||||||
mod free;
|
mod free;
|
||||||
mod macros;
|
mod macros;
|
||||||
|
mod rpc_call;
|
||||||
|
|
||||||
#[cfg(feature = "serde")]
|
#[cfg(feature = "serde")]
|
||||||
mod serde;
|
mod serde;
|
||||||
|
@ -127,3 +128,4 @@ pub use constants::{
|
||||||
CORE_RPC_STATUS_PAYMENT_REQUIRED, CORE_RPC_VERSION, CORE_RPC_VERSION_MAJOR,
|
CORE_RPC_STATUS_PAYMENT_REQUIRED, CORE_RPC_VERSION, CORE_RPC_VERSION_MAJOR,
|
||||||
CORE_RPC_VERSION_MINOR,
|
CORE_RPC_VERSION_MINOR,
|
||||||
};
|
};
|
||||||
|
pub use rpc_call::{RpcCall, RpcCallValue};
|
||||||
|
|
|
@ -60,7 +60,14 @@ macro_rules! define_request_and_response {
|
||||||
// Attributes added here will apply to _both_
|
// Attributes added here will apply to _both_
|
||||||
// request and response types.
|
// request and response types.
|
||||||
$( #[$type_attr:meta] )*
|
$( #[$type_attr:meta] )*
|
||||||
$type_name:ident,
|
// After the type name, 2 optional idents are allowed:
|
||||||
|
//
|
||||||
|
// - `restricted`
|
||||||
|
// - `empty`
|
||||||
|
//
|
||||||
|
// These have to be within `()` and will affect the
|
||||||
|
// [`crate::RpcCall`] implementation on the request type.
|
||||||
|
$type_name:ident $(($restricted:ident $(, $empty:ident)?))?,
|
||||||
|
|
||||||
// The request type (and any doc comments, derives, etc).
|
// The request type (and any doc comments, derives, etc).
|
||||||
$( #[$request_type_attr:meta] )*
|
$( #[$request_type_attr:meta] )*
|
||||||
|
@ -100,7 +107,7 @@ macro_rules! define_request_and_response {
|
||||||
$( #[$type_attr] )*
|
$( #[$type_attr] )*
|
||||||
///
|
///
|
||||||
$( #[$request_type_attr] )*
|
$( #[$request_type_attr] )*
|
||||||
[<$type_name Request>] {
|
[<$type_name Request>] $(($restricted $(, $empty)?))? {
|
||||||
$(
|
$(
|
||||||
$( #[$request_field_attr] )*
|
$( #[$request_field_attr] )*
|
||||||
$request_field: $request_field_type
|
$request_field: $request_field_type
|
||||||
|
@ -141,6 +148,69 @@ macro_rules! define_request_and_response {
|
||||||
}
|
}
|
||||||
pub(crate) use define_request_and_response;
|
pub(crate) use define_request_and_response;
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------------------------------- impl_rpc_call
|
||||||
|
/// Implement [`crate::RpcCall`] and [`crate::RpcCallValue`] on request types.
|
||||||
|
///
|
||||||
|
/// Input for this is:
|
||||||
|
/// `$REQUEST_TYPE restricted empty`
|
||||||
|
/// where `restricted` and `empty` are the idents themselves.
|
||||||
|
/// The implementation for [`crate::RpcCall`] will change
|
||||||
|
/// depending if they exist or not.
|
||||||
|
macro_rules! impl_rpc_call {
|
||||||
|
// Restricted and empty RPC calls.
|
||||||
|
($t:ident, restricted, empty) => {
|
||||||
|
impl $crate::RpcCall for $t {
|
||||||
|
const IS_RESTRICTED: bool = true;
|
||||||
|
const IS_EMPTY: bool = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
impl From<()> for $t {
|
||||||
|
fn from(_: ()) -> Self {
|
||||||
|
Self {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl From<$t> for () {
|
||||||
|
fn from(_: $t) -> Self {}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// Empty RPC calls.
|
||||||
|
($t:ident, empty) => {
|
||||||
|
impl $crate::RpcCall for $t {
|
||||||
|
const IS_RESTRICTED: bool = false;
|
||||||
|
const IS_EMPTY: bool = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
impl From<()> for $t {
|
||||||
|
fn from(_: ()) -> Self {
|
||||||
|
Self {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl From<$t> for () {
|
||||||
|
fn from(_: $t) -> Self {}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// Restricted RPC calls.
|
||||||
|
($t:ident, restricted) => {
|
||||||
|
impl $crate::RpcCall for $t {
|
||||||
|
const IS_RESTRICTED: bool = true;
|
||||||
|
const IS_EMPTY: bool = false;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// Not restrict or empty RPC calls.
|
||||||
|
($t:ident) => {
|
||||||
|
impl $crate::RpcCall for $t {
|
||||||
|
const IS_RESTRICTED: bool = false;
|
||||||
|
const IS_EMPTY: bool = false;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
pub(crate) use impl_rpc_call;
|
||||||
|
|
||||||
//---------------------------------------------------------------------------------------------------- define_request
|
//---------------------------------------------------------------------------------------------------- define_request
|
||||||
/// Define a request type.
|
/// Define a request type.
|
||||||
///
|
///
|
||||||
|
@ -152,22 +222,7 @@ macro_rules! define_request {
|
||||||
// Any doc comments, derives, etc.
|
// Any doc comments, derives, etc.
|
||||||
$( #[$attr:meta] )*
|
$( #[$attr:meta] )*
|
||||||
// The response type.
|
// The response type.
|
||||||
$t:ident {}
|
$t:ident $(($restricted:ident $(, $empty:ident)?))? {
|
||||||
) => {
|
|
||||||
$( #[$attr] )*
|
|
||||||
///
|
|
||||||
/// This request has no inputs.
|
|
||||||
pub type $t = ();
|
|
||||||
};
|
|
||||||
|
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
// This branch of the macro expects fields within the `{}`,
|
|
||||||
// and will generate a `struct`
|
|
||||||
(
|
|
||||||
// Any doc comments, derives, etc.
|
|
||||||
$( #[$attr:meta] )*
|
|
||||||
// The response type.
|
|
||||||
$t:ident {
|
|
||||||
// And any fields.
|
// And any fields.
|
||||||
$(
|
$(
|
||||||
$( #[$field_attr:meta] )* // field attributes
|
$( #[$field_attr:meta] )* // field attributes
|
||||||
|
@ -193,6 +248,8 @@ macro_rules! define_request {
|
||||||
)*
|
)*
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$crate::macros::impl_rpc_call!($t $(, $restricted $(, $empty)?)?);
|
||||||
|
|
||||||
#[cfg(feature = "epee")]
|
#[cfg(feature = "epee")]
|
||||||
::cuprate_epee_encoding::epee_object! {
|
::cuprate_epee_encoding::epee_object! {
|
||||||
$t,
|
$t,
|
||||||
|
|
|
@ -3,6 +3,9 @@
|
||||||
//! All types are originally defined in [`rpc/core_rpc_server_commands_defs.h`](https://github.com/monero-project/monero/blob/cc73fe71162d564ffda8e549b79a350bca53c454/src/rpc/core_rpc_server_commands_defs.h).
|
//! All types are originally defined in [`rpc/core_rpc_server_commands_defs.h`](https://github.com/monero-project/monero/blob/cc73fe71162d564ffda8e549b79a350bca53c454/src/rpc/core_rpc_server_commands_defs.h).
|
||||||
|
|
||||||
//---------------------------------------------------------------------------------------------------- Import
|
//---------------------------------------------------------------------------------------------------- Import
|
||||||
|
#[cfg(feature = "serde")]
|
||||||
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
base::{AccessResponseBase, ResponseBase},
|
base::{AccessResponseBase, ResponseBase},
|
||||||
defaults::{default_false, default_string, default_true, default_vec, default_zero},
|
defaults::{default_false, default_string, default_true, default_vec, default_zero},
|
||||||
|
@ -11,6 +14,8 @@ use crate::{
|
||||||
GetOutputsOut, KeyImageSpentStatus, OutKey, Peer, PublicNode, SpentKeyImageInfo, Status,
|
GetOutputsOut, KeyImageSpentStatus, OutKey, Peer, PublicNode, SpentKeyImageInfo, Status,
|
||||||
TxEntry, TxInfo, TxpoolStats,
|
TxEntry, TxInfo, TxpoolStats,
|
||||||
},
|
},
|
||||||
|
rpc_call::RpcCall,
|
||||||
|
RpcCallValue,
|
||||||
};
|
};
|
||||||
|
|
||||||
//---------------------------------------------------------------------------------------------------- Macro
|
//---------------------------------------------------------------------------------------------------- Macro
|
||||||
|
@ -93,7 +98,7 @@ define_request_and_response! {
|
||||||
get_height,
|
get_height,
|
||||||
cc73fe71162d564ffda8e549b79a350bca53c454 =>
|
cc73fe71162d564ffda8e549b79a350bca53c454 =>
|
||||||
core_rpc_server_commands_defs.h => 138..=160,
|
core_rpc_server_commands_defs.h => 138..=160,
|
||||||
GetHeight,
|
GetHeight (empty),
|
||||||
Request {},
|
Request {},
|
||||||
|
|
||||||
#[doc = serde_doc_test!(
|
#[doc = serde_doc_test!(
|
||||||
|
@ -146,7 +151,7 @@ define_request_and_response! {
|
||||||
get_alt_blocks_hashes,
|
get_alt_blocks_hashes,
|
||||||
cc73fe71162d564ffda8e549b79a350bca53c454 =>
|
cc73fe71162d564ffda8e549b79a350bca53c454 =>
|
||||||
core_rpc_server_commands_defs.h => 288..=308,
|
core_rpc_server_commands_defs.h => 288..=308,
|
||||||
GetAltBlocksHashes,
|
GetAltBlocksHashes (empty),
|
||||||
Request {},
|
Request {},
|
||||||
|
|
||||||
#[doc = serde_doc_test!(
|
#[doc = serde_doc_test!(
|
||||||
|
@ -258,7 +263,7 @@ define_request_and_response! {
|
||||||
cc73fe71162d564ffda8e549b79a350bca53c454 =>
|
cc73fe71162d564ffda8e549b79a350bca53c454 =>
|
||||||
core_rpc_server_commands_defs.h => 665..=691,
|
core_rpc_server_commands_defs.h => 665..=691,
|
||||||
|
|
||||||
StartMining,
|
StartMining (restricted),
|
||||||
|
|
||||||
#[doc = serde_doc_test!(
|
#[doc = serde_doc_test!(
|
||||||
START_MINING_REQUEST => StartMiningRequest {
|
START_MINING_REQUEST => StartMiningRequest {
|
||||||
|
@ -287,7 +292,7 @@ define_request_and_response! {
|
||||||
stop_mining,
|
stop_mining,
|
||||||
cc73fe71162d564ffda8e549b79a350bca53c454 =>
|
cc73fe71162d564ffda8e549b79a350bca53c454 =>
|
||||||
core_rpc_server_commands_defs.h => 825..=843,
|
core_rpc_server_commands_defs.h => 825..=843,
|
||||||
StopMining,
|
StopMining (restricted, empty),
|
||||||
Request {},
|
Request {},
|
||||||
|
|
||||||
#[doc = serde_doc_test!(
|
#[doc = serde_doc_test!(
|
||||||
|
@ -302,7 +307,7 @@ define_request_and_response! {
|
||||||
mining_status,
|
mining_status,
|
||||||
cc73fe71162d564ffda8e549b79a350bca53c454 =>
|
cc73fe71162d564ffda8e549b79a350bca53c454 =>
|
||||||
core_rpc_server_commands_defs.h => 846..=895,
|
core_rpc_server_commands_defs.h => 846..=895,
|
||||||
MiningStatus,
|
MiningStatus (restricted),
|
||||||
Request {},
|
Request {},
|
||||||
|
|
||||||
#[doc = serde_doc_test!(
|
#[doc = serde_doc_test!(
|
||||||
|
@ -348,7 +353,7 @@ define_request_and_response! {
|
||||||
save_bc,
|
save_bc,
|
||||||
cc73fe71162d564ffda8e549b79a350bca53c454 =>
|
cc73fe71162d564ffda8e549b79a350bca53c454 =>
|
||||||
core_rpc_server_commands_defs.h => 898..=916,
|
core_rpc_server_commands_defs.h => 898..=916,
|
||||||
SaveBc,
|
SaveBc (restricted),
|
||||||
Request {},
|
Request {},
|
||||||
|
|
||||||
#[doc = serde_doc_test!(
|
#[doc = serde_doc_test!(
|
||||||
|
@ -364,7 +369,7 @@ define_request_and_response! {
|
||||||
cc73fe71162d564ffda8e549b79a350bca53c454 =>
|
cc73fe71162d564ffda8e549b79a350bca53c454 =>
|
||||||
core_rpc_server_commands_defs.h => 1369..=1417,
|
core_rpc_server_commands_defs.h => 1369..=1417,
|
||||||
|
|
||||||
GetPeerList,
|
GetPeerList (restricted),
|
||||||
|
|
||||||
#[doc = serde_doc_test!(
|
#[doc = serde_doc_test!(
|
||||||
GET_PEER_LIST_REQUEST => GetPeerListRequest {
|
GET_PEER_LIST_REQUEST => GetPeerListRequest {
|
||||||
|
@ -446,7 +451,8 @@ define_request_and_response! {
|
||||||
set_log_hash_rate,
|
set_log_hash_rate,
|
||||||
cc73fe71162d564ffda8e549b79a350bca53c454 =>
|
cc73fe71162d564ffda8e549b79a350bca53c454 =>
|
||||||
core_rpc_server_commands_defs.h => 1450..=1470,
|
core_rpc_server_commands_defs.h => 1450..=1470,
|
||||||
SetLogHashRate,
|
|
||||||
|
SetLogHashRate (restricted),
|
||||||
|
|
||||||
#[derive(Copy)]
|
#[derive(Copy)]
|
||||||
#[doc = serde_doc_test!(
|
#[doc = serde_doc_test!(
|
||||||
|
@ -471,7 +477,7 @@ define_request_and_response! {
|
||||||
cc73fe71162d564ffda8e549b79a350bca53c454 =>
|
cc73fe71162d564ffda8e549b79a350bca53c454 =>
|
||||||
core_rpc_server_commands_defs.h => 1450..=1470,
|
core_rpc_server_commands_defs.h => 1450..=1470,
|
||||||
|
|
||||||
SetLogLevel,
|
SetLogLevel (restricted),
|
||||||
|
|
||||||
#[derive(Copy)]
|
#[derive(Copy)]
|
||||||
#[doc = serde_doc_test!(
|
#[doc = serde_doc_test!(
|
||||||
|
@ -496,7 +502,7 @@ define_request_and_response! {
|
||||||
cc73fe71162d564ffda8e549b79a350bca53c454 =>
|
cc73fe71162d564ffda8e549b79a350bca53c454 =>
|
||||||
core_rpc_server_commands_defs.h => 1494..=1517,
|
core_rpc_server_commands_defs.h => 1494..=1517,
|
||||||
|
|
||||||
SetLogCategories,
|
SetLogCategories (restricted),
|
||||||
|
|
||||||
#[doc = serde_doc_test!(
|
#[doc = serde_doc_test!(
|
||||||
SET_LOG_CATEGORIES_REQUEST => SetLogCategoriesRequest {
|
SET_LOG_CATEGORIES_REQUEST => SetLogCategoriesRequest {
|
||||||
|
@ -523,7 +529,7 @@ define_request_and_response! {
|
||||||
cc73fe71162d564ffda8e549b79a350bca53c454 =>
|
cc73fe71162d564ffda8e549b79a350bca53c454 =>
|
||||||
core_rpc_server_commands_defs.h => 1785..=1812,
|
core_rpc_server_commands_defs.h => 1785..=1812,
|
||||||
|
|
||||||
SetBootstrapDaemon,
|
SetBootstrapDaemon (restricted),
|
||||||
|
|
||||||
#[doc = serde_doc_test!(
|
#[doc = serde_doc_test!(
|
||||||
SET_BOOTSTRAP_DAEMON_REQUEST => SetBootstrapDaemonRequest {
|
SET_BOOTSTRAP_DAEMON_REQUEST => SetBootstrapDaemonRequest {
|
||||||
|
@ -555,7 +561,7 @@ define_request_and_response! {
|
||||||
cc73fe71162d564ffda8e549b79a350bca53c454 =>
|
cc73fe71162d564ffda8e549b79a350bca53c454 =>
|
||||||
core_rpc_server_commands_defs.h => 1569..=1591,
|
core_rpc_server_commands_defs.h => 1569..=1591,
|
||||||
|
|
||||||
GetTransactionPool,
|
GetTransactionPool (empty),
|
||||||
Request {},
|
Request {},
|
||||||
|
|
||||||
#[doc = serde_doc_test!(GET_TRANSACTION_POOL_RESPONSE)]
|
#[doc = serde_doc_test!(GET_TRANSACTION_POOL_RESPONSE)]
|
||||||
|
@ -570,7 +576,7 @@ define_request_and_response! {
|
||||||
cc73fe71162d564ffda8e549b79a350bca53c454 =>
|
cc73fe71162d564ffda8e549b79a350bca53c454 =>
|
||||||
core_rpc_server_commands_defs.h => 1712..=1732,
|
core_rpc_server_commands_defs.h => 1712..=1732,
|
||||||
|
|
||||||
GetTransactionPoolStats,
|
GetTransactionPoolStats (empty),
|
||||||
Request {},
|
Request {},
|
||||||
|
|
||||||
#[doc = serde_doc_test!(
|
#[doc = serde_doc_test!(
|
||||||
|
@ -614,7 +620,7 @@ define_request_and_response! {
|
||||||
cc73fe71162d564ffda8e549b79a350bca53c454 =>
|
cc73fe71162d564ffda8e549b79a350bca53c454 =>
|
||||||
core_rpc_server_commands_defs.h => 1814..=1831,
|
core_rpc_server_commands_defs.h => 1814..=1831,
|
||||||
|
|
||||||
StopDaemon,
|
StopDaemon (restricted, empty),
|
||||||
Request {},
|
Request {},
|
||||||
|
|
||||||
#[doc = serde_doc_test!(
|
#[doc = serde_doc_test!(
|
||||||
|
@ -632,7 +638,7 @@ define_request_and_response! {
|
||||||
cc73fe71162d564ffda8e549b79a350bca53c454 =>
|
cc73fe71162d564ffda8e549b79a350bca53c454 =>
|
||||||
core_rpc_server_commands_defs.h => 1852..=1874,
|
core_rpc_server_commands_defs.h => 1852..=1874,
|
||||||
|
|
||||||
GetLimit,
|
GetLimit (empty),
|
||||||
Request {},
|
Request {},
|
||||||
|
|
||||||
#[doc = serde_doc_test!(
|
#[doc = serde_doc_test!(
|
||||||
|
@ -653,7 +659,8 @@ define_request_and_response! {
|
||||||
cc73fe71162d564ffda8e549b79a350bca53c454 =>
|
cc73fe71162d564ffda8e549b79a350bca53c454 =>
|
||||||
core_rpc_server_commands_defs.h => 1876..=1903,
|
core_rpc_server_commands_defs.h => 1876..=1903,
|
||||||
|
|
||||||
SetLimit,
|
SetLimit (restricted),
|
||||||
|
|
||||||
#[doc = serde_doc_test!(
|
#[doc = serde_doc_test!(
|
||||||
SET_LIMIT_REQUEST => SetLimitRequest {
|
SET_LIMIT_REQUEST => SetLimitRequest {
|
||||||
limit_down: 1024,
|
limit_down: 1024,
|
||||||
|
@ -684,7 +691,7 @@ define_request_and_response! {
|
||||||
cc73fe71162d564ffda8e549b79a350bca53c454 =>
|
cc73fe71162d564ffda8e549b79a350bca53c454 =>
|
||||||
core_rpc_server_commands_defs.h => 1876..=1903,
|
core_rpc_server_commands_defs.h => 1876..=1903,
|
||||||
|
|
||||||
OutPeers,
|
OutPeers (restricted),
|
||||||
|
|
||||||
#[doc = serde_doc_test!(
|
#[doc = serde_doc_test!(
|
||||||
OUT_PEERS_REQUEST => OutPeersRequest {
|
OUT_PEERS_REQUEST => OutPeersRequest {
|
||||||
|
@ -708,12 +715,26 @@ define_request_and_response! {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
define_request_and_response! {
|
||||||
|
in_peers,
|
||||||
|
cc73fe71162d564ffda8e549b79a350bca53c454 =>
|
||||||
|
core_rpc_server_commands_defs.h => 1932..=1956,
|
||||||
|
InPeers (restricted),
|
||||||
|
Request {
|
||||||
|
set: bool = default_true(), "default_true",
|
||||||
|
in_peers: u32,
|
||||||
|
},
|
||||||
|
ResponseBase {
|
||||||
|
in_peers: u32,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
define_request_and_response! {
|
define_request_and_response! {
|
||||||
get_net_stats,
|
get_net_stats,
|
||||||
cc73fe71162d564ffda8e549b79a350bca53c454 =>
|
cc73fe71162d564ffda8e549b79a350bca53c454 =>
|
||||||
core_rpc_server_commands_defs.h => 793..=822,
|
core_rpc_server_commands_defs.h => 793..=822,
|
||||||
|
|
||||||
GetNetStats,
|
GetNetStats (restricted, empty),
|
||||||
Request {},
|
Request {},
|
||||||
|
|
||||||
#[doc = serde_doc_test!(
|
#[doc = serde_doc_test!(
|
||||||
|
@ -786,7 +807,7 @@ define_request_and_response! {
|
||||||
cc73fe71162d564ffda8e549b79a350bca53c454 =>
|
cc73fe71162d564ffda8e549b79a350bca53c454 =>
|
||||||
core_rpc_server_commands_defs.h => 2324..=2359,
|
core_rpc_server_commands_defs.h => 2324..=2359,
|
||||||
|
|
||||||
Update,
|
Update (restricted),
|
||||||
|
|
||||||
#[doc = serde_doc_test!(
|
#[doc = serde_doc_test!(
|
||||||
UPDATE_REQUEST => UpdateRequest {
|
UPDATE_REQUEST => UpdateRequest {
|
||||||
|
@ -825,7 +846,7 @@ define_request_and_response! {
|
||||||
cc73fe71162d564ffda8e549b79a350bca53c454 =>
|
cc73fe71162d564ffda8e549b79a350bca53c454 =>
|
||||||
core_rpc_server_commands_defs.h => 2722..=2745,
|
core_rpc_server_commands_defs.h => 2722..=2745,
|
||||||
|
|
||||||
PopBlocks,
|
PopBlocks (restricted),
|
||||||
|
|
||||||
#[doc = serde_doc_test!(
|
#[doc = serde_doc_test!(
|
||||||
POP_BLOCKS_REQUEST => PopBlocksRequest {
|
POP_BLOCKS_REQUEST => PopBlocksRequest {
|
||||||
|
@ -852,7 +873,7 @@ define_request_and_response! {
|
||||||
cc73fe71162d564ffda8e549b79a350bca53c454 =>
|
cc73fe71162d564ffda8e549b79a350bca53c454 =>
|
||||||
core_rpc_server_commands_defs.h => 1615..=1635,
|
core_rpc_server_commands_defs.h => 1615..=1635,
|
||||||
|
|
||||||
GetTransactionPoolHashes,
|
GetTransactionPoolHashes (empty),
|
||||||
Request {},
|
Request {},
|
||||||
|
|
||||||
#[doc = serde_doc_test!(
|
#[doc = serde_doc_test!(
|
||||||
|
@ -889,7 +910,8 @@ define_request_and_response! {
|
||||||
UNDOCUMENTED_ENDPOINT,
|
UNDOCUMENTED_ENDPOINT,
|
||||||
cc73fe71162d564ffda8e549b79a350bca53c454 =>
|
cc73fe71162d564ffda8e549b79a350bca53c454 =>
|
||||||
core_rpc_server_commands_defs.h => 1419..=1448,
|
core_rpc_server_commands_defs.h => 1419..=1448,
|
||||||
GetPublicNodes,
|
|
||||||
|
GetPublicNodes (restricted),
|
||||||
|
|
||||||
#[doc = serde_doc_test!(
|
#[doc = serde_doc_test!(
|
||||||
GET_PUBLIC_NODES_REQUEST => GetPublicNodesRequest {
|
GET_PUBLIC_NODES_REQUEST => GetPublicNodesRequest {
|
||||||
|
@ -930,6 +952,178 @@ define_request_and_response! {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------------------------------- Request
|
||||||
|
/// Other JSON requests.
|
||||||
|
///
|
||||||
|
/// This enum contains all [`crate::other`] requests.
|
||||||
|
///
|
||||||
|
/// See also: [`OtherResponse`].
|
||||||
|
///
|
||||||
|
/// # (De)serialization
|
||||||
|
/// The `serde` implementation will (de)serialize from
|
||||||
|
/// the inner variant itself, e.g. [`OtherRequest::SetLogLevel`]
|
||||||
|
/// has the same (de)serialization as [`SetLogLevelRequest`].
|
||||||
|
///
|
||||||
|
/// ```rust
|
||||||
|
/// use cuprate_rpc_types::other::*;
|
||||||
|
///
|
||||||
|
/// let request = OtherRequest::SetLogLevel(Default::default());
|
||||||
|
/// let json = serde_json::to_string(&request).unwrap();
|
||||||
|
/// assert_eq!(json, r#"{"level":0}"#);
|
||||||
|
/// ```
|
||||||
|
#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
|
||||||
|
#[cfg_attr(feature = "serde", derive(Deserialize, Serialize))]
|
||||||
|
#[cfg_attr(feature = "serde", serde(untagged))]
|
||||||
|
#[allow(missing_docs)]
|
||||||
|
pub enum OtherRequest {
|
||||||
|
GetHeight(GetHeightRequest),
|
||||||
|
GetTransactions(GetTransactionsRequest),
|
||||||
|
GetAltBlocksHashes(GetAltBlocksHashesRequest),
|
||||||
|
IsKeyImageSpent(IsKeyImageSpentRequest),
|
||||||
|
SendRawTransaction(SendRawTransactionRequest),
|
||||||
|
StartMining(StartMiningRequest),
|
||||||
|
StopMining(StopMiningRequest),
|
||||||
|
MiningStatus(MiningStatusRequest),
|
||||||
|
SaveBc(SaveBcRequest),
|
||||||
|
GetPeerList(GetPeerListRequest),
|
||||||
|
SetLogHashRate(SetLogHashRateRequest),
|
||||||
|
SetLogLevel(SetLogLevelRequest),
|
||||||
|
SetLogCategories(SetLogCategoriesRequest),
|
||||||
|
SetBootstrapDaemon(SetBootstrapDaemonRequest),
|
||||||
|
GetTransactionPool(GetTransactionPoolRequest),
|
||||||
|
GetTransactionPoolStats(GetTransactionPoolStatsRequest),
|
||||||
|
StopDaemon(StopDaemonRequest),
|
||||||
|
GetLimit(GetLimitRequest),
|
||||||
|
SetLimit(SetLimitRequest),
|
||||||
|
OutPeers(OutPeersRequest),
|
||||||
|
InPeers(InPeersRequest),
|
||||||
|
GetNetStats(GetNetStatsRequest),
|
||||||
|
GetOuts(GetOutsRequest),
|
||||||
|
Update(UpdateRequest),
|
||||||
|
PopBlocks(PopBlocksRequest),
|
||||||
|
GetTransactionPoolHashes(GetTransactionPoolHashesRequest),
|
||||||
|
GetPublicNodes(GetPublicNodesRequest),
|
||||||
|
}
|
||||||
|
|
||||||
|
impl RpcCallValue for OtherRequest {
|
||||||
|
fn is_restricted(&self) -> bool {
|
||||||
|
match self {
|
||||||
|
Self::GetHeight(x) => x.is_restricted(),
|
||||||
|
Self::GetTransactions(x) => x.is_restricted(),
|
||||||
|
Self::GetAltBlocksHashes(x) => x.is_restricted(),
|
||||||
|
Self::IsKeyImageSpent(x) => x.is_restricted(),
|
||||||
|
Self::SendRawTransaction(x) => x.is_restricted(),
|
||||||
|
Self::StartMining(x) => x.is_restricted(),
|
||||||
|
Self::StopMining(x) => x.is_restricted(),
|
||||||
|
Self::MiningStatus(x) => x.is_restricted(),
|
||||||
|
Self::SaveBc(x) => x.is_restricted(),
|
||||||
|
Self::GetPeerList(x) => x.is_restricted(),
|
||||||
|
Self::SetLogHashRate(x) => x.is_restricted(),
|
||||||
|
Self::SetLogLevel(x) => x.is_restricted(),
|
||||||
|
Self::SetLogCategories(x) => x.is_restricted(),
|
||||||
|
Self::SetBootstrapDaemon(x) => x.is_restricted(),
|
||||||
|
Self::GetTransactionPool(x) => x.is_restricted(),
|
||||||
|
Self::GetTransactionPoolStats(x) => x.is_restricted(),
|
||||||
|
Self::StopDaemon(x) => x.is_restricted(),
|
||||||
|
Self::GetLimit(x) => x.is_restricted(),
|
||||||
|
Self::SetLimit(x) => x.is_restricted(),
|
||||||
|
Self::OutPeers(x) => x.is_restricted(),
|
||||||
|
Self::InPeers(x) => x.is_restricted(),
|
||||||
|
Self::GetNetStats(x) => x.is_restricted(),
|
||||||
|
Self::GetOuts(x) => x.is_restricted(),
|
||||||
|
Self::Update(x) => x.is_restricted(),
|
||||||
|
Self::PopBlocks(x) => x.is_restricted(),
|
||||||
|
Self::GetTransactionPoolHashes(x) => x.is_restricted(),
|
||||||
|
Self::GetPublicNodes(x) => x.is_restricted(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn is_empty(&self) -> bool {
|
||||||
|
match self {
|
||||||
|
Self::GetHeight(x) => x.is_empty(),
|
||||||
|
Self::GetTransactions(x) => x.is_empty(),
|
||||||
|
Self::GetAltBlocksHashes(x) => x.is_empty(),
|
||||||
|
Self::IsKeyImageSpent(x) => x.is_empty(),
|
||||||
|
Self::SendRawTransaction(x) => x.is_empty(),
|
||||||
|
Self::StartMining(x) => x.is_empty(),
|
||||||
|
Self::StopMining(x) => x.is_empty(),
|
||||||
|
Self::MiningStatus(x) => x.is_empty(),
|
||||||
|
Self::SaveBc(x) => x.is_empty(),
|
||||||
|
Self::GetPeerList(x) => x.is_empty(),
|
||||||
|
Self::SetLogHashRate(x) => x.is_empty(),
|
||||||
|
Self::SetLogLevel(x) => x.is_empty(),
|
||||||
|
Self::SetLogCategories(x) => x.is_empty(),
|
||||||
|
Self::SetBootstrapDaemon(x) => x.is_empty(),
|
||||||
|
Self::GetTransactionPool(x) => x.is_empty(),
|
||||||
|
Self::GetTransactionPoolStats(x) => x.is_empty(),
|
||||||
|
Self::StopDaemon(x) => x.is_empty(),
|
||||||
|
Self::GetLimit(x) => x.is_empty(),
|
||||||
|
Self::SetLimit(x) => x.is_empty(),
|
||||||
|
Self::OutPeers(x) => x.is_empty(),
|
||||||
|
Self::InPeers(x) => x.is_empty(),
|
||||||
|
Self::GetNetStats(x) => x.is_empty(),
|
||||||
|
Self::GetOuts(x) => x.is_empty(),
|
||||||
|
Self::Update(x) => x.is_empty(),
|
||||||
|
Self::PopBlocks(x) => x.is_empty(),
|
||||||
|
Self::GetTransactionPoolHashes(x) => x.is_empty(),
|
||||||
|
Self::GetPublicNodes(x) => x.is_empty(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------------------------------- Response
|
||||||
|
/// Other JSON responses.
|
||||||
|
///
|
||||||
|
/// This enum contains all [`crate::other`] responses.
|
||||||
|
///
|
||||||
|
/// See also: [`OtherRequest`].
|
||||||
|
///
|
||||||
|
/// # (De)serialization
|
||||||
|
/// The `serde` implementation will (de)serialize from
|
||||||
|
/// the inner variant itself, e.g. [`OtherRequest::SetBootstrapDaemon`]
|
||||||
|
/// has the same (de)serialization as [`SetBootstrapDaemonResponse`].
|
||||||
|
///
|
||||||
|
/// ```rust
|
||||||
|
/// use cuprate_rpc_types::other::*;
|
||||||
|
///
|
||||||
|
/// let response = OtherResponse::SetBootstrapDaemon(Default::default());
|
||||||
|
/// let json = serde_json::to_string(&response).unwrap();
|
||||||
|
/// assert_eq!(json, r#"{"status":"OK"}"#);
|
||||||
|
/// ```
|
||||||
|
#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
|
||||||
|
#[cfg_attr(feature = "serde", derive(Deserialize, Serialize))]
|
||||||
|
#[cfg_attr(feature = "serde", serde(untagged))]
|
||||||
|
#[allow(missing_docs)]
|
||||||
|
pub enum OtherResponse {
|
||||||
|
GetHeight(GetHeightResponse),
|
||||||
|
GetTransactions(GetTransactionsResponse),
|
||||||
|
GetAltBlocksHashes(GetAltBlocksHashesResponse),
|
||||||
|
IsKeyImageSpent(IsKeyImageSpentResponse),
|
||||||
|
SendRawTransaction(SendRawTransactionResponse),
|
||||||
|
StartMining(StartMiningResponse),
|
||||||
|
StopMining(StopMiningResponse),
|
||||||
|
MiningStatus(MiningStatusResponse),
|
||||||
|
SaveBc(SaveBcResponse),
|
||||||
|
GetPeerList(GetPeerListResponse),
|
||||||
|
SetLogHashRate(SetLogHashRateResponse),
|
||||||
|
SetLogLevel(SetLogLevelResponse),
|
||||||
|
SetLogCategories(SetLogCategoriesResponse),
|
||||||
|
SetBootstrapDaemon(SetBootstrapDaemonResponse),
|
||||||
|
GetTransactionPool(GetTransactionPoolResponse),
|
||||||
|
GetTransactionPoolStats(GetTransactionPoolStatsResponse),
|
||||||
|
StopDaemon(StopDaemonResponse),
|
||||||
|
GetLimit(GetLimitResponse),
|
||||||
|
SetLimit(SetLimitResponse),
|
||||||
|
OutPeers(OutPeersResponse),
|
||||||
|
InPeers(InPeersResponse),
|
||||||
|
GetNetStats(GetNetStatsResponse),
|
||||||
|
GetOuts(GetOutsResponse),
|
||||||
|
Update(UpdateResponse),
|
||||||
|
PopBlocks(PopBlocksResponse),
|
||||||
|
GetTransactionPoolHashes(GetTransactionPoolHashesResponse),
|
||||||
|
GetPublicNodes(GetPublicNodesResponse),
|
||||||
|
}
|
||||||
|
|
||||||
//---------------------------------------------------------------------------------------------------- Tests
|
//---------------------------------------------------------------------------------------------------- Tests
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod test {
|
mod test {
|
||||||
|
|
96
rpc/types/src/rpc_call.rs
Normal file
96
rpc/types/src/rpc_call.rs
Normal file
|
@ -0,0 +1,96 @@
|
||||||
|
//! RPC call metadata.
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------------------------------- Import
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------------------------------- RpcCall
|
||||||
|
/// Metadata about an RPC call.
|
||||||
|
///
|
||||||
|
/// This trait describes some metadata about RPC requests.
|
||||||
|
///
|
||||||
|
/// It is implemented on all request types within:
|
||||||
|
/// - [`crate::json`]
|
||||||
|
/// - [`crate::other`]
|
||||||
|
/// - [`crate::bin`]
|
||||||
|
///
|
||||||
|
/// See also [`RpcCallValue`] for a dynamic by-value version of this trait.
|
||||||
|
pub trait RpcCall {
|
||||||
|
/// Is `true` if this RPC method should
|
||||||
|
/// only be allowed on local servers.
|
||||||
|
///
|
||||||
|
/// If this is `false`, it should be
|
||||||
|
/// okay to execute the method even on restricted
|
||||||
|
/// RPC servers.
|
||||||
|
///
|
||||||
|
/// ```rust
|
||||||
|
/// use cuprate_rpc_types::{RpcCall, json::*};
|
||||||
|
///
|
||||||
|
/// // Allowed method, even on restricted RPC servers (18089).
|
||||||
|
/// assert!(!GetBlockCountRequest::IS_RESTRICTED);
|
||||||
|
///
|
||||||
|
/// // Restricted methods, only allowed
|
||||||
|
/// // for unrestricted RPC servers (18081).
|
||||||
|
/// assert!(GetConnectionsRequest::IS_RESTRICTED);
|
||||||
|
/// ```
|
||||||
|
const IS_RESTRICTED: bool;
|
||||||
|
|
||||||
|
/// Is `true` if this RPC method has no inputs, i.e. it is a `struct` with no fields.
|
||||||
|
///
|
||||||
|
/// ```rust
|
||||||
|
/// use cuprate_rpc_types::{RpcCall, json::*};
|
||||||
|
///
|
||||||
|
/// assert!(GetBlockCountRequest::IS_EMPTY);
|
||||||
|
/// assert!(!OnGetBlockHashRequest::IS_EMPTY);
|
||||||
|
/// ```
|
||||||
|
const IS_EMPTY: bool;
|
||||||
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------------------------------- RpcCallValue
|
||||||
|
/// By-value version of [`RpcCall`].
|
||||||
|
///
|
||||||
|
/// This trait is a mirror of [`RpcCall`],
|
||||||
|
/// except it takes `self` by value instead
|
||||||
|
/// of being a `const` property.
|
||||||
|
///
|
||||||
|
/// This exists for `enum`s where requests must be dynamically
|
||||||
|
/// `match`ed like [`JsonRpcRequest`](crate::json::JsonRpcRequest).
|
||||||
|
///
|
||||||
|
/// All types that implement [`RpcCall`] automatically implement [`RpcCallValue`].
|
||||||
|
pub trait RpcCallValue {
|
||||||
|
/// Same as [`RpcCall::IS_RESTRICTED`].
|
||||||
|
///
|
||||||
|
/// ```rust
|
||||||
|
/// use cuprate_rpc_types::{RpcCallValue, json::*};
|
||||||
|
///
|
||||||
|
/// assert!(!GetBlockCountRequest::default().is_restricted());
|
||||||
|
/// assert!(GetConnectionsRequest::default().is_restricted());
|
||||||
|
/// ```
|
||||||
|
fn is_restricted(&self) -> bool;
|
||||||
|
|
||||||
|
/// Same as [`RpcCall::IS_EMPTY`].
|
||||||
|
///
|
||||||
|
/// ```rust
|
||||||
|
/// use cuprate_rpc_types::{RpcCallValue, json::*};
|
||||||
|
///
|
||||||
|
/// assert!(GetBlockCountRequest::default().is_empty());
|
||||||
|
/// assert!(!OnGetBlockHashRequest::default().is_empty());
|
||||||
|
/// ```
|
||||||
|
fn is_empty(&self) -> bool;
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<T: RpcCall> RpcCallValue for T {
|
||||||
|
#[inline]
|
||||||
|
fn is_restricted(&self) -> bool {
|
||||||
|
Self::IS_RESTRICTED
|
||||||
|
}
|
||||||
|
|
||||||
|
#[inline]
|
||||||
|
fn is_empty(&self) -> bool {
|
||||||
|
Self::IS_EMPTY
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------------------------------- Tests
|
||||||
|
#[cfg(test)]
|
||||||
|
mod test {
|
||||||
|
// use super::*;
|
||||||
|
}
|
Loading…
Reference in a new issue