use matrix_sdk_base::crypto::store::types::RoomKeyCounts;
use ruma::events::macros::EventContent;
use serde::{Deserialize, Serialize};
use thiserror::Error;
use zeroize::{Zeroize, ZeroizeOnDrop};
#[cfg(doc)]
use crate::encryption::{
backups::Backups,
recovery::{Recovery, futures::Enable},
};
pub type Result<A, E = RecoveryError> = std::result::Result<A, E>;
#[derive(Debug, Error)]
pub enum RecoveryError {
#[error(
"A backup already exists on the homeserver and the method does not allow to overwrite it"
)]
BackupExistsOnServer,
#[error(transparent)]
Sdk(#[from] crate::Error),
#[error(transparent)]
SecretStorage(#[from] crate::encryption::secret_storage::SecretStorageError),
}
#[derive(Debug, Default, Clone, Zeroize, ZeroizeOnDrop)]
pub enum EnableProgress {
#[default]
Starting,
CreatingBackup,
CreatingRecoveryKey,
#[zeroize(skip)]
BackingUp(RoomKeyCounts),
RoomKeyUploadError,
Done {
recovery_key: String,
},
}
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq)]
pub enum RecoveryState {
#[default]
Unknown,
Enabled,
Disabled,
Incomplete,
}
#[derive(Clone, Debug, Default, Deserialize, Serialize, EventContent)]
#[ruma_event(type = "m.secret_storage.default_key", kind = GlobalAccountData)]
pub(super) struct SecretStorageDisabledContent {}
#[derive(Clone, Debug, Default, Deserialize, Serialize, EventContent)]
#[ruma_event(type = "m.org.matrix.custom.backup_disabled", kind = GlobalAccountData)]
pub(super) struct BackupDisabledContent {
pub disabled: bool,
}