#[derive(Clone)]
pub struct Language {
_abbrev: String,
_data: Arc<LanguageData>,
_region: Option<Region>,
}
impl Language {
fn parse_tag<T: ToString>(tag: T) -> Option<(String, String)> {
...
if region_abbrev.is_none() {
let r = Region::parse(language_abbrev);
if let Some(a) = r {
region_abbrev = Some(a.to_string().to_lowercase().as_str());
}
}
...
}
}
In the range of code a.to_string().to_lowercase() I'm getting:
temporary value dropped while borrowed
consider using a `let` binding to create a longer lived valuerustcE0716
language.rs(60, 76): temporary value is freed at the end of this statement
language.rs(63, 12): borrow later used here
I did try binding this range to a variable b, but the issue persists:
let b = a.to_string().to_lowercase();
region_abbrev = Some(b.as_str());
With this the error goes on the entire b.as_str() range.
paste the entire error message. It's hard to figure out what the error points to if you only provide the message, not the line numbers or any other context.
post a complete, minimal example on the Playground instead of cutting off arbitrary, valuable pieces of the code.
don't start field names with an underscore. Leading underscore means "this variable is unused".
Accordingly, I don't see what the type of region_abbrev is or where it is declared/supposed to be used. Anyway, the string returned from to_lowercase() is a temporary, so you can't store a reference to it (i.e., you can't store the result of .as_str()), because it would be invalidated when the temporary is dropped.
Sorry for lack of information. Then, since .as_str() returns a temporary value, I need to change region_abbrev's type. region_abbrev is a Option<&str> value, so I think I need to change it to Option<String> in my case.