[fractal] BKResponse, user: remove error variants and compose over Result instead



commit e964b5ec5e123ce484796cc219c3e3cb143a06ae
Author: Alejandro Domínguez <adomu net-c com>
Date:   Mon Aug 26 22:36:37 2019 +0200

    BKResponse, user: remove error variants and compose over Result instead

 fractal-gtk/src/app/backend_loop.rs     |  38 ++--
 fractal-matrix-api/src/backend/mod.rs   |   2 +-
 fractal-matrix-api/src/backend/types.rs |  41 ++--
 fractal-matrix-api/src/backend/user.rs  | 332 +++++++++++---------------------
 fractal-matrix-api/src/error.rs         |   1 +
 5 files changed, 145 insertions(+), 269 deletions(-)
---
diff --git a/fractal-gtk/src/app/backend_loop.rs b/fractal-gtk/src/app/backend_loop.rs
index 81d82c67..0efb0e90 100644
--- a/fractal-gtk/src/app/backend_loop.rs
+++ b/fractal-gtk/src/app/backend_loop.rs
@@ -32,58 +32,58 @@ pub fn backend_loop(rx: Receiver<BKResponse>) {
                 Ok(BKResponse::Logout(Ok(_))) => {
                     APPOP!(bk_logout);
                 }
-                Ok(BKResponse::Name(username)) => {
+                Ok(BKResponse::Name(Ok(username))) => {
                     let u = Some(username);
                     APPOP!(set_username, (u));
                 }
-                Ok(BKResponse::GetThreePID(list)) => {
+                Ok(BKResponse::GetThreePID(Ok(list))) => {
                     let l = Some(list);
                     APPOP!(set_three_pid, (l));
                 }
-                Ok(BKResponse::GetTokenEmail(sid, secret)) => {
+                Ok(BKResponse::GetTokenEmail(Ok((sid, secret)))) => {
                     let sid = Some(sid);
                     let secret = Some(secret);
                     APPOP!(get_token_email, (sid, secret));
                 }
-                Ok(BKResponse::GetTokenPhone(sid, secret)) => {
+                Ok(BKResponse::GetTokenPhone(Ok((sid, secret)))) => {
                     let sid = Some(sid);
                     let secret = Some(secret);
                     APPOP!(get_token_phone, (sid, secret));
                 }
-                Ok(BKResponse::GetTokenEmailUsed) => {
+                Ok(BKResponse::GetTokenEmail(Err(Error::TokenUsed))) => {
                     let error = i18n("Email is already in use");
                     APPOP!(show_three_pid_error_dialog, (error));
                 }
-                Ok(BKResponse::GetTokenPhoneUsed) => {
+                Ok(BKResponse::GetTokenPhone(Err(Error::TokenUsed))) => {
                     let error = i18n("Phone number is already in use");
                     APPOP!(show_three_pid_error_dialog, (error));
                 }
-                Ok(BKResponse::SubmitPhoneToken(sid, secret)) => {
+                Ok(BKResponse::SubmitPhoneToken(Ok((sid, secret)))) => {
                     let secret = Some(secret);
                     APPOP!(valid_phone_token, (sid, secret));
                 }
-                Ok(BKResponse::AddThreePID(list)) => {
+                Ok(BKResponse::AddThreePID(Ok(list))) => {
                     let l = Some(list);
                     APPOP!(added_three_pid, (l));
                 }
-                Ok(BKResponse::DeleteThreePID) => {
+                Ok(BKResponse::DeleteThreePID(Ok(_))) => {
                     APPOP!(get_three_pid);
                 }
-                Ok(BKResponse::ChangePassword) => {
+                Ok(BKResponse::ChangePassword(Ok(_))) => {
                     APPOP!(password_changed);
                 }
-                Ok(BKResponse::SetUserName(username)) => {
+                Ok(BKResponse::SetUserName(Ok(username))) => {
                     let u = Some(username);
                     APPOP!(show_new_username, (u));
                 }
-                Ok(BKResponse::AccountDestruction) => {
+                Ok(BKResponse::AccountDestruction(Ok(_))) => {
                     APPOP!(account_destruction_logoff);
                 }
-                Ok(BKResponse::Avatar(path)) => {
+                Ok(BKResponse::Avatar(Ok(path))) => {
                     let av = Some(path);
                     APPOP!(set_avatar, (av));
                 }
-                Ok(BKResponse::SetUserAvatar(path)) => {
+                Ok(BKResponse::SetUserAvatar(Ok(path))) => {
                     let av = Some(path);
                     APPOP!(show_new_avatar, (av));
                 }
@@ -183,27 +183,27 @@ pub fn backend_loop(rx: Receiver<BKResponse>) {
                 Ok(BKResponse::AddedToFav(Ok((r, tofav)))) => {
                     APPOP!(added_to_fav, (r, tofav));
                 }
-                Ok(BKResponse::UserSearch(users)) => {
+                Ok(BKResponse::UserSearch(Ok(users))) => {
                     APPOP!(user_search_finished, (users));
                 }
 
                 // errors
-                Ok(BKResponse::AccountDestructionError(err)) => {
+                Ok(BKResponse::AccountDestruction(Err(err))) => {
                     let error = i18n("Couldn’t delete the account");
                     error!("{:?}", err);
                     APPOP!(show_error_dialog, (error));
                 }
-                Ok(BKResponse::ChangePasswordError(err)) => {
+                Ok(BKResponse::ChangePassword(Err(err))) => {
                     let error = i18n("Couldn’t change the password");
                     error!("{:?}", err);
                     APPOP!(show_password_error_dialog, (error));
                 }
-                Ok(BKResponse::GetTokenEmailError(err)) => {
+                Ok(BKResponse::GetTokenEmail(Err(err))) => {
                     let error = i18n("Couldn’t add the email address.");
                     error!("{:?}", err);
                     APPOP!(show_three_pid_error_dialog, (error));
                 }
-                Ok(BKResponse::GetTokenPhoneError(err)) => {
+                Ok(BKResponse::GetTokenPhone(Err(err))) => {
                     let error = i18n("Couldn’t add the phone number.");
                     error!("{:?}", err);
                     APPOP!(show_three_pid_error_dialog, (error));
diff --git a/fractal-matrix-api/src/backend/mod.rs b/fractal-matrix-api/src/backend/mod.rs
index dac3fbc3..d79fdf63 100644
--- a/fractal-matrix-api/src/backend/mod.rs
+++ b/fractal-matrix-api/src/backend/mod.rs
@@ -134,7 +134,7 @@ impl Backend {
             Ok(BKCommand::SetUserAvatar(file)) => user::set_user_avatar(self, file),
             Ok(BKCommand::GetAvatarAsync(member, ctx)) => user::get_avatar_async(self, member, ctx),
             Ok(BKCommand::GetUserInfoAsync(sender, ctx)) => {
-                user::get_user_info_async(self, &sender, ctx)
+                user::get_user_info_async(self, sender, ctx)
             }
             Ok(BKCommand::GetUserNameAsync(sender, ctx)) => {
                 user::get_username_async(self, sender, ctx)
diff --git a/fractal-matrix-api/src/backend/types.rs b/fractal-matrix-api/src/backend/types.rs
index 40d0e945..ca2bf248 100644
--- a/fractal-matrix-api/src/backend/types.rs
+++ b/fractal-matrix-api/src/backend/types.rs
@@ -90,20 +90,18 @@ pub enum BKResponse {
     ShutDown,
     Token(String, String, Option<String>),
     Logout(Result<(), Error>),
-    Name(String),
-    SetUserName(String),
-    GetThreePID(Vec<ThirdPartyIdentifier>),
-    GetTokenEmail(String, String),
-    GetTokenPhone(String, String),
-    SubmitPhoneToken(Option<String>, String),
-    AddThreePID(String),
-    GetTokenPhoneUsed,
-    GetTokenEmailUsed,
-    DeleteThreePID,
-    ChangePassword,
-    AccountDestruction,
-    Avatar(String),
-    SetUserAvatar(String),
+    Name(Result<String, Error>),
+    SetUserName(Result<String, Error>),
+    GetThreePID(Result<Vec<ThirdPartyIdentifier>, Error>),
+    GetTokenEmail(Result<(String, String), Error>),
+    GetTokenPhone(Result<(String, String), Error>),
+    SubmitPhoneToken(Result<(Option<String>, String), Error>),
+    AddThreePID(Result<String, Error>),
+    DeleteThreePID(Result<(), Error>),
+    ChangePassword(Result<(), Error>),
+    AccountDestruction(Result<(), Error>),
+    Avatar(Result<String, Error>),
+    SetUserAvatar(Result<String, Error>),
     Sync(Result<String, Error>),
     Rooms(Vec<Room>, Option<Room>),
     UpdateRooms(Vec<Room>),
@@ -133,27 +131,14 @@ pub enum BKResponse {
     NewRoom(Result<Room, Error>, String),
     AddedToFav(Result<(String, bool), Error>),
     RoomNotifications(String, i32, i32),
-    UserSearch(Vec<Member>),
+    UserSearch(Result<Vec<Member>, Error>),
     Stickers(Result<Vec<StickerGroup>, Error>),
 
     //errors
-    UserNameError(Error),
-    SetUserNameError(Error),
-    GetThreePIDError(Error),
-    GetTokenEmailError(Error),
-    GetTokenPhoneError(Error),
-    SubmitPhoneTokenError(Error),
-    AddThreePIDError(Error),
-    DeleteThreePIDError(Error),
-    ChangePasswordError(Error),
-    AccountDestructionError(Error),
-    AvatarError(Error),
-    SetUserAvatarError(Error),
     LoginError(Error),
     GuestLoginError(Error),
     SendTypingError(Error),
     SetRoomError(Error),
-    CommandError(Error),
     GetFileAsyncError(Error),
     InviteError(Error),
 }
diff --git a/fractal-matrix-api/src/backend/user.rs b/fractal-matrix-api/src/backend/user.rs
index 97a9e3e8..83d19777 100644
--- a/fractal-matrix-api/src/backend/user.rs
+++ b/fractal-matrix-api/src/backend/user.rs
@@ -79,19 +79,11 @@ pub fn get_username(bk: &Backend) {
                     .execute(request)?
                     .json::<GetDisplayNameResponse>()
                     .map_err(Into::into)
-            });
+            })
+            .map(|response| response.displayname.unwrap_or(uid));
 
-        match query {
-            Ok(response) => {
-                let name = response.displayname.unwrap_or(uid);
-                tx.send(BKResponse::Name(name))
-                    .expect_log("Connection closed");
-            }
-            Err(err) => {
-                tx.send(BKResponse::UserNameError(err))
-                    .expect_log("Connection closed");
-            }
-        }
+        tx.send(BKResponse::Name(query))
+            .expect_log("Connection closed");
     });
 }
 
@@ -109,17 +101,12 @@ pub fn get_username_async(bk: &Backend, uid: String, tx: Sender<String>) {
                     .execute(request)?
                     .json::<GetDisplayNameResponse>()
                     .map_err(Into::into)
-            });
+            })
+            .ok()
+            .and_then(|response| response.displayname)
+            .unwrap_or(uid);
 
-        match query {
-            Ok(response) => {
-                let name = response.displayname.unwrap_or(uid);
-                tx.send(name).expect_log("Connection closed");
-            }
-            Err(_) => {
-                tx.send(uid).expect_log("Connection closed");
-            }
-        }
+        tx.send(query).expect_log("Connection closed");
     });
 }
 
@@ -142,18 +129,11 @@ pub fn set_username(bk: &Backend, name: String) {
                     .get_client()?
                     .execute(request)
                     .map_err(Into::into)
-            });
+            })
+            .and(Ok(name));
 
-        match query {
-            Ok(_) => {
-                tx.send(BKResponse::SetUserName(name))
-                    .expect_log("Connection closed");
-            }
-            Err(err) => {
-                tx.send(BKResponse::SetUserNameError(err))
-                    .expect_log("Connection closed");
-            }
-        }
+        tx.send(BKResponse::SetUserName(query))
+            .expect_log("Connection closed");
     });
 }
 
@@ -173,18 +153,11 @@ pub fn get_threepid(bk: &Backend) {
                     .execute(request)?
                     .json::<ThirdPartyIDResponse>()
                     .map_err(Into::into)
-            });
+            })
+            .map(|response| response.threepids);
 
-        match query {
-            Ok(response) => {
-                tx.send(BKResponse::GetThreePID(response.threepids))
-                    .expect_log("Connection closed");
-            }
-            Err(err) => {
-                tx.send(BKResponse::GetThreePIDError(err))
-                    .expect_log("Connection closed");
-            }
-        }
+        tx.send(BKResponse::GetThreePID(query))
+            .expect_log("Connection closed");
     });
 }
 
@@ -211,24 +184,19 @@ pub fn get_email_token(bk: &Backend, identity: String, email: String, client_sec
                     .execute(request)?
                     .json::<EmailTokenResponse>()
                     .map_err(Into::into)
+            })
+            .map(|response| (response.sid, client_secret))
+            .map_err(|error| match error {
+                Error::MatrixError(ref js)
+                    if js["errcode"].as_str().unwrap_or_default() == "M_THREEPID_IN_USE" =>
+                {
+                    Error::TokenUsed
+                }
+                err => err,
             });
 
