use thiserror::Error;
pub(crate) mod v3;
const VERSION_0: semver::Version = semver::Version::new(0, 2, 0);
const VERSION_1: semver::Version = semver::Version::new(0, 6, 0);
const VERSION_2: semver::Version = semver::Version::new(0, 15, 0);
const VERSION_3: semver::Version = semver::Version::new(0, 16, 0);
const VERSION_4: semver::Version = semver::Version::new(1, 0, 0);
#[derive(Debug, Error)]
pub enum VersionError {
#[error("Unsupported `bevy_save` version")]
Unsupported,
#[error("Invalid semver: `{0}`")]
Invalid(#[from] semver::Error),
}
#[derive(Clone, Copy, Default)]
#[non_exhaustive]
pub enum SnapshotVersion {
V0,
V1,
V2,
V3,
#[default]
V4,
}
impl TryFrom<&str> for SnapshotVersion {
type Error = VersionError;
fn try_from(value: &str) -> Result<Self, Self::Error> {
let ver: semver::Version = value.parse()?;
if ver >= VERSION_4 {
Ok(Self::V4)
} else if ver >= VERSION_3 {
Ok(Self::V3)
} else if ver >= VERSION_2 {
Ok(Self::V2)
} else if ver >= VERSION_1 {
Ok(Self::V1)
} else if ver >= VERSION_0 {
Ok(Self::V0)
} else {
Err(VersionError::Unsupported)
}
}
}