A Lexer and Parser for Valves Data Format (known as vdf) written in Go.
- Table of Contents
- Installation
- Usage
- API-Documentation
- Development
- Press
- VDF parser in other languages
- Inspiration
- License
It is go gettable
$ go get github.com/andygrunwald/vdf Given a file named gamestate_integration_consolesample.cfg with content:
"Console Sample v.1" { "uri" "http://127.0.0.1:3000" "timeout" "5.0" "buffer" "0.1" "throttle" "0.5" "heartbeat" "60.0" [...] } Can be parsed with this Go code:
package main import ( "fmt" "os" "github.com/andygrunwald/vdf" ) func main() { f, err := os.Open("gamestate_integration_consolesample.cfg") if err != nil { panic(err) } p := vdf.NewParser(f) m, err := p.Parse() if err != nil { panic(err) } fmt.Println(m) }And it will output:
map[ Console Sample v.1:map[ uri:http://127.0.0.1:3000 timeout:5.0 buffer:0.1 throttle:0.5 heartbeat:60.0 [...] ] ] The official Go package documentation can be found at https://pkg.go.dev/github.com/andygrunwald/vdf.
To run the local unit tests, execute
$ make testTo run the local unit tests and view the unit test code coverage in your local web browser, execute
$ make test-coverage-htmlThis library implements Go fuzzing. The generated fuzzing corpus is stored in andygrunwald/vdf-fuzzing-corpus, to avoid blowing up the size of this repository.
To run fuzzing locally, execute
$ make init-fuzzing # Clone the corpus into testdata/fuzz $ make clean-fuzzing # Clean the local fuzzing cache $ make test-fuzzing # Execute the fuzzing- PHP and JavaScript: rossengeorgiev/vdf-parser
- PHP: devinwl/keyvalues-php
- PHP: lukezbihlyj/vdf-parser
- PHP: EXayer/vdf-converter
- C#: sanmadjack/VDF
- C#: shravan2x/Gameloop.Vdf
- C#: Indieteur/Steam-Apps-Management-API
- C#: GerhardvanZyl/Steam-VDF-Converter
- C++: TinyTinni/ValveFileVDF
- Java: DHager/hl2parse
- JavaScript node-steam/vdf
- JavaScript: Corecii/steam-binary-vdf-ts
- JavaScript: RoyalBingBong/vdfplus
- JavaScript: key-values/key-values-ts
- Python: ValvePython/vdf
- Python: gorgitko/valve-keyvalues-python
- Python: noriah/PyVDF
- Go: marshauf/keyvalues
- Go: Jleagle/steam-go
- Go: Wakeful-Cloud/vdf
- Rust: LovecraftianHorror/vdf-rs
- Rust: Corecii/steam_vdf
- Other (VS-Code Extension): cooolbros/vscode-vdf
- And some more: Github search for vdf valve
The code is inspired by @benbjohnson's article Handwritten Parsers & Lexers in Go and his example sql-parser. Thank you Ben!
This project is released under the terms of the MIT license.