diff options
author | Lars Wirzenius <liw@liw.fi> | 2021-01-04 19:57:54 +0200 |
---|---|---|
committer | Lars Wirzenius <liw@liw.fi> | 2021-01-04 20:02:06 +0200 |
commit | 34a9fc7cf754552b02b194f7e1186adc9414a623 (patch) | |
tree | 260f2edd09047de5843a168ce59f284ac3445ce7 /src | |
parent | 8efabc60f87e5462b01f4832d575f68382929624 (diff) | |
download | obnam2-34a9fc7cf754552b02b194f7e1186adc9414a623.tar.gz |
refactor: use fetch_chunk to fetch generation
Also, add GenerationChunk::from_data_chunk function.
Diffstat (limited to 'src')
-rw-r--r-- | src/chunk.rs | 6 | ||||
-rw-r--r-- | src/client.rs | 16 |
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) } |