puerto 0.19.1

Puerto — Rust full-stack DDD framework CLI. Scaffolds Clean Architecture projects with auto-wired DI, SQLx support, and zero manual wiring. Formerly puerto-framework.
use async_trait::async_trait;
{% if actor %}use puerto_core::auth::Principal;
{% endif %}{% for imp in extra_imports %}use {{ imp }};
{% endfor %}
use crate::domain::{{ snake }}::{errors::{{ pascal }}Error, model::{{ pascal }}};

#[derive(Debug, Clone)]
pub struct Create{{ pascal }}Params {
{% if actor %}    /// Who asks (ADR-0021). A rule that depends on the data ("only the owner edits") decides on
    /// it here and answers `Forbidden`.
    pub actor: Principal,
{% endif %}{% for f in params_fields %}    pub {{ f.name }}: {{ f.field_type }},
{% endfor %}}

#[async_trait]
pub trait Create{{ pascal }}UseCaseTrait: Send + Sync {
    async fn execute(&self, params: Create{{ pascal }}Params) -> Result<{{ pascal }}, {{ pascal }}Error>;
}

#[cfg(any(test, feature = "test-utils"))]
pub mod mocks {
    use mockall::mock;

    use super::*;

    mock! {
        pub Create{{ pascal }}UseCase {}

        #[async_trait]
        impl Create{{ pascal }}UseCaseTrait for Create{{ pascal }}UseCase {
            async fn execute(&self, params: Create{{ pascal }}Params) -> Result<{{ pascal }}, {{ pascal }}Error>;
        }
    }
}