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 queusizeyu64tengan 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 varianteIoque 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.
// 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.