use std::sync::Arc;
use crate::plugin::Plugin;
use truce_params::{ParamInfo, Params};
pub trait PluginExport: Plugin + Sized {
type Params: Params;
fn create() -> Self;
fn params(&self) -> &Self::Params;
fn params_arc(&self) -> Arc<Self::Params>;
#[must_use]
fn param_infos_static() -> Vec<ParamInfo> {
let from_params = <Self::Params as Params>::param_infos_static();
if from_params.is_empty() {
Self::create().params().param_infos()
} else {
from_params
}
}
#[must_use]
fn has_editor_static() -> bool {
Self::create().editor().is_some()
}
}