Current section
Files
Jump to
Current section
Files
lib/data/dictionary.ex
# DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
# Version 2, December 2004
#
# DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
# TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
#
# 0. You just DO WHAT THE FUCK YOU WANT TO.
defprotocol Data.Dictionary do
@type k :: any
@type v :: any
@spec get(t, k) :: v
@spec get(t, k, v) :: v
def get(self, key, default \\ nil)
@spec get!(t, k) :: v | no_return
def get!(self, key)
@spec put(t, k, v) :: t
def put(self, key, value)
@spec delete(t, k) :: t
def delete(self, key)
@spec keys(t) :: [k]
def keys(self)
@spec values(t) :: [v]
def values(self)
end
defimpl Data.Dictionary, for: List do
def get(self, key, default \\ nil) do
case :lists.keyfind(key, 1, self) do
{ ^key, value } ->
value
false ->
default
end
end
def get!(self, key) do
case :lists.keyfind(key, 1, self) do
{ ^key, value } ->
value
false ->
raise Data.Missing, key: key
end
end
def put(self, key, value) do
[{ key, value } | :lists.keydelete(key, 1, self)]
end
def delete(self, key) do
:lists.keydelete(key, 1, self)
end
def keys(self) do
for { key, _ } <- self, do: key
end
def values(self) do
for { _, value } <- self, do: value
end
end