home
/
code
/
hope.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Add dictionary get with validation.
[hope.git]
/
src
/
hope_kv_list.erl
diff --git
a/src/hope_kv_list.erl
b/src/hope_kv_list.erl
index
2000098
..
cb1c4a4
100644
(file)
--- a/
src/hope_kv_list.erl
+++ b/
src/hope_kv_list.erl
@@
-13,8
+13,9
@@
-export(
[ empty/0
-export(
[ empty/0
- , get/2
- , get/3
+ , get/2 % get option
+ , get/3 % get existing or default
+ , get/4 % get existing if valid, or default
, set/3
, update/3
, pop/2
, set/3
, update/3
, pop/2
@@
-75,6
+76,13
@@
get(T, K, Default) ->
Vopt = get(T, K),
hope_option:get(Vopt, Default).
Vopt = get(T, K),
hope_option:get(Vopt, Default).
+-spec get(t(K, V), K, V, fun((V) -> boolean())) ->
+ V.
+get(T, K, Default, IsValid) ->
+ VOpt1 = get(T, K),
+ VOpt2 = hope_option:validate(VOpt1, IsValid),
+ hope_option:get(VOpt2, Default).
+
-spec set(t(K, V), K, V) ->
t(K, V).
set(T, K, V) ->
-spec set(t(K, V), K, V) ->
t(K, V).
set(T, K, V) ->
@@
-131,14
+139,16
@@
of_kv_list(List) ->
% TODO: Decide if validation is to be done here. Do so if yes.
List.
% TODO: Decide if validation is to be done here. Do so if yes.
List.
--spec validate_unique_presence(t(K, _V), [K]) ->
- hope_result:t(ok, [presence_error(K)]).
+-spec validate_unique_presence(T, [K]) ->
+ hope_result:t(T, [presence_error(K)])
+ when T :: t(K, _V).
validate_unique_presence(T, KeysRequired) ->
KeysOptional = [],
validate_unique_presence(T, KeysRequired, KeysOptional).
-spec validate_unique_presence(t(K, _V), [K], [K]) ->
validate_unique_presence(T, KeysRequired) ->
KeysOptional = [],
validate_unique_presence(T, KeysRequired, KeysOptional).
-spec validate_unique_presence(t(K, _V), [K], [K]) ->
- hope_result:t(ok, [presence_error(K)]).
+ hope_result:t(T, [presence_error(K)])
+ when T :: t(K, _V).
validate_unique_presence(T, KeysRequired, KeysOptional) ->
case find_unique_presence_violations(T, KeysRequired, KeysOptional)
of #hope_kv_list_presence_violations
validate_unique_presence(T, KeysRequired, KeysOptional) ->
case find_unique_presence_violations(T, KeysRequired, KeysOptional)
of #hope_kv_list_presence_violations
@@
-146,7
+156,7
@@
validate_unique_presence(T, KeysRequired, KeysOptional) ->
, keys_duplicated = []
, keys_unsupported = []
} ->
, keys_duplicated = []
, keys_unsupported = []
} ->
- {ok,
ok
}
+ {ok,
T
}
; #hope_kv_list_presence_violations{}=Violations ->
{error, presence_violations_to_list(Violations)}
end.
; #hope_kv_list_presence_violations{}=Violations ->
{error, presence_violations_to_list(Violations)}
end.
This page took
0.02356 seconds
and
4
git commands to generate.