rvn/
checksum.rs

1extern crate strum;
2
3use std::fmt;
4use strum_macros::{Display, EnumString, IntoStaticStr};
5
6#[derive(Clone, Debug, Eq, PartialEq)]
7pub struct Checksum {
8    pub algorithm: Algorithm,
9    pub value: String,
10}
11
12impl Checksum {
13    /// Constructs a new, empty `Checksum`
14    ///
15    /// # Examples
16    ///
17    /// ```rust
18    /// use rvn::checksum::{Checksum, Algorithm};
19    ///
20    /// let checksum = Checksum::new(Algorithm::Sha1, "4ac77aa5799fcf00a9cde00cd7da4d08bdc038ff");
21    ///
22    /// assert_eq!(checksum.algorithm, Algorithm::Sha1);
23    /// assert_eq!(checksum.value, "4ac77aa5799fcf00a9cde00cd7da4d08bdc038ff");
24    /// ```
25    pub fn new(algorithm: Algorithm, value: &str) -> Checksum {
26        Checksum {
27            algorithm,
28            value: value.to_owned(),
29        }
30    }
31}
32
33impl fmt::Display for Checksum {
34    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
35        write!(
36            f,
37            "{algorithm}:{value}",
38            algorithm = &self.algorithm.to_string(),
39            value = &self.value,
40        )
41    }
42}
43
44#[derive(Clone, EnumString, Debug, Display, Eq, PartialEq, IntoStaticStr)]
45#[strum(serialize_all = "kebab_case")]
46pub enum Algorithm {
47    Md5,
48    Sha1,
49    Sha256,
50    Sha384,
51    Sha512,
52}
53
54// TODO: Remove once strum v0.16 is out on crates.io
55impl Algorithm {
56    pub fn variants() -> &'static [&'static str] {
57        &["md5", "sha1", "sha256", "sha384", "sha512"]
58    }
59}