Os erros da sua biblioteca
A classe do erro é o contrato — e um erro genérico mata a distinção na fronteira do handle.
Quem usa a sua biblioteca escreve handle. O que ele consegue escrever ali é decidido inteiramente por você.
dataforge
record FalhaDeLeitura:
caminho: String
motivo: String
record FalhaDeFormato:
linha: Integer
esperado: String
action carregar(caminho):
given not caminho.endswith(".csv"):
trigger FalhaDeFormato(1, "um arquivo .csv")
given caminho.startswith("/nao-existe"):
trigger FalhaDeLeitura(caminho, "nao encontrado")
yield ["ok"]
monitor:
carregar("dados.txt")
handle FalhaDeFormato as e:
f := e.value
out $"linha {f.linha}: esperava {f.esperado}"
handle FalhaDeLeitura as e:
f := e.value
out $"nao li {f.caminho}: {f.motivo}"
assert carregar("dados.csv") is ["ok"]Uma base por família#
Quando a biblioteca tem seis erros, quem a usa quase nunca quer os seis separados — quer “qualquer coisa que a sua biblioteca levante”. Uma base comum entrega isso, e ela tem de ser conferida nas duas direções.
| A conferir | O que quebra sem isso |
|---|---|
| a base pega todas as suas | uma nova nasce fora da família, e o handle do usuário passa a deixá-la escapar |
| a base não pega as de fora | handle SuaBase vira um handle sem tipo — e engole o 1 / 0 do usuário |
A mensagem diz o que fazer#
| Ruim | Bom |
|---|---|
Invalid assignment target | 'no' é palavra reservada e não pode receber valor. Escolha outro nome. |
KeyError: cidad | A chave "cidad" não está neste vault. Você quis dizer "cidade"? |
Connection failed | Não conectei em localhost:5432 — o banco está no ar? 'docker compose up banco' sobe o do projeto. |
Continue em Erros e O vault de opções.