soma_provider_adapters/
manifest_file.rs1use std::path::PathBuf;
14
15use soma_provider_core::{Provider, ProviderCatalog, ProviderKind};
16
17#[allow(unused_variables)]
27pub fn build_provider(
28 path: PathBuf,
29 catalog: ProviderCatalog,
30 env_prefix: &str,
31) -> Option<std::sync::Arc<dyn Provider>> {
32 match catalog.provider.kind {
33 #[cfg(feature = "openapi")]
34 ProviderKind::Openapi => Some(crate::openapi::OpenApiProvider::arc(catalog)),
35 #[cfg(not(feature = "openapi"))]
36 ProviderKind::Openapi => None,
37
38 #[cfg(feature = "gateway")]
39 ProviderKind::Mcp => Some(crate::gateway::UpstreamMcpProvider::arc(catalog)),
40 #[cfg(not(feature = "gateway"))]
41 ProviderKind::Mcp => None,
42
43 #[cfg(feature = "ai-sdk")]
44 ProviderKind::AiSdk => Some(crate::ai_sdk::AiSdkProvider::arc(path, catalog, env_prefix)),
45 #[cfg(not(feature = "ai-sdk"))]
46 ProviderKind::AiSdk => None,
47
48 #[cfg(feature = "wasm")]
49 ProviderKind::Wasm => Some(crate::wasm::WasmProvider::arc(path, catalog)),
50 #[cfg(not(feature = "wasm"))]
51 ProviderKind::Wasm => None,
52
53 #[cfg(feature = "python")]
54 ProviderKind::Python | ProviderKind::Langchain | ProviderKind::Llamaindex => Some(
55 crate::python::PythonProvider::arc(path, catalog, env_prefix),
56 ),
57 #[cfg(not(feature = "python"))]
58 ProviderKind::Python | ProviderKind::Langchain | ProviderKind::Llamaindex => None,
59
60 #[cfg(feature = "static-echo")]
61 ProviderKind::StaticRust => {
62 Some(crate::static_rust::StaticEchoProvider::arc(path, catalog))
63 }
64 #[cfg(not(feature = "static-echo"))]
65 ProviderKind::StaticRust => None,
66 }
67}
68
69#[cfg(test)]
70#[path = "manifest_file_tests.rs"]
71mod tests;