Implement trait methods
This commit is contained in:
parent
69c8b8d076
commit
d30542c783
|
@ -22,7 +22,8 @@ pub use user_settings::*;
|
||||||
pub use voice_state::*;
|
pub use voice_state::*;
|
||||||
pub use webhook::*;
|
pub use webhook::*;
|
||||||
|
|
||||||
use crate::gateway::Updateable;
|
use crate::gateway::{GatewayHandle, Updateable};
|
||||||
|
use async_trait::async_trait;
|
||||||
use std::sync::{Arc, RwLock};
|
use std::sync::{Arc, RwLock};
|
||||||
|
|
||||||
mod application;
|
mod application;
|
||||||
|
@ -49,25 +50,48 @@ mod user_settings;
|
||||||
mod voice_state;
|
mod voice_state;
|
||||||
mod webhook;
|
mod webhook;
|
||||||
|
|
||||||
pub(crate) trait Composite<T: Updateable> {
|
#[async_trait]
|
||||||
fn watch_whole(self) -> Self;
|
pub(crate) trait Composite<T: Updateable + Clone> {
|
||||||
fn option_observe_fn(value: Option<Arc<RwLock<T>>>) -> Option<Arc<RwLock<T>>> {
|
async fn watch_whole(self, gateway: &GatewayHandle) -> Self;
|
||||||
// Perform your logic here...
|
|
||||||
value
|
async fn option_observe_fn(
|
||||||
|
value: Option<Arc<RwLock<T>>>,
|
||||||
|
gateway: &GatewayHandle,
|
||||||
|
) -> Option<Arc<RwLock<T>>> {
|
||||||
|
if let Some(value) = value {
|
||||||
|
Some(gateway.observe_and_get(value).await)
|
||||||
|
} else {
|
||||||
|
None
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn option_vec_observe_fn(value: Option<Vec<Arc<RwLock<T>>>>) -> Option<Vec<Arc<RwLock<T>>>> {
|
async fn option_vec_observe_fn(
|
||||||
// Perform your logic here...
|
value: Option<Vec<Arc<RwLock<T>>>>,
|
||||||
value
|
gateway: &GatewayHandle,
|
||||||
|
) -> Option<Vec<Arc<RwLock<T>>>> {
|
||||||
|
if let Some(value) = value {
|
||||||
|
let mut vec = Vec::new();
|
||||||
|
for component in value.into_iter() {
|
||||||
|
vec.push(gateway.observe_and_get(component).await);
|
||||||
|
}
|
||||||
|
Some(vec)
|
||||||
|
} else {
|
||||||
|
None
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn value_observe_fn(value: Arc<RwLock<T>>) -> Arc<RwLock<T>> {
|
async fn value_observe_fn(value: Arc<RwLock<T>>, gateway: &GatewayHandle) -> Arc<RwLock<T>> {
|
||||||
// Perform your logic here...
|
gateway.observe_and_get(value).await
|
||||||
value
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn vec_observe_fn(value: Vec<Arc<RwLock<T>>>) -> Vec<Arc<RwLock<T>>> {
|
async fn vec_observe_fn(
|
||||||
// Perform your logic here...
|
value: Vec<Arc<RwLock<T>>>,
|
||||||
value
|
gateway: &GatewayHandle,
|
||||||
|
) -> Vec<Arc<RwLock<T>>> {
|
||||||
|
let mut vec = Vec::new();
|
||||||
|
for component in value.into_iter() {
|
||||||
|
vec.push(gateway.observe_and_get(component).await);
|
||||||
|
}
|
||||||
|
vec
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue