> For the complete documentation index, see [llms.txt](https://cristiandis.gitbook.io/ntix/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://cristiandis.gitbook.io/ntix/ntix-documentation/docs-it/api/state.md).

# StateService

## StateService

Gestisce il file di stato JSON che tiene traccia dei pacchetti gestiti da NTIX.

```rust
use ntix_rs::state_management::state_service;
```

### Elementi

| Elemento              | Firma                                                                                                 | Descrizione                                                                 |
| --------------------- | ----------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- |
| `DEFAULT_MAX_RETRIES` | `u32`                                                                                                 | `3` - numero predefinito di tentativi di ripetizione usato dal binario      |
| `get_state_path`      | `fn get_state_path() -> Result<PathBuf, Box<dyn Error>>`                                              | Restituisce `%LOCALAPPDATA%/ntix/state.json`                                |
| `load_state`          | `fn load_state(path: Option<&Path>) -> Option<State>`                                                 | Carica lo stato dal disco; `None` se mancante, corrotto o illeggibile       |
| `save_state`          | `fn save_state(state: &State, path: Option<&Path>, max_retries: u32) -> Result<bool, Box<dyn Error>>` | Salvataggio atomico con ritentativo; restituisce `true` in caso di successo |

### Comportamento

* **Scritture atomiche**: scrive in un `.tmp` file, quindi lo rinomina con il target
* **Ritentativo**: fino a `max_retries` tentativi con backoff lineare (`50ms * attempt`)
* **Pulizia degli elementi obsoleti**: rimuove i file residui `.tmp` prima del caricamento
* **Serializzazione**: `serde_json` con nomi dei campi in camelCase (`scoopBuckets`, `configFiles`)
* **Risoluzione del percorso**: un `None` o un percorso vuoto viene risolto in `get_state_path()`
* **Versione del formato**: la versione corrente del file di stato è `2` (aggiunto `configFiles` tracciamento)
