use crate::{
dto::state::{
AppCommand, AppMode as AppModeDto, AppStateInput, AppStateResponse, SubnetAuthStateInput,
SubnetRootPublicKeyInput, SubnetStateInput, SubnetStateResponse,
},
ops::storage::state::app::AppStateCommand,
storage::stable::state::{
app::{AppMode as StorageAppMode, AppStateRecord},
subnet::{RootPublicKeyRecord, SubnetAuthStateRecord, SubnetStateRecord},
},
};
const fn app_mode_to_dto(mode: StorageAppMode) -> AppModeDto {
match mode {
StorageAppMode::Enabled => AppModeDto::Enabled,
StorageAppMode::Readonly => AppModeDto::Readonly,
StorageAppMode::Disabled => AppModeDto::Disabled,
}
}
pub struct AppStateMapper;
impl AppStateMapper {
#[must_use]
pub const fn record_to_input(data: AppStateRecord) -> AppStateInput {
AppStateInput {
mode: app_mode_to_dto(data.mode),
cycles_funding_enabled: data.cycles_funding_enabled,
}
}
#[must_use]
pub const fn record_to_response(data: AppStateRecord) -> AppStateResponse {
AppStateResponse {
mode: app_mode_to_dto(data.mode),
cycles_funding_enabled: data.cycles_funding_enabled,
}
}
#[must_use]
pub const fn input_to_record(view: AppStateInput) -> AppStateRecord {
AppStateRecord {
mode: match view.mode {
AppModeDto::Enabled => StorageAppMode::Enabled,
AppModeDto::Readonly => StorageAppMode::Readonly,
AppModeDto::Disabled => StorageAppMode::Disabled,
},
cycles_funding_enabled: view.cycles_funding_enabled,
}
}
}
pub struct AppStateCommandMapper;
impl AppStateCommandMapper {
#[must_use]
pub const fn dto_to_record(cmd: AppCommand) -> AppStateCommand {
match cmd {
AppCommand::SetStatus(status) => AppStateCommand::SetStatus(status),
AppCommand::SetCyclesFundingEnabled(enabled) => {
AppStateCommand::SetCyclesFundingEnabled(enabled)
}
}
}
}
pub struct SubnetStateMapper;
impl SubnetStateMapper {
#[must_use]
pub fn record_to_input(data: SubnetStateRecord) -> SubnetStateInput {
SubnetStateInput {
auth: subnet_auth_record_to_input(data.auth),
}
}
#[must_use]
pub fn record_to_response(data: SubnetStateRecord) -> SubnetStateResponse {
SubnetStateResponse {
auth: subnet_auth_record_to_input(data.auth),
}
}
#[must_use]
pub fn input_to_record(view: SubnetStateInput) -> SubnetStateRecord {
SubnetStateRecord {
auth: subnet_auth_input_to_record(view.auth),
}
}
}
fn subnet_auth_record_to_input(data: SubnetAuthStateRecord) -> SubnetAuthStateInput {
SubnetAuthStateInput {
delegated_root_public_key: data.delegated_root_public_key.map(root_key_record_to_input),
}
}
fn subnet_auth_input_to_record(view: SubnetAuthStateInput) -> SubnetAuthStateRecord {
SubnetAuthStateRecord {
delegated_root_public_key: view.delegated_root_public_key.map(root_key_input_to_record),
}
}
fn root_key_record_to_input(record: RootPublicKeyRecord) -> SubnetRootPublicKeyInput {
SubnetRootPublicKeyInput {
public_key_sec1: record.public_key_sec1,
key_name: record.key_name,
key_hash: record.key_hash,
}
}
fn root_key_input_to_record(input: SubnetRootPublicKeyInput) -> RootPublicKeyRecord {
RootPublicKeyRecord {
public_key_sec1: input.public_key_sec1,
key_name: input.key_name,
key_hash: input.key_hash,
}
}