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 ProviderClient(String),
25 ChannelClosed,
28}
29
30impl std::fmt::Display for EmbedError {
31 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
32 match self {
33 EmbedError::NoProviders => {
34 write!(f, "no providers configured: add credentials or a provider")
35 }
36 EmbedError::NoRuntime => {
37 write!(f, "no tokio runtime: build inside one or pass a handle")
38 }
39 EmbedError::Blueprint(msg) => write!(f, "blueprint error: {msg}"),
40 EmbedError::Spawn(msg) => write!(f, "spawn error: {msg}"),
41 EmbedError::ProviderClient(msg) => {
42 write!(f, "provider HTTPS client error: {msg}")
43 }
44 EmbedError::ChannelClosed => write!(f, "the world has shut down"),
45 }
46 }
47}
48
49impl std::error::Error for EmbedError {}
50
51#[cfg(test)]
52mod tests {
53 use super::*;
54
55 #[test]
56 fn display_covers_every_variant() {
57 let cases = [
58 (EmbedError::NoProviders, "no providers"),
59 (EmbedError::NoRuntime, "no tokio runtime"),
60 (
61 EmbedError::Blueprint("bad".to_string()),
62 "blueprint error: bad",
63 ),
64 (EmbedError::Spawn("nope".to_string()), "spawn error: nope"),
65 (
66 EmbedError::ProviderClient("no roots".to_string()),
67 "provider HTTPS client error: no roots",
68 ),
69 (EmbedError::ChannelClosed, "shut down"),
70 ];
71 for (err, needle) in cases {
72 assert!(err.to_string().contains(needle));
73 }
74 }
75}