-        match query {
-            Ok(response) => {
-                tx.send(BKResponse::GetTokenEmail(response.sid, client_secret))
-                    .expect_log("Connection closed");
-            }
-            Err(Error::MatrixError(ref js))
-                if js["errcode"].as_str().unwrap_or_default() == "M_THREEPID_IN_USE" =>
-            {
-                tx.send(BKResponse::GetTokenEmailUsed)
-                    .expect_log("Connection closed");
-            }
-            Err(err) => {
-                tx.send(BKResponse::GetTokenEmailError(err))
-                    .expect_log("Connection closed");
-            }
-        }
+        tx.send(BKResponse::GetTokenEmail(query))
+            .expect_log("Connection closed");
     });
 }
 
@@ -256,24 +224,19 @@ pub fn get_phone_token(bk: &Backend, identity: String, phone: String, client_sec
                     .execute(request)?
                     .json::<PhoneTokenResponse>()
                     .map_err(Into::into)
+            })
+            .map(|response| (response.sid, client_secret))
+            .map_err(|error| match error {
+                Error::MatrixError(ref js)
+                    if js["errcode"].as_str().unwrap_or_default() == "M_THREEPID_IN_USE" =>
+                {
+                    Error::TokenUsed
+                }
+                err => err,
             });
 
-        match query {
-            Ok(response) => {
-                tx.send(BKResponse::GetTokenPhone(response.sid, client_secret))
-                    .expect_log("Connection closed");
-            }
-            Err(Error::MatrixError(ref js))
-                if js["errcode"].as_str().unwrap_or_default() == "M_THREEPID_IN_USE" =>
-            {
-                tx.send(BKResponse::GetTokenPhoneUsed)
-                    .expect_log("Connection closed");
-            }
-            Err(err) => {
-                tx.send(BKResponse::GetTokenPhoneError(err))
-                    .expect_log("Connection closed");
-            }
-        }
+        tx.send(BKResponse::GetTokenPhone(query))
+            .expect_log("Connection closed");
     });
 }
 
