From 6a1851eae7c28a3149f7ee0bdf83ae678ead6143 Mon Sep 17 00:00:00 2001 From: Robin Appelman Date: Sat, 18 Jul 2020 13:40:44 +0200 Subject: [PATCH] remove digest type from apis --- src/api.rs | 13 +++++-------- src/backup.rs | 5 ++--- src/main.rs | 3 +-- src/store.rs | 6 +++--- 4 files changed, 11 insertions(+), 16 deletions(-) diff --git a/src/api.rs b/src/api.rs index 6b87424..c0f55e0 100644 --- a/src/api.rs +++ b/src/api.rs @@ -1,6 +1,5 @@ use crate::Error; use chrono::{DateTime, Utc}; -use md5::Digest; use serde::{Deserialize, Deserializer}; use smol_str::SmolStr; use std::fmt; @@ -24,13 +23,13 @@ pub struct Demo { pub player_count: u8, pub uploader: u32, #[serde(deserialize_with = "hex_to_digest")] - pub hash: Digest, + pub hash: [u8; 16], pub backend: SmolStr, pub path: String, } -/// Deserializes a lowercase hex string to a `Vec`. -pub fn hex_to_digest<'de, D>(deserializer: D) -> Result +/// Deserializes a lowercase hex string to a `[u8; 16]`. +pub fn hex_to_digest<'de, D>(deserializer: D) -> Result<[u8; 16], D::Error> where D: Deserializer<'de>, { @@ -40,12 +39,10 @@ where let string = <&str>::deserialize(deserializer)?; if string.len() == 0 { - return Ok(Digest([0; 16])); + return Ok([0; 16]); } - <[u8; 16]>::from_hex(string) - .map_err(|err| Error::custom(err.to_string())) - .map(Digest) + <[u8; 16]>::from_hex(string).map_err(|err| Error::custom(err.to_string())) } #[derive(Debug)] diff --git a/src/backup.rs b/src/backup.rs index dff793f..3e8ec6c 100644 --- a/src/backup.rs +++ b/src/backup.rs @@ -1,7 +1,6 @@ use crate::api::{list_demos, ListOrder, ListParams}; use crate::store::Store; use crate::Error; -use md5::Digest; pub struct Backup { store: Store, @@ -12,12 +11,12 @@ impl Backup { Backup { store } } - fn backup_demo(&self, name: &str, url: &str, hash: Digest) -> Result<(), Error> { + fn backup_demo(&self, name: &str, url: &str, hash: [u8; 16]) -> Result<(), Error> { let resp = ureq::get(url).call(); let digest = self.store.store(name, &mut resp.into_reader())?; - if digest == hash || digest == Digest([0; 16]) { + if digest == hash || digest == [0; 16] { Ok(()) } else { let _ = self.store.remove(name); diff --git a/src/main.rs b/src/main.rs index 2733468..a67cb3c 100644 --- a/src/main.rs +++ b/src/main.rs @@ -4,7 +4,6 @@ mod store; use crate::backup::Backup; use crate::store::Store; use main_error::MainError; -use md5::Digest; use std::cmp::max; use std::collections::HashMap; use std::path::PathBuf; @@ -17,7 +16,7 @@ pub enum Error { #[error("Request failed: {0}")] Request(#[from] std::io::Error), #[error("MD5 digest mismatch for downloaded demo, expected {expected:?}, received {got:?}")] - DigestMismatch { expected: Digest, got: Digest }, + DigestMismatch { expected: [u8; 16], got: [u8; 16] }, } fn main() -> Result<(), MainError> { diff --git a/src/store.rs b/src/store.rs index a1e70f4..15b4c31 100644 --- a/src/store.rs +++ b/src/store.rs @@ -1,4 +1,4 @@ -use md5::{Context, Digest}; +use md5::Context; use std::fs; use std::fs::File; use std::io::{ErrorKind, Read, Write}; @@ -15,7 +15,7 @@ impl Store { } } - pub fn store(&self, name: &str, data: &mut impl Read) -> std::io::Result { + pub fn store(&self, name: &str, data: &mut impl Read) -> std::io::Result<[u8; 16]> { let path = self.generate_path(name); fs::create_dir_all(path.parent().unwrap())?; @@ -27,7 +27,7 @@ impl Store { // copy the file and compute the digest was we go loop { let len = match data.read(&mut buf) { - Ok(0) => return Ok(context.compute()), + Ok(0) => return Ok(context.compute().0), Ok(len) => len, Err(ref e) if e.kind() == ErrorKind::Interrupted => continue, Err(e) => return Err(e),