tree-type 0.4.5

Rust macros for creating type-safe filesystem tree structures
Documentation
#![allow(deprecated)]
#![allow(dead_code)]

use tree_type::tree_type;

#[cfg(not(feature = "codegen-v2"))]
tree_type! {
    ProjectManagementRoot {
        tasks/ as ProjectTasksTemplate {
            #[required]
            readme("README.md") as TasksReadMe,
            #[required]
            workflow("workflow.md") as TasksWorkflowTemplate,
            #[required]
            lessons("lessons-learned.md") as TasksLessonsLearned,
        },
        #[required]
        projects/ as ProjectsDir {
            [project: String]/ as ProjectDir {
                #[default(default_project_management_config)]
                config(".project-management.toml") as ProjectConfigFile,
                #[required]
                tasks/ as TasksDir {
                    #[symlink(/tasks/readme)]
                    readme("README.md"),
                    #[symlink(/tasks/workflow)]
                    workflow("workflow.md"),
                    #[symlink(/tasks/lessons)]
                    lessons("lessons-learned.md"),
                    #[required]
                    #[default(default_task_counter)]
                    counter(".task-counter") as TaskCounter,
                    template("template.md") as TaskTemplate,
                    #[required]
                    active/ as ActiveTasksDir {
                        [id: String] as ActiveTaskFile,
                    },
                    #[required]
                    backlog/ as BacklogDir {
                        #[required]
                        p1/("p1-critical"),
                        #[required]
                        p2/("p2-high"),
                        #[required]
                        p3/("p3-medium"),
                        #[required]
                        p4/("p4-low"),
                        #[required]
                        p5/("p5-future"),
                        #[required]
                        p6/("p6-enhancement"),
                        #[required]
                        p7/("p7-optional"),
                        #[required]
                        p8/("p8-experimental"),
                        #[required]
                        p9/("p9-research")
                    },
                    #[required]
                    completed/ as CompletedTasksDir ,
                    obsolete/ as ObsoleteTasksDir,
                },
                implementation/ as ImplementationDir,
            }
        }
    }
}

#[cfg(feature = "codegen-v2")]
tree_type! {
    ProjectManagementRoot {
        tasks/ as ProjectTasksTemplate {
            #[required]
            readme("README.md") as TasksReadMe,
            #[required]
            workflow("workflow.md") as TasksWorkflowTemplate,
            #[required]
            lessons("lessons-learned.md") as TasksLessonsLearned,
        },
        #[required]
        projects/ as ProjectsDir {
            [project: String]/ as ProjectDir {
                #[default(default_project_management_config)]
                config(".project-management.toml") as ProjectConfigFile,
                #[required]
                tasks/ as TasksDir {
                    #[symlink(/tasks/readme)]
                    readme("README.md"),
                    #[symlink(/tasks/workflow)]
                    workflow("workflow.md"),
                    #[symlink(/tasks/lessons)]
                    lessons("lessons-learned.md"),
                    #[required]
                    #[default(default_task_counter)]
                    counter(".task-counter") as TaskCounter,
                    template("template.md") as TaskTemplate,
                    #[required]
                    active/ as ActiveTasksDir {
                        [id: String] as ActiveTaskFile,
                    },
                    #[required]
                    backlog/ as BacklogDir {
                        #[required]
                        p1/("p1-critical"),
                        #[required]
                        p2/("p2-high"),
                        #[required]
                        p3/("p3-medium"),
                        #[required]
                        p4/("p4-low"),
                        #[required]
                        p5/("p5-future"),
                        #[required]
                        p6/("p6-enhancement"),
                        #[required]
                        p7/("p7-optional"),
                        #[required]
                        p8/("p8-experimental"),
                        #[required]
                        p9/("p9-research")
                    },
                    #[required]
                    completed/ as CompletedTasksDir ,
                    obsolete/ as ObsoleteTasksDir,
                },
                implementation/ as ImplementationDir,
            }
        }
    }
}

fn default_task_counter(_counter: &TaskCounter) -> std::io::Result<String> {
    Ok("0".to_string())
}

fn default_project_management_config(_config: &ProjectConfigFile) -> std::io::Result<String> {
    Ok("default = true".to_string())
}

fn main() -> std::io::Result<()> {
    // Create a temporary directory for the demo
    // let temp_dir = tempfile::tempdir()?;

    Ok(())
}