README.md


# GLBEncode

GLBEncode is a Gleam library for encoding and decoding Bencode data. Bencode is a simple encoding format used by the BitTorrent protocol for storing and transmitting loosely structured data.

## Features

- **Parsing**: Convert Bencode data into an intermediate representation.
- **Encoding**: Convert the intermediate representation back into Bencode format.
- **Decoding**: Convert the intermediate representation into dynamic Gleam types for further processing.

## Installation

To use GLBEncode in your Gleam project, add it to your `gleam.toml` dependencies:

```toml
[dependencies]
glbencode = "1.0.0"
```

## Usage

### Parsing Bencode Data

You can parse Bencode data from a string or a byte array:

```gleam
import glbencode
import gleam/result.{Ok, Error}

let bencode_string = "d3:cow3:moo4:spam4:eggse"
let parsed = glbencode.parse(bencode_string)

case parsed {
  Ok(value) -> // Handle the parsed value
  Error(error) -> // Handle the error
}
```

### Encoding Bencode Data

You can encode data into Bencode format:

```gleam
import glbencode/encode

let encoder = encode.new()
let encoder = encode.dictionary(encoder, fn(_) {
  dict.from_list([#("cow", encode.string_value("moo")), #("spam", encode.string_value("eggs"))])
})
let encoded = encode.encode(encoder)

case encoded {
  Ok(bytes) -> // Handle the encoded bytes
  Error(error) -> // Handle the error
}
```

### Decoding Bencode Data

You can decode Bencode data into dynamic Gleam types:

```gleam
import glbencode
import gleam/dynamic/decode as dyn_decoder

let bencode_string = "d3:cow3:moo4:spam4:eggse"
let parsed = glbencode.parse(bencode_string)

case parsed {
  Ok(value) -> {
    let decoder = dyn_decoder.string()
    let decoded = glbencode.decode(value, decoder)
    // Handle the decoded value
  }
  Error(error) -> // Handle the error
}
```


## Contributing

Contributions are welcome! Please open an issue or submit a pull request on GitHub.

## License

This project is licensed under the MIT License.