| 1 | -module(hope_gen_dictionary). |
| 2 | |
| 3 | -export_type( |
| 4 | [ t/2 |
| 5 | ]). |
| 6 | |
| 7 | |
| 8 | -type t(_Key, _Value) :: |
| 9 | term(). |
| 10 | |
| 11 | |
| 12 | -callback empty() -> |
| 13 | t(_K, _V). |
| 14 | |
| 15 | -callback get(t(K, V), K) -> |
| 16 | hope_option:t(V). |
| 17 | |
| 18 | -callback get(t(K, V), K, V) -> |
| 19 | V. |
| 20 | |
| 21 | -callback get(t(K, V), K, V, fun((V) -> boolean())) -> |
| 22 | V. |
| 23 | |
| 24 | -callback set(t(K, V), K, V) -> |
| 25 | t(K, V). |
| 26 | |
| 27 | -callback update(t(K, V), K, fun((hope_option:t(V)) -> V)) -> |
| 28 | t(K, V). |
| 29 | |
| 30 | -callback pop(t(K, V), K) -> |
| 31 | {hope_option:t(V), t(K, V)}. |
| 32 | |
| 33 | -callback map(t(K, V), fun((K, V) -> V)) -> |
| 34 | t(K, V). |
| 35 | |
| 36 | -callback filter(t(K, V), fun((K, V) -> boolean())) -> |
| 37 | t(K, V). |
| 38 | |
| 39 | -callback fold(t(K, V), fun((K, V, Acc) -> Acc), Acc) -> |
| 40 | Acc. |
| 41 | |
| 42 | -callback iter(t(K, V), fun((K, V) -> ok)) -> |
| 43 | ok. |
| 44 | |
| 45 | %% TODO: Decide if validation is to be done. If yes - wrap in hope_result:t/1 |
| 46 | -callback of_kv_list([{K, V}]) -> |
| 47 | t(K, V). |
| 48 | |
| 49 | -callback to_kv_list(t(K, V)) -> |
| 50 | [{K, V}]. |
| 51 | |
| 52 | -callback has_key(t(K, _), K) -> |
| 53 | boolean(). |