Development Documentation (main branch) - For stable release docs, see docs.rs/eidetica

Protocol

Trait Protocol 

pub trait Protocol {
    // Provided methods
    fn start<E>(
        &self,
        awareness: &Awareness,
        encoder: &mut E,
    ) -> Result<(), Error>
       where E: Encoder { ... }
    fn handle(
        &self,
        awareness: &Awareness,
        data: &[u8],
    ) -> Result<SmallVec<[Message; 1]>, Error> { ... }
    fn handle_message(
        &self,
        awareness: &Awareness,
        message: Message,
    ) -> Result<Option<Message>, Error> { ... }
    fn handle_sync_step1(
        &self,
        awareness: &Awareness,
        sv: StateVector,
    ) -> Result<Option<Message>, Error> { ... }
    fn handle_sync_step2(
        &self,
        awareness: &Awareness,
        update: Update,
    ) -> Result<Option<Message>, Error> { ... }
    fn handle_update(
        &self,
        awareness: &Awareness,
        update: Update,
    ) -> Result<Option<Message>, Error> { ... }
    fn handle_auth(
        &self,
        _awareness: &Awareness,
        deny_reason: Option<String>,
    ) -> Result<Option<Message>, Error> { ... }
    fn handle_awareness_query(
        &self,
        awareness: &Awareness,
    ) -> Result<Option<Message>, Error> { ... }
    fn handle_awareness_update(
        &self,
        awareness: &Awareness,
        update: AwarenessUpdate,
    ) -> Result<Option<Message>, Error> { ... }
    fn missing_handle(
        &self,
        _awareness: &Awareness,
        tag: u8,
        _data: Vec<u8>,
    ) -> Result<Option<Message>, Error> { ... }
}
Expand description

Trait implementing a y-sync protocol. The default implementation can be found in DefaultProtocol, but its implementation steps can be potentially changed by the user if necessary.

Provided Methods§

fn start<E>(&self, awareness: &Awareness, encoder: &mut E) -> Result<(), Error>
where E: Encoder,

To be called whenever a new connection has been accepted. Returns an encoded list of messages to be sent back to initiator. This binary may contain multiple messages inside, stored one after another.

fn handle( &self, awareness: &Awareness, data: &[u8], ) -> Result<SmallVec<[Message; 1]>, Error>

Y-sync protocol message handler.

fn handle_message( &self, awareness: &Awareness, message: Message, ) -> Result<Option<Message>, Error>

Handles incoming y-sync Message within the context of current awareness structure. Returns an optional reply message that should be sent back to message sender.

fn handle_sync_step1( &self, awareness: &Awareness, sv: StateVector, ) -> Result<Option<Message>, Error>

Y-sync protocol sync-step-1 - given a StateVector of a remote side, calculate missing updates. Returns a sync-step-2 message containing a calculated update.

fn handle_sync_step2( &self, awareness: &Awareness, update: Update, ) -> Result<Option<Message>, Error>

Handle reply for a sync-step-1 send from this replica previously. By default just apply an update to current awareness document instance.

fn handle_update( &self, awareness: &Awareness, update: Update, ) -> Result<Option<Message>, Error>

Handle continuous update send from the client. By default just apply an update to a current awareness document instance.

fn handle_auth( &self, _awareness: &Awareness, deny_reason: Option<String>, ) -> Result<Option<Message>, Error>

Handle authorization message. By default if reason for auth denial has been provided, send back Error::PermissionDenied.

fn handle_awareness_query( &self, awareness: &Awareness, ) -> Result<Option<Message>, Error>

Returns an AwarenessUpdate which is a serializable representation of a current awareness instance.

fn handle_awareness_update( &self, awareness: &Awareness, update: AwarenessUpdate, ) -> Result<Option<Message>, Error>

Reply to awareness query or just incoming AwarenessUpdate, where current awareness instance is being updated with incoming data.

fn missing_handle( &self, _awareness: &Awareness, tag: u8, _data: Vec<u8>, ) -> Result<Option<Message>, Error>

Y-sync protocol enables to extend its own settings with custom handles. These can be implemented here. By default, it returns an Error::Unsupported.

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementors§