# Referência Rápida de TOML

*Tabelas, strings, números, datas, arrays*

> Source: TOML Specification (toml.io) · MIT

## Sintaxe

### Regras Básicas

| Command | Description |
|---------|-------------|
| `key = value` | Par chave-valor (um por linha) |
| `#` | Comentário (até o final da linha) |
| `Sensível a maiúsculas` | Chaves e valores diferenciam maiúsculas e minúsculas |
| `UTF-8` | Arquivos devem ser UTF-8 válido |
| `Sem null` | TOML não tem tipo null |

### Exemplo Mínimo

```
title = "My App"
debug = true
port = 8080
```

## Strings

### Tipos de String

| Command | Description |
|---------|-------------|
| `"basic"` | String básica (suporta escapes) |
| `'literal'` | String literal (sem escapes) |
| `"""multi"""` | String básica multi-linha |
| `'''multi'''` | String literal multi-linha |

### Exemplos

```
basic = "Hello\nWorld"
literal = 'C:\Users\path'
multi = """
Line one
Line two"""
```

### Sequências de Escape

| Command | Description |
|---------|-------------|
| `\n  \t  \r` | Nova linha, tab, retorno de carro |
| `\\` | Barra invertida |
| `\uXXXX` | Unicode (hex de 4 dígitos) |
| `\UXXXXXXXX` | Unicode (hex de 8 dígitos) |

## Números e Booleanos

### Tipos Numéricos

| Command | Description |
|---------|-------------|
| `42` | Inteiro |
| `1_000_000` | Inteiro com sublinhados |
| `0xff / 0o77 / 0b11` | Hexadecimal, octal, binário |
| `3.14` | Decimal |
| `5e+22 / 1e-2` | Notação científica |
| `inf / nan` | Valores decimais especiais |
| `true / false` | Booleano (apenas minúsculas) |

### Exemplos

```
count = 42
price = 19.99
hex_color = 0xFF5733
enabled = true
```

## Datas

### Tipos de Data e Hora

| Command | Description |
|---------|-------------|
| `2026-03-26T10:30:00Z` | Data-hora com fuso horário (UTC) |
| `2026-03-26T10:30:00-05:00` | Data-hora com fuso horário (EST) |
| `2026-03-26T10:30:00` | Data-hora local (sem fuso horário) |
| `2026-03-26` | Data local |
| `10:30:00` | Hora local |

### Exemplos

```
created = 2026-03-26T10:30:00Z
birthday = 1990-05-15
alarm = 07:00:00
```

## Tabelas

### Sintaxe de Tabela

```
[server]
host = "localhost"
port = 8080

[server.ssl]
enabled = true
cert = "/path/to/cert.pem"
```

### Array de Tabelas

```
[[users]]
name = "Alice"
role = "admin"

[[users]]
name = "Bob"
role = "user"
```

### Regras

| Command | Description |
|---------|-------------|
| `[name]` | Cabeçalho de tabela padrão |
| `[a.b.c]` | Chave com pontos — tabela aninhada |
| `[[name]]` | Array de tabelas |
| `Sem redefinição` | Não é possível definir a mesma tabela duas vezes |

## Arrays

### Sintaxe de Array

```
colors = ["red", "green", "blue"]
numbers = [1, 2, 3]
```

### Array Multi-linha

```
hosts = [
  "alpha.example.com",
  "beta.example.com",
]
```

*Vírgula final é permitida em arrays TOML*

### Regras

| Command | Description |
|---------|-------------|
| `Mesmo tipo` | Todos os elementos devem ser do mesmo tipo |
| `Vírgula final` | Permitida após o último elemento |
| `Novas linhas` | Arrays podem abranger múltiplas linhas |

## Tabelas Em Linha

### Sintaxe de Tabela Em Linha

```
point = { x = 1, y = 2 }
user = { name = "Alice", admin = true }
```

### Regras

| Command | Description |
|---------|-------------|
| `Linha única` | Deve aparecer em uma única linha |
| `Sem vírgula final` | Vírgula final não é permitida |
| `Sem novas linhas` | Não pode abranger múltiplas linhas |
| `Sem adicionar chaves` | Não é possível adicionar chaves à tabela em linha depois |

### Em Linha vs Padrão

```
# Em linha — compacto, uma linha
db = { host = "localhost", port = 5432 }
# Padrão — legível, extensível
[db]
host = "localhost"
port = 5432
```

## Padrões Comuns

### pyproject.toml

```
[project]
name = "myapp"
version = "1.0.0"
dependencies = ["flask>=3.0"]
```

### Cargo.toml

```
[package]
name = "myapp"
version = "0.1.0"
edition = "2021"
```

### Dicas

| Command | Description |
|---------|-------------|
| `taplo` | Kit TOML — formatador e linter |
| `Sem null` | Omitir a chave em vez de definir null |
| `Sem âncoras` | Diferente do YAML, sem sistema de referência/alias |
| `Estrito` | Sem chaves duplicadas, sem arrays de tipos mistos |
