Current section
Files
Jump to
Current section
Files
lib/mongo_ecto/decoder.ex
defmodule Mongo.Ecto.Decoder do
@moduledoc false
import Mongo.Ecto.Utils
def decode_document(document, pk) do
Enum.into(document, %{}, fn
{"_id", value} -> {Atom.to_string(pk), decode_value(value, pk)}
{key, value} -> {key, decode_value(value, pk)}
end)
end
def decode_value(int, _pk) when is_integer(int),
do: int
def decode_value(atom, _pk) when is_atom(atom),
do: atom
def decode_value(float, _pk) when is_float(float),
do: float
def decode_value(string, _pk) when is_binary(string),
do: string
def decode_value(keyword, pk) when is_keyword(keyword),
do: decode_document(keyword, pk)
def decode_value(list, pk) when is_list(list),
do: Enum.map(list, &decode_value(&1, pk))
def decode_value(%BSON.Binary{binary: value}, _pk),
do: value
def decode_value(%BSON.ObjectId{value: value}, _pk),
do: value
def decode_value(%BSON.DateTime{} = datetime, _pk),
do: BSON.DateTime.to_datetime(datetime)
def decode_value(map, pk) when is_map(map),
do: decode_document(map, pk)
end