@@ -72,23 +72,24 @@ impl<'a> FromSql<'a> for RustLine {
7272 _ty : & Type ,
7373 raw : & ' a [ u8 ] ,
7474 ) -> Result < RustLine , Box < dyn std:: error:: Error + Sync + Send > > {
75- if raw. len ( ) == 4 {
76- let mut vec_raw = vec ! [ ] ;
77- vec_raw. extend_from_slice ( raw) ;
78- let mut buf = vec_raw. as_slice ( ) ;
75+ if raw. len ( ) != 4 {
76+ return Err ( "Cannot convert PostgreSQL LINE into rust Line" . into ( ) ) ;
77+ }
7978
80- let x1 = buf . read_f64 :: < BigEndian > ( ) ? ;
81- let y1 = buf . read_f64 :: < BigEndian > ( ) ? ;
82- let first_coord = coord ! ( x : x1 , y : y1 ) ;
79+ let mut vec_raw = vec ! [ ] ;
80+ vec_raw . extend_from_slice ( raw ) ;
81+ let mut buf = vec_raw . as_slice ( ) ;
8382
84- let x2 = buf. read_f64 :: < BigEndian > ( ) ?;
85- let y2 = buf. read_f64 :: < BigEndian > ( ) ?;
86- let second_coord = coord ! ( x: x2 , y: y2 ) ;
83+ let x1 = buf. read_f64 :: < BigEndian > ( ) ?;
84+ let y1 = buf. read_f64 :: < BigEndian > ( ) ?;
85+ let first_coord = coord ! ( x: x1 , y: y1 ) ;
8786
88- let new_line = Line :: new ( first_coord, second_coord) ;
89- return Ok ( RustLine :: new ( new_line) ) ;
90- }
91- Err ( "Cannot convert PostgreSQL LINE into rust Line" . into ( ) )
87+ let x2 = buf. read_f64 :: < BigEndian > ( ) ?;
88+ let y2 = buf. read_f64 :: < BigEndian > ( ) ?;
89+ let second_coord = coord ! ( x: x2, y: y2) ;
90+
91+ let new_line = Line :: new ( first_coord, second_coord) ;
92+ return Ok ( RustLine :: new ( new_line) ) ;
9293 }
9394
9495 fn accepts ( _ty : & Type ) -> bool {
@@ -101,24 +102,25 @@ impl<'a> FromSql<'a> for RustPolygon {
101102 _ty : & Type ,
102103 raw : & ' a [ u8 ] ,
103104 ) -> Result < RustPolygon , Box < dyn std:: error:: Error + Sync + Send > > {
104- if raw. len ( ) % 2 == 0 {
105- let mut vec_raw = vec ! [ ] ;
106- vec_raw. extend_from_slice ( raw) ;
107- let mut buf = vec_raw. as_slice ( ) ;
105+ if raw. len ( ) % 2 != 0 {
106+ return Err ( "Cannot convert PostgreSQL POLYGON into rust Polygon" . into ( ) ) ;
107+ }
108108
109- let mut vec_raw_coord = vec ! [ ] ;
110- buf. read_f64_into :: < BigEndian > ( & mut vec_raw_coord) ;
109+ let mut vec_raw = vec ! [ ] ;
110+ vec_raw. extend_from_slice ( raw) ;
111+ let mut buf = vec_raw. as_slice ( ) ;
111112
112- let mut vec_coord = vec ! [ ] ;
113- for ( x1, y1) in vec_raw_coord. into_iter ( ) . tuples ( ) {
114- vec_coord. push ( coord ! ( x: x1, y: y1) ) ;
115- }
113+ let mut vec_raw_coord = vec ! [ ] ;
114+ buf. read_f64_into :: < BigEndian > ( & mut vec_raw_coord) ?;
116115
117- let polygon_exterior = LineString :: new ( vec_coord ) ;
118- let new_polygon = Polygon :: new ( polygon_exterior , vec ! [ ] ) ;
119- return Ok ( RustPolygon :: new ( new_polygon ) ) ;
116+ let mut vec_coord = vec ! [ ] ;
117+ for ( x1 , y1 ) in vec_raw_coord . into_iter ( ) . tuples ( ) {
118+ vec_coord . push ( coord ! ( x : x1 , y : y1 ) ) ;
120119 }
121- Err ( "Cannot convert PostgreSQL POLYGON into rust Polygon" . into ( ) )
120+
121+ let polygon_exterior = LineString :: new ( vec_coord) ;
122+ let new_polygon = Polygon :: new ( polygon_exterior, vec ! [ ] ) ;
123+ return Ok ( RustPolygon :: new ( new_polygon) ) ;
122124 }
123125
124126 fn accepts ( _ty : & Type ) -> bool {
@@ -178,7 +180,7 @@ impl<T: CoordFloat> Circle<T> {
178180 }
179181
180182 pub fn contains ( self , point : & Coord < T > ) -> bool {
181- self . distance_from_center_to ( & point) <= self . radius
183+ self . distance_from_center_to ( point) <= self . radius
182184 }
183185
184186 pub fn intersects ( self , other : & Self ) -> bool {
@@ -200,19 +202,20 @@ impl<'a> FromSql<'a> for Circle {
200202 _ty : & Type ,
201203 raw : & ' a [ u8 ] ,
202204 ) -> Result < Circle , Box < dyn std:: error:: Error + Sync + Send > > {
203- if raw. len ( ) == 3 {
204- let mut vec_raw = vec ! [ ] ;
205- vec_raw. extend_from_slice ( raw) ;
206- let mut buf = vec_raw. as_slice ( ) ;
205+ if raw. len ( ) != 3 {
206+ return Err ( "Cannot convert PostgreSQL CIRCLE into rust Circle" . into ( ) ) ;
207+ }
207208
208- let x = buf . read_f64 :: < BigEndian > ( ) ? ;
209- let y = buf . read_f64 :: < BigEndian > ( ) ? ;
210- let r = buf . read_f64 :: < BigEndian > ( ) ? ;
209+ let mut vec_raw = vec ! [ ] ;
210+ vec_raw . extend_from_slice ( raw ) ;
211+ let mut buf = vec_raw . as_slice ( ) ;
211212
212- let new_circle = Circle :: new ( x, y, r) ;
213- return Ok ( new_circle) ;
214- }
215- Err ( "Cannot convert PostgreSQL CIRCLE into rust Circle" . into ( ) )
213+ let x = buf. read_f64 :: < BigEndian > ( ) ?;
214+ let y = buf. read_f64 :: < BigEndian > ( ) ?;
215+ let r = buf. read_f64 :: < BigEndian > ( ) ?;
216+
217+ let new_circle = Circle :: new ( x, y, r) ;
218+ return Ok ( new_circle) ;
216219 }
217220
218221 fn accepts ( _ty : & Type ) -> bool {
0 commit comments