telegram_webapp_sdk/
router.rs1#[cfg(feature = "macros")]
20use crate::pages::Page;
21#[cfg(not(feature = "macros"))]
22#[derive(Copy, Clone)]
23struct Page {
24 #[allow(dead_code)]
25 path: &'static str,
26 handler: fn()
27}
28
29#[derive(Default)]
31pub struct Router {
32 pages: Vec<Page>
33}
34
35impl Router {
36 pub fn new() -> Self {
38 Self::default()
39 }
40
41 pub fn register(mut self, path: &'static str, handler: fn()) -> Self {
44 self.pages.push(Page {
45 path,
46 handler
47 });
48 self
49 }
50
51 pub fn start(self) {
53 for page in self.pages {
54 (page.handler)();
55 }
56 }
57}
58
59#[cfg(test)]
60mod tests {
61 use std::sync::atomic::{AtomicUsize, Ordering};
62
63 use super::*;
64
65 fn noop() {}
66
67 #[test]
68 fn registers_pages() {
69 let router = Router::new().register("/", noop);
70 assert_eq!(router.pages.len(), 1);
71 }
72
73 static COUNT: AtomicUsize = AtomicUsize::new(0);
74
75 fn handler() {
76 COUNT.fetch_add(1, Ordering::SeqCst);
77 }
78
79 #[test]
80 fn starts_registered_pages() {
81 COUNT.store(0, Ordering::SeqCst);
82 Router::new().register("/", handler).start();
83 assert_eq!(COUNT.load(Ordering::SeqCst), 1);
84 }
85}