60 lines
1.7 KiB
Go
60 lines
1.7 KiB
Go
package communities
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"github.com/status-im/status-go/eth-node/crypto"
|
|
"github.com/status-im/status-go/eth-node/types"
|
|
"github.com/status-im/status-go/protocol/protobuf"
|
|
)
|
|
|
|
type RequestToJoinState uint
|
|
|
|
const (
|
|
RequestToJoinStatePending RequestToJoinState = iota + 1
|
|
RequestToJoinStateDeclined
|
|
RequestToJoinStateAccepted
|
|
)
|
|
|
|
type RequestToJoin struct {
|
|
ID types.HexBytes `json:"id"`
|
|
PublicKey string `json:"publicKey"`
|
|
Clock uint64 `json:"clock"`
|
|
ENSName string `json:"ensName,omitempty"`
|
|
ChatID string `json:"chatId"`
|
|
CommunityID types.HexBytes `json:"communityId"`
|
|
State RequestToJoinState `json:"state"`
|
|
Our bool `json:"our"`
|
|
}
|
|
|
|
func (r *RequestToJoin) CalculateID() {
|
|
idString := fmt.Sprintf("%s-%s", r.PublicKey, r.CommunityID)
|
|
r.ID = crypto.Keccak256([]byte(idString))
|
|
}
|
|
|
|
func (r *RequestToJoin) ToSyncProtobuf() *protobuf.SyncCommunityRequestsToJoin {
|
|
return &protobuf.SyncCommunityRequestsToJoin{
|
|
Id: r.ID,
|
|
PublicKey: r.PublicKey,
|
|
Clock: r.Clock,
|
|
EnsName: r.ENSName,
|
|
ChatId: r.ChatID,
|
|
CommunityId: r.CommunityID,
|
|
State: uint64(r.State),
|
|
}
|
|
}
|
|
|
|
func (r *RequestToJoin) InitFromSyncProtobuf(proto *protobuf.SyncCommunityRequestsToJoin) {
|
|
r.ID = proto.Id
|
|
r.PublicKey = proto.PublicKey
|
|
r.Clock = proto.Clock
|
|
r.ENSName = proto.EnsName
|
|
r.ChatID = proto.ChatId
|
|
r.CommunityID = proto.CommunityId
|
|
r.State = RequestToJoinState(proto.State)
|
|
}
|
|
|
|
func (r *RequestToJoin) Empty() bool {
|
|
return len(r.ID)+len(r.PublicKey)+int(r.Clock)+len(r.ENSName)+len(r.ChatID)+len(r.CommunityID)+int(r.State) == 0
|
|
}
|