use btproto::protocol; use serde::{Deserialize, Serialize}; use crate::{sector_proto::FileId, ActorName, CallMsg}; #[derive(Serialize, Deserialize)] pub struct Open { id: FileId, } impl CallMsg for Open { type Reply = ActorName; } protocol! { let name = FsProtocol; let states = [ ServerInit, Listening, Client, FileInit, Opened, FileHandle, ]; ServerInit?Activate -> Listening; Client -> Client, >service(Listening)!Query; Listening?Query -> Listening, >Client!Query::Reply; Client?Query::Reply -> Client; Client -> Client, >service(Listening)!Open; Listening?Open -> Listening, FileInit, >Client!Open::Reply[Opened], FileInit!Open; Client?Open::Reply[Opened] -> Client, FileHandle[Opened]; FileInit?Activate -> FileInit; FileInit?Open -> Opened; //PoopedPants?Notification -> Changing; FileHandle[Opened] -> FileHandle[Opened], >Opened!FileOp; Opened?FileOp -> Opened, >FileHandle!FileOp::Reply; FileHandle?FileOp::Reply -> FileHandle; FileHandle[Opened] -> End, >Opened!Close; Opened?Close -> End; }