Saltar al contenido

Tu primera modificación real

Cerrar la fase I construyendo algo de punta a punta: un comando propio con su tipo de retorno, su error, su registro y su llamada desde el frontend. Cuarenta líneas que contienen la fase III entera en miniatura.

Lo que vamos a construir

Un comando que lee información de un directorio del sistema y la devuelve estructurada. Sirve porque cruza los tres bordes a la vez: tipos que hay que serializar, un permiso que hace falta, y una llamada al sistema operativo que puede fallar de formas que no controlas.

Los tres bordes, en tu código

Ahora vuelve al nivel 4.5 y localízalos aquí:

  • Borde de tipos. Está en el paso 1: Serialize, el renombrado, y el hecho de que usize y u64 tengan que convertirse en números de JavaScript. Todo eso es el contrato, y hoy lo mantienes a mano en los dos lados. El nivel 19 lo genera.
  • Borde de permisos. Está en lo que no hay en el código: nada declara que el frontend pueda pedir información de una carpeta arbitraria. Y ese es justamente el problema del que habla la sección siguiente.
  • Borde del sistema. Está en read_dir, que puede fallar por razones que no controlas —permisos del sistema, un disco desmontado, una ruta protegida por el sandbox de macOS—. Por eso hay una variante Io que no intenta adivinar.

El defecto de este comando

El ejemplo funciona y tiene un fallo de diseño deliberado, que ya sabes ver después del nivel 4.1: acepta una ruta arbitraria del frontend. Es exactamente el antipatrón que aquella lección señalaba.

En una aplicación real, este comando no recibiría una ruta: recibiría un identificador de algo que el core conoce, y sería el core quien resolviera la ruta dentro de un directorio que él controla.

Rust
// La versión que no cede autoridad.#[tauri::command]async fn info_proyecto(app: tauri::AppHandle, id: String) -> Result<InfoCarpeta, ErrorPayload> {    // El core decide la ruta a partir de su propio directorio de datos.    // El frontend nunca ve ni elige una ruta del sistema de ficheros.    ...}

Déjalo escrito como está para verlo funcionar, y anótalo como deuda. La fase V vuelve sobre este comando exacto para acotarlo con un ámbito, y la fase VII para resolver la ruta como es debido.