celld中文文档v0.6.2
GitHub ↗
文档 / 入门与运行

wasm 示例源码

这些文件来自仓库的 examples/wasm,可结合对应中文文档阅读和运行。

wrangler.jsonc

json
{
  "name": "counter-demo-rs",
  "main": "build/worker/shim.mjs",
  "compatibility_date": "2026-01-01",
  "durable_objects": {
    "bindings": [{ "name": "COUNTER", "class_name": "Counter" }]
  },
  "migrations": [{ "tag": "v1", "new_sqlite_classes": ["Counter"] }]
}

src/lib.rs

rust
use worker::*;

#[durable_object(fetch)]
pub struct Counter {
    state: State,
}

impl DurableObject for Counter {
    fn new(state: State, _env: Env) -> Self {
        Self { state }
    }

    async fn fetch(&self, req: Request) -> Result<Response> {
        let n: u64 = self.state.storage().get("n").await.ok().flatten().unwrap_or(0);
        let n = n + 1;
        self.state.storage().put("n", &n).await?;
        let path = req.path();
        let name = path.strip_prefix("/c/").unwrap_or("");
        Response::from_json(&serde_json::json!({ "name": name, "n": n, "lang": "rust" }))
    }
}

#[event(fetch)]
async fn fetch(req: Request, env: Env, _ctx: Context) -> Result<Response> {
    let path = req.path();
    if let Some(name) = path.strip_prefix("/c/").filter(|name| !name.is_empty()) {
        let namespace = env.durable_object("COUNTER")?;
        let stub = namespace.id_from_name(name)?.get_stub()?;
        return stub.fetch_with_request(req).await;
    }
    let status = if path == "/" { 200 } else { 404 };
    Ok(
        Response::ok("celld rust demo. Try: curl http://localhost:8080/c/hello\n")?
            .with_status(status),
    )
}

Cargo.toml

toml
[package]
name = "counter-demo-rs"
version = "0.1.0"
edition = "2021"

# 此配置表使示例独立于引擎工作区。
[workspace]

[lib]
crate-type = ["cdylib"]

[dependencies]
worker = "0.8.5"
serde_json = "1"
celld v0.6.2 · 简体中文文档
产品名、API、命令与示例代码保留原始写法。

输入关键词,搜索 20 篇中文文档。

支持中文术语、API 与环境变量 · Esc 关闭