json_packer/
lib.rs

1mod error;
2mod base64util;
3mod types;
4mod bitstream;
5mod varint;
6mod header;
7mod dict;
8mod huffman;
9mod encode;
10mod decode;
11mod pool;
12
13pub use error::Error;
14pub use base64util::{encode_base64, decode_base64};
15pub use dict::{collect_keys, write_dictionary, read_dictionary};
16pub use huffman::HuffmanCodec;
17pub use pool::{StringPool, PoolConfig};
18pub use encode::CompressOptions;
19
20#[doc(hidden)]
21pub use header::{VERSION_V1, VERSION_V2};
22
23#[doc(hidden)]
24pub mod test_expose {
25    pub use crate::bitstream::{BitReader, BitWriter};
26    pub use crate::varint::{read_sleb128, read_uleb128, write_sleb128, write_uleb128};
27    pub use crate::header::{read_header, write_header, MAGIC, VERSION_V1, VERSION_V2};
28    pub use crate::dict::{collect_keys, read_dictionary, write_dictionary};
29    pub use crate::types::tag;
30    pub use crate::pool::{collect_string_pool, write_string_pool};
31    pub use crate::encode::{compress_with_options, CompressOptions};
32}
33
34
35/// 压缩 JSON 到字节数组(无状态,按调用传入选项)
36pub fn compress_to_bytes(value: &serde_json::Value, opts: &CompressOptions) -> Result<Vec<u8>, Error> {
37    encode::compress_with_options(value, opts)
38}
39
40/// 压缩 JSON 到 Base64 字符串(无状态,按调用传入选项)
41pub fn compress_to_base64(value: &serde_json::Value, opts: &CompressOptions) -> Result<String, Error> {
42    let bytes = compress_to_bytes(value, opts)?;
43    Ok(encode_base64(&bytes))
44}
45
46/// 从字节数组解压为 JSON
47pub fn decompress_from_bytes(bytes: &[u8]) -> Result<serde_json::Value, Error> { decode::decompress_from_bytes(bytes) }
48
49/// 从 Base64 字符串解压为 JSON
50pub fn decompress_from_base64(s: &str) -> Result<serde_json::Value, Error> {
51    let bytes = decode_base64(s)?;
52    decompress_from_bytes(&bytes)
53}