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.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Mason Build Status

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.

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 DateTimes)
  • 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:

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

The docs can be found at https://hexdocs.pm/mason.

Contributing

About

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.

License:MIT License


Languages

Language:Elixir 100.0%