fork of indigo with slightly nicer lexgen
at main 966 B view raw
1package models 2 3import ( 4 "database/sql/driver" 5 "encoding/json" 6 "fmt" 7 "github.com/ipfs/go-cid" 8) 9 10// NB: copied from my estuary code 11 12type DbCID struct { 13 CID cid.Cid 14} 15 16func (dbc *DbCID) Scan(v interface{}) error { 17 b, ok := v.([]byte) 18 if !ok { 19 return fmt.Errorf("dbcids must get bytes!") 20 } 21 22 if len(b) == 0 { 23 return nil 24 } 25 26 c, err := cid.Cast(b) 27 if err != nil { 28 return err 29 } 30 31 dbc.CID = c 32 return nil 33} 34 35func (dbc DbCID) Value() (driver.Value, error) { 36 if !dbc.CID.Defined() { 37 return nil, fmt.Errorf("cannot serialize undefined cid to database") 38 } 39 return dbc.CID.Bytes(), nil 40} 41 42func (dbc DbCID) MarshalJSON() ([]byte, error) { 43 return json.Marshal(dbc.CID.String()) 44} 45 46func (dbc *DbCID) UnmarshalJSON(b []byte) error { 47 var s string 48 if err := json.Unmarshal(b, &s); err != nil { 49 return err 50 } 51 52 c, err := cid.Decode(s) 53 if err != nil { 54 return err 55 } 56 57 dbc.CID = c 58 return nil 59} 60 61func (dbc *DbCID) GormDataType() string { 62 return "bytes" 63}