chore: more detailed about about retainer index spec
This commit is contained in:
parent
de5e388afb
commit
2f5e0ada0c
|
@ -124,22 +124,33 @@ retainer_indices(example) ->
|
||||||
retainer_indices(default) ->
|
retainer_indices(default) ->
|
||||||
?DEFAULT_INDICES;
|
?DEFAULT_INDICES;
|
||||||
retainer_indices(validator) ->
|
retainer_indices(validator) ->
|
||||||
fun is_valid_index_specs/1;
|
fun check_index_specs/1;
|
||||||
retainer_indices(_) ->
|
retainer_indices(_) ->
|
||||||
undefined.
|
undefined.
|
||||||
|
|
||||||
is_valid_index_specs(IndexSpecs) ->
|
check_index_specs([]) ->
|
||||||
case lists:all(fun is_valid_index_spec/1, IndexSpecs) of
|
ok;
|
||||||
true ->
|
check_index_specs(IndexSpecs) when is_list(IndexSpecs) ->
|
||||||
case length(IndexSpecs) =:= ordsets:size(ordsets:from_list(IndexSpecs)) of
|
lists:foreach(fun check_index_spec/1, IndexSpecs),
|
||||||
true -> ok;
|
check_duplicate(IndexSpecs);
|
||||||
false -> {error, duplicate_index_specs}
|
check_index_specs(_IndexSpecs) ->
|
||||||
end;
|
invalid_spec(list_index_spec_limited).
|
||||||
false ->
|
|
||||||
{error, invalid_index_spec}
|
check_index_spec([]) ->
|
||||||
|
invalid_spec(non_empty_index_spec_limited);
|
||||||
|
check_index_spec(IndexSpec) when is_list(IndexSpec) ->
|
||||||
|
case lists:all(fun(Idx) -> is_integer(Idx) andalso Idx > 0 end, IndexSpec) of
|
||||||
|
false -> invalid_spec(pos_integer_index_limited);
|
||||||
|
true -> check_duplicate(IndexSpec)
|
||||||
|
end;
|
||||||
|
check_index_spec(_IndexSpec) ->
|
||||||
|
invalid_spec(list_index_spec_limited).
|
||||||
|
|
||||||
|
check_duplicate(List) ->
|
||||||
|
case length(List) =:= length(lists:usort(List)) of
|
||||||
|
false -> invalid_spec(unique_index_spec_limited);
|
||||||
|
true -> ok
|
||||||
end.
|
end.
|
||||||
|
|
||||||
is_valid_index_spec(IndexSpec) ->
|
invalid_spec(Reason) ->
|
||||||
length(IndexSpec) > 0 andalso
|
throw({Reason, #{default => ?DEFAULT_INDICES}}).
|
||||||
lists:all(fun(Idx) -> Idx > 0 end, IndexSpec) andalso
|
|
||||||
IndexSpec =:= ordsets:to_list(ordsets:from_list(IndexSpec)).
|
|
||||||
|
|
Loading…
Reference in New Issue