gui_server_api/navigation/
securitykeys.rs1#[derive(Debug, rkyv::Serialize, rkyv::Deserialize, rkyv::Archive)]
16pub enum SecurityKeysNavRequest {
17 UserPresence(UserPresenceOptions),
18}
19
20impl SecurityKeysNavRequest {
21 pub fn from_slice(data: &[u8]) -> Option<Self> {
22 let Ok(archived) = rkyv::access::<ArchivedSecurityKeysNavRequest, rkyv::rancor::Error>(data) else {
23 return None;
24 };
25 rkyv::deserialize::<Self, rkyv::rancor::Error>(archived).ok()
26 }
27
28 pub fn serialize(&self) -> Vec<u8> {
29 rkyv::to_bytes::<rkyv::rancor::Error>(self).map(|b| b.to_vec()).unwrap_or_default()
30 }
31}
32
33#[derive(Debug, Clone, rkyv::Serialize, rkyv::Deserialize, rkyv::Archive)]
40pub struct UserPresenceOptions {
41 pub security_key_index: Option<usize>,
43 pub authentication: bool,
44 pub rp_id: Option<String>,
45 pub rp_name: Option<String>,
46 pub user_name: Option<String>,
47 pub user_display_name: Option<String>,
48}
49
50impl UserPresenceOptions {
51 pub fn registration(security_key_index: Option<usize>) -> Self {
52 Self {
53 security_key_index,
54 authentication: false,
55 rp_id: None,
56 rp_name: None,
57 user_name: None,
58 user_display_name: None,
59 }
60 }
61
62 pub fn authentication(security_key_index: Option<usize>) -> Self {
63 Self {
64 security_key_index,
65 authentication: true,
66 rp_id: None,
67 rp_name: None,
68 user_name: None,
69 user_display_name: None,
70 }
71 }
72
73 pub fn with_rp_id(self, rp_id: String) -> Self { Self { rp_id: Some(rp_id), ..self } }
74
75 pub fn with_rp_name(self, rp_name: String) -> Self { Self { rp_name: Some(rp_name), ..self } }
76
77 pub fn with_user_name(self, user_name: String) -> Self { Self { user_name: Some(user_name), ..self } }
78
79 pub fn with_user_display_name(self, user_display_name: String) -> Self {
80 Self { user_display_name: Some(user_display_name), ..self }
81 }
82
83 pub fn from_slice(data: &[u8]) -> Option<Self> {
84 let Ok(archived) = rkyv::access::<ArchivedUserPresenceOptions, rkyv::rancor::Error>(data) else {
85 return None;
86 };
87 rkyv::deserialize::<Self, rkyv::rancor::Error>(archived).ok()
88 }
89
90 pub fn serialize(&self) -> Vec<u8> { rkyv::to_bytes::<rkyv::rancor::Error>(self).unwrap().to_vec() }
91}
92
93#[derive(Debug, rkyv::Serialize, rkyv::Deserialize, rkyv::Archive)]
94pub struct UserPresenceResult {
95 present: bool,
96 selected_key_index: Option<usize>,
100}
101
102impl UserPresenceResult {
103 pub fn new_checked(selected_key_index: Option<usize>) -> Self {
104 UserPresenceResult { present: true, selected_key_index }
105 }
106
107 pub fn new_cancelled() -> Self { UserPresenceResult { present: false, selected_key_index: None } }
108
109 pub fn present(&self) -> bool { self.present }
110
111 pub fn selected_key_index(&self) -> Option<usize> { self.selected_key_index }
112
113 pub fn from_slice(data: &[u8]) -> Option<Self> {
114 let Ok(archived) = rkyv::access::<ArchivedUserPresenceResult, rkyv::rancor::Error>(data) else {
115 return None;
116 };
117 rkyv::deserialize::<Self, rkyv::rancor::Error>(archived).ok()
118 }
119
120 pub fn serialize(&self) -> Vec<u8> { rkyv::to_bytes::<rkyv::rancor::Error>(self).unwrap().to_vec() }
121}