Exconstructor
An Elixir library for generating struct constructors that handle external data with ease.
Install / Use
/learn @appcues/ExconstructorREADME
ExConstructor
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
use ExConstructor
defstruct field_one: nil,
field_two: nil,
field_three: nil,
field_four: nil
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 Documentation
Full ExConstructor documentation is available on Hexdocs.pm.
Contributors
Many thanks to those who've contributed to ExConstructor:
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-2025 Appcues, Inc.
ExConstructor is released under the MIT License.
Related Skills
node-connect
339.3kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
83.9kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
339.3kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
commit-push-pr
83.9kCommit, push, and open a PR
