use binrw::binrw;
use galaxy_save_core::{bin::BinaryDataChunkHolder, ptr::Ptr32, string::FixedString12};
#[cfg(feature = "serde")]
use serde::{Deserialize, Serialize};
use crate::chunks::{config::ConfigDataChunk, game::GameDataChunk, sysconf::SysConfigDataChunk};
#[binrw]
#[bw(import(offset: u32))]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
#[derive(Debug)]
pub struct SaveDataUserFileInfo {
pub name: FixedString12,
#[br(args(name.to_str().unwrap()))]
#[bw(args(offset, ()))]
pub user_file: Ptr32<SaveDataUserFile>,
}
impl SaveDataUserFileInfo {
pub(crate) const fn data_size() -> usize {
size_of::<FixedString12>() + size_of::<u32>()
}
}
#[binrw]
#[br(import(user_file_name: &str))]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
#[derive(Debug)]
pub enum SaveDataUserFile {
#[br(pre_assert(user_file_name.starts_with("user")))]
GameData(BinaryDataChunkHolder<GameDataChunk>),
#[br(pre_assert(user_file_name.starts_with("config")))]
ConfigData(BinaryDataChunkHolder<ConfigDataChunk>),
#[br(pre_assert(user_file_name == "sysconf"))]
SysConfigData(BinaryDataChunkHolder<SysConfigDataChunk>),
}