use std::str;
use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use casper_binary_port::ConsensusValidatorChanges;
use casper_types::{ChainspecRawBytes, EraId, ProtocolVersion, PublicKey, ValidatorChange};
#[derive(PartialEq, Eq, Serialize, Deserialize, Debug, JsonSchema)]
#[serde(deny_unknown_fields)]
pub struct JsonValidatorStatusChange {
era_id: EraId,
validator_change: ValidatorChange,
}
impl JsonValidatorStatusChange {
pub(crate) fn new(era_id: EraId, validator_change: ValidatorChange) -> Self {
JsonValidatorStatusChange {
era_id,
validator_change,
}
}
}
#[derive(PartialEq, Eq, Serialize, Deserialize, Debug, JsonSchema)]
#[serde(deny_unknown_fields)]
pub struct JsonValidatorChanges {
public_key: PublicKey,
status_changes: Vec<JsonValidatorStatusChange>,
}
impl JsonValidatorChanges {
pub(crate) fn new(
public_key: PublicKey,
status_changes: Vec<JsonValidatorStatusChange>,
) -> Self {
JsonValidatorChanges {
public_key,
status_changes,
}
}
}
#[derive(PartialEq, Eq, Serialize, Deserialize, Debug, JsonSchema)]
#[serde(deny_unknown_fields)]
pub struct GetValidatorChangesResult {
#[schemars(with = "String")]
pub api_version: ProtocolVersion,
pub changes: Vec<JsonValidatorChanges>,
}
impl GetValidatorChangesResult {
pub(crate) fn new(api_version: ProtocolVersion, changes: ConsensusValidatorChanges) -> Self {
let changes = changes
.into_inner()
.into_iter()
.map(|(public_key, mut validator_changes)| {
validator_changes.sort();
let status_changes = validator_changes
.into_iter()
.map(|(era_id, validator_change)| {
JsonValidatorStatusChange::new(era_id, validator_change)
})
.collect();
JsonValidatorChanges::new(public_key, status_changes)
})
.collect();
GetValidatorChangesResult {
api_version,
changes,
}
}
}
#[derive(PartialEq, Eq, Serialize, Deserialize, Debug, JsonSchema)]
pub struct GetChainspecResult {
#[schemars(with = "String")]
pub api_version: ProtocolVersion,
pub chainspec_bytes: ChainspecRawBytes,
}
impl GetChainspecResult {
pub(crate) fn new(api_version: ProtocolVersion, chainspec_bytes: ChainspecRawBytes) -> Self {
Self {
api_version,
chainspec_bytes,
}
}
}