Como uso vidas estáticas com threads?

Atualmente, estou lutando com as vidas em Rust (1.0), especialmente quando se trata de passar estruturas por canais.

Como eu obteria este exemplo simples para compilar:

use std::sync::mpsc::{Receiver, Sender};
use std::sync::mpsc;
use std::thread::spawn;
use std::io;
use std::io::prelude::*;

struct Message<'a> {
    text: &'a str,
}

fn main() {
    let (tx, rx): (Sender<Message>, Receiver<Message>) = mpsc::channel();

    let _handle_receive = spawn(move || {
        for message in rx.iter() {
            println!("{}", message.text);
        }
    });

    let stdin = io::stdin();
    for line in stdin.lock().lines() {
        let message = Message {
            text: &line.unwrap()[..],
        };
        tx.send(message).unwrap();
    }
}

Eu recebo:

error[E0597]: borrowed value does not live long enough
  --> src/main.rs:23:20
   |
23 |             text: &line.unwrap()[..],
   |                    ^^^^^^^^^^^^^ does not live long enough
...
26 |     }
   |     - temporary value only lives until here
   |
   = note: borrowed value must be valid for the static lifetime...

Eu posso ver por que isso é (line vive apenas por uma iteração defor), mas não consigo descobrir qual é a maneira correta de fazer isso.

Devo, como o compilador sugere, tentar converter o&str para dentro&'static str?Estou vazando memória se cada linha tiver um'static tempo de vida?Quando devo usar'static de qualquer forma? É algo que eu deveria tentar evitar ou está perfeitamente bem?Existe uma maneira melhor de passarStrings em estruturas via canais?

Peço desculpas por essas perguntas ingênuas. Já passei bastante tempo pesquisando, mas não consigo entender direito. Provavelmente é o meu histórico de linguagem dinâmica atrapalhando :)

Como um aparte: É&input[..] para converter umString dentro de&str considerado bom? É a única maneira estável que eu poderia encontrar para fazer isso.

questionAnswers(2)

yourAnswerToTheQuestion