git.zd.zone/hrpc/hrpc@v0.0.12/types/url.go (about) 1 package types 2 3 import ( 4 "bytes" 5 "database/sql/driver" 6 "fmt" 7 "net/url" 8 "reflect" 9 ) 10 11 type URL struct { 12 *url.URL 13 } 14 15 func (u URL) Value() (driver.Value, error) { 16 return u.String(), nil 17 } 18 19 func (u *URL) Scan(src interface{}) error { 20 v, ok := src.([]byte) 21 if !ok { 22 return fmt.Errorf( 23 "bad []byte type assertion, got name: %v and kind: %v", 24 reflect.TypeOf(src).Name(), 25 reflect.TypeOf(src).Kind().String(), 26 ) 27 } 28 t, err := url.Parse(string(v)) 29 if err != nil { 30 return err 31 } 32 *u = URL{t} 33 return nil 34 } 35 36 func (u URL) MarshalJSON() ([]byte, error) { 37 return []byte("\"" + u.String() + "\""), nil 38 } 39 40 func (u *URL) UnmarshalJSON(data []byte) error { 41 s := string(bytes.Trim(data, "\"")) 42 t, err := url.Parse(s) 43 if err != nil { 44 return err 45 } 46 *u = URL{t} 47 return nil 48 }