pub trait FromStr: Sized {
type Err;
// Required method
fn from_str(s: &str) -> Result<Self, Self::Err> ⓘ;
}
dep_bumpalo
only.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;
#[derive(Debug, PartialEq)]
struct Point {
x: i32,
y: i32
}
#[derive(Debug, PartialEq, Eq)]
struct ParsePointError;
impl FromStr for Point {
type Err = ParsePointError;
fn from_str(s: &str) -> Result<Self, Self::Err> {
let (x, y) = s
.strip_prefix('(')
.and_then(|s| s.strip_suffix(')'))
.and_then(|s| s.split_once(','))
.ok_or(ParsePointError)?;
let x_fromstr = x.parse::<i32>().map_err(|_| ParsePointError)?;
let y_fromstr = y.parse::<i32>().map_err(|_| ParsePointError)?;
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);
// Invalid input string
assert!(Point::from_str("(1 2)").is_err());
Required Associated Types§
Required Methods§
1.0.0 · Sourcefn from_str(s: &str) -> Result<Self, Self::Err> ⓘ
fn from_str(s: &str) -> Result<Self, Self::Err> ⓘ
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);
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.
Implementors§
1.0.0 · Source§impl FromStr for SocketAddr
impl FromStr for SocketAddr
type Err = AddrParseError
Source§impl FromStr for Month
Returns a Month
from a string containing either the full month name,
or any of the month ASCII abbreviations.
impl FromStr for Month
Returns a Month
from a string containing either the full month name,
or any of the month ASCII abbreviations.
Source§impl FromStr for Weekday
Returns a Weekday
from a string containing either the full weekday name,
or any of the weekday ASCII abbreviations.
impl FromStr for Weekday
Returns a Weekday
from a string containing either the full weekday name,
or any of the weekday ASCII abbreviations.
Source§impl FromStr for devela::_dep::log::LevelFilter
impl FromStr for devela::_dep::log::LevelFilter
type Err = ParseLevelError
1.5.0 · Source§impl FromStr for SocketAddrV4
impl FromStr for SocketAddrV4
type Err = AddrParseError
1.5.0 · Source§impl FromStr for SocketAddrV6
impl FromStr for SocketAddrV6
type Err = AddrParseError
§impl FromStr for Zoned
Parses a zoned timestamp from the Temporal datetime format.
impl FromStr for Zoned
Parses a zoned timestamp from the Temporal datetime format.
See the fmt::temporal
for more information on
the precise format.
Note that this is only enabled when the std
feature
is enabled because it requires access to a global
TimeZoneDatabase
.
§impl FromStr for devela::_dep::tracing::level_filters::LevelFilter
impl FromStr for devela::_dep::tracing::level_filters::LevelFilter
type Err = ParseLevelFilterError
§impl FromStr for Format
impl FromStr for Format
type Err = Infallible
Source§impl<const CAP: usize> FromStr for ArrayString<CAP>
impl<const CAP: usize> FromStr for ArrayString<CAP>
type Err = CapacityError
Source§impl<const V: i8> FromStr for devela::_info::examples::niche::NonValueI8<V>
Available on doc
only.
impl<const V: i8> FromStr for devela::_info::examples::niche::NonValueI8<V>
doc
only.