summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLars Wirzenius <liw@liw.fi>2021-08-01 20:34:35 +0300
committerLars Wirzenius <liw@liw.fi>2021-08-01 20:55:04 +0300
commit2bc07b176bcf63f94bf6f1cca0ade2505958a15d (patch)
treee1dcf85cc76051baf44a63c1105ced26935109c2 /src
parent0835677f33fe8fa89ee96e4c1b45e5711e10b461 (diff)
downloadobnam2-2bc07b176bcf63f94bf6f1cca0ade2505958a15d.tar.gz
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
Diffstat (limited to 'src')
-rw-r--r--src/backup_progress.rs3
-rw-r--r--src/backup_run.rs8
-rw-r--r--src/client.rs16
-rw-r--r--src/cmd/list_files.rs2
-rw-r--r--src/cmd/restore.rs2
-rw-r--r--src/cmd/show_gen.rs2
-rw-r--r--src/generation.rs3
-rw-r--r--src/genlist.rs6
8 files changed, 23 insertions, 19 deletions
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<LocalGeneration, ObnamError> {
match genid {
@@ -94,7 +96,7 @@ impl<'a> BackupRun<'a> {
fn fetch_previous_generation(
&self,
- genid: &str,
+ genid: &GenId,
oldname: &Path,
) -> Result<LocalGeneration, ObnamError> {
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<GenerationChunk, ClientError> {
- 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<GenerationChunk, ClientError> {
+ 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<LocalGeneration, ClientError> {
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<GenerationChunk, ClientError> {
- let chunk_id = ChunkId::recreate(gen_id);
- let chunk = self.fetch_chunk(&chunk_id)?;
+ fn fetch_generation_chunk(&self, gen_id: &GenId) -> Result<GenerationChunk, ClientError> {
+ 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<LocalGeneration, ClientError> {
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<FinishedGeneration>,
@@ -22,7 +22,7 @@ impl GenerationList {
self.list.iter()
}
- pub fn resolve(&self, genref: &str) -> Result<String, GenerationListError> {
+ pub fn resolve(&self, genref: &str) -> Result<GenId, GenerationListError> {
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()),
}
}
}