[−][src]Struct abi_stable::external_types::serde_json::RawValueBox
An ffi-safe equivalent of Box<serde_json::value::RawValue>
Example
This defines a function that serializes a struct,
and deserializes the json into another one with RawValueBox
fields.
use abi_stable::{ external_types::RawValueBox, std_types::{RStr,RResult,ROk,RErr,RString,RBoxError}, sabi_extern_fn, }; use serde::{Serialize,Deserialize}; const JSON:&'static str=r##"{"hello":"world"}"##; let value=RawValueBox::try_from_string(JSON.to_string()).unwrap(); assert_eq!( serde_json::to_string(&value).unwrap().as_str(), JSON ); #[derive(Serialize)] pub struct Pair{ pub first:u64, pub second:RString, } #[derive(Debug,Deserialize)] pub struct PairDeserialize{ pub first:RawValueBox, pub second:RawValueBox, } #[sabi_extern_fn] fn deserialize_data_structure(input:RStr<'_>)->RResult<PairDeserialize,RBoxError>{ match serde_json::from_str::<PairDeserialize>(input.into()) { Ok(x)=>ROk(x), Err(x)=>RErr(RBoxError::new(x)), } } let json= serde_json::to_string(&Pair{ first:99, second:"How many apples?".into(), }).unwrap(); let pair=deserialize_data_structure(json.as_str().into()).unwrap(); assert_eq!(pair.first.get(),"99"); assert_eq!(pair.second.get(),r##""How many apples?"}"##);
Implementations
impl RawValueBox
[src]
pub unsafe fn from_string_unchecked(input: String) -> RawValueBox
[src]
Converts a String
to an RawValueBox
without checking whether it is valid JSON.
Safety
input
must be valid JSON and contain no leading or trailing whitespace.
Example
use abi_stable::external_types::RawValueBox; const JSON:&'static str=r##"{"huh":"that is interesting"}"##; let value=unsafe{ RawValueBox::from_string_unchecked(JSON.to_string()) }; assert_eq!( serde_json::to_string(&value).unwrap().as_str(), JSON );
pub unsafe fn from_rstring_unchecked(input: RString) -> RawValueBox
[src]
Converts an RString
to an RawValueBox
without checking whether it is valid JSON.
Safety
input
must be valid JSON and contain no leading or trailing whitespace.
Example
use abi_stable::{ external_types::RawValueBox, std_types::RString, }; const JSON:&'static str=r##"{"huh":"that is interesting"}"##; let json_rstring=RString::from(JSON); let value=unsafe{ RawValueBox::from_rstring_unchecked(json_rstring) }; assert_eq!( serde_json::to_string(&value).unwrap().as_str(), JSON );
pub fn try_from_string(input: String) -> Result<Self, JsonError>
[src]
Attempts to convert a String
into a RawValueBox
.
Fails in the same cases as converting a String into a Box<RawValue>
does.
Example
use abi_stable::{ external_types::RawValueBox, std_types::RString, }; const JSON:&'static str=r##"{"nope":"oof"}"##; let raw=RawValueBox::try_from_string(JSON.to_string()).unwrap(); assert_eq!( raw.get(), JSON );
pub fn get(&self) -> &str
[src]
Gets the json being serialized,as a &str
.
Example
use abi_stable::external_types::RawValueBox; const JSON:&'static str=r##"{"huh":1007}"##; let raw=serde_json::from_str::<RawValueBox>(JSON).unwrap(); assert_eq!( raw.get(), JSON );
pub fn get_rstr(&self) -> RStr<'_>
[src]
Gets the json being serialized,as a RStr<'a>
.
Example
use abi_stable::{ external_types::RawValueBox, std_types::RStr, }; const JSON:&'static str=r##"{"bugs":"life"}"##; let raw=serde_json::from_str::<RawValueBox>(JSON).unwrap(); assert_eq!( raw.get_rstr(), RStr::from(JSON) );
pub fn as_raw_value_ref(&self) -> RawValueRef<'_>
[src]
Gets a RawValueRef<'_> borrowing from this RawValueBox.
Example
use abi_stable::external_types::{RawValueBox,RawValueRef}; const JSON:&'static str=r##"{"bugs":"life"}"##; let raw=serde_json::from_str::<RawValueBox>(JSON).unwrap(); assert_eq!( raw.get(), RawValueRef::try_from_str(JSON).unwrap().get() );
Trait Implementations
impl Clone for RawValueBox
[src]
pub fn clone(&self) -> RawValueBox
[src]
pub fn clone_from(&mut self, source: &Self)
1.0.0[src]
impl Debug for RawValueBox
[src]
impl<'de> Deserialize<'de> for RawValueBox
[src]
pub fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> where
D: Deserializer<'de>,
[src]
D: Deserializer<'de>,
impl Display for RawValueBox
[src]
impl From<Box<RawValue, Global>> for RawValueBox
[src]
impl GetStaticEquivalent_ for RawValueBox
[src]
type StaticEquivalent = _static_RawValueBox
impl Serialize for RawValueBox
[src]
impl StableAbi for RawValueBox
[src]
type IsNonZeroType = <RString as __StableAbi>::IsNonZeroType
Whether this type has a single invalid bit-pattern. Read more
pub const LAYOUT: &'static TypeLayout
[src]
pub const ABI_CONSTS: AbiConsts
[src]
impl TryFrom<String> for RawValueBox
[src]
Auto Trait Implementations
impl RefUnwindSafe for RawValueBox
impl Send for RawValueBox
impl Sync for RawValueBox
impl Unpin for RawValueBox
impl UnwindSafe for RawValueBox
Blanket Implementations
impl<T> Any for T where
T: 'static + ?Sized,
[src]
T: 'static + ?Sized,
impl<T> Borrow<T> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
T: ?Sized,
pub fn borrow_mut(&mut self) -> &mut T
[src]
impl<'a, T> BorrowOwned<'a> for T where
T: 'a + Clone,
[src]
T: 'a + Clone,
type ROwned = T
The owned type, stored in RCow::Owned
type RBorrowed = &'a T
The borrowed type, stored in RCow::Borrowed
pub fn r_borrow(
&'a <T as BorrowOwned<'a>>::ROwned
) -> <T as BorrowOwned<'a>>::RBorrowed
[src]
&'a <T as BorrowOwned<'a>>::ROwned
) -> <T as BorrowOwned<'a>>::RBorrowed
pub fn r_to_owned(
<T as BorrowOwned<'a>>::RBorrowed
) -> <T as BorrowOwned<'a>>::ROwned
[src]
<T as BorrowOwned<'a>>::RBorrowed
) -> <T as BorrowOwned<'a>>::ROwned
pub fn deref_borrowed(&<T as BorrowOwned<'a>>::RBorrowed) -> &T
[src]
pub fn deref_owned(&<T as BorrowOwned<'a>>::ROwned) -> &T
[src]
pub fn from_cow_borrow(&'a T) -> <T as BorrowOwned<'a>>::RBorrowed
[src]
pub fn from_cow_owned(<T as ToOwned>::Owned) -> <T as BorrowOwned<'a>>::ROwned
[src]
pub fn into_cow_borrow(<T as BorrowOwned<'a>>::RBorrowed) -> &'a T
[src]
pub fn into_cow_owned(<T as BorrowOwned<'a>>::ROwned) -> <T as ToOwned>::Owned
[src]
impl<T> DeserializeOwned for T where
T: for<'de> Deserialize<'de>,
[src]
T: for<'de> Deserialize<'de>,
impl<T> From<T> for T
[src]
impl<T> GetWithMetadata for T
[src]
type ForSelf = WithMetadata_<T, T>
This is always WithMetadata_<Self, Self>
impl<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
impl<T> SelfOps for T where
T: ?Sized,
[src]
T: ?Sized,
pub const T: PhantomData<fn() -> Self>
[src]
pub const T_D: PhantomData<Self>
[src]
pub fn assert_ty(self, _other: PhantomData<fn() -> Self>) -> Self
[src]
pub fn assert_ty_ref(&self, _other: PhantomData<fn() -> Self>) -> &Self
[src]
pub fn assert_ty_mut(&mut self, _other: PhantomData<fn() -> Self>) -> &mut Self
[src]
pub fn ty_(&self) -> PhantomData<fn() -> Self>
[src]
pub fn ty_d(&self) -> PhantomData<Self>
[src]
pub fn ty_inv(&self) -> PhantomData<fn(Self) -> Self>
[src]
pub fn ty_inv_ref(&self) -> PhantomData<Cell<&Self>>
[src]
pub fn eq_id(&self, other: &Self) -> bool
[src]
pub fn piped<F, U>(self, f: F) -> U where
F: FnOnce(Self) -> U,
[src]
F: FnOnce(Self) -> U,
pub fn piped_ref<'a, F, U>(&'a self, f: F) -> U where
F: FnOnce(&'a Self) -> U,
[src]
F: FnOnce(&'a Self) -> U,
pub fn piped_mut<'a, F, U>(&'a mut self, f: F) -> U where
F: FnOnce(&'a mut Self) -> U,
[src]
F: FnOnce(&'a mut Self) -> U,
pub fn mutated<F>(self, f: F) -> Self where
F: FnOnce(&mut Self),
[src]
F: FnOnce(&mut Self),
pub fn observe<F>(self, f: F) -> Self where
F: FnOnce(&Self),
[src]
F: FnOnce(&Self),
pub fn into_<T>(self, PhantomData<fn() -> T>) -> T where
Self: Into<T>,
[src]
Self: Into<T>,
pub fn as_ref_<T>(&self) -> &T where
Self: AsRef<T>,
T: ?Sized,
[src]
Self: AsRef<T>,
T: ?Sized,
pub fn as_mut_<T>(&mut self) -> &mut T where
Self: AsMut<T>,
T: ?Sized,
[src]
Self: AsMut<T>,
T: ?Sized,
pub fn drop_(self)
[src]
impl<T> ToOwned for T where
T: Clone,
[src]
T: Clone,
type Owned = T
The resulting type after obtaining ownership.
pub fn to_owned(&self) -> T
[src]
pub fn clone_into(&self, target: &mut T)
[src]
impl<T> ToString for T where
T: Display + ?Sized,
[src]
T: Display + ?Sized,
impl<This> TransmuteElement for This where
This: ?Sized,
[src]
This: ?Sized,
pub unsafe fn transmute_element<T>(self) -> Self::TransmutedPtr where
Self: CanTransmuteElement<T>,
Self::Target: Sized,
[src]
Self: CanTransmuteElement<T>,
Self::Target: Sized,
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
pub fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,
type Error = <U as TryFrom<T>>::Error
The type returned in the event of a conversion error.
pub fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>
[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,
type Error = <U as TryFrom<T>>::Error
The error type returned when the conversion fails.
pub fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>
[src]
impl<T> TypeIdentity for T where
T: ?Sized,
[src]
T: ?Sized,
type Type = T
The same type as Self. Read more
pub fn into_type_val(self) -> Self::Type where
Self::Type: Sized,
[src]
Self::Type: Sized,
pub fn into_type_ref(&self) -> &Self::Type
[src]
pub fn into_type_mut(&mut self) -> &mut Self::Type
[src]
pub fn into_type_box(self: Box<Self, Global>) -> Box<Self::Type, Global>
[src]
pub fn into_type_arc(this: Arc<Self>) -> Arc<Self::Type>
[src]
pub fn into_type_rc(this: Rc<Self>) -> Rc<Self::Type>
[src]
pub fn from_type_val(this: Self::Type) -> Self where
Self::Type: Sized,
[src]
Self::Type: Sized,