> ## Documentation Index
> Fetch the complete documentation index at: https://acme-c84a37e5.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Result Type

> Resultado discriminado para operaciones con éxito o error, con métricas opcionales

## Visión general

Las funciones de la librería devuelven un resultado que evita excepciones y facilita el control de flujo.

* `run` devuelve un objeto con `ok: true` y `data`, o `ok: false` y `error`.
* `all` devuelve un array con resultados por tarea: `ok`, `error` o `skipped`.
* Las métricas opcionales ayudan a observar intentos, reintentos y duración.

## `RunResult` en `run`

```typescript theme={null}
import { run } from "tryo";

type User = { id: string; name: string };

const result = await run<User>(() => fetch("/api/user").then((r) => r.json()));

if (result.ok) {
  console.log(result.data);
} else {
  console.error(result.error.code);
}
```

Estructura del resultado:

* Éxito: `{ ok: true, data, error: null, metrics? }`
* Error: `{ ok: false, data: null, error, metrics? }`

Las métricas incluyen:

* `totalAttempts`
* `totalRetries`
* `totalDuration`
* `lastError?`

## `RunAllItemResult` en `all`

```typescript theme={null}
import { all } from "tryo";

const tasks = [
  () => fetch("/a").then((r) => r.text()),
  () => fetch("/b").then((r) => r.text()),
  () => fetch("/c").then((r) => r.text()),
];

const results = await all<string>(tasks);

for (const r of results) {
  if (r.status === "ok") console.log(r.data);
  if (r.status === "error") console.error(r.error.code);
}
```

Estados posibles por ítem:

* `ok`: tarea exitosa con `data`
* `error`: tarea fallida con `error`
* `skipped`: tarea no ejecutada por cancelación o fail-fast

## Helpers de tipo para `all`

La librería exporta utilidades para discriminar resultados y mejorar el tipado:

```typescript theme={null}
import { isSuccess, type SuccessResult, type ErrorResult } from "tryo";

const results = await all<number>([
  async () => 1,
  async () => {
    throw new Error("x");
  },
]);

const successes: SuccessResult<number>[] = results.filter(isSuccess);
const failures: ErrorResult<any>[] = results.filter(
  (r) => r.status === "error"
);
```
