microvms_edges/
adapters.rs1use std::sync::Arc;
5use std::time::Duration;
6
7use futures_util::future::BoxFuture;
8
9use microvms_app::adapters::Adapters;
10use microvms_app::clock::Clock;
11use microvms_app::control::BuildServices;
12use microvms_app::error::Error;
13use microvms_app::region::Region;
14use microvms_app::session::SharedBackend;
15
16use crate::clock::TokioClock;
17use crate::control::services::SignedBuildServices;
18use crate::session::http::ReqwestBackend;
19
20#[derive(Clone, Copy, Debug, Default)]
26pub struct SystemAdapters;
27
28impl Adapters for SystemAdapters {
29 fn http_backend(&self, endpoint: &str, timeout: Duration) -> Result<SharedBackend, Error> {
30 Ok(Arc::new(ReqwestBackend::new(endpoint, timeout)?))
31 }
32
33 fn build_services(
34 &self,
35 region: Region,
36 ) -> BoxFuture<'_, Result<Arc<dyn BuildServices>, Error>> {
37 Box::pin(async move {
38 Ok(Arc::new(SignedBuildServices::new(region).await?) as Arc<dyn BuildServices>)
39 })
40 }
41
42 fn clock(&self) -> Arc<dyn Clock> {
43 Arc::new(TokioClock::new())
44 }
45
46 fn warn(&self, warning: &str) {
52 use std::io::Write as _;
53 let _ = writeln!(std::io::stderr(), "{warning}");
54 }
55}