Typed, in-memory ZIP archive library for MoonBit (deflate via moonbit-community/flate)
Dependencies
///|
test {
// build
let archive = @zipc.Archive::empty()
archive.add(
@zipc.Member::make(
"readme.txt",
File(@zipc.File::stored_from_bytes(b"hello")),
),
)
|> ignore
archive.add(
@zipc.Member::make(
"src/data.bin",
File(
@zipc.File::deflate_from_bytes(b"compress me, compress me, compress me"),
),
mode=0o644,
),
)
|> ignore
let bytes = archive.to_bytes()
// parse and extract
let parsed = @zipc.Archive::from_bytes(bytes)
guard parsed.find("readme.txt").unwrap().kind() is File(f)
assert_eq(f.to_bytes(), b"hello")
}pub suberror ZipError {
ZipError(String)
}test {
let archive = @zipc.Archive::empty()
archive.add(
@zipc.Member::make("hi.txt", File(@zipc.File::stored_from_bytes(b"hi"))),
)
|> ignore
let bytes = archive.to_bytes()
let parsed = @zipc.Archive::from_bytes(bytes)
guard parsed.find("hi.txt").unwrap().kind() is File(f)
assert_eq(f.to_bytes(), b"hi")
}pub struct File {
compression : Compression
data : Bytes
decompressed_size : Int
decompressed_crc32 : Int
}test {
let file = @zipc.File::deflate_from_bytes(b"aaaaaaaaaaaaaaaaaaaaaaaaaaaa")
inspect(file.compression(), content="Deflate")
assert_eq(file.to_bytes(), b"aaaaaaaaaaaaaaaaaaaaaaaaaaaa")
}fn Member::make(path : String, kind : MemberKind, mode? : Int, mtime? : Int) -> Member raise ZipErrorfn bytes_has_magic(data : Bytes) -> Boollet dos_epoch : IntTyped, in-memory ZIP archive library for MoonBit (deflate via moonbit-community/flate)
Dependencies