// Derived from an ICE found in tokio-xmpp during a crater run.
//@ edition:2021

#![allow(dead_code)]

#[derive(Clone)]
struct InfoResult {
    node: Option<std::rc::Rc<String>>
}

struct Agent {
    info_result: InfoResult
}

impl Agent {
    async fn handle(&mut self) {
        let mut info = self.info_result.clone();
        info.node = None;
        let element = parse_info(info);
        let _ = send_element(element).await;
    }
}

struct Element {
}

async fn send_element(_: Element) {}

fn parse(_: &[u8]) -> Result<(), ()> {
    Ok(())
}

fn parse_info(_: InfoResult) -> Element {
    Element { }
}

fn assert_send<T: Send>(_: T) {}

fn main() {
    let agent = Agent { info_result: InfoResult { node: None } };
    // FIXME: It would be nice for this to work. See #94067.
    assert_send(agent.handle());
    //~^ cannot be sent between threads safely
}
