63
vendor/github.com/status-im/status-go/account/json/utils.go
generated
vendored
Normal file
63
vendor/github.com/status-im/status-go/account/json/utils.go
generated
vendored
Normal file
@@ -0,0 +1,63 @@
|
||||
package json
|
||||
|
||||
import (
|
||||
"reflect"
|
||||
|
||||
"github.com/status-im/status-go/api/multiformat"
|
||||
"github.com/status-im/status-go/protocol/identity/emojihash"
|
||||
)
|
||||
|
||||
type PublicKeyData struct {
|
||||
CompressedKey string `json:"compressedKey"`
|
||||
EmojiHash []string `json:"emojiHash"`
|
||||
}
|
||||
|
||||
func getPubKeyData(publicKey string) (*PublicKeyData, error) {
|
||||
compressedKey, err := multiformat.SerializeLegacyKey(publicKey)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
emojiHash, err := emojihash.GenerateFor(publicKey)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &PublicKeyData{compressedKey, emojiHash}, nil
|
||||
|
||||
}
|
||||
|
||||
func ExtendStructWithPubKeyData(publicKey string, item any) (any, error) {
|
||||
// If the public key is empty, do not attempt to extend the incoming item
|
||||
if publicKey == "" {
|
||||
return item, nil
|
||||
}
|
||||
|
||||
pkd, err := getPubKeyData(publicKey)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// Create a struct with 2 embedded substruct fields in order to circumvent
|
||||
// "embedded field type cannot be a (pointer to a) type parameter"
|
||||
// compiler error that arises if we were to use a generic function instead
|
||||
typ := reflect.StructOf([]reflect.StructField{
|
||||
{
|
||||
Name: "Item",
|
||||
Anonymous: true,
|
||||
Type: reflect.TypeOf(item),
|
||||
},
|
||||
{
|
||||
Name: "Pkd",
|
||||
Anonymous: true,
|
||||
Type: reflect.TypeOf(pkd),
|
||||
},
|
||||
})
|
||||
|
||||
v := reflect.New(typ).Elem()
|
||||
v.Field(0).Set(reflect.ValueOf(item))
|
||||
v.Field(1).Set(reflect.ValueOf(pkd))
|
||||
s := v.Addr().Interface()
|
||||
|
||||
return s, nil
|
||||
}
|
||||
Reference in New Issue
Block a user