aboutsummaryrefslogtreecommitdiffstats
path: root/crates/server/src/database/db/wrappers.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/server/src/database/db/wrappers.rs')
-rw-r--r--crates/server/src/database/db/wrappers.rs32
1 files changed, 32 insertions, 0 deletions
diff --git a/crates/server/src/database/db/wrappers.rs b/crates/server/src/database/db/wrappers.rs
new file mode 100644
index 00000000..0315e331
--- /dev/null
+++ b/crates/server/src/database/db/wrappers.rs
@@ -0,0 +1,32 @@
+use crate::atuin_common::record::{EncryptedData, Host, Record};
+use sqlx::{Row, postgres::PgRow};
+
+pub(crate) struct DbRecord(pub Record<EncryptedData>);
+
+impl<'a> ::sqlx::FromRow<'a, PgRow> for DbRecord {
+ fn from_row(row: &'a PgRow) -> ::sqlx::Result<Self> {
+ let timestamp: i64 = row.try_get("timestamp")?;
+ let idx: i64 = row.try_get("idx")?;
+
+ let data = EncryptedData {
+ data: row.try_get("data")?,
+ content_encryption_key: row.try_get("cek")?,
+ };
+
+ Ok(Self(Record {
+ id: row.try_get("client_id")?,
+ host: Host::new(row.try_get("host")?),
+ idx: idx as u64,
+ timestamp: timestamp as u64,
+ version: row.try_get("version")?,
+ tag: row.try_get("tag")?,
+ data,
+ }))
+ }
+}
+
+impl From<DbRecord> for Record<EncryptedData> {
+ fn from(other: DbRecord) -> Self {
+ other.0
+ }
+}