From 8e502b43f64c62ea605cd521524835a44890a5c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Valim?= Date: Wed, 11 Dec 2024 18:09:10 +0100 Subject: [PATCH] Implement JSON.Encoder for Calendar types --- lib/elixir/lib/json.ex | 6 ++++++ lib/elixir/test/elixir/json_test.exs | 7 +++++++ 2 files changed, 13 insertions(+) diff --git a/lib/elixir/lib/json.ex b/lib/elixir/lib/json.ex index 36a2be3d8a8..c41f700f171 100644 --- a/lib/elixir/lib/json.ex +++ b/lib/elixir/lib/json.ex @@ -150,6 +150,12 @@ defimpl JSON.Encoder, for: Map do end end +defimpl JSON.Encoder, for: [Date, Time, NaiveDateTime, DateTime] do + def encode(value, _encoder) do + [?", @for.to_iso8601(value), ?"] + end +end + defmodule JSON.DecodeError do @moduledoc """ The exception raised by `JSON.decode!/1`. diff --git a/lib/elixir/test/elixir/json_test.exs b/lib/elixir/test/elixir/json_test.exs index 8e301944834..99b8d23cd6d 100644 --- a/lib/elixir/test/elixir/json_test.exs +++ b/lib/elixir/test/elixir/json_test.exs @@ -46,6 +46,13 @@ defmodule JSONTest do assert JSON.encode!(%Token{value: :example}) == "[\"example\"]" assert JSON.encode!(%Token{value: "hello\0world"}) == "[\"hello\\u0000world\"]" end + + test "calendar" do + assert JSON.encode!(~D[2010-04-17]) == "\"2010-04-17\"" + assert JSON.encode!(~T[14:00:00.123]) == "\"14:00:00.123\"" + assert JSON.encode!(~N[2010-04-17 14:00:00.123]) == "\"2010-04-17T14:00:00.123\"" + assert JSON.encode!(~U[2010-04-17 14:00:00.123Z]) == "\"2010-04-17T14:00:00.123Z\"" + end end describe "JSON.Encoder" do