@@ -300,18 +263,11 @@ pub fn add_threepid(bk: &Backend, identity: String, client_secret: String, sid:
                     .get_client()?
                     .execute(request)
                     .map_err(Into::into)
-            });
+            })
+            .and(Ok(sid));
 
-        match query {
-            Ok(_) => {
-                tx.send(BKResponse::AddThreePID(sid))
-                    .expect_log("Connection closed");
-            }
-            Err(err) => {
-                tx.send(BKResponse::AddThreePIDError(err))
-                    .expect_log("Connection closed");
-            }
-        }
+        tx.send(BKResponse::AddThreePID(query))
+            .expect_log("Connection closed");
     });
 }
 
@@ -334,19 +290,11 @@ pub fn submit_phone_token(bk: &Backend, client_secret: String, sid: String, toke
                     .execute(request)?
                     .json::<SubmitPhoneTokenResponse>()
                     .map_err(Into::into)
-            });
+            })
+            .map(|response| (Some(sid).filter(|_| response.success), client_secret));
 
-        match query {
-            Ok(response) => {
-                let result = Some(sid).filter(|_| response.success);
-                tx.send(BKResponse::SubmitPhoneToken(result, client_secret))
-                    .expect_log("Connection closed");
-            }
-            Err(err) => {
-                tx.send(BKResponse::SubmitPhoneTokenError(err))
-                    .expect_log("Connection closed");
-            }
-        }
+        tx.send(BKResponse::SubmitPhoneToken(query))
+            .expect_log("Connection closed");
     });
 }
 
