# Serde

Built-in library for:

-   serialization & deserialization
-   encoding & decoding
-   compression

#### Example usage

```lua
local fs = require("@lune/fs")
local serde = require("@lune/serde")

-- Parse different file formats into lua tables
local someJson = serde.decode("json", fs.readFile("myFile.json"))
local someToml = serde.decode("toml", fs.readFile("myFile.toml"))
local someYaml = serde.decode("yaml", fs.readFile("myFile.yaml"))

-- Write lua tables to files in different formats
fs.writeFile("myFile.json", serde.encode("json", someJson))
fs.writeFile("myFile.toml", serde.encode("toml", someToml))
fs.writeFile("myFile.yaml", serde.encode("yaml", someYaml))
```

## Functions

### encode

Encodes the given value using the given format.

Currently supported formats:

| Name   | Learn More           |
| :----- | :------------------- |
| `json` | https://www.json.org |
| `yaml` | https://yaml.org     |
| `toml` | https://toml.io      |

#### Parameters

-   `format` The format to use

-   `value` The value to encode

-   `pretty` If the encoded string should be human-readable, including things such as newlines and
    spaces. Only supported for json and toml formats, and defaults to false

#### Returns

-   The encoded string

---

### decode

Decodes the given string using the given format into a lua value.

Currently supported formats:

| Name   | Learn More           |
| :----- | :------------------- |
| `json` | https://www.json.org |
| `yaml` | https://yaml.org     |
| `toml` | https://toml.io      |

#### Parameters

-   `format` The format to use

-   `encoded` The string to decode

#### Returns

-   The decoded lua value

---

### compress

Compresses the given string using the given format.

Currently supported formats:

| Name     | Learn More                        |
| :------- | :-------------------------------- |
| `brotli` | https://github.com/google/brotli  |
| `gzip`   | https://www.gnu.org/software/gzip |
| `lz4`    | https://github.com/lz4/lz4        |
| `zlib`   | https://www.zlib.net              |

#### Parameters

-   `format` The format to use

-   `s` The string to compress

#### Returns

-   The compressed string

---

### decompress

Decompresses the given string using the given format.

Currently supported formats:

| Name     | Learn More                        |
| :------- | :-------------------------------- |
| `brotli` | https://github.com/google/brotli  |
| `gzip`   | https://www.gnu.org/software/gzip |
| `lz4`    | https://github.com/lz4/lz4        |
| `zlib`   | https://www.zlib.net              |

#### Parameters

-   `format` The format to use

-   `s` The string to decompress

#### Returns

-   The decompressed string

---