dittolive-ditto 5.0.0

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
//! Use DQL [`Query`]s to [subscribe to], [observe], and [edit] documents.
//!
//! # Example: Write and Read with DQL
//!
//! Let's look at how to execute an immediate query on the data in the `Store`
//! using [`ditto.store().execute(...)`]:
//!
//! ```
//! use dittolive_ditto::prelude::*;
//! use dittolive_ditto::dql::QueryResult;
//! # #[tokio::main]
//! # async fn main() -> anyhow::Result<()> {
//! # let (_root, ditto) = dittolive_ditto::doctest_helpers::doctest_ditto();
//!
//! // Insert a document into a collection
//! let insert_result: QueryResult = ditto
//!     .store()
//!     .execute((
//!          "INSERT INTO cars DOCUMENTS (:newCar)",
//!          serde_json::json!({
//!              "newCar": {
//!                  "make": "ford",
//!                  "color": "blue"
//!              }
//!          })
//!     ))
//!     .await?;
//!
//! // Select all documents from a collection
//! let select_result: QueryResult = ditto.store().execute("SELECT * FROM cars").await?;
//!
//! // Extract documents as `serde_json::Value`s
//! let documents: Vec<serde_json::Value> = select_result
//!     .iter()
//!     .flat_map(|item| item.deserialize_value().ok())
//!     .collect();
//!
//! # Ok(())
//! # }
//! ```
//!
//! # Example: Observe document updates with DQL
//!
//! If instead we want to be notified when documents are changed, we can use
//! [`ditto.store().register_observer(...)`] to receive callbacks for documents
//! matching a given DQL query.
//!
//! ```
//! use dittolive_ditto::{
//!     dql::{QueryResult, QueryResultItem},
//!     prelude::*,
//! };
//! # fn main() -> anyhow::Result<()> {
//! # let (_root, ditto) = dittolive_ditto::doctest_helpers::doctest_ditto();
//!
//! let _observer =
//!     ditto
//!         .store()
//!         .register_observer("SELECT * FROM cars", |query_result: QueryResult| {
//!             let changed_documents = query_result
//!                 .iter()
//!                 .flat_map(|item: QueryResultItem| {
//!                     item.deserialize_value::<serde_json::Value>().ok()
//!                 })
//!                 .collect::<Vec<_>>();
//!
//!             for doc in &changed_documents {
//!                 println!("Observed change to document: {doc}");
//!             }
//!         })?;
//! # Ok(())
//! # }
//! ```
//!
//! [subscribe to]: crate::sync::Sync::register_subscription
//! [observe]: crate::store::Store::register_observer
//! [edit]: crate::store::Store::execute
//! [`ditto.store().execute(...)`]: crate::store::Store::execute
//! [`ditto.store().register_observer(...)`]: crate::store::Store::register_observer

/// Query
pub(crate) mod query;
pub use query::{IntoQuery, Query};

/// Dql Result
pub(crate) mod query_result;
pub use query_result::{QueryResult, QueryResultItem};

/// Differ
pub(crate) mod differ;
pub use differ::{Diff, DiffMove, Differ};