diff --git a/lib/reader.ex b/lib/reader.ex index e71e521..735c684 100644 --- a/lib/reader.ex +++ b/lib/reader.ex @@ -84,8 +84,7 @@ defmodule Eflatbuffers.Reader do case Map.get(members, index) do nil -> throw({:error, {:not_in_enum, index, members}}) - value_atom -> - Atom.to_string(value_atom) + value_atom -> value_atom end end @@ -173,7 +172,7 @@ defmodule Eflatbuffers.Reader do {_, enum_options} = Map.get(tables, options.name) {_, %{ default: default }} = enum_options.type - map_new = Map.put(map, name, Atom.to_string(Map.get(enum_options.members, default))) + map_new = Map.put(map, name, Map.get(enum_options.members, default)) read_table_fields(fields, vtable, data_buffer_pointer, data, schema, map_new) end def read_table_fields([{name, { _type, options }} | fields], << 0, 0, vtable :: binary >>, data_buffer_pointer, data, schema, map) do diff --git a/lib/writer.ex b/lib/writer.ex index 14a0526..f3f95af 100644 --- a/lib/writer.ex +++ b/lib/writer.ex @@ -77,17 +77,16 @@ defmodule Eflatbuffers.Writer do [ << vector_length :: little-size(32) >>, data_buffer_and_data(index_types, values, path, schema) ] end - def write({:enum, options = %{ name: enum_name }}, value, path, {tables, _} = schema) when is_binary(value) do + def write({:enum, options = %{ name: enum_name }}, value, path, {tables, _} = schema) when is_atom(value) do {:enum, enum_options} = Map.get(tables, enum_name) members = enum_options.members {type, type_options} = enum_options.type # if we got handed some defaults from outside, # we put them in here type_options = Map.merge(type_options, options) - value_atom = :erlang.binary_to_existing_atom(value, :utf8) - index = Map.get(members, value_atom) + index = Map.get(members, value) case index do - nil -> throw({:error, {:not_in_enum, value_atom, members}}) + nil -> throw({:error, {:not_in_enum, value, members}}) _ -> write({type, type_options}, index, path, schema) end end