🏡 index : ~doyle/jogre.git

//! When the state of the set of Foo records in an account changes on the
//! server (whether due to creation, updates, or deletion), the "state"
//! property of the "Foo/get" response will change.  The "Foo/changes"
//! method allows a client to efficiently update the state of its Foo
//! cache to match the new state on the server.

use serde::{Deserialize, Serialize};

use crate::{
    common::{Id, UnsignedInt},
    endpoints::object::ObjectState,
};

#[derive(Serialize, Deserialize, Debug, Clone)]
#[serde(rename_all = "camelCase")]
pub struct ChangesParams<'a> {
    /// The id of the account to use.
    #[serde(borrow)]
    account_id: Id<'a>,
    /// The current state of the client.  This is the string that was
    /// returned as the "state" argument in the "Foo/get" response.  The
    /// server will return the changes that have occurred since this
    /// state.
    since_state: ObjectState<'a>,
    /// The maximum number of ids to return in the response.  The server
    /// MAY choose to return fewer than this value but MUST NOT return
    /// more. If not given by the client, the server may choose how many
    /// to return.
    max_changes: Option<UnsignedInt>,
}

#[derive(Serialize, Deserialize, Debug, Clone)]
#[serde(rename_all = "camelCase")]
pub struct ChangesResponse<'a> {
    /// The id of the account used for the call.
    #[serde(borrow)]
    account_id: Id<'a>,
    /// This is the "sinceState" argument echoed back; it's the state from
    /// which the server is returning changes.
    old_state: ObjectState<'a>,
    /// This is the state the client will be in after applying the set of
    /// changes to the old state.
    new_state: ObjectState<'a>,
    /// If true, the client may call "Foo/changes" again with the
    /// "newState" returned to get further updates.  If false, "newState"
    /// is the current server state.
    has_more_changes: bool,
    /// An array of ids for records that have been created since the old
    /// state.
    created: Vec<Id<'a>>,
    /// An array of ids for records that have been updated since the old
    /// state.
    updated: Vec<Id<'a>>,
    /// An array of ids for records that have been destroyed since the old
    /// state.
    destroyed: Vec<Id<'a>>,
}