aion_store_libsql/
error.rs1use aion_store::StoreError;
4
5#[must_use]
7pub fn libsql_error(error: &libsql::Error) -> StoreError {
8 StoreError::Backend(error.to_string())
9}
10
11#[must_use]
13pub fn serde_json_error(error: &serde_json::Error) -> StoreError {
14 StoreError::Serialization(error.to_string())
15}
16
17#[cfg(test)]
18mod tests {
19 use aion_store::StoreError;
20
21 use super::{libsql_error, serde_json_error};
22
23 #[test]
24 fn maps_libsql_error_to_backend() -> Result<(), Box<dyn std::error::Error>> {
25 let error = libsql::Error::ConnectionFailed(String::from("database unavailable"));
26 let mapped = libsql_error(&error);
27
28 match mapped {
29 StoreError::Backend(message) => {
30 assert!(message.contains("database unavailable"));
31 }
32 other => return Err(format!("expected backend error, got {other:?}").into()),
33 }
34
35 Ok(())
36 }
37
38 #[test]
39 fn maps_serde_json_error_to_serialization() -> Result<(), Box<dyn std::error::Error>> {
40 let error = serde_json::from_str::<serde_json::Value>("{")
41 .map(|_| ())
42 .map_err(|e| serde_json_error(&e))
43 .err();
44
45 match error {
46 Some(StoreError::Serialization(message)) => {
47 assert!(message.contains("EOF") || message.contains("object"));
48 }
49 Some(other) => {
50 return Err(format!("expected serialization error, got {other:?}").into());
51 }
52 None => return Err("expected serde_json parsing to fail".into()),
53 }
54
55 Ok(())
56 }
57}