1 // Copyright 2023, The Android Open Source Project
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 // http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14
15 //! Errors and relating functions thrown in this library.
16
17 use open_dice_cbor_bindgen::DiceResult;
18 use std::{fmt, result};
19
20 #[cfg(feature = "std")]
21 use std::error::Error;
22
23 /// Error type used by DICE.
24 #[derive(Debug)]
25 pub enum DiceError {
26 /// Provided input was invalid.
27 InvalidInput,
28 /// Provided buffer was too small.
29 BufferTooSmall,
30 /// Platform error.
31 PlatformError,
32 }
33
34 /// This makes `DiceError` accepted by anyhow.
35 #[cfg(feature = "std")]
36 impl Error for DiceError {}
37
38 impl fmt::Display for DiceError {
fmt(&self, f: &mut fmt::Formatter) -> fmt::Result39 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
40 match self {
41 Self::InvalidInput => write!(f, "invalid input"),
42 Self::BufferTooSmall => write!(f, "buffer too small"),
43 Self::PlatformError => write!(f, "platform error"),
44 }
45 }
46 }
47
48 /// DICE result type.
49 pub type Result<T> = result::Result<T, DiceError>;
50
51 /// Checks the given `DiceResult`. Returns an error if it's not OK.
check_result(result: DiceResult) -> Result<()>52 pub fn check_result(result: DiceResult) -> Result<()> {
53 match result {
54 DiceResult::kDiceResultOk => Ok(()),
55 DiceResult::kDiceResultInvalidInput => Err(DiceError::InvalidInput),
56 DiceResult::kDiceResultBufferTooSmall => Err(DiceError::BufferTooSmall),
57 DiceResult::kDiceResultPlatformError => Err(DiceError::PlatformError),
58 }
59 }
60