Skip to main content

trussed_core/client/
ui.rs

1use core::time::Duration;
2
3use super::{ClientResult, PollClient};
4use crate::{
5    api::{reply, request},
6    types::consent::Level,
7};
8
9/// User-interfacing functionality.
10pub trait UiClient: PollClient {
11    fn confirm_user_present(
12        &mut self,
13        timeout_milliseconds: u32,
14    ) -> ClientResult<'_, reply::RequestUserConsent, Self> {
15        self.confirm_user_present_with_level(Level::Normal, timeout_milliseconds)
16    }
17
18    /// Same as [`Self::confirm_user_present`] but the caller chooses the
19    /// [`Level`] of the user-presence check. Used for stronger ceremonies
20    /// (e.g. CTAP 2.3 long-touch reset) that require [`Level::Strong`].
21    fn confirm_user_present_with_level(
22        &mut self,
23        level: Level,
24        timeout_milliseconds: u32,
25    ) -> ClientResult<'_, reply::RequestUserConsent, Self> {
26        self.request(request::RequestUserConsent {
27            level,
28            timeout_milliseconds,
29        })
30    }
31
32    fn wink(&mut self, duration: Duration) -> ClientResult<'_, reply::Wink, Self> {
33        self.request(request::Wink { duration })
34    }
35
36    fn set_custom_status(&mut self, status: u8) -> ClientResult<'_, reply::SetCustomStatus, Self> {
37        self.request(request::SetCustomStatus { status })
38    }
39}