@@ -366,18 +314,11 @@ pub fn delete_three_pid(bk: &Backend, medium: Medium, address: String) {
                     .get_client()?
                     .execute(request)
                     .map_err(Into::into)
-            });
+            })
+            .and(Ok(()));
 
-        match query {
-            Ok(_) => {
-                tx.send(BKResponse::DeleteThreePID)
-                    .expect_log("Connection closed");
-            }
-            Err(err) => {
-                tx.send(BKResponse::DeleteThreePIDError(err))
-                    .expect_log("Connection closed");
-            }
-        }
+        tx.send(BKResponse::DeleteThreePID(query))
+            .expect_log("Connection closed");
     });
 }
 
@@ -404,18 +345,11 @@ pub fn change_password(bk: &Backend, user: String, old_password: String, new_pas
                     .get_client()?
                     .execute(request)
                     .map_err(Into::into)
-            });
+            })
+            .and(Ok(()));
 
-        match query {
-            Ok(_) => {
-                tx.send(BKResponse::ChangePassword)
-                    .expect_log("Connection closed");
-            }
-            Err(err) => {
-                tx.send(BKResponse::ChangePasswordError(err))
-                    .expect_log("Connection closed");
-            }
-        }
+        tx.send(BKResponse::ChangePassword(query))
+            .expect_log("Connection closed");
     });
 }
 
