good morning!!!!

Skip to content
Snippets Groups Projects
Commit 79eaa6f2 authored by Jeffrey Wilcke's avatar Jeffrey Wilcke
Browse files

Removed old serialization

parent 34d62c38
Branches
Tags
No related merge requests found
package main
import (
"math"
"bytes"
)
func ToBinary(x int, bytes int) string {
if bytes == 0 {
return ""
} else {
return ToBinary(int(x / 256), bytes - 1) + string(x % 256)
}
}
func NumToVarInt(x int) string {
if x < 253 {
return string(x)
} else if x < int(math.Pow(2,16)) {
return string(253) + ToBinary(x, 2)
} else if x < int(math.Pow(2,32)) {
return string(253) + ToBinary(x, 4)
} else {
return string(253) + ToBinary(x, 8)
}
}
func RlpEncode(object interface{}) string {
if str, ok := object.(string); ok {
return "\x00" + NumToVarInt(len(str)) + str
} else if num, ok := object.(uint32); ok {
return RlpEncode(Uitoa(num))
} else if byt, ok := object.([]byte); ok {
return RlpEncode(string(byt))
} else if slice, ok := object.([]interface{}); ok {
var buffer bytes.Buffer
for _, val := range slice {
if v, ok := val.(string); ok {
buffer.WriteString(RlpEncode(v))
} else {
buffer.WriteString(RlpEncode(val))
}
}
return "\x01" + RlpEncode(len(buffer.String())) + buffer.String()
} else if slice, ok := object.([]string); ok {
// FIXME this isn't dry. Fix this
var buffer bytes.Buffer
for _, val := range slice {
buffer.WriteString(RlpEncode(val))
}
return "\x01" + RlpEncode(len(buffer.String())) + buffer.String()
}
return ""
}
type RlpSerializer interface {
MarshalRlp() []byte
UnmarshalRlp([]byte)
}
package main
import (
"testing"
"fmt"
)
func TestRlpEncode(t *testing.T) {
strRes := "\x00\x03dog"
str := RlpEncode("dog")
if str != strRes {
t.Error(fmt.Sprintf("Expected %q, got %q", strRes, str))
}
sliceRes := "\x01\x00\x03dog\x00\x03god\x00\x03cat"
slice := RlpEncode([]string{"dog", "god", "cat"})
if slice != sliceRes {
t.Error(fmt.Sprintf("Expected %q, got %q", sliceRes, slice))
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment