#![allow(uncommon_codepoints)]

pub fn enabled_features() -> Vec<&'static str> {
    let mut features = vec![];
    #[cfg(feature = "vst")]
    features.push("vst");
    #[cfg(feature = "video")]
    features.push("video");
    #[cfg(feature = "web")]
    features.push("web");
    #[cfg(feature = "video-server")]
    features.push("video-server");
    features
}

pub mod geometry;
pub mod graphics;
pub mod random;
pub mod rendering;
pub mod synchronization;
pub mod ui;

#[cfg(feature = "web")]
pub mod wasm;

#[cfg(feature = "vst")]
pub mod vst;

pub use geometry::{
    Angle, Axis, CenterPoint, Containable, CornerPoint, Norm, Point, Region,
};
pub use graphics::{
    Canvas, Color, Color::*, ColorMapping, Fill, FillOperations, Filter,
    FilterType, Layer, LineSegment, Object, ObjectSizes, Shape, Shape::*,
    Transformation,
};
pub use rendering::{
    CSSRenderable, SVGAttributesRenderable, SVGRenderable, fonts,
};
pub use synchronization::audio::MusicalDurationUnit::*;

#[cfg(feature = "video")]
pub mod video;
#[cfg(feature = "video")]
pub use video::{
    Animation, AttachHooks, Scene, Timestamp, Video, animation, context,
};

trait Toggleable {
    fn toggle(&mut self);
}

impl Toggleable for bool {
    fn toggle(&mut self) {
        *self = !*self;
    }
}

#[allow(unused)]
fn main() {}
