Pular para o conteúdo

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 conferirO que quebra sem isso
a base pega todas as suasuma nova nasce fora da família, e o handle do usuário passa a deixá-la escapar
a base não pega as de forahandle SuaBase vira um handle sem tipo — e engole o 1 / 0 do usuário

A mensagem diz o que fazer#

RuimBom
Invalid assignment target'no' é palavra reservada e não pode receber valor. Escolha outro nome.
KeyError: cidadA chave "cidad" não está neste vault. Você quis dizer "cidade"?
Connection failedNã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.