Skip to content
/ binngo Public

Binary serialization. Implements easy to use encoding and decoding of Binn.

License

Notifications You must be signed in to change notification settings

et-nik/binngo

Repository files navigation

BinnGo

Go Reference GitHub go.mod Go version Go Report Card test Code Coverage Scrutinizer Code Quality

Binary serializer. Implements easy to use encoding and decoding of Binn. This package is very similar to the standard go encoder packages like encoding/json. BinnGo uses reflection.

Original C Binn Library: https://github.com/liteserver/binn

Binn Specification: https://github.com/liteserver/binn/blob/master/spec.md

Work In Progress notification

This package in under development. Encoding and decoding complex and nested structures may not work as expected.

Installation

Run the following command to install the package:

go get -u github.com/et-nik/binngo

How To Use

Reading Binn data

package main

import (
	"fmt"
	"github.com/et-nik/binngo"
)

func main() {
	binnBinary := []byte{
		0xE0,                          // [type] list (container)
		23,                            // [size] container total size
		0x02,                          // [count] items
		0xA0,                          // [type] = string
		0x05,                          // [size]
		'h', 'e', 'l', 'l', 'o', 0x00, // [data] (null terminated)
		0xA0,                          // [type] = string
		0x05,                          // [size]
		'w', 'o', 'r', 'l', 'd', 0x00, // [data] (null terminated)
	}
	items := []string{}

	err := binngo.Unmarshal(binnBinary, &items)
	if err != nil {
		fmt.Println("error:", err)
	}

	fmt.Printf("%+v", items)
}

Writing Binn data

package main

import (
	"fmt"
	"io/ioutil"
	"github.com/et-nik/binngo"
)

func main() {
	structure := struct {
		Val1 int64
		Val2 string
	}{
		123,
		"value",
	}

	binnBinary, err := binngo.Marshal(structure)
	if err != nil {
		fmt.Println("error:", err)
	}

	err = ioutil.WriteFile("/path/to/binfile", binnBinary, 0644)
	if err != nil {
		fmt.Println("error:", err)
	}
}

License

This project is licensed under the MIT License - see the LICENSE file for details.

About

Binary serialization. Implements easy to use encoding and decoding of Binn.

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages