# Trait std::str::FromStr

1.0.0 · source ·

    pub trait FromStr: Sized {
        type Err;

        // Required method
        fn from_str(s: &str) -> Result<Self, Self::Err>;
    }

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());

Run

## Required Associated Types§

source

#### type Err

The associated error which can be returned from parsing.

## Required Methods§

source

#### 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);

Run

## Object Safety§

This trait is not object safe.

## Implementors§

1.7.0 · source§

### impl FromStr for IpAddr

§

#### type Err = AddrParseError

source§

### impl FromStr for SocketAddr

§

#### type Err = AddrParseError

source§

### impl FromStr for bool

§

#### type Err = ParseBoolError

1.20.0 · source§

### impl FromStr for char

§

#### type Err = ParseCharError

source§

### impl FromStr for f32

§

#### type Err = ParseFloatError

source§

### impl FromStr for f64

§

#### type Err = ParseFloatError

source§

### impl FromStr for i8

§

#### type Err = ParseIntError

source§

### impl FromStr for i16

§

#### type Err = ParseIntError

source§

### impl FromStr for i32

§

#### type Err = ParseIntError

source§

### impl FromStr for i64

§

#### type Err = ParseIntError

source§

### impl FromStr for i128

§

#### type Err = ParseIntError

source§

### impl FromStr for isize

§

#### type Err = ParseIntError

source§

### impl FromStr for u8

§

#### type Err = ParseIntError

source§

### impl FromStr for u16

§

#### type Err = ParseIntError

source§

### impl FromStr for u32

§

#### type Err = ParseIntError

source§

### impl FromStr for u64

§

#### type Err = ParseIntError

source§

### impl FromStr for u128

§

#### type Err = ParseIntError

source§

### impl FromStr for usize

§

#### type Err = ParseIntError

1.45.0 · source§

### impl FromStr for OsString

§

#### type Err = Infallible

source§

### impl FromStr for Ipv4Addr

§

#### type Err = AddrParseError

source§

### impl FromStr for Ipv6Addr

§

#### type Err = AddrParseError

1.5.0 · source§

### impl FromStr for SocketAddrV4

§

#### type Err = AddrParseError

1.5.0 · source§

### impl FromStr for SocketAddrV6

§

#### type Err = AddrParseError

1.35.0 · source§

### impl FromStr for NonZeroI8

§

#### type Err = ParseIntError

1.35.0 · source§

### impl FromStr for NonZeroI16

§

#### type Err = ParseIntError

1.35.0 · source§

### impl FromStr for NonZeroI32

§

#### type Err = ParseIntError

1.35.0 · source§

### impl FromStr for NonZeroI64

§

#### type Err = ParseIntError

1.35.0 · source§

### impl FromStr for NonZeroI128

§

#### type Err = ParseIntError

1.35.0 · source§

### impl FromStr for NonZeroIsize

§

#### type Err = ParseIntError

1.35.0 · source§

### impl FromStr for NonZeroU8

§

#### type Err = ParseIntError

1.35.0 · source§

### impl FromStr for NonZeroU16

§

#### type Err = ParseIntError

1.35.0 · source§

### impl FromStr for NonZeroU32

§

#### type Err = ParseIntError

1.35.0 · source§

### impl FromStr for NonZeroU64

§

#### type Err = ParseIntError

1.35.0 · source§

### impl FromStr for NonZeroU128

§

#### type Err = ParseIntError

1.35.0 · source§

### impl FromStr for NonZeroUsize

§

#### type Err = ParseIntError

1.32.0 · source§

### impl FromStr for PathBuf

§

#### type Err = Infallible

source§

### impl FromStr for String

§

#### type Err = Infallible