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