     end
   end
 
+  @doc """
+  Merges a header into a new UUID, this won't validate the header so always use a header
+  generated with `header/2`.
+  """
+  def merge_header(head),
+    do: if head, do: merge(UUID.uuid4(), head), else: nil
+
+  @doc """
+  Parses the header, never use this to on game logic, this is only for debug code or IEX usage.
+  """
+  def parse(header) do
+    <<domain::bytes-size(2), meta1::bytes-size(1), meta2::bytes-size(1), rest::binary>> = header
+    %{domain: domain, meta1: meta1, meta2: meta2, uuid: rest}
+  end
+
+  @docp """
+  Merges two strings together.
+  """
   defp merge(uuid, prepend),
     do: merge(uuid, prepend, "")
   defp merge("-" <> uuid, prepend, acc),

  defp merge(uuid, "", acc),
    do: acc <> uuid

  for x <- @hex_chars do
    defp valid_meta?("#{unquote(x)}"),
      do: true

  defp valid_meta?(_),
    do: false

  @docp """
  Validates domain name.
  """
  for x <- @hex_chars, y <- @hex_chars do
    defp valid_domain?("#{unquote(x)}#{unquote(y)}"),
      do: true
