dist_agent_lang 1.0.9

Hybrid programming with library and CLI support for Off/On-chain network integration
Documentation
// Simple Web API Example using Phase 2 Web Framework
// Demonstrates basic web server, API endpoints, and frontend integration

@web
@trust("hybrid")
@chain("ethereum")
service SimpleAPI {
    server: string;
    
    fn main() {
        // Create server with Phase 2 framework
        let server = web::create_server(3000);
        
        // Add basic middleware
        web::add_middleware(server, "logger", "log_requests", 0);
        
        // Define API routes
        web::add_route(server, "GET", "/", "home_page");
        web::add_route(server, "GET", "/api/status", "api_status");
        web::add_route(server, "POST", "/api/users", "create_user");
        web::add_route(server, "GET", "/api/users", "list_users");
        
        // Start server
        let result = web::start_server(server);
        log::info("api", { "status": result, "port": 3000 });
    }
    
    fn home_page(request: HttpRequest) -> HttpResponse {
        // Create simple HTML page
        let page = web::create_html_page("Simple API Demo");
        web::add_css_file(page, "/style.css");
        web::add_js_file(page, "/app.js");
        
        // Create page content
        let content = web::create_element("div", None);
        web::add_attribute(content, "class", "container");
        
        let title = web::create_element("h1", Some("Simple API Demo"));
        let description = web::create_element("p", Some("This demonstrates the Phase 2 web framework capabilities."));
        
        let user_form = self.create_user_form();
        let user_list = web::create_element("div", None);
        web::add_attribute(user_list, "id", "user-list");
        
        web::append_child(content, title);
        web::append_child(content, description);
        web::append_child(content, user_form);
        web::append_child(content, user_list);
        web::append_child(page.body, content);
        
        let html = web::render_html_page(page);
        return web::html_response(html);
    }
    
    fn create_user_form() -> HtmlElement {
        let form = web::create_form("/api/users", "POST");
        web::add_attribute(form, "id", "user-form");
        
        let name_input = web::create_input("text", "name", "Enter name");
        let email_input = web::create_input("email", "email", "Enter email");
        let submit_button = web::create_button("Create User", "submit");
        
        web::append_child(form, name_input);
        web::append_child(form, email_input);
        web::append_child(form, submit_button);
        
        return form;
    }
    
    fn api_status(request: HttpRequest) -> HttpResponse {
        return web::json_response({
            "status": "online",
            "version": "1.0.0",
            "framework": "dist_agent_lang Phase 2",
            "timestamp": chain::get_block_timestamp(1)
        });
    }
    
    fn create_user(request: HttpRequest) -> HttpResponse {
        // Create API endpoint with validation
        let endpoint = web::create_api_endpoint("/api/users", "POST", "create_user");
        web::add_auth_requirement(endpoint, false);
        web::add_rate_limit(endpoint, 60, 5);
        
        // Validate request
        if (!web::validate_json_request(request, endpoint.input_schema)) {
            return web::error_response(400, "Invalid request format");
        }
        
        // Simulate user creation
        let user_id = crypto::generate_random(16);
        
        return web::json_response({
            "success": true,
            "user_id": user_id,
            "message": "User created successfully"
        });
    }
    
    fn list_users(request: HttpRequest) -> HttpResponse {
        // Simulate user list
        let users = [
            { "id": "1", "name": "Alice", "email": "alice@example.com" },
            { "id": "2", "name": "Bob", "email": "bob@example.com" }
        ];
        
        return web::json_response({
            "users": users,
            "count": users.length
        });
    }
}

// WebSocket Chat Example
@web
service ChatServer {
    ws_server: string;
    
    fn main() {
        // Create WebSocket server
        let ws_server = web::create_websocket_server(3001);
        
        log::info("chat", { "message": "Chat server started on port 3001" });
        
        // Simulate connections
        self.simulate_chat_activity();
    }
    
    fn simulate_chat_activity() {
        // Add some connections
        web::add_websocket_connection(self.ws_server, "conn1", Some("user1"));
        web::add_websocket_connection(self.ws_server, "conn2", Some("user2"));
        
        // Create chat room
        web::join_room(self.ws_server, "conn1", "general");
        web::join_room(self.ws_server, "conn2", "general");
        
        // Broadcast welcome message
        let welcome_msg = "Welcome to the chat! Phase 2 WebSocket support is active.";
        let broadcast_count = web::broadcast_to_room(self.ws_server, "general", welcome_msg);
        
        log::info("chat", { 
            "action": "broadcast",
            "room": "general",
            "recipients": broadcast_count,
            "message": welcome_msg
        });
    }
}

// Template System Example
@web
service TemplateDemo {
    fn main() {
        // Create advanced template
        let template = web::create_template("user_profile", "
            <div class='profile-card'>
                <h2>{{name}}</h2>
                <p>Email: {{email}}</p>
                <p>Joined: {{join_date}}</p>
                <div class='stats'>
                    <span>Posts: {{post_count}}</span>
                    <span>Followers: {{follower_count}}</span>
                </div>
            </div>
        ");
        
        // Add template variables
        web::add_template_variable(template, "name", Value::String("John Doe"));
        web::add_template_variable(template, "email", Value::String("john@example.com"));
        web::add_template_variable(template, "join_date", Value::String("2024-01-15"));
        web::add_template_variable(template, "post_count", Value::Int(42));
        web::add_template_variable(template, "follower_count", Value::Int(1337));
        
        // Render template
        let rendered = web::render_advanced_template(template);
        
        log::info("template", { 
            "template_name": template.name,
            "variables_count": template.variables.length,
            "rendered_length": rendered.length
        });
    }
}

fn main() {
    log::info("main", { "message": "Starting Phase 2 Web Framework Examples" });
    
    // Run all examples
    let api = SimpleAPI::new();
    api.main();
    
    let chat = ChatServer::new();
    chat.main();
    
    let templates = TemplateDemo::new();
    templates.main();
    
    log::info("main", { "message": "All Phase 2 examples completed successfully" });
}