niahoo / eon

eon is like json for Elixir data structures

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Eon

Eon (Elixir Object Notation) allows you to use Elixir data structures as a document storage format.

Build Status Hex.pm Hex.pm

Usage

Add to your mix.exs:

{:eon, "~> 4.0"}

Use &write/2 / &write!/2 and &read/1 / &read!/1 to write and read maps respectively:

data = %{
  time: 1485508490,
  type: "message",
  value: "Hello world."
}

data |> Eon.write("hello.exs")
{:ok, data} = Eon.read("hello.exs")

Safety

read will return an error when attempting to load a file that could execute arbitrary code. Evaluated files produce an AST which is considered unsafe if at least one of the AST's expression tuples contains a :{} or %{} as its first element. This limits loaded files to native Elixir data structures and constant values (numbers, atoms and so on).

You can bypass the safety check using Eon.read_unsafe/1 and Eon.read_unsafe!/1. There are also counterparts to both of these functions that have an arity of 2. These functions take a map as the first argument and the filename as the second argument. Unbound variables within the loaded file will be bound according to key value pairs within the map that is provided. For example, given the following file:

# myuser.exs
%{
  group: :users,
  home: String.capitalize(home),
  name: name
}

...the following comparison will return true:

result =
  %{ home: "hyrule", name: "Link" }
  |> Eon.read_unsafe("myuser.exs")

Map.equal?(result, %{
  group: :users,
  home: "Hyrule",
  name: "Link"
})

Do not use the unsafe functions for unsanitized user data. Because files loaded with Eon are compiled into runtime code, it is generally a good idea to apply this same rule even to read/1 and read!/1. The best use cases for Eon are for data you trust - configuration files, data shared between controlled nodes, etc.

License

Eon is free software released under the Apache License 2.0.

About

eon is like json for Elixir data structures

License:Apache License 2.0


Languages

Language:Elixir 100.0%