forked from cerc-io/laconicd-deprecated
e90b21bc8e
1. add bond,auction, nameserivce module 2. update to v0.12.2 ethermint version 3. fix the test cases 4. add gql server
145 lines
2.9 KiB
Go
145 lines
2.9 KiB
Go
package helpers
|
|
|
|
import (
|
|
"bytes"
|
|
"encoding/base64"
|
|
"encoding/binary"
|
|
"encoding/gob"
|
|
"encoding/hex"
|
|
"encoding/json"
|
|
set "github.com/deckarep/golang-set"
|
|
cbor "github.com/ipfs/go-ipld-cbor"
|
|
mh "github.com/multiformats/go-multihash"
|
|
|
|
"sort"
|
|
)
|
|
|
|
func StringToBytes(val string) []byte {
|
|
return []byte(val)
|
|
}
|
|
|
|
func BytesToString(val []byte) string {
|
|
return string(val)
|
|
}
|
|
|
|
func StrArrToBytesArr(val []string) ([]byte, error) {
|
|
buffer := &bytes.Buffer{}
|
|
|
|
err := gob.NewEncoder(buffer).Encode(val)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return buffer.Bytes(), nil
|
|
}
|
|
|
|
func BytesArrToStringArr(val []byte) ([]string, error) {
|
|
buffer := bytes.NewReader(val)
|
|
var v []string
|
|
err := gob.NewDecoder(buffer).Decode(&v)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return v, nil
|
|
}
|
|
|
|
func Int64ToBytes(num int64) []byte {
|
|
buf := new(bytes.Buffer)
|
|
binary.Write(buf, binary.BigEndian, num)
|
|
return buf.Bytes()
|
|
}
|
|
|
|
// MarshalMapToJSONBytes converts map[string]interface{} to bytes.
|
|
func MarshalMapToJSONBytes(val map[string]interface{}) (bytes []byte) {
|
|
bytes, err := json.Marshal(val)
|
|
if err != nil {
|
|
panic("Marshal error.")
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
// UnMarshalMapFromJSONBytes converts bytes to map[string]interface{}.
|
|
func UnMarshalMapFromJSONBytes(bytes []byte) map[string]interface{} {
|
|
var val map[string]interface{}
|
|
err := json.Unmarshal(bytes, &val)
|
|
|
|
if err != nil {
|
|
panic("Marshal error.")
|
|
}
|
|
|
|
return val
|
|
}
|
|
|
|
// GetCid gets the content ID.
|
|
func GetCid(content []byte) (string, error) {
|
|
node, err := cbor.FromJSON(bytes.NewReader(content), mh.SHA2_256, -1)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
|
|
return node.Cid().String(), nil
|
|
}
|
|
|
|
// BytesToBase64 encodes a byte array as a base64 string.
|
|
func BytesToBase64(bytes []byte) string {
|
|
return base64.StdEncoding.EncodeToString(bytes)
|
|
}
|
|
|
|
// BytesFromBase64 decodes a byte array from a base64 string.
|
|
func BytesFromBase64(str string) []byte {
|
|
bytes, err := base64.StdEncoding.DecodeString(str)
|
|
if err != nil {
|
|
panic("Error decoding string to bytes.")
|
|
}
|
|
|
|
return bytes
|
|
}
|
|
|
|
// BytesToHex encodes a byte array as a hex string.
|
|
func BytesToHex(bytes []byte) string {
|
|
return hex.EncodeToString(bytes)
|
|
}
|
|
|
|
// BytesFromHex decodes a byte array from a hex string.
|
|
func BytesFromHex(str string) []byte {
|
|
bytes, err := hex.DecodeString(str)
|
|
if err != nil {
|
|
panic("Error decoding hex to bytes.")
|
|
}
|
|
|
|
return bytes
|
|
}
|
|
|
|
func SetToSlice(set set.Set) []string {
|
|
names := []string{}
|
|
|
|
for name := range set.Iter() {
|
|
if name, ok := name.(string); ok && name != "" {
|
|
names = append(names, name)
|
|
}
|
|
}
|
|
|
|
sort.SliceStable(names, func(i, j int) bool { return names[i] < names[j] })
|
|
|
|
return names
|
|
}
|
|
|
|
func SliceToSet(names []string) set.Set {
|
|
set := set.NewThreadUnsafeSet()
|
|
|
|
for _, name := range names {
|
|
if name != "" {
|
|
set.Add(name)
|
|
}
|
|
}
|
|
|
|
return set
|
|
}
|
|
|
|
func AppendUnique(list []string, element string) []string {
|
|
set := SliceToSet(list)
|
|
set.Add(element)
|
|
|
|
return SetToSlice(set)
|
|
}
|