Разбор URL и цепочки функций в Rust - PullRequest
2 голосов
/ 12 апреля 2020

Я только начинаю программирование на Rust.

Я пытаюсь получить последнюю часть URL, например, нижеприведенный URL, я хочу получить " resource " part:


    http://example.com/some_path1/some_path2/resource

Код, который у меня сейчас есть:


    let parsed = Url::parse(url).unwrap();
    let segments = parsed.path_segments().map(|c| c.collect::<Vec<_>>()).unwrap();
    let the_resource = segments.last().unwrap();

Должен быть более элегантный способ сделать это.

1) Как мне написать это более элегантно?

2) Есть ли способ использовать только 1 локальную переменную?

Что-то вроде:


    // This of course does not compile because the returns are a mix of Options and Results
    // But the question is, is there a way to chain the function calls (pipes?)

    let the_resource = Url::parse(url)
                           .path_segments()
                           .map(|c| c.collect::<Vec<_>>())
                           .last()
                           .unwrap();

Заранее спасибо

1 Ответ

2 голосов
/ 13 апреля 2020

Как вы думаете, что-то подобное?

extern crate url;

fn get_last(url: &str) -> Result<String, &str> {
    url::Url::parse(url)
        .map_err(|_| "Unable to parse")?
        .path_segments()
        .ok_or("No segments")?
        .last()
        .ok_or("No items")
        .map(String::from)
}

fn main() {
    println!("{:?}", get_last("http://zeljic.com/how/to/parse/url/in/rust"));
}

Детская площадка

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...