1package xidb 2 3import ( 4 "database/sql/driver" 5 "fmt" 6 7 "github.com/rs/xid" 8) 9 10type ID struct { 11 xid.ID 12} 13 14// Value implements the driver.Valuer interface. 15func (id ID) Value() (driver.Value, error) { 16 if id.ID.IsNil() { 17 return nil, nil 18 } 19 return id.ID[:], nil 20} 21 22// Scan implements the sql.Scanner interface. 23func (id *ID) Scan(value interface{}) (err error) { 24 switch val := value.(type) { 25 case []byte: 26 i, err := xid.FromBytes(val) 27 if err != nil { 28 return err 29 } 30 *id = ID{ID: i} 31 return nil 32 case nil: 33 *id = ID{ID: xid.NilID()} 34 return nil 35 default: 36 return fmt.Errorf("xid: scanning unsupported type: %T", value) 37 } 38} 39