from_ascii/
flt.rs

1use std::num;
2use std::fmt;
3use std::error::{Error};
4use std::str::{from_utf8_unchecked};
5
6use base::{FromAscii};
7
8/// An error returned when parsing a floating value from a ascii string fails.
9#[derive(Debug, Clone, PartialEq)]
10pub struct ParseFloatError {
11    kind: FloatErrorKind
12}
13
14#[derive(Debug, Clone, PartialEq)]
15enum FloatErrorKind {
16    FloatErrorKind
17}
18
19impl Error for ParseFloatError {
20    fn description(&self) -> &str {
21        "failed to parse float"
22    }
23}
24
25impl From<num::ParseFloatError> for ParseFloatError {
26    fn from(_: num::ParseFloatError) -> ParseFloatError {
27        ParseFloatError { kind: FloatErrorKind::FloatErrorKind }
28    }
29}
30
31impl fmt::Display for ParseFloatError {
32    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
33        self.description().fmt(f)
34    }
35}
36
37impl FromAscii for f32 {
38    type Err = ParseFloatError;
39
40    #[inline]
41    fn from_ascii(src: &[u8]) -> Result<Self, Self::Err> {
42        unsafe {
43            from_utf8_unchecked(src).parse().map_err(From::from)
44        }
45    }
46}
47
48impl FromAscii for f64 {
49    type Err = ParseFloatError;
50
51    #[inline]
52    fn from_ascii(src: &[u8]) -> Result<Self, Self::Err> {
53        unsafe {
54            from_utf8_unchecked(src).parse().map_err(From::from)
55        }
56    }
57}