mdbx-derive-tests 0.7.0

poorman MDBX orm
Documentation
#[cfg(test)]
mod test {
    use std::io::Cursor;

    use mdbx_derive::{
        KeyAsTableObject, KeyObject, KeyObjectDecode, KeyObjectEncode, TableObjectDecode,
        TableObjectEncode, ZstdPostcardObject,
    };
    #[cfg(feature = "mdbx")]
    use mdbx_derive::{mdbx_database, mdbx_table, mdbx_table_def};
    use serde::{Deserialize, Serialize};

    #[cfg(any(feature = "simd-json", feature = "serde_json"))]
    use mdbx_derive::ZstdJSONObject;

    #[derive(Default, Serialize, Deserialize, KeyObject, KeyAsTableObject)]
    pub struct TrivialKey {
        a: u64,
        b: u64,
    }

    #[derive(Default, Serialize, Deserialize, ZstdPostcardObject)]
    pub struct TrivialObject {
        a: u64,
        b: u64,
    }

    #[cfg(any(feature = "simd-json", feature = "serde_json"))]
    #[derive(Default, Serialize, Deserialize, ZstdJSONObject)]
    struct TrivialJSONKey {
        a: u64,
        b: u64,
    }

    #[cfg(feature = "mdbx")]
    mod mdbx_tests {
        use super::*;

        #[allow(dead_code)]
        pub struct TrivialTable;

        mdbx_table!(TrivialTable, TrivialKey, TrivialObject);
        mdbx_table_def!(TrivialTable2, TrivialKey, TrivialObject);

        mdbx_database!(TrivialDatabase, mdbx_derive::Error, (), TrivialTable);
        mdbx_database!(
            TrivialDatabase2,
            mdbx_derive::Error,
            (),
            TrivialTable,
            TrivialTable2
        );
    }

    #[test]
    fn trivial_key() {
        assert_eq!(TrivialKey::KEYSIZE, std::mem::size_of::<u64>() * 2);
        let k = TrivialKey { a: 42, b: 24 };
        let ky = k.key_encode().expect("fail to encode");
        assert_eq!(ky.len(), std::mem::size_of::<u64>() * 2);

        let ky = TrivialKey::key_decode(&ky).expect("fail to decode key");
        assert_eq!(ky.a, 42);
        assert_eq!(ky.b, 24);
    }

    #[test]
    fn trivial_object() {
        let k = TrivialObject { a: 42, b: 24 };
        let ky = k.table_encode().expect("fail to encode");
        let expected = mdbx_derive::zstd::encode_all(
            Cursor::new(
                mdbx_derive::postcard::to_allocvec(&k).expect("postcard"),
            ),
            1,
        )
        .expect("zstd");
        assert_eq!(ky, expected);

        let ky = TrivialObject::table_decode(&ky).expect("fail to decode key");
        assert_eq!(ky.a, 42);
        assert_eq!(ky.b, 24);
    }

    #[cfg(any(feature = "simd-json", feature = "serde_json"))]
    #[test]
    fn trivial_json() {
        let k = TrivialJSONKey { a: 42, b: 24 };
        let ky = k.table_encode().expect("fail to encode");
        let expected = mdbx_derive::zstd::encode_all(
            Cursor::new(mdbx_derive::json::to_vec(&k).expect("json")),
            1,
        )
        .expect("zstd");
        assert_eq!(ky, expected);

        let ky = TrivialJSONKey::table_decode(&ky).expect("fail to decode key");
        assert_eq!(ky.a, 42);
        assert_eq!(ky.b, 24);
    }
    #[cfg(feature = "bcs")]
    use mdbx_derive::{BcsObject, ZstdBcsObject};

    #[cfg(feature = "bcs")]
    #[derive(Serialize, Deserialize, ZstdBcsObject)]
    struct ZstdBcsTest {
        a: u64,
    }

    #[cfg(feature = "bcs")]
    #[derive(Serialize, Deserialize, BcsObject)]
    struct BcsTest {
        a: u64,
    }

    #[cfg(feature = "bcs")]
    #[test]
    fn test_plain_bcs() {
        let v = BcsTest { a: 42 };

        let ky = v.table_encode().unwrap();
        let decoded: BcsTest = BcsTest::table_decode(&ky).unwrap();
        assert_eq!(decoded.a, v.a);
    }

    #[cfg(feature = "bcs")]
    #[test]
    fn test_zstd_bcs() {
        let v = ZstdBcsTest { a: 42 };

        let ky = v.table_encode().unwrap();
        let decoded: ZstdBcsTest = ZstdBcsTest::table_decode(&ky).unwrap();
        assert_eq!(decoded.a, v.a);
    }
}