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  }