[][src]Struct abi_stable::external_types::serde_json::RawValueBox

#[repr(transparent)]pub struct RawValueBox { /* fields omitted */ }

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]

impl Debug for RawValueBox[src]

impl<'de> Deserialize<'de> for RawValueBox[src]

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

impl TryFrom<String> for RawValueBox[src]

type Error = JsonError

The type returned in the event of a conversion error.

Auto Trait Implementations

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<'a, T> BorrowOwned<'a> for T where
    T: 'a + Clone
[src]

type ROwned = T

The owned type, stored in RCow::Owned

type RBorrowed = &'a T

The borrowed type, stored in RCow::Borrowed

impl<T> DeserializeOwned for T where
    T: for<'de> Deserialize<'de>, 
[src]

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]

impl<T> SelfOps for T where
    T: ?Sized
[src]

impl<T> ToOwned for T where
    T: Clone
[src]

type Owned = T

The resulting type after obtaining ownership.

impl<T> ToString for T where
    T: Display + ?Sized
[src]

impl<This> TransmuteElement for This where
    This: ?Sized
[src]

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The error type returned when the conversion fails.

impl<T> TypeIdentity for T where
    T: ?Sized
[src]

type Type = T

The same type as Self. Read more