Module create_pipeline

Module create_pipeline 

Source
Expand description

§Create Pipeline Use Case

This module implements the use case for creating new processing pipelines. It handles pipeline configuration, stage parsing, name validation, and persistence to the repository.

§Overview

The Create Pipeline use case provides:

  • Pipeline Configuration: Define processing stages and algorithms
  • Name Validation: Ensure pipeline names follow conventions
  • Stage Parsing: Parse comma-separated stage specifications
  • Algorithm Selection: Support multiple compression/encryption algorithms
  • Persistence: Save pipeline configuration to repository
  • Custom Stages: Support for user-defined transformation stages

§Architecture

Following Clean Architecture and Domain-Driven Design principles:

  • Use Case Layer: Orchestrates pipeline creation workflow
  • Repository Pattern: Delegates persistence to repository interface
  • Dependency Inversion: Depends on abstractions, not implementations
  • Single Responsibility: Focused solely on pipeline creation
  • Domain Validation: Enforces business rules for pipeline configuration

§Business Rules

  • Pipeline names must be at least 4 characters
  • Names are normalized to kebab-case
  • Reserved names (help, version, list, etc.) are rejected
  • Stages are specified as comma-separated values
  • Supported compression: brotli, gzip, zstd, lz4
  • Supported encryption: aes256gcm, aes128gcm, chacha20poly1305
  • Supported transforms: base64, pii_masking, tee, debug, passthrough
  • Custom stages default to Transform type
  • Debug stages auto-generate unique ULID labels

§Usage Examples

use adaptive_pipeline::application::use_cases::CreatePipelineUseCase;

let use_case = CreatePipelineUseCase::new(pipeline_repository);

// Simple compression pipeline
use_case.execute(
    "compress-files".to_string(),
    "brotli".to_string(),
    None,
).await?;

// Multi-stage pipeline
use_case.execute(
    "secure-backup".to_string(),
    "brotli,aes256gcm,checksum".to_string(),
    None,
).await?;

Structs§

CreatePipelineUseCase
Use case for creating new processing pipelines.