В чем причина утечки памяти в программе на rust?
Устранил утечку переписав большую страшную функцию, в замыкании на две маленькие, вынеся всю логику за пределы замыкания.

Было:
impl UserRssItemsFilter for FilterByLastRequestData {
    fn filter(&self, user: i64, rep: &String, item: &RssItem) -> bool {
        let key = format!("{} {}", user, rep);
        let r = self.last_request_cache.write(|db| {
            let last_request: DateTime<Utc> = if let Some(last_request_str) = db.get(&key) {
                DateTime::parse_from_rfc2822(&last_request_str).unwrap().into()
            } else {
                Utc::now() - Duration::days(2)
            };
            if last_request < item.created_date {
                db.insert(key, item.created_date.to_rfc2822());
                true
            } else {
                false
            }
        }).unwrap();
        self.last_request_cache.save().unwrap();
        r
    }
}

Стало:
impl UserRssItemsFilter for FilterByLastRequestData {
    fn filter(&self, user: i64, rep: &String, item: &RssItem) -> bool {
        let key = format!("{} {}", user, rep);
        let last_request = match  self.last_request_cache.read(|db| {
            match db.get(&key) {
                Some(v) => Some(DateTime::parse_from_rfc2822(v).unwrap().into()),
                None => None
            }
        }).unwrap() {
            Some(v) => v,
            None => Utc::now() - Duration::days(2)
        };

        if last_request < item.created_date {
            self.last_request_cache.write(|db| {
                db.insert(key, item.created_date.to_rfc2822());
            }).unwrap();
            self.last_request_cache.save().unwrap();
            true
        } else {
            false
        }
    }
}
Для тех кто будет читать, но вдруг не знает. Rust может гарантировать отсутствие "гонки данных", но не может во всех возможных случаях гарантировать "отсутствие утечки памяти", хотя определенным образом этому способствует.