1use std::io;
2
3use rusqlite::Statement;
4
5use crate::core::TarEntry;
6
7pub struct Stmt<'a>(pub Statement<'a>);
8
9impl<'a> Stmt<'a> {
10 pub fn upsert(&mut self, ent: &TarEntry) -> Result<usize, io::Error> {
11 let name: &str = &ent.name;
12 let mode: u32 = ent.mode;
13 let modified_unixtime: u64 = ent.modified_unixtime;
14 let mtime: i64 = modified_unixtime.try_into().map_err(io::Error::other)?;
15 let size: u64 = ent.data.len() as u64;
16 let sz: i64 = size.try_into().map_err(io::Error::other)?;
17 let data: &[u8] = &ent.data;
18 self.0
19 .execute(rusqlite::params![name, mode, mtime, sz, data,])
20 .map_err(io::Error::other)
21 }
22}