@@ -441,18 +375,11 @@ pub fn account_destruction(bk: &Backend, user: String, password: String) {
                     .get_client()?
                     .execute(request)
                     .map_err(Into::into)
-            });
+            })
+            .and(Ok(()));
 
-        match query {
-            Ok(_) => {
-                tx.send(BKResponse::AccountDestruction)
-                    .expect_log("Connection closed");
-            }
-            Err(err) => {
-                tx.send(BKResponse::AccountDestructionError(err))
-                    .expect_log("Connection closed");
-            }
-        }
+        tx.send(BKResponse::AccountDestruction(query))
+            .expect_log("Connection closed");
     });
 }
 
@@ -461,15 +388,10 @@ pub fn get_avatar(bk: &Backend) {
     let userid = bk.data.lock().unwrap().user_id.clone();
 
     let tx = bk.tx.clone();
-    thread::spawn(move || match get_user_avatar(&base, &userid) {
-        Ok((_, fname)) => {
-            tx.send(BKResponse::Avatar(fname))
-                .expect_log("Connection closed");
-        }
-        Err(err) => {
-            tx.send(BKResponse::AvatarError(err))
-                .expect_log("Connection closed");
-        }
+    thread::spawn(move || {
+        let query = get_user_avatar(&base, &userid).map(|(_, fname)| fname);
+        tx.send(BKResponse::Avatar(query))
+            .expect_log("Connection closed");
     });
 }
 
@@ -479,17 +401,10 @@ pub fn get_avatar_async(bk: &Backend, member: Option<Member>, tx: Sender<String>
         let uid = member.uid.clone();
         let avatar = member.avatar.clone().unwrap_or_default();
 
-        semaphore(
-            bk.limit_threads.clone(),
-            move || match get_user_avatar_img(&base, &uid, &avatar) {
-                Ok(fname) => {
-                    tx.send(fname).expect_log("Connection closed");
-                }
-                Err(_) => {
-                    tx.send(Default::default()).expect_log("Connection closed");
-                }
-            },
-        );
+        semaphore(bk.limit_threads.clone(), move || {
+            let fname = get_user_avatar_img(&base, &uid, &avatar).unwrap_or_default();
+            tx.send(fname).expect_log("Connection closed");
+        });
     } else {
         tx.send(Default::default()).expect_log("Connection closed");
     }
@@ -507,54 +422,47 @@ pub fn set_user_avatar(bk: &Backend, avatar: String) {
     };
 
     thread::spawn(move || {
-        let query = fs::read(&avatar).map_err(Into::into).and_then(|contents| {
-            let (mime, _) = gio::content_type_guess(None, &contents);
-            let mime_value = HeaderValue::from_str(&mime).or(Err(Error::BackendError))?;
-            let upload_response =
-                create_content(base.clone(), &params_upload, contents, Some(mime_value))
-                    .map_err::<Error, _>(Into::into)
+        let query = fs::read(&avatar)
+            .map_err(Into::into)
+            .and_then(|contents| {
+                let (mime, _) = gio::content_type_guess(None, &contents);
+                let mime_value = HeaderValue::from_str(&mime).or(Err(Error::BackendError))?;
+                let upload_response =
+                    create_content(base.clone(), &params_upload, contents, Some(mime_value))
+                        .map_err::<Error, _>(Into::into)
+                        .and_then(|request| {
+                            HTTP_CLIENT
+                                .get_client()?
+                                .execute(request)?
+                                .json::<CreateContentResponse>()
+                                .map_err(Into::into)
+                        })?;
+
+                let params_avatar = SetAvatarUrlParameters { access_token };
+                let body = SetAvatarUrlBody {
+                    avatar_url: Some(upload_response.content_uri),
+                };
+
+                set_avatar_url(base, &params_avatar, &body, &encode_uid(&id))
+                    .map_err(Into::into)
                     .and_then(|request| {
                         HTTP_CLIENT
                             .get_client()?
-                            .execute(request)?
-                            .json::<CreateContentResponse>()
+                            .execute(request)
                             .map_err(Into::into)
-                    })?;
-
-            let params_avatar = SetAvatarUrlParameters { access_token };
-            let body = SetAvatarUrlBody {
-                avatar_url: Some(upload_response.content_uri),
-            };
-
-            set_avatar_url(base, &params_avatar, &body, &encode_uid(&id))
-                .map_err(Into::into)
-                .and_then(|request| {
-                    HTTP_CLIENT
-                        .get_client()?
-                        .execute(request)
-                        .map_err(Into::into)
-                })
-        });
+                    })
+            })
+            .and(Ok(avatar));
 
-        match query {
-            Ok(_) => {
-                tx.send(BKResponse::SetUserAvatar(avatar))
-                    .expect_log("Connection closed");
-            }
-            Err(err) => {
-                tx.send(BKResponse::SetUserAvatarError(err))
-                    .expect_log("Connection closed");
-            }
-        }
+        tx.send(BKResponse::SetUserAvatar(query))
+            .expect_log("Connection closed");
     });
 }
 
