Skip to content

Commit 173bb89

Browse files
authored
Merge pull request #8 from petrochenkov/master
Fix a private-in-public error
2 parents 0d4a703 + 45bdb55 commit 173bb89

File tree

2 files changed

+101
-94
lines changed

2 files changed

+101
-94
lines changed

src/lib.rs

Lines changed: 97 additions & 90 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,10 @@ extern crate byteorder;
1111

1212
use std::io::prelude::*;
1313
use std::fmt;
14-
use std::mem;
1514
use std::marker::PhantomData;
1615
use std::iter::FromIterator;
1716
use std::convert::From;
18-
use postgres::types::{Type, IsNull, ToSql, FromSql, SessionInfo, WrongType};
17+
use postgres::types::{Type, IsNull, ToSql, FromSql, SessionInfo};
1918
use byteorder::{ReadBytesExt, WriteBytesExt, BigEndian, LittleEndian};
2019
pub mod mars;
2120

@@ -144,111 +143,119 @@ impl SRID for NoSRID {
144143
fn as_srid() -> Option<i32> { None }
145144
}
146145

146+
mod detail {
147+
use std::io::prelude::*;
148+
use std::mem;
149+
use byteorder::{ReadBytesExt, WriteBytesExt, LittleEndian};
150+
use postgres::types::Type;
151+
use super::{Error, SRID, read_f64, read_u32, read_i32};
147152

148-
trait ToPoint: Sized {
149-
type SRIDType: SRID;
153+
pub trait ToPoint: Sized {
154+
type SRIDType: SRID;
150155

151-
fn type_id() -> u32 {
152-
let mut type_ = 0x0000_0001_u32;
153-
if Self::opt_srid().is_some() {
154-
type_ |= 0x20000000;
156+
fn type_id() -> u32 {
157+
let mut type_ = 0x0000_0001_u32;
158+
if Self::opt_srid().is_some() {
159+
type_ |= 0x20000000;
160+
}
161+
if Self::has_z() {
162+
type_ |= 0x80000000;
163+
}
164+
if Self::has_m() {
165+
type_ != 0x40000000;
166+
}
167+
type_
155168
}
156-
if Self::has_z() {
157-
type_ |= 0x80000000;
169+
fn opt_srid() -> Option<i32> {
170+
Self::SRIDType::as_srid()
158171
}
159-
if Self::has_m() {
160-
type_ != 0x40000000;
172+
fn x(&self) -> f64 {
173+
unsafe { *mem::transmute::<_, *const f64>(self) }
161174
}
162-
type_
163-
}
164-
fn opt_srid() -> Option<i32> {
165-
Self::SRIDType::as_srid()
166-
}
167-
fn x(&self) -> f64 {
168-
unsafe { *mem::transmute::<_, *const f64>(self) }
169-
}
170-
fn y(&self) -> f64 {
171-
unsafe { *mem::transmute::<_, *const f64>(self).offset(1) }
172-
}
173-
fn opt_z(&self) -> Option<f64> {
174-
None
175-
}
176-
fn opt_m(&self) -> Option<f64> {
177-
None
178-
}
179-
fn has_z() -> bool { false }
180-
fn has_m() -> bool { false }
175+
fn y(&self) -> f64 {
176+
unsafe { *mem::transmute::<_, *const f64>(self).offset(1) }
177+
}
178+
fn opt_z(&self) -> Option<f64> {
179+
None
180+
}
181+
fn opt_m(&self) -> Option<f64> {
182+
None
183+
}
184+
fn has_z() -> bool { false }
185+
fn has_m() -> bool { false }
181186

182-
fn new_from_opt_vals(x: f64, y: f64, z: Option<f64>, m: Option<f64>) -> Self;
187+
fn new_from_opt_vals(x: f64, y: f64, z: Option<f64>, m: Option<f64>) -> Self;
183188

184-
fn read_ewkb<R: Read>(raw: &mut R) -> Result<Self, Error> {
185-
let byte_order = try!(raw.read_i8());
186-
let is_be = byte_order == 0i8;
189+
fn read_ewkb<R: Read>(raw: &mut R) -> Result<Self, Error> {
190+
let byte_order = try!(raw.read_i8());
191+
let is_be = byte_order == 0i8;
187192

188-
let type_id = try!(read_u32(raw, is_be));
189-
if type_id != Self::type_id() {
190-
return Err(Error::Read("type id not match".into()))
191-
}
193+
let type_id = try!(read_u32(raw, is_be));
194+
if type_id != Self::type_id() {
195+
return Err(Error::Read("type id not match".into()))
196+
}
192197

193-
if Self::opt_srid().is_some() {
194-
if Self::opt_srid() != Some(try!(read_i32(raw, is_be))) {
195-
return Err(Error::Read("srid not match".into()))
198+
if Self::opt_srid().is_some() {
199+
if Self::opt_srid() != Some(try!(read_i32(raw, is_be))) {
200+
return Err(Error::Read("srid not match".into()))
201+
}
196202
}
197-
}
198203

199-
Self::read_ewkb_body(raw, is_be)
200-
}
204+
Self::read_ewkb_body(raw, is_be)
205+
}
201206

202-
fn read_ewkb_body<R: Read>(raw: &mut R, is_be: bool) -> Result<Self, Error> {
203-
let x = try!(read_f64(raw, is_be));
204-
let y = try!(read_f64(raw, is_be));
205-
let z = if Self::has_z() {
206-
Some(try!(read_f64(raw, is_be)))
207-
} else {
208-
None
209-
};
210-
let m = if Self::has_m() {
211-
Some(try!(read_f64(raw, is_be)))
212-
} else {
213-
None
214-
};
215-
Ok(Self::new_from_opt_vals(x, y, z, m))
216-
}
207+
fn read_ewkb_body<R: Read>(raw: &mut R, is_be: bool) -> Result<Self, Error> {
208+
let x = try!(read_f64(raw, is_be));
209+
let y = try!(read_f64(raw, is_be));
210+
let z = if Self::has_z() {
211+
Some(try!(read_f64(raw, is_be)))
212+
} else {
213+
None
214+
};
215+
let m = if Self::has_m() {
216+
Some(try!(read_f64(raw, is_be)))
217+
} else {
218+
None
219+
};
220+
Ok(Self::new_from_opt_vals(x, y, z, m))
221+
}
217222

218-
fn write_ewkb<W: Write+?Sized>(&self, _: &Type, w: &mut W) -> Result<(), Error> {
219-
// use LE
220-
try!(w.write_u8(0x01));
221-
try!(w.write_u32::<LittleEndian>(Self::type_id()));
222-
Self::opt_srid().map(|srid| w.write_i32::<LittleEndian>(srid));
223-
try!(self.write_ewkb_body(w));
224-
Ok(())
225-
}
223+
fn write_ewkb<W: Write+?Sized>(&self, _: &Type, w: &mut W) -> Result<(), Error> {
224+
// use LE
225+
try!(w.write_u8(0x01));
226+
try!(w.write_u32::<LittleEndian>(Self::type_id()));
227+
Self::opt_srid().map(|srid| w.write_i32::<LittleEndian>(srid));
228+
try!(self.write_ewkb_body(w));
229+
Ok(())
230+
}
226231

227-
fn write_ewkb_body<W: Write+?Sized>(&self, w: &mut W) -> Result<(), Error> {
228-
// lol
229-
let x = unsafe { *mem::transmute::<_, *const f64>(self) };
230-
let y = unsafe { *mem::transmute::<_, *const f64>(self).offset(1) };
231-
try!(w.write_f64::<LittleEndian>(x));
232-
try!(w.write_f64::<LittleEndian>(y));
233-
self.opt_z().map(|z| w.write_f64::<LittleEndian>(z));
234-
self.opt_m().map(|m| w.write_f64::<LittleEndian>(m));
235-
Ok(())
236-
}
232+
fn write_ewkb_body<W: Write+?Sized>(&self, w: &mut W) -> Result<(), Error> {
233+
// lol
234+
let x = unsafe { *mem::transmute::<_, *const f64>(self) };
235+
let y = unsafe { *mem::transmute::<_, *const f64>(self).offset(1) };
236+
try!(w.write_f64::<LittleEndian>(x));
237+
try!(w.write_f64::<LittleEndian>(y));
238+
self.opt_z().map(|z| w.write_f64::<LittleEndian>(z));
239+
self.opt_m().map(|m| w.write_f64::<LittleEndian>(m));
240+
Ok(())
241+
}
237242

238-
fn describ(&self) -> String {
239-
let mut ret = "POINT".to_string();
240-
self.opt_z().map(|_| ret.push_str("Z"));
241-
self.opt_m().map(|_| ret.push_str("M"));
242-
// lol
243-
let x = unsafe { *mem::transmute::<_, *const f64>(self) };
244-
let y = unsafe { *mem::transmute::<_, *const f64>(self).offset(1) };
245-
ret.push_str(&format!("({} {}", x, y));
246-
self.opt_z().map(|z| ret.push_str(&format!(" {}", z)));
247-
self.opt_m().map(|m| ret.push_str(&format!(" {}", m)));
248-
ret.push_str(")");
249-
ret
243+
fn describ(&self) -> String {
244+
let mut ret = "POINT".to_string();
245+
self.opt_z().map(|_| ret.push_str("Z"));
246+
self.opt_m().map(|_| ret.push_str("M"));
247+
// lol
248+
let x = unsafe { *mem::transmute::<_, *const f64>(self) };
249+
let y = unsafe { *mem::transmute::<_, *const f64>(self).offset(1) };
250+
ret.push_str(&format!("({} {}", x, y));
251+
self.opt_z().map(|z| ret.push_str(&format!(" {}", z)));
252+
self.opt_m().map(|m| ret.push_str(&format!(" {}", m)));
253+
ret.push_str(")");
254+
ret
255+
}
250256
}
251257
}
258+
use detail::ToPoint;
252259

253260
#[derive(Copy, Clone)]
254261
pub struct Point<S: SRID = WGS84> {

src/mars.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -127,12 +127,12 @@ impl Converter {
127127
fn wgtochina_lb(wg_flag: i32, wg_lng: i32, wg_lat: i32, wg_heit: i32, _wg_week: i32, wg_time: i32) -> (f64, f64) {
128128
let mut point: (f64, f64) = (wg_lng as f64, wg_lat as f64);
129129

130-
let mut x1_x2: f64;
131-
let mut y1_y2: f64;
132-
let mut casm_v: f64;
130+
let x1_x2: f64;
131+
let y1_y2: f64;
132+
let casm_v: f64;
133133
let mut x_add: f64;
134134
let mut y_add: f64;
135-
let mut h_add: f64;
135+
let h_add: f64;
136136

137137
if wg_heit > 5000 {
138138
return point;

0 commit comments

Comments
 (0)