Skip to main content

co_primitives/types/
network.rs

1// SPDX-License-Identifier: AGPL-3.0-only
2// Copyright (C) 2026 1io BRANDGUARDIAN GmbH
3
4use crate::CoId;
5use co_macros::co;
6
7/// Network service connectivity description.
8#[co]
9#[non_exhaustive]
10pub enum Network {
11	/// DID Discovery protocol.
12	//#[serde(rename = "/meshsub/1.1.0/diddiscovery/1.0.0")]
13	DidDiscovery(NetworkDidDiscovery),
14
15	/// CO Heads protocol.
16	//#[serde(rename = "/meshsub/1.1.0/coheads/1.0.0")]
17	CoHeads(NetworkCoHeads),
18
19	/// Rendezvouz protocol.
20	//#[serde(rename = "/rendezvous/1.0.0")]
21	Rendezvous(NetworkRendezvous),
22
23	/// Direct peer connection.
24	//#[serde(rename = "/p2p")]
25	Peer(NetworkPeer),
26}
27
28/// DID Discovery protocol.
29#[co]
30pub struct NetworkDidDiscovery {
31	/// The GossipSub topic used for DidDiscovery messages.
32	/// If not specified the default topic will be used: `"co-contact"`.
33	pub topic: Option<String>,
34
35	/// The DID to be discovered.
36	pub did: String,
37}
38
39/// CO Heads protocol.
40#[co]
41pub struct NetworkCoHeads {
42	/// The GossipSub topic used for Heads messages.
43	/// If not specified the default topic will be used: `"co-{co.id}"`.
44	pub topic: Option<String>,
45
46	/// The CO to be discovered.
47	pub id: CoId,
48}
49
50/// Rendezvouz protocol.
51#[co]
52pub struct NetworkRendezvous {
53	/// The namespace to register to.
54	pub namespace: String,
55	/// Rendezvouz node multi-addresses.
56	pub addresses: Vec<String>,
57}
58
59/// Direct peer connection.
60#[co]
61pub struct NetworkPeer {
62	/// The [`libp2p::PeerId`] as bytes.
63	pub peer: Vec<u8>,
64	/// Optional known Multi-addresses.
65	/// If empty, mDNS, Kademila and Bluetooth LE may be used to resolve.
66	pub addresses: Vec<String>,
67}