use async_trait::async_trait;
use gossan_core::Target;
use secfinding::Finding;
#[async_trait]
pub trait CloudProvider: Send + Sync {
fn name(&self) -> &'static str;
fn endpoint(&self, name: &str) -> String;
async fn probe(
&self,
client: &reqwest::Client,
name: &str,
target: &Target,
) -> anyhow::Result<Vec<Finding>>;
}
#[cfg(test)]
mod tests {
use super::CloudProvider;
use crate::{
azure::AzureProvider, do_spaces::DoSpacesProvider, gcs::GcsProvider, s3::S3Provider,
};
#[test]
fn provider_names_are_stable() {
assert_eq!(S3Provider.name(), "s3");
assert_eq!(GcsProvider.name(), "gcs");
assert_eq!(AzureProvider.name(), "azure");
assert_eq!(DoSpacesProvider.name(), "spaces");
}
}