Skip to content

eriksonwilliam/jpath

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

jpath

Um mini-jq: uma ferramenta de linha de comando em Rust que consulta JSON por caminho (.items[*].name). Lê JSON da entrada padrão, aplica o caminho e imprime o resultado. Núcleo puro (parser de caminho + consulta) com cobertura de testes 100% (linhas); o main é só a casca de I/O.

echo '{"items":[{"name":"Ada"},{"name":"Grace"}]}' | jpath '.items[*].name'
# "Ada"
# "Grace"

O que o caminho suporta

Sintaxe Significado Exemplo
.campo acessa um campo de objeto .user.name
[i] índice de array .items[0]
[*] curinga: mapeia sobre o array .items[*].price
. (ou vazio) a raiz (o valor inteiro) .

Encadeie à vontade: .data.users[*].email. O ponto inicial é opcional (items[0] funciona igual a .items[0]).

Por que existe

jq é maravilhoso e gigante. Este é o oposto: um recorte pequeno o suficiente para caber na cabeça — dá pra ler o parser inteiro em cinco minutos e entender como um caminho vira uma travessia de estrutura. É um exercício de escrever uma mini-linguagem, com o núcleo 100% testado (incluindo os caminhos de erro).

Como rodar

cargo build --release
echo '{"a":{"b":[10,20,30]}}' | ./target/release/jpath '.a.b[1]'   # 20

# instalar no PATH:
cargo install --path .
cat dados.json | jpath '.registros[*].id'

Códigos de saída: 0 sucesso · 1 caminho não casou (campo/índice ausente) · 2 uso incorreto ou JSON inválido.

Arquitetura

src/
├── lib.rs    # parse_path() + query() + erros  — 100% testado (cargo-llvm-cov)
└── main.rs   # casca: lê stdin/args, imprime, mapeia erros para exit codes

Testes e cobertura

cargo test
cargo llvm-cov --ignore-filename-regex 'main\.rs' --summary-only   # linhas: 100%

Licença

MIT.

About

No description, website, or topics provided.

Resources

License

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages