Skip to main content

omena_query_transform_runner/plugins/
mod.rs

1mod 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}