use std::collections::HashSet;
use crate::{HomeserverConnection, MatrixUser, ProvisionRequest};
pub struct ReadOnlyHomeserverConnection<C> {
inner: C,
}
impl<C> ReadOnlyHomeserverConnection<C> {
pub fn new(inner: C) -> Self
where
C: HomeserverConnection,
{
Self { inner }
}
}
#[async_trait::async_trait]
impl<C: HomeserverConnection> HomeserverConnection for ReadOnlyHomeserverConnection<C> {
fn homeserver(&self) -> &str {
self.inner.homeserver()
}
async fn query_user(&self, mxid: &str) -> Result<MatrixUser, anyhow::Error> {
self.inner.query_user(mxid).await
}
async fn provision_user(&self, _request: &ProvisionRequest) -> Result<bool, anyhow::Error> {
anyhow::bail!("Provisioning is not supported in read-only mode");
}
async fn is_localpart_available(&self, localpart: &str) -> Result<bool, anyhow::Error> {
self.inner.is_localpart_available(localpart).await
}
async fn create_device(&self, _mxid: &str, _device_id: &str) -> Result<(), anyhow::Error> {
anyhow::bail!("Device creation is not supported in read-only mode");
}
async fn delete_device(&self, _mxid: &str, _device_id: &str) -> Result<(), anyhow::Error> {
anyhow::bail!("Device deletion is not supported in read-only mode");
}
async fn sync_devices(
&self,
_mxid: &str,
_devices: HashSet<String>,
) -> Result<(), anyhow::Error> {
anyhow::bail!("Device synchronization is not supported in read-only mode");
}
async fn delete_user(&self, _mxid: &str, _erase: bool) -> Result<(), anyhow::Error> {
anyhow::bail!("User deletion is not supported in read-only mode");
}
async fn reactivate_user(&self, _mxid: &str) -> Result<(), anyhow::Error> {
anyhow::bail!("User reactivation is not supported in read-only mode");
}
async fn set_displayname(&self, _mxid: &str, _displayname: &str) -> Result<(), anyhow::Error> {
anyhow::bail!("User displayname update is not supported in read-only mode");
}
async fn unset_displayname(&self, _mxid: &str) -> Result<(), anyhow::Error> {
anyhow::bail!("User displayname update is not supported in read-only mode");
}
async fn allow_cross_signing_reset(&self, _mxid: &str) -> Result<(), anyhow::Error> {
anyhow::bail!("Allowing cross-signing reset is not supported in read-only mode");
}
}