Source code
Revision control
Copy as Markdown
Other Tools
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
use std::io;
/// Error enum
#[derive(uniffi::Error, thiserror::Error, Debug)]
pub enum TestError {
#[error("Failure1")]
Failure1,
#[error("Failure2(data={data})")]
Failure2 { data: String },
}
/// Flat error enum
///
/// The associated data for this won't be across the FFI. Flat errors are mostly just a historical
/// artifact, but there are some use-cases for them -- for example variants that wrap errors from
/// other crates.
#[derive(uniffi::Error, thiserror::Error, Debug)]
#[uniffi(flat_error)]
pub enum TestFlatError {
/// Here's an example of a variant that only works with a flat error, `io::Error` is not
/// UniFFI compatible and can't be passed across the FFI.
#[error("Failure1")]
IoError(io::Error),
}
#[uniffi::export]
pub fn func_with_error(input: u32) -> Result<(), TestError> {
match input {
0 => Err(TestError::Failure1),
1 => Err(TestError::Failure2 {
data: "DATA".to_string(),
}),
_ => Ok(()),
}
}
#[uniffi::export]
pub fn func_with_flat_error(input: u32) -> Result<(), TestFlatError> {
match input {
0 => Err(TestFlatError::IoError(io::Error::new(
io::ErrorKind::NotFound,
"NotFound".to_string(),
))),
_ => Ok(()),
}
}