windjammer 0.48.0

A simple language inspired by Go, Ruby, and Elixir that transpiles to Rust - 80% of Rust's power with 20% of the complexity
Documentation
// Windjammer Network API Demo
// Demonstrates std::net for HTTP requests
// Works on both native and WASM!

use std::net::*

@export
async fn main() {
    println!("🌐 Windjammer Network API Demo")
    println!("================================")
    println!("")

    // Example 1: Simple GET request
    println!("Example 1: GET Request")
    println!("----------------------")
    
    match get("https://api.github.com/zen", None).await {
        Ok(response) => {
            println!("Status: {}", response.status)
            println!("Body: {}", response.body)
        },
        Err(e) => {
            println!("Error: {}", e)
        }
    }
    println!("")

    // Example 2: GET with headers
    println!("Example 2: GET with Headers")
    println!("---------------------------")
    
    let mut headers = Map::new()
    headers.insert("User-Agent", "Windjammer/1.0")
    headers.insert("Accept", "application/json")
    
    match get("https://api.github.com/users/github", Some(headers)).await {
        Ok(response) => {
            println!("Status: {}", response.status)
            println!("Content-Type: {}", response.headers.get("content-type").unwrap_or("unknown"))
            println!("Body (first 200 chars): {}...", response.body.chars().take(200).collect::<string>())
        },
        Err(e) => {
            println!("Error: {}", e)
        }
    }
    println!("")

    // Example 3: POST request with JSON
    println!("Example 3: POST Request")
    println!("-----------------------")
    
    let mut post_headers = Map::new()
    post_headers.insert("Content-Type", "application/json")
    
    let json_body = r#"{"title": "Test Post", "body": "This is a test", "userId": 1}"#    
    match post("https://jsonplaceholder.typicode.com/posts", Some(post_headers), json_body).await {
        Ok(response) => {
            println!("Status: {}", response.status)
            println!("Response: {}", response.body)
        },
        Err(e) => {
            println!("Error: {}", e)
        }
    }
    println!("")

    // Example 4: PUT request
    println!("Example 4: PUT Request")
    println!("----------------------")
    
    let mut put_headers = Map::new()
    put_headers.insert("Content-Type", "application/json")
    
    let update_body = r#"{"title": "Updated Title", "body": "Updated content", "userId": 1}"#    
    match put("https://jsonplaceholder.typicode.com/posts/1", Some(put_headers), update_body).await {
        Ok(response) => {
            println!("Status: {}", response.status)
            println!("Response: {}", response.body)
        },
        Err(e) => {
            println!("Error: {}", e)
        }
    }
    println!("")

    // Example 5: DELETE request
    println!("Example 5: DELETE Request")
    println!("-------------------------")
    
    match delete("https://jsonplaceholder.typicode.com/posts/1", None).await {
        Ok(response) => {
            println!("Status: {}", response.status)
            println!("Deleted successfully!")
        },
        Err(e) => {
            println!("Error: {}", e)
        }
    }
    println!("")

    // Example 6: Custom request method
    println!("Example 6: Custom Request")
    println!("-------------------------")
    
    let mut custom_headers = Map::new()
    custom_headers.insert("Accept", "application/json")
    
    match send_request(
        "GET",
        "https://httpbin.org/get",
        Some(custom_headers),
        None
    ).await {
        Ok(response) => {
            println!("Status: {}", response.status)
            println!("Body (first 300 chars): {}...", response.body.chars().take(300).collect::<string>())
        },
        Err(e) => {
            println!("Error: {}", e)
        }
    }
    println!("")

    // Example 7: Error handling
    println!("Example 7: Error Handling")
    println!("-------------------------")
    
    match get("https://this-domain-does-not-exist-12345.com", None).await {
        Ok(response) => {
            println!("Unexpected success: {}", response.status)
        },
        Err(e) => {
            println!("Expected error caught: {}", e)
        }
    }
    println!("")

    println!("✅ All examples completed!")
    println!("")
    println!("Platform Notes:")
    println!("  • Native:  Uses reqwest for HTTP requests")
    println!("  • WASM:    Uses browser Fetch API")
    println!("  • Same code works everywhere! 🎉")
    println!("")
    println!("Next Steps:")
    println!("  • Try WebSocket support (coming soon!)")
    println!("  • Build a REST API client")
    println!("  • Create a web scraper")
}