Packages

Gleam-based implementation for handling Bencode data, a format used by the BitTorrent protocol. It includes modules for parsing raw Bencode data into an intermediate representation, encoding various data types into Bencode format, and decoding Bencode data into dynamic types. This repository is i...

Current section

Files

Jump to
glbencode README.md
Raw

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.