pub struct Json<T>(pub T);
Expand description
Utility wrapper to force values through JSON serialization.
By default procspawn
will use bincode
to serialize
data across process boundaries. This has some limitations which can cause serialization
or deserialization to fail for some types.
Since JSON is generally better supported in the serde ecosystem this lets you work around some known bugs.
- serde flatten not being supported: bincode#245
- vectors with unknown length not supported: bincode#167
Examples:
use procspawn::{spawn, serde::Json};
use serde::{Deserialize, Serialize};
#[derive(Serialize, Deserialize, Debug)]
struct InnerStruct {
value: u64,
}
#[derive(Serialize, Deserialize, Debug)]
struct BadStruct {
#[serde(flatten)]
inner: InnerStruct,
}
let handle = spawn((), |()| {
Json(BadStruct {
inner: InnerStruct { value: 42 },
})
});
let value = handle.join().unwrap().0;
This requires the json
feature.
Tuple Fields§
§0: T
Trait Implementations§
source§impl<'de, T: DeserializeOwned> Deserialize<'de> for Json<T>
impl<'de, T: DeserializeOwned> Deserialize<'de> for Json<T>
source§fn deserialize<D>(deserializer: D) -> Result<Json<T>, D::Error>where
D: Deserializer<'de>,
fn deserialize<D>(deserializer: D) -> Result<Json<T>, D::Error>where D: Deserializer<'de>,
Deserialize this value from the given Serde deserializer. Read more
source§impl<T: Ord> Ord for Json<T>
impl<T: Ord> Ord for Json<T>
source§impl<T: PartialEq> PartialEq<Json<T>> for Json<T>
impl<T: PartialEq> PartialEq<Json<T>> for Json<T>
source§impl<T: PartialOrd> PartialOrd<Json<T>> for Json<T>
impl<T: PartialOrd> PartialOrd<Json<T>> for Json<T>
1.0.0 · source§fn le(&self, other: &Rhs) -> bool
fn le(&self, other: &Rhs) -> bool
This method tests less than or equal to (for
self
and other
) and is used by the <=
operator. Read moreimpl<T: Eq> Eq for Json<T>
impl<T> StructuralEq for Json<T>
impl<T> StructuralPartialEq for Json<T>
Auto Trait Implementations§
impl<T> RefUnwindSafe for Json<T>where T: RefUnwindSafe,
impl<T> Send for Json<T>where T: Send,
impl<T> Sync for Json<T>where T: Sync,
impl<T> Unpin for Json<T>where T: Unpin,
impl<T> UnwindSafe for Json<T>where T: UnwindSafe,
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more