Avatar ·

Cómo convertir entre String, &str, Vec<u8> y &[u8] en Rust

¡Hola a todos! Recientemente empecé a aprender Rust y constantemente me confundo con las conversiones entre strings y arrays de bytes. El problema surge porque en Rust hay diferentes tipos para strings: String, &str, y para bytes: Vec<u8> y &[u8].

Por ejemplo, escribo un programa simple que lee un archivo, procesa strings y muestra el resultado. Pero constantemente obtengo errores de compilación porque no puedo entender cómo convertir correctamente un tipo en otro.

use std::fs;

fn main() {
    let data: Vec<u8> = fs::read("example.txt").unwrap();
    // ¿Cómo convertir Vec<u8> a String?
    let text: String = ???;
    
    // Luego necesito pasar parte del string a una función que acepta &str
    process_part(&text);
    
    // Y luego necesito convertir el resultado nuevamente a Vec<u8> para escribir en un archivo
    let output: Vec<u8> = ???;
    fs::write("output.txt", output).unwrap();