GNU Guile bindings to the zstd compression library.

Timothy Sample cdadd488da Test all compressor levels. 2 years ago
build-aux f853c8eb81 Add missing 'test-driver.scm' file. 3 years ago
tests cdadd488da Test all compressor levels. 2 years ago
zstd 7fa9af373c config.scm.in: check for darwin shared library 3 years ago
.dir-locals.el 505002fa2d Add tests. 3 years ago
.gitignore 505002fa2d Add tests. 3 years ago
.guix-authorizations afe022f7a1 Initial commit. 3 years ago
AUTHORS e3e7304772 Add build infrastructure. 3 years ago
COPYING d9e6af2d25 Add README and COPYING. 3 years ago
ChangeLog e3e7304772 Add build infrastructure. 3 years ago
Makefile.am c8d804f389 maint: Add Guix package definition. 3 years ago
NEWS e3e7304772 Add build infrastructure. 3 years ago
README 0d830f53e2 README: Tweak. 3 years ago
configure.ac 9b197a1304 maint: Set version to 0.1.0. 3 years ago
guix.scm c8d804f389 maint: Add Guix package definition. 3 years ago
pre-inst-env.in e3e7304772 Add build infrastructure. 3 years ago
zstd.scm 8bd44c1db7 Properly handle truncated input during decompression. 3 years ago

README

#+TITLE: Guile-zstd: GNU Guile bindings to the zstd compression library

This directory contains bindings to the zstd compression library for
GNU Guile 3.0, 2.2, and 2.0:

https://facebook.github.io/zstd

Zstd (or “zstandard”) offers relatively high compression ratios
(typically better than gzip, not as good as lzip or xz) and a high
decompression throughput (noticeably higher than lzip or gzip).

These bindings provide a high-level port interface for in-process
compression and decompression. Here’s how you would compress a file and
store its result on disk:

#+begin_src scheme
(use-modules (zstd)
(rnrs io ports))

;; Create a compressed archive.
(call-with-output-file "compressed.zst"
(lambda (port)
(call-with-zstd-output-port port
(lambda (port)
(define data
;; Read the input file in memory.
(call-with-input-file "input-file.txt"
get-bytevector-all))

;; Write data to PORT.
(put-bytevector port data)))))
#+end_src

Decompression works similarly:

#+begin_src scheme
(call-with-input-file "compressed.zst"
(lambda (port)
(call-with-zstd-input-port port
(lambda (port)
;; Read decompressed data from PORT.
...))))
#+end_src

* Installing

With GNU Guix, you can install Guile-zstd straight of this source tree
by running:

#+begin_src sh
guix package -f guix.scm
#+end_src

See the =INSTALL= file for instructions on how to build from source
manually.

* Hacking

Using GNU Guix, you can enter a development environment by running:

#+begin_src sh
guix environment -CP -l guix.scm
#+end_src

You can authenticate the code in this repository by running:

#+begin_src sh
guix git authenticate \
afe022f7a1de5517dfeae66705dc21d94f4d2b0a \
3CE464558A84FDC69DB40CFB090B11993D9AEBB5
#+end_src

The command silently exits with zero on success, and errors out
otherwise. We recommend invoking it from ‘.git/hooks/pre-push’.

* Reporting Bugs

Please report bugs to .


Local Variables:
mode: org
ispell-local-dictionary: "american"
End: