sqlite_compressions/
lib.rs

1#![cfg_attr(feature = "default", doc = include_str!("../README.md"))]
2//
3// Unsafe code is required for cdylib, so only use it for this crate
4#![forbid(unsafe_code)]
5
6#[cfg(not(any(
7    feature = "brotli",
8    feature = "bsdiff4",
9    feature = "bsdiffraw",
10    feature = "bzip2",
11    feature = "gzip",
12)))]
13compile_error!(
14    "At least one of these features must be enabled: gzip, brotli, bzip2, bsdiff4, bsdiffraw"
15);
16
17/// Re-export of the [`rusqlite`](https://crates.io/crates/rusqlite) crate to avoid version conflicts.
18pub use rusqlite;
19
20use crate::rusqlite::{Connection, Result};
21
22#[cfg(any(feature = "bsdiff4", feature = "bsdiffraw"))]
23mod common_diff;
24#[cfg(any(feature = "bsdiff4", feature = "bsdiffraw"))]
25pub use crate::common_diff::Differ;
26
27#[cfg(any(feature = "brotli", feature = "bzip2", feature = "gzip"))]
28mod common;
29#[cfg(any(feature = "brotli", feature = "bzip2", feature = "gzip"))]
30pub use crate::common::Encoder;
31
32#[cfg(feature = "bsdiff4")]
33mod bsdiff4;
34#[cfg(feature = "bsdiff4")]
35pub use crate::bsdiff4::{register_bsdiff4_functions, Bsdiff4Differ};
36
37#[cfg(feature = "bsdiffraw")]
38mod bsdiffraw;
39#[cfg(feature = "bsdiffraw")]
40pub use crate::bsdiffraw::{register_bsdiffraw_functions, BsdiffRawDiffer};
41
42#[cfg(feature = "brotli")]
43mod brotli;
44#[cfg(feature = "brotli")]
45pub use crate::brotli::{register_brotli_functions, BrotliEncoder};
46
47#[cfg(feature = "bzip2")]
48mod bzip2;
49#[cfg(feature = "bzip2")]
50pub use crate::bzip2::{register_bzip2_functions, Bzip2Encoder};
51
52#[cfg(feature = "gzip")]
53mod gzip;
54#[cfg(feature = "gzip")]
55pub use crate::gzip::{register_gzip_functions, GzipEncoder};
56
57/// Register all compression functions for the given `SQLite` connection.
58/// This is a convenience function that calls all the `register_*_functions` functions.
59/// Features must be enabled for the corresponding functions to be registered.
60///
61/// # Example
62///
63/// ```
64/// # use sqlite_compressions::rusqlite::{Connection, Result};
65/// # use sqlite_compressions::register_compression_functions;
66/// # fn main() -> Result<()> {
67/// let db = Connection::open_in_memory()?;
68/// register_compression_functions(&db)?;
69/// # if cfg!(feature = "gzip") {
70/// let result: String = db.query_row("SELECT hex(gzip('hello'))", [], |r| r.get(0))?;
71/// assert_eq!(&result, "1F8B08000000000000FFCB48CDC9C9070086A6103605000000");
72/// let result: String = db.query_row("SELECT hex(gzip_decode(gzip(x'0123')))", [], |r| r.get(0))?;
73/// assert_eq!(&result, "0123");
74/// let result: bool = db.query_row("SELECT gzip_test(gzip(x'0123'))", [], |r| r.get(0))?;
75/// assert_eq!(result, true);
76/// # }
77/// # if cfg!(feature = "brotli") {
78/// let result: String = db.query_row("SELECT hex(brotli('hello'))", [], |r| r.get(0))?;
79/// assert_eq!(&result, "0B028068656C6C6F03");
80/// # }
81/// # Ok(())
82/// # }
83/// ```
84pub fn register_compression_functions(conn: &Connection) -> Result<()> {
85    #[cfg(feature = "gzip")]
86    register_gzip_functions(conn)?;
87    #[cfg(feature = "brotli")]
88    register_brotli_functions(conn)?;
89    #[cfg(feature = "bzip2")]
90    register_bzip2_functions(conn)?;
91    #[cfg(feature = "bsdiff4")]
92    register_bsdiff4_functions(conn)?;
93    #[cfg(feature = "bsdiffraw")]
94    register_bsdiffraw_functions(conn)?;
95
96    Ok(())
97}