pub struct SaveManager<S: SaveData> { /* private fields */ }Expand description
Manages save/load operations across multiple slots.
S is the game-specific type implementing SaveData.
Implementations§
Source§impl<S: SaveData> SaveManager<S>
impl<S: SaveData> SaveManager<S>
Sourcepub fn new(storage: Box<dyn SaveStorage>) -> Self
pub fn new(storage: Box<dyn SaveStorage>) -> Self
Create a new save manager backed by the given storage implementation.
Examples found in repository?
examples/hello_dotzuki.rs (line 838)
835fn demo_save_load() {
836 println!("\n╔══ SAVE / LOAD ═════════════════════════╗");
837 let storage = Box::new(InMemoryStorage::new());
838 let manager = SaveManager::<GameSave>::new(storage);
839
840 let save = GameSave {
841 player_name: "Hero".to_string(),
842 player_level: 7,
843 };
844 manager.save(SaveSlot::Slot1, &save).expect("save");
845 let loaded = manager.load(SaveSlot::Slot1).expect("load");
846 println!("║ Saved: {:?}", save);
847 println!("║ Loaded: {:?}", loaded);
848 assert_eq!(save, loaded);
849 println!("║ ✓ Round-trip verified");
850 println!("╚══════════════════════════════════════════╝");
851}Sourcepub fn save(&self, slot: SaveSlot, data: &S) -> Result<(), SaveError>
pub fn save(&self, slot: SaveSlot, data: &S) -> Result<(), SaveError>
Save game data to the given slot.
Serializes the data, appends a checksum, and writes to storage.
Examples found in repository?
examples/hello_dotzuki.rs (line 844)
835fn demo_save_load() {
836 println!("\n╔══ SAVE / LOAD ═════════════════════════╗");
837 let storage = Box::new(InMemoryStorage::new());
838 let manager = SaveManager::<GameSave>::new(storage);
839
840 let save = GameSave {
841 player_name: "Hero".to_string(),
842 player_level: 7,
843 };
844 manager.save(SaveSlot::Slot1, &save).expect("save");
845 let loaded = manager.load(SaveSlot::Slot1).expect("load");
846 println!("║ Saved: {:?}", save);
847 println!("║ Loaded: {:?}", loaded);
848 assert_eq!(save, loaded);
849 println!("║ ✓ Round-trip verified");
850 println!("╚══════════════════════════════════════════╝");
851}Sourcepub fn load(&self, slot: SaveSlot) -> Result<S, SaveError>
pub fn load(&self, slot: SaveSlot) -> Result<S, SaveError>
Load game data from the given slot.
Reads from storage, validates the checksum, and deserializes.
Examples found in repository?
examples/hello_dotzuki.rs (line 845)
835fn demo_save_load() {
836 println!("\n╔══ SAVE / LOAD ═════════════════════════╗");
837 let storage = Box::new(InMemoryStorage::new());
838 let manager = SaveManager::<GameSave>::new(storage);
839
840 let save = GameSave {
841 player_name: "Hero".to_string(),
842 player_level: 7,
843 };
844 manager.save(SaveSlot::Slot1, &save).expect("save");
845 let loaded = manager.load(SaveSlot::Slot1).expect("load");
846 println!("║ Saved: {:?}", save);
847 println!("║ Loaded: {:?}", loaded);
848 assert_eq!(save, loaded);
849 println!("║ ✓ Round-trip verified");
850 println!("╚══════════════════════════════════════════╝");
851}Sourcepub fn list_slots(&self) -> Vec<(SaveSlot, bool)>
pub fn list_slots(&self) -> Vec<(SaveSlot, bool)>
List all slots and whether they contain data.
Auto Trait Implementations§
impl<S> !RefUnwindSafe for SaveManager<S>
impl<S> !Send for SaveManager<S>
impl<S> !Sync for SaveManager<S>
impl<S> !UnwindSafe for SaveManager<S>
impl<S> Freeze for SaveManager<S>where
PhantomData<S>: Freeze,
impl<S> Unpin for SaveManager<S>where
PhantomData<S>: Unpin,
impl<S> UnsafeUnpin for SaveManager<S>where
PhantomData<S>: UnsafeUnpin,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more