From 2bc07b176bcf63f94bf6f1cca0ade2505958a15d Mon Sep 17 00:00:00 2001 From: Lars Wirzenius Date: Sun, 1 Aug 2021 20:34:35 +0300 Subject: refactor: add a type alias for generation ids This will make it harder to accidentally use a string. Can still be confused with a chunk id. Sponsored-by: author --- src/backup_progress.rs | 3 ++- src/backup_run.rs | 8 +++++--- src/client.rs | 16 +++++++--------- src/cmd/list_files.rs | 2 +- src/cmd/restore.rs | 2 +- src/cmd/show_gen.rs | 2 +- src/generation.rs | 3 +++ src/genlist.rs | 6 +++--- 8 files changed, 23 insertions(+), 19 deletions(-) (limited to 'src') diff --git a/src/backup_progress.rs b/src/backup_progress.rs index fd07978..30b6228 100644 --- a/src/backup_progress.rs +++ b/src/backup_progress.rs @@ -1,3 +1,4 @@ +use crate::generation::GenId; use indicatif::{ProgressBar, ProgressStyle}; use std::path::Path; @@ -58,7 +59,7 @@ impl BackupProgress { Self { progress } } - pub fn download_generation(gen_id: &str) -> Self { + pub fn download_generation(gen_id: &GenId) -> Self { let progress = ProgressBar::new(0); let parts = vec!["{msg}", "elapsed: {elapsed}", "{spinner}"]; progress.set_style(ProgressStyle::default_bar().template(&parts.join("\n"))); diff --git a/src/backup_run.rs b/src/backup_run.rs index dee1d11..3b107bb 100644 --- a/src/backup_run.rs +++ b/src/backup_run.rs @@ -6,7 +6,9 @@ use crate::config::ClientConfig; use crate::error::ObnamError; use crate::fsentry::FilesystemEntry; use crate::fsiter::{AnnotatedFsEntry, FsIterError, FsIterator}; -use crate::generation::{LocalGeneration, LocalGenerationError, NascentError, NascentGeneration}; +use crate::generation::{ + GenId, LocalGeneration, LocalGenerationError, NascentError, NascentGeneration, +}; use crate::policy::BackupPolicy; use log::{info, warn}; use std::path::{Path, PathBuf}; @@ -72,7 +74,7 @@ impl<'a> BackupRun<'a> { pub fn start( &mut self, - genid: Option<&str>, + genid: Option<&GenId>, oldname: &Path, ) -> Result { match genid { @@ -94,7 +96,7 @@ impl<'a> BackupRun<'a> { fn fetch_previous_generation( &self, - genid: &str, + genid: &GenId, oldname: &Path, ) -> Result { let progress = BackupProgress::download_generation(genid); diff --git a/src/client.rs b/src/client.rs index ca0104f..b866471 100644 --- a/src/client.rs +++ b/src/client.rs @@ -6,7 +6,7 @@ use crate::chunkmeta::ChunkMeta; use crate::cipher::{CipherEngine, CipherError}; use crate::config::{ClientConfig, ClientConfigError}; use crate::fsentry::{FilesystemEntry, FilesystemKind}; -use crate::generation::{FinishedGeneration, LocalGeneration, LocalGenerationError}; +use crate::generation::{FinishedGeneration, GenId, LocalGeneration, LocalGenerationError}; use crate::genlist::GenerationList; use chrono::{DateTime, Local}; @@ -101,16 +101,15 @@ impl AsyncBackupClient { self.chunk_client.fetch_chunk(chunk_id).await } - async fn fetch_generation_chunk(&self, gen_id: &str) -> Result { - let chunk_id = ChunkId::recreate(gen_id); - let chunk = self.fetch_chunk(&chunk_id).await?; + async fn fetch_generation_chunk(&self, gen_id: &GenId) -> Result { + let chunk = self.fetch_chunk(gen_id).await?; let gen = GenerationChunk::from_data_chunk(&chunk)?; Ok(gen) } pub async fn fetch_generation( &self, - gen_id: &str, + gen_id: &GenId, dbname: &Path, ) -> Result { let gen = self.fetch_generation_chunk(gen_id).await?; @@ -323,16 +322,15 @@ impl BackupClient { self.chunk_client.fetch_chunk(chunk_id) } - fn fetch_generation_chunk(&self, gen_id: &str) -> Result { - let chunk_id = ChunkId::recreate(gen_id); - let chunk = self.fetch_chunk(&chunk_id)?; + fn fetch_generation_chunk(&self, gen_id: &GenId) -> Result { + let chunk = self.fetch_chunk(gen_id)?; let gen = GenerationChunk::from_data_chunk(&chunk)?; Ok(gen) } pub fn fetch_generation( &self, - gen_id: &str, + gen_id: &GenId, dbname: &Path, ) -> Result { let gen = self.fetch_generation_chunk(gen_id)?; diff --git a/src/cmd/list_files.rs b/src/cmd/list_files.rs index e511327..bdec55b 100644 --- a/src/cmd/list_files.rs +++ b/src/cmd/list_files.rs @@ -25,7 +25,7 @@ impl ListFiles { let client = AsyncBackupClient::new(config)?; let genlist = client.list_generations().await?; - let gen_id: String = genlist.resolve(&self.gen_id)?; + let gen_id = genlist.resolve(&self.gen_id)?; let gen = client.fetch_generation(&gen_id, temp.path()).await?; for file in gen.files()?.iter()? { diff --git a/src/cmd/restore.rs b/src/cmd/restore.rs index c770501..8d05481 100644 --- a/src/cmd/restore.rs +++ b/src/cmd/restore.rs @@ -40,7 +40,7 @@ impl Restore { let client = AsyncBackupClient::new(config)?; let genlist = client.list_generations().await?; - let gen_id: String = genlist.resolve(&self.gen_id)?; + let gen_id = genlist.resolve(&self.gen_id)?; info!("generation id is {}", gen_id); let gen = client.fetch_generation(&gen_id, temp.path()).await?; diff --git a/src/cmd/show_gen.rs b/src/cmd/show_gen.rs index 8df26c2..fb7e1bd 100644 --- a/src/cmd/show_gen.rs +++ b/src/cmd/show_gen.rs @@ -24,7 +24,7 @@ impl ShowGeneration { let client = AsyncBackupClient::new(config)?; let genlist = client.list_generations().await?; - let gen_id: String = genlist.resolve(&self.gen_id)?; + let gen_id = genlist.resolve(&self.gen_id)?; let gen = client.fetch_generation(&gen_id, temp.path()).await?; let mut files = gen.files()?; let mut files = files.iter()?; diff --git a/src/generation.rs b/src/generation.rs index 25fc14d..66b4647 100644 --- a/src/generation.rs +++ b/src/generation.rs @@ -9,6 +9,9 @@ use std::path::{Path, PathBuf}; /// An identifier for a file in a generation. type FileId = i64; +/// An identifier for a generation. +pub type GenId = ChunkId; + /// A nascent backup generation. /// /// A nascent generation is one that is being prepared. It isn't diff --git a/src/genlist.rs b/src/genlist.rs index 21f558c..edc405a 100644 --- a/src/genlist.rs +++ b/src/genlist.rs @@ -1,5 +1,5 @@ use crate::chunkid::ChunkId; -use crate::generation::FinishedGeneration; +use crate::generation::{FinishedGeneration, GenId}; pub struct GenerationList { list: Vec, @@ -22,7 +22,7 @@ impl GenerationList { self.list.iter() } - pub fn resolve(&self, genref: &str) -> Result { + pub fn resolve(&self, genref: &str) -> Result { let gen = if self.list.is_empty() { None } else if genref == "latest" { @@ -45,7 +45,7 @@ impl GenerationList { None => Err(GenerationListError::UnknownGeneration(ChunkId::recreate( genref, ))), - Some(gen) => Ok(gen.id().to_string()), + Some(gen) => Ok(gen.id()), } } } -- cgit v1.2.1