defmodule OnePassword.Connect.Util do alias OnePassword.Connect.Vault @spec get_password(vault :: Vault.t(), item_name :: String.t()) :: {:ok, String.t()} | {:error, :not_found} def get_password(%Vault{items: items}, item_name) do Enum.find(items, %{}, fn item -> item.title == item_name end) |> Map.get(:fields, []) |> Enum.find({:error, :not_found}, fn field -> field.id == "password" end) |> then(fn {:error, err} -> {:error, err} res -> {:ok, res.value} end) end def get_password!(vault, item_name) do get_password(vault, item_name) |> case do {:error, _err} -> throw("Key #{item_name} not found in vault #{vault.name}") {:ok, value} -> value end end end