validate_directory_structure 0.2.5

A powerful tool to validate directory(Files and folders) structures.
Documentation
# Index

- [Español]https://gitlab.com/public-sources1/validate_directory_structure/-/blob/main/docs/readme_es.md
- [English]https://gitlab.com/public-sources1/validate_directory_structure/-/blob/main/readme.md

# Validador de Estructura de Directorios

Herramienta para validar estructuras de directorios contra un esquema JSON.
Verifica **carpetas** y **archivos** requeridos.

### Características

- Valida estructuras anidadas

- Verifica archivos obligatorios/opcionales

- Soporta validación de extensiones

- Reporte detallado de errores

### Ejemplo de estructura JSON

```JSON
{
  "name": "Prueba",
  "description": "Estructurea de directorio, archivos y carpetas requeridos u opcionales",
  "folders": [
    {
      "required": true,
      "names": ["forest", "trees field"],
      "files": [
        {
          "required": true,
          "names": ["mountain", "hill"]
        }
      ],
      "folders": [
        {
          "names": ["sub_forest", "sub forest"],
          "required": true,
          "files": [
            {
              "names": ["file_sub_forest", "sub forest"],
              "required": true
            },
            {
              "names": ["file_optinal"],
              "required": false
            }
          ]
        }
      ]
    },
    {
      "required": false,
      "names": ["rivers"],
      "files": [
        {
          "required": true,
          "names": ["aaaa", "bbbbb"]
        }
      ]
    }
  ]
}
```

## Tipado relevante

```rust
#[derive(Debug, Serialize)]
pub enum ItemType {
  File,
  Folder,
}

#[derive(Debug, Serialize)]
pub enum AlertType {
  Warning, // --> Works only for property "required" false in JSON
  MissingItem,
  ExtraItem,
  ErrorReadingFile,
}

#[derive(Debug, Serialize)]
pub struct AlertFileStructure {
  pub path: String,
  pub item_type: ItemType,
  pub alert_type: AlertType,
}
```

### Uso:

```toml
# Cargo.toml

[dependencies]
validate_directory_structure = "0.2.4"
```

```rust
    use validate_directory_structure::ValidateDirTree;

    let validate_structure = ValidateDirTree {
        required_extensions: vec!["html", "css", "js"], // extensions of files mandatory
        valid_extensions: vec!["ts", "tsx"], // These extensions aren't mandatory on folder
    };

    let results = validate_structure.validate_structure("/your/folder/path", YOUR_JSON_STRUCTUEE);

    println!("these are the results: {:?}", results);
```

### Direct my_project_example

```
/ my_project_example
├── trees field                   🗹
│   ├── mountain.html             🗹
│   ├── mountain.js               🗹
│   ├── mountain.css              🗹
│   ├── main.js                   🗷 // no definido en la estructura JSON
│   └── sub_forest                🗹
│       ├── file_optinal.html     🗹
│       ├── file_optinal.js       🗹
│       ├── file_optinal.css      🗹
│       └── file_optinal.lock     🗷 // no definido en la estructura JSON
│       └── file_optinal.ts       🗹
└── ocean                         🗷 // no definido en la estructura JSON
    ├── pacific.html              🗷 // Solo muestra error en la carpeta padre 
    └── pacific.js                🗷 // Solo muestra error en la carpeta padre
```

### Sample Output `Vec<AlertFileStructure>`

Lista de errores

- **ResultValidationTypes**:

  - Error - > File "/trees field/main.js" es un **ExtraFile** porque no fue
    definido en la estructura JSON
  - Error - > File "/trees field/sub_forest/file_sub_forest.js" es un
    **MissingFile** porque fue definido en el JSON
  - Error - > File "/trees field/sub_forest/file_sub_forest.css" es un
    **MissingFile** porque fue definido en el JSON
  - Error - > File "/trees field/sub_forest/file_sub_forest.html" es un
    **MissingFile** porque fue definido en el JSON
  - Error - > File "/trees field/sub_forest/file_optinal.lock" es un **ExtraFile**
    porque no fue defino en el JSON
  - Warning - > Folder "/rivers" fue definido pero no es obligatorio que exista
    **ExtraFile**
  - Error - > Folder "/ocean" es un **ExtraFile** porque no fue definido en el
    JSON

- **list_of_files_found**:

```Rust
  {
    "id_area_estudio-id_poligono_base": "/home/sonickseven/www/anla-validator/geoEjemeplo/estudio_ambiental/area_estudio/PoligonoBase",
    "id_ambiental-id_capa_hueco": "/home/sonickseven/www/anla-validator/geoEjemeplo/estudio_ambiental/ambiental/CapaHueco",
    "id_forestal-id_puntos": "/home/sonickseven/www/anla-validator/geoEjemeplo/estudio_ambiental/forestal/PuntosDentro"
  }
```

### Comando para correr en local 

`cargo run src/main.rs`