dittolive-ditto 2.0.2

Ditto is a peer to peer cross-platform database that allows mobile, web, IoT and server apps to sync with or without an internet connection.
Documentation
#[allow(deprecated)]
mod deprecated {
    use_prelude!();
    use crate::{
        prelude::DocumentId,
        store::collection::document::{DittoDocument as _, DittoMutDocument as _},
        test_helpers::setup_ditto,
        types::rga::{DittoMutableRga, DittoRga},
        utils::prelude::ErrorKind,
    };
    use serde_json::json;

    #[test]
    fn create_in_document() {
        let ditto = setup_ditto().unwrap();
        let store = ditto.store();
        let collection = store.collection("test").unwrap();
        let doc_id = DocumentId::new(&"test_rga").unwrap();
        let doc = collection.find_by_id(&doc_id).exec();
        assert!(doc.is_err());
        let e = doc.err().unwrap();
        let error_kind = e.kind();
        assert_eq!(error_kind, ErrorKind::NonExtant);
        let content = json!({"_id": "test_rga" ,"rga": DittoRga::new()});
        let doc_id = collection.upsert(content).unwrap();
        let doc = collection.find_by_id(doc_id).exec();
        assert!(doc.is_ok());
    }

    #[test]
    fn set_rga() {
        let ditto = setup_ditto().unwrap();
        let store = ditto.store();
        let collection = store.collection("test").unwrap();
        let doc_id = collection.upsert(json!({})).unwrap();
        collection
            .find_by_id(&doc_id)
            .update(|mut_doc| {
                let mut_doc = mut_doc.unwrap();

                let rga = DittoRga::new();
                mut_doc.set("rga", rga).unwrap();
            })
            .unwrap();

        let doc = collection.find_by_id(&doc_id).exec().unwrap();

        let _rga: DittoRga = doc.get("rga").unwrap();
    }

    #[test]
    fn push() {
        let ditto = setup_ditto().unwrap();
        let store = ditto.store();
        let collection = store.collection("test").unwrap();
        let doc_id = collection
            .upsert(json!({ "rga": DittoRga::new() }))
            .unwrap();

        collection
            .find_by_id(&doc_id)
            .update(|mut_doc| {
                let mut_doc = mut_doc.unwrap();

                let mut rga: DittoMutableRga = mut_doc.get_mut("rga").unwrap();
                rga.push(42u32).unwrap();
                rga.push("I ♥ Ditto").unwrap();
            })
            .unwrap();
        let doc = collection.find_by_id(&doc_id).exec().unwrap();

        let rga: DittoRga = doc.get("rga").unwrap();
        assert_eq!(rga.get::<u32>(0).unwrap(), 42u32);
        assert_eq!(rga.get::<String>(1).unwrap(), "I ♥ Ditto");
    }

    #[test]
    fn pop() {
        let ditto = setup_ditto().unwrap();
        let store = ditto.store();
        let collection = store.collection("test").unwrap();

        let mut rga = DittoRga::new();
        rga.push(64f64)
            .unwrap()
            .push("I ♥ Ditto")
            .unwrap()
            .push(vec![1, 2, 3])
            .unwrap();

        let doc_id = collection.upsert(json!({ "rga": rga })).unwrap();

        collection
            .find_by_id(&doc_id)
            .update(|mut_doc| {
                let mut_doc = mut_doc.unwrap();

                let mut rga: DittoMutableRga = mut_doc.get_mut("rga").unwrap();
                rga.pop().unwrap();
                rga.pop().unwrap();
            })
            .unwrap();
        let doc = collection.find_by_id(&doc_id).exec().unwrap();

        let rga: DittoRga = doc.get("rga").unwrap();

        assert_eq!(rga.len(), 1);
        assert_eq!(rga.get::<f64>(0).unwrap(), 64f64);
    }

    #[test]
    fn remove() {
        let ditto = setup_ditto().unwrap();
        let store = ditto.store();
        let collection = store.collection("test").unwrap();

        let mut rga = DittoRga::new();
        rga.push(64f64)
            .unwrap()
            .push("I ♥ Ditto")
            .unwrap()
            .push(vec![1, 2, 3])
            .unwrap();

        let doc_id = collection.upsert(json!({ "rga": rga })).unwrap();

        collection
            .find_by_id(&doc_id)
            .update(|mut_doc| {
                let mut_doc = mut_doc.unwrap();

                let mut rga: DittoMutableRga = mut_doc.get_mut("rga").unwrap();
                rga.remove(1).unwrap();
            })
            .unwrap();
        let doc = collection.find_by_id(&doc_id).exec().unwrap();

        let rga: DittoRga = doc.get("rga").unwrap();

        assert_eq!(rga.len(), 2);
    }

    #[test]
    fn insert() {
        let ditto = setup_ditto().unwrap();
        let store = ditto.store();
        let collection = store.collection("test").unwrap();

        let mut rga = DittoRga::new();
        rga.push(64f64)
            .unwrap()
            .push("I ♥ Ditto")
            .unwrap()
            .push(vec![1, 2, 3])
            .unwrap();

        let doc_id = collection.upsert(json!({ "rga": rga })).unwrap();

        collection
            .find_by_id(&doc_id)
            .update(|mut_doc| {
                let mut_doc = mut_doc.unwrap();

                let mut rga: DittoMutableRga = mut_doc.get_mut("rga").unwrap();
                rga.insert("It's a Pikachu!", 1).unwrap();
                rga.insert(12f32, 1).unwrap();
            })
            .unwrap();
        let doc = collection.find_by_id(&doc_id).exec().unwrap();

        let rga: DittoRga = doc.get("rga").unwrap();

        assert_eq!(rga.len(), 5);
        assert_eq!(rga.get::<f32>(1).unwrap(), 12f32);
        assert_eq!(rga.get::<String>(2).unwrap(), "It's a Pikachu!");
    }

    #[test]
    fn wrong_index() {
        let ditto = setup_ditto().unwrap();
        let store = ditto.store();
        let collection = store.collection("test").unwrap();

        let mut rga = DittoRga::new();
        rga.push(64f64)
            .unwrap()
            .push("I ♥ Ditto")
            .unwrap()
            .push(vec![1, 2, 3])
            .unwrap();

        let doc_id = collection.upsert(json!({ "rga": rga })).unwrap();

        collection
            .find_by_id(&doc_id)
            .update(|mut_doc| {
                let mut_doc = mut_doc.unwrap();

                let mut rga: DittoMutableRga = mut_doc.get_mut("rga").unwrap();
                assert!(rga.insert("Won't work", 10).is_err());
                assert!(rga.remove(10).is_err());
                assert!(rga.set("Won't work too", 10).is_err());

                rga.insert("It's a Pikachu!", 1).unwrap();
                rga.insert(12f32, 1).unwrap();
            })
            .unwrap();
        let doc = collection.find_by_id(&doc_id).exec().unwrap();

        let rga: DittoRga = doc.get("rga").unwrap();

        assert_eq!(rga.len(), 5);
        assert_eq!(rga.get::<f32>(1).unwrap(), 12f32);
        assert_eq!(rga.get::<String>(2).unwrap(), "It's a Pikachu!");
    }
}