       iex> d(%{first, last, email: mail}) = %{first: "Daniel", last: "Berkompas", email: "top@secret.com"}
       ...> {first, last, mail}
       {"Daniel", "Berkompas", "top@secret.com"}
+
+  For Maps with String Keys:
+
+      iex> d(s%{name}) = %{"name" => "Daniel Berkompas"}
+      ...> name
+      "Daniel Berkompas"
+
+  With multiple keys:
+
+      iex> d(s%{name, email}) = %{"name" => "Daniel Berkompas", "email" => "top@secret.com"}
+      ...> {name, email}
+      {"Daniel Berkompas", "top@secret.com"}
+
+  With multiple keys and custom variable naming:
+
+      iex> d(s%{name, "email" => mail}) = %{"name" => "Daniel Berkompas", "email" => "top@secret.com"}
+      ...> {name, mail}
+      {"Daniel Berkompas", "top@secret.com"}
+
 
   For structs:
 

    Enum.map(list, &pattern/1)
  end

  defp pattern({key, _, _} = variable) do
    {key, variable}
  end
  defp pattern([arg]) do
    arg
  end
  defp pattern(other) do
    other
  end

    {:%{}, context, Enum.map(args, &pattern/1)}
  end

  # Handle string maps, including ones with multiple keys
  # {:s, [], [{:%{}, [], [{:stuff, [], Elixir}, {:things, [], Elixir}]}]}
  defmacro d({:s, _, [{:%{}, context, args}]}) do
    {:%{}, context, Enum.map(args, &s_pattern/1)}
  end

  # Handle structs, including ones with multiple keys
  # {:%, [],
  #  [{:__aliases__, [alias: false], [:Namespace]},
