Arc нужно клонировать до move в замыкание, которое запускается на потоке. Если данные используются только на чтение, то этого будет достаточно, ...
#[derive(Debug)]
pub struct Data {
pub name: String,
pub dtime: chrono::DateTime<chrono::Local>,
pub id: i32,
pub n: u32,
}
//
let data = Data { name: "txt".to_string(), dtime: DateTime::parse_from_rfc3339("2023-07-10T10:20:30+03:00").unwrap().into(), id: 188, n: 5 };
можешь попробовать сделать функцию, которая будет возвращать значения переменных i и p
Но можно сделать так: macro_rules! f4 { ...