package api import ( "errors" "fmt" "git.wownero.com/onionltd/monero-multisig-broker/messagelog" ) type Message struct { RPCName string `json:"rpc_name"` Sender string `json:"sender"` MultisigInfo string `json:"multisig_info"` MultisigTxSet string `json:"multisig_txset"` Address string `json:"address"` TxDataHex string `json:"tx_data_hex"` TxHashList []string `json:"tx_hash_list"` } const PrepareMultisig = "prepare_multisig" func NewPrepareMultisig(multisigInfo string) Message { return Message{ RPCName: PrepareMultisig, MultisigInfo: multisigInfo, } } const MakeMultisig = "make_multisig" func NewMakeMultisig(multisigInfo string) Message { return Message{ RPCName: MakeMultisig, MultisigInfo: multisigInfo, } } const FinalizeMultisig = "finalize_multisig" func NewFinalizeMultisig(address string) Message { return Message{ RPCName: FinalizeMultisig, Address: address, } } const Transfer = "transfer" func NewTransferMessage(multisigTxSet string) Message { return Message{ RPCName: Transfer, MultisigTxSet: multisigTxSet, } } func convertToLogMessage(m Message) messagelog.Message { return messagelog.Message{ ContentType: "application/json", Content: m, } } func convertFromLogMessage(m messagelog.Message) (Message, error) { content, ok := m.Content.(map[string]interface{}) if !ok { return Message{}, errors.New("content is not an object") } messageType, ok := content["rpc_name"].(string) if !ok { return Message{}, errors.New("unexpected object format") } var message Message switch messageType { case PrepareMultisig: msInfo, ok := content["multisig_info"].(string) if !ok { return Message{}, fmt.Errorf("missing `%s` for message type %s", "multisig_info", PrepareMultisig) } message = NewPrepareMultisig(msInfo) case MakeMultisig: msInfo, ok := content["multisig_info"].(string) if !ok { return Message{}, fmt.Errorf("missing `%s` for message type %s", "multisig_info", MakeMultisig) } message = NewMakeMultisig(msInfo) case FinalizeMultisig: address, ok := content["address"].(string) if !ok { return Message{}, fmt.Errorf("missing `%s` for message type %s", "address", FinalizeMultisig) } message = NewFinalizeMultisig(address) default: return Message{}, errors.New("unknown message type") } message.Sender = m.Sender return message, nil }