diff options
Diffstat (limited to 'lib/pleroma/maps.ex')
| -rw-r--r-- | lib/pleroma/maps.ex | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/lib/pleroma/maps.ex b/lib/pleroma/maps.ex new file mode 100644 index 0000000..6d586e5 --- /dev/null +++ b/lib/pleroma/maps.ex @@ -0,0 +1,21 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors <https://pleroma.social/> +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Maps do + def put_if_present(map, key, value, value_function \\ &{:ok, &1}) when is_map(map) do + with false <- is_nil(key), + false <- is_nil(value), + {:ok, new_value} <- value_function.(value) do + Map.put(map, key, new_value) + else + _ -> map + end + end + + def safe_put_in(data, keys, value) when is_map(data) and is_list(keys) do + Kernel.put_in(data, keys, value) + rescue + _ -> data + end +end |
