91 lines
2.0 KiB
Go
91 lines
2.0 KiB
Go
package doormen
|
|
|
|
import (
|
|
"encoding/json"
|
|
"github.com/didiercrunch/doormanserver/shared"
|
|
"gopkg.in/mgo.v2/bson"
|
|
"math/big"
|
|
)
|
|
|
|
type doormanValue struct {
|
|
Name string
|
|
Probability string
|
|
}
|
|
|
|
func (val *DoormanValue) GetBSON() (interface{}, error) {
|
|
ret := &doormanValue{val.Name, ""}
|
|
txt, err := val.Probability.MarshalText()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
ret.Probability = string(txt)
|
|
return ret, nil
|
|
}
|
|
|
|
func (val *DoormanValue) SetBSON(raw bson.Raw) error {
|
|
v := new(doormanValue)
|
|
if err := raw.Unmarshal(v); err != nil {
|
|
return err
|
|
}
|
|
val.Name = v.Name
|
|
val.Probability = new(big.Rat)
|
|
return val.Probability.UnmarshalText([]byte(v.Probability))
|
|
}
|
|
|
|
type jsonDoormanDefinition struct {
|
|
Id string `json:"id,omitempty"`
|
|
Name string `json:"name"`
|
|
Values []*DoormanValue `json:"values"`
|
|
OwnerEmails []string `json:"emails"`
|
|
}
|
|
|
|
func (dm *DoormanDefinition) MarshalJSON() ([]byte, error) {
|
|
jdm := new(jsonDoormanDefinition)
|
|
jdm.Name = dm.Name
|
|
jdm.OwnerEmails = dm.OwnerEmails
|
|
jdm.Values = dm.Values
|
|
jdm.Id = shared.ObjectIdToPublicId(dm.Id)
|
|
return json.Marshal(jdm)
|
|
}
|
|
|
|
func (dm *DoormanDefinition) UnmarshalJSON(data []byte) error {
|
|
jsm := new(jsonDoormanDefinition)
|
|
var err error
|
|
if err = json.Unmarshal(data, jsm); err != nil {
|
|
return err
|
|
}
|
|
if dm.Id, err = shared.PublicIdToObjectId(jsm.Id); err != nil {
|
|
return err
|
|
}
|
|
dm.Name = jsm.Name
|
|
dm.Values = jsm.Values
|
|
dm.OwnerEmails = jsm.OwnerEmails
|
|
return nil
|
|
}
|
|
|
|
type jsonDoormanId struct {
|
|
Name string `json:"name"`
|
|
Id string `json:"id"`
|
|
}
|
|
|
|
func (did *DoormanId) MarshalJSON() ([]byte, error) {
|
|
jdid := new(jsonDoormanId)
|
|
jdid.Name = did.Name
|
|
jdid.Id = shared.ObjectIdToPublicId(did.Id)
|
|
return json.Marshal(jdid)
|
|
|
|
}
|
|
|
|
func (did *DoormanId) UnmarshalJSON(data []byte) error {
|
|
jdid := new(jsonDoormanId)
|
|
if err := json.Unmarshal(data, jdid); err != nil {
|
|
return err
|
|
}
|
|
var err error
|
|
if did.Id, err = shared.PublicIdToObjectId(jdid.Id); err != nil {
|
|
return err
|
|
}
|
|
did.Name = jdid.Name
|
|
return nil
|
|
}
|