Skip to main content

steamkit/steam/discovery/
i_server_list_provider.rs

1//! The trait for storing the CM server list between runs.
2
3use std::time::SystemTime;
4
5use async_trait::async_trait;
6
7use crate::error::SteamError;
8
9use super::server_record::ServerRecord;
10
11/// Stores the server list between runs.
12#[async_trait]
13pub trait IServerListProvider: Send + Sync {
14    /// When the server list was last refreshed, used to decide whether to fetch
15    /// a new one from the Steam Directory. Providers that never stored a list
16    /// return the Unix epoch.
17    async fn last_server_list_refresh(&self) -> Result<SystemTime, SteamError>;
18
19    /// Returns the servers this provider has.
20    async fn fetch_server_list(&self) -> Result<Vec<ServerRecord>, SteamError>;
21
22    /// Replaces the stored list of servers.
23    async fn update_server_list(&self, endpoints: Vec<ServerRecord>) -> Result<(), SteamError>;
24
25    /// Alias of [`IServerListProvider::fetch_server_list`].
26    async fn load_servers(&self) -> Result<Vec<ServerRecord>, SteamError> {
27        self.fetch_server_list().await
28    }
29
30    /// Alias of [`IServerListProvider::update_server_list`].
31    async fn save_servers(&self, endpoints: Vec<ServerRecord>) -> Result<(), SteamError> {
32        self.update_server_list(endpoints).await
33    }
34
35    /// Alias of [`IServerListProvider::fetch_server_list`].
36    async fn resolve_servers(&self) -> Result<Vec<ServerRecord>, SteamError> {
37        self.fetch_server_list().await
38    }
39}