h0w4rd
@h0w4rd
Python dev.

Rust, как вернуть struct?

Добрый вечер, есть такая функция:
use xmlparser;
use std::fs;

fn getconfig(path: String) -> Option<xmlparser::Tokenizer + 'static> {
  let contents = fs::read_to_string(path)?;
  let parser = xmlparser::Tokenizer::from(&contents[..]);
  return Some(parser);
}

И компилятор никак не хочет смирится и вернуть структуру. Что тут можно сделать?
  • Вопрос задан
  • 295 просмотров
Решения вопроса 1
@forspamonly2
struct вернуть не проблема - он отдаётся вместе с владением наружу, и всё.

а проблема тут в том, что конкретно этот xml-парсер позиционируется как zero-allocation, то есть он не занимает лишнюю память, а при получении значений тэгов и атрибутов возвращает слайсы самого исходного текста xml.

и компилятор тут ругается вполне осмысленно: вы пытаетесь отдать владение парсером наружу, чтобы вызывающая функция сама грохнула его, после того как попользуется. но при этом прочитанный из файла текст xml остаётся во владении функции getconfig, и грохнется сразу же при её завершении. а этот парсер без него не может.

вам проще будет перекомпоновать код так, чтобы чтение файла, инстанцирование парсера и получение данных были в одном блоке. главное не забудьте склонировать полученные данные перед отдачей наружу.

либо взять какой-нибудь другой парсер, который не стесняется получать себе память сам.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы