anchor.diff:  %% @doc get endpoint from datagram
   %% @end
   -spec get_endpoint(datagram()) -> endpoint().
  -get_endpoint({datagram, Datagram}) ->
  -    {endpoint, orddict:fetch(endpoint, Datagram)}.
  +get_endpoint(#{endpoint := Endpoint}) -> Endpoint.
   
   %% @doc get messages from datagram
  -%% major TODO
   %% @end
   -spec get_messages(datagram()) -> ppspp_message:messages().
  -get_messages({datagram, Datagram}) -> ppspp_message:get_messages(Datagram).
  +get_messages(#{messages := Messages}) -> Messages.
   
   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   %% @doc Handle a fully unpacked datagram.
  
positive.code:     Peer_Requested_Swarm_Options = get_swarm_options(Datagram),
      {Datagram, Peer_Requested_Swarm_Options}.
  
  -spec unpack_on_existing_channel(ppspp_channel:channel(), binary(), endpoint()) ->
      {datagram(), ppspp_options:options()}.
  unpack_on_existing_channel(Channel, Maybe_Datagram, Endpoint) ->
      {ok, Swarm_id} = ppspp_channel:get_swarm_id(Channel),
  
negative.code: %% api
  -export([handle_packet/1,
           handle_datagram/2,
           get_messages/1,
           get_peer_uri/1,
           get_endpoint/1,
           get_peer_channel/1,
           get_swarm_options/1,
           unpack/3,
           pack/1]).
  
  -opaque endpoint() :: #{ uri => string(),
                           ip => inet:ip_address(),
                           socket => inet:socket(),
                           port => inet:port_number(),
                           transport => udp,
                           channel => ppspp_channel:channel()}.
  -opaque datagram() :: #{ endpoint => endpoint(),
                           messages =>
                           ppspp_message:messages()}.
  -type uri() :: string().
  -export_type([endpoint/0,
                datagram/0]).
  
  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  