Fix: message file attachment duplication (#159)
* make send() take ownership of MessageSendSchema * Remove message file attachment duplication * Remove superfluous docstrings
This commit is contained in:
parent
df08bc33ac
commit
85fb24cd8c
|
@ -6,34 +6,22 @@ use serde_json::to_string;
|
||||||
use crate::api::LimitType;
|
use crate::api::LimitType;
|
||||||
use crate::instance::UserMeta;
|
use crate::instance::UserMeta;
|
||||||
use crate::ratelimiter::ChorusRequest;
|
use crate::ratelimiter::ChorusRequest;
|
||||||
use crate::types::{Message, MessageSendSchema, PartialDiscordFileAttachment, Snowflake};
|
use crate::types::{Message, MessageSendSchema, Snowflake};
|
||||||
|
|
||||||
impl Message {
|
impl Message {
|
||||||
/**
|
|
||||||
Sends a message to the Spacebar server.
|
|
||||||
# Arguments
|
|
||||||
* `url_api` - The URL of the Spacebar server's API.
|
|
||||||
* `message` - The [`Message`] that will be sent to the Spacebar server.
|
|
||||||
* `limits_user` - The [`Limits`] of the user.
|
|
||||||
* `limits_instance` - The [`Limits`] of the instance.
|
|
||||||
* `requester` - The [`LimitedRequester`] that will be used to make requests to the Spacebar server.
|
|
||||||
# Errors
|
|
||||||
* [`ChorusLibError`] - If the message cannot be sent.
|
|
||||||
*/
|
|
||||||
pub async fn send(
|
pub async fn send(
|
||||||
user: &mut UserMeta,
|
user: &mut UserMeta,
|
||||||
channel_id: Snowflake,
|
channel_id: Snowflake,
|
||||||
message: &mut MessageSendSchema,
|
mut message: MessageSendSchema,
|
||||||
files: Option<Vec<PartialDiscordFileAttachment>>,
|
|
||||||
) -> Result<Message, crate::errors::ChorusError> {
|
) -> Result<Message, crate::errors::ChorusError> {
|
||||||
let url_api = user.belongs_to.borrow().urls.api.clone();
|
let url_api = user.belongs_to.borrow().urls.api.clone();
|
||||||
|
|
||||||
if files.is_none() {
|
if message.attachments.is_none() {
|
||||||
let chorus_request = ChorusRequest {
|
let chorus_request = ChorusRequest {
|
||||||
request: Client::new()
|
request: Client::new()
|
||||||
.post(format!("{}/channels/{}/messages/", url_api, channel_id))
|
.post(format!("{}/channels/{}/messages/", url_api, channel_id))
|
||||||
.bearer_auth(user.token())
|
.bearer_auth(user.token())
|
||||||
.body(to_string(message).unwrap()),
|
.body(to_string(&message).unwrap()),
|
||||||
limit_type: LimitType::Channel(channel_id),
|
limit_type: LimitType::Channel(channel_id),
|
||||||
};
|
};
|
||||||
chorus_request.deserialize_response::<Message>(user).await
|
chorus_request.deserialize_response::<Message>(user).await
|
||||||
|
@ -42,12 +30,12 @@ impl Message {
|
||||||
attachment.get_mut(index).unwrap().set_id(index as i16);
|
attachment.get_mut(index).unwrap().set_id(index as i16);
|
||||||
}
|
}
|
||||||
let mut form = reqwest::multipart::Form::new();
|
let mut form = reqwest::multipart::Form::new();
|
||||||
let payload_json = to_string(message).unwrap();
|
let payload_json = to_string(&message).unwrap();
|
||||||
let payload_field = reqwest::multipart::Part::text(payload_json);
|
let payload_field = reqwest::multipart::Part::text(payload_json);
|
||||||
|
|
||||||
form = form.part("payload_json", payload_field);
|
form = form.part("payload_json", payload_field);
|
||||||
|
|
||||||
for (index, attachment) in files.unwrap().into_iter().enumerate() {
|
for (index, attachment) in message.attachments.unwrap().into_iter().enumerate() {
|
||||||
let (attachment_content, current_attachment) = attachment.move_content();
|
let (attachment_content, current_attachment) = attachment.move_content();
|
||||||
let (attachment_filename, _) = current_attachment.move_filename();
|
let (attachment_filename, _) = current_attachment.move_filename();
|
||||||
let part_name = format!("files[{}]", index);
|
let part_name = format!("files[{}]", index);
|
||||||
|
@ -78,24 +66,11 @@ impl Message {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl UserMeta {
|
impl UserMeta {
|
||||||
/// Shorthand call for Message::send()
|
|
||||||
/**
|
|
||||||
Sends a message to the Spacebar server.
|
|
||||||
# Arguments
|
|
||||||
* `url_api` - The URL of the Spacebar server's API.
|
|
||||||
* `message` - The [`Message`] that will be sent to the Spacebar server.
|
|
||||||
* `limits_user` - The [`Limits`] of the user.
|
|
||||||
* `limits_instance` - The [`Limits`] of the instance.
|
|
||||||
* `requester` - The [`LimitedRequester`] that will be used to make requests to the Spacebar server.
|
|
||||||
# Errors
|
|
||||||
* [`ChorusLibError`] - If the message cannot be sent.
|
|
||||||
*/
|
|
||||||
pub async fn send_message(
|
pub async fn send_message(
|
||||||
&mut self,
|
&mut self,
|
||||||
message: &mut MessageSendSchema,
|
message: MessageSendSchema,
|
||||||
channel_id: Snowflake,
|
channel_id: Snowflake,
|
||||||
files: Option<Vec<PartialDiscordFileAttachment>>,
|
|
||||||
) -> Result<Message, crate::errors::ChorusError> {
|
) -> Result<Message, crate::errors::ChorusError> {
|
||||||
Message::send(self, channel_id, message, files).await
|
Message::send(self, channel_id, message).await
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -89,12 +89,11 @@ async fn get_channel_messages() {
|
||||||
let _ = bundle
|
let _ = bundle
|
||||||
.user
|
.user
|
||||||
.send_message(
|
.send_message(
|
||||||
&mut MessageSendSchema {
|
MessageSendSchema {
|
||||||
content: Some("A Message!".to_string()),
|
content: Some("A Message!".to_string()),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
},
|
},
|
||||||
bundle.channel.id,
|
bundle.channel.id,
|
||||||
None,
|
|
||||||
)
|
)
|
||||||
.await
|
.await
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
|
@ -8,13 +8,13 @@ mod common;
|
||||||
#[tokio::test]
|
#[tokio::test]
|
||||||
async fn send_message() {
|
async fn send_message() {
|
||||||
let mut bundle = common::setup().await;
|
let mut bundle = common::setup().await;
|
||||||
let mut message = types::MessageSendSchema {
|
let message = types::MessageSendSchema {
|
||||||
content: Some("A Message!".to_string()),
|
content: Some("A Message!".to_string()),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
};
|
};
|
||||||
let _ = bundle
|
let _ = bundle
|
||||||
.user
|
.user
|
||||||
.send_message(&mut message, bundle.channel.id, None)
|
.send_message(message, bundle.channel.id)
|
||||||
.await
|
.await
|
||||||
.unwrap();
|
.unwrap();
|
||||||
common::teardown(bundle).await
|
common::teardown(bundle).await
|
||||||
|
@ -45,7 +45,7 @@ async fn send_message_attachment() {
|
||||||
content: buffer,
|
content: buffer,
|
||||||
};
|
};
|
||||||
|
|
||||||
let mut message = types::MessageSendSchema {
|
let message = types::MessageSendSchema {
|
||||||
content: Some("trans rights now".to_string()),
|
content: Some("trans rights now".to_string()),
|
||||||
attachments: Some(vec![attachment.clone()]),
|
attachments: Some(vec![attachment.clone()]),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
|
@ -55,11 +55,7 @@ async fn send_message_attachment() {
|
||||||
let _arg = Some(&vec_attach);
|
let _arg = Some(&vec_attach);
|
||||||
bundle
|
bundle
|
||||||
.user
|
.user
|
||||||
.send_message(
|
.send_message(message, bundle.channel.id)
|
||||||
&mut message,
|
|
||||||
bundle.channel.id,
|
|
||||||
Some(vec![attachment.clone()]),
|
|
||||||
)
|
|
||||||
.await
|
.await
|
||||||
.unwrap();
|
.unwrap();
|
||||||
common::teardown(bundle).await
|
common::teardown(bundle).await
|
||||||
|
|
Loading…
Reference in New Issue