#pragma once #include #include #include #include namespace rack { /** Loads and manages Rack plugins */ namespace plugin { PRIVATE void init(); PRIVATE void destroy(); /** Finds a loaded Plugin by slug. */ Plugin* getPlugin(const std::string& pluginSlug); /** Finds a loaded Plugin by slug, or a fallback plugin if exists. */ Plugin* getPluginFallback(const std::string& pluginSlug); /** Finds a loaded Model by plugin and model slug. */ Model* getModel(const std::string& pluginSlug, const std::string& modelSlug); /** Finds a loaded Model by plugin and model slug, or a fallback model if exists. */ Model* getModelFallback(const std::string& pluginSlug, const std::string& modelSlug); /** Creates a Model from a JSON module object. Throws an Exception if the model is not found. */ Model* modelFromJson(json_t* moduleJ); /** Checks that the slug contains only alphanumeric characters, "-", and "_" */ bool isSlugValid(const std::string& slug); /** Returns a string containing only the valid slug characters. */ std::string normalizeSlug(const std::string& slug); /** Path to plugins installation dir */ extern std::string pluginsPath; extern std::vector plugins; } // namespace plugin } // namespace rack