mediatek_optical/
error_codes.rs1#[path = "issue_kind.rs"]
4mod issue_kind;
5use issue_kind::kind_for_code;
6
7pub trait CodedError {
13 fn kind(&self) -> crate::operation::IssueKind {
15 kind_for_code(self.code())
16 }
17 fn code(&self) -> &'static str;
19}
20
21impl CodedError for crate::protocol::Incomplete {
22 fn code(&self) -> &'static str {
23 "mediatek.protocol.incomplete"
24 }
25}
26
27impl CodedError for crate::UnknownChip {
28 fn code(&self) -> &'static str {
29 "mediatek.chip.unknown_label"
30 }
31}
32
33#[cfg(feature = "drive")]
34impl<E> CodedError for crate::drive::Error<E> {
35 fn code(&self) -> &'static str {
36 match self {
37 Self::Transport(_) => "mediatek.drive.transport",
38 Self::Short { .. } => "mediatek.drive.short",
39 Self::Oversize(_) => "mediatek.drive.oversize",
40 }
41 }
42}
43
44#[cfg(feature = "enc")]
45impl CodedError for crate::enc::LengthError {
46 fn code(&self) -> &'static str {
47 "mediatek.enc.length"
48 }
49}
50
51#[cfg(feature = "image")]
52impl CodedError for crate::image::ChipError {
53 fn code(&self) -> &'static str {
54 match self {
55 Self::Undetectable => "mediatek.image.undetectable_chip",
56 }
57 }
58}
59
60#[cfg(feature = "image")]
61impl CodedError for crate::image::cmac::CmacError {
62 fn code(&self) -> &'static str {
63 match self {
64 Self::ImageTooSmall { .. } => "mediatek.cmac.image_too_small",
65 Self::BadRange { .. } => "mediatek.cmac.bad_range",
66 }
67 }
68}
69
70#[cfg(feature = "image")]
71impl CodedError for crate::update::PrepareError {
72 fn code(&self) -> &'static str {
73 match self {
74 Self::ReceiverEntry => "mediatek.prepare.receiver_entry",
75 Self::ReceiverContract => "mediatek.prepare.receiver_contract",
76 #[cfg(all(feature = "drive", feature = "enc"))]
77 Self::Layout(_) => "mediatek.prepare.layout",
78 Self::Size(_) => "mediatek.prepare.size",
79 Self::Integrity => "mediatek.prepare.integrity",
80 Self::DriveRead => "mediatek.prepare.drive_read",
81 Self::UnknownChip => "mediatek.prepare.unknown_chip",
82 Self::UnknownDriveChip => "mediatek.prepare.unknown_drive_chip",
83 Self::ChipMismatch { .. } => "mediatek.prepare.chip_mismatch",
84 Self::InstalledMismatch => "mediatek.prepare.installed_mismatch",
85 Self::UnknownInstalledFamily => "mediatek.prepare.unknown_installed_family",
86 Self::UnknownTargetFamily => "mediatek.prepare.unknown_target_family",
87 Self::FamilyMismatch { .. } => "mediatek.prepare.family_mismatch",
88 }
89 }
90}
91
92#[cfg(all(feature = "image", feature = "enc"))]
93impl CodedError for crate::envelope::Error {
94 fn code(&self) -> &'static str {
95 match self {
96 Self::Image(_) => "mediatek.envelope.image",
97 Self::UnknownFraming => "mediatek.envelope.unknown_framing",
98 Self::Ambiguous => "mediatek.envelope.ambiguous",
99 }
100 }
101}
102
103#[cfg(feature = "oem")]
104impl CodedError for crate::oem::RebuildError {
105 fn code(&self) -> &'static str {
106 match self {
107 Self::Size(_) => "mediatek.oem.size",
108 Self::Chip(_) => "mediatek.oem.chip",
109 Self::NoFactory(_) => "mediatek.oem.no_factory",
110 Self::UnknownBootPage(_) => "mediatek.oem.unknown_boot_page",
111 Self::Factory(_) => "mediatek.oem.factory",
112 }
113 }
114}
115
116#[cfg(feature = "drive")]
117impl<E> CodedError for crate::receiver::Error<E> {
118 fn code(&self) -> &'static str {
119 match self {
120 Self::Read(_) => "mediatek.receiver.read",
121 Self::InvalidIdentity => "mediatek.receiver.invalid_identity",
122 Self::Unknown => "mediatek.receiver.unknown",
123 Self::Conflict => "mediatek.receiver.conflict",
124 Self::Changed => "mediatek.receiver.changed",
125 Self::UnknownEntry => "mediatek.receiver.unknown_entry",
126 }
127 }
128}
129
130#[cfg(all(feature = "drive", feature = "image"))]
131impl<E> CodedError for crate::update::FlashError<E> {
132 fn code(&self) -> &'static str {
133 match self {
134 Self::Entry(_) => "mediatek.flash.entry",
135 Self::Transfer { .. } => "mediatek.flash.transfer",
136 Self::Fault { .. } => "mediatek.flash.fault",
137 Self::ReadyTimeout(_) => "mediatek.flash.ready_timeout",
138 Self::Startup(_) => "mediatek.flash.startup",
139 Self::Mismatch { .. } => "mediatek.flash.mismatch",
140 Self::Incomplete { .. } => "mediatek.flash.incomplete",
141 }
142 }
143}
144
145#[cfg(all(feature = "drive", feature = "image"))]
146impl<E> CodedError for crate::update::StartupError<E> {
147 fn code(&self) -> &'static str {
148 match self {
149 Self::Identity(_) => "mediatek.startup.identity",
150 Self::Read(_) => "mediatek.startup.read",
151 Self::TargetMismatch => "mediatek.startup.target_mismatch",
152 }
153 }
154}
155
156#[cfg(all(feature = "drive", feature = "image", feature = "enc"))]
157impl<E> CodedError for crate::receiver::ExecuteError<E> {
158 fn code(&self) -> &'static str {
159 match self {
160 Self::Receiver(_) => "mediatek.execute.receiver",
161 Self::Flash(_) => "mediatek.execute.flash",
162 }
163 }
164}
165
166#[cfg(all(feature = "drive", feature = "image", feature = "enc"))]
167impl<E> CodedError for crate::receiver::reference::Error<E> {
168 fn kind(&self) -> crate::operation::IssueKind {
169 match self {
170 Self::Analysis(error) => error.kind(),
171 Self::Binding(error) => error.kind(),
172 }
173 }
174 fn code(&self) -> &'static str {
175 match self {
176 Self::Analysis(_) => "mediatek.reference.analysis",
177 Self::Binding(_) => "mediatek.reference.binding",
178 }
179 }
180}
181
182#[cfg(all(feature = "drive", feature = "image", feature = "enc"))]
183impl CodedError for crate::receiver::layout::Error {
184 fn code(&self) -> &'static str {
185 match self {
186 Self::Alignment => "mediatek.layout.alignment",
187 Self::Range => "mediatek.layout.range",
188 Self::Conflict { .. } => "mediatek.layout.conflict",
189 Self::MultipleDecryptions { .. } => "mediatek.layout.multiple_decryptions",
190 Self::NoProgram => "mediatek.layout.no_program",
191 Self::ImageSize => "mediatek.layout.image_size",
192 }
193 }
194}
195
196#[cfg(all(feature = "drive", feature = "image", feature = "enc"))]
197impl<E> CodedError for crate::recovery::Error<E> {
198 fn kind(&self) -> crate::operation::IssueKind {
199 use crate::operation::IssueKind;
200 match self {
201 Self::Receiver(error) => error.kind(),
202 Self::Reference(error) => error.kind(),
203 Self::Read(error) => error.kind(),
204 Self::Image(error) => error.kind(),
205 Self::Flash(error) => error.kind(),
206 Self::Changed => IssueKind::ReceiverMismatch,
207 Self::Startup(error) => error.kind(),
208 }
209 }
210 fn code(&self) -> &'static str {
211 match self {
212 Self::Receiver(_) => "mediatek.recovery.receiver",
213 Self::Reference(_) => "mediatek.recovery.reference",
214 Self::Read(_) => "mediatek.recovery.read",
215 Self::Image(_) => "mediatek.recovery.image",
216 Self::Flash(_) => "mediatek.recovery.flash",
217 Self::Changed => "mediatek.recovery.changed",
218 Self::Startup(_) => "mediatek.recovery.startup",
219 }
220 }
221}