diff --git a/bindings/group.go b/bindings/group.go index 4b14d61d3414d156a2ed9ac0f5f9908747652b8e..729aac8781d24258e61a077b01ee4eb5a43baec6 100644 --- a/bindings/group.go +++ b/bindings/group.go @@ -8,6 +8,8 @@ package bindings import ( + "encoding/json" + "fmt" "github.com/pkg/errors" gc "gitlab.com/elixxir/client/groupChat" gs "gitlab.com/elixxir/client/groupChat/groupStore" @@ -167,6 +169,12 @@ type NewGroupReport struct { err string } +type GroupReportDisk struct { + List []id.Round + GrpId []byte + Status int +} + // GetGroup returns the Group. func (ngr *NewGroupReport) GetGroup() *Group { return ngr.group @@ -193,6 +201,36 @@ func (ngr *NewGroupReport) GetError() string { return ngr.err } + +func (ngr *NewGroupReport) Marshal() ([]byte, error) { + grpReportDisk := GroupReportDisk{ + List: ngr.rounds, + GrpId: ngr.group.GetID()[:], + Status: ngr.GetStatus(), + } + return json.Marshal(&grpReportDisk) +} + +func (ngr *NewGroupReport) Unmarshal(b []byte) error { + grpReportDisk := GroupReportDisk{} + if err := json.Unmarshal(b, &grpReportDisk); err != nil { + return errors.New(fmt.Sprintf("Failed to unmarshal group "+ + "report: %s", err.Error())) + } + + grpId, err := id.Unmarshal(grpReportDisk.GrpId) + if err != nil { + return errors.New(fmt.Sprintf("Failed to unmarshal group "+ + "id: %s", err.Error())) + } + + ngr.group.g.ID = grpId + ngr.rounds = grpReportDisk.List + ngr.status = gc.RequestStatus(grpReportDisk.Status) + + return nil +} + //// // NewGroupReport Structure ////