1use serde::Deserialize;
2
3#[derive(Debug, Default, Deserialize)]
4pub struct Hash {
5 #[serde(default)]
6 pub algorithm: Algorithm,
7 #[serde(default)]
8 pub version: Version,
9}
10
11#[derive(Debug, Default, Deserialize)]
12pub enum Algorithm {
13 #[serde(rename = "argon2d")]
14 Argon2d = 0,
15 #[serde(rename = "argon2i")]
16 Argon2i = 1,
17 #[serde(rename = "argon2id")]
18 #[default]
19 Argon2id = 2,
20}
21
22impl From<Algorithm> for argon2::Algorithm {
23 fn from(algorithm: Algorithm) -> Self {
24 match algorithm {
25 Algorithm::Argon2d => argon2::Algorithm::Argon2d,
26 Algorithm::Argon2i => argon2::Algorithm::Argon2i,
27 Algorithm::Argon2id => argon2::Algorithm::Argon2id,
28 }
29 }
30}
31
32#[derive(Debug, Default, Deserialize)]
33pub enum Version {
34 #[serde(rename = "v0x10")]
35 V0x10 = 0x10,
36
37 #[serde(rename = "v0x13")]
38 #[default]
39 V0x13 = 0x13,
40}
41
42impl From<Version> for argon2::Version {
43 fn from(version: Version) -> Self {
44 match version {
45 Version::V0x10 => argon2::Version::V0x10,
46 Version::V0x13 => argon2::Version::V0x13,
47 }
48 }
49}