Structs que prestan en Rust
Un struct que guarda una referencia lleva un lifetime, atado a los datos que lee.
struct Header<'a> {
name: &'a str,
value: &'a str,
}
impl<'a> Header<'a> {
fn parse(line: &'a str) -> Option<Header<'a>> {
let (name, value) = line.split_once(": ")?;
Some(Header { name, value })
}
}
fn main() {
let raw = String::from("Content-Type: text/html");
if let Some(header) = Header::parse(&raw) {
println!("{} = {}", header.name, header.value);
}
println!("{:?}", Header::parse("nonsense").is_none());
}
Cómo funciona
- El lifetime se declara en el struct y se usa en el campo.
- El struct no puede sobrevivir al texto al que apunta.
- Así evitan asignar memoria los parsers de copia cero.
Palabras clave y builtins usados aquí
OptionSomeStringfnifimplletstrstruct
El intento, en números
- Líneas
- 19
- Caracteres a escribir
- 415
- Tokens
- 150
- Ritmo de tres estrellas
- 105 tpm
Al ritmo de tres estrellas de 105 tokens por minuto, este intento toma unos 86 segundos.
Paso 2 de 4 en Anotaciones de lifetime; paso 2 de 11 en Lifetimes y mutabilidad interior.