This Bencode implementation in Go is distinct in its approach to encoding and decoding data. It utilizes Go struct tags, allowing developers to define objects for serialization and deserialization in a manner akin to JSON. This feature enhances the ease of use and integration with Go's native data structures, providing a seamless and efficient way to work with Bencode data.
- Struct Tag-Based Serialization: Encode and decode Bencode data using Go struct tags, offering a familiar and intuitive approach similar to JSON serialization.
- Support for Complex Types: Effortlessly handle complex data structures, including nested structs and slices, ensuring versatility in data representation.
- Streamlined Integration: Designed to align naturally with Go's standard practices, making it easy to incorporate into Go projects.
- Full Bencode Type Support: Efficiently manage all standard Bencode types like strings, integers, lists, and dictionaries.
Go (Version 1.21 or higher)
go get github.com/extintor/bencode
package main
import (
"fmt"
"github.com/extintor/bencode"
)
func main() {
type Profile struct {
Name string `bencode:"name"`
Age uint64 `bencode:"age"`
Hobbies []string `bencode:"hobbies"`
}
type User struct {
Username string `bencode:"username"`
Email string `bencode:"email"`
Profile Profile `bencode:"profile"`
}
input := []byte("d5:email16:john@example.com7:profiled3:agei42e7:hobbiesl6:guitar6:travel7:cookinge4:name4:Johne8:username7:johndoee")
var user User
err := bencode.Decode(input, &user)
if err != nil {
panic(err)
}
fmt.Printf("Decoded User: %+v\n", user)
}
package main
import (
"fmt"
"github.com/extintor/bencode"
)
func main() {
type Profile struct {
Name string `bencode:"name"`
Age uint64 `bencode:"age"`
Hobbies []string `bencode:"hobbies"`
}
type User struct {
Username string `bencode:"username"`
Email string `bencode:"email"`
Profile Profile `bencode:"profile"`
}
user := User{
Username: "johndoe",
Email: "john@example.com",
Profile: Profile{
Name: "John Doe",
Age: 30,
Hobbies: []string{"guitar", "travel", "cooking"},
},
}
encodedData, err := bencode.Encode(&user)
if err != nil {
panic(err)
}
fmt.Printf("Encoded Data: %s\n", encodedData)
}
Contributions are welcome!
This project is licensed under the MIT License - see the LICENSE file for details.