use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DrepInfo {
pub drep_id: String,
pub hex: String,
pub has_script: bool,
pub registered: bool,
#[serde(skip_serializing_if = "Option::is_none")]
pub deposit: Option<String>,
pub active: bool,
#[serde(skip_serializing_if = "Option::is_none")]
pub expires_epoch_no: Option<u64>,
pub amount: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub meta_url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub meta_hash: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DrepEpochSummary {
pub epoch_no: u64,
pub amount: String,
pub dreps: u64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DrepMetadata {
pub drep_id: String,
pub hex: String,
pub has_script: bool,
#[serde(skip_serializing_if = "Option::is_none")]
pub meta_url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub meta_hash: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub meta_json: Option<serde_json::Value>,
#[serde(skip_serializing_if = "Option::is_none")]
pub bytes: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub warning: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub language: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub comment: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub is_valid: Option<bool>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DrepUpdate {
pub drep_id: String,
pub hex: String,
pub has_script: bool,
pub update_tx_hash: String,
pub cert_index: u64,
pub block_time: u64,
pub action: DrepAction,
#[serde(skip_serializing_if = "Option::is_none")]
pub deposit: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub meta_url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub meta_hash: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub meta_json: Option<serde_json::Value>,
}
#[derive(Debug, Clone, Serialize, Deserialize, Copy, PartialEq)]
#[serde(rename_all = "lowercase")]
pub enum DrepAction {
Updated,
Registered,
Deregistered,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DrepVote {
pub proposal_id: String,
pub proposal_tx_hash: String,
pub proposal_index: u64,
pub vote_tx_hash: String,
pub block_time: u64,
pub vote: Vote,
#[serde(skip_serializing_if = "Option::is_none")]
pub meta_url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub meta_hash: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, Copy, PartialEq)]
#[serde(rename_all = "lowercase")]
pub enum Vote {
Yes,
No,
Abstain,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ProposalList {
pub block_time: u64,
pub proposal_id: String,
pub proposal_tx_hash: String,
pub proposal_index: u64,
pub proposal_type: ProposalType,
pub proposal_description: serde_json::Value,
pub deposit: String,
pub return_address: String,
pub proposed_epoch: u64,
#[serde(skip_serializing_if = "Option::is_none")]
pub ratified_epoch: Option<u64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub enacted_epoch: Option<u64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub dropped_epoch: Option<u64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub expired_epoch: Option<u64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub expiration: Option<u64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub meta_url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub meta_hash: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub meta_json: Option<serde_json::Value>,
#[serde(skip_serializing_if = "Option::is_none")]
pub meta_comment: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub meta_language: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub meta_is_valid: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub withdrawal: Option<ProposalWithdrawal>,
#[serde(skip_serializing_if = "Option::is_none")]
pub param_proposal: Option<serde_json::Value>,
}
#[derive(Debug, Clone, Serialize, Deserialize, Copy, PartialEq)]
#[serde(rename_all = "snake_case")]
pub enum ProposalType {
ParameterChange,
HardForkInitiation,
TreasuryWithdrawals,
NoConfidence,
NewCommittee,
NewConstitution,
InfoAction,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ProposalWithdrawal {
pub stake_address: String,
pub amount: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ProposalVote {
pub block_time: u64,
pub voter_role: VoterRole,
pub voter_id: String,
pub voter_hex: String,
pub voter_has_script: bool,
pub vote: Vote,
#[serde(skip_serializing_if = "Option::is_none")]
pub meta_url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub meta_hash: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, Copy, PartialEq)]
#[serde(rename_all = "snake_case")]
pub enum VoterRole {
ConstitutionalCommittee,
DRep,
SPO,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CommitteeInfo {
pub proposal_id: String,
pub proposal_tx_hash: String,
pub proposal_index: u64,
pub quorum_numerator: u64,
pub quorum_denominator: u64,
pub members: Vec<CommitteeMember>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CommitteeMember {
pub status: CommitteeMemberStatus,
pub cc_cold_hex: String,
pub cc_cold_has_script: bool,
#[serde(skip_serializing_if = "Option::is_none")]
pub cc_hot_hex: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub cc_hot_has_script: Option<bool>,
pub expiration_epoch: u64,
}
#[derive(Debug, Clone, Serialize, Deserialize, Copy, PartialEq)]
#[serde(rename_all = "snake_case")]
pub enum CommitteeMemberStatus {
Authorized,
NotAuthorized,
Resigned,
}
impl DrepInfo {
pub fn new(
drep_id: String,
hex: String,
has_script: bool,
registered: bool,
active: bool,
amount: String,
) -> Self {
Self {
drep_id,
hex,
has_script,
registered,
deposit: None,
active,
expires_epoch_no: None,
amount,
meta_url: None,
meta_hash: None,
}
}
}
impl ProposalList {
pub fn new(
block_time: u64,
proposal_id: String,
proposal_tx_hash: String,
proposal_index: u64,
proposal_type: ProposalType,
proposal_description: serde_json::Value,
deposit: String,
return_address: String,
proposed_epoch: u64,
) -> Self {
Self {
block_time,
proposal_id,
proposal_tx_hash,
proposal_index,
proposal_type,
proposal_description,
deposit,
return_address,
proposed_epoch,
ratified_epoch: None,
enacted_epoch: None,
dropped_epoch: None,
expired_epoch: None,
expiration: None,
meta_url: None,
meta_hash: None,
meta_json: None,
meta_comment: None,
meta_language: None,
meta_is_valid: None,
withdrawal: None,
param_proposal: None,
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DrepHistory {
pub drep_id: String,
pub epoch_no: u64,
pub amount: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CommitteeVotes {
pub proposal_id: String,
pub proposal_tx_hash: String,
pub proposal_index: u64,
pub vote_tx_hash: String,
pub block_time: u64,
pub vote: Vote,
#[serde(skip_serializing_if = "Option::is_none")]
pub meta_url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub meta_hash: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct VoterProposalList {
pub block_time: u64,
pub proposal_id: String,
pub proposal_tx_hash: String,
pub proposal_index: u64,
pub proposal_type: ProposalType,
pub proposal_description: serde_json::Value,
pub deposit: String,
pub return_address: String,
pub proposed_epoch: u64,
#[serde(skip_serializing_if = "Option::is_none")]
pub ratified_epoch: Option<u64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub enacted_epoch: Option<u64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub dropped_epoch: Option<u64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub expired_epoch: Option<u64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub expiration: Option<u64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub meta_url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub meta_hash: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub meta_json: Option<serde_json::Value>,
#[serde(skip_serializing_if = "Option::is_none")]
pub meta_comment: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub meta_language: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub meta_is_valid: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub withdrawal: Option<ProposalWithdrawal>,
#[serde(skip_serializing_if = "Option::is_none")]
pub param_proposal: Option<serde_json::Value>,
}
impl DrepHistory {
pub fn new(drep_id: String, epoch_no: u64, amount: String) -> Self {
Self {
drep_id,
epoch_no,
amount,
}
}
}
impl VoterProposalList {
pub fn new(
block_time: u64,
proposal_id: String,
proposal_tx_hash: String,
proposal_index: u64,
proposal_type: ProposalType,
proposal_description: serde_json::Value,
deposit: String,
return_address: String,
proposed_epoch: u64,
) -> Self {
Self {
block_time,
proposal_id,
proposal_tx_hash,
proposal_index,
proposal_type,
proposal_description,
deposit,
return_address,
proposed_epoch,
ratified_epoch: None,
enacted_epoch: None,
dropped_epoch: None,
expired_epoch: None,
expiration: None,
meta_url: None,
meta_hash: None,
meta_json: None,
meta_comment: None,
meta_language: None,
meta_is_valid: None,
withdrawal: None,
param_proposal: None,
}
}
}