-pub fn get_user_info_async(bk: &mut Backend, uid: &str, tx: Option<Sender<(String, String)>>) {
+pub fn get_user_info_async(bk: &mut Backend, uid: String, tx: Option<Sender<(String, String)>>) {
     let baseu = bk.get_base_url();
 
-    let u = uid.to_string();
-
-    if let Some(info) = bk.user_info_cache.get(&u) {
+    if let Some(info) = bk.user_info_cache.get(&uid) {
         if let Some(tx) = tx.clone() {
             let info = info.clone();
             thread::spawn(move || {
@@ -565,31 +473,21 @@ pub fn get_user_info_async(bk: &mut Backend, uid: &str, tx: Option<Sender<(Strin
         return;
     }
 
-    let info = Arc::new(Mutex::new((String::new(), String::new())));
-    let cache_key = u.clone();
-    let cache_value = info.clone();
+    let info: Arc<Mutex<(String, String)>> = Default::default();
+    bk.user_info_cache.insert(uid.clone(), info.clone());
 
     semaphore(bk.limit_threads.clone(), move || {
-        let i0 = info.lock();
-        match get_user_avatar(&baseu, &u) {
-            Ok(info) => {
-                if let Some(tx) = tx.clone() {
-                    tx.send(info.clone()).expect_log("Connection closed");
-                    let mut i = i0.unwrap();
-                    i.0 = info.0;
-                    i.1 = info.1;
-                }
+        match (get_user_avatar(&baseu, &uid), tx) {
+            (Ok(i0), Some(tx)) => {
+                tx.send(i0.clone()).expect_log("Connection closed");
+                *info.lock().unwrap() = i0;
             }
-            Err(_) => {
-                if let Some(tx) = tx.clone() {
-                    tx.send((String::new(), String::new()))
-                        .expect_log("Connection closed");
-                }
+            (Err(_), Some(tx)) => {
+                tx.send(Default::default()).expect_log("Connection closed");
             }
+            _ => {}
         };
     });
-
-    bk.user_info_cache.insert(cache_key, cache_value);
 }
 
 pub fn search(bk: &Backend, search_term: String) {
@@ -612,19 +510,11 @@ pub fn search(bk: &Backend, search_term: String) {
                     .execute(request)?
                     .json::<UserDirectoryResponse>()
                     .map_err(Into::into)
-            });
+            })
+            .map(|response| response.results.into_iter().map(Into::into).collect());
 
-        match query {
-            Ok(response) => {
-                let users = response.results.into_iter().map(Into::into).collect();
-                tx.send(BKResponse::UserSearch(users))
-                    .expect_log("Connection closed");
-            }
-            Err(err) => {
-                tx.send(BKResponse::CommandError(err))
-                    .expect_log("Connection closed");
-            }
-        }
+        tx.send(BKResponse::UserSearch(query))
+            .expect_log("Connection closed");
     });
 }
 
diff --git a/fractal-matrix-api/src/error.rs b/fractal-matrix-api/src/error.rs
index f2d18629..ea73e087 100644
--- a/fractal-matrix-api/src/error.rs
+++ b/fractal-matrix-api/src/error.rs
@@ -12,6 +12,7 @@ pub enum Error {
     MatrixError(JsonValue),
     SendMsgError(String),
     SendMsgRedactionError(String),
+    TokenUsed,
 }
 
 impl From<reqwest::Error> for Error {


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]