omena_query_transform_runner/plugins/
mod.rs1mod bundle_host;
2mod semantic_observation;
3
4use crate::plugin_api::{
5 OmenaPlugin, PluginAnalysisV0, PluginOutcomeV0, PluginOutcomeValidationErrorV0,
6 PluginTransformContextV0, PluginTransformIrV0, PluginWorkspaceSnapshotV0,
7 execute_validated_plugin,
8};
9use bundle_host::VITE_BUNDLE_HOST_PLUGIN;
10use semantic_observation::SEMANTIC_OBSERVATION_PLUGIN;
11
12static BUILT_IN_OMENA_PLUGINS: [&'static dyn OmenaPlugin; 2] =
13 [&SEMANTIC_OBSERVATION_PLUGIN, &VITE_BUNDLE_HOST_PLUGIN];
14
15pub fn built_in_omena_plugins() -> &'static [&'static dyn OmenaPlugin] {
16 &BUILT_IN_OMENA_PLUGINS
17}
18
19pub fn execute_built_in_omena_plugin(
20 plugin_id: &str,
21 snapshot: &PluginWorkspaceSnapshotV0<'_>,
22 ir: &mut PluginTransformIrV0<'_>,
23 context: PluginTransformContextV0,
24) -> Option<Result<(PluginAnalysisV0, PluginOutcomeV0), PluginOutcomeValidationErrorV0>> {
25 let plugin = BUILT_IN_OMENA_PLUGINS
26 .iter()
27 .find(|plugin| plugin.metadata().plugin_id == plugin_id)?;
28 if context.snapshot_id != snapshot.snapshot_id() {
29 return Some(Err(
30 PluginOutcomeValidationErrorV0::SnapshotIdentityMismatch,
31 ));
32 }
33 Some(execute_validated_plugin(*plugin, snapshot, ir, context))
34}