Skip to main content

sandbox/
sandbox.rs

1//! Extension host sandbox example.
2//!
3//! Demonstrates path validation, permissions, rate limiting, and secret storage.
4
5use dscode_extension_host::{
6    ExtensionPermissions, PathValidator, Permission, RateLimiter, SecretStorage,
7};
8
9fn main() -> Result<(), Box<dyn std::error::Error>> {
10    // Path validation
11    let mut validator = PathValidator::new();
12    validator.add_workspace_folder(std::env::current_dir()?);
13    let safe = validator.validate_path("file:///workspace/src/main.rs")?;
14    println!("Validated path: {}", safe.display());
15
16    // Permissions
17    let perms = ExtensionPermissions::from_manifest(
18        "my-extension".to_string(),
19        Some(vec!["fileSystem.read".to_string()]),
20    )?;
21    perms.check_permission(&Permission::FileSystemRead)?;
22    println!("Permission check passed.");
23
24    // Rate limiting
25    let limiter = RateLimiter::new();
26    limiter.check_rate_limit("my-extension")?;
27    println!("Rate limit check passed.");
28
29    // Secret storage
30    let secrets = SecretStorage::new();
31    secrets.set("my-extension", "api_key", "secret-value")?;
32    let value = secrets.get("my-extension", "api_key")?;
33    println!("Retrieved secret: {}", value.unwrap_or_default());
34
35    Ok(())
36}