//! Example: Query world resources from the database //! //! Run with: cargo run --example query_world_resources use diesel::prelude::*; use diesel::sqlite::SqliteConnection; use std::env; fn main() -> Result<(), Box> { // Connect to database let database_url = env::var("DATABASE_URL").unwrap_or_else(|_| "../cursebreaker.db".to_string()); let mut conn = SqliteConnection::establish(&database_url)?; // Use the schema use cursebreaker_parser::schema::world_resources::dsl::*; // Query all resources #[derive(Queryable, Debug)] struct WorldResource { item_id: i32, pos_x: f32, pos_y: f32, } let results = world_resources .limit(10) .load::(&mut conn)?; println!("Found {} resources (showing first 10):", results.len()); println!(); for resource in results { println!("Resource:"); println!(" Item ID: {}", resource.item_id); println!(" Position: ({:.2}, {:.2})", resource.pos_x, resource.pos_y); println!(); } // Query all resources println!("\n--- All world resources ---"); let all_results = world_resources .load::(&mut conn)?; println!("Found {} total resources", all_results.len()); // Group by item_id use std::collections::HashMap; let mut item_counts: HashMap = HashMap::new(); for resource in &all_results { *item_counts.entry(resource.item_id).or_insert(0) += 1; } println!("\nResource counts by item ID:"); for (i_id, count) in item_counts { println!(" Item {}: {} instances", i_id, count); } Ok(()) }