pallet_sidechain_rpc/types/
sidechain.rs

1//! Response types returned by RPC endpoints for Sidechain pallet
2
3use jsonrpsee::types::{ErrorObject, ErrorObjectOwned};
4use serde::{Deserialize, Serialize};
5use sp_core::offchain::Timestamp;
6use std::fmt::Debug;
7
8/// Response type of [SidechainRpcApiServer::get_status]
9#[derive(Clone, Serialize, Deserialize, Debug, PartialEq, Eq)]
10#[serde(rename_all = "camelCase")]
11pub struct GetStatusResponse {
12	/// Partner Chain epoch and slot information
13	pub sidechain: SidechainData,
14	/// Cardano main chain epoch and slot information
15	pub mainchain: MainchainData,
16}
17
18/// Data about current Partner Chain epoch and slot
19#[derive(Clone, Serialize, Deserialize, Debug, PartialEq, Eq)]
20#[serde(rename_all = "camelCase")]
21pub struct SidechainData {
22	/// Current Partner Chain epoch number
23	pub epoch: u64,
24	/// Current Partner Chain slot number
25	pub slot: u64,
26	/// Timestamp of the next Partner Chain epoch start
27	pub next_epoch_timestamp: Timestamp,
28}
29
30/// Data about current Cardano main chain epoch and slot
31#[derive(Clone, Serialize, Deserialize, Debug, PartialEq, Eq)]
32#[serde(rename_all = "camelCase")]
33pub struct MainchainData {
34	/// Current Cardano main chain epoch number
35	pub epoch: u32,
36	/// Current Cardano main chain slot number
37	pub slot: u64,
38	/// Timestamp of the next Cardano main chain epoch start
39	pub next_epoch_timestamp: Timestamp,
40}
41
42/// Error type returned by [SidechainRpcApiServer::get_status]
43#[derive(Debug)]
44pub enum GetStatusRpcError {
45	/// Signals that the server could not convert Partner Chain slot number to timestamp
46	CannotConvertSidechainSlotToTimestamp,
47	/// Signals that the server could not convert a timestamp to Cardano main chain
48	CannotConvertTimestampToMainchainData,
49}
50
51impl From<GetStatusRpcError> for ErrorObjectOwned {
52	fn from(e: GetStatusRpcError) -> Self {
53		ErrorObject::owned::<u8>(-1, format!("{e:?}"), None)
54	}
55}