Current section

Files

Jump to
azure lib storage connection_string.ex
Raw

lib/storage/connection_string.ex

defmodule Azure.Storage.ConnectionString do
@moduledoc """
Azure Storage connection string utilities.
"""
@doc """
Parses an Azure storage connection string into a plain map.
Keys are normalised into lower case with underscores for convenience.
"""
@spec parse(connection_string :: String.t()) :: map()
def parse(connection_string) do
connection_string
|> String.split(";")
|> Enum.reduce(%{}, fn key_value_string, acc ->
{key, value} = parse_connection_string_item(key_value_string)
Map.put(acc, key, value)
end)
end
defp parse_connection_string_item(item) do
# The value part of the item can contain `=` (esp the account key which is base64-encoded), so
# `parts: 2` is essential.
[k, v] = item |> String.split("=", parts: 2)
{key_for(k), v}
end
defp key_for("DefaultEndpointsProtocol"), do: :default_endpoints_protocol
defp key_for("AccountName"), do: :account_name
defp key_for("AccountKey"), do: :account_key
defp key_for("EndpointSuffix"), do: :endpoint_suffix
end