Add plugin architecture for extensible DICOMweb backends#40
Open
luckfamousa wants to merge 4 commits intomainfrom
Open
Add plugin architecture for extensible DICOMweb backends#40luckfamousa wants to merge 4 commits intomainfrom
luckfamousa wants to merge 4 commits intomainfrom
Conversation
This adds a plugin system that allows external implementations of QIDO-RS, WADO-RS, and STOW-RS services via dynamically loaded shared libraries. Key changes: - New `dicom-rst-plugin-api` crate defining FFI-safe plugin traits - Plugin loading infrastructure in `src/backend/plugin/` - Service adapters bridging FFI types to internal service traits - Plugin configuration support in config.yaml - Example plugin demonstrating the plugin interface - CLAUDE.md documentation for plugin development The plugin system uses `abi_stable` for C ABI compatibility across Rust compiler versions, and `async-ffi` for async operations across the FFI boundary. Plugins are configured per-AET and take priority over built-in backends when a matching AET is found. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
The #[sabi_trait] macro generates impl blocks inside const items which triggers this warning. This is a known issue with the macro and cannot be fixed in user code. Suppressing it also fixes the SARIF validation error caused by duplicate relatedLocations in the clippy output. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
The clippy-sarif tool can produce SARIF files with duplicate entries in relatedLocations arrays, which causes the CodeQL upload action to fail. This adds a jq step to deduplicate the arrays before uploading. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
There was a problem hiding this comment.
clippy found more than 20 potential problems in the proposed changes. Check the Files changed tab for more details.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
This PR introduces a plugin system that allows external implementations of DICOMweb services (QIDO-RS, WADO-RS, STOW-RS) via dynamically loaded shared libraries.
Key Changes
dicom-rst-plugin-apicrate: Defines FFI-safe plugin traits usingabi_stablefor C ABI compatibility across Rust compiler versionsPluginRegistryinsrc/backend/plugin/manages loading and AET bindingsPluginQidoAdapter,PluginWadoAdapter,PluginStowAdapter)config.yamlwith path, AETs, and custom settingsCLAUDE.mdupdated with plugin development guidePlugin Traits
QidoPluginsearch(),health_check()WadoPluginretrieve(),render(),metadata(),health_check()StowPluginstore(),health_check()Configuration Example
Feature Flag
The plugin system is behind the
pluginsfeature flag:Test plan
cargo build --features pluginscargo build -p dicom-rst-example-plugin --release🤖 Generated with Claude Code