use crate::{
dto::topology::{
DirectoryEntryInput, DirectoryProvenance, FleetDirectoryInput, SubnetDirectoryInput,
},
model::topology::TopologyDirectoryEntry,
storage::stable::directory::{
DirectoryEntryRecord, fleet::FleetDirectoryData, subnet::SubnetDirectoryData,
},
};
fn data_entries_to_input(entries: Vec<DirectoryEntryRecord>) -> Vec<DirectoryEntryInput> {
entries
.into_iter()
.map(|entry| DirectoryEntryInput {
role: entry.role,
pid: entry.pid,
})
.collect()
}
fn input_entries_to_data(entries: Vec<DirectoryEntryInput>) -> Vec<DirectoryEntryRecord> {
entries
.into_iter()
.map(|entry| DirectoryEntryRecord {
role: entry.role,
pid: entry.pid,
})
.collect()
}
pub struct FleetDirectoryDataMapper;
impl FleetDirectoryDataMapper {
#[must_use]
pub fn data_to_input(
data: FleetDirectoryData,
provenance: DirectoryProvenance,
) -> FleetDirectoryInput {
FleetDirectoryInput {
provenance,
entries: data_entries_to_input(data.entries),
}
}
#[must_use]
pub fn input_to_data(input: FleetDirectoryInput) -> FleetDirectoryData {
FleetDirectoryData {
entries: input_entries_to_data(input.entries),
}
}
}
pub struct SubnetDirectoryDataMapper;
impl SubnetDirectoryDataMapper {
#[must_use]
pub fn data_to_input(
data: SubnetDirectoryData,
provenance: DirectoryProvenance,
) -> SubnetDirectoryInput {
SubnetDirectoryInput {
provenance,
entries: data_entries_to_input(data.entries),
}
}
#[must_use]
pub fn input_to_data(input: SubnetDirectoryInput) -> SubnetDirectoryData {
SubnetDirectoryData {
entries: input_entries_to_data(input.entries),
}
}
}
pub struct DirectoryEntryMapper;
impl DirectoryEntryMapper {
#[must_use]
pub fn records_to_topology_entries(
entries: &[DirectoryEntryRecord],
) -> Vec<TopologyDirectoryEntry> {
entries
.iter()
.map(|entry| TopologyDirectoryEntry {
role: entry.role.clone(),
pid: entry.pid,
})
.collect()
}
}