Skip to main content

postrust_worker/
lib.rs

1//! Postrust Cloudflare Workers adapter.
2//!
3//! Deploys Postrust as a Cloudflare Worker.
4//!
5//! **This is a stub.** The fetch handler answers with a JSON body saying so;
6//! it does not parse requests, reach a database, or return data. A real
7//! implementation needs Cloudflare-specific pieces that are not here yet:
8//! Hyperdrive for database connections, and KV or Durable Objects for the
9//! schema cache.
10//!
11//! Because of that the crate is on its own 0.x version line rather than the
12//! workspace's, and carries no stability promise. See docs/stability.md.
13
14use worker::*;
15
16#[event(fetch)]
17async fn main(req: Request, env: Env, _ctx: Context) -> Result<Response> {
18    // Log request
19    console_log!("{} {}", req.method().to_string(), req.path());
20
21    // Get configuration from environment
22    let _db_url = env.var("DATABASE_URL").map(|v| v.to_string()).ok();
23    let _jwt_secret = env.secret("JWT_SECRET").map(|v| v.to_string()).ok();
24    let _schemas = env
25        .var("PGRST_DB_SCHEMAS")
26        .map(|v| v.to_string())
27        .unwrap_or_else(|_| "public".to_string());
28
29    // For now, return a placeholder response
30    // Full implementation would:
31    // 1. Use Hyperdrive for database connections
32    // 2. Cache schema in KV or Durable Objects
33    // 3. Process requests using postrust-core
34
35    let response_body = serde_json::json!({
36        "message": "Postrust Worker is running",
37        "status": "stub",
38        "note": "Full implementation requires Hyperdrive configuration"
39    });
40
41    Response::from_json(&response_body)
42}
43
44/// Process a request using Postrust core.
45///
46/// This is a placeholder for the full implementation.
47#[allow(dead_code)]
48async fn process_request(_req: Request, _env: &Env) -> Result<Response> {
49    // In a full implementation:
50    // 1. Get Hyperdrive binding: env.hyperdrive("DB")?
51    // 2. Parse request using postrust-core
52    // 3. Execute query
53    // 4. Format response
54
55    Response::error("Not implemented", 501)
56}
57
58/// Get or load schema cache from KV.
59#[allow(dead_code)]
60async fn get_schema_cache(_env: &Env) -> Result<Option<String>> {
61    // In a full implementation:
62    // 1. Check KV for cached schema
63    // 2. If not found, load from database
64    // 3. Cache in KV with TTL
65
66    Ok(None)
67}