init_mint.rs 892 B

1234567891011121314151617181920212223242526272829303132333435
  1. use std::sync::Arc;
  2. use anyhow::Result;
  3. use axum::Router;
  4. use cdk::mint::Mint;
  5. use tokio::sync::Notify;
  6. use tower_http::cors::CorsLayer;
  7. pub async fn start_mint(addr: &str, port: u16, mint: Mint) -> Result<()> {
  8. let mint_arc = Arc::new(mint);
  9. let v1_service = cdk_axum::create_mint_router(Arc::clone(&mint_arc))
  10. .await
  11. .unwrap();
  12. let mint_service = Router::new()
  13. .merge(v1_service)
  14. .layer(CorsLayer::permissive());
  15. let mint = Arc::clone(&mint_arc);
  16. let shutdown = Arc::new(Notify::new());
  17. tokio::spawn({
  18. let shutdown = Arc::clone(&shutdown);
  19. async move { mint.wait_for_paid_invoices(shutdown).await }
  20. });
  21. tracing::info!("Staring Axum server");
  22. axum::Server::bind(&format!("{}:{}", addr, port).as_str().parse().unwrap())
  23. .serve(mint_service.into_make_service())
  24. .await?;
  25. Ok(())
  26. }