На мой последний вопрос я хочу преобразовать eunm (псевдоним типа) в строку, когда я пишу его в mongodb с помощью mgo. Я знаю, что мне нужно добавить правила для bson Marshal / Unmarshal, но с json все по-другому, мне нужно реализовать UnmarshalJSON
и MarshalJSON
, так что мне делать с bson? Код ниже записать число в поле S
, но я хочу соответствующую строку
package main
import (
"encoding/json"
mgo "gopkg.in/mgo.v2"
)
type trxStatus int
type test struct {
S trxStatus
A string
}
const (
buySubmitted trxStatus = iota
buyFilled
sellSubmiited
sellFilled
finished
)
var ss = [...]string{"buySubmitted", "buyFilled", "sellSubmiited", "sellFilled", "Finished"}
// that's what I do for json
func (s *trxStatus) UnmarshalJSON(bytes []byte) error {
var status string
json.Unmarshal(bytes, &status)
// unknown
for i, v := range ss {
if v == status {
tttt := trxStatus(i)
*s = tttt
break
}
}
return nil
}
func (s trxStatus) MarshalJSON() ([]byte, error) {
return json.Marshal(s.String())
}
func (s trxStatus) String() string {
if s < buySubmitted || s > finished {
return "Unknown"
}
return ss[s]
}
func main() {
db, _ := mgo.Dial("localhost")
s := test{S: buyFilled, A: "hello"}
c := db.DB("test").C("test")
c.Insert(s)
}