pub(crate) mod comments;
mod issues;
mod pages;
mod projects;
mod resources;
mod search;
pub(crate) mod users;
pub(crate) fn unescape_text(s: &str) -> String {
s.replace("\\n", "\n").replace("\\t", "\t")
}
pub(crate) fn savepoint<F, T>(
conn: &rusqlite::Connection,
name: &str,
f: F,
) -> Result<T, crate::error::LificError>
where
F: FnOnce() -> Result<T, crate::error::LificError>,
{
conn.execute_batch(&format!("SAVEPOINT {name}"))?;
match f() {
Ok(val) => {
conn.execute_batch(&format!("RELEASE {name}"))?;
Ok(val)
}
Err(e) => {
let _ = conn.execute_batch(&format!("ROLLBACK TO {name}"));
let _ = conn.execute_batch(&format!("RELEASE {name}"));
Err(e)
}
}
}
pub use issues::*;
pub use pages::*;
pub use projects::*;
pub use resources::*;
pub use search::*;