pub struct RoomAnnouncement {
pub room_id: String,
pub name: String,
pub encrypted: bool,
pub passphrase_salt: Option<Vec<u8>>,
pub member_count: u32,
pub creator_fingerprint: String,
pub announced_at: i64,
pub owner_fingerprints: Vec<String>,
pub verified_only: bool,
pub host_addrs: Vec<String>,
pub kind: RoomKind,
}Expand description
Broadcast on the global ROOMS_TOPIC. Each peer republishes the rooms they’re currently in, periodically. Listeners maintain a cache with TTL.
Fields§
§room_id: String§name: String§encrypted: bool§passphrase_salt: Option<Vec<u8>>Argon2id salt — present iff encrypted. Joiners derive their
passphrase key from (passphrase, salt) to unwrap session keys.
member_count: u32§creator_fingerprint: String§announced_at: i64Seconds since UNIX_EPOCH when this announcement was emitted.
owner_fingerprints: Vec<String>Phase B: fingerprints with role = ‘owner’ — the soft moderator
set. Newcomers learn from this who’s authorized to grant other
owners and to issue bans (signed via SignedRoomMessage).
#[serde(default)] for forward-compat with pre-0.3 senders.
verified_only: boolPhase E: when true, existing members refuse to wrap their
session key for a joiner whose fingerprint isn’t in the
global verified_peers set. Joiner sees a JoinRefused
reply from at least one owner so the UX isn’t a silent hang.
#[serde(default)] so pre-0.3 senders default to permissive.
host_addrs: Vec<String>Phase D follow-up: dialable multiaddrs of the announcing node. Populated from AutoNAT-confirmed external addresses + relay circuit reservations (capped at 4 entries to keep the announcement small). Empty for pre-0.3-followup senders.
Consumer: when a peer sees an announcement with non-empty
host_addrs and isn’t already connected to creator_fingerprint,
it opportunistically dials the first entry. This lets cross-
internet peers bootstrap via relay-circuit addresses without
requiring an invite link.
kind: RoomKindhuddle 0.7: explicit room kind. RoomKind::Direct (1-1 DM) is
filtered out by honest 0.7+ consumers if neither member is them —
DMs never leak past the two participants’ sidebars. Pre-0.7
peers omit the field, which #[serde(default)] resolves to
RoomKind::Group (Default impl) — they keep working unchanged.
Trait Implementations§
Source§impl Clone for RoomAnnouncement
impl Clone for RoomAnnouncement
Source§fn clone(&self) -> RoomAnnouncement
fn clone(&self) -> RoomAnnouncement
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for RoomAnnouncement
impl Debug for RoomAnnouncement
Source§impl<'de> Deserialize<'de> for RoomAnnouncement
impl<'de> Deserialize<'de> for RoomAnnouncement
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Auto Trait Implementations§
impl Freeze for RoomAnnouncement
impl RefUnwindSafe for RoomAnnouncement
impl Send for RoomAnnouncement
impl Sync for RoomAnnouncement
impl Unpin for RoomAnnouncement
impl UnsafeUnpin for RoomAnnouncement
impl UnwindSafe for RoomAnnouncement
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more