mirror of
https://github.com/btcsuite/btcd.git
synced 2024-11-20 02:09:04 +01:00
64 lines
1.4 KiB
Go
64 lines
1.4 KiB
Go
package btcjson
|
|
|
|
import (
|
|
"encoding/json"
|
|
"net/url"
|
|
)
|
|
|
|
// GetZmqNotificationResult models the data returned from the getzmqnotifications command.
|
|
type GetZmqNotificationResult []struct {
|
|
Type string // Type of notification
|
|
Address *url.URL // Address of the publisher
|
|
HighWaterMark int // Outbound message high water mark
|
|
}
|
|
|
|
func (z *GetZmqNotificationResult) MarshalJSON() ([]byte, error) {
|
|
var out []map[string]interface{}
|
|
for _, notif := range *z {
|
|
out = append(out,
|
|
map[string]interface{}{
|
|
"type": notif.Type,
|
|
"address": notif.Address.String(),
|
|
"hwm": notif.HighWaterMark,
|
|
})
|
|
}
|
|
return json.Marshal(out)
|
|
}
|
|
|
|
// UnmarshalJSON satisfies the json.Unmarshaller interface
|
|
func (z *GetZmqNotificationResult) UnmarshalJSON(bytes []byte) error {
|
|
type basicNotification struct {
|
|
Type string
|
|
Address string
|
|
Hwm int
|
|
}
|
|
|
|
var basics []basicNotification
|
|
if err := json.Unmarshal(bytes, &basics); err != nil {
|
|
return err
|
|
}
|
|
|
|
var notifications GetZmqNotificationResult
|
|
for _, basic := range basics {
|
|
|
|
address, err := url.Parse(basic.Address)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
notifications = append(notifications, struct {
|
|
Type string
|
|
Address *url.URL
|
|
HighWaterMark int
|
|
}{
|
|
Type: basic.Type,
|
|
Address: address,
|
|
HighWaterMark: basic.Hwm,
|
|
})
|
|
}
|
|
|
|
*z = notifications
|
|
|
|
return nil
|
|
}
|