Code Monkey home page Code Monkey logo

Comments (5)

SimonSapin avatar SimonSapin commented on July 24, 2024

What does "raise an error" mean? Is it a compile-time error or run-time error? "url does not live long enough" sounds like a compile-time error, but that code builds fine for me. Is this the same code that the one that triggers the errors?

I can get this error message with code like this:

extern crate url;
use url::Url;

fn main(){
    let raw_url = "";
    let url_r = Url::parse(raw_url);
    let domain = match url_r {
        Ok(url) => {
            match url.domain() {
                Some(d) => d,
                None => return
            }
        }
        Err(e) => {
            println!("{}", e);
            return
        }
    };
    println!("{}", domain)
}

domain() returns a Option<&'a str> with a string slice that points to existing memory. That memory has to be kept around somewhere (such as a local variable) at least as long as the result of domain() exists. Here, the url_r variable (of type Result<Url, url::ParseError>) owns its contents, but it is moved out of in the Ok(url) pattern, which makes a url variable of type Url that owns its contents. url only exists in that match branch, so the result of domain() can only be used there. If you change the pattern to Ok(ref url), the url variable will be a reference &Url to the content of the url_r variable, and therefore the result of domain() will have a longer life time: that of url_r.

from rust-url.

kevinburke avatar kevinburke commented on July 24, 2024

You are right, I meant a compile time error.

I'm still a little confused about what I need to do to get this to work - which almost certainly has to do with my inexperience with Rust. Still though, it'd be nice if the documentation had examples of how best to work with URL's in this library, without panicking if something bad gets parsed.

from rust-url.

kevinburke avatar kevinburke commented on July 24, 2024

I should note I tried changing the line to Ok(ref url) and I'm still getting an error - a slightly different error.

error: `(url_r:core::result::Ok).0` does not live long enough

from rust-url.

SimonSapin avatar SimonSapin commented on July 24, 2024

The code you copied in the first message compiles fine for me, so I suspect that the code trigger an error for you is not the same. Please provide the actual code that triggers the error so that I can reproduce it. (Preferably, a minimal form of it.)

from rust-url.

kevinburke avatar kevinburke commented on July 24, 2024

Hmm, you're right, it turns out it had to do with another part of my program - sorry :(

from rust-url.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.