use acton_service::prelude::*;
#[derive(Serialize)]
struct Message {
version: String,
message: String,
}
async fn hello_v1() -> Json<Message> {
Json(Message {
version: "v1".to_string(),
message: "Hello from API V1!".to_string(),
})
}
async fn hello_v2() -> Json<Message> {
Json(Message {
version: "v2".to_string(),
message: "Hello from API V2 with improvements!".to_string(),
})
}
#[tokio::main]
async fn main() -> Result<()> {
let routes = VersionedApiBuilder::new()
.with_base_path("/api")
.add_version(ApiVersion::V1, |router| {
router.route("/hello", get(hello_v1))
})
.add_version(ApiVersion::V2, |router| {
router.route("/hello", get(hello_v2))
})
.build_routes();
ServiceBuilder::new()
.with_routes(routes) .build() .serve()
.await?;
Ok(())
}