python_alpm/types/
checksum.rs1use 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);