Libp2p.Pubsub.RPCPB (libp2p_elixir v0.9.0)

Protobuf encoding/decoding for pubsub RPC messages.

Schema (from third_party/libp2p_specs/pubsub/README.md):

syntax = "proto2";
message RPC {
  repeated SubOpts subscriptions = 1;
  repeated Message publish = 2;
  optional ControlMessage control = 3; // gossipsub
  message SubOpts {
    optional bool subscribe = 1;
    optional string topicid = 2;
  }
}

Gossipsub extends the base RPC with an optional control field; see third_party/libp2p_specs/pubsub/gossipsub/gossipsub-v1.0.md and gossipsub-v1.1.md for the full Control message details.

Summary

Types

control_graft()

@type control_graft() :: %{topicID: binary()}

control_ihave()

@type control_ihave() :: %{topicID: binary(), messageIDs: [binary()]}

control_iwant()

@type control_iwant() :: %{messageIDs: [binary()]}

control_message()

@type control_message() :: %{
  ihave: [control_ihave()],
  iwant: [control_iwant()],
  graft: [control_graft()],
  prune: [control_prune()]
}

control_prune()

@type control_prune() :: %{
  topicID: binary(),
  peers: [peer_info()],
  backoff: non_neg_integer() | nil
}

peer_info()

@type peer_info() :: %{peerID: binary() | nil, signedPeerRecord: binary() | nil}

subopts()

@type subopts() :: %{subscribe: boolean(), topicid: binary()}

t()

@type t() :: %{
  subscriptions: [subopts()],
  publish: [map()],
  control: control_message() | nil
}

Functions

decode(bin)

@spec decode(binary()) :: t()

decode_control(bin)

@spec decode_control(binary()) :: control_message()

decode_subopts(bin)

@spec decode_subopts(binary()) :: subopts()

encode(rpc)

@spec encode(t()) :: binary()

encode_control(c)

@spec encode_control(control_message()) :: binary()

encode_subopts(map)

@spec encode_subopts(subopts()) :: binary()