im-core 0.1.0

Rust IM SDK for Awiki clients built on Agent Network Protocol (ANP)
Documentation
use std::cell::RefCell;

use anp::group_e2ee::operations::{
    AbortCommitInput, AbortCommitOutput, AddMemberInput, CreateGroupInput, DecryptInput,
    DecryptOutput, EncryptInput, EncryptOutput, FinalizeCommitInput, FinalizeCommitOutput,
    GenerateKeyPackageInput, GroupKeyPackageOutput, LeaveGroupInput, PreparedMlsCommitOutput,
    ProcessNoticeInput, ProcessNoticeOutput, ProcessWelcomeInput, ProcessWelcomeOutput,
    RecoverMemberInput, RemoveMemberInput, StatusInput, StatusOutput, UpdateMemberInput,
};

use super::provider::GroupMlsProvider;

#[derive(Debug, Clone, PartialEq, Eq)]
pub(crate) enum FakeGroupMlsCall {
    GenerateKeyPackage,
    CreateGroupPrepare,
    AddMemberPrepare,
    RemoveMemberPrepare,
    LeavePrepare,
    UpdateMemberPrepare,
    RecoverMemberPrepare,
    FinalizeCommit,
    AbortCommit,
    ProcessWelcome,
    ProcessNotice,
    Encrypt,
    Decrypt,
    Status,
}

#[derive(Default)]
pub(crate) struct FakeGroupMlsProvider {
    calls: RefCell<Vec<FakeGroupMlsCall>>,
}

impl FakeGroupMlsProvider {
    pub(crate) fn calls(&self) -> Vec<FakeGroupMlsCall> {
        self.calls.borrow().clone()
    }

    fn record_unsupported<T>(&self, call: FakeGroupMlsCall) -> crate::ImResult<T> {
        self.calls.borrow_mut().push(call);
        Err(crate::ImError::unsupported("group-e2ee-fake-provider"))
    }
}

impl GroupMlsProvider for FakeGroupMlsProvider {
    fn generate_key_package(
        &self,
        _input: GenerateKeyPackageInput,
    ) -> crate::ImResult<GroupKeyPackageOutput> {
        self.record_unsupported(FakeGroupMlsCall::GenerateKeyPackage)
    }

    fn create_group_prepare(
        &self,
        _input: CreateGroupInput,
    ) -> crate::ImResult<PreparedMlsCommitOutput> {
        self.record_unsupported(FakeGroupMlsCall::CreateGroupPrepare)
    }

    fn add_member_prepare(
        &self,
        _input: AddMemberInput,
    ) -> crate::ImResult<PreparedMlsCommitOutput> {
        self.record_unsupported(FakeGroupMlsCall::AddMemberPrepare)
    }

    fn remove_member_prepare(
        &self,
        _input: RemoveMemberInput,
    ) -> crate::ImResult<PreparedMlsCommitOutput> {
        self.record_unsupported(FakeGroupMlsCall::RemoveMemberPrepare)
    }

    fn leave_prepare(&self, _input: LeaveGroupInput) -> crate::ImResult<PreparedMlsCommitOutput> {
        self.record_unsupported(FakeGroupMlsCall::LeavePrepare)
    }

    fn update_member_prepare(
        &self,
        _input: UpdateMemberInput,
    ) -> crate::ImResult<PreparedMlsCommitOutput> {
        self.record_unsupported(FakeGroupMlsCall::UpdateMemberPrepare)
    }

    fn recover_member_prepare(
        &self,
        _input: RecoverMemberInput,
    ) -> crate::ImResult<PreparedMlsCommitOutput> {
        self.record_unsupported(FakeGroupMlsCall::RecoverMemberPrepare)
    }

    fn finalize_commit(
        &self,
        _input: FinalizeCommitInput,
    ) -> crate::ImResult<FinalizeCommitOutput> {
        self.record_unsupported(FakeGroupMlsCall::FinalizeCommit)
    }

    fn abort_commit(&self, _input: AbortCommitInput) -> crate::ImResult<AbortCommitOutput> {
        self.record_unsupported(FakeGroupMlsCall::AbortCommit)
    }

    fn process_welcome(
        &self,
        _input: ProcessWelcomeInput,
    ) -> crate::ImResult<ProcessWelcomeOutput> {
        self.record_unsupported(FakeGroupMlsCall::ProcessWelcome)
    }

    fn process_notice(&self, _input: ProcessNoticeInput) -> crate::ImResult<ProcessNoticeOutput> {
        self.record_unsupported(FakeGroupMlsCall::ProcessNotice)
    }

    fn encrypt(&self, _input: EncryptInput) -> crate::ImResult<EncryptOutput> {
        self.record_unsupported(FakeGroupMlsCall::Encrypt)
    }

    fn decrypt(&self, _input: DecryptInput) -> crate::ImResult<DecryptOutput> {
        self.record_unsupported(FakeGroupMlsCall::Decrypt)
    }

    fn status(&self, _input: StatusInput) -> crate::ImResult<StatusOutput> {
        self.record_unsupported(FakeGroupMlsCall::Status)
    }
}