wasm_runtime/
error.rs

1use std::io;
2use thiserror::Error;
3
4pub type Result<T> = std::result::Result<T, Error>;
5
6#[derive(Error, Debug)]
7pub enum Error {
8    #[error("Runtime not found: {language} {version}")]
9    RuntimeNotFound { language: String, version: String },
10
11    #[error("Network error: {0}")]
12    Network(#[from] reqwest::Error),
13
14    #[error("IO error: {0}")]
15    Io(#[from] io::Error),
16
17    #[error("Integrity check failed: expected {expected}, got {actual}")]
18    IntegrityCheckFailed { expected: String, actual: String },
19
20    #[error("JSON parsing error: {0}")]
21    JsonError(#[from] serde_json::Error),
22
23    #[error("Invalid language: {0}")]
24    InvalidLanguage(String),
25
26    #[error("Manifest not found for {language}")]
27    ManifestNotFound { language: String },
28
29    #[error("Version {version} not found for {language}")]
30    VersionNotFound { language: String, version: String },
31
32    #[error("{0}")]
33    Other(String),
34}
35
36impl From<String> for Error {
37    fn from(s: String) -> Self {
38        Error::InvalidLanguage(s)
39    }
40}
41
42#[cfg(test)]
43mod tests {
44    use super::*;
45
46    #[test]
47    fn test_error_display() {
48        let err = Error::RuntimeNotFound {
49            language: "python".to_string(),
50            version: "3.11.7".to_string(),
51        };
52        assert_eq!(err.to_string(), "Runtime not found: python 3.11.7");
53
54        let err = Error::IntegrityCheckFailed {
55            expected: "abc123".to_string(),
56            actual: "def456".to_string(),
57        };
58        assert_eq!(
59            err.to_string(),
60            "Integrity check failed: expected abc123, got def456"
61        );
62
63        let err = Error::InvalidLanguage("foo".to_string());
64        assert_eq!(err.to_string(), "Invalid language: foo");
65    }
66
67    #[test]
68    fn test_error_from_string() {
69        let err: Error = "unknown language".to_string().into();
70        assert_eq!(err.to_string(), "Invalid language: unknown language");
71    }
72}