123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122 |
- use btproto::protocol;
- struct End;
- struct Ping;
- fn minimal_syntax() {
- // This is the token stream that should be passed to the protocol macro:
- // Ident { ident: "let", span:
- // Ident { ident: "name", span:
- // Punct { ch: '=', spacing: Alone, span:
- // Ident { ident: "Minimal", span:
- // Punct { ch: ';', spacing: Alone, span:
- // Ident { ident: "let", span:
- // Ident { ident: "states", span:
- // Punct { ch: '=', spacing: Alone, span:
- // Group { delimiter: Bracket,
- // stream: TokenStream [Ident { ident: "Init", span:
- // span:
- // }
- // Punct { ch: ';', spacing: Alone, span:
- // Ident { ident: "Init", span:
- // Punct { ch: '?', spacing: Alone, span:
- // Ident { ident: "Activate", span:
- // Punct { ch: '-', spacing: Joint, span:
- // Punct { ch: '>', spacing: Alone, span:
- // Ident { ident: "End", span:
- // Punct { ch: ';', spacing: Alone, span:
- protocol! {
- let name = Minimal;
- let states = [Init];
- Init?Activate -> End;
- }
- }
- fn reply() {
- // Ident { ident: "let", span:
- // Ident { ident: "name", span:
- // Punct { ch: '=', spacing: Alone, span:
- // Ident { ident: "Reply", span:
- // Punct { ch: ';', spacing: Alone, span:
- // Ident { ident: "let", span:
- // Ident { ident: "states", span:
- // Punct { ch: '=', spacing: Alone, span:
- // Group {
- // delimiter: Bracket,
- // stream: TokenStream [
- // Ident { ident: "ServerInit", span:
- // Punct { ch: ',', spacing: Alone, span:
- // Ident { ident: "Listening", span:
- // Punct { ch: ',', spacing: Alone, span:
- // Ident { ident: "Client", span:
- // Punct { ch: ',', spacing: Alone, span:
- // Ident { ident: "Waiting", span:
- // Punct { ch: ',', spacing: Alone, span:
- // ],
- // span:
- // }
- // Punct { ch: ';', spacing: Alone, span:
- // Ident { ident: "ServerInit", span:
- // Punct { ch: '?', spacing: Alone, span:
- // Ident { ident: "Activate", span:
- // Punct { ch: '-', spacing: Joint, span:
- // Punct { ch: '>', spacing: Alone, span:
- // Ident { ident: "Listening", span:
- // Punct { ch: ';', spacing: Alone, span:
- // Ident { ident: "Client", span:
- // Punct { ch: '-', spacing: Joint, span:
- // Punct { ch: '>', spacing: Alone, span:
- // Ident { ident: "Waiting", span:
- // Punct { ch: ',', spacing: Alone, span:
- // Punct { ch: '>', spacing: Alone, span:
- // Ident { ident: "service", span:
- // Group {
- // delimiter: Parenthesis,
- // stream: TokenStream [
- // Ident { ident: "Listening", span:
- // ],
- // span:
- // }
- // Punct { ch: '!', spacing: Alone, span:
- // Ident { ident: "Ping", span:
- // Punct { ch: ';', spacing: Alone, span:
- // Ident { ident: "Listening", span:
- // Punct { ch: '?', spacing: Alone, span:
- // Ident { ident: "Ping", span:
- // Punct { ch: '-', spacing: Joint, span:
- // Punct { ch: '>', spacing: Alone, span:
- // Ident { ident: "Listening", span:
- // Punct { ch: ',', spacing: Alone, span:
- // Punct { ch: '>', spacing: Alone, span:
- // Ident { ident: "Waiting", span:
- // Punct { ch: '!', spacing: Alone, span:
- // Ident { ident: "Ping", span:
- // Punct { ch: ':', spacing: Joint, span:
- // Punct { ch: ':', spacing: Alone, span:
- // Ident { ident: "Reply", span:
- // Punct { ch: ';', spacing: Alone, span:
- // Ident { ident: "Waiting", span:
- // Punct { ch: '?', spacing: Alone, span:
- // Ident { ident: "Ping", span:
- // Punct { ch: ':', spacing: Joint, span:
- // Punct { ch: ':', spacing: Alone, span:
- // Ident { ident: "Reply", span:
- // Punct { ch: '-', spacing: Joint, span:
- // Punct { ch: '>', spacing: Alone, span:
- // Ident { ident: "End", span:
- // Punct { ch: ';', spacing: Alone, span:
- protocol! {
- let name = Reply;
- let states = [
- ServerInit, Listening,
- Client, Waiting,
- ];
- ServerInit?Activate -> Listening;
- Client -> Waiting, >service(Listening)!Ping;
- Listening?Ping -> Listening, >Waiting!Ping::Reply;
- Waiting?Ping::Reply -> End;
- }
- }
|