defmodule Postgrex.Extensions.Float8 do @moduledoc false import Postgrex.BinaryUtils, warn: false use Postgrex.BinaryExtension, send: "float8send" def encode(_) do quote location: :keep do n when is_number(n) -> <<8::int32, n::float64>> :NaN -> <<8::int32, 0::1, 2047::11, 1::1, 0::51>> :inf -> <<8::int32, 0::1, 2047::11, 0::52>> :"-inf" -> <<8::int32, 1::1, 2047::11, 0::52>> other -> raise DBConnection.EncodeError, Postgrex.Utils.encode_msg(other, "a float") end end def decode(_) do quote location: :keep do <<8::int32, 0::1, 2047::11, 0::52>> -> :inf <<8::int32, 1::1, 2047::11, 0::52>> -> :"-inf" <<8::int32, _::1, 2047::11, _::52>> -> :NaN <<8::int32, float::float64>> -> float end end end