1#[cfg(feature="serde_support")]
2use serde::{de::DeserializeOwned, Serialize};
3
4use std::rc::{Rc,Weak};
5
6pub fn upgrade<T: ?Sized>(v: &Weak<T>) -> Rc<T> {
7 return v.upgrade().unwrap();
8}
9
10pub fn upgrade_opt<T: ?Sized>(v: &Option<Weak<T>>) -> Rc<T> {
11 return v.as_ref().unwrap().upgrade().unwrap();
12}
13
14#[cfg(not(feature="serde_support"))]
15pub trait UserDataType: Default + Clone + 'static {
16 type Fixture: Default + Clone + std::fmt::Debug;
17 type Body: Default + Clone + std::fmt::Debug;
18 type Joint: Default + Clone + std::fmt::Debug;
19}
20
21#[cfg(feature="serde_support")]
22pub trait UserDataType: Default + Clone + Serialize + DeserializeOwned + 'static {
23 type Fixture: Default + Clone + Serialize + DeserializeOwned + std::fmt::Debug;
24 type Body: Default + Clone + Serialize + DeserializeOwned + std::fmt::Debug;
25 type Joint: Default + Clone + Serialize + DeserializeOwned + std::fmt::Debug;
26}