1use cyfs_base::{BuckyError, BuckyErrorCode};
2use sfo_sql::ErrorMap;
3
4#[cfg(feature = "stack")]
5pub mod shared_object_stack_ex;
6
7pub mod json_object;
8pub mod error_util;
9pub mod http_util;
10
11
12#[derive(Clone)]
13pub struct SqlErrorToBuckyError;
14
15impl ErrorMap for SqlErrorToBuckyError {
16 type OutError = BuckyError;
17 type InError = sfo_sql::SqlError;
18
19 fn map(e: sfo_sql::SqlError, msg: &str) -> BuckyError {
20 match e {
21 sfo_sql::SqlError::RowNotFound => {
22 BuckyError::new(BuckyErrorCode::NotFound, "not found")
24 },
25 sfo_sql::SqlError::Database(ref err) => {
26 let msg = format!("sql error: {:?} info:{}", e, msg);
27 if cfg!(test) {
28 println!("{}", msg);
29 } else {
30 log::error!("SqlErrorToBuckyError:{}", msg);
31 }
32
33 if let Some(code) = err.code() {
34 if code.to_string().as_str() == "23000" {
35 return BuckyError::new(BuckyErrorCode::AlreadyExists, "already exists");
36 }
37 }
38 BuckyError::new(BuckyErrorCode::SqliteError, msg)
39 }
40 _ => {
41 let msg = format!("sql error: {:?} info:{}", e, msg);
42 if cfg!(test) {
43 println!("{}", msg);
44 } else {
45 log::error!("SqlErrorToBuckyError:{}", msg);
46 }
47 BuckyError::new(BuckyErrorCode::SqliteError, "")
48 }
49 }
50 }
51}