Skip to content

生命周期

use std::collections::HashMap;
fn main() {
let query = String::from("name=Tom&age=18&hobby=coding");
let qp = QueryParser::from_string(query.clone());
println!("params: {:#?}", qp);
let qp2 = EnhancedQueryParser::from_string(&query);
println!("params: {:#?}", qp2);
let name = qp2.params.get("name").unwrap();
println!("name: {}", name);
}
#[derive(Debug)]
struct QueryParser {
query: String,
params: HashMap<String, String>,
}
impl QueryParser {
fn from_string(query: String) -> Self {
// name=value&name=value
let params: HashMap<String, String> = query
.split("&")
.map(|item| {
let mut parts = item.split("=");
let key = String::from(parts.next().expect("no key"));
let value = String::from(parts.next().unwrap());
(key, value)
})
.collect();
Self { query, params }
}
}
#[derive(Debug)]
struct EnhancedQueryParser<'a> {
query: &'a str,
params: HashMap<&'a str, &'a str>,
}
impl<'a> EnhancedQueryParser<'a> {
fn from_string(query: &'a str) -> Self {
let params: HashMap<&'a str, &'a str> = query
.split("&")
.map(|kv| {
let mut parts = kv.split("=");
(parts.next().unwrap(), parts.next().unwrap())
})
.collect();
Self { query, params }
}
}