leviath_runtime/embed/
error.rs1#[derive(Debug, Clone, PartialEq, Eq)]
6#[non_exhaustive]
7pub enum EmbedError {
8 NoProviders,
12 NoRuntime,
16 Blueprint(String),
18 Spawn(String),
20 ChannelClosed,
23}
24
25impl std::fmt::Display for EmbedError {
26 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
27 match self {
28 EmbedError::NoProviders => {
29 write!(f, "no providers configured: add credentials or a provider")
30 }
31 EmbedError::NoRuntime => {
32 write!(f, "no tokio runtime: build inside one or pass a handle")
33 }
34 EmbedError::Blueprint(msg) => write!(f, "blueprint error: {msg}"),
35 EmbedError::Spawn(msg) => write!(f, "spawn error: {msg}"),
36 EmbedError::ChannelClosed => write!(f, "the world has shut down"),
37 }
38 }
39}
40
41impl std::error::Error for EmbedError {}
42
43#[cfg(test)]
44mod tests {
45 use super::*;
46
47 #[test]
48 fn display_covers_every_variant() {
49 let cases = [
50 (EmbedError::NoProviders, "no providers"),
51 (EmbedError::NoRuntime, "no tokio runtime"),
52 (
53 EmbedError::Blueprint("bad".to_string()),
54 "blueprint error: bad",
55 ),
56 (EmbedError::Spawn("nope".to_string()), "spawn error: nope"),
57 (EmbedError::ChannelClosed, "shut down"),
58 ];
59 for (err, needle) in cases {
60 assert!(err.to_string().contains(needle));
61 }
62 }
63}