* Everywhere
- [x] Switch back to using nom now that the new version has been released
- [x] Logging
- [x] Add line numbers to errors
- [ ] **Add documentation to public enums, structs, functions, methods and macros** - *In progress*
- [x] Switch names of TOMLValue and Value
- [x] Rename Parser to TOMLParser
* primitives.rs
- [x] Implement get_keychain_key
- [x] Implement get_full_key
- [x] Implement get_key_parent
- [x] Change Key::Str to just hold an &'a str again
- [x] Fix DateTime to allow only Date, only DateTime (no fractional seconds), only DateTime (with fractional seconds), Full DateTime with offset
- [x] Change TimeOffset::Z to TimeOffset::Zulu?
- [x] Change '+'/'-' to enum
- [x] Inserting a value insert's its key in it's parent's children
- [x] Re-implement get_array_table_key to take into account implicit tables are always standard tables
- [x] DateTime validation
* ast/structs.rs
- [x] Re-implement HashValue to have a list of children or max index of children
- [x] Fix DateTime to allow only Date, only DateTime (no fractional seconds), only DateTime (with fractional seconds), Full DateTime with offset
- [x] Change TimeOffset::Z to TimeOffset::Zulu?
- [x] Change '+'/'-' to enum
* objects.rs
- [x] In array_table when adding to existing table get_key_parent and add the new index as a child in the map, then add full_key to the map with None value
- [x] Fix add_implicit_tables
- [x] In array_table if table keys imply subtables that don't exist, add the implied tables as std_tables to the map with None value and add add their subkeys as children (partially done)
- [x] In std_table if table keys imply subtables that don't exist, add the implied tables as std_tables to the map with None value and add add their subkeys as children
- [x] In array_table if get_key_parent exists and has no indexed children, then it is an error (see toml-test/invalid/table_array_implicit)
- [x] In array_table when encountering a new table that isn't a subtable of the last table, rebuild last_array_tables and last_array_tables_index by starting at the first subkey, looking up it's children and so-on, if the array_table already exists
- [x] In array_table always add new table to map with None value
- [x] In std_table always add new table to map with None value
- [x] In array_value insert_key_val_into_map
* parser.rs
- [x] Change Key::Str to just hold a Str
- [x] Implement reconstructing InlineTables and Arrays with different structures than previous values
- [x] Implement wiping out all keys and values of InlineTables and Arrays with changed structure
- [x] Implement converting Value Arrays and InlineTables to TOMLValue Arrays and Tables
- [x] Implement inserting new keys and values into map
- [x] Implement inserting new Array or InlineTable value into AST
- [x] Implement ~~get_errors~~ Errors are returned as part of pars result if there are any
- [x] TOMLValue parsing on set_value (currently set_value accepts whatever you give it). *In progress, almost finished*
- [x] Implement get_children
- [x] Convenience functions
- [x] For creating Values, especially DateTime
- [x] Combining a key and a subkey or index to a new key
- [x] Add unit tests for getting values
- [x] Add unit tests for getting sub-keys
- [x] Add unit tests for setting values
- [x] Add unit tests to check the map to make sure removed keys are gone
- [x] Have parse return a tuple with the parser and the result
* tests/assets.rs
- [x] Add failure/error tests for invalid toml-test's
- [x] Add toml/examples/example-v0.4.0.toml to success tests
* tests/parser_tests.rs
- [x] Add integration tests for parser:
- [x] load a larger document -> validate
- [x] do a bunch of gets -> validate
- [x] do a bunch of get_children -> validate
- [x] do a bunch of sets, then do a bunch of gets -> validate
- [x] Add failure tests for the other 3 types of error
* types.rs
- [x] Log an error on a return result of Result::Err
- [x] Add unit tests to convenience functions
- [x] Add future error types to ParseError
- [x] Add column number to all error types
- [x] Add the invalid datetime string to the InvalidDateTime error