- case {KeysDups, KeysMissing, KeysUnsupported}
- of {[], [], []} ->
- {ok, ok}
- ; {Dups, Missing, Unsupported} ->
- ErrorDups =
- case Dups
- of [] -> []
- ; [_|_] -> [{keys_duplicated, Dups}]
- end,
- ErrorMissing =
- case Missing
- of [] -> []
- ; [_|_] -> [{keys_missing, Missing}]
- end,
- ErrorUnsupported =
- case Unsupported
- of [] -> []
- ; [_|_] -> [{keys_unsupported, Unsupported}]
- end,
- Errors = ErrorDups ++ ErrorMissing ++ ErrorUnsupported,
- {error, Errors}
- end.
-
+ #hope_kv_list_presence_violations
+ { keys_missing = KeysMissing
+ , keys_duplicated = KeysDuplicated
+ , keys_unsupported = KeysUnsupported
+ }.
+
+-spec presence_violations_to_list(presence_violations(K)) ->
+ [presence_error(K)].
+presence_violations_to_list(#hope_kv_list_presence_violations
+{ keys_missing = KeysMissing
+, keys_duplicated = KeysDuplicated
+, keys_unsupported = KeysUnsupported
+}) ->
+ ErrorMissing =
+ case KeysMissing
+ of [] -> []
+ ; [_|_] -> [{keys_missing, KeysMissing}]
+ end,
+ ErrorDups =
+ case KeysDuplicated
+ of [] -> []
+ ; [_|_] -> [{keys_duplicated, KeysDuplicated}]
+ end,
+ ErrorUnsupported =
+ case KeysUnsupported
+ of [] -> []
+ ; [_|_] -> [{keys_unsupported, KeysUnsupported}]
+ end,
+ ErrorDups ++ ErrorMissing ++ ErrorUnsupported.
+
+-spec has_key(t(K, _), K) ->
+ boolean().
+has_key(T, K1) ->
+ lists:any(fun ({K2, _}) -> K1 =:= K2 end, T).