use crate::{
dto::state::{
AppCommand, AppMode as AppModeDto, AppStateInput, AppStateResponse, SubnetStateInput,
SubnetStateResponse,
},
ops::storage::state::app::AppStateCommand,
storage::stable::state::{
app::{AppMode as StorageAppMode, AppStateRecord},
subnet::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 const fn record_to_input(_: SubnetStateRecord) -> SubnetStateInput {
SubnetStateInput
}
#[must_use]
pub const fn record_to_response(_: SubnetStateRecord) -> SubnetStateResponse {
SubnetStateResponse
}
#[must_use]
pub const fn input_to_record(_: SubnetStateInput) -> SubnetStateRecord {
SubnetStateRecord
}
}