Fix errors by moving into_shared out of Composite
This commit is contained in:
parent
6637f14b18
commit
29f3ee802a
|
@ -71,9 +71,9 @@ pub trait Composite<T: Updateable + Clone + Debug> {
|
|||
async fn watch_whole(self, gateway: &GatewayHandle) -> Self;
|
||||
|
||||
async fn option_observe_fn(
|
||||
value: Option<Arc<RwLock<T>>>,
|
||||
value: Option<Shared<T>>,
|
||||
gateway: &GatewayHandle,
|
||||
) -> Option<Arc<RwLock<T>>>
|
||||
) -> Option<Shared<T>>
|
||||
where
|
||||
T: Composite<T> + Debug,
|
||||
{
|
||||
|
@ -86,9 +86,9 @@ pub trait Composite<T: Updateable + Clone + Debug> {
|
|||
}
|
||||
|
||||
async fn option_vec_observe_fn(
|
||||
value: Option<Vec<Arc<RwLock<T>>>>,
|
||||
value: Option<Vec<Shared<T>>>,
|
||||
gateway: &GatewayHandle,
|
||||
) -> Option<Vec<Arc<RwLock<T>>>>
|
||||
) -> Option<Vec<Shared<T>>>
|
||||
where
|
||||
T: Composite<T>,
|
||||
{
|
||||
|
@ -103,17 +103,14 @@ pub trait Composite<T: Updateable + Clone + Debug> {
|
|||
}
|
||||
}
|
||||
|
||||
async fn value_observe_fn(value: Arc<RwLock<T>>, gateway: &GatewayHandle) -> Arc<RwLock<T>>
|
||||
async fn value_observe_fn(value: Shared<T>, gateway: &GatewayHandle) -> Shared<T>
|
||||
where
|
||||
T: Composite<T>,
|
||||
{
|
||||
gateway.observe(value).await
|
||||
}
|
||||
|
||||
async fn vec_observe_fn(
|
||||
value: Vec<Arc<RwLock<T>>>,
|
||||
gateway: &GatewayHandle,
|
||||
) -> Vec<Arc<RwLock<T>>>
|
||||
async fn vec_observe_fn(value: Vec<Shared<T>>, gateway: &GatewayHandle) -> Vec<Shared<T>>
|
||||
where
|
||||
T: Composite<T>,
|
||||
{
|
||||
|
@ -123,17 +120,16 @@ pub trait Composite<T: Updateable + Clone + Debug> {
|
|||
}
|
||||
vec
|
||||
}
|
||||
|
||||
/// Uses [`Shared`] to provide an ergonomic alternative to `Arc::new(RwLock::new(obj))`.
|
||||
///
|
||||
/// [`Shared<Self>`] can then be observed using the [`Gateway`], turning the underlying
|
||||
/// `dyn Composite<Self>` into a self-updating struct, which is a tracked variant of a chorus
|
||||
/// entity struct, updating its' held information when new information concerning itself arrives
|
||||
/// over the [`Gateway`] connection, reducing the need for expensive network-API calls.
|
||||
fn into_shared(self) -> Shared<Self>
|
||||
where
|
||||
Self: Sized,
|
||||
{
|
||||
Arc::new(RwLock::new(self))
|
||||
}
|
||||
}
|
||||
|
||||
/// Uses [`Shared`] to provide an ergonomic alternative to `Arc::new(RwLock::new(obj))`.
|
||||
///
|
||||
/// [`Shared<Self>`] can then be observed using the [`Gateway`], turning the underlying
|
||||
/// `dyn Composite<Self>` into a self-updating struct, which is a tracked variant of a chorus
|
||||
/// entity struct, updating its' held information when new information concerning itself arrives
|
||||
/// over the [`Gateway`] connection, reducing the need for expensive network-API calls.
|
||||
pub fn into_shared<T: Composite<T> + Updateable + Clone + Debug + Sized>(
|
||||
composite: T,
|
||||
) -> Shared<T> {
|
||||
Arc::new(RwLock::new(composite))
|
||||
}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
use chorus::gateway::{Gateway, Shared};
|
||||
use chorus::types::Composite;
|
||||
use chorus::types::into_shared;
|
||||
use chorus::{
|
||||
instance::{ChorusUser, Instance},
|
||||
types::{
|
||||
|
@ -118,9 +118,9 @@ pub(crate) async fn setup() -> TestBundle {
|
|||
urls,
|
||||
user,
|
||||
instance,
|
||||
guild: guild.into_shared(),
|
||||
role: role.into_shared(),
|
||||
channel: channel.into_shared(),
|
||||
guild: into_shared(guild),
|
||||
role: into_shared(role),
|
||||
channel: into_shared(channel),
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@ mod common;
|
|||
|
||||
use chorus::errors::GatewayError;
|
||||
use chorus::gateway::*;
|
||||
use chorus::types::{self, ChannelModifySchema, Composite, RoleCreateModifySchema, RoleObject};
|
||||
use chorus::types::{self, into_shared, ChannelModifySchema, RoleCreateModifySchema, RoleObject};
|
||||
#[cfg(target_arch = "wasm32")]
|
||||
use wasm_bindgen_test::*;
|
||||
#[cfg(target_arch = "wasm32")]
|
||||
|
@ -95,7 +95,7 @@ async fn test_recursive_self_updating_structs() {
|
|||
.await
|
||||
.unwrap();
|
||||
// Watch role;
|
||||
bundle.user.gateway.observe(role.into_shared()).await;
|
||||
bundle.user.gateway.observe(into_shared(role.clone())).await;
|
||||
// Update Guild and check for Guild
|
||||
let inner_guild = guild.read().unwrap().clone();
|
||||
assert!(inner_guild.roles.is_some());
|
||||
|
@ -107,7 +107,7 @@ async fn test_recursive_self_updating_structs() {
|
|||
let role_inner = bundle
|
||||
.user
|
||||
.gateway
|
||||
.observe_and_into_inner(role.into_shared())
|
||||
.observe_and_into_inner(into_shared(role.clone()))
|
||||
.await;
|
||||
assert_eq!(role_inner.name, "yippieee");
|
||||
// Check if the change propagated
|
||||
|
|
Loading…
Reference in New Issue