aboutsummaryrefslogtreecommitdiff
path: root/examples/example-pathfinder/src/sub/mod.rs
blob: 6d159300e92adf7bf6f837a767274b820c2e66bb (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
use crate::Next;
use mingling::prelude::*;
use std::io::Write;

dispatcher!("greet", CMDGreet => EntryGreet);
pack!(ResultName = String);

#[chain]
pub fn handle_greet(args: EntryGreet) -> Next {
    let name: ResultName = args
        .inner
        .first()
        .cloned()
        .unwrap_or_else(|| "World".to_string())
        .into();
    name
}

/// Renders the name.
#[renderer]
// But renderers cannot use the `async` keyword
pub fn render_name(name: ResultName) -> RenderResult {
    let mut render_result = RenderResult::new();
    writeln!(render_result, "Hello, {}!", *name).ok();
    render_result
}