Packages

Elixir ChromaDB library

Current section

Files

Jump to
ex_chroma_db lib map.ex
Raw

lib/map.ex

defmodule ExChromaDb.Map do
@moduledoc """
A module that provides some useful functions for working with maps.
"""
def atom_keys_to_binary(map) when is_map(map) do
Map.new(map, fn {k, v} -> {Atom.to_string(k), v} end)
end
def binary_keys_to_existing_atom(map) when is_map(map) do
Map.new(map, fn {k, v} -> {String.to_existing_atom(k), v} end)
end
def binary_keys_to_atom(map) when is_map(map) do
Map.new(map, fn {k, v} -> {String.to_atom(k), v} end)
end
def maybe_put(map, _key, nil), do: map
def maybe_put(map, key, value), do: Map.put(map, key, value)
@spec merge_all(list(map())) :: map()
def merge_all(maps) do
Enum.reduce(maps, Map.new(), fn x, acc -> Map.merge(acc, x) end)
end
def convert(data) when is_struct(data) do
data |> Map.from_struct() |> convert
end
def convert(data) when is_map(data) do
Map.new(data, fn {k, v} -> {k, convert(v)} end)
end
def convert(data) when is_list(data) do
Enum.map(data, &convert/1)
end
def convert(data), do: data
def delete_key_if_default(map, key, value, default \\ nil) do
case value do
^default -> Map.delete(map, key)
_ -> map
end
end
def get(map, key, default \\ nil)
def get(map, key, default) when is_map(map) do
Map.get(map, key, default)
end
def get(nil, _, _) do
nil
end
end