Remove `Send` bound

This commit is contained in:
bitfl0wer 2023-08-15 20:18:11 +02:00
parent c3be91667b
commit 32fd918a43
2 changed files with 19 additions and 6 deletions

View File

@ -84,7 +84,7 @@ pub fn composite_derive(input: TokenStream) -> TokenStream {
let ident = &input.ident; let ident = &input.ident;
let expanded = quote! { let expanded = quote! {
#[async_trait::async_trait] #[async_trait::async_trait(?Send)]
impl<T: Updateable + Clone> Composite<T> for #ident { impl<T: Updateable + Clone> Composite<T> for #ident {
async fn watch_whole(self, gateway: &GatewayHandle) -> Self { async fn watch_whole(self, gateway: &GatewayHandle) -> Self {
Self { Self {

View File

@ -50,15 +50,19 @@ mod user_settings;
mod voice_state; mod voice_state;
mod webhook; mod webhook;
#[async_trait] #[async_trait(?Send)]
pub trait Composite<T: Updateable + Clone> { pub trait Composite<T: Updateable + Clone> {
async fn watch_whole(self, gateway: &GatewayHandle) -> Self; async fn watch_whole(self, gateway: &GatewayHandle) -> Self;
async fn option_observe_fn( async fn option_observe_fn(
value: Option<Arc<RwLock<T>>>, value: Option<Arc<RwLock<T>>>,
gateway: &GatewayHandle, gateway: &GatewayHandle,
) -> Option<Arc<RwLock<T>>> { ) -> Option<Arc<RwLock<T>>>
where
T: Composite<T>,
{
if let Some(value) = value { if let Some(value) = value {
let value = value.clone();
Some(gateway.observe_and_get(value).await) Some(gateway.observe_and_get(value).await)
} else { } else {
None None
@ -68,7 +72,10 @@ pub trait Composite<T: Updateable + Clone> {
async fn option_vec_observe_fn( async fn option_vec_observe_fn(
value: Option<Vec<Arc<RwLock<T>>>>, value: Option<Vec<Arc<RwLock<T>>>>,
gateway: &GatewayHandle, gateway: &GatewayHandle,
) -> Option<Vec<Arc<RwLock<T>>>> { ) -> Option<Vec<Arc<RwLock<T>>>>
where
T: Composite<T>,
{
if let Some(value) = value { if let Some(value) = value {
let mut vec = Vec::new(); let mut vec = Vec::new();
for component in value.into_iter() { for component in value.into_iter() {
@ -80,14 +87,20 @@ pub trait Composite<T: Updateable + Clone> {
} }
} }
async fn value_observe_fn(value: Arc<RwLock<T>>, gateway: &GatewayHandle) -> Arc<RwLock<T>> { async fn value_observe_fn(value: Arc<RwLock<T>>, gateway: &GatewayHandle) -> Arc<RwLock<T>>
where
T: Composite<T>,
{
gateway.observe_and_get(value).await gateway.observe_and_get(value).await
} }
async fn vec_observe_fn( async fn vec_observe_fn(
value: Vec<Arc<RwLock<T>>>, value: Vec<Arc<RwLock<T>>>,
gateway: &GatewayHandle, gateway: &GatewayHandle,
) -> Vec<Arc<RwLock<T>>> { ) -> Vec<Arc<RwLock<T>>>
where
T: Composite<T>,
{
let mut vec = Vec::new(); let mut vec = Vec::new();
for component in value.into_iter() { for component in value.into_iter() {
vec.push(gateway.observe_and_get(component).await); vec.push(gateway.observe_and_get(component).await);