use crate::database::introspection::{Enum, Schema};
use crate::generators::layout::{File, Module};
use crate::generators::ownership::Ownership;
use crate::generators::rust::model::Model;
use crate::generators::rust::render;
pub(super) fn enums_module(models: &[Model], schema: &Schema) -> Vec<Module> {
let referenced = referenced(models, schema);
if referenced.is_empty() {
return Vec::new();
}
vec![Module {
name: "enums".to_string(),
has_extra_types: true,
files: vec![File {
name: "mod.rs",
ownership: Ownership::Generated,
contents: render::enums::module(&referenced),
}],
}]
}
fn referenced<'a>(models: &[Model], schema: &'a Schema) -> Vec<&'a Enum> {
schema
.enums
.iter()
.filter(|item| {
models
.iter()
.any(|model| model.enums(schema).iter().any(|e| e.name == item.name))
})
.collect()
}
pub(super) fn api_module(models: &[Module], options: super::Options) -> Vec<Module> {
if !options.actix || models.is_empty() {
return Vec::new();
}
vec![Module {
name: "api".to_string(),
has_extra_types: true,
files: vec![File {
name: "mod.rs",
ownership: Ownership::Generated,
contents: crate::generators::rust::actix::parent(models),
}],
}]
}