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.
defmodule TestStruct do
defstruct field_one: nil,
field_two: nil,
field_three: nil,
field_four: nil
use ExConstructor
end
TestStruct.new(%{"field_one" => "a", "fieldTwo" => "b", :field_three => "c", :FieldFour => "d"})
# => %TestStruct{field_one: "a", field_two: "b", field_three: "c", field_four: "d"}
Full ExConstructor documentation is available on Hexdocs.pm.
Many thanks to those who've contributed to ExConstructor:
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.
ExConstructor is copyright 2016-2021 Appcues, Inc.
ExConstructor is released under the MIT License.