// Storage API Example
//
// This script only compiles if the "storage" feature is enabled in Cargo.toml.
pub fn handle_request(request) {
// Get request details
let method = request.method;
let path = request.path;
let query = request.query;
let body = request.body;
match path.parts() {
// Example: Store a value (POST /storage/set?key=mykey with body as value)
["storage", "set"] if method == "POST" => {
let key = query.get("key")?;
storage::set(key, body)?;
#{ success: true, message: `Stored value for key: ${key}` }
},
// Example: Get a value (GET /storage/get?key=mykey)
["storage", "get"] if method == "GET" => {
let key = query.get("key")?;
let value = storage::get(key)?;
match value {
Some(v) => #{ key, value: v },
None => (404, `Key not found: ${key}`),
}
},
// Example: Delete a value (DELETE /storage/delete?key=mykey)
["storage", "delete"] if method == "DELETE" => {
let key = query.get("key")?;
let deleted = storage::delete(key)?;
if deleted {
#{ success: true, message: `Deleted key: ${key}` }
} else {
(404, `Key not found: ${key}`)
}
},
// Example: Check if key exists (GET /storage/has?key=mykey)
["storage", "has"] if method == "GET" => {
let key = query.get("key")?;
let exists = storage::has(key)?;
#{ key, exists }
},
// Example: List all keys (GET /storage/keys)
["storage", "keys"] if method == "GET" => {
let keys = storage::keys()?;
#{ keys, count: keys.len() }
},
// Example: Clear all storage (DELETE /storage/clear)
["storage", "clear"] if method == "DELETE" => {
storage::clear()?;
#{ success: true, message: "All storage cleared" }
},
// Example: Counter endpoint using storage
["counter"] if method == "GET" => {
let count = match storage::get("counter")? {
Some(v) => v.parse::<i64>().unwrap_or(0),
None => 0,
};
#{ counter: count }
},
["counter"] if method == "POST" => {
let count = match storage::get("counter")? {
Some(v) => v.parse::<i64>().unwrap_or(0),
None => 0,
};
let new_count = count + 1;
storage::set("counter", `${new_count}`)?;
#{ counter: new_count }
},
// Example: Simple visitor tracking
["visit"] => {
let visits = match storage::get("visits")? {
Some(v) => v.parse::<i64>().unwrap_or(0),
None => 0,
};
let new_visits = visits + 1;
storage::set("visits", `${new_visits}`)?;
`Welcome! You are visitor #${new_visits}`
}
}
}