puerto 0.13.0

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 chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
use sqlx::FromRow;
use uuid::Uuid;{% for import in imports %}
use {{ import }};{% endfor %}

use business::domain::{{ snake }}::{
    errors::{{ pascal }}Error,
    model::{{ "{" }}{{ pascal }}, {{ pascal }}Id},
};

#[derive(Debug, Clone, Serialize, Deserialize, FromRow)]
pub struct {{ pascal }}Db {
    pub id: Uuid,
    pub created_at: DateTime<Utc>,
    pub updated_at: DateTime<Utc>,
    pub deleted: bool,
    pub deleted_at: Option<DateTime<Utc>>,
{% for f in fields %}    pub {{ f.name }}: {% if f.is_map %}Json<{{ f.field_type }}>{% else %}{{ f.field_type }}{% endif %},
{% endfor %}}

impl TryFrom<{{ pascal }}Db> for {{ pascal }} {
    type Error = {{ pascal }}Error;

    fn try_from(row: {{ pascal }}Db) -> Result<Self, Self::Error> {
        Ok(Self::from_repository({{ pascal }} {
            id: {{ pascal }}Id::from_uuid(row.id),
            created_at: row.created_at,
            updated_at: row.updated_at,
            deleted: row.deleted,
            deleted_at: row.deleted_at,
{% for f in fields %}            {{ f.name }}: {{ f.from_row }},
{% endfor %}        }))
    }
}

impl From<&{{ pascal }}> for {{ pascal }}Db {
    fn from(entity: &{{ pascal }}) -> Self {
        Self {
            id: entity.id.value(),
            created_at: entity.created_at,
            updated_at: entity.updated_at,
            deleted: entity.deleted,
            deleted_at: entity.deleted_at,
{% for f in fields %}            {{ f.name }}: {% if f.is_map %}Json({{ f.accessor }}){% else %}{{ f.accessor }}{% endif %},
{% endfor %}        }
    }
}