use anyhow::Result;
use async_trait::async_trait;
use crate::server::digitalocean::client::DoClient;
use crate::server::digitalocean::server::{Droplet, DropletDefaults};
use crate::server::{InnisfreeServer, Provider, ServerSpec};
pub struct DigitalOceanProvider {
client: DoClient,
defaults: DropletDefaults,
}
impl DigitalOceanProvider {
pub fn new(client: DoClient, defaults: DropletDefaults) -> Self {
Self { client, defaults }
}
}
#[async_trait]
impl Provider for DigitalOceanProvider {
async fn create(&self, spec: &ServerSpec) -> Result<Box<dyn InnisfreeServer>> {
let droplet = Droplet::new(self.client.clone(), spec, &self.defaults).await?;
Ok(Box::new(droplet))
}
}