README.md

# VDF

## Reading 

Reading and parsing a VDF file utilized the `VDF.Reader` module. Two functions are available,
`parse_string/1` and `parse_enum/1`. `parse_string/1` is to be supplied a String which will be 
split on new lines and parsed. `parse_enum/1` accepts an enumerable and acts identically to `parse_string/1` 
except it assumes that each element in the enumerable is a String and a new line of a VDF file. The useful use 
case here is with `File.stream!` to avoid loading a large VDF file entirely into memory before parsing.

### Result Types

The result of all reading operations is a Map. This map will treat all keys as strings, and all 
values as one of the following possible types:

1. String 
2. Map 
3. List (containing either Strings or Maps)

A value that is a String represents the value in a Key/Value pair. A value as a Map represents 
a nested value that may contain further Strings, Maps, or Lists. A list is used when a single level 
of nesting has a duplicate key. Keys are initially entered as either Maps or Strings depending on 
if the current line is a Key/Value pair, or, the start of a nested continuation. If a duplicate key is 
present when inserting into the map, the value is then converted to a list containing the original value 
as well as the value that was just inserted. This means that if in a single level of nesting there are duplicate 
keys of multiple types, the resulting list may contain both Strings and Maps.


## Installation

This package can be installed by adding `vdf` to your list of dependencies in `mix.exs`:

```elixir
def deps do
  [
    {:vdf, "~> 0.1.0"}
  ]
end
```

## Copywrite 

The source code of this project is licenced under GPLv3. The `*.txt` files present under 
`test/resources/` are copywrite Valve Corporation.