use super::feature::Feature;
use crate::generator::HEADER;
pub fn render_mod(feature: &Feature<'_>) -> String {
format!(
"{HEADER}
//! The `{table}` API feature, under `{url}`. Every file but `service.rs` is
//! regenerated by `rok-sqlc g`; `service.rs` is yours.
/// Request and response bodies.
pub mod dto;
/// The handlers: parse, call one service method, answer.
pub mod handlers;
/// The rows and typed ids, from the data layer.
pub mod model;
/// The data layer's functions for `{table}`.
pub mod repo;
/// The URL to handler mapping.
pub mod routes;
/// `{service}`: yours to change.
pub mod service;
/// `{service_api}`: one method per endpoint, each with a default.
pub mod service_api;
pub use routes::routes;
pub use service::{service};
pub use service_api::{service_api};
",
table = feature.table.display_name(),
url = feature.url,
service = feature.service(),
service_api = feature.service_api(),
)
}
pub fn render_model(feature: &Feature<'_>) -> String {
format!(
"{HEADER}\n//! The `{}` rows, inputs and typed ids, from the data layer.\n\npub use {}::models::*;\n",
feature.table.display_name(),
feature.db_module()
)
}
pub fn render_repo(feature: &Feature<'_>) -> String {
let module = feature.db_module();
let mut output = format!(
"{HEADER}\n//! The data layer's functions for `{}`: reads, writes, and the list's.\n\n",
feature.table.display_name()
);
if super::has_listing(feature) {
output.push_str(&format!("pub use {module}::listing::*;\n"));
}
output.push_str(&format!("pub use {module}::read::*;\n"));
if !feature.relations.is_empty() {
output.push_str(&format!("pub use {module}::relationships::*;\n"));
}
output.push_str(&format!("pub use {module}::write::*;\n"));
output
}