use std::collections::HashMap;
use crate::types::{DcOption, PeerId, PeerInfo, UpdateState, UpdatesState};
use crate::{DEFAULT_DC, KNOWN_DC_OPTIONS, Session};
pub struct SessionData {
pub home_dc: i32,
pub dc_options: HashMap<i32, DcOption>,
pub peer_infos: HashMap<PeerId, PeerInfo>,
pub updates_state: UpdatesState,
}
impl Default for SessionData {
fn default() -> Self {
Self {
home_dc: DEFAULT_DC,
dc_options: KNOWN_DC_OPTIONS
.iter()
.cloned()
.map(|dc_option| (dc_option.id, dc_option))
.collect(),
peer_infos: HashMap::new(),
updates_state: UpdatesState::default(),
}
}
}
impl SessionData {
pub async fn import_to<S: Session>(&self, session: &S) {
session.set_home_dc_id(self.home_dc).await;
for dc_option in self.dc_options.values() {
session.set_dc_option(dc_option).await;
}
for peer in self.peer_infos.values() {
session.cache_peer(peer).await;
}
session
.set_update_state(UpdateState::All(self.updates_state.clone()))
.await;
}
}