diff --git a/src/backup.rs b/src/backup.rs index 1d0e130..8c46379 100644 --- a/src/backup.rs +++ b/src/backup.rs @@ -9,7 +9,7 @@ use walkdir::WalkDir; use crate::error::BakareError; use crate::repository::Repository; -use crate::Version; +use crate::ItemVersion; pub struct Engine<'a> { source_path: &'a Path, diff --git a/src/lib.rs b/src/lib.rs index c3ade8b..77baec3 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -12,7 +12,9 @@ pub mod source; pub mod repository; -pub struct Version(String); +pub struct ItemVersion(String); -struct Index { +pub struct IndexVersion; +struct IndexViewReadonly { + index_version: IndexVersion } diff --git a/src/repository.rs b/src/repository.rs index 8d9606a..d90e3cc 100644 --- a/src/repository.rs +++ b/src/repository.rs @@ -6,22 +6,30 @@ use std::path::Path; use walkdir::DirEntry; use crate::error::BakareError; -use crate::Version; -use crate::Index; +use crate::ItemVersion; +use crate::IndexViewReadonly; +use crate::IndexVersion; /// represents a place where backup is stored an can be restored from. /// right now only on-disk directory storage is supported +/// repository always knows the newest version of the index and is responsible for syncing the index to disk +/// and making sure that different threads can access index in parallel pub struct Repository<'a> { /// absolute path to where the repository is stored on disk path: &'a Path, - index: Index + index: IndexViewReadonly, + newest_index_version: IndexVersion } pub struct RepositoryItem { - version: Version + version: ItemVersion } -pub struct RepositoryIterator; + +pub struct RepositoryIterator { + version: IndexVersion, + index: IndexViewReadonly +} impl<'a> Iterator for RepositoryIterator { type Item = RepositoryItem; @@ -32,7 +40,7 @@ impl<'a> Iterator for RepositoryIterator { } impl RepositoryItem { - pub fn version(&self) -> &Version { + pub fn version(&self) -> &ItemVersion { &self.version } } @@ -41,11 +49,11 @@ impl<'a> Repository<'a> { pub fn open(path: &Path) -> Result { // TODO open index from file - Ok(Repository { path, index: Index {} }) + Ok(Repository { path, index: IndexViewReadonly {} }) } pub fn iter(&self) -> RepositoryIterator { - unimplemented!() + } pub fn store(&self, source_path: &Path) -> Result<(), BakareError> { @@ -70,7 +78,7 @@ impl<'a> Repository<'a> { unimplemented!() } - pub fn newest_version_for(&self, source_path: &Path) -> Result { + pub fn newest_version_for(&self, source_path: &Path) -> Result { unimplemented!() } diff --git a/src/restore.rs b/src/restore.rs index 4c7845f..8c9fe58 100644 --- a/src/restore.rs +++ b/src/restore.rs @@ -8,7 +8,7 @@ use walkdir::WalkDir; use crate::error::BakareError; use crate::repository::Repository; -use crate::Version; +use crate::ItemVersion; use crate::repository::RepositoryItem; pub struct Engine<'a> { @@ -32,7 +32,7 @@ impl<'a> Engine<'a> { unimplemented!() } - pub fn restore_as_of_version(&self, item: &RepositoryItem, version: &Version) -> Result<(), BakareError> { + pub fn restore_as_of_version(&self, item: &RepositoryItem, version: &ItemVersion) -> Result<(), BakareError> { unimplemented!() }