silex 0.1.0-beta.8

Next Generation High-Performance Rust Web Framework based on fine-grained reactivity and no-virtual-DOM architecture.
Documentation
# Silex


**下一代高性能 Rust Web 框架 | Next Generation High-Performance Rust Web Framework**

Silex 是一个基于 **细粒度响应式 (Fine-Grained Reactivity)** 和 **无虚拟 DOM (No Virtual DOM)** 架构的 Rust Web 框架。它结合了 **SolidJS** 的极致性能与 **SwiftUI** 的 **流式声明式 API**,旨在为 Rust 开发者提供最符合直觉的 Web 开发体验。

---

## 🌟 核心特性 (Key Features)


### 1. 🚀 极致性能 (Blazing Fast)

Silex 摒弃了传统的虚拟 DOM Diff 算法。通过精确的依赖追踪,应用状态 (Signal) 的变化会直接更新对应的 DOM 节点。
*   **O(1) 更新复杂度**:无论应用多大,更新成本仅与变化的数据量相关。
*   **零运行时开销**:构建者模式和宏在编译时优化,运行时极为轻量。

### 2. 🦀 锈式美学 (Rusty & Fluent)

Silex 提供了一套完全符合 Rust 习惯的流式构建者 API (Builder API)。
*   **Children-First**:像 SwiftUI 一样编写 UI,结构清晰,层级分明。
*   **类型安全**:从 HTML 属性到事件处理,一切皆有类型检查,彻底告别运行时拼写错误。
*   **灵活风格**:支持 **宏风格 (`div![...]`)****函数风格 (`div(...)`)** 以及 **混合风格**,满足不同开发偏好。

### 3. 🛠️ 全栈工具链 (Batteries Included)

Silex 不仅仅是一个视图库,它提供了构建现代 Web 应用所需的一切:
*   **路由系统 (`silex_router`)**:类型安全的客户端路由,支持嵌套和参数配置。
*   **状态管理 (`silex_store`)**:基于宏的细粒度全局状态管理。
*   **CSS-in-Rust (`silex_css`)**:支持局部作用域的 CSS 宏,编译时压缩与校验。
*   **异步原语**:内置 `Resource``Suspense`,轻松处理异步数据加载。

---

## 📦 快速开始 (Quick Start)


### 1. 添加依赖


在你的 `Cargo.toml` 中添加:

```toml
[dependencies]
silex = "0.1.0-beta.8" # 请使用最新版本
```

### 2. 编写你的第一个应用


```rust
use silex::prelude::*;

#[component]

fn Counter() -> impl View {
    // 创建响应式信号
    let (count, set_count) = Signal::pair(0);
    
    // 派生状态 (Memo)
    let double_count = Memo::new(move |_| count.get() * 2);

    div![
        h1("Silex Counter Demo"),
        
        div![
            button("-").on_click(move |_| set_count.update(|n| *n -= 1)),
            
            // 文本节点自动响应信号变化
            span(move || format!("Count: {}", count.get()))
                .style("margin: 0 10px; font-weight: bold;"),
                
            button("+").on_click(move |_| set_count.update(|n| *n += 1)),
        ],

        // 控制流组件
        Show::new(
            move || count.get() > 5,
            || p("Count is greater than 5!").style("color: red;")
        ),
        
        p(move || format!("Double: {}", double_count.get()))
    ]
    .style("padding: 20px; text-align: center;")
}

fn main() {
    // 挂载应用到 Body
    mount_to_body(|| Counter());
}
```

---

## 🧩 模块概览 (Modules Overview)


Silex 采用模块化设计,核心功能拆分为多个 Crate 以保持架构清晰。

| Crate | 描述 | 文档重点 |
| :--- | :--- | :--- |
| **`silex`** | **主入口 (Facade)** | 重新导出所有核心功能,提供顶层 API。 |
| **`silex_core`** | **核心逻辑** | `Signal`, `Effect`, `Resource`, `Context` 等响应式原语。 |
| **`silex_dom`** | **DOM 绑定** | `TypedElement`, `View` Trait, 以及属性系统实现。 |
| **`silex_html`** | **HTML DSL** | 包含 HTML5 规范的所有标签构造函数 (`div`, `span`, `input`...)。 |
| **`silex_macros`** | **宏支持** | `#[component]`, `css!`, `#[derive(Route)]`, `#[derive(Store)]`|
| **`silex_reactivity`** | **响应式引擎** | 底层无类型的响应式图谱实现 (Runtime, NodeId, Graph)。 |

---

## 🎨 核心功能展示


### 1. 声明式路由 (Router)


通过 `Enum` 定义路由,享受编译时类型检查带来的安稳。

```rust
#[derive(Route, Clone, PartialEq)]

enum AppRoute {
    #[route("/", view = Home)]
    Home,
    #[route("/about", view = About)]
    About,
    #[route("/users/:id", view = User)]
    User { id: u32 }, // 自动解析 URL 参数
    #[route("/*", view = NotFound)]
    NotFound,
}

#[component]

fn App() -> impl View {
    Router::new().match_route::<AppRoute>()
}
```

### 2. CSS-in-Rust


不再需要单独的 CSS 文件,支持完整的 CSS 语法(嵌套、媒体查询、主题变量),并享受编译时校验。

```rust
let btn_class = css! {
    background-color: #007bff;
    color: white;
    padding: 8px 16px;
    border-radius: 4px;
    transition: all 0.2s;
    
    &:hover {
        background-color: #0056b3;
        transform: translateY(-2px);
    }

    @media (max-width: 600px) {
        width: 100%;
    }
};

button("Click Me").class(btn_class)
```

### 3. 全局状态 (Store)


复杂状态管理变得简单而直观。

```rust
#[derive(Store, Clone, Default)]

#[persist(prefix = "settings-")]

struct UserSettings {
    #[persist(local, codec = "string")]
    theme: String,
    #[persist(local, codec = "parse")]
    notifications: bool,
}

let settings = expect_context::<UserSettingsStore>();
settings.theme.set("Dark".to_string());
```

### 4. 外部状态持久化 (Persistence)


`Persistent::builder(key)` 统一封装了 `localStorage`、`sessionStorage` 和 URL query 三类外部状态后端。

```rust
let theme = Persistent::builder("theme")
    .local()
    .string()
    .default("Light".to_string())
    .build();

let page = Persistent::builder("page")
    .query()
    .parse::<u32>()
    .default(1)
    .build();

input().bind_value(theme);
span(page);
```

---

## 🤝 贡献 (Contributing)


Silex 处于快速迭代阶段,欢迎任何形式的贡献!无论是提交 Issue、PR,还是完善文档。

详情请参考 `docs/` 目录下的开发文档:
- [Silex Reactivity Design]docs/src/general_docs/silex_reactivity/README.md
- [Silex Macro Guide]docs/src/general_docs/silex_macros/README.md
- [Silex Core API]docs/src/general_docs/silex_core/README.md

---

## 📄 许可证 (License)


[MIT License](LICENSE-MIT)

[Apache License 2.0](LICENSE-APACHE)