Как использовать статические времена жизни с потоками?

В настоящее время я борюсь с временами жизни в Rust (1.0), особенно когда речь идет о передаче структур по каналам.

Как бы я получить этот простой пример для компиляции:

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();
    }
}

Я получил:

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...

Я понимаю, почему это так (line живет только одну итерациюfor), но я не могу понять, как это правильно сделать.

Должен ли я, как подсказывает компилятор, попытаться преобразовать&str в&'static str?Я теряю память, если каждая строка будет иметь'static продолжительность жизни?Когда я должен использовать'static тем не мение? Это то, что я должен стараться избегать или это совершенно нормально?Есть ли лучший способ прохожденияStringS в структурах по каналам?

Я прошу прощения за эти наивные вопросы. Я провел довольно много времени в поисках, но я не могу обернуть голову вокруг этого. Вероятно, это мешает моему динамическому языковому опыту :)

В сторону: есть&input[..] для преобразованияString в&str считается нормально? Это единственный стабильный способ, который я мог найти, чтобы сделать это.

Ответы на вопрос(2)

Ваш ответ на вопрос