So I have the following extension written, but I can’t seem to figure out why I’m getting a type error.
defmodule Postgrex.Extensions.Multirange do 
  import Postgrex.BinaryUtils, warn: false
  @behaviour Postgrex.SuperExtension
  def init(_), do: nil
  def matching(_state), do: [send: "multirange_send", receive: "multirange_recv"]
  def format(_), do: :super_binary
  def oids(%Postgrex.TypeInfo{array_elem: elem_oid}, _), do: [elem_oid]
  def encode(_) do
    quote location: :keep do
      list, [oid], [type] when is_list(list) -> 
        # encode_list/2 defined by TypeModule
        encoder = &encode_list(&1, type)
        unquote(__MODULE__).encode(list, oid, encoder)
      other, _, _ ->
        raise DBConnection.EncodeError, Postgrex.Utils.encode_msg(other, "a list")
    end
  end
  def decode(_) do 
    quote location: :keep do
      <<len::int32(), binary::binary-size(len)>>, [oid], [type] ->
        <<ndims::int32(), _has_null::int32(), ^oid::uint32(), dims::size(ndims)-binary-unit(64),
          data::binary>> = binary
        # decode_list/2 defined by TypeModule
        flat = decode_list(data, type)
        unquote(__MODULE__).decode(dims, flat)
    end
  end
  ## Helpers
  # Delegate to the Array extension
  def encode(list, elem_oid, encoder) do 
    Postgrex.Extensions.Array.encode(list, elem_oid, encoder)
  end
  # Delegate to the Array extension
  def decode(dims, elems) do 
    Postgrex.Extensions.Array.decode(dims, elems)
  end
end
There’s a failure in Postgrex.Protocol.fetch_type_info/4. type timemultirange can not be handled by the types module MyApp.PostgresTypes. Here is the TypeInfo struct.
%Postgrex.TypeInfo{
   oid: 1431039,
   type: "timemultirange",
   send: "multirange_send",
   receive: "multirange_recv",
   output: "multirange_out",
   input: "multirange_in",
   array_elem: 0,
   base_type: 0,
   comp_elems: []
 }