Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/Threema/libthreema/lib/src/model/   (Social Medium ©)  Datei vom 26.9.2026 mit Größe 2 kB image not shown  

Quelle  distribution_list.rs   Sprache: Rust

 

//! Distribution list structs.
use std::collections::HashSet;

use libthreema_macros::Name;

use crate::{
    common::{DistributionListId, ThreemaId},
    protobuf,
    provider::ProviderError,
};

/// All protocol relevant data associated to a distribution list with the following exclusions:
///
/// - profile picture
#[derive(Clone, Debug, Name)]
#[cfg_attr(test, derive(PartialEq))]
pub struct DistributionList {
    /// Distribution list identity.
    pub identity: DistributionListId,

    /// Name of the distribution list.
    ///
    /// Empty string means that the distribution list has no provided name.
    pub name: String,

    /// Unix-ish timestamp in milliseconds when the distribution list has been created.
    pub created_at: u64,

    /// Unix-ish timestamp in milliseconds when the conversation with this distribution list was last
    /// updated.
    pub last_update_at: u64,

    /// Distribution list members (**NOT** including the user).
    pub members: HashSet<ThreemaId>,

    /// Conversation category of the distribution list.
    pub conversation_category: protobuf::d2d_sync::ConversationCategory,

    /// Conversation visibility of the distribution list.
    pub conversation_visibility: protobuf::d2d_sync::ConversationVisibility,
}

/// Distribution list storage provider.
pub trait DistributionListProvider {
    /// 1. For each `distribution_list` of `distribution_lists`:
    ///    1. If a distribution list with ID `distribution_list.identity` already exists, return
    ///       [`ProviderError::ContractViolation`].
    ///    2. For each `member` of `distribution_list.members`:
    ///       1. If `member` is the user's identity, return [`ProviderError::ContractViolation`].
    ///       2. If `member` is not a known contact¹, return [`ProviderError::ContractViolation`].
    /// 2. For each `distribution_list` of `distribution_lists`:
    ///    1. Add `distribution_list` to the application storage.
    ///
    /// ¹: This must consider contacts with any acquaintance level, including _deleted_.
    ///
    /// # Errors
    ///
    /// In case libthreema provides invalid parameters or an invalid state. Otherwise, this function is
    /// considered infallible and should not return an error.
    fn add(&mut self, distribution_lists: Vec<DistributionList>) -> Result<(), ProviderError>;

    /// Return the distribution list stored for `id`, if any.
    ///
    /// # Errors
    ///
    /// This function is considered infallible and should not return an error.
    fn get(&self, id: DistributionListId) -> Result<Option<DistributionList>, ProviderError>;

    /// Return all IDs of all distribution lists.
    ///
    /// # Errors
    ///
    /// This function is considered infallible and should not return an error.
    fn get_ids(&self) -> Result<HashSet<DistributionListId>, ProviderError>;
}

Messung
CHZG
869610093

¤ Dauer der Verarbeitung: 0.0 Sekunden  (vorverarbeitet am  2026-11-04) ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

PVS Prover

Isabelle Prover


Cephes Mathematical Library

Vienna Development Method

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.