JustFrog
@JustFrog

Как убрать кавычки в результате вывода содержимого файла после его чтения в Rust?

Здравствуйте!
Мне нужно сделать так, чтобы при отправке GET запроса на сервер, выдавалась страничка, в которой будет выведен текст из файлика.
Я написал (стыбзил из документаций) вот такой код, который, конечно, справляется со своей задачей, но есть проблема: на странице весь текст обвёрнут кавычками ""
Что должно вывести: TEEEEEST
Что выводит: "TEEEEEST"
Сам код:
use actix_web::{ get, App, HttpServer, Responder };
use std::fs::File;
use std::io;
use std::io::prelude::*;
use std::path::Path;

#[get("/index")]
async fn index() -> impl Responder {
	let path = Path::new("test.txt");
	return format!("{:?}", cat(path));
}

#[actix_web::main]
async fn main() -> io::Result<()> {
	HttpServer::new(|| App::new().service(index))
		.bind(("127.0.0.1", 8080))?
		.run()
		.await
}

fn cat(path: &Path) -> io::Result<String> {
    let mut f = File::open(path)?;
    let mut s = String::new();
    match f.read_to_string(&mut s) {
        Ok(_) => Ok(s),
        Err(e) => Err(e),
    }
}

Полазил по документации, погуглил, но до сих пор не нашёл решение проблемы
Возможно, потому что вопрос не корректно формулировал :(
Можете помочь?
  • Вопрос задан
  • 164 просмотра
Решения вопроса 1
vabka
@vabka Куратор тега Rust
{:?} использует Debug для форматирования. В твоём случае он тебе не нужен.

Попробуй вот так:
#[get("/index")]
pub async fn index() -> impl Responder {
    let path = Path::new("test.txt");
    spawn_blocking(|| cat(path)).await?
}

fn cat(path: &Path) -> io::Result<String> {
    let mut f = File::open(path)?;
    let mut s = String::new();
    match f.read_to_string(&mut s) {
        Ok(_) => Ok(s),
        Err(e) => Err(e),
    }
}


Кстати, твоя функция cat использует синхронный IO, так что её следует вызывать в spawn_blocking.
Но лучше будет перейти на tokio или async_std
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы