atuin_common/
lib.rs

1#![forbid(unsafe_code)]
2
3/// Defines a new UUID type wrapper
4macro_rules! new_uuid {
5    ($name:ident) => {
6        #[derive(
7            Debug,
8            Copy,
9            Clone,
10            PartialEq,
11            Eq,
12            Hash,
13            PartialOrd,
14            Ord,
15            serde::Serialize,
16            serde::Deserialize,
17        )]
18        #[serde(transparent)]
19        pub struct $name(pub Uuid);
20
21        impl<DB: sqlx::Database> sqlx::Type<DB> for $name
22        where
23            Uuid: sqlx::Type<DB>,
24        {
25            fn type_info() -> <DB as sqlx::Database>::TypeInfo {
26                Uuid::type_info()
27            }
28        }
29
30        impl<'r, DB: sqlx::Database> sqlx::Decode<'r, DB> for $name
31        where
32            Uuid: sqlx::Decode<'r, DB>,
33        {
34            fn decode(
35                value: DB::ValueRef<'r>,
36            ) -> std::result::Result<Self, sqlx::error::BoxDynError> {
37                Uuid::decode(value).map(Self)
38            }
39        }
40
41        impl<'q, DB: sqlx::Database> sqlx::Encode<'q, DB> for $name
42        where
43            Uuid: sqlx::Encode<'q, DB>,
44        {
45            fn encode_by_ref(
46                &self,
47                buf: &mut DB::ArgumentBuffer<'q>,
48            ) -> Result<sqlx::encode::IsNull, Box<(dyn std::error::Error + Send + Sync + 'static)>>
49            {
50                self.0.encode_by_ref(buf)
51            }
52        }
53    };
54}
55
56pub mod api;
57pub mod record;
58pub mod shell;
59pub mod utils;