This is a validator of directories, it validates if exist **folders** or **files** according to JSON structure.
### Example JSON structure
```JSON
{
"name": "Name of this structure",
"description": "Short descript about this structure",
"folders": [
{
"required": true,
"names": ["foo", "FOO", "Fo o"],
"files": [
{
"required": true,
"names": ["bar", "baar"]
},
{
"required": true,
"names": ["aaaa"]
}
],
"folders": [
{
"required": false,
"names": ["sub_folder"],
"files": [
{
"required": true,
"names": ["file_sub_file"]
}
],
"folders": [
{
"required": false,
"names": ["sub sub folder"],
"files": [
{
"required": true,
"names": ["bbbbb", "bb bb"]
}
]
}
]
}
]
},
{
"required": true,
"names": ["folder 2", "folder2"],
"files": [
{
"required": true,
"names": ["file1", "file 1"]
}
]
}
]
}
```
## Significant typing
```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,
}
```
### Example to use:
```rust
let results = validate_structure(
"/home/sonickseven/test",
JSON_STR,
&vec![".txt", ".rs"], // Minimum required extensions can be one or multiple
&vec![".txt", ".md", ".rs"], // Valid/extensions allowed during validation
);
println!("these are the results: {:?}", results);
```