use borsh::{BorshDeserialize, BorshSerialize};
use kaspa_notify::events::EventType;
use serde::{Deserialize, Serialize};
use workflow_core::enums::Describe;
pub const RPC_API_VERSION: u16 = 1;
pub const RPC_API_REVISION: u16 = 0;
#[derive(Describe, Clone, Copy, Debug, PartialEq, Eq, Hash, BorshSerialize, BorshDeserialize, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
#[borsh(use_discriminant = true)]
pub enum RpcApiOps {
NoOp = 0,
Connect = 1,
Disconnect = 2,
Subscribe = 3,
Unsubscribe = 4,
NotifyBlockAdded = 10,
NotifyNewBlockTemplate = 11,
NotifyUtxosChanged = 12,
NotifyPruningPointUtxoSetOverride = 13,
NotifyFinalityConflict = 14,
NotifyFinalityConflictResolved = 15, NotifyVirtualDaaScoreChanged = 16,
NotifyVirtualChainChanged = 17,
NotifySinkBlueScoreChanged = 18,
BlockAddedNotification = 60,
VirtualChainChangedNotification = 61,
FinalityConflictNotification = 62,
FinalityConflictResolvedNotification = 63,
UtxosChangedNotification = 64,
SinkBlueScoreChangedNotification = 65,
VirtualDaaScoreChangedNotification = 66,
PruningPointUtxoSetOverrideNotification = 67,
NewBlockTemplateNotification = 68,
Ping = 110,
GetMetrics = 111,
GetSystemInfo = 112,
GetConnections = 113,
GetServerInfo = 114,
GetSyncStatus = 115,
GetCurrentNetwork = 116,
SubmitBlock = 117,
GetBlockTemplate = 118,
GetPeerAddresses = 119,
GetSink = 120,
GetMempoolEntry = 121,
GetMempoolEntries = 122,
GetConnectedPeerInfo = 123,
AddPeer = 124,
SubmitTransaction = 125,
GetBlock = 126,
GetSubnetwork = 127,
GetVirtualChainFromBlock = 128,
GetBlocks = 129,
GetBlockCount = 130,
GetBlockDagInfo = 131,
ResolveFinalityConflict = 132,
Shutdown = 133,
GetHeaders = 134,
GetUtxosByAddresses = 135,
GetBalanceByAddress = 136,
GetBalancesByAddresses = 137,
GetSinkBlueScore = 138,
Ban = 139,
Unban = 140,
GetInfo = 141,
EstimateNetworkHashesPerSecond = 142,
GetMempoolEntriesByAddresses = 143,
GetCoinSupply = 144,
GetDaaScoreTimestampEstimate = 145,
SubmitTransactionReplacement = 146,
GetFeeEstimate = 147,
GetFeeEstimateExperimental = 148,
GetCurrentBlockColor = 149,
}
impl RpcApiOps {
pub fn is_subscription(&self) -> bool {
matches!(
self,
RpcApiOps::NotifyBlockAdded
| RpcApiOps::NotifyNewBlockTemplate
| RpcApiOps::NotifyUtxosChanged
| RpcApiOps::NotifyVirtualChainChanged
| RpcApiOps::NotifyPruningPointUtxoSetOverride
| RpcApiOps::NotifyFinalityConflict
| RpcApiOps::NotifyFinalityConflictResolved
| RpcApiOps::NotifySinkBlueScoreChanged
| RpcApiOps::NotifyVirtualDaaScoreChanged
| RpcApiOps::Subscribe
| RpcApiOps::Unsubscribe
)
}
}
impl From<RpcApiOps> for u32 {
fn from(item: RpcApiOps) -> Self {
item as u32
}
}
impl From<EventType> for RpcApiOps {
fn from(item: EventType) -> Self {
match item {
EventType::BlockAdded => RpcApiOps::BlockAddedNotification,
EventType::VirtualChainChanged => RpcApiOps::VirtualChainChangedNotification,
EventType::FinalityConflict => RpcApiOps::FinalityConflictNotification,
EventType::FinalityConflictResolved => RpcApiOps::FinalityConflictResolvedNotification,
EventType::UtxosChanged => RpcApiOps::UtxosChangedNotification,
EventType::SinkBlueScoreChanged => RpcApiOps::SinkBlueScoreChangedNotification,
EventType::VirtualDaaScoreChanged => RpcApiOps::VirtualDaaScoreChangedNotification,
EventType::PruningPointUtxoSetOverride => RpcApiOps::PruningPointUtxoSetOverrideNotification,
EventType::NewBlockTemplate => RpcApiOps::NewBlockTemplateNotification,
}
}
}