# ExConstructor

[![Build Status](](
[![Coverage Status](](
[![ Version](](

ExConstructor is an Elixir library that makes it easy to instantiate
structs from external data, such as that emitted by a JSON parser.

Add `use ExConstructor` after a `defstruct` statement to inject
a constructor function into the module.

The generated constructor, called `new` by default,
handles *map-vs-keyword-list*, *string-vs-atom-keys*, and
*camelCase-vs-under_score* input data issues automatically,
DRYing up your code and letting you move on to the interesting
parts of your program.

## Example

defmodule TestStruct do
  defstruct field_one: nil,
            field_two: nil,
            field_three: nil,
            field_four: nil
  use ExConstructor
end{"field_one" => "a", "fieldTwo" => "b", :field_three => "c", :FieldFour => "d"})
# => %TestStruct{field_one: "a", field_two: "b", field_three: "c", field_four: "d"}

## [Full Documentation](

[Full ExConstructor documentation is available on](

## Contributors

Many thanks to those who've contributed to ExConstructor:

* Graeme Coupar ([@grambo](
* Mel Kicchi ([@meowy](
* Andrey Ronin ([@anronin](

## How to Contribute

My favorite contributions are PRs with code that matches project style,
and that come with full test coverage and documentation.  I have a hard
time saying no to them.

Feature requests are also welcome, but the timeline may be much longer.

Bug reports are great -- please include as much information as possible
(Erlang/Elixir/Mix version, dependencies and their versions, minimal
test case, etc.) and I will be much quicker in resolving the issue.

## Authorship and License

ExConstructor is copyright 2016-2021 Appcues, Inc.

ExConstructor is released under the
[MIT License](