tfdoc 0.1.5

Generate Terraform module documentation
Documentation
use crate::types::{BlockType, DocItem};

pub fn render(result: &[DocItem]) {
    for item in result.iter().filter(|i| i.category == BlockType::Comment) {
        print_title_block(&item.description);
    }
    print_resources(result, "Resources", BlockType::Resource);
    print_interface(result, "Inputs", BlockType::Variable);
    print_interface(result, "Outputs", BlockType::Output);
}

fn print_title_block(description: &[String]) {
    let title = &description.first().unwrap()["Title: ".len()..];
    println!("# {}\n", title);
    for line in description.iter().skip(1) {
        println!("{}", line);
    }
}

fn print_resources(result: &[DocItem], name: &str, variant: BlockType) {
    for (index, item) in result
        .iter()
        .filter(|i| i.category == variant && i.description.len() > 0)
        .enumerate()
    {
        if index == 0 {
            println!("\n## {}\n", name);
        }
        if item.description.len() > 0 || variant != BlockType::Resource {
            println!("* `{}`: {}", item.name, item.description.join(" "));
        }
    }
}

fn print_interface(result: &[DocItem], name: &str, variant: BlockType) {
    for (index, item) in result.iter().filter(|i| i.category == variant).enumerate() {
        if index == 0 {
            println!("\n## {}\n", name);
        }
        if item.description.len() > 0 {
            println!("* `{}`: {}", item.name, item.description.join(" "));
        } else {
            println!("* `{}`", item.name);
        }
    }
}