(De)Serialize Lsn and Key in LayerInfo in human-readable format

This commit is contained in:
Kirill Bulatov
2023-01-31 15:13:43 +02:00
parent eab1f375e6
commit f4039c65a9
2 changed files with 30 additions and 8 deletions
+28 -6
View File
@@ -3,6 +3,7 @@ use std::{
fmt,
num::{NonZeroU64, NonZeroUsize},
ops::Range,
str::FromStr,
};
use byteorder::{BigEndian, ByteOrder, ReadBytesExt, BE};
@@ -237,28 +238,45 @@ pub struct LayerMapInfo {
pub historic_layers: BTreeSet<HistoricLayerInfo>,
}
#[serde_as]
#[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Copy, Clone, Serialize, Deserialize)]
#[serde(tag = "kind")]
pub enum InMemoryLayerInfo {
Open { lsn_start: Lsn },
Frozen { lsn_start: Lsn, lsn_end: Lsn },
Open {
#[serde_as(as = "DisplayFromStr")]
lsn_start: Lsn,
},
Frozen {
#[serde_as(as = "DisplayFromStr")]
lsn_start: Lsn,
#[serde_as(as = "DisplayFromStr")]
lsn_end: Lsn,
},
}
#[serde_as]
#[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Clone, Serialize, Deserialize)]
#[serde(tag = "kind")]
pub enum HistoricLayerInfo {
Delta {
layer_file_name: String,
#[serde_as(as = "DisplayFromStr")]
key_start: Key,
#[serde_as(as = "DisplayFromStr")]
key_end: Key,
#[serde_as(as = "DisplayFromStr")]
lsn_start: Lsn,
#[serde_as(as = "DisplayFromStr")]
lsn_end: Lsn,
remote: bool,
},
Image {
layer_file_name: String,
#[serde_as(as = "DisplayFromStr")]
key_start: Key,
#[serde_as(as = "DisplayFromStr")]
key_end: Key,
#[serde_as(as = "DisplayFromStr")]
lsn_start: Lsn,
remote: bool,
},
@@ -625,10 +643,6 @@ pub fn key_range_size(key_range: &Range<Key>) -> u32 {
}
}
pub fn singleton_range(key: Key) -> Range<Key> {
key..key.next()
}
impl fmt::Display for Key {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(
@@ -639,6 +653,14 @@ impl fmt::Display for Key {
}
}
impl FromStr for Key {
type Err = anyhow::Error;
fn from_str(s: &str) -> Result<Self, Self::Err> {
Self::from_hex(s)
}
}
impl Key {
pub const MIN: Key = Key {
field1: u8::MIN,