Struct abi_stable::external_types::serde_json::RawValueBox
source · pub struct RawValueBox { /* private fields */ }
Expand description
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,
sabi_extern_fn,
std_types::{RBoxError, RErr, ROk, RResult, RStr, RString},
};
use serde::{Deserialize, Serialize};
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§
source§impl RawValueBox
impl RawValueBox
sourcepub unsafe fn from_string_unchecked(input: String) -> RawValueBox
pub unsafe fn from_string_unchecked(input: String) -> RawValueBox
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);
sourcepub const unsafe fn from_rstring_unchecked(input: RString) -> RawValueBox
pub const unsafe fn from_rstring_unchecked(input: RString) -> RawValueBox
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);
sourcepub fn try_from_string(input: String) -> Result<Self, JsonError>
pub fn try_from_string(input: String) -> Result<Self, JsonError>
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);
sourcepub fn get(&self) -> &str
pub fn get(&self) -> &str
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);
sourcepub fn get_rstr(&self) -> RStr<'_>
pub fn get_rstr(&self) -> RStr<'_>
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));
sourcepub fn as_raw_value_ref(&self) -> RawValueRef<'_>
pub fn as_raw_value_ref(&self) -> RawValueRef<'_>
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§
source§impl Clone for RawValueBox
impl Clone for RawValueBox
source§fn clone(&self) -> RawValueBox
fn clone(&self) -> RawValueBox
Returns a copy of the value. Read more
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source
. Read moresource§impl Debug for RawValueBox
impl Debug for RawValueBox
source§impl<'de> Deserialize<'de> for RawValueBox
impl<'de> Deserialize<'de> for RawValueBox
source§fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>where
D: Deserializer<'de>,
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>where
D: Deserializer<'de>,
Deserialize this value from the given Serde deserializer. Read more
source§impl Display for RawValueBox
impl Display for RawValueBox
source§impl GetStaticEquivalent_ for RawValueBox
impl GetStaticEquivalent_ for RawValueBox
source§type StaticEquivalent = _static_RawValueBox
type StaticEquivalent = _static_RawValueBox
The
'static
equivalent of Self
source§impl Serialize for RawValueBox
impl Serialize for RawValueBox
source§impl StableAbi for RawValueBox
impl StableAbi for RawValueBox
source§type IsNonZeroType = <RString as StableAbi>::IsNonZeroType
type IsNonZeroType = <RString as StableAbi>::IsNonZeroType
Whether this type has a single invalid bit-pattern. Read more
source§const LAYOUT: &'static TypeLayout = _
const LAYOUT: &'static TypeLayout = _
The layout of the type provided by implementors.
source§const ABI_CONSTS: AbiConsts = _
const ABI_CONSTS: AbiConsts = _
const
-equivalents of the associated types.Auto Trait Implementations§
impl Freeze for RawValueBox
impl RefUnwindSafe for RawValueBox
impl Send for RawValueBox
impl Sync for RawValueBox
impl Unpin for RawValueBox
impl UnwindSafe for RawValueBox
Blanket Implementations§
source§impl<T> AlignerFor<1> for T
impl<T> AlignerFor<1> for T
source§impl<T> AlignerFor<1024> for T
impl<T> AlignerFor<1024> for T
source§type Aligner = AlignTo1024<T>
type Aligner = AlignTo1024<T>
The
AlignTo*
type which aligns Self
to ALIGNMENT
.source§impl<T> AlignerFor<128> for T
impl<T> AlignerFor<128> for T
source§type Aligner = AlignTo128<T>
type Aligner = AlignTo128<T>
The
AlignTo*
type which aligns Self
to ALIGNMENT
.source§impl<T> AlignerFor<16> for T
impl<T> AlignerFor<16> for T
source§impl<T> AlignerFor<16384> for T
impl<T> AlignerFor<16384> for T
source§type Aligner = AlignTo16384<T>
type Aligner = AlignTo16384<T>
The
AlignTo*
type which aligns Self
to ALIGNMENT
.source§impl<T> AlignerFor<2> for T
impl<T> AlignerFor<2> for T
source§impl<T> AlignerFor<2048> for T
impl<T> AlignerFor<2048> for T
source§type Aligner = AlignTo2048<T>
type Aligner = AlignTo2048<T>
The
AlignTo*
type which aligns Self
to ALIGNMENT
.source§impl<T> AlignerFor<256> for T
impl<T> AlignerFor<256> for T
source§type Aligner = AlignTo256<T>
type Aligner = AlignTo256<T>
The
AlignTo*
type which aligns Self
to ALIGNMENT
.source§impl<T> AlignerFor<32> for T
impl<T> AlignerFor<32> for T
source§impl<T> AlignerFor<32768> for T
impl<T> AlignerFor<32768> for T
source§type Aligner = AlignTo32768<T>
type Aligner = AlignTo32768<T>
The
AlignTo*
type which aligns Self
to ALIGNMENT
.source§impl<T> AlignerFor<4> for T
impl<T> AlignerFor<4> for T
source§impl<T> AlignerFor<4096> for T
impl<T> AlignerFor<4096> for T
source§type Aligner = AlignTo4096<T>
type Aligner = AlignTo4096<T>
The
AlignTo*
type which aligns Self
to ALIGNMENT
.source§impl<T> AlignerFor<512> for T
impl<T> AlignerFor<512> for T
source§type Aligner = AlignTo512<T>
type Aligner = AlignTo512<T>
The
AlignTo*
type which aligns Self
to ALIGNMENT
.source§impl<T> AlignerFor<64> for T
impl<T> AlignerFor<64> for T
source§impl<T> AlignerFor<8> for T
impl<T> AlignerFor<8> for T
source§impl<T> AlignerFor<8192> for T
impl<T> AlignerFor<8192> for T
source§type Aligner = AlignTo8192<T>
type Aligner = AlignTo8192<T>
The
AlignTo*
type which aligns Self
to ALIGNMENT
.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
source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
🔬This is a nightly-only experimental API. (
clone_to_uninit
)source§impl<'a, T> RCowCompatibleRef<'a> for Twhere
T: Clone + 'a,
impl<'a, T> RCowCompatibleRef<'a> for Twhere
T: Clone + 'a,
source§fn as_c_ref(from: &'a T) -> <T as RCowCompatibleRef<'a>>::RefC
fn as_c_ref(from: &'a T) -> <T as RCowCompatibleRef<'a>>::RefC
Converts a reference to an FFI-safe type
source§fn as_rust_ref(from: <T as RCowCompatibleRef<'a>>::RefC) -> &'a T
fn as_rust_ref(from: <T as RCowCompatibleRef<'a>>::RefC) -> &'a T
Converts an FFI-safe type to a reference
source§impl<S> ROExtAcc for S
impl<S> ROExtAcc for S
source§fn f_get<F>(&self, offset: FieldOffset<S, F, Aligned>) -> &F
fn f_get<F>(&self, offset: FieldOffset<S, F, Aligned>) -> &F
Gets a reference to a field, determined by
offset
. Read moresource§fn f_get_mut<F>(&mut self, offset: FieldOffset<S, F, Aligned>) -> &mut F
fn f_get_mut<F>(&mut self, offset: FieldOffset<S, F, Aligned>) -> &mut F
Gets a muatble reference to a field, determined by
offset
. Read moresource§fn f_get_ptr<F, A>(&self, offset: FieldOffset<S, F, A>) -> *const F
fn f_get_ptr<F, A>(&self, offset: FieldOffset<S, F, A>) -> *const F
Gets a const pointer to a field,
the field is determined by
offset
. Read moresource§fn f_get_mut_ptr<F, A>(&mut self, offset: FieldOffset<S, F, A>) -> *mut F
fn f_get_mut_ptr<F, A>(&mut self, offset: FieldOffset<S, F, A>) -> *mut F
Gets a mutable pointer to a field, determined by
offset
. Read moresource§impl<S> ROExtOps<Aligned> for S
impl<S> ROExtOps<Aligned> for S
source§fn f_replace<F>(&mut self, offset: FieldOffset<S, F, Aligned>, value: F) -> F
fn f_replace<F>(&mut self, offset: FieldOffset<S, F, Aligned>, value: F) -> F
Replaces a field (determined by
offset
) with value
,
returning the previous value of the field. Read moresource§fn f_get_copy<F>(&self, offset: FieldOffset<S, F, Aligned>) -> Fwhere
F: Copy,
fn f_get_copy<F>(&self, offset: FieldOffset<S, F, Aligned>) -> Fwhere
F: Copy,
source§impl<S> ROExtOps<Unaligned> for S
impl<S> ROExtOps<Unaligned> for S
source§fn f_replace<F>(&mut self, offset: FieldOffset<S, F, Unaligned>, value: F) -> F
fn f_replace<F>(&mut self, offset: FieldOffset<S, F, Unaligned>, value: F) -> F
Replaces a field (determined by
offset
) with value
,
returning the previous value of the field. Read moresource§fn f_get_copy<F>(&self, offset: FieldOffset<S, F, Unaligned>) -> Fwhere
F: Copy,
fn f_get_copy<F>(&self, offset: FieldOffset<S, F, Unaligned>) -> Fwhere
F: Copy,
source§impl<T> SelfOps for Twhere
T: ?Sized,
impl<T> SelfOps for Twhere
T: ?Sized,
source§fn piped<F, U>(self, f: F) -> U
fn piped<F, U>(self, f: F) -> U
Emulates the pipeline operator, allowing method syntax in more places. Read more
source§fn piped_ref<'a, F, U>(&'a self, f: F) -> Uwhere
F: FnOnce(&'a Self) -> U,
fn piped_ref<'a, F, U>(&'a self, f: F) -> Uwhere
F: FnOnce(&'a Self) -> U,
The same as
piped
except that the function takes &Self
Useful for functions that take &Self
instead of Self
. Read moresource§fn piped_mut<'a, F, U>(&'a mut self, f: F) -> Uwhere
F: FnOnce(&'a mut Self) -> U,
fn piped_mut<'a, F, U>(&'a mut self, f: F) -> Uwhere
F: FnOnce(&'a mut Self) -> U,
The same as
piped
, except that the function takes &mut Self
.
Useful for functions that take &mut Self
instead of Self
.source§fn mutated<F>(self, f: F) -> Self
fn mutated<F>(self, f: F) -> Self
Mutates self using a closure taking self by mutable reference,
passing it along the method chain. Read more
source§fn observe<F>(self, f: F) -> Self
fn observe<F>(self, f: F) -> Self
Observes the value of self, passing it along unmodified.
Useful in long method chains. Read more
source§fn as_ref_<T>(&self) -> &T
fn as_ref_<T>(&self) -> &T
Performs a reference to reference conversion with
AsRef
,
using the turbofish .as_ref_::<_>()
syntax. Read moresource§impl<This> TransmuteElement for Thiswhere
This: ?Sized,
impl<This> TransmuteElement for Thiswhere
This: ?Sized,
source§unsafe fn transmute_element<T>(
self,
) -> <Self as CanTransmuteElement<T>>::TransmutedPtrwhere
Self: CanTransmuteElement<T>,
unsafe fn transmute_element<T>(
self,
) -> <Self as CanTransmuteElement<T>>::TransmutedPtrwhere
Self: CanTransmuteElement<T>,
Transmutes the element type of this pointer.. Read more
source§impl<T> TypeIdentity for Twhere
T: ?Sized,
impl<T> TypeIdentity for Twhere
T: ?Sized,
source§fn as_type_mut(&mut self) -> &mut Self::Type
fn as_type_mut(&mut self) -> &mut Self::Type
Converts a mutable reference back to the original type.
source§fn into_type_box(self: Box<Self>) -> Box<Self::Type>
fn into_type_box(self: Box<Self>) -> Box<Self::Type>
Converts a box back to the original type.
source§fn into_type_arc(this: Arc<Self>) -> Arc<Self::Type>
fn into_type_arc(this: Arc<Self>) -> Arc<Self::Type>
Converts an Arc back to the original type. Read more
source§fn into_type_rc(this: Rc<Self>) -> Rc<Self::Type>
fn into_type_rc(this: Rc<Self>) -> Rc<Self::Type>
Converts an Rc back to the original type. Read more
source§fn from_type_ref(this: &Self::Type) -> &Self
fn from_type_ref(this: &Self::Type) -> &Self
Converts a reference back to the original type.
source§fn from_type_mut(this: &mut Self::Type) -> &mut Self
fn from_type_mut(this: &mut Self::Type) -> &mut Self
Converts a mutable reference back to the original type.
source§fn from_type_box(this: Box<Self::Type>) -> Box<Self>
fn from_type_box(this: Box<Self::Type>) -> Box<Self>
Converts a box back to the original type.