github.com/status-im/status-go@v1.1.0/protocol/v1/pair_message.go (about) 1 package protocol 2 3 import ( 4 "bytes" 5 "encoding/hex" 6 "encoding/json" 7 ) 8 9 // PairMessage contains all message details. 10 type PairMessage struct { 11 InstallationID string `json:"installationId"` 12 // The type of the device 13 DeviceType string `json:"deviceType"` 14 // Name the user set name 15 Name string `json:"name"` 16 // The FCMToken for mobile platforms 17 FCMToken string `json:"fcmToken"` 18 19 // not protocol defined fields 20 ID []byte `json:"-"` 21 } 22 23 func (m *PairMessage) MarshalJSON() ([]byte, error) { 24 type PairMessageAlias PairMessage 25 item := struct { 26 *PairMessageAlias 27 ID string `json:"id"` 28 }{ 29 PairMessageAlias: (*PairMessageAlias)(m), 30 ID: "0x" + hex.EncodeToString(m.ID), 31 } 32 33 return json.Marshal(item) 34 } 35 36 // CreatePairMessage creates a PairMessage which is used 37 // to pair devices. 38 func CreatePairMessage(installationID string, name string, deviceType string, fcmToken string) PairMessage { 39 return PairMessage{ 40 InstallationID: installationID, 41 Name: name, 42 DeviceType: deviceType, 43 FCMToken: fcmToken, 44 } 45 } 46 47 // DecodePairMessage decodes a raw payload to Message struct. 48 func DecodePairMessage(data []byte) (message PairMessage, err error) { 49 buf := bytes.NewBuffer(data) 50 decoder := NewMessageDecoder(buf) 51 value, err := decoder.Decode() 52 if err != nil { 53 return 54 } 55 56 message, ok := value.(PairMessage) 57 if !ok { 58 return message, ErrInvalidDecodedValue 59 } 60 return 61 } 62 63 // EncodePairMessage encodes a PairMessage using Transit serialization. 64 func EncodePairMessage(value PairMessage) ([]byte, error) { 65 var buf bytes.Buffer 66 encoder := NewMessageEncoder(&buf) 67 if err := encoder.Encode(value); err != nil { 68 return nil, err 69 } 70 return buf.Bytes(), nil 71 }