Skip to content

A robust and efficient decoder and encoder for the KDL Document Language.

License

Notifications You must be signed in to change notification settings

benjreinhart/ex_kdl

Repository files navigation

ExKdl

Elixir tests

A robust and efficient decoder and encoder for the KDL Document Language.

ExKdl conforms to the KDL 1.0.0 spec and is tested against the official test suite.

Installation

ExKdl can be installed by adding ex_kdl to your list of dependencies in mix.exs:

def deps do
  [{:ex_kdl, "~> 0.1.0-rc2"}]
end

Basic Usage

iex(1)> nodes = ExKdl.decode!("node 100 key=\"value\" 10_000 /* comment */ {\n    child_1\n    child_2\n}\n")
[
  %ExKdl.Node{
    children: [
      %ExKdl.Node{
        children: [],
        name: "child_1",
        properties: %{},
        type: nil,
        values: []
      },
      %ExKdl.Node{
        children: [],
        name: "child_2",
        properties: %{},
        type: nil,
        values: []
      }
    ],
    name: "node",
    properties: %{"key" => %ExKdl.Value{type: nil, value: "value"}},
    type: nil,
    values: [
      %ExKdl.Value{type: nil, value: %Decimal{coef: 100}},
      %ExKdl.Value{type: nil, value: %Decimal{coef: 10000}}
    ]
  }
]

iex(2)> ExKdl.encode!(nodes)
"node 100 10000 key=\"value\" {\n    child_1\n    child_2\n}\n"

Full documentation can be found at https://hexdocs.pm/ex_kdl.

Developing

This repo includes the kdl-org/kdl repo listed as a submodule for testing purposes.

git clone --recurse-submodules <this repo>

Or, if already cloned, initialize the submodule with:

git submodule update --init

Dependencies

mix deps.get

Running tests

mix test

To run a specific test from the kdl-org test suite, use the --only option and pass it the path (where path is input/<filename>.kdl). For example:

mix test --only input/raw_string_just_backslash.kdl

License

ExKdl is released under the MIT license (LICENSE.txt).

About

A robust and efficient decoder and encoder for the KDL Document Language.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages