mirror of
https://github.com/rust-lang/rustlings.git
synced 2026-01-11 21:29:18 +00:00
more updates
This commit is contained in:
parent
ecd727a33d
commit
ad4c5c286c
@ -7,8 +7,6 @@
|
|||||||
// Make this code compile! Execute `rustlings hint advanced_errs1` for
|
// Make this code compile! Execute `rustlings hint advanced_errs1` for
|
||||||
// hints :)
|
// hints :)
|
||||||
|
|
||||||
// I AM NOT DONE
|
|
||||||
|
|
||||||
use std::num::ParseIntError;
|
use std::num::ParseIntError;
|
||||||
use std::str::FromStr;
|
use std::str::FromStr;
|
||||||
|
|
||||||
@ -24,6 +22,13 @@ impl From<CreationError> for ParsePosNonzeroError {
|
|||||||
fn from(e: CreationError) -> Self {
|
fn from(e: CreationError) -> Self {
|
||||||
// TODO: complete this implementation so that the `?` operator will
|
// TODO: complete this implementation so that the `?` operator will
|
||||||
// work for `CreationError`
|
// work for `CreationError`
|
||||||
|
ParsePosNonzeroError::Creation(e)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl From<ParseIntError> for ParsePosNonzeroError {
|
||||||
|
fn from(e: ParseIntError) -> Self {
|
||||||
|
ParsePosNonzeroError::ParseInt(e)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -16,8 +16,6 @@
|
|||||||
// 4. Complete the partial implementation of `Display` for
|
// 4. Complete the partial implementation of `Display` for
|
||||||
// `ParseClimateError`.
|
// `ParseClimateError`.
|
||||||
|
|
||||||
// I AM NOT DONE
|
|
||||||
|
|
||||||
use std::error::Error;
|
use std::error::Error;
|
||||||
use std::fmt::{self, Display, Formatter};
|
use std::fmt::{self, Display, Formatter};
|
||||||
use std::num::{ParseFloatError, ParseIntError};
|
use std::num::{ParseFloatError, ParseIntError};
|
||||||
@ -47,9 +45,12 @@ impl From<ParseIntError> for ParseClimateError {
|
|||||||
impl From<ParseFloatError> for ParseClimateError {
|
impl From<ParseFloatError> for ParseClimateError {
|
||||||
fn from(e: ParseFloatError) -> Self {
|
fn from(e: ParseFloatError) -> Self {
|
||||||
// TODO: Complete this function
|
// TODO: Complete this function
|
||||||
|
ParseClimateError::ParseFloat(e)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl Error for ParseClimateError {}
|
||||||
|
|
||||||
// TODO: Implement a missing trait so that `main()` below will compile. It
|
// TODO: Implement a missing trait so that `main()` below will compile. It
|
||||||
// is not necessary to implement any methods inside the missing trait.
|
// is not necessary to implement any methods inside the missing trait.
|
||||||
|
|
||||||
@ -62,7 +63,10 @@ impl Display for ParseClimateError {
|
|||||||
// Imports the variants to make the following code more compact.
|
// Imports the variants to make the following code more compact.
|
||||||
use ParseClimateError::*;
|
use ParseClimateError::*;
|
||||||
match self {
|
match self {
|
||||||
|
Empty => write!(f, "empty input"),
|
||||||
|
BadLen => write!(f, "incorrect number of fields"),
|
||||||
NoCity => write!(f, "no city name"),
|
NoCity => write!(f, "no city name"),
|
||||||
|
ParseInt(e) => write!(f, "error parsing year: {}", e),
|
||||||
ParseFloat(e) => write!(f, "error parsing temperature: {}", e),
|
ParseFloat(e) => write!(f, "error parsing temperature: {}", e),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -90,6 +94,8 @@ impl FromStr for Climate {
|
|||||||
fn from_str(s: &str) -> Result<Self, Self::Err> {
|
fn from_str(s: &str) -> Result<Self, Self::Err> {
|
||||||
let v: Vec<_> = s.split(',').collect();
|
let v: Vec<_> = s.split(',').collect();
|
||||||
let (city, year, temp) = match &v[..] {
|
let (city, year, temp) = match &v[..] {
|
||||||
|
[""] => return Err(ParseClimateError::Empty),
|
||||||
|
["", _, _] => return Err(ParseClimateError::NoCity),
|
||||||
[city, year, temp] => (city.to_string(), year, temp),
|
[city, year, temp] => (city.to_string(), year, temp),
|
||||||
_ => return Err(ParseClimateError::BadLen),
|
_ => return Err(ParseClimateError::BadLen),
|
||||||
};
|
};
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user