feat: add Credential and Transport wire types
This commit is contained in:
@@ -1,20 +1,47 @@
|
|||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
|
#[derive(
|
||||||
|
Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, zvariant::Type,
|
||||||
|
)]
|
||||||
#[serde(rename_all = "lowercase")]
|
#[serde(rename_all = "lowercase")]
|
||||||
|
#[zvariant(signature = "s")]
|
||||||
pub enum Mode {
|
pub enum Mode {
|
||||||
Disabled,
|
Disabled,
|
||||||
Optional,
|
Optional,
|
||||||
Required,
|
Required,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
|
#[derive(
|
||||||
|
Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize, zvariant::Type,
|
||||||
|
)]
|
||||||
#[serde(rename_all = "lowercase")]
|
#[serde(rename_all = "lowercase")]
|
||||||
|
#[zvariant(signature = "s")]
|
||||||
pub enum Method {
|
pub enum Method {
|
||||||
Fido2,
|
Fido2,
|
||||||
Totp,
|
Totp,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(
|
||||||
|
Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize, zvariant::Type,
|
||||||
|
)]
|
||||||
|
#[serde(rename_all = "lowercase")]
|
||||||
|
#[zvariant(signature = "s")]
|
||||||
|
pub enum Transport {
|
||||||
|
Usb,
|
||||||
|
Nfc,
|
||||||
|
Internal,
|
||||||
|
Unknown,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, zvariant::Type)]
|
||||||
|
pub struct Credential {
|
||||||
|
pub id: String,
|
||||||
|
pub nickname: String,
|
||||||
|
pub method: Method,
|
||||||
|
pub transport: Transport,
|
||||||
|
pub created_unix: u64,
|
||||||
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use super::*;
|
use super::*;
|
||||||
@@ -32,4 +59,18 @@ mod tests {
|
|||||||
let s = serde_json::to_string(&m).unwrap();
|
let s = serde_json::to_string(&m).unwrap();
|
||||||
assert_eq!(s, "\"fido2\"");
|
assert_eq!(s, "\"fido2\"");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn credential_roundtrips_via_serde() {
|
||||||
|
let c = Credential {
|
||||||
|
id: "abc123".to_string(),
|
||||||
|
nickname: "Yellow Yubikey".to_string(),
|
||||||
|
method: Method::Fido2,
|
||||||
|
transport: Transport::Usb,
|
||||||
|
created_unix: 1_700_000_000,
|
||||||
|
};
|
||||||
|
let json = serde_json::to_string(&c).unwrap();
|
||||||
|
let back: Credential = serde_json::from_str(&json).unwrap();
|
||||||
|
assert_eq!(c, back);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user