diff --git a/examples/ping_pong/saved_states/ping_state.json b/examples/ping_pong/saved_states/ping_state.json index 320e7e2..cfc5182 100644 --- a/examples/ping_pong/saved_states/ping_state.json +++ b/examples/ping_pong/saved_states/ping_state.json @@ -1 +1 @@ -{"pong_count":12} \ No newline at end of file +{"pong_count":3} \ No newline at end of file diff --git a/examples/ping_pong/src/operators.rs b/examples/ping_pong/src/operators.rs index 12d9125..7240969 100644 --- a/examples/ping_pong/src/operators.rs +++ b/examples/ping_pong/src/operators.rs @@ -13,6 +13,15 @@ pub struct StateSaveOperator { #[async_trait::async_trait] impl StateOperator for StateSaveOperator { type StateInput = PingState; + type LoadError = std::io::Error; + + fn try_load( + settings: &::Settings, + ) -> Result, Self::LoadError> { + let state_string = std::fs::read_to_string(&settings.state_save_path)?; + serde_json::from_str(&state_string) + .map_err(|error| std::io::Error::new(std::io::ErrorKind::InvalidData, error)) + } fn from_settings(settings: ::Settings) -> Self { Self { diff --git a/examples/ping_pong/src/states.rs b/examples/ping_pong/src/states.rs index 0f8ad37..1e00ed6 100644 --- a/examples/ping_pong/src/states.rs +++ b/examples/ping_pong/src/states.rs @@ -1,5 +1,3 @@ -// STD -use std::io; // Crates use overwatch_rs::services::state::ServiceState; use serde::{Deserialize, Serialize}; @@ -14,22 +12,11 @@ pub struct PingState { pub pong_count: u32, } -impl PingState { - fn load_saved_state(save_path: &str) -> io::Result { - let json_state = std::fs::read(save_path)?; - let state = serde_json::from_slice(json_state.as_slice()) - .map_err(|error| io::Error::new(io::ErrorKind::InvalidData, error))?; - Ok(state) - } -} - impl ServiceState for PingState { type Settings = PingSettings; type Error = PingStateError; - fn from_settings(settings: &Self::Settings) -> Result { - let state = Self::load_saved_state(settings.state_save_path.as_str()) - .unwrap_or_else(|_error| Self::default()); - Ok(state) + fn from_settings(_settings: &Self::Settings) -> Result { + Ok(Self::default()) } }