Files
go-i2p/lib/common/mapping.go

42 lines
947 B
Go

package common
import (
"encoding/binary"
"strings"
)
type Mapping []byte
func (mapping Mapping) ToMap() map[string]string {
gomap := make(map[string]string)
kv_store := string(mapping[2:])
pairs := strings.Split(kv_store, ";")
for _, pair := range pairs {
values := strings.Split(pair, "=")
if len(values) != 2 {
continue
}
gomap[values[0]] = values[1]
}
return gomap
}
func MappingFromMap(gomap map[string]string) Mapping {
kv_store := make([]byte, 0)
for k, v := range gomap {
key_bytes := []byte(k)
key_bytes = append(key_bytes, 0x3d)
value_bytes := []byte(v)
value_bytes = append(value_bytes, 0x3b)
kv_store = append(kv_store, key_bytes...)
kv_store = append(kv_store, value_bytes...)
}
kv_size := uint16(len(kv_store))
var size [2]byte
binary.BigEndian.PutUint16(size[:], kv_size)
mapping := Mapping{}
mapping = append(mapping, size[:]...)
mapping = append(mapping, kv_store...)
return mapping
}