lusl

Crates.iolusl
lib.rslusl
version2.1.0
sourcesrc
created_at2022-11-15 20:14:21.557946
updated_at2023-02-04 09:32:36.392807
descriptionLossless Uncompressed Serializer Library
homepage
repositoryhttps://github.com/altair823/LUSL
max_upload_size
id715928
size5,020,974
Kim Tae-hyeon (altair823)

documentation

README

Lossless Uncompressed Serializer Library

Documentation

lusl is a library that serializes a directory containing multiple files into a single file and also deserializes it, like a tarball.

Features

  • Serialize a directory that contains multiple files.
  • Deserialize serialized file and restore to a directory.
  • Save and verify MD5 checksum of files for data integrity.
  • Provides a way to encrypt and compress the serialized file.

The encryption is done using XChaCha20-Poly1305 and the compression is done using zlib.

File Structure

See documents.

Usage

Serializing and deserializing without encrypting or compressing.

use lusl::{Serializer, Deserializer, SerializeOption};
use std::path::PathBuf;

// Serialize a directory into a file.
let original = PathBuf::from("tests");
let result = PathBuf::from("serialized.bin");
let mut serializer = Serializer::new(&original, &result).unwrap();
serializer.serialize().unwrap();

// Deserialize the file into a directory.
let restored = PathBuf::from("deserialized_dir");
let mut deserializer = Deserializer::new(&result, &restored).unwrap();
deserializer.deserialize().unwrap();

assert!(&result.is_file());
assert!(&restored.is_dir());

Serializing and deserializing with encrypting and compressing.

use lusl::{Serializer, Deserializer, SerializeOption};
use std::path::PathBuf;

// Serialize a directory into a file.
let original = PathBuf::from("tests");
let result = PathBuf::from("serialized.bin");
let mut serializer = Serializer::new(&original, &result).unwrap();

// Set the encryption key and compression option.
serializer.set_option(SerializeOption::new().to_encrypt("password").to_compress(true));
serializer.serialize().unwrap();

// Deserialize the file into a directory.
let restored = PathBuf::from("deserialized_dir");
let mut deserializer = Deserializer::new(&result, &restored).unwrap();

// Set the encryption key and compression option.
deserializer.set_option(SerializeOption::new().to_encrypt("password").to_compress(true));
deserializer.deserialize().unwrap();

assert!(&result.is_file());
assert!(&restored.is_dir());

Test

If you want to run test codes(like cargo test), must not run parallel test.

It cause multiple error because all test codes were written without assuming parallel tests.

To run test, run code below.

cargo test -- --test-threads=1
Commit count: 55

cargo fmt