module generator
import (
std.alloc
std.fs
)
let make_path(
engine: *mut Engine,
parts: ...str
): (std.fs.Path, bool) {
let mut path = std.fs.Path.init(engine.allocator)
if !path.push(engine.root) || !path.push(parts...) {
fail(engine, "out of memory")
return path, false
}
return path, true
}
let join_relative(
engine: *mut Engine,
left: str,
right: str,
): (std.fs.Path, bool) {
let mut path = std.fs.Path.init(engine.allocator)
if @len(left) != 0 && !path.push(left) {
fail(engine, "out of memory")
return path, false
}
if !path.push(right) {
fail(engine, "out of memory")
return path, false
}
return path, true
}
let template_name_valid(name: str): bool {
if @len(name) == 0 || std.fs.is_absolute(name) || name.contains("\\") {
return false
}
let mut remaining = name
for true {
let slash, found = remaining.find("/")
let component = if found { remaining[:slash] } else { remaining }
if component.eq("") || component.eq(".") || component.eq("..") { return false }
if !found { return true }
remaining = remaining[slash + 1:]
}
return false
}