feat: add Credential and Transport wire types
This commit is contained in:
@@ -1,20 +1,47 @@
|
||||
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")]
|
||||
#[zvariant(signature = "s")]
|
||||
pub enum Mode {
|
||||
Disabled,
|
||||
Optional,
|
||||
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")]
|
||||
#[zvariant(signature = "s")]
|
||||
pub enum Method {
|
||||
Fido2,
|
||||
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)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
@@ -32,4 +59,18 @@ mod tests {
|
||||
let s = serde_json::to_string(&m).unwrap();
|
||||
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