1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
//! # beamer-vst3
//!
//! VST3 implementation layer for the Beamer framework.
//!
//! This crate provides the VST3 interface implementations that wrap `beamer-core` traits
//! into VST3 COM interfaces. It handles all the VST3-specific details like:
//!
//! - Plugin factory (IPluginFactory, IPluginFactory2, IPluginFactory3)
//! - Generic processor wrapper ([`Vst3Processor`])
//! - Platform entry points
//!
//! ## Architecture
//!
//! Uses the **combined component** pattern where processor and controller are
//! implemented by the same object. This is the modern, recommended approach
//! used by most audio plugin frameworks.
//!
//! ```text
//! User Plugin (implements beamer_core::Descriptor)
//! ↓
//! Vst3Processor<P> (generic VST3 wrapper)
//! ↓
//! VST3 COM interfaces (IComponent, IAudioProcessor, IEditController)
//! ```
//!
//! ## Usage
//!
//! 1. Implement `beamer_core::Descriptor` for your plugin type
//! 2. Use `export_vst3!` macro to generate entry points
//!
//! ```rust,ignore
//! use beamer_core::{Descriptor, Processor, Buffer, Config};
//! use beamer_vst3::{export_vst3, Vst3Processor, Vst3Config, vst3};
//!
//! // Define your plugin
//! struct MyGain { parameters: MyParameters }
//!
//! // Shared plugin config
//! static CONFIG: Config = Config::new("My Plugin")
//! .with_vendor("My Company");
//!
//! // VST3-specific config (generate UUID with: cargo xtask generate-uuid)
//! static VST3_CONFIG: Vst3Config = Vst3Config::new("12345678-9ABC-DEF0-ABCD-EF1234567890")
//! .with_categories("Fx|Dynamics");
//!
//! export_vst3!(CONFIG, VST3_CONFIG, MyGain);
//! ```
// Re-exports
pub use Factory;
pub use Vst3Processor;
pub use Vst3Config;
// Re-export shared types from beamer-core
pub use Config;
pub use ;
// Re-export vst3 crate for use in macros and UIDs
pub use vst3;