truce-plugin 0.49.15

User-facing PluginLogic traits for truce - the plugin author's entry point.
Documentation
# truce-plugin

User-facing plugin traits for the truce audio plugin framework.

## Overview

`truce-plugin` is the home of `PluginLogic` - the one trait plugin
authors implement, covering both audio-thread DSP and main-thread
GUI. The crate is intentionally light: it depends on `truce-core`,
`truce-gui-types` (data + render-trait surface only), and
`truce-params`. No tiny-skia, no baseview, no fonts. Plugin
authors using a custom editor (egui, iced, slint, raw window
handle) end up with this crate in their dep tree but never pull in
the built-in editor's heavy stack.

## Three traits, one source of truth

| Trait | Sample type | Where it lives |
|---|---|---|
| `PluginLogic` | `f32` | What `f32` plugins implement |
| `PluginLogic64` | `f64` | What `f64` plugins implement |
| `PluginLogicCore<S>` | generic | What format wrappers consume |

Both leaf traits are stamped from one `plugin_logic_leaf_trait!`
`macro_rules!` definition so the method shapes stay in lock-step.
Each leaf gets a blanket impl that forwards every method to
`PluginLogicCore<S>` with the matching `S`. Wrappers
(`StaticShell`, `HotShell`, the format crates) bind on
`PluginLogicCore<S>`; the leaf-vs-leaf distinction is purely
user-facing.

## What this buys

The `truce::prelude64` re-export aliases `PluginLogic64` as
`PluginLogic` in the user's scope, so the same impl header reads
the same regardless of which precision the prelude chose:

```rust
use truce::prelude::*;          // or prelude64::*
impl PluginLogic for MyPlugin {
    fn process(&mut self, buffer: &mut AudioBuffer, ...) -> ProcessStatus { ... }
}
```

Zero `<Sample>` mentions in user code.

Part of [truce](https://github.com/truce-audio/truce). [Docs](https://truce.audio/docs/).