#![forbid(unsafe_code)]
pub use minco_core as core;
#[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 = "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;
pub mod prelude {
pub use minco_core::{
ApplicationGraph, CapabilityProvision, CapabilityRequirement, ComposedApplication,
FrozenServices, GraphBuilder, GraphError, HealthCheckDescriptor, IdleCostClass,
MigrationSet, OperationDescriptor, Plugin, PluginContext, PluginDescriptor, PluginError,
PluginId, PluginManager, PluginSelection, ResourceIntent, ResourceKind, ServiceCollection,
ServiceError, WakeSource,
};
#[cfg(feature = "http")]
pub use minco_http::{
ApiFailure, HttpRuntimeConfig, Principal, ProblemDetails, RequestMetadata,
apply_standard_middleware, problem_response,
};
}
pub fn default_plugin_manager() -> Result<core::PluginManager, core::PluginError> {
let manager = core::PluginManager::default();
#[cfg(any(
feature = "plugin-health",
feature = "plugin-observability",
feature = "plugin-idempotency"
))]
let mut manager = manager;
#[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)?;
Ok(manager)
}
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"]);
}
}