lsm_tree/
format_version.rs

1// Copyright (c) 2024-present, fjall-rs
2// This source code is licensed under both the Apache 2.0 and MIT License
3// (found in the LICENSE-* files in the repository)
4
5/// Disk format version
6#[derive(Copy, Clone, Debug, Eq, PartialEq)]
7pub enum FormatVersion {
8    /// Version for 1.x.x releases
9    V1,
10
11    /// Version for 2.x.x releases
12    V2,
13
14    /// Version for 3.x.x releases
15    V3,
16}
17
18impl std::fmt::Display for FormatVersion {
19    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
20        write!(f, "{}", u8::from(*self))
21    }
22}
23
24impl From<FormatVersion> for u8 {
25    fn from(value: FormatVersion) -> Self {
26        match value {
27            FormatVersion::V1 => 1,
28            FormatVersion::V2 => 2,
29            FormatVersion::V3 => 3,
30        }
31    }
32}
33
34impl TryFrom<u8> for FormatVersion {
35    type Error = ();
36
37    fn try_from(value: u8) -> Result<Self, Self::Error> {
38        match value {
39            1 => Ok(Self::V1),
40            2 => Ok(Self::V2),
41            3 => Ok(Self::V3),
42            _ => Err(()),
43        }
44    }
45}