#provider #container #cqrs #query #ioc #command #context

kti_cqrs_provider_rs

CQRS provider with ioc container

3 releases (breaking)

0.2.0 Mar 17, 2024
0.1.0 Mar 3, 2024
0.0.1 Nov 5, 2023

#14 in #cqrs

Download history 14/week @ 2023-12-29 4/week @ 2024-01-05 23/week @ 2024-01-12 2/week @ 2024-01-19 12/week @ 2024-01-26 10/week @ 2024-02-02 13/week @ 2024-02-16 73/week @ 2024-02-23 157/week @ 2024-03-01 59/week @ 2024-03-08 169/week @ 2024-03-15 49/week @ 2024-03-22 54/week @ 2024-03-29 20/week @ 2024-04-05 4/week @ 2024-04-12

132 downloads per month

MIT/Apache

7KB
127 lines

CQRS provider with ioc container

Wrapped kti_cqrs_rs via provider for more complex usage

Simple example (existed in repo)

pub struct UserController {
  context: Arc<ContainerContext>,
}

impl UserController {
  pub fn new(context: Arc<ContainerContext>) -> Self {
    Self { context }
  }

  pub fn token() -> &'static str {
    "USER_CONTROLLER"
  }

  pub async fn get_user_by_name(&self, name: &str) -> Result<Option<User>, Box<dyn Error>> {
    let bus = self.get_cqrs_bus().await;

    let query = GetUserByNameQuery::new(name);

    bus.query(Box::new(query)).await
  }

  pub async fn create_user(&self, name: &str, email: &str) -> Result<(), Box<dyn Error>> {
    let bus = self.get_cqrs_bus().await;

    let command = CreateUserCommand::new(name, email);

    bus.command(Box::new(command)).await;

    Ok(())
  }

  pub async fn update_user(&self, name: &str, email: &str) -> Result<(), Box<dyn Error>> {
    let bus = self.get_cqrs_bus().await;

    let command = UpdateUserCommand::new(name, email);

    bus.command(Box::new(command)).await;

    Ok(())
  }

  async fn get_cqrs_bus(&self) -> cqrs_provider::Provider {
    self
      .context
      .resolve_provider::<cqrs_provider::Provider>(cqrs_provider::Provider::token())
      .await
  }
}

Dependencies

~2.7–9.5MB
~77K SLoC