serde-crypt 0.1.4

The end-to-end encrypted serde::Serializer and serde::Deserializer - wasm-ready
Documentation
//! Test suite for the Web and headless browsers.

#![cfg(target_arch = "wasm32")]

extern crate wasm_bindgen_test;

wasm_bindgen_test_configure!(run_in_browser);

use ring::rand::{SecureRandom, SystemRandom};
use serde::{Deserialize, Serialize};

use serde_crypt::setup;
use std::error::Error;
use wasm_bindgen_test::*;

#[derive(Serialize, Deserialize, Debug, PartialEq, Eq)]
struct Test {
    #[serde(with = "serde_crypt")]
    field: Vec<u8>,
    #[serde(with = "serde_crypt")]
    other: Other,
}

#[derive(Serialize, Deserialize, Debug, PartialEq, Eq)]
struct Other {
    #[serde(with = "serde_crypt")]
    field: Vec<u8>,
}

#[wasm_bindgen_test]
fn flow() -> Result<(), Box<dyn Error>> {
    let mut key: [u8; 256] = [0; 256];
    let rand_gen = SystemRandom::new();
    rand_gen.fill(&mut key).unwrap();

    setup(key.to_vec());
    let instance = Test {
        field: "a super secret message".as_bytes().to_vec(),
        other: Other {
            field: "another secret message".as_bytes().to_vec(),
        },
    };
    let serialized = serde_json::to_string(&instance)?;
    let deserialized: Test = serde_json::from_str(&serialized)?;

    assert_eq!(deserialized.field, instance.field);

    Ok(())
}