Expand description
Parse a value from a string
FromStr’s from_str method is often used implicitly, through
str’s parse method. See parse’s documentation for examples.
FromStr does not have a lifetime parameter, and so you can only parse types
that do not contain a lifetime parameter themselves. In other words, you can
parse an i32 with FromStr, but not a &i32. You can parse a struct that
contains an i32, but not one that contains an &i32.
Examples
Basic implementation of FromStr on an example Point type:
use std::str::FromStr;
use std::num::ParseIntError;
#[derive(Debug, PartialEq)]
struct Point {
x: i32,
y: i32
}
impl FromStr for Point {
type Err = ParseIntError;
fn from_str(s: &str) -> Result<Self, Self::Err> {
let coords: Vec<&str> = s.trim_matches(|p| p == '(' || p == ')' )
.split(',')
.collect();
let x_fromstr = coords[0].parse::<i32>()?;
let y_fromstr = coords[1].parse::<i32>()?;
Ok(Point { x: x_fromstr, y: y_fromstr })
}
}
let expected = Ok(Point { x: 1, y: 2 });
// Explicit call
assert_eq!(Point::from_str("(1,2)"), expected);
// Implicit calls, through parse
assert_eq!("(1,2)".parse(), expected);
assert_eq!("(1,2)".parse::<Point>(), expected);Required Associated Types
Required Methods
Parses a string s to return a value of this type.
If parsing succeeds, return the value inside Ok, otherwise
when the string is ill-formatted return an error specific to the
inside Err. The error type is specific to the implementation of the trait.
Examples
Basic usage with i32, a type that implements FromStr:
use std::str::FromStr;
let s = "5";
let x = i32::from_str(s).unwrap();
assert_eq!(5, x);Implementations on Foreign Types
sourceimpl FromStr for Ipv4Addr
impl FromStr for Ipv4Addr
type Err = AddrParseError
fn from_str(s: &str) -> Result<Ipv4Addr, AddrParseError>
sourceimpl FromStr for SocketAddr
impl FromStr for SocketAddr
type Err = AddrParseError
fn from_str(s: &str) -> Result<SocketAddr, AddrParseError>
1.5.0 · sourceimpl FromStr for SocketAddrV6
impl FromStr for SocketAddrV6
type Err = AddrParseError
fn from_str(s: &str) -> Result<SocketAddrV6, AddrParseError>
1.7.0 · sourceimpl FromStr for IpAddr
impl FromStr for IpAddr
type Err = AddrParseError
fn from_str(s: &str) -> Result<IpAddr, AddrParseError>
sourceimpl FromStr for Ipv6Addr
impl FromStr for Ipv6Addr
type Err = AddrParseError
fn from_str(s: &str) -> Result<Ipv6Addr, AddrParseError>
1.5.0 · sourceimpl FromStr for SocketAddrV4
impl FromStr for SocketAddrV4
type Err = AddrParseError
fn from_str(s: &str) -> Result<SocketAddrV4, AddrParseError>
sourceimpl FromStr for i128
impl FromStr for i128
type Err = ParseIntError
fn from_str(src: &str) -> Result<i128, ParseIntError>
sourceimpl FromStr for i32
impl FromStr for i32
type Err = ParseIntError
fn from_str(src: &str) -> Result<i32, ParseIntError>
1.35.0 · sourceimpl FromStr for NonZeroUsize
impl FromStr for NonZeroUsize
type Err = ParseIntError
fn from_str(src: &str) -> Result<NonZeroUsize, <NonZeroUsize as FromStr>::Err>
sourceimpl FromStr for f32
impl FromStr for f32
sourcefn from_str(src: &str) -> Result<f32, ParseFloatError>
fn from_str(src: &str) -> Result<f32, ParseFloatError>
Converts a string in base 10 to a float. Accepts an optional decimal exponent.
This function accepts strings such as
- ‘3.14’
- ‘-3.14’
- ‘2.5E10’, or equivalently, ‘2.5e10’
- ‘2.5E-10’
- ‘5.’
- ‘.5’, or, equivalently, ‘0.5’
- ‘inf’, ‘-inf’, ‘+infinity’, ‘NaN’
Note that alphabetical characters are not case-sensitive.
Leading and trailing whitespace represent an error.
Grammar
All strings that adhere to the following EBNF grammar when
lowercased will result in an Ok being returned:
Float ::= Sign? ( 'inf' | 'infinity' | 'nan' | Number )
Number ::= ( Digit+ |
'.' Digit* |
Digit+ '.' Digit* |
Digit* '.' Digit+ ) Exp?
Exp ::= 'e' Sign? Digit+
Sign ::= [+-]
Digit ::= [0-9]Arguments
- src - A string
Return value
Err(ParseFloatError) if the string did not represent a valid
number. Otherwise, Ok(n) where n is the closest
representable floating-point number to the number represented
by src (following the same rules for rounding as for the
results of primitive operations).
type Err = ParseFloatError
sourceimpl FromStr for i64
impl FromStr for i64
type Err = ParseIntError
fn from_str(src: &str) -> Result<i64, ParseIntError>
sourceimpl FromStr for bool
impl FromStr for bool
sourcefn from_str(s: &str) -> Result<bool, ParseBoolError>
fn from_str(s: &str) -> Result<bool, ParseBoolError>
Parse a bool from a string.
Yields a Result<bool, ParseBoolError>, because s may or may not
actually be parseable.
Examples
use std::str::FromStr;
assert_eq!(FromStr::from_str("true"), Ok(true));
assert_eq!(FromStr::from_str("false"), Ok(false));
assert!(<bool as FromStr>::from_str("not even a boolean").is_err());Note, in many cases, the .parse() method on str is more proper.
assert_eq!("true".parse(), Ok(true));
assert_eq!("false".parse(), Ok(false));
assert!("not even a boolean".parse::<bool>().is_err());type Err = ParseBoolError
sourceimpl FromStr for u128
impl FromStr for u128
type Err = ParseIntError
fn from_str(src: &str) -> Result<u128, ParseIntError>
sourceimpl FromStr for u32
impl FromStr for u32
type Err = ParseIntError
fn from_str(src: &str) -> Result<u32, ParseIntError>
1.35.0 · sourceimpl FromStr for NonZeroU64
impl FromStr for NonZeroU64
type Err = ParseIntError
fn from_str(src: &str) -> Result<NonZeroU64, <NonZeroU64 as FromStr>::Err>
sourceimpl FromStr for u8
impl FromStr for u8
type Err = ParseIntError
fn from_str(src: &str) -> Result<u8, ParseIntError>
1.35.0 · sourceimpl FromStr for NonZeroU16
impl FromStr for NonZeroU16
type Err = ParseIntError
fn from_str(src: &str) -> Result<NonZeroU16, <NonZeroU16 as FromStr>::Err>
1.35.0 · sourceimpl FromStr for NonZeroI128
impl FromStr for NonZeroI128
type Err = ParseIntError
fn from_str(src: &str) -> Result<NonZeroI128, <NonZeroI128 as FromStr>::Err>
1.35.0 · sourceimpl FromStr for NonZeroI64
impl FromStr for NonZeroI64
type Err = ParseIntError
fn from_str(src: &str) -> Result<NonZeroI64, <NonZeroI64 as FromStr>::Err>
sourceimpl FromStr for i8
impl FromStr for i8
type Err = ParseIntError
fn from_str(src: &str) -> Result<i8, ParseIntError>
sourceimpl FromStr for f64
impl FromStr for f64
sourcefn from_str(src: &str) -> Result<f64, ParseFloatError>
fn from_str(src: &str) -> Result<f64, ParseFloatError>
Converts a string in base 10 to a float. Accepts an optional decimal exponent.
This function accepts strings such as
- ‘3.14’
- ‘-3.14’
- ‘2.5E10’, or equivalently, ‘2.5e10’
- ‘2.5E-10’
- ‘5.’
- ‘.5’, or, equivalently, ‘0.5’
- ‘inf’, ‘-inf’, ‘+infinity’, ‘NaN’
Note that alphabetical characters are not case-sensitive.
Leading and trailing whitespace represent an error.
Grammar
All strings that adhere to the following EBNF grammar when
lowercased will result in an Ok being returned:
Float ::= Sign? ( 'inf' | 'infinity' | 'nan' | Number )
Number ::= ( Digit+ |
'.' Digit* |
Digit+ '.' Digit* |
Digit* '.' Digit+ ) Exp?
Exp ::= 'e' Sign? Digit+
Sign ::= [+-]
Digit ::= [0-9]Arguments
- src - A string
Return value
Err(ParseFloatError) if the string did not represent a valid
number. Otherwise, Ok(n) where n is the closest
representable floating-point number to the number represented
by src (following the same rules for rounding as for the
results of primitive operations).
type Err = ParseFloatError
sourceimpl FromStr for i16
impl FromStr for i16
type Err = ParseIntError
fn from_str(src: &str) -> Result<i16, ParseIntError>
1.35.0 · sourceimpl FromStr for NonZeroI32
impl FromStr for NonZeroI32
type Err = ParseIntError
fn from_str(src: &str) -> Result<NonZeroI32, <NonZeroI32 as FromStr>::Err>
1.35.0 · sourceimpl FromStr for NonZeroU128
impl FromStr for NonZeroU128
type Err = ParseIntError
fn from_str(src: &str) -> Result<NonZeroU128, <NonZeroU128 as FromStr>::Err>
1.35.0 · sourceimpl FromStr for NonZeroU32
impl FromStr for NonZeroU32
type Err = ParseIntError
fn from_str(src: &str) -> Result<NonZeroU32, <NonZeroU32 as FromStr>::Err>
1.35.0 · sourceimpl FromStr for NonZeroI16
impl FromStr for NonZeroI16
type Err = ParseIntError
fn from_str(src: &str) -> Result<NonZeroI16, <NonZeroI16 as FromStr>::Err>
sourceimpl FromStr for isize
impl FromStr for isize
type Err = ParseIntError
fn from_str(src: &str) -> Result<isize, ParseIntError>
1.35.0 · sourceimpl FromStr for NonZeroIsize
impl FromStr for NonZeroIsize
type Err = ParseIntError
fn from_str(src: &str) -> Result<NonZeroIsize, <NonZeroIsize as FromStr>::Err>
sourceimpl FromStr for usize
impl FromStr for usize
type Err = ParseIntError
fn from_str(src: &str) -> Result<usize, ParseIntError>
sourceimpl FromStr for u64
impl FromStr for u64
type Err = ParseIntError
fn from_str(src: &str) -> Result<u64, ParseIntError>
sourceimpl FromStr for u16
impl FromStr for u16
type Err = ParseIntError
fn from_str(src: &str) -> Result<u16, ParseIntError>
sourceimpl FromStr for LevelFilter
impl FromStr for LevelFilter
type Err = ParseLevelError
fn from_str(level: &str) -> Result<LevelFilter, <LevelFilter as FromStr>::Err>
impl FromStr for Hash
impl FromStr for Hash
sourceimpl<const CAP: usize> FromStr for ArrayString<CAP>
impl<const CAP: usize> FromStr for ArrayString<CAP>
type Err = CapacityError<()>
fn from_str(
s: &str
) -> Result<ArrayString<CAP>, <ArrayString<CAP> as FromStr>::Err>
sourceimpl FromStr for AppSettings
impl FromStr for AppSettings
type Err = String
fn from_str(s: &str) -> Result<AppSettings, <AppSettings as FromStr>::Err>
sourceimpl FromStr for ArgSettings
impl FromStr for ArgSettings
type Err = String
fn from_str(s: &str) -> Result<ArgSettings, <ArgSettings as FromStr>::Err>
sourceimpl FromStr for DateTime<Utc>
impl FromStr for DateTime<Utc>
type Err = ParseError
fn from_str(s: &str) -> Result<DateTime<Utc>, ParseError>
sourceimpl FromStr for DateTime<FixedOffset>
impl FromStr for DateTime<FixedOffset>
type Err = ParseError
fn from_str(s: &str) -> Result<DateTime<FixedOffset>, ParseError>
sourceimpl FromStr for NaiveTime
impl FromStr for NaiveTime
Parsing a str into a NaiveTime uses the same format,
%H:%M:%S%.f, as in Debug and Display.
Example
use chrono::NaiveTime;
let t = NaiveTime::from_hms(23, 56, 4);
assert_eq!("23:56:04".parse::<NaiveTime>(), Ok(t));
let t = NaiveTime::from_hms_nano(23, 56, 4, 12_345_678);
assert_eq!("23:56:4.012345678".parse::<NaiveTime>(), Ok(t));
let t = NaiveTime::from_hms_nano(23, 59, 59, 1_234_567_890); // leap second
assert_eq!("23:59:60.23456789".parse::<NaiveTime>(), Ok(t));
assert!("foo".parse::<NaiveTime>().is_err());type Err = ParseError
fn from_str(s: &str) -> Result<NaiveTime, ParseError>
sourceimpl FromStr for Weekday
impl FromStr for Weekday
Parsing a str into a Weekday uses the format %W.
Example
use chrono::Weekday;
assert_eq!("Sunday".parse::<Weekday>(), Ok(Weekday::Sun));
assert!("any day".parse::<Weekday>().is_err());The parsing is case-insensitive.
assert_eq!("mON".parse::<Weekday>(), Ok(Weekday::Mon));Only the shortest form (e.g. sun) and the longest form (e.g. sunday) is accepted.
assert!("thurs".parse::<Weekday>().is_err());sourceimpl FromStr for Month
impl FromStr for Month
Parsing a str into a Month uses the format %W.
Example
use chrono::Month;
assert_eq!("January".parse::<Month>(), Ok(Month::January));
assert!("any day".parse::<Month>().is_err());The parsing is case-insensitive.
assert_eq!("fEbruARy".parse::<Month>(), Ok(Month::February));Only the shortest form (e.g. jan) and the longest form (e.g. january) is accepted.
assert!("septem".parse::<Month>().is_err());
assert!("Augustin".parse::<Month>().is_err());sourceimpl FromStr for DateTime<Local>
impl FromStr for DateTime<Local>
type Err = ParseError
fn from_str(s: &str) -> Result<DateTime<Local>, ParseError>
sourceimpl FromStr for NaiveDate
impl FromStr for NaiveDate
Parsing a str into a NaiveDate uses the same format,
%Y-%m-%d, as in Debug and Display.
Example
use chrono::NaiveDate;
let d = NaiveDate::from_ymd(2015, 9, 18);
assert_eq!("2015-09-18".parse::<NaiveDate>(), Ok(d));
let d = NaiveDate::from_ymd(12345, 6, 7);
assert_eq!("+12345-6-7".parse::<NaiveDate>(), Ok(d));
assert!("foo".parse::<NaiveDate>().is_err());type Err = ParseError
fn from_str(s: &str) -> Result<NaiveDate, ParseError>
sourceimpl FromStr for NaiveDateTime
impl FromStr for NaiveDateTime
Parsing a str into a NaiveDateTime uses the same format,
%Y-%m-%dT%H:%M:%S%.f, as in Debug.
Example
use chrono::{NaiveDateTime, NaiveDate};
let dt = NaiveDate::from_ymd(2015, 9, 18).and_hms(23, 56, 4);
assert_eq!("2015-09-18T23:56:04".parse::<NaiveDateTime>(), Ok(dt));
let dt = NaiveDate::from_ymd(12345, 6, 7).and_hms_milli(7, 59, 59, 1_500); // leap second
assert_eq!("+12345-6-7T7:59:60.5".parse::<NaiveDateTime>(), Ok(dt));
assert!("foo".parse::<NaiveDateTime>().is_err());type Err = ParseError
fn from_str(s: &str) -> Result<NaiveDateTime, ParseError>
impl FromStr for Manufacturer
impl FromStr for Manufacturer
sourceimpl FromStr for BuildMetadata
impl FromStr for BuildMetadata
type Err = Error
fn from_str(
text: &str
) -> Result<BuildMetadata, <BuildMetadata as FromStr>::Err>
sourceimpl FromStr for Prerelease
impl FromStr for Prerelease
type Err = Error
fn from_str(text: &str) -> Result<Prerelease, <Prerelease as FromStr>::Err>
sourceimpl FromStr for Comparator
impl FromStr for Comparator
type Err = Error
fn from_str(text: &str) -> Result<Comparator, <Comparator as FromStr>::Err>
sourceimpl FromStr for VersionReq
impl FromStr for VersionReq
type Err = Error
fn from_str(text: &str) -> Result<VersionReq, <VersionReq as FromStr>::Err>
impl FromStr for ClusterType
impl FromStr for ClusterType
impl FromStr for DerivationPath
impl FromStr for DerivationPath
impl FromStr for ChildIndex
impl FromStr for ChildIndex
sourceimpl FromStr for Signature
impl FromStr for Signature
Decode a signature from hexadecimal.
Upper and lower case hexadecimal are both accepted, however mixed case is rejected.
sourceimpl FromStr for Url
impl FromStr for Url
Parse a string as an URL, without a base URL or encoding override.