oxigdal_server/lib.rs
1//! OxiGDAL Tile Server
2//!
3//! WMS/WMTS tile server for serving geospatial raster data over HTTP.
4//!
5//! # Features
6//!
7//! - **WMS 1.3.0**: Full Web Map Service support with GetCapabilities, GetMap, GetFeatureInfo
8//! - **WMTS 1.0.0**: Web Map Tile Service with multiple tile matrix sets
9//! - **XYZ Tiles**: Simple tile serving compatible with Leaflet, MapLibre, etc.
10//! - **Multi-layer**: Serve multiple datasets simultaneously
11//! - **Caching**: Multi-level caching (memory + optional disk) with LRU eviction
12//! - **Performance**: Async/await with Tokio for high throughput
13//! - **Pure Rust**: No C/C++ dependencies, built on OxiGDAL
14//!
15//! # Example Usage
16//!
17//! ```no_run
18//! use oxigdal_server::{Config, TileServer};
19//!
20//! #[tokio::main]
21//! async fn main() -> Result<(), Box<dyn std::error::Error>> {
22//! // Load configuration
23//! let config = Config::from_file("config.toml")?;
24//!
25//! // Create and start server
26//! let server = TileServer::new(config)?;
27//! server.serve().await?;
28//!
29//! Ok(())
30//! }
31//! ```
32//!
33//! # Configuration
34//!
35//! Create a `config.toml` file:
36//!
37//! ```toml
38//! [server]
39//! host = "0.0.0.0"
40//! port = 8080
41//! workers = 4
42//!
43//! [cache]
44//! memory_size_mb = 256
45//! ttl_seconds = 3600
46//!
47//! [[layers]]
48//! name = "landsat"
49//! path = "/data/landsat.tif"
50//! formats = ["png", "jpeg"]
51//! tile_size = 256
52//! ```
53//!
54//! # Endpoints
55//!
56//! ## WMS
57//!
58//! - GetCapabilities: `GET /wms?SERVICE=WMS&REQUEST=GetCapabilities`
59//! - GetMap: `GET /wms?SERVICE=WMS&REQUEST=GetMap&LAYERS=...&BBOX=...`
60//!
61//! ## WMTS
62//!
63//! - GetCapabilities: `GET /wmts?SERVICE=WMTS&REQUEST=GetCapabilities`
64//! - GetTile (RESTful): `GET /wmts/1.0.0/{layer}/{tileMatrixSet}/{z}/{x}/{y}.png`
65//!
66//! ## XYZ Tiles
67//!
68//! - Tiles: `GET /tiles/{layer}/{z}/{x}/{y}.png`
69//! - TileJSON: `GET /tiles/{layer}/tilejson`
70
71#![warn(missing_docs)]
72#![deny(clippy::unwrap_used)]
73#![deny(clippy::panic)]
74
75pub mod cache;
76pub mod config;
77pub mod dataset_registry;
78pub mod handlers;
79pub mod server;
80
81// Re-export main types
82pub use cache::{CacheError, CacheKey, CacheStats, TileCache, TileCacheConfig};
83pub use config::{
84 CacheConfig, Config, ConfigError, ImageFormat, LayerConfig, MetadataConfig, ServerConfig,
85 StyleConfig,
86};
87pub use dataset_registry::{DatasetMetadata, DatasetRegistry, LayerInfo, RegistryError};
88pub use server::{ServerError, TileServer};