[fractal] API: Remove use of combinators
- From: Daniel Garcia Moreno <danigm src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [fractal] API: Remove use of combinators
- Date: Mon, 11 May 2020 17:19:59 +0000 (UTC)
commit f3362ff174b652b31f54806fc153c8a4d4007876
Author: Alejandro DomÃnguez <adomu net-c com>
Date: Tue Apr 28 02:48:39 2020 +0200
API: Remove use of combinators
fractal-matrix-api/src/backend/directory.rs | 22 +--
fractal-matrix-api/src/backend/media.rs | 18 +--
fractal-matrix-api/src/backend/register.rs | 27 ++--
fractal-matrix-api/src/backend/room.rs | 217 ++++++++++----------------
fractal-matrix-api/src/backend/user.rs | 230 ++++++++++------------------
5 files changed, 180 insertions(+), 334 deletions(-)
---
diff --git a/fractal-matrix-api/src/backend/directory.rs b/fractal-matrix-api/src/backend/directory.rs
index 0982fe7a..b8ad698a 100644
--- a/fractal-matrix-api/src/backend/directory.rs
+++ b/fractal-matrix-api/src/backend/directory.rs
@@ -28,22 +28,14 @@ use crate::types::Room;
pub fn protocols(base: Url, access_token: AccessToken) -> Result<Vec<ProtocolInstance>, Error> {
let params = SupportedProtocolsParameters { access_token };
+ let request = get_supported_protocols(base, ¶ms)?;
+ let response: SupportedProtocolsResponse =
+ HTTP_CLIENT.get_client()?.execute(request)?.json()?;
- get_supported_protocols(base, ¶ms)
- .map_err(Into::into)
- .and_then(|request| {
- HTTP_CLIENT
- .get_client()?
- .execute(request)?
- .json::<SupportedProtocolsResponse>()
- .map_err(Into::into)
- })
- .map(|response| {
- response
- .into_iter()
- .flat_map(|(_, protocol)| protocol.instances.into_iter())
- .collect()
- })
+ Ok(response
+ .into_iter()
+ .flat_map(|(_, protocol)| protocol.instances.into_iter())
+ .collect())
}
pub fn room_search(
diff --git a/fractal-matrix-api/src/backend/media.rs b/fractal-matrix-api/src/backend/media.rs
index 6322ba76..6a624071 100644
--- a/fractal-matrix-api/src/backend/media.rs
+++ b/fractal-matrix-api/src/backend/media.rs
@@ -86,18 +86,12 @@ fn get_room_media_list(
},
};
- get_messages_events_req(baseu, ¶ms, room_id)
- .map_err(Into::into)
- .and_then(|request| {
- let response = HTTP_CLIENT
- .get_client()?
- .execute(request)?
- .json::<GetMessagesEventsResponse>()?;
+ let request = get_messages_events_req(baseu, ¶ms, room_id)?;
+ let response: GetMessagesEventsResponse = HTTP_CLIENT.get_client()?.execute(request)?.json()?;
- let prev_batch = response.end.unwrap_or_default();
- let evs = response.chunk.iter().rev();
- let media_list = Message::from_json_events_iter(room_id, evs)?;
+ let prev_batch = response.end.unwrap_or_default();
+ let evs = response.chunk.iter().rev();
+ let media_list = Message::from_json_events_iter(room_id, evs)?;
- Ok((media_list, prev_batch))
- })
+ Ok((media_list, prev_batch))
}
diff --git a/fractal-matrix-api/src/backend/register.rs b/fractal-matrix-api/src/backend/register.rs
index 8d50ea1f..5f409aa8 100644
--- a/fractal-matrix-api/src/backend/register.rs
+++ b/fractal-matrix-api/src/backend/register.rs
@@ -125,15 +125,10 @@ pub fn login(bk: &Backend, user: String, password: String, server: Url, id_url:
pub fn logout(server: Url, access_token: AccessToken) -> Result<(), Error> {
let params = LogoutParameters { access_token };
- logout_req(server, ¶ms)
- .map_err(Into::into)
- .and_then(|request| {
- HTTP_CLIENT
- .get_client()?
- .execute(request)
- .map_err(Into::into)
- })
- .and(Ok(()))
+ let request = logout_req(server, ¶ms)?;
+ HTTP_CLIENT.get_client()?.execute(request)?;
+
+ Ok(())
}
pub fn register(bk: &Backend, user: String, password: String, server: Url, id_url: Url) {
@@ -176,11 +171,11 @@ pub fn register(bk: &Backend, user: String, password: String, server: Url, id_ur
}
pub fn get_well_known(domain: Url) -> Result<DomainInfoResponse, Error> {
- domain_info(domain).map_err(Into::into).and_then(|request| {
- HTTP_CLIENT
- .get_client()?
- .execute(request)?
- .json::<DomainInfoResponse>()
- .map_err(Into::into)
- })
+ let request = domain_info(domain)?;
+
+ HTTP_CLIENT
+ .get_client()?
+ .execute(request)?
+ .json()
+ .map_err(Into::into)
}
diff --git a/fractal-matrix-api/src/backend/room.rs b/fractal-matrix-api/src/backend/room.rs
index 8e2b1e7f..cbe76b07 100644
--- a/fractal-matrix-api/src/backend/room.rs
+++ b/fractal-matrix-api/src/backend/room.rs
@@ -1,4 +1,4 @@
-use log::{error, info};
+use log::error;
use serde_json::json;
use ruma_identifiers::{Error as IdError, RoomId, RoomIdOrAliasId, UserId};
@@ -115,19 +115,13 @@ fn get_room_detail(
) -> Result<(RoomId, String, String), Error> {
let params = GetStateEventsForKeyParameters { access_token };
- get_state_events_for_key(base, ¶ms, &room_id, &keys)
- .map_err(Into::into)
- .and_then(|request| {
- let response = HTTP_CLIENT
- .get_client()?
- .execute(request)?
- .json::<JsonValue>()?;
+ let request = get_state_events_for_key(base, ¶ms, &room_id, &keys)?;
+ let response: JsonValue = HTTP_CLIENT.get_client()?.execute(request)?.json()?;
- let k = keys.split('.').last().unwrap();
- let value = response[&k].as_str().map(Into::into).unwrap_or_default();
+ let k = keys.split('.').last().ok_or(Error::BackendError)?;
+ let value = response[&k].as_str().map(Into::into).unwrap_or_default();
- Ok((room_id, keys, value))
- })
+ Ok((room_id, keys, value))
}
pub fn get_room_avatar(
@@ -171,18 +165,12 @@ pub fn get_room_members(
) -> Result<(RoomId, Vec<Member>), Error> {
let params = JoinedMembersParameters { access_token };
- get_joined_members(base, &room_id, ¶ms)
- .map_err(Into::into)
- .and_then(|request| {
- let response = HTTP_CLIENT
- .get_client()?
- .execute(request)?
- .json::<JoinedMembersResponse>()?;
+ let request = get_joined_members(base, &room_id, ¶ms)?;
+ let response: JoinedMembersResponse = HTTP_CLIENT.get_client()?.execute(request)?.json()?;
- let ms = response.joined.into_iter().map(Member::from).collect();
+ let ms = response.joined.into_iter().map(Member::from).collect();
- Ok((room_id, ms))
- })
+ Ok((room_id, ms))
}
/* Load older messages starting by prev_batch
@@ -206,20 +194,14 @@ pub fn get_room_messages(
},
};
- get_messages_events(base, ¶ms, &room_id)
- .map_err(Into::into)
- .and_then(|request| {
- let response = HTTP_CLIENT
- .get_client()?
- .execute(request)?
- .json::<GetMessagesEventsResponse>()?;
+ let request = get_messages_events(base, ¶ms, &room_id)?;
+ let response: GetMessagesEventsResponse = HTTP_CLIENT.get_client()?.execute(request)?.json()?;
- let prev_batch = response.end;
- let evs = response.chunk.iter().rev();
- Message::from_json_events_iter(&room_id, evs)
- .map(|list| (list, room_id, prev_batch))
- .map_err(Into::into)
- })
+ let prev_batch = response.end;
+ let evs = response.chunk.iter().rev();
+ let list = Message::from_json_events_iter(&room_id, evs)?;
+
+ Ok((list, room_id, prev_batch))
}
pub fn get_room_messages_from_msg(
@@ -230,8 +212,9 @@ pub fn get_room_messages_from_msg(
) -> Result<(Vec<Message>, RoomId, Option<String>), Error> {
// first of all, we calculate the from param using the context api, then we call the
// normal get_room_messages
- get_prev_batch_from(base.clone(), access_token.clone(), &room_id, &msg.id)
- .and_then(|from| get_room_messages(base, access_token, room_id, from))
+ let from = get_prev_batch_from(base.clone(), access_token.clone(), &room_id, &msg.id)?;
+
+ get_room_messages(base, access_token, room_id, from)
}
pub fn send_msg(
@@ -291,16 +274,10 @@ pub fn send_typing(
let params = TypingNotificationParameters { access_token };
let body = TypingNotificationBody::Typing(Duration::from_secs(4));
- info!("Sending typing notification");
- send_typing_notification(base, &room_id, &user_id, ¶ms, &body)
- .map_err(Into::into)
- .and_then(|request| {
- HTTP_CLIENT
- .get_client()?
- .execute(request)
- .map_err(Into::into)
- })
- .and(Ok(()))
+ let request = send_typing_notification(base, &room_id, &user_id, ¶ms, &body)?;
+ HTTP_CLIENT.get_client()?.execute(request)?;
+
+ Ok(())
}
pub fn redact_msg(
@@ -363,13 +340,10 @@ pub fn join_room(bk: &Backend, base: Url, access_token: AccessToken, room_id: Ro
pub fn leave_room(base: Url, access_token: AccessToken, room_id: RoomId) -> Result<(), Error> {
let params = LeaveRoomParameters { access_token };
- leave_room_req(base, &room_id, ¶ms)
- .map_err(Into::into)
- .and_then(|request| {
- let _ = HTTP_CLIENT.get_client()?.execute(request)?;
+ let request = leave_room_req(base, &room_id, ¶ms)?;
+ HTTP_CLIENT.get_client()?.execute(request)?;
- Ok(())
- })
+ Ok(())
}
pub fn mark_as_read(
@@ -385,13 +359,10 @@ pub fn mark_as_read(
read: Some(event_id.clone()),
};
- set_read_marker(base, ¶ms, &body, &room_id)
- .map_err(Into::into)
- .and_then(|request| {
- let _ = HTTP_CLIENT.get_client()?.execute(request)?;
+ let request = set_read_marker(base, ¶ms, &body, &room_id)?;
+ HTTP_CLIENT.get_client()?.execute(request)?;
- Ok((room_id, event_id))
- })
+ Ok((room_id, event_id))
}
pub fn set_room_name(
@@ -406,13 +377,10 @@ pub fn set_room_name(
"name": name,
});
- create_state_events_for_key(base, ¶ms, &body, &room_id, "m.room.name")
- .map_err(Into::into)
- .and_then(|request| {
- let _ = HTTP_CLIENT.get_client()?.execute(request)?;
+ let request = create_state_events_for_key(base, ¶ms, &body, &room_id, "m.room.name")?;
+ HTTP_CLIENT.get_client()?.execute(request)?;
- Ok(())
- })
+ Ok(())
}
pub fn set_room_topic(
@@ -427,13 +395,10 @@ pub fn set_room_topic(
"topic": topic,
});
- create_state_events_for_key(base, ¶ms, &body, &room_id, "m.room.topic")
- .map_err(Into::into)
- .and_then(|request| {
- let _ = HTTP_CLIENT.get_client()?.execute(request)?;
+ let request = create_state_events_for_key(base, ¶ms, &body, &room_id, "m.room.topic")?;
+ HTTP_CLIENT.get_client()?.execute(request)?;
- Ok(())
- })
+ Ok(())
}
pub fn set_room_avatar(
@@ -446,13 +411,13 @@ pub fn set_room_avatar(
access_token: access_token.clone(),
};
- upload_file(base.clone(), access_token, &avatar).and_then(|response| {
- let body = json!({ "url": response.content_uri.as_str() });
- let request = create_state_events_for_key(base, ¶ms, &body, &room_id, "m.room.avatar")?;
- let _ = HTTP_CLIENT.get_client()?.execute(request)?;
+ let upload_file_response = upload_file(base.clone(), access_token, &avatar)?;
- Ok(())
- })
+ let body = json!({ "url": upload_file_response.content_uri.as_str() });
+ let request = create_state_events_for_key(base, ¶ms, &body, &room_id, "m.room.avatar")?;
+ HTTP_CLIENT.get_client()?.execute(request)?;
+
+ Ok(())
}
pub fn attach_file(
@@ -532,16 +497,13 @@ fn upload_file(
};
let contents = fs::read(fname)?;
+ let request = create_content(base, ¶ms_upload, contents)?;
- create_content(base, ¶ms_upload, contents)
- .map_err::<Error, _>(Into::into)
- .and_then(|request| {
- HTTP_CLIENT
- .get_client()?
- .execute(request)?
- .json::<CreateContentResponse>()
- .map_err(Into::into)
- })
+ HTTP_CLIENT
+ .get_client()?
+ .execute(request)?
+ .json()
+ .map_err(Into::into)
}
pub fn new_room(
@@ -564,19 +526,13 @@ pub fn new_room(
..Default::default()
};
- create_room(base, ¶ms, &body)
- .map_err(Into::into)
- .and_then(|request| {
- let response = HTTP_CLIENT
- .get_client()?
- .execute(request)?
- .json::<CreateRoomResponse>()?;
+ let request = create_room(base, ¶ms, &body)?;
+ let response: CreateRoomResponse = HTTP_CLIENT.get_client()?.execute(request)?.json()?;
- Ok(Room {
- name: Some(name),
- ..Room::new(response.room_id, RoomMembership::Joined(RoomTag::None))
- })
- })
+ Ok(Room {
+ name: Some(name),
+ ..Room::new(response.room_id, RoomMembership::Joined(RoomTag::None))
+ })
}
fn update_direct_chats(
@@ -671,29 +627,23 @@ pub fn direct_chat(
..Default::default()
};
- create_room(base.clone(), ¶ms, &body)
- .map_err(Into::into)
- .and_then(|request| {
- let response = HTTP_CLIENT
- .get_client()?
- .execute(request)?
- .json::<CreateRoomResponse>()?;
-
- update_direct_chats(
- data,
- base,
- access_token,
- user_id,
- response.room_id.clone(),
- user.clone(),
- );
-
- Ok(Room {
- name: user.alias.clone(),
- direct: true,
- ..Room::new(response.room_id, RoomMembership::Joined(RoomTag::None))
- })
- })
+ let request = create_room(base.clone(), ¶ms, &body)?;
+ let response: CreateRoomResponse = HTTP_CLIENT.get_client()?.execute(request)?.json()?;
+
+ update_direct_chats(
+ data,
+ base,
+ access_token,
+ user_id,
+ response.room_id.clone(),
+ user.clone(),
+ );
+
+ Ok(Room {
+ name: user.alias.clone(),
+ direct: true,
+ ..Room::new(response.room_id, RoomMembership::Joined(RoomTag::None))
+ })
}
pub fn add_to_fav(
@@ -703,24 +653,18 @@ pub fn add_to_fav(
room_id: RoomId,
tofav: bool,
) -> Result<(RoomId, bool), Error> {
- let request_res = if tofav {
+ let request = if tofav {
let params = CreateTagParameters { access_token };
let body = CreateTagBody { order: Some(0.5) };
create_tag(base, &user_id, &room_id, "m.favourite", ¶ms, &body)
} else {
let params = DeleteTagParameters { access_token };
delete_tag(base, &user_id, &room_id, "m.favourite", ¶ms)
- };
+ }?;
- request_res
- .map_err(Into::into)
- .and_then(|request| {
- HTTP_CLIENT
- .get_client()?
- .execute(request)
- .map_err(Into::into)
- })
- .and(Ok((room_id, tofav)))
+ HTTP_CLIENT.get_client()?.execute(request)?;
+
+ Ok((room_id, tofav))
}
pub fn invite(
@@ -732,13 +676,10 @@ pub fn invite(
let params = InviteUserParameters { access_token };
let body = InviteUserBody { user_id };
- invite_user(base, &room_id, ¶ms, &body)
- .map_err(Into::into)
- .and_then(|request| {
- let _ = HTTP_CLIENT.get_client()?.execute(request)?;
+ let request = invite_user(base, &room_id, ¶ms, &body)?;
+ HTTP_CLIENT.get_client()?.execute(request)?;
- Ok(())
- })
+ Ok(())
}
pub fn set_language(
diff --git a/fractal-matrix-api/src/backend/user.rs b/fractal-matrix-api/src/backend/user.rs
index ba08ae6c..f6ff9035 100644
--- a/fractal-matrix-api/src/backend/user.rs
+++ b/fractal-matrix-api/src/backend/user.rs
@@ -67,16 +67,10 @@ use crate::r0::ThreePIDCredentials;
use crate::types::Member;
pub fn get_username(base: Url, uid: UserId) -> Result<Option<String>, Error> {
- get_display_name(base, &uid)
- .map_err(Into::into)
- .and_then(|request| {
- HTTP_CLIENT
- .get_client()?
- .execute(request)?
- .json::<GetDisplayNameResponse>()
- .map_err(Into::into)
- })
- .map(|response| response.displayname)
+ let request = get_display_name(base, &uid)?;
+ let response: GetDisplayNameResponse = HTTP_CLIENT.get_client()?.execute(request)?.json()?;
+
+ Ok(response.displayname)
}
// FIXME: This function manages errors *really* wrong and isn't more async
@@ -107,15 +101,10 @@ pub fn set_username(
displayname: Some(username.clone()),
};
- set_display_name(base, ¶ms, &body, &uid)
- .map_err(Into::into)
- .and_then(|request| {
- HTTP_CLIENT
- .get_client()?
- .execute(request)
- .map_err(Into::into)
- })
- .and(Ok(username))
+ let request = set_display_name(base, ¶ms, &body, &uid)?;
+ HTTP_CLIENT.get_client()?.execute(request)?;
+
+ Ok(username)
}
pub fn get_threepid(
@@ -124,16 +113,10 @@ pub fn get_threepid(
) -> Result<Vec<ThirdPartyIdentifier>, Error> {
let params = ThirdPartyIDParameters { access_token };
- get_identifiers(base, ¶ms)
- .map_err(Into::into)
- .and_then(|request| {
- HTTP_CLIENT
- .get_client()?
- .execute(request)?
- .json::<ThirdPartyIDResponse>()
- .map_err(Into::into)
- })
- .map(|response| response.threepids)
+ let request = get_identifiers(base, ¶ms)?;
+ let response: ThirdPartyIDResponse = HTTP_CLIENT.get_client()?.execute(request)?.json()?;
+
+ Ok(response.threepids)
}
pub fn get_email_token(
@@ -143,6 +126,8 @@ pub fn get_email_token(
email: String,
client_secret: String,
) -> Result<(String, String), Error> {
+ use EmailTokenResponse::*;
+
let params = EmailTokenParameters { access_token };
let body = EmailTokenBody {
id_server: identity.try_into()?,
@@ -152,26 +137,17 @@ pub fn get_email_token(
next_link: None,
};
- request_contact_verification_token_email(base, ¶ms, &body)
- .map_err(Into::into)
- .and_then(|request| {
- HTTP_CLIENT
- .get_client()?
- .execute(request)?
- .json::<EmailTokenResponse>()
- .map_err(Into::into)
- })
- .and_then(|response| match response {
- EmailTokenResponse::Passed(info) => Ok(info.sid),
- EmailTokenResponse::Failed(info) => {
- if info.errcode == "M_THREEPID_IN_USE" {
- Err(Error::TokenUsed)
- } else {
- Err(Error::Denied)
- }
- }
- })
- .map(|response| (response, client_secret))
+ let request = request_contact_verification_token_email(base, ¶ms, &body)?;
+
+ match HTTP_CLIENT
+ .get_client()?
+ .execute(request)?
+ .json::<EmailTokenResponse>()?
+ {
+ Passed(info) => Ok((info.sid, client_secret)),
+ Failed(info) if info.errcode == "M_THREEPID_IN_USE" => Err(Error::TokenUsed),
+ Failed(_) => Err(Error::Denied),
+ }
}
pub fn get_phone_token(
@@ -181,6 +157,8 @@ pub fn get_phone_token(
phone: String,
client_secret: String,
) -> Result<(String, String), Error> {
+ use PhoneTokenResponse::*;
+
let params = PhoneTokenParameters { access_token };
let body = PhoneTokenBody {
id_server: identity.try_into()?,
@@ -191,26 +169,17 @@ pub fn get_phone_token(
next_link: None,
};
- request_contact_verification_token_msisdn(base, ¶ms, &body)
- .map_err(Into::into)
- .and_then(|request| {
- HTTP_CLIENT
- .get_client()?
- .execute(request)?
- .json::<PhoneTokenResponse>()
- .map_err(Into::into)
- })
- .and_then(|response| match response {
- PhoneTokenResponse::Passed(info) => Ok(info.sid),
- PhoneTokenResponse::Failed(info) => {
- if info.errcode == "M_THREEPID_IN_USE" {
- Err(Error::TokenUsed)
- } else {
- Err(Error::Denied)
- }
- }
- })
- .map(|response| (response, client_secret))
+ let request = request_contact_verification_token_msisdn(base, ¶ms, &body)?;
+
+ match HTTP_CLIENT
+ .get_client()?
+ .execute(request)?
+ .json::<PhoneTokenResponse>()?
+ {
+ Passed(info) => Ok((info.sid, client_secret)),
+ Failed(info) if info.errcode == "M_THREEPID_IN_USE" => Err(Error::TokenUsed),
+ Failed(_) => Err(Error::Denied),
+ }
}
pub fn add_threepid(
@@ -230,15 +199,10 @@ pub fn add_threepid(
bind: true,
};
- create_contact(base, ¶ms, &body)
- .map_err(Into::into)
- .and_then(|request| {
- HTTP_CLIENT
- .get_client()?
- .execute(request)
- .map_err(Into::into)
- })
- .and(Ok(()))
+ let request = create_contact(base, ¶ms, &body)?;
+ HTTP_CLIENT.get_client()?.execute(request)?;
+
+ Ok(())
}
pub fn submit_phone_token(
@@ -253,16 +217,10 @@ pub fn submit_phone_token(
token,
};
- submit_phone_token_req(base, &body)
- .map_err(Into::into)
- .and_then(|request| {
- HTTP_CLIENT
- .get_client()?
- .execute(request)?
- .json::<SubmitPhoneTokenResponse>()
- .map_err(Into::into)
- })
- .map(|response| (Some(sid).filter(|_| response.success), client_secret))
+ let request = submit_phone_token_req(base, &body)?;
+ let response: SubmitPhoneTokenResponse = HTTP_CLIENT.get_client()?.execute(request)?.json()?;
+
+ Ok((Some(sid).filter(|_| response.success), client_secret))
}
pub fn delete_three_pid(
@@ -274,15 +232,10 @@ pub fn delete_three_pid(
let params = DeleteThreePIDParameters { access_token };
let body = DeleteThreePIDBody { address, medium };
- delete_contact(base, ¶ms, &body)
- .map_err(Into::into)
- .and_then(|request| {
- HTTP_CLIENT
- .get_client()?
- .execute(request)
- .map_err(Into::into)
- })
- .and(Ok(()))
+ let request = delete_contact(base, ¶ms, &body)?;
+ HTTP_CLIENT.get_client()?.execute(request)?;
+
+ Ok(())
}
pub fn change_password(
@@ -302,15 +255,10 @@ pub fn change_password(
}),
};
- change_password_req(base, ¶ms, &body)
- .map_err(Into::into)
- .and_then(|request| {
- HTTP_CLIENT
- .get_client()?
- .execute(request)
- .map_err(Into::into)
- })
- .and(Ok(()))
+ let request = change_password_req(base, ¶ms, &body)?;
+ HTTP_CLIENT.get_client()?.execute(request)?;
+
+ Ok(())
}
pub fn account_destruction(
@@ -328,15 +276,10 @@ pub fn account_destruction(
}),
};
- deactivate(base, ¶ms, &body)
- .map_err(Into::into)
- .and_then(|request| {
- HTTP_CLIENT
- .get_client()?
- .execute(request)
- .map_err(Into::into)
- })
- .and(Ok(()))
+ let request = deactivate(base, ¶ms, &body)?;
+ HTTP_CLIENT.get_client()?.execute(request)?;
+
+ Ok(())
}
pub fn get_avatar(base: Url, userid: UserId) -> Result<PathBuf, Error> {
@@ -368,34 +311,20 @@ pub fn set_user_avatar(
filename: None,
};
- fs::read(&avatar)
- .map_err(Into::into)
- .and_then(|contents| {
- let upload_response = create_content(base.clone(), ¶ms_upload, contents)
- .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, ¶ms_avatar, &body, &uid)
- .map_err(Into::into)
- .and_then(|request| {
- HTTP_CLIENT
- .get_client()?
- .execute(request)
- .map_err(Into::into)
- })
- })
- .and(Ok(avatar))
+ let contents = fs::read(&avatar)?;
+ let request = create_content(base.clone(), ¶ms_upload, contents)?;
+ let upload_response: CreateContentResponse =
+ HTTP_CLIENT.get_client()?.execute(request)?.json()?;
+
+ let params_avatar = SetAvatarUrlParameters { access_token };
+ let body = SetAvatarUrlBody {
+ avatar_url: Some(upload_response.content_uri),
+ };
+
+ let request = set_avatar_url(base, ¶ms_avatar, &body, &uid)?;
+ HTTP_CLIENT.get_client()?.execute(request)?;
+
+ Ok(avatar)
}
pub fn get_user_info_async(
@@ -442,19 +371,14 @@ pub fn search(
..Default::default()
};
- user_directory(base, ¶ms, &body)
- .map_err(Into::into)
- .and_then(|request| {
- HTTP_CLIENT
- .get_client()?
- .execute(request)?
- .json::<UserDirectoryResponse>()
- .map_err(Into::into)
- })
- .map(|response| response.results.into_iter().map(Into::into).collect())
+ let request = user_directory(base, ¶ms, &body)?;
+ let response: UserDirectoryResponse = HTTP_CLIENT.get_client()?.execute(request)?.json()?;
+
+ Ok(response.results.into_iter().map(Into::into).collect())
}
fn get_user_avatar_img(baseu: Url, userid: &UserId, avatar: &str) -> Result<String, Error> {
let dest = cache_dir_path(None, &userid.to_string())?;
+
dw_media(baseu, avatar, ContentType::default_thumbnail(), Some(dest))
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]