wick-trigger-http 0.1.1

Implementation and loader for Wick WASM components.
Documentation
use wick_config::config::WickRouter;
use wick_packet::{Entity, RuntimeConfig};

use crate::HttpError;

#[derive(Debug, Clone)]
pub(crate) struct RouterMiddleware {
  pub(crate) request: Vec<(Entity, Option<RuntimeConfig>)>,
  pub(crate) response: Vec<(Entity, Option<RuntimeConfig>)>,
}

impl RouterMiddleware {
  pub(crate) fn new(
    request: Vec<(Entity, Option<RuntimeConfig>)>,
    response: Vec<(Entity, Option<RuntimeConfig>)>,
  ) -> Self {
    Self { request, response }
  }
}

pub(super) fn resolve_middleware_components(router: &impl WickRouter) -> Result<RouterMiddleware, HttpError> {
  let mut request_operations = Vec::new();
  let mut response_operations = Vec::new();
  if let Some(middleware) = router.middleware() {
    for operation in middleware.request() {
      let component_id = operation.component_id()?;
      request_operations.push((
        Entity::operation(component_id, operation.name()),
        operation.config().and_then(|v| v.value().cloned()),
      ));
    }
    for operation in middleware.response() {
      let component_id = operation.component_id()?;
      response_operations.push((
        Entity::operation(component_id, operation.name()),
        operation.config().and_then(|v| v.value().cloned()),
      ));
    }
  }
  let middleware = RouterMiddleware::new(request_operations, response_operations);
  Ok(middleware)
}