Skip to main content

eoka_server/spa/
mod.rs

1mod detect;
2mod navigate;
3
4pub use detect::detect_router;
5pub use navigate::{history_go, spa_navigate};
6
7use serde::{Deserialize, Serialize};
8use std::collections::HashMap;
9
10#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
11#[serde(rename_all = "kebab-case")]
12pub enum RouterType {
13    ReactRouter,
14    NextJs,
15    VueRouter,
16    AngularRouter,
17    HistoryApi,
18    Unknown,
19}
20
21impl std::fmt::Display for RouterType {
22    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
23        match self {
24            RouterType::ReactRouter => write!(f, "React Router"),
25            RouterType::NextJs => write!(f, "Next.js"),
26            RouterType::VueRouter => write!(f, "Vue Router"),
27            RouterType::AngularRouter => write!(f, "Angular Router"),
28            RouterType::HistoryApi => write!(f, "History API"),
29            RouterType::Unknown => write!(f, "Unknown"),
30        }
31    }
32}
33
34#[derive(Debug, Clone, Serialize, Deserialize)]
35pub struct SpaRouterInfo {
36    pub router_type: RouterType,
37    pub current_path: String,
38    pub query_params: HashMap<String, String>,
39    pub hash: String,
40    pub can_navigate: bool,
41    pub details: Option<String>,
42}
43
44impl std::fmt::Display for SpaRouterInfo {
45    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
46        writeln!(f, "Router: {}", self.router_type)?;
47        writeln!(f, "Path: {}", self.current_path)?;
48        if !self.query_params.is_empty() {
49            writeln!(f, "Query: {:?}", self.query_params)?;
50        }
51        if !self.hash.is_empty() {
52            writeln!(f, "Hash: #{}", self.hash)?;
53        }
54        writeln!(
55            f,
56            "Can navigate: {}",
57            if self.can_navigate { "yes" } else { "no" }
58        )?;
59        if let Some(ref details) = self.details {
60            writeln!(f, "Details: {}", details)?;
61        }
62        Ok(())
63    }
64}