rill_protocol/io/
client.rs

1use crate::io::codec::BinaryCodec;
2use crate::io::provider::{Description, EntryId, PackedEvent, PackedState, Path, RecorderRequest};
3use crate::io::transport::{DirectId, Origin, ServiceEnvelope};
4use meio_protocol::Protocol;
5use serde::{Deserialize, Serialize};
6
7pub type ClientReqId = DirectId<ClientProtocol>;
8
9#[derive(Debug, Default, Clone, Copy, Serialize, Deserialize, PartialEq, Eq, Hash)]
10pub struct ClientProtocol;
11
12impl Protocol for ClientProtocol {
13    type ToServer = ServiceEnvelope<Self, ClientRequest, ClientServiceResponse>;
14    type ToClient = ServiceEnvelope<Self, ClientResponse, ClientServiceRequest>;
15    type Codec = BinaryCodec;
16}
17
18impl Origin for ClientProtocol {}
19
20#[derive(Debug, Clone, Serialize, Deserialize)]
21pub struct ClientRequest {
22    pub path: Path,
23    pub request: RecorderRequest,
24}
25
26#[derive(Debug, Clone, Serialize, Deserialize)]
27pub enum ClientResponse {
28    Declare(EntryId),
29    Flow(Description),
30    State(PackedState),
31    Delta(PackedEvent),
32    /// Stream closed/finished.
33    Done,
34    Error(String),
35}
36
37#[derive(Debug, Clone, Serialize, Deserialize)]
38pub enum ClientServiceRequest {
39    //Ping,
40    AccessLevel(AccessLevel),
41}
42
43#[derive(Debug, Clone, Serialize, Deserialize)]
44pub enum ClientServiceResponse {
45    //Pong,
46}
47
48/// `AccessLevel` notifies about specific stages of a session:
49/// - session created (ready for pings)
50/// - client can sign in or sign up
51/// - client can work will all accessible flows
52#[derive(Debug, Clone, Serialize, Deserialize)]
53pub enum AccessLevel {
54    SessionCreated,
55    ReadyToAuth,
56    ReadyToWork,
57}