2020-02-10 05:19:39 +01:00
|
|
|
// Copyright: Ankitects Pty Ltd and contributors
|
|
|
|
// License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
|
|
|
|
|
|
|
|
pub type ObjID = i64;
|
2020-03-26 04:06:02 +01:00
|
|
|
|
2020-03-26 04:50:20 +01:00
|
|
|
#[macro_export]
|
|
|
|
macro_rules! define_newtype {
|
|
|
|
( $name:ident, $type:ident ) => {
|
|
|
|
#[repr(transparent)]
|
|
|
|
#[derive(Debug, Clone, Copy)]
|
|
|
|
pub struct $name(pub $type);
|
|
|
|
|
|
|
|
impl rusqlite::types::FromSql for $name {
|
|
|
|
fn column_result(
|
|
|
|
value: rusqlite::types::ValueRef<'_>,
|
|
|
|
) -> std::result::Result<Self, rusqlite::types::FromSqlError> {
|
|
|
|
if let rusqlite::types::ValueRef::Integer(i) = value {
|
|
|
|
Ok(Self(i as $type))
|
|
|
|
} else {
|
|
|
|
Err(rusqlite::types::FromSqlError::InvalidType)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
impl rusqlite::ToSql for $name {
|
|
|
|
fn to_sql(&self) -> ::rusqlite::Result<rusqlite::types::ToSqlOutput<'_>> {
|
|
|
|
Ok(rusqlite::types::ToSqlOutput::Owned(
|
|
|
|
rusqlite::types::Value::Integer(self.0 as i64),
|
|
|
|
))
|
|
|
|
}
|
|
|
|
}
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
define_newtype!(Usn, i32);
|