Не примитивен примитивному составу в Rust? - PullRequest
0 голосов
/ 11 сентября 2018

Я пытаюсь проверить IP-адрес в Rust, но не могу найти решение, преобразующее str в u8, которое не предполагает использование ночных Rust:

use std::net::{IpAddr, Ipv4Addr};

fn verify_address(address: String) -> bool {
    let v: Vec<&str> = address.split('.').collect();

    let v_u8: Vec<u8> = v.iter().map(|c| *c.to_owned() as u8).collect();

    let addr = IpAddr::V4(Ipv4Addr::new(v_u8[0], v_u8[1], v_u8[2], v_u8[3]));
        //.expect("ERR: Error parsing IPv4 address!");

    if !addr.is_ipv4()  {
        return false;
    }
    return true;
}
error[E0605]: non-primitive cast: `str` as `u8`
 --> src/lib.rs:6:42
  |
6 |     let v_u8: Vec<u8> = v.iter().map(|c| *c.to_owned() as u8).collect();
  |                                          ^^^^^^^^^^^^^^^^^^^
  |
  = note: an `as` expression can only be used to convert between primitive types. Consider using the `From` trait

1 Ответ

0 голосов
/ 11 сентября 2018

Пожалуйста, перечитайте главу о обработке ошибок .Вам не нужно все это:

use std::net::Ipv4Addr;

fn main() {
    let ip = "127.0.0.1".parse::<Ipv4Addr>();

    match ip {
        Ok(ip) => println!("valid"),
        Err(e) => println!("invalid"),
    }
}

По вашему вопросу вы можете использовать примитивное приведение только для ... примитивных типов.Вы должны использовать From и Into или parse, если конвертируете &str в другой тип.

...