///|
fn main {
let registry : @moondepsolve.Registry = {
packages: [
{ name: "core", version: version("1.0.0"), dependencies: [], },
{ name: "core", version: version("1.2.0"), dependencies: [], },
{
name: "http",
version: version("0.3.4"),
dependencies: [dependency("core", "^1.0.0")],
},
{
name: "appkit",
version: version("1.0.0"),
dependencies: [dependency("http", "~0.3.0")],
},
],
}
println("MoonDepSolve demo")
println("root=appkit@1.0.0")
let root = [dependency("appkit", "1.0.0")]
match @moondepsolve.resolve(root, registry) {
Ok(result) => {
println("resolved=\{result.packages.length()}")
println(@moondepsolve.format_lock(result))
println("Dependency graph")
println(
@moondepsolve.format_graph_text(
@moondepsolve.build_dependency_graph(root, result),
),
)
}
Err(err) => println(@moondepsolve.format_error(err))
}
let conflict : @moondepsolve.DepError = VersionConflict(
"core", "1.2.0", "^2.0.0", "root -> appkit@1.0.0 -> core",
)
match @moondepsolve.build_conflict_report(conflict, registry) {
Some(report) => {
println("Conflict report")
println(@moondepsolve.format_conflict_report(report))
}
None => ()
}
}
///|
fn version(input : String) -> @moondepsolve.Version {
match @moondepsolve.parse_version(input) {
Ok(version) => version
Err(err) => abort(@moondepsolve.format_error(err))
}
}
///|
fn dependency(name : String, req : String) -> @moondepsolve.Dependency {
match @moondepsolve.parse_req(req) {
Ok(parsed) => { name, req: parsed, }
Err(err) => abort(@moondepsolve.format_error(err))
}
}