Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/spacepilots/mason

Mason uses superpowers to coerce maps into structs. This is helpful e.g. when you interface a REST API and want to create a struct from the response.
https://github.com/spacepilots/mason

Last synced: about 1 month ago
JSON representation

Mason uses superpowers to coerce maps into structs. This is helpful e.g. when you interface a REST API and want to create a struct from the response.

Awesome Lists containing this project

README

        

# Mason ![Build Status](https://travis-ci.org/spacepilots/mason.svg?branch=develop)

Mason uses superpowers to coerce maps into structs. This is helpful e.g.
when you interface a REST API and want to create a struct from the response.

```elixir
defmodule User do
defstruct [ :user_id, :created_at ]

def masonstruct do
%{
createdAt: &({ :created_at, elem(DateTime.from_unix(&1), 1) }),
userId: &({ :user_id, &1 })
}
end
end

response = %{ "userId" => 123, createdAt: 1456749030 }
Mason.struct User, response # %User{created_at: #DateTime<2016-02-29 12:30:30Z>, user_id: 123}
```

## Features

* coerce to Elixir's built-in types from strings
* dynamically coerce values (e.g. timestamps to `DateTime`s)
* map keys (e.g. `createdAt` to `created_at`)
* convert string keys to atoms (e.g. `..., "age" => 29, ...` to `..., age: 29, ...`)
* convert lists

## Installation

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

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

The docs can be found at [https://hexdocs.pm/mason](https://hexdocs.pm/mason).

## Contributing

* We use [gitflow](https://github.com/nvie/gitflow) (with the production branch
being `master` and the development branch being `develop`)
* and [semantic commit messages](https://seesparkbox.com/foundry/semantic_commit_messages).
* We use [semantic versioning](https://semver.org/).
* We use pull requests and run our test suite on [Travis CI](https://travis-ci.org/spacepilots/mason).