github.com/Ali-iotechsys/sqlboiler/v4@v4.0.0-20221208124957-6aec9a5f1f71/types/pgeo/box.go (about) 1 package pgeo 2 3 import ( 4 "database/sql/driver" 5 "errors" 6 "fmt" 7 ) 8 9 // Box is represented by pairs of points that are opposite corners of the box. 10 type Box [2]Point 11 12 // Value for the database 13 func (b Box) Value() (driver.Value, error) { 14 return valueBox(b) 15 } 16 17 // Scan from sql query 18 func (b *Box) Scan(src interface{}) error { 19 return scanBox(b, src) 20 } 21 22 func valueBox(b Box) (driver.Value, error) { 23 return fmt.Sprintf(`(%s)`, formatPoints(b[:])), nil 24 } 25 26 func scanBox(b *Box, src interface{}) error { 27 if src == nil { 28 *b = NewBox(Point{}, Point{}) 29 return nil 30 } 31 32 points, err := parsePointsSrc(src) 33 if err != nil { 34 return err 35 } 36 37 if len(points) != 2 { 38 return errors.New("wrong box") 39 } 40 41 *b = NewBox(points[0], points[1]) 42 43 return nil 44 } 45 46 func randBox(nextInt func() int64) Box { 47 return Box([2]Point{randPoint(nextInt), randPoint(nextInt)}) 48 } 49 50 // Randomize for sqlboiler 51 func (b *Box) Randomize(nextInt func() int64, fieldType string, shouldBeNull bool) { 52 *b = randBox(nextInt) 53 }