instance.go
changeset 221 f9228d1f4267
parent 211 12f0761e6442
child 238 1c0042e76902
--- a/instance.go	Wed Mar 21 13:19:50 2018 +0100
+++ b/instance.go	Wed Mar 21 15:06:54 2018 +0100
@@ -7,6 +7,11 @@
 package madon
 
 import (
+	"fmt"
+	"strconv"
+	"strings"
+	"time"
+
 	"github.com/sendgrid/rest"
 )
 
@@ -20,6 +25,8 @@
 }
 
 // GetInstancePeers returns current instance peers
+// The peers are defined as the domains of users the instance has previously
+// resolved.
 func (mc *Client) GetInstancePeers() ([]InstancePeer, error) {
 	var peers []InstancePeer
 	if err := mc.apiCall("instance/peers", rest.Get, nil, nil, nil, &peers); err != nil {
@@ -29,10 +36,31 @@
 }
 
 // GetInstanceActivity returns current instance activity
-func (mc *Client) GetInstanceActivity() (interface{}, error) {
-	var activity interface{}
+func (mc *Client) GetInstanceActivity() ([]WeekActivity, error) {
+	var activity []WeekActivity
 	if err := mc.apiCall("instance/activity", rest.Get, nil, nil, nil, &activity); err != nil {
 		return nil, err
 	}
 	return activity, nil
 }
+
+/* Activity time handling */
+
+// UnmarshalJSON handles deserialization for custom ActivityTime type
+func (act *ActivityTime) UnmarshalJSON(b []byte) error {
+	s, err := strconv.ParseInt(strings.Trim(string(b), "\""), 10, 64)
+	if err != nil {
+		return err
+	}
+	if s == 0 {
+		act.Time = time.Time{}
+		return nil
+	}
+	act.Time = time.Unix(s, 0)
+	return nil
+}
+
+// MarshalJSON handles serialization for custom ActivityTime type
+func (act *ActivityTime) MarshalJSON() ([]byte, error) {
+	return []byte(fmt.Sprintf("\"%d\"", act.Unix())), nil
+}