summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLars Wirzenius <liw@liw.fi>2021-01-04 19:57:54 +0200
committerLars Wirzenius <liw@liw.fi>2021-01-04 20:02:06 +0200
commit34a9fc7cf754552b02b194f7e1186adc9414a623 (patch)
tree260f2edd09047de5843a168ce59f284ac3445ce7
parent8efabc60f87e5462b01f4832d575f68382929624 (diff)
downloadobnam2-34a9fc7cf754552b02b194f7e1186adc9414a623.tar.gz
refactor: use fetch_chunk to fetch generation
Also, add GenerationChunk::from_data_chunk function.
-rw-r--r--src/chunk.rs6
-rw-r--r--src/client.rs16
2 files changed, 9 insertions, 13 deletions
diff --git a/src/chunk.rs b/src/chunk.rs
index 7fdeccb..4917b60 100644
--- a/src/chunk.rs
+++ b/src/chunk.rs
@@ -35,6 +35,12 @@ impl GenerationChunk {
Self { chunk_ids }
}
+ pub fn from_data_chunk(chunk: &DataChunk) -> anyhow::Result<Self> {
+ let data = chunk.data();
+ let data = std::str::from_utf8(data)?;
+ Ok(serde_json::from_str(data)?)
+ }
+
pub fn is_empty(&self) -> bool {
self.chunk_ids.is_empty()
}
diff --git a/src/client.rs b/src/client.rs
index 6b1bb80..1b507d3 100644
--- a/src/client.rs
+++ b/src/client.rs
@@ -234,19 +234,9 @@ impl BackupClient {
}
fn fetch_generation_chunk(&self, gen_id: &str) -> anyhow::Result<GenerationChunk> {
- let url = format!("{}/{}", &self.chunks_url(), gen_id);
- trace!("fetch_generation_chunk: url={:?}", url);
- let req = self.client.get(&url).build()?;
- let res = self.client.execute(req)?;
- debug!("fetch_generation_chunk: status={}", res.status());
- if res.status() != 200 {
- return Err(ClientError::GenerationNotFound(gen_id.to_string()).into());
- }
-
- let text = res.text()?;
- debug!("fetch_generation_chunk: text={:?}", text);
- let gen: GenerationChunk = serde_json::from_str(&text)?;
- debug!("fetch_generation_chunk: {:?}", gen);
+ let chunk_id = ChunkId::from_str(gen_id);
+ let chunk = self.fetch_chunk(&chunk_id)?;
+ let gen = GenerationChunk::from_data_chunk(&chunk)?;
Ok(gen)
}