Skip to content

Commit

Permalink
persistence: make filename optional in mem-based structures
Browse files Browse the repository at this point in the history
  • Loading branch information
dr-orlovsky committed Aug 2, 2024
1 parent 2143458 commit bb6ff8f
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 26 deletions.
4 changes: 2 additions & 2 deletions src/persistence/fs.rs
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,8 @@ pub trait FsStored: Sized {
fn load(path: impl ToOwned<Owned = PathBuf>) -> Result<Self, DeserializeError>;

fn is_dirty(&self) -> bool;
fn filename(&self) -> &Path;
fn set_filename(&mut self, filename: impl ToOwned<Owned = PathBuf>) -> PathBuf;
fn filename(&self) -> Option<&Path>;
fn set_filename(&mut self, filename: impl ToOwned<Owned = PathBuf>) -> Option<PathBuf>;

fn store(&self) -> Result<(), SerializeError>;
}
51 changes: 27 additions & 24 deletions src/persistence/memory.rs
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ pub struct MemStash {
dirty: bool,
#[cfg(feature = "fs")]
#[strict_type(skip)]
filename: PathBuf,
filename: Option<PathBuf>,

schemata: TinyOrdMap<SchemaId, SchemaIfaces>,
ifaces: TinyOrdMap<IfaceId, Iface>,
Expand Down Expand Up @@ -443,7 +443,7 @@ pub struct MemState {
dirty: bool,
#[cfg(feature = "fs")]
#[strict_type(skip)]
filename: PathBuf,
filename: Option<PathBuf>,

witnesses: LargeOrdMap<XWitnessId, WitnessOrd>,
contracts: TinyOrdMap<ContractId, MemContractState>,
Expand Down Expand Up @@ -1141,7 +1141,7 @@ pub struct MemIndex {
dirty: bool,
#[cfg(feature = "fs")]
#[strict_type(skip)]
filename: PathBuf,
filename: Option<PathBuf>,

op_bundle_index: MediumOrdMap<OpId, BundleId>,
bundle_contract_index: MediumOrdMap<BundleId, ContractId>,
Expand Down Expand Up @@ -1420,7 +1420,7 @@ mod fs {
fn new(filename: impl ToOwned<Owned = PathBuf>) -> Self {
Self {
dirty: true,
filename: filename.to_owned(),
filename: Some(filename.to_owned()),
..default!()
}
}
Expand All @@ -1434,29 +1434,30 @@ mod fs {

fn is_dirty(&self) -> bool { self.dirty }

fn filename(&self) -> &Path { &self.filename }
fn filename(&self) -> Option<&Path> { self.filename.as_deref() }

fn set_filename(&mut self, filename: impl ToOwned<Owned = PathBuf>) -> PathBuf {
fn set_filename(&mut self, filename: impl ToOwned<Owned = PathBuf>) -> Option<PathBuf> {
let prev = self.filename.to_owned();
self.filename = filename.to_owned();
self.filename = Some(filename.to_owned());
self.dirty = self.filename != prev;
prev
}

fn store(&self) -> Result<(), SerializeError> {
if self.is_dirty() {
self.strict_serialize_to_file::<U32>(&self.filename())
} else {
Ok(())
if let Some(filename) = self.filename() {
return self.strict_serialize_to_file::<U32>(filename);
}
}
Ok(())
}
}

impl FsStored for MemState {
fn new(filename: impl ToOwned<Owned = PathBuf>) -> Self {
Self {
dirty: true,
filename: filename.to_owned(),
filename: Some(filename.to_owned()),
..default!()
}
}
Expand All @@ -1470,29 +1471,30 @@ mod fs {

fn is_dirty(&self) -> bool { self.dirty }

fn filename(&self) -> &Path { &self.filename }
fn filename(&self) -> Option<&Path> { self.filename.as_deref() }

fn set_filename(&mut self, filename: impl ToOwned<Owned = PathBuf>) -> PathBuf {
fn set_filename(&mut self, filename: impl ToOwned<Owned = PathBuf>) -> Option<PathBuf> {
let prev = self.filename.to_owned();
self.filename = filename.to_owned();
self.filename = Some(filename.to_owned());
self.dirty = self.filename != prev;
prev
}

fn store(&self) -> Result<(), SerializeError> {
if self.is_dirty() {
self.strict_serialize_to_file::<U32>(&self.filename())
} else {
Ok(())
if let Some(filename) = self.filename() {
return self.strict_serialize_to_file::<U32>(filename);
}
}
Ok(())
}
}

impl FsStored for MemIndex {
fn new(filename: impl ToOwned<Owned = PathBuf>) -> Self {
Self {
dirty: true,
filename: filename.to_owned(),
filename: Some(filename.to_owned()),
..default!()
}
}
Expand All @@ -1506,21 +1508,22 @@ mod fs {

fn is_dirty(&self) -> bool { self.dirty }

fn filename(&self) -> &Path { &self.filename }
fn filename(&self) -> Option<&Path> { self.filename.as_deref() }

fn set_filename(&mut self, filename: impl ToOwned<Owned = PathBuf>) -> PathBuf {
fn set_filename(&mut self, filename: impl ToOwned<Owned = PathBuf>) -> Option<PathBuf> {
let prev = self.filename.to_owned();
self.filename = filename.to_owned();
self.filename = Some(filename.to_owned());
self.dirty = self.filename != prev;
prev
}

fn store(&self) -> Result<(), SerializeError> {
if self.is_dirty() {
self.strict_serialize_to_file::<U32>(&self.filename())
} else {
Ok(())
if let Some(filename) = self.filename() {
return self.strict_serialize_to_file::<U32>(filename);
}
}
Ok(())
}
}
}

0 comments on commit bb6ff8f

Please sign in to comment.