59 lines
1.7 KiB
Go
59 lines
1.7 KiB
Go
package pushover
|
|
|
|
import (
|
|
"bytes"
|
|
"encoding/json"
|
|
"time"
|
|
)
|
|
|
|
// ReceiptDetails represents the receipt informations in case of emergency
|
|
// priority.
|
|
type ReceiptDetails struct {
|
|
Status int
|
|
Acknowledged bool
|
|
AcknowledgedBy string
|
|
Expired bool
|
|
CalledBack bool
|
|
ID string
|
|
AcknowledgedAt *time.Time
|
|
LastDeliveredAt *time.Time
|
|
ExpiresAt *time.Time
|
|
CalledBackAt *time.Time
|
|
}
|
|
|
|
// UnmarshalJSON is a custom unmarshal function to handle timestamps and
|
|
// boolean as int and convert them to the right type.
|
|
func (r *ReceiptDetails) UnmarshalJSON(data []byte) error {
|
|
dataBytes := bytes.NewReader(data)
|
|
var aux struct {
|
|
ID string `json:"request"`
|
|
Status int `json:"status"`
|
|
Acknowledged intBool `json:"acknowledged"`
|
|
AcknowledgedBy string `json:"acknowledged_by"`
|
|
Expired intBool `json:"expired"`
|
|
CalledBack intBool `json:"called_back"`
|
|
AcknowledgedAt *timestamp `json:"acknowledged_at"`
|
|
LastDeliveredAt *timestamp `json:"last_delivered_at"`
|
|
ExpiresAt *timestamp `json:"expires_at"`
|
|
CalledBackAt *timestamp `json:"called_back_at"`
|
|
}
|
|
|
|
// Decode json into the aux struct
|
|
if err := json.NewDecoder(dataBytes).Decode(&aux); err != nil {
|
|
return err
|
|
}
|
|
|
|
// Set the RecipientDetails with the right types
|
|
r.Status = aux.Status
|
|
r.Acknowledged = bool(aux.Acknowledged)
|
|
r.AcknowledgedBy = aux.AcknowledgedBy
|
|
r.Expired = bool(aux.Expired)
|
|
r.CalledBack = bool(aux.CalledBack)
|
|
r.ID = aux.ID
|
|
r.AcknowledgedAt = aux.AcknowledgedAt.Time
|
|
r.LastDeliveredAt = aux.LastDeliveredAt.Time
|
|
r.ExpiresAt = aux.ExpiresAt.Time
|
|
r.CalledBackAt = aux.CalledBackAt.Time
|
|
|
|
return nil
|
|
}
|