# This file steals liberally from https://github.com/supabase/realtime,
# which in turn draws on https://github.com/cainophile/cainophile
require Protocol
defmodule WalEx.Adapters.Changes do
defmodule(Transaction, do: defstruct([:changes, :commit_timestamp]))
defmodule(NewRecord,
do: defstruct([:type, :record, :schema, :table, :columns, :commit_timestamp])
)
defmodule(UpdatedRecord,
do:
defstruct([
:type,
:old_record,
:record,
:schema,
:table,
:columns,
:commit_timestamp
])
)
defmodule(DeletedRecord,
do: defstruct([:type, :old_record, :schema, :table, :columns, :commit_timestamp])
)
defmodule(TruncatedRelation, do: defstruct([:type, :schema, :table, :commit_timestamp]))
end
Protocol.derive(Jason.Encoder, WalEx.Adapters.Changes.Transaction)
Protocol.derive(Jason.Encoder, WalEx.Adapters.Changes.NewRecord)
Protocol.derive(Jason.Encoder, WalEx.Adapters.Changes.UpdatedRecord)
Protocol.derive(Jason.Encoder, WalEx.Adapters.Changes.DeletedRecord)
Protocol.derive(Jason.Encoder, WalEx.Adapters.Changes.TruncatedRelation)
Protocol.derive(Jason.Encoder, WalEx.Adapters.Postgres.Decoder.Messages.Relation.Column)