          do: :ok
   end
 
-  defp validate(:string, schema, value) do
+  defp validate(:string, schema, value, _opts) do
     with length <- String.length(value),
          :ok <- min_length(schema, length, value),
          :ok <- max_length(schema, length, value),

         do: :ok
  end

  defp validate(nil, _schema, nil), do: :ok

  defp validate(nil, schema, value),
    do: {:error, %{value: value, type: schema.as}}

  defp validate(:list, schema, value) do
    with :ok <- min_items(schema, value),
         :ok <- max_items(schema, value),
         :ok <- items(schema, value),

         do: :ok
  end

  defp validate(:map, schema, value, _opts) do
    with :ok <- size(schema, value),
         :ok <- keys(schema, value),
         :ok <- required(schema, value),
