pub struct CommunityV2 {Show 13 fields
pub identity: CommunityIdentity,
pub community_root: [u8; 32],
pub root_epoch: Epoch,
pub name: String,
pub description: Option<String>,
pub icon: Option<ImageRef>,
pub banner: Option<ImageRef>,
pub meta_custom: Option<Map<String, Value>>,
pub meta_extra: Map<String, Value>,
pub relays: Vec<String>,
pub channels: Vec<ChannelV2>,
pub dissolved: bool,
pub created_at_ms: u64,
}Expand description
A v2 community in memory: its self-certifying identity, base access key, and
channels. Persisted via crate::db::community’s v2 helpers into the shared
community tables (with the migration-65 columns).
Fields§
§identity: CommunityIdentity§community_root: [u8; 32]The base @everyone access key at root_epoch — holding it IS membership.
root_epoch: Epoch§name: String§description: Option<String>§icon: Option<ImageRef>Folded vsk-0 icon/banner. Held so a local edit republishes the FULL metadata document — an edition replaces the entity, so an editor that doesn’t carry these forward wipes them for everyone (CORD-02 §6).
meta_custom: Option<Map<String, Value>>Folded vsk-0 client-extensible object + unknown top-level fields — carried through our own editions verbatim (CORD-02 §6).
meta_extra: Map<String, Value>§relays: Vec<String>§channels: Vec<ChannelV2>§dissolved: bool§created_at_ms: u64Local wall-clock of first acquisition (ms), for display ordering.
Implementations§
Source§impl CommunityV2
impl CommunityV2
Sourcepub fn from_genesis(
g: &Genesis,
name: &str,
description: Option<String>,
relays: Vec<String>,
created_at_ms: u64,
) -> CommunityV2
pub fn from_genesis( g: &Genesis, name: &str, description: Option<String>, relays: Vec<String>, created_at_ms: u64, ) -> CommunityV2
Build the owner’s fresh community from a Genesis (the two genesis
editions are the caller’s to publish). The #general channel is Public.
Sourcepub fn from_bundle(
bundle: &CommunityInvite,
created_at_ms: u64,
) -> Result<CommunityV2, String>
pub fn from_bundle( bundle: &CommunityInvite, created_at_ms: u64, ) -> Result<CommunityV2, String>
Reconstruct a member’s community from an accepted invite bundle. The
bundle’s owner commitment MUST already have been verified
(CommunityInvite::validate) — this re-checks it fail-closed anyway.
A channel is treated as Private iff its bundle key differs from the
community_root (a Public channel’s “key” is the root; a Private one
carries its own).
Sourcepub fn id(&self) -> &CommunityId
pub fn id(&self) -> &CommunityId
The community_id this community is anchored on.
Sourcepub fn metadata(&self) -> CommunityMetadata
pub fn metadata(&self) -> CommunityMetadata
The full vsk-0 metadata document rebuilt from held state — the base every
local edit MUST start from, so changing one field can’t wipe the rest
(CORD-02 §6), foreign clients’ custom/extra fields included.
Sourcepub fn owner(&self) -> Result<PublicKey, String>
pub fn owner(&self) -> Result<PublicKey, String>
The proven owner (the identity self-certifies at construction).
pub fn channel(&self, id: &ChannelId) -> Option<&ChannelV2>
Sourcepub fn primary_channel(&self) -> Option<&ChannelV2>
pub fn primary_channel(&self) -> Option<&ChannelV2>
The ONE channel the chat list surfaces for this community (multi-channel
UI is a later cut, mirroring v1’s single-channel groups): a readable
#general when present, else the oldest readable channel, else the first.
A keyless Private channel is skipped — it can’t render a single message.
Sourcepub fn channel_secret(&self, ch: &ChannelV2) -> ([u8; 32], Epoch)
pub fn channel_secret(&self, ch: &ChannelV2) -> ([u8; 32], Epoch)
The encryption secret + epoch that address a channel’s Chat Plane: the
community_root at root_epoch for a Public channel, the channel’s own
key at its own epoch for a Private one (CORD-03 §1).
Sourcepub fn channel_read_coords(&self, ch: &ChannelV2) -> Vec<([u8; 32], Epoch)>
pub fn channel_read_coords(&self, ch: &ChannelV2) -> Vec<([u8; 32], Epoch)>
Every (secret, epoch) pair to query for a channel’s history — for the
first cut this is the single current head; the multi-epoch archive
(across rekeys) layers on once rotation lands in the service.
Sourcepub fn to_summary_json(&self) -> Value
pub fn to_summary_json(&self) -> Value
The untyped summary the facade hands the SDK (protocol-agnostic shape +
a version tell). Kept deliberately close to v1’s summary keys so a
consumer treats both uniformly.
Trait Implementations§
Source§impl Clone for CommunityV2
impl Clone for CommunityV2
Source§fn clone(&self) -> CommunityV2
fn clone(&self) -> CommunityV2
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreAuto Trait Implementations§
impl Freeze for CommunityV2
impl RefUnwindSafe for CommunityV2
impl Send for CommunityV2
impl Sync for CommunityV2
impl Unpin for CommunityV2
impl UnsafeUnpin for CommunityV2
impl UnwindSafe for CommunityV2
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,
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