# hslua-module-zip
[![GitHub CI][CI badge]](https://github.com/hslua/hslua/actions)
[![Hackage][Hackage badge]](https://hackage.haskell.org/package/hslua-module-zip)
[![Stackage Lts][Stackage Lts badge]](http://stackage.org/lts/package/hslua-module-zip)
[![Stackage Nightly][Stackage Nightly badge]](http://stackage.org/nightly/package/hslua-module-zip)
[![MIT license][License badge]](LICENSE)
[CI badge]: https://img.shields.io/github/workflow/status/hslua/hslua/CI.svg?logo=github
[Hackage badge]: https://img.shields.io/hackage/v/hslua-module-zip.svg?logo=haskell
[Stackage Lts badge]: http://stackage.org/package/hslua-module-zip/badge/lts
[Stackage Nightly badge]: http://stackage.org/package/hslua-module-zip/badge/nightly
[License badge]: https://img.shields.io/badge/license-MIT-blue.svg
Lua module to work with file zips.
## zip
Functions to create, modify, and extract files from zip archives.
The module can be called as a function, in which case it behaves
like the `zip` function described below.
Zip options are optional; when defined, they must be a table with
any of the following keys:
- `recursive`: recurse directories when set to `true`;
- `verbose`: print info messages to stdout;
- `destination`: the value specifies the directory in which to extract;
- `location`: value is used as path name, defining where files
are placed.
- `preserve_symlinks`: Boolean value, controlling whether
symbolic links are preserved as such. This option is ignored
on Windows.
## Functions
### Archive
`Archive (bytestring_or_entries)`
Reads an *Archive* structure from a raw zip archive or a list of
Entry items; throws an error if the given string cannot be decoded
into an archive.
*Since: 1.0.0*
Parameters:
bytestring_or_entries
: (string|{ZipEntry,...})
Returns:
- (ZipArchive)
### Entry
`Entry (path, contents[, modtime])`
Generates a zip Entry from a filepath, the file's uncompressed
content, and the file's modification time.
*Since: 1.0.0*
Parameters:
path
: file path in archive (string)
contents
: uncompressed contents (string)
modtime
: modification time (integer)
### read_entry
`read_entry (filepath, opts)`
Generates a ZipEntry from a file or directory.
*Since: 1.0.0*
Parameters:
filepath
: (string)
opts
: zip options (table)
Returns:
- a new zip archive entry (ZipEntry)
### zip
`zip (filepaths[, options])`
Package and compress the given files into a new Archive.
*Since: 1.0.0*
Parameters:
filepaths
: list of files from which the archive is created. ({string,...})
options
: zip options (table)
Returns:
- a new archive (ZipArchive)
## Types
### Archive
A zip archive with file entries.
#### Fields
`entries`
: files in this zip archive ({Entry,...})
#### Methods
`extract([opts])`
: Extract all files from this archive, creating directories as
needed. Note that the last-modified time is set correctly only
in POSIX, not in Windows. This function fails if encrypted
entries are present.
Use `archive:extract{destination = 'dir'}` to extract to
subdirectory `dir`.
`bytestring()`
: Returns the raw binary string representation of the archive.
### Entry
File or directory entry in a zip archive.
#### Fields:
`path`
: relative path, using `/` as separator
`modtime`
: modification time (seconds since unix epoch)
#### Methods:
`contents([password])`
: Get the uncompressed contents of a zip entry. If `password` is
given, then that password is used to decrypt the contents. An
error is throws if decrypting fails.