     {:%{}, 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]},

    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

      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:

