#![forbid(unsafe_code)]
pub use minco_core as core;
#[cfg(feature = "config")]
pub use minco_config as config;
#[cfg(feature = "db")]
pub use minco_db as db;
#[cfg(feature = "contract")]
pub use minco_contract as contract;
#[cfg(feature = "http")]
pub use minco_http as http;
#[cfg(feature = "plan")]
pub use minco_plan as plan;
#[cfg(feature = "release")]
pub use minco_release as release;
#[cfg(feature = "test")]
pub use minco_test as test;
#[cfg(feature = "plugin-health")]
pub use minco_plugin_health as plugin_health;
#[cfg(feature = "plugin-observability")]
pub use minco_plugin_observability as plugin_observability;
#[cfg(feature = "plugin-idempotency")]
pub use minco_plugin_idempotency as plugin_idempotency;
#[cfg(feature = "plugin-sessions")]
pub use minco_plugin_sessions as plugin_sessions;
#[cfg(feature = "plugin-identity")]
pub use minco_plugin_identity as plugin_identity;
#[cfg(feature = "plugin-object-storage")]
pub use minco_plugin_object_storage as plugin_object_storage;
#[cfg(feature = "plugin-events")]
pub use minco_plugin_events as plugin_events;
#[cfg(feature = "plugin-notifications")]
pub use minco_plugin_notifications as plugin_notifications;
#[cfg(feature = "plugin-audit")]
pub use minco_plugin_audit as plugin_audit;
#[cfg(feature = "plugin-feedback")]
pub use minco_plugin_feedback as plugin_feedback;
#[cfg(feature = "plugin-static-site")]
pub use minco_plugin_static_site as plugin_static_site;
#[cfg(feature = "sqlx-postgres")]
pub use minco_sqlx_postgres as sqlx_postgres;
#[cfg(feature = "sqlx-sqlite")]
pub use minco_sqlx_sqlite as sqlx_sqlite;
#[cfg(feature = "aws-lambda")]
pub use minco_aws_lambda as aws_lambda;
#[cfg(feature = "aws-worker")]
pub use minco_aws_worker as aws_worker;
#[cfg(feature = "aws-adapters")]
pub use minco_aws_adapters as aws_adapters;
pub mod prelude {
#[cfg(feature = "config")]
pub use minco_config::{
ConfigLayer, ConfigSourceKind, ConfigurationField, ConfigurationGraph, ConfigurationSchema,
ConfigurationValueKind, Environment, EnvironmentClass, SecretReference,
};
pub use minco_core::{
ApplicationGraph, CapabilityProvision, CapabilityRequirement, ComposedApplication,
ContributionCollection, ContributionRegistrar, ContributionRegistration,
ContributionTypeRegistration, DuplicateServiceRegistration, FrozenContributions,
FrozenServices, GraphBuilder, GraphError, HealthCheckDescriptor, IdleCostClass,
MigrationSet, OperationDescriptor, Plugin, PluginContext, PluginDescriptor, PluginError,
PluginFinalizeContext, PluginId, PluginManager, PluginSelection, RegistrationOwner,
RegistrationProvenance, ResourceIntent, ResourceKind, ServiceCollection, ServiceError,
ServiceRegistrar, ServiceRegistration, WakeSource,
};
#[cfg(feature = "db")]
pub use minco_db::{
DatabaseBackend, MigrationCatalog, MigrationPlan, MigrationRisk, MigrationState,
MigrationStatus, TargetState,
};
#[cfg(feature = "http")]
pub use minco_http::{
ApiFailure, HttpConfigurationError, HttpHeaderPolicy, HttpRuntimeConfig, Principal,
ProblemDetails, RequestMetadata, apply_standard_middleware, problem_response,
};
}
pub fn default_plugin_manager() -> Result<core::PluginManager, core::PluginError> {
let mut manager = core::PluginManager::default();
register_enabled_plugins(&mut manager)?;
Ok(manager)
}
fn register_enabled_plugins(manager: &mut core::PluginManager) -> Result<(), core::PluginError> {
#[cfg(feature = "plugin-health")]
manager.register(plugin_health::HealthPlugin)?;
#[cfg(feature = "plugin-observability")]
manager.register(plugin_observability::ObservabilityPlugin::default())?;
#[cfg(feature = "plugin-idempotency")]
manager.register(plugin_idempotency::IdempotencyPlugin::memory())?;
#[cfg(feature = "plugin-sessions")]
manager.register(plugin_sessions::SessionsPlugin::memory())?;
#[cfg(feature = "plugin-identity")]
manager.register(plugin_identity::IdentityPlugin::default())?;
#[cfg(feature = "plugin-object-storage")]
manager.register(plugin_object_storage::ObjectStoragePlugin::memory())?;
#[cfg(feature = "plugin-events")]
manager.register(plugin_events::EventsPlugin::memory().0)?;
#[cfg(feature = "plugin-notifications")]
manager.register(plugin_notifications::NotificationsPlugin::memory().0)?;
#[cfg(feature = "plugin-audit")]
manager.register(plugin_audit::AuditPlugin::memory().0)?;
#[cfg(feature = "plugin-feedback")]
manager.register(plugin_feedback::FeedbackPlugin::memory())?;
#[cfg(feature = "plugin-static-site")]
manager.register(plugin_static_site::StaticSitePlugin::default())?;
let _ = manager;
Ok(())
}
pub fn compose_defaults(
selection: &core::PluginSelection,
) -> Result<core::ComposedApplication, core::PluginError> {
default_plugin_manager()?.compose(selection)
}
#[cfg(all(test, feature = "default-plugins"))]
mod tests {
use super::*;
#[test]
fn default_features_compose_the_official_plugin_set() {
let application = compose_defaults(&core::PluginSelection::default()).unwrap();
let ids = application
.graph
.plugins
.iter()
.map(|plugin| plugin.id.as_str())
.collect::<Vec<_>>();
assert_eq!(ids, ["health", "idempotency", "observability"]);
}
}