From cad59792e2ce06d489ce3e7a526f55b4a1fd05ab Mon Sep 17 00:00:00 2001 From: Ricardo Ramos <6144457+imricardoramos@users.noreply.github.com> Date: Tue, 30 Jul 2024 19:50:18 +0100 Subject: [PATCH] Keep native DateTime, Date and Time struct encoding (#125) * Keep native DateTime, Date and Time struct encoding * Add NaiveDateTime * Add Decimal * Add tests --- lib/logger_json/formatter/redactor_encoder.ex | 5 +++++ test/logger_json/formatter/redactor_encoder_test.exs | 11 +++++++++++ 2 files changed, 16 insertions(+) diff --git a/lib/logger_json/formatter/redactor_encoder.ex b/lib/logger_json/formatter/redactor_encoder.ex index 8b85a3e..45049db 100644 --- a/lib/logger_json/formatter/redactor_encoder.ex +++ b/lib/logger_json/formatter/redactor_encoder.ex @@ -32,6 +32,11 @@ defmodule LoggerJSON.Formatter.RedactorEncoder do def encode("[REDACTED]", _redactors), do: "[REDACTED]" def encode(binary, _redactors) when is_binary(binary), do: encode_binary(binary) def encode(%Jason.Fragment{} = fragment, _redactors), do: fragment + def encode(%NaiveDateTime{} = naive_datetime, _redactors), do: naive_datetime + def encode(%DateTime{} = datetime, _redactors), do: datetime + def encode(%Date{} = date, _redactors), do: date + def encode(%Time{} = time, _redactors), do: time + def encode(%Decimal{} = decimal, _redactors), do: decimal def encode(%_struct{} = struct, redactors) do struct diff --git a/test/logger_json/formatter/redactor_encoder_test.exs b/test/logger_json/formatter/redactor_encoder_test.exs index 68c21e8..f4e9abc 100644 --- a/test/logger_json/formatter/redactor_encoder_test.exs +++ b/test/logger_json/formatter/redactor_encoder_test.exs @@ -35,6 +35,17 @@ defmodule LoggerJSON.Formatter.RedactorEncoderTest do assert encode(123, @redactors) == 123 end + test "allows dates and times" do + assert encode(~U[2024-01-01 00:00:00Z], @redactors) == ~U[2024-01-01 00:00:00Z] + assert encode(~N[2024-01-01 00:00:00], @redactors) == ~N[2024-01-01 00:00:00] + assert encode(~D[2024-01-01], @redactors) == ~D[2024-01-01] + assert encode(~T[00:00:00], @redactors) == ~T[00:00:00] + end + + test "allows decimals" do + assert encode(Decimal.new("1.2"), @redactors) == Decimal.new("1.2") + end + test "strips Structs" do assert encode(%IDStruct{id: "hello"}, @redactors) == %{id: "hello"} end