Parsetoml is a Nim library to parse TOML files (https://github.com/toml-lang/toml). Currently it supports v0.5.0 of the TOML specification. It passes all of the validation tests in the validation suite, including various 0.5.0 examples.
Use nimble
to install it:
nimble install parsetoml
https://nimparsers.github.io/parsetoml/
Below are just few snippets of code to show some basic usage of this library. Refer to the above linked documentation for complete details.
import parsetoml
let table1 = parsetoml.parseString("""
[input]
file_name = "test.txt"
[output]
verbose = true
""")
let table2 = parsetoml.parseFile(f)
let table3 = parsetoml.parseFile("test.toml")
The return value of parseString
and parseFile
is a reference to
the TomlValue
object, TomlValueRef
.
Several getter procs are available to query for specific types of
fields for an input TomlValueRef
variable:
getStr
: Get the string value.getInt
: Get the integer value.getFloat
: Get the float value.getBool
: Get the bool value.getElems
: Get a sequence ofTomlValueRef
values.getTable
: Get aTomlTableRef
value.
Using the same table1
variable from the above example:
# Get the value, or fail if it is not found
let verboseFlag = table1["output"]["verbose"].getBool()
# You can specify a default as well
let input = table1["input"]["file_name"].getStr("some_default.txt")
For the validation this library needs to output JSON. Therefore it has
a proc to convert the TomlValueRef
to JSON nodes.
import parsetoml, json
let table1 = parsetoml.parseString("""
[input]
file_name = "test.txt"
[output]
verbose = true
""")
echo table1.toJson.pretty()
Above outputs:
{
"input": {
"file_name": {
"type": "string",
"value": "test.txt"
}
},
"output": {
"verbose": {
"type": "bool",
"value": "true"
}
}
}
To see the parsed TOML in an alternative Nim AST style indented
format, use parsetoml.dump(table1.getTable())
with the above
example, and you will get:
input = table
file_name = string("test.txt")
output = table
verbose = boolean(true)
Parsetoml is released under a MIT license.