diff --git a/lib/phoenix_html/safe.ex b/lib/phoenix_html/safe.ex
index 5c01277..2ed7964 100644
--- a/lib/phoenix_html/safe.ex
+++ b/lib/phoenix_html/safe.ex
@@ -44,6 +44,12 @@ defimpl Phoenix.HTML.Safe, for: DateTime do
end
end
+if Code.ensure_loaded?(Duration) do
+ defimpl Phoenix.HTML.Safe, for: Duration do
+ defdelegate to_iodata(data), to: Duration, as: :to_iso8601
+ end
+end
+
defimpl Phoenix.HTML.Safe, for: List do
def to_iodata(list), do: recur(list)
diff --git a/test/phoenix_html/safe_test.exs b/test/phoenix_html/safe_test.exs
index c343e9f..6c2bcd1 100644
--- a/test/phoenix_html/safe_test.exs
+++ b/test/phoenix_html/safe_test.exs
@@ -62,6 +62,13 @@ defmodule Phoenix.HTML.SafeTest do
assert Safe.to_iodata(datetime) == "2000-01-01T12:13:14+00:30"
end
+ if Code.ensure_loaded?(Duration) do
+ test "impl for Duration" do
+ duration = Duration.new!(month: 1)
+ assert Safe.to_iodata(duration) == "P1M"
+ end
+ end
+
test "impl for URI" do
uri = %URI{scheme: "http", host: "www.example.org", path: "/foo", query: "secret="}