Skip to main content

rill_patchbay/
lib.rs

1//! # Rill Patchbay — Маршрутизация событий и автоматизация
2//!
3//! `rill-patchbay` является эволюцией `rill-automation` из версии 0.2.0,
4//! объединённой с функциональностью маппинга из `rill-control`.
5//!
6//! ## Основные компоненты
7//!
8//! - **Автоматы** — генеративные источники сигналов (LFO, огибающие, секвенсоры)
9//! - **Сервоприводы** (в модуле `control`) — связь автоматов с параметрами узлов
10//! - **Маппинги** — связь внешних событий (MIDI/OSC) с параметрами
11//! - **Сенсоры** — источники событий из внешнего мира
12//! - **Менеджер** — центральный координатор для двухпоточной архитектуры
13//!
14//! ## Архитектура
15//!
16//! ```text
17//! ┌─────────────────────────────────────────────────────────────┐
18//! │                     ПОТОК УПРАВЛЕНИЯ                         │
19//! │                                                              │
20//! │  ┌─────────────────────────────────────────────────────┐   │
21//! │  │               PatchbayManager                         │   │
22//! │  │  ┌────────────┐  ┌────────────┐  ┌────────────┐     │   │
23//! │  │  │  Automata  │  │  Servos    │  │  Mappings  │     │   │
24//! │  │  └────────────┘  └────────────┘  └────────────┘     │   │
25//! │  │                    │                │                │   │
26//! │  │                    ▼                ▼                │   │
27//! │  │              ┌──────────────────────────┐           │   │
28//! │  │              │   RtQueue<ParameterCommand>│         │   │
29//! │  │              └──────────────────────────┘           │   │
30//! │  └─────────────────────────────────────────────────────┘   │
31//! │                              │                               │
32//! │                              │ неблокирующая очередь         │
33//! │                              ▼                               │
34//! │  ┌─────────────────────────────────────────────────────┐   │
35//! │  │                  АУДИОПОТОК                          │   │
36//! │  │              (rill-graph / rill-io)                  │   │
37//! │  └─────────────────────────────────────────────────────┘   │
38//! └─────────────────────────────────────────────────────────────┘
39//! ```
40
41#![warn(missing_docs)]
42#![deny(unsafe_code)]
43#![allow(clippy::too_many_arguments)]
44
45// =============================================================================
46// Внешние зависимости
47// =============================================================================
48
49// Реэкспорты из rill-core
50pub use rill_core::prelude::*;
51pub use rill_core::queues::RtQueue;
52pub use rill_core::{NodeId, ParamValue, ParameterId, PortId};
53
54// =============================================================================
55// Публичные модули
56// =============================================================================
57
58/// Автоматы — генеративные источники управления
59pub mod automaton;
60
61/// Управление и маппинг событий
62pub mod control;
63
64/// Менеджер патчбэя — центральный координатор
65pub mod manager;
66
67/// Сенсоры — источники событий из внешнего мира
68pub mod sensor;
69
70/// Утилиты и вспомогательные функции
71pub mod utils;
72
73/// Реестр именованных функций для сериализации
74pub mod function_registry;
75
76/// Стратегии управления автоматами
77pub mod strategy;
78
79/// PortCombiner — комбинирование автомата и UI на порт
80pub mod port_combiner;
81
82/// Обёртка Automaton в green thread (tokio task)
83pub mod automaton_task;
84
85/// Референсный оркестратор — high-level API над green threads
86pub mod engine;
87
88/// Parameter-lock step sequencer
89pub mod sequencer;
90
91/// DOT patchbay visualization (Graphviz)
92#[cfg(feature = "serde")]
93pub mod dot;
94
95/// Сериализация конфигурации управления
96#[cfg(feature = "serde")]
97pub mod document;
98
99#[cfg(feature = "serde")]
100pub use document::PatchbayDocument;
101
102// =============================================================================
103// Реэкспорты для удобства
104// =============================================================================
105
106// Selective re-exports
107pub use automaton::{
108    EnvelopeAutomaton, EnvelopeStage, EnvelopeType, FunctionAutomaton, LfoAutomaton, LfoWaveform,
109    PlayMode, Range, SequencerAutomaton, StatefulFunctionAutomaton, Step, SyncMode,
110};
111pub use automaton_task::spawn_automaton_task;
112pub use control::{
113    midi_cc, osc_address, AnyServo, Automaton, BoxedServo, ControlEvent, EventPattern, Mapping,
114    NoAction, OscSurface, OscSurfaceEntry, ParameterMapping, PatchbayControl,
115    Servo, Target, Transform,
116};
117pub use engine::PatchbayEngine;
118pub use manager::PatchbayManager;
119pub use port_combiner::{spawn_combiner, PortCombinerHandle};
120pub use strategy::{ConflictStrategy, ControlStrategy, UiCommand};
121
122// Sequencer re-exports
123#[cfg(feature = "serde")]
124pub use sequencer::SequencerDocument;
125pub use sequencer::{
126    ParameterTarget, Pattern, SequenceStep, SequencerHandle, Snapshot, SnapshotSequencer,
127    StepPlayMode,
128};
129
130// =============================================================================
131// Прелюдия для удобного импорта
132// =============================================================================
133
134/// Прелюдия для удобного импорта основных типов
135pub mod prelude {
136    // Основные типы
137    pub use crate::automaton::*;
138    pub use crate::automaton_task::*;
139    pub use crate::control::*;
140    pub use crate::engine::*;
141    pub use crate::manager::*;
142    pub use crate::port_combiner::*;
143    pub use crate::sequencer::*;
144    pub use crate::strategy::*;
145    pub use crate::utils::*;
146
147    // Реэкспорты из rill-core
148    pub use rill_core::prelude::*;
149    pub use rill_core::queues::RtQueue;
150    pub use rill_core::{NodeId, ParameterId, PortId};
151}
152
153// =============================================================================
154// Тесты
155// =============================================================================
156
157#[cfg(test)]
158mod tests {
159    use super::*;
160
161    #[test]
162    fn test_basic_imports() {
163        // Просто проверяем, что всё импортируется
164        let _ = automaton::LfoWaveform::Sine;
165        let _ = control::Transform::Linear;
166        let _ = manager::PatchbayConfig::default();
167    }
168}