use crate::generation::{GenerationError, OpenApiContext, OpenApiLoader};
use async_trait::async_trait;
pub struct CompositeOpenApiLoader {
loaders: Vec<Box<dyn OpenApiLoader>>,
}
impl CompositeOpenApiLoader {
pub fn new() -> Self {
Self {
loaders: vec![
Box::new(super::HttpOpenApiLoader::new()),
Box::new(super::FileOpenApiLoader::new()),
],
}
}
}
impl Default for CompositeOpenApiLoader {
fn default() -> Self {
Self::new()
}
}
#[async_trait]
impl OpenApiLoader for CompositeOpenApiLoader {
async fn load(&self, source: &str) -> Result<OpenApiContext, GenerationError> {
tracing::debug!("CompositeOpenApiLoader: Loading from source: {source}");
if source.starts_with("http://") || source.starts_with("https://") {
tracing::debug!("CompositeOpenApiLoader: Using HTTP loader");
self.loaders[0].load(source).await
} else {
tracing::debug!("CompositeOpenApiLoader: Using file loader");
self.loaders[1].load(source).await
}
}
}