python_alpm/types/
checksum.rs

1use std::str::FromStr;
2
3use pyo3::prelude::*;
4
5#[derive(FromPyObject, IntoPyObject)]
6pub enum Checksum {
7    Blake2b512(Blake2b512Checksum),
8    Md5(Md5Checksum),
9    Sha1(Sha1Checksum),
10    Sha224(Sha224Checksum),
11    Sha256(Sha256Checksum),
12    Sha384(Sha384Checksum),
13    Sha512(Sha512Checksum),
14}
15
16macro_rules! define_checksum {
17    ($name:ident, $type:ty) => {
18        #[pyclass(frozen, eq, ord)]
19        #[derive(Clone, Debug, Eq, Ord, PartialEq, PartialOrd)]
20        pub struct $name($type);
21
22        #[pymethods]
23        impl $name {
24            #[new]
25            fn new(value: &str) -> Result<Self, crate::types::Error> {
26                let inner = <$type>::from_str(value)?;
27                Ok(Self(inner))
28            }
29
30            fn __str__(&self) -> String {
31                self.0.to_string()
32            }
33
34            fn __repr__(&self) -> String {
35                format!("{}({})", stringify!($name), self.0)
36            }
37        }
38    };
39}
40
41define_checksum!(Blake2b512Checksum, alpm_types::Blake2b512Checksum);
42define_checksum!(Md5Checksum, alpm_types::Md5Checksum);
43define_checksum!(Sha1Checksum, alpm_types::Sha1Checksum);
44define_checksum!(Sha224Checksum, alpm_types::Sha224Checksum);
45define_checksum!(Sha256Checksum, alpm_types::Sha256Checksum);
46define_checksum!(Sha384Checksum, alpm_types::Sha384Checksum);
47define_checksum!(Sha512Checksum, alpm_types::Sha512Checksum);