2415bc71c6
In addition, this PR attempts to simplify some functions according to the output of `gocyclo -n 15`.
41 lines
1 KiB
Go
41 lines
1 KiB
Go
// Package bencode implements bencoding of data as defined in BEP 3 using
|
|
// type assertion over reflection for performance.
|
|
package bencode
|
|
|
|
import "bytes"
|
|
|
|
// Enforce that Dict implements the Marshaler interface.
|
|
var _ Marshaler = Dict{}
|
|
|
|
// Dict represents a bencode dictionary.
|
|
type Dict map[string]interface{}
|
|
|
|
// NewDict allocates the memory for a Dict.
|
|
func NewDict() Dict {
|
|
return make(Dict)
|
|
}
|
|
|
|
// MarshalBencode implements the Marshaler interface for Dict.
|
|
func (d Dict) MarshalBencode() ([]byte, error) {
|
|
var buf bytes.Buffer
|
|
err := marshalMap(&buf, map[string]interface{}(d))
|
|
return buf.Bytes(), err
|
|
}
|
|
|
|
// Enforce that List implements the Marshaler interface.
|
|
var _ Marshaler = List{}
|
|
|
|
// List represents a bencode list.
|
|
type List []interface{}
|
|
|
|
// MarshalBencode implements the Marshaler interface for List.
|
|
func (l List) MarshalBencode() ([]byte, error) {
|
|
var buf bytes.Buffer
|
|
err := marshalList(&buf, []interface{}(l))
|
|
return buf.Bytes(), err
|
|
}
|
|
|
|
// NewList allocates the memory for a List.
|
|
func NewList() List {
|
|
return make(List, 0)
|
|
}
|