steamkit/steam/discovery/
memory_server_list_provider.rs1use std::time::SystemTime;
4
5use async_trait::async_trait;
6use tokio::sync::RwLock;
7
8use crate::error::SteamError;
9
10use super::i_server_list_provider::IServerListProvider;
11use super::server_record::ServerRecord;
12
13#[derive(Debug, Default)]
15pub struct MemoryServerListProvider {
16 servers: RwLock<Vec<ServerRecord>>,
17 last_updated: RwLock<Option<SystemTime>>,
18}
19
20impl MemoryServerListProvider {
21 pub fn new() -> Self {
23 MemoryServerListProvider::default()
24 }
25}
26
27#[async_trait]
28impl IServerListProvider for MemoryServerListProvider {
29 async fn last_server_list_refresh(&self) -> Result<SystemTime, SteamError> {
31 Ok(self
32 .last_updated
33 .read()
34 .await
35 .unwrap_or(SystemTime::UNIX_EPOCH))
36 }
37
38 async fn fetch_server_list(&self) -> Result<Vec<ServerRecord>, SteamError> {
40 Ok(self.servers.read().await.clone())
41 }
42
43 async fn update_server_list(&self, endpoints: Vec<ServerRecord>) -> Result<(), SteamError> {
45 *self.servers.write().await = endpoints;
46 *self.last_updated.write().await = Some(SystemTime::now());
47
48 Ok(())
49 }
50}