bencode

package
v0.0.0-...-919abb7 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 12, 2024 License: MPL-2.0 Imports: 13 Imported by: 0

README

Bencode encoding/decoding sub package. Uses similar API design to Go's json package.

Install

go get github.com/james-lawrence/torrent

Usage

package demo

import (
	bencode "github.com/james-lawrence/torrent/bencode"
)

type Message struct {
	Query    string `json:"q,omitempty" bencode:"q,omitempty"`
}

var v Message

func main(){
	// encode
	data, err := bencode.Marshal(v)
	if err != nil {
		log.Fatal(err)
	}
	
	//decode
	err := bencode.Unmarshal(data, &v)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Println(v)
}

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func Marshal

func Marshal(v interface{}) ([]byte, error)

Marshal the value 'v' to the bencode form, return the result as []byte and an error if any.

func MustMarshal

func MustMarshal(v interface{}) []byte

MustMarshal encodes the provided value or panics.

func Unmarshal

func Unmarshal(data []byte, v interface{}) (err error)

Unmarshal the bencode value in the 'data' to a value pointed by the 'v' pointer, return a non-nil error if any.

Types

type Bytes

type Bytes []byte

Bytes effectively a type alias but adds the marshalling functions.

func (Bytes) MarshalBencode

func (me Bytes) MarshalBencode() ([]byte, error)

MarshalBencode bencode encoder for the current bytes

func (*Bytes) UnmarshalBencode

func (me *Bytes) UnmarshalBencode(b []byte) error

UnmarshalBencode bencode decode for the provided bytes

type Decoder

type Decoder struct {

	// Sum of bytes used to Decode values.
	Offset int64
	// contains filtered or unexported fields
}

Decoder for bencode

func NewDecoder

func NewDecoder(r io.Reader) *Decoder

NewDecoder returns a bencode decoder

func (*Decoder) Decode

func (d *Decoder) Decode(v interface{}) (err error)

Decode the provided value.

type Encoder

type Encoder struct {
	// contains filtered or unexported fields
}

Encoder for bencode

func NewEncoder

func NewEncoder(w io.Writer) *Encoder

NewEncoder returns a bencode encoder

func (*Encoder) Encode

func (e *Encoder) Encode(v interface{}) (err error)

Encode the provided value into the encoders writer.

type ErrUnusedTrailingBytes

type ErrUnusedTrailingBytes struct {
	NumUnusedBytes int
}

ErrUnusedTrailingBytes returned when there are extra bytes at the end of the encoded data.

func (ErrUnusedTrailingBytes) Error

func (me ErrUnusedTrailingBytes) Error() string

type MarshalTypeError

type MarshalTypeError struct {
	Type reflect.Type
}

MarshalTypeError in case the marshaler cannot encode a type, it will return this error. Typical example of such type is float32/float64 which has no bencode representation.

func (*MarshalTypeError) Error

func (e *MarshalTypeError) Error() string

type Marshaler

type Marshaler interface {
	MarshalBencode() ([]byte, error)
}

Marshaler any type which implements this interface, will be marshaled using the specified method.

type MarshalerError

type MarshalerError struct {
	Type reflect.Type
	Err  error
}

MarshalerError a non-nil error was returned after calling MarshalBencode on a type which implements the Marshaler interface.

func (*MarshalerError) Error

func (e *MarshalerError) Error() string

type SyntaxError

type SyntaxError struct {
	Offset int64 // location of the error
	What   error // error description
}

SyntaxError malformed bencode input, unmarshaler failed to parse it.

func (*SyntaxError) Error

func (e *SyntaxError) Error() string

type UnmarshalFieldError

type UnmarshalFieldError struct {
	Key   string
	Type  reflect.Type
	Field reflect.StructField
}

UnmarshalFieldError tried to write to an unexported (therefore unwritable) field.

func (*UnmarshalFieldError) Error

func (e *UnmarshalFieldError) Error() string

type UnmarshalInvalidArgError

type UnmarshalInvalidArgError struct {
	Type reflect.Type
}

UnmarshalInvalidArgError argument must be a non-nil value of some pointer type.

func (*UnmarshalInvalidArgError) Error

func (e *UnmarshalInvalidArgError) Error() string

type UnmarshalTypeError

type UnmarshalTypeError struct {
	Value string
	Type  reflect.Type
}

UnmarshalTypeError spotted a value that was not appropriate for a given Go value.

func (*UnmarshalTypeError) Error

func (e *UnmarshalTypeError) Error() string

type Unmarshaler

type Unmarshaler interface {
	UnmarshalBencode([]byte) error
}

Unmarshaler any type which implements this interface, will be unmarshaled using the specified method.

type UnmarshalerError

type UnmarshalerError struct {
	Type reflect.Type
	Err  error
}

UnmarshalerError a non-nil error was returned after calling UnmarshalBencode on a type which implements the Unmarshaler interface.

func (*UnmarshalerError) Error

func (e *UnmarshalerError) Error() string

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL