chore(core): use Python's `NotImplementedError` for missing layouts
What changed, and why it matters
This is a routine code cleanup in the Trezor firmware's user-interface layer. It replaces a custom 'not implemented' error message with Python's standard NotImplementedError and removes some method-specific error strings. There is no security-relevant change: the same functions still fail in the same situations, only the error type and wording differ.
No security action required. Treat as normal refactoring.
Security signals we found
No strong security signals were identified.
Evidence from the diff
The commit refactors the Rust/MicroPython UI firmware layer to use Error::NotImplementedError (mapped to MicroPython’s mp_type_NotImplementedError) instead of a custom Error::ValueError(c”not implemented”) constant. It also removes method-specific ValueError strings such as ‘show_device_menu not supported’ and ‘confirm_fido not used in bitcoin-only firmware’. The change is purely semantic/cosmetic and does not alter control flow, privilege boundaries, or data handling.
Changed components
core/embed/rust/build.rscore/embed/rust/src/error.rscore/embed/rust/src/ui/layout_bolt/ui_firmware.rscore/embed/rust/src/ui/layout_caesar/ui_firmware.rscore/embed/rust/src/ui/layout_delizia/ui_firmware.rscore/embed/rust/src/ui/layout_eckhart/ui_firmware.rscore/embed/rust/src/ui/ui_firmware.rsInspect captured patch +72 / −103
diff --git a/core/embed/rust/build.rs b/core/embed/rust/build.rs
index 9d6bffe2..773f7d7e 100644
--- a/core/embed/rust/build.rs
+++ b/core/embed/rust/build.rs
@@ -285,6 +285,7 @@ fn generate_micropython_bindings() {
.allowlist_var("mp_type_ValueError")
.allowlist_var("mp_type_TypeError")
.allowlist_var("mp_type_RuntimeError")
+ .allowlist_var("mp_type_NotImplementedError")
// time
.allowlist_function("mp_hal_ticks_ms")
.allowlist_function("mp_hal_delay_ms")
diff --git a/core/embed/rust/src/error.rs b/core/embed/rust/src/error.rs
index 1400f6f9..6d04d95a 100644
--- a/core/embed/rust/src/error.rs
+++ b/core/embed/rust/src/error.rs
@@ -25,6 +25,7 @@ pub enum Error {
#[cfg(feature = "micropython")]
ValueErrorParam(&'static CStr, Obj),
RuntimeError(&'static CStr),
+ NotImplementedError,
}
macro_rules! value_error {
@@ -81,6 +82,9 @@ impl Error {
ffi::mp_obj_new_exception(&ffi::mp_type_RuntimeError)
}
}
+ Error::NotImplementedError => {
+ ffi::mp_obj_new_exception(&ffi::mp_type_NotImplementedError)
+ }
}
}
}
diff --git a/core/embed/rust/src/ui/layout_bolt/ui_firmware.rs b/core/embed/rust/src/ui/layout_bolt/ui_firmware.rs
index ac53d186..6a6746ee 100644
--- a/core/embed/rust/src/ui/layout_bolt/ui_firmware.rs
+++ b/core/embed/rust/src/ui/layout_bolt/ui_firmware.rs
@@ -27,8 +27,8 @@ use crate::{
util::{ConfirmValueParams, PropsList, RecoveryType},
},
ui_firmware::{
- FirmwareUI, ERROR_NOT_IMPLEMENTED, MAX_CHECKLIST_ITEMS, MAX_GROUP_SHARE_LINES,
- MAX_MENU_ITEMS, MAX_PAIRED_DEVICES, MAX_WORD_QUIZ_ITEMS,
+ FirmwareUI, MAX_CHECKLIST_ITEMS, MAX_GROUP_SHARE_LINES, MAX_MENU_ITEMS,
+ MAX_PAIRED_DEVICES, MAX_WORD_QUIZ_ITEMS,
},
ModelUI,
},
@@ -111,7 +111,7 @@ impl FirmwareUI for UIBolt {
_buy_amount: TString<'static>,
_back_button: bool,
) -> Result<impl LayoutMaybeTrace, Error> {
- Err::<RootComponent<Empty, ModelUI>, Error>(ERROR_NOT_IMPLEMENTED)
+ Err::<RootComponent<Empty, ModelUI>, Error>(Error::NotImplementedError)
}
fn confirm_value(
@@ -150,7 +150,7 @@ impl FirmwareUI for UIBolt {
_hold: bool,
_chunkify: bool,
) -> Result<Gc<LayoutObj>, Error> {
- Err::<Gc<LayoutObj>, Error>(ERROR_NOT_IMPLEMENTED)
+ Err::<Gc<LayoutObj>, Error>(Error::NotImplementedError)
}
fn confirm_homescreen(
@@ -598,14 +598,14 @@ impl FirmwareUI for UIBolt {
_summary_br_name: Option<TString<'static>>,
_cancel_text: Option<TString<'static>>,
) -> Result<impl LayoutMaybeTrace, Error> {
- Err::<RootComponent<Empty, ModelUI>, Error>(ERROR_NOT_IMPLEMENTED)
+ Err::<RootComponent<Empty, ModelUI>, Error>(Error::NotImplementedError)
}
fn flow_confirm_set_new_pin(
_title: TString<'static>,
_description: TString<'static>,
) -> Result<impl LayoutMaybeTrace, Error> {
- Err::<RootComponent<Empty, ModelUI>, Error>(ERROR_NOT_IMPLEMENTED)
+ Err::<RootComponent<Empty, ModelUI>, Error>(Error::NotImplementedError)
}
fn flow_get_address(
@@ -623,7 +623,7 @@ impl FirmwareUI for UIBolt {
_br_code: u16,
_br_name: TString<'static>,
) -> Result<impl LayoutMaybeTrace, Error> {
- Err::<RootComponent<Empty, ModelUI>, Error>(ERROR_NOT_IMPLEMENTED)
+ Err::<RootComponent<Empty, ModelUI>, Error>(Error::NotImplementedError)
}
fn flow_get_pubkey(
@@ -637,7 +637,7 @@ impl FirmwareUI for UIBolt {
_br_code: u16,
_br_name: TString<'static>,
) -> Result<impl LayoutMaybeTrace, Error> {
- Err::<RootComponent<Empty, ModelUI>, Error>(ERROR_NOT_IMPLEMENTED)
+ Err::<RootComponent<Empty, ModelUI>, Error>(Error::NotImplementedError)
}
fn multiple_pages_texts(
@@ -645,11 +645,11 @@ impl FirmwareUI for UIBolt {
_verb: TString<'static>,
_items: Gc<List>,
) -> Result<impl LayoutMaybeTrace, Error> {
- Err::<RootComponent<Empty, ModelUI>, Error>(ERROR_NOT_IMPLEMENTED)
+ Err::<RootComponent<Empty, ModelUI>, Error>(Error::NotImplementedError)
}
fn prompt_backup() -> Result<impl LayoutMaybeTrace, Error> {
- Err::<RootComponent<Empty, ModelUI>, Error>(ERROR_NOT_IMPLEMENTED)
+ Err::<RootComponent<Empty, ModelUI>, Error>(Error::NotImplementedError)
}
fn request_bip39(
@@ -703,7 +703,7 @@ impl FirmwareUI for UIBolt {
_max_ms: u32,
_description: Option<TString<'static>>,
) -> Result<impl LayoutMaybeTrace, Error> {
- Err::<RootComponent<Empty, ModelUI>, Error>(ERROR_NOT_IMPLEMENTED)
+ Err::<RootComponent<Empty, ModelUI>, Error>(Error::NotImplementedError)
}
fn request_pin(
@@ -737,7 +737,7 @@ impl FirmwareUI for UIBolt {
_allow_empty: bool,
_prefill: Option<TString<'static>>,
) -> Result<impl LayoutMaybeTrace, Error> {
- Err::<RootComponent<Empty, ModelUI>, Error>(ERROR_NOT_IMPLEMENTED)
+ Err::<RootComponent<Empty, ModelUI>, Error>(Error::NotImplementedError)
}
fn select_menu(
@@ -745,7 +745,7 @@ impl FirmwareUI for UIBolt {
_current: usize,
_cancel: Option<TString<'static>>,
) -> Result<impl LayoutMaybeTrace, Error> {
- Err::<RootComponent<Empty, ModelUI>, Error>(ERROR_NOT_IMPLEMENTED)
+ Err::<RootComponent<Empty, ModelUI>, Error>(Error::NotImplementedError)
}
fn select_word(
@@ -881,7 +881,7 @@ impl FirmwareUI for UIBolt {
_menu_title: Option<TString<'static>>,
_verb_cancel: Option<TString<'static>>,
) -> Result<impl LayoutMaybeTrace, Error> {
- Err::<RootComponent<Empty, ModelUI>, Error>(ERROR_NOT_IMPLEMENTED)
+ Err::<RootComponent<Empty, ModelUI>, Error>(Error::NotImplementedError)
}
fn show_error(
@@ -947,17 +947,13 @@ impl FirmwareUI for UIBolt {
_led_enabled: Option<bool>,
_about_items: Obj,
) -> Result<impl LayoutMaybeTrace, Error> {
- Err::<RootComponent<Empty, ModelUI>, Error>(Error::ValueError(
- c"show_device_menu not supported",
- ))
+ Err::<RootComponent<Empty, ModelUI>, Error>(Error::NotImplementedError)
}
fn show_pairing_device_name(
_device_name: TString<'static>,
) -> Result<impl LayoutMaybeTrace, Error> {
- Err::<RootComponent<Empty, ModelUI>, Error>(Error::ValueError(
- c"show_pairing_device_name not supported",
- ))
+ Err::<RootComponent<Empty, ModelUI>, Error>(Error::NotImplementedError)
}
#[cfg(feature = "ble")]
@@ -966,9 +962,7 @@ impl FirmwareUI for UIBolt {
_description: TString<'static>,
_code: TString<'static>,
) -> Result<impl LayoutMaybeTrace, Error> {
- Err::<RootComponent<Empty, ModelUI>, Error>(Error::ValueError(
- c"show_ble_pairing_code not supported",
- ))
+ Err::<RootComponent<Empty, ModelUI>, Error>(Error::NotImplementedError)
}
fn show_thp_pairing_code(
@@ -996,9 +990,7 @@ impl FirmwareUI for UIBolt {
_title: TString<'static>,
_description: (StrBuffer, Obj),
) -> Result<impl LayoutMaybeTrace, Error> {
- Err::<RootComponent<Empty, ModelUI>, Error>(Error::ValueError(
- c"confirm_thp_pairing not supported",
- ))
+ Err::<RootComponent<Empty, ModelUI>, Error>(Error::NotImplementedError)
}
fn show_info(
@@ -1154,7 +1146,7 @@ impl FirmwareUI for UIBolt {
_title: TString<'static>,
_value: Obj,
) -> Result<impl LayoutMaybeTrace, Error> {
- Err::<RootComponent<Empty, ModelUI>, Error>(ERROR_NOT_IMPLEMENTED)
+ Err::<RootComponent<Empty, ModelUI>, Error>(Error::NotImplementedError)
}
fn show_share_words(
@@ -1180,7 +1172,7 @@ impl FirmwareUI for UIBolt {
_text_confirm: TString<'static>,
_text_check: TString<'static>,
) -> Result<impl LayoutMaybeTrace, Error> {
- Err::<RootComponent<Empty, ModelUI>, Error>(ERROR_NOT_IMPLEMENTED)
+ Err::<RootComponent<Empty, ModelUI>, Error>(Error::NotImplementedError)
}
fn show_remaining_shares(pages_iterable: Obj) -> Result<impl LayoutMaybeTrace, Error> {
@@ -1302,7 +1294,7 @@ impl FirmwareUI for UIBolt {
}
fn tutorial() -> Result<impl LayoutMaybeTrace, Error> {
- Err::<RootComponent<Empty, ModelUI>, Error>(ERROR_NOT_IMPLEMENTED)
+ Err::<RootComponent<Empty, ModelUI>, Error>(Error::NotImplementedError)
}
}
diff --git a/core/embed/rust/src/ui/layout_caesar/ui_firmware.rs b/core/embed/rust/src/ui/layout_caesar/ui_firmware.rs
index 5ffc8352..0f4b8432 100644
--- a/core/embed/rust/src/ui/layout_caesar/ui_firmware.rs
+++ b/core/embed/rust/src/ui/layout_caesar/ui_firmware.rs
@@ -26,8 +26,8 @@ use crate::{
util::{ConfirmValueParams, RecoveryType},
},
ui_firmware::{
- FirmwareUI, ERROR_NOT_IMPLEMENTED, MAX_CHECKLIST_ITEMS, MAX_GROUP_SHARE_LINES,
- MAX_MENU_ITEMS, MAX_PAIRED_DEVICES, MAX_WORD_QUIZ_ITEMS,
+ FirmwareUI, MAX_CHECKLIST_ITEMS, MAX_GROUP_SHARE_LINES, MAX_MENU_ITEMS,
+ MAX_PAIRED_DEVICES, MAX_WORD_QUIZ_ITEMS,
},
ModelUI,
},
@@ -142,7 +142,7 @@ impl FirmwareUI for UICaesar {
_buy_amount: TString<'static>,
_back_button: bool,
) -> Result<impl LayoutMaybeTrace, Error> {
- Err::<RootComponent<Empty, ModelUI>, Error>(ERROR_NOT_IMPLEMENTED)
+ Err::<RootComponent<Empty, ModelUI>, Error>(Error::NotImplementedError)
}
fn confirm_value(
@@ -200,7 +200,7 @@ impl FirmwareUI for UICaesar {
_hold: bool,
_chunkify: bool,
) -> Result<Gc<LayoutObj>, Error> {
- Err::<Gc<LayoutObj>, Error>(ERROR_NOT_IMPLEMENTED)
+ Err::<Gc<LayoutObj>, Error>(Error::NotImplementedError)
}
fn confirm_homescreen(
@@ -240,7 +240,7 @@ impl FirmwareUI for UICaesar {
_items: Obj,
_verb: Option<TString<'static>>,
) -> Result<impl LayoutMaybeTrace, Error> {
- Err::<RootComponent<Empty, ModelUI>, Error>(ERROR_NOT_IMPLEMENTED)
+ Err::<RootComponent<Empty, ModelUI>, Error>(Error::NotImplementedError)
}
fn confirm_fido(
@@ -506,9 +506,7 @@ impl FirmwareUI for UICaesar {
unwrap!(info_pages.push((account_title, info)));
}
if external_menu && !info_pages.is_empty() {
- return Err(Error::ValueError(
- c"Cannot use both info pages and external menu",
- ));
+ return Err(Error::NotImplementedError);
}
// button layouts and actions
@@ -729,14 +727,14 @@ impl FirmwareUI for UICaesar {
_summary_br_name: Option<TString<'static>>,
_cancel_text: Option<TString<'static>>,
) -> Result<impl LayoutMaybeTrace, Error> {
- Err::<RootComponent<Empty, ModelUI>, Error>(ERROR_NOT_IMPLEMENTED)
+ Err::<RootComponent<Empty, ModelUI>, Error>(Error::NotImplementedError)
}
fn flow_confirm_set_new_pin(
_title: TString<'static>,
_description: TString<'static>,
) -> Result<impl LayoutMaybeTrace, Error> {
- Err::<RootComponent<Empty, ModelUI>, Error>(ERROR_NOT_IMPLEMENTED)
+ Err::<RootComponent<Empty, ModelUI>, Error>(Error::NotImplementedError)
}
fn flow_get_address(
@@ -754,7 +752,7 @@ impl FirmwareUI for UICaesar {
_br_code: u16,
_br_name: TString<'static>,
) -> Result<impl LayoutMaybeTrace, Error> {
- Err::<RootComponent<Empty, ModelUI>, Error>(ERROR_NOT_IMPLEMENTED)
+ Err::<RootComponent<Empty, ModelUI>, Error>(Error::NotImplementedError)
}
fn flow_get_pubkey(
@@ -768,7 +766,7 @@ impl FirmwareUI for UICaesar {
_br_code: u16,
_br_name: TString<'static>,
) -> Result<impl LayoutMaybeTrace, Error> {
- Err::<RootComponent<Empty, ModelUI>, Error>(ERROR_NOT_IMPLEMENTED)
+ Err::<RootComponent<Empty, ModelUI>, Error>(Error::NotImplementedError)
}
fn multiple_pages_texts(
@@ -907,7 +905,7 @@ impl FirmwareUI for UICaesar {
_max_ms: u32,
_description: Option<TString<'static>>,
) -> Result<impl LayoutMaybeTrace, Error> {
- Err::<RootComponent<Empty, ModelUI>, Error>(ERROR_NOT_IMPLEMENTED)
+ Err::<RootComponent<Empty, ModelUI>, Error>(Error::NotImplementedError)
}
fn request_pin(
@@ -938,7 +936,7 @@ impl FirmwareUI for UICaesar {
_allow_empty: bool,
_prefill: Option<TString<'static>>,
) -> Result<impl LayoutMaybeTrace, Error> {
- Err::<RootComponent<Empty, ModelUI>, Error>(ERROR_NOT_IMPLEMENTED)
+ Err::<RootComponent<Empty, ModelUI>, Error>(Error::NotImplementedError)
}
fn select_menu(
@@ -1001,7 +999,7 @@ impl FirmwareUI for UICaesar {
}
fn set_brightness(_current_brightness: Option<u8>) -> Result<impl LayoutMaybeTrace, Error> {
- Err::<RootComponent<Empty, ModelUI>, Error>(ERROR_NOT_IMPLEMENTED)
+ Err::<RootComponent<Empty, ModelUI>, Error>(Error::NotImplementedError)
}
fn show_address_details(
@@ -1098,7 +1096,7 @@ impl FirmwareUI for UICaesar {
_allow_cancel: bool,
_time_ms: u32,
) -> Result<Gc<LayoutObj>, Error> {
- Err::<Gc<LayoutObj>, Error>(ERROR_NOT_IMPLEMENTED)
+ Err::<Gc<LayoutObj>, Error>(Error::NotImplementedError)
}
fn show_group_share_success(
@@ -1146,17 +1144,13 @@ impl FirmwareUI for UICaesar {
_led_enabled: Option<bool>,
_about_items: Obj,
) -> Result<impl LayoutMaybeTrace, Error> {
- Err::<RootComponent<Empty, ModelUI>, Error>(Error::ValueError(
- c"show_device_menu not supported",
- ))
+ Err::<RootComponent<Empty, ModelUI>, Error>(Error::NotImplementedError)
}
fn show_pairing_device_name(
_device_name: TString<'static>,
) -> Result<impl LayoutMaybeTrace, Error> {
- Err::<RootComponent<Empty, ModelUI>, Error>(Error::ValueError(
- c"show_pairing_device_name not supported",
- ))
+ Err::<RootComponent<Empty, ModelUI>, Error>(Error::NotImplementedError)
}
#[cfg(feature = "ble")]
@@ -1165,9 +1159,7 @@ impl FirmwareUI for UICaesar {
_description: TString<'static>,
_code: TString<'static>,
) -> Result<impl LayoutMaybeTrace, Error> {
- Err::<RootComponent<Empty, ModelUI>, Error>(Error::ValueError(
- c"show_ble_pairing_code not supported",
- ))
+ Err::<RootComponent<Empty, ModelUI>, Error>(Error::NotImplementedError)
}
fn show_thp_pairing_code(
@@ -1195,9 +1187,7 @@ impl FirmwareUI for UICaesar {
_title: TString<'static>,
_description: (StrBuffer, Obj),
) -> Result<impl LayoutMaybeTrace, Error> {
- Err::<RootComponent<Empty, ModelUI>, Error>(Error::ValueError(
- c"confirm_thp_pairing not supported",
- ))
+ Err::<RootComponent<Empty, ModelUI>, Error>(Error::NotImplementedError)
}
fn show_info(
@@ -1228,7 +1218,7 @@ impl FirmwareUI for UICaesar {
_horizontal: bool,
_chunkify: bool,
) -> Result<impl LayoutMaybeTrace, Error> {
- Err::<RootComponent<Empty, ModelUI>, Error>(ERROR_NOT_IMPLEMENTED)
+ Err::<RootComponent<Empty, ModelUI>, Error>(Error::NotImplementedError)
}
fn show_lockscreen(
@@ -1355,11 +1345,11 @@ impl FirmwareUI for UICaesar {
_text_confirm: TString<'static>,
_text_check: TString<'static>,
) -> Result<impl LayoutMaybeTrace, Error> {
- Err::<RootComponent<Empty, ModelUI>, Error>(ERROR_NOT_IMPLEMENTED)
+ Err::<RootComponent<Empty, ModelUI>, Error>(Error::NotImplementedError)
}
fn show_remaining_shares(_pages_iterable: Obj) -> Result<impl LayoutMaybeTrace, Error> {
- Err::<RootComponent<Empty, ModelUI>, Error>(ERROR_NOT_IMPLEMENTED)
+ Err::<RootComponent<Empty, ModelUI>, Error>(Error::NotImplementedError)
}
fn show_simple(
@@ -1380,7 +1370,7 @@ impl FirmwareUI for UICaesar {
_allow_cancel: bool,
_time_ms: u32,
) -> Result<Gc<LayoutObj>, Error> {
- Err::<Gc<LayoutObj>, Error>(ERROR_NOT_IMPLEMENTED)
+ Err::<Gc<LayoutObj>, Error>(Error::NotImplementedError)
}
fn show_wait_text(text: TString<'static>) -> Result<impl LayoutMaybeTrace, Error> {
diff --git a/core/embed/rust/src/ui/layout_delizia/ui_firmware.rs b/core/embed/rust/src/ui/layout_delizia/ui_firmware.rs
index 86bc769d..03fdc62c 100644
--- a/core/embed/rust/src/ui/layout_delizia/ui_firmware.rs
+++ b/core/embed/rust/src/ui/layout_delizia/ui_firmware.rs
@@ -28,8 +28,8 @@ use crate::{
util::{ContentType, PropsList, RecoveryType, StrOrBytes},
},
ui_firmware::{
- FirmwareUI, ERROR_NOT_IMPLEMENTED, MAX_CHECKLIST_ITEMS, MAX_GROUP_SHARE_LINES,
- MAX_MENU_ITEMS, MAX_PAIRED_DEVICES, MAX_WORD_QUIZ_ITEMS,
+ FirmwareUI, MAX_CHECKLIST_ITEMS, MAX_GROUP_SHARE_LINES, MAX_MENU_ITEMS,
+ MAX_PAIRED_DEVICES, MAX_WORD_QUIZ_ITEMS,
},
ModelUI,
},
@@ -88,7 +88,7 @@ impl FirmwareUI for UIDelizia {
_chunkify: bool,
) -> Result<Gc<LayoutObj>, Error> {
// confirm_value is used instead
- Err::<Gc<LayoutObj>, Error>(ERROR_NOT_IMPLEMENTED)
+ Err::<Gc<LayoutObj>, Error>(Error::NotImplementedError)
}
fn confirm_trade(
@@ -283,9 +283,7 @@ impl FirmwareUI for UIDelizia {
#[cfg(feature = "universal_fw")]
return flow::confirm_fido::new_confirm_fido(title, app_name, icon, accounts);
#[cfg(not(feature = "universal_fw"))]
- Err::<RootComponent<Empty, ModelUI>, Error>(Error::ValueError(
- c"confirm_fido not used in bitcoin-only firmware",
- ))
+ Err::<RootComponent<Empty, ModelUI>, Error>(Error::NotImplementedError)
}
fn confirm_firmware_update(
@@ -378,7 +376,7 @@ impl FirmwareUI for UIDelizia {
_hold: bool,
_items: Obj,
) -> Result<impl LayoutMaybeTrace, Error> {
- Err::<RootComponent<Empty, ModelUI>, Error>(ERROR_NOT_IMPLEMENTED)
+ Err::<RootComponent<Empty, ModelUI>, Error>(Error::NotImplementedError)
}
fn confirm_reset_device(recovery: bool) -> Result<impl LayoutMaybeTrace, Error> {
@@ -725,7 +723,7 @@ impl FirmwareUI for UIDelizia {
_verb: TString<'static>,
_items: Gc<List>,
) -> Result<impl LayoutMaybeTrace, Error> {
- Err::<RootComponent<Empty, ModelUI>, Error>(ERROR_NOT_IMPLEMENTED)
+ Err::<RootComponent<Empty, ModelUI>, Error>(Error::NotImplementedError)
}
fn prompt_backup() -> Result<impl LayoutMaybeTrace, Error> {
@@ -794,7 +792,7 @@ impl FirmwareUI for UIDelizia {
_max_ms: u32,
_description: Option<TString<'static>>,
) -> Result<impl LayoutMaybeTrace, Error> {
- Err::<RootComponent<Empty, ModelUI>, Error>(ERROR_NOT_IMPLEMENTED)
+ Err::<RootComponent<Empty, ModelUI>, Error>(Error::NotImplementedError)
}
fn request_pin(
@@ -829,7 +827,7 @@ impl FirmwareUI for UIDelizia {
_allow_empty: bool,
_prefill: Option<TString<'static>>,
) -> Result<impl LayoutMaybeTrace, Error> {
- Err::<RootComponent<Empty, ModelUI>, Error>(ERROR_NOT_IMPLEMENTED)
+ Err::<RootComponent<Empty, ModelUI>, Error>(Error::NotImplementedError)
}
fn select_menu(
@@ -911,7 +909,7 @@ impl FirmwareUI for UIDelizia {
_path: Option<TString<'static>>,
_xpubs: Obj,
) -> Result<impl LayoutMaybeTrace, Error> {
- Err::<RootComponent<Empty, ModelUI>, Error>(ERROR_NOT_IMPLEMENTED)
+ Err::<RootComponent<Empty, ModelUI>, Error>(Error::NotImplementedError)
}
fn show_checklist(
@@ -1031,17 +1029,13 @@ impl FirmwareUI for UIDelizia {
_led_enabled: Option<bool>,
_about_items: Obj,
) -> Result<impl LayoutMaybeTrace, Error> {
- Err::<RootComponent<Empty, ModelUI>, Error>(Error::ValueError(
- c"show_device_menu not supported",
- ))
+ Err::<RootComponent<Empty, ModelUI>, Error>(Error::NotImplementedError)
}
fn show_pairing_device_name(
_device_name: TString<'static>,
) -> Result<impl LayoutMaybeTrace, Error> {
- Err::<RootComponent<Empty, ModelUI>, Error>(Error::ValueError(
- c"show_pairing_device_name not supported",
- ))
+ Err::<RootComponent<Empty, ModelUI>, Error>(Error::NotImplementedError)
}
#[cfg(feature = "ble")]
@@ -1050,9 +1044,7 @@ impl FirmwareUI for UIDelizia {
_description: TString<'static>,
_code: TString<'static>,
) -> Result<impl LayoutMaybeTrace, Error> {
- Err::<RootComponent<Empty, ModelUI>, Error>(Error::ValueError(
- c"show_ble_pairing_code not supported",
- ))
+ Err::<RootComponent<Empty, ModelUI>, Error>(Error::NotImplementedError)
}
fn show_thp_pairing_code(
@@ -1080,9 +1072,7 @@ impl FirmwareUI for UIDelizia {
_title: TString<'static>,
_description: (StrBuffer, Obj),
) -> Result<impl LayoutMaybeTrace, Error> {
- Err::<RootComponent<Empty, ModelUI>, Error>(Error::ValueError(
- c"confirm_thp_pairing not supported",
- ))
+ Err::<RootComponent<Empty, ModelUI>, Error>(Error::NotImplementedError)
}
fn show_info(
@@ -1223,9 +1213,7 @@ impl FirmwareUI for UIDelizia {
_words: heapless::Vec<TString<'static>, 33>,
_title: Option<TString<'static>>,
) -> Result<impl LayoutMaybeTrace, Error> {
- Err::<RootComponent<Empty, ModelUI>, Error>(Error::ValueError(
- c"use show_share_words_extended instead",
- ))
+ Err::<RootComponent<Empty, ModelUI>, Error>(Error::NotImplementedError)
}
fn show_share_words_extended(
@@ -1256,7 +1244,7 @@ impl FirmwareUI for UIDelizia {
fn show_remaining_shares(_pages_iterable: Obj) -> Result<impl LayoutMaybeTrace, Error> {
// Delizia: remaining shares is a part of `continue_recovery` flow
- Err::<RootComponent<Empty, ModelUI>, Error>(ERROR_NOT_IMPLEMENTED)
+ Err::<RootComponent<Empty, ModelUI>, Error>(Error::NotImplementedError)
}
fn show_simple(
diff --git a/core/embed/rust/src/ui/layout_eckhart/ui_firmware.rs b/core/embed/rust/src/ui/layout_eckhart/ui_firmware.rs
index 41a9a87b..4bce48f6 100644
--- a/core/embed/rust/src/ui/layout_eckhart/ui_firmware.rs
+++ b/core/embed/rust/src/ui/layout_eckhart/ui_firmware.rs
@@ -26,8 +26,8 @@ use crate::{
util::{ConfirmValueParams, ContentType, PropsList, RecoveryType, StrOrBytes},
},
ui_firmware::{
- FirmwareUI, ERROR_NOT_IMPLEMENTED, MAX_CHECKLIST_ITEMS, MAX_GROUP_SHARE_LINES,
- MAX_MENU_ITEMS, MAX_PAIRED_DEVICES, MAX_WORD_QUIZ_ITEMS,
+ FirmwareUI, MAX_CHECKLIST_ITEMS, MAX_GROUP_SHARE_LINES, MAX_MENU_ITEMS,
+ MAX_PAIRED_DEVICES, MAX_WORD_QUIZ_ITEMS,
},
ModelUI,
},
@@ -126,7 +126,7 @@ impl FirmwareUI for UIEckhart {
_info_button: bool,
_chunkify: bool,
) -> Result<Gc<LayoutObj>, Error> {
- Err::<Gc<LayoutObj>, Error>(ERROR_NOT_IMPLEMENTED)
+ Err::<Gc<LayoutObj>, Error>(Error::NotImplementedError)
}
fn confirm_homescreen(
@@ -209,9 +209,7 @@ impl FirmwareUI for UIEckhart {
#[cfg(feature = "universal_fw")]
return flow::confirm_fido::new_confirm_fido(title, app_name, icon, accounts);
#[cfg(not(feature = "universal_fw"))]
- Err::<RootComponent<Empty, ModelUI>, Error>(Error::ValueError(
- c"confirm_fido not used in bitcoin-only firmware",
- ))
+ Err::<RootComponent<Empty, ModelUI>, Error>(Error::NotImplementedError)
}
fn confirm_firmware_update(
@@ -324,7 +322,7 @@ impl FirmwareUI for UIEckhart {
_hold: bool,
_items: Obj,
) -> Result<impl LayoutMaybeTrace, Error> {
- Err::<RootComponent<Empty, ModelUI>, Error>(ERROR_NOT_IMPLEMENTED)
+ Err::<RootComponent<Empty, ModelUI>, Error>(Error::NotImplementedError)
}
fn confirm_reset_device(recovery: bool) -> Result<impl LayoutMaybeTrace, Error> {
@@ -867,7 +865,7 @@ impl FirmwareUI for UIEckhart {
_verb: TString<'static>,
_items: Gc<List>,
) -> Result<impl LayoutMaybeTrace, Error> {
- Err::<RootComponent<Empty, ModelUI>, Error>(ERROR_NOT_IMPLEMENTED)
+ Err::<RootComponent<Empty, ModelUI>, Error>(Error::NotImplementedError)
}
fn prompt_backup() -> Result<impl LayoutMaybeTrace, Error> {
@@ -1074,7 +1072,7 @@ impl FirmwareUI for UIEckhart {
_path: Option<TString<'static>>,
_xpubs: Obj,
) -> Result<impl LayoutMaybeTrace, Error> {
- Err::<RootComponent<Empty, ModelUI>, Error>(ERROR_NOT_IMPLEMENTED)
+ Err::<RootComponent<Empty, ModelUI>, Error>(Error::NotImplementedError)
}
fn show_checklist(
@@ -1491,9 +1489,7 @@ impl FirmwareUI for UIEckhart {
_words: heapless::Vec<TString<'static>, 33>,
_title: Option<TString<'static>>,
) -> Result<impl LayoutMaybeTrace, Error> {
- Err::<RootComponent<Empty, ModelUI>, Error>(Error::ValueError(
- c"use show_share_words_extended instead",
- ))
+ Err::<RootComponent<Empty, ModelUI>, Error>(Error::NotImplementedError)
}
fn show_share_words_extended(
@@ -1530,7 +1526,7 @@ impl FirmwareUI for UIEckhart {
}
fn show_remaining_shares(_pages_iterable: Obj) -> Result<impl LayoutMaybeTrace, Error> {
- Err::<RootComponent<Empty, ModelUI>, Error>(ERROR_NOT_IMPLEMENTED)
+ Err::<RootComponent<Empty, ModelUI>, Error>(Error::NotImplementedError)
}
fn show_simple(
diff --git a/core/embed/rust/src/ui/ui_firmware.rs b/core/embed/rust/src/ui/ui_firmware.rs
index b91d1147..60b594f2 100644
--- a/core/embed/rust/src/ui/ui_firmware.rs
+++ b/core/embed/rust/src/ui/ui_firmware.rs
@@ -18,8 +18,6 @@ pub const MAX_MENU_ITEMS: usize = 5;
pub const MAX_PAIRED_DEVICES: usize = 8; // Maximum number of paired devices in the device menu
-pub const ERROR_NOT_IMPLEMENTED: Error = Error::ValueError(c"not implemented");
-
pub trait FirmwareUI {
#[allow(clippy::too_many_arguments)]
fn confirm_action(
Why this scored 15/100
Community notes
Notes can correct, qualify, or add evidence to the AI analysis. Every note shown here has been validated by a human moderator.
The AI analysis stands alone for now. Submit a note if you can add evidence or important context.