feat: add Credential and Transport wire types

This commit is contained in:
michael
2026-04-26 20:46:07 -07:00
parent eb35155c22
commit 156fe7533e

View File

@@ -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);
}
} }