///|
fn content_manifest_json() -> String {
let manifest =
#|{
#| "name": "content-pipeline-kit",
#| "partials": {
#| "feature_cards": "{{#features}}- {{title}}: {{summary}}\n{{/features}}",
#| "footer": "Generated by Moon Mustache content pipeline.\n"
#| },
#| "profiles": {
#| "community": {
#| "context": {
#| "audience_label": "Community"
#| }
#| },
#| "partners": {
#| "context": {
#| "audience_label": "Partner"
#| },
#| "partials": {
#| "footer": "Generated for partner-facing content workflows.\n"
#| }
#| }
#| },
#| "files": [
#| {
#| "path": "content/{{release.slug}}/overview.md",
#| "template": "# {{release.name}}\n\nAudience: {{audience_label}}\n\n## Features\n{{> feature_cards}}{{> footer}}"
#| },
#| {
#| "path": "content/{{release.slug}}/announcement.txt",
#| "template": "Subject: {{release.name}} is live\n\nHello {{audience_label}} readers,\n\n{{> feature_cards}}{{> footer}}"
#| },
#| {
#| "path": "content/{{release.slug}}/card.html",
#| "template": "{{release.name}}
{{#features}}- {{title}}: {{summary}}
{{/features}}
"
#| }
#| ]
#|}
manifest
}
///|
fn content_context() -> @src.Value {
@src.Value::object({
"release": @src.Value::object({
"name": @src.Value::string("Moon Mustache 0.1.0"),
"slug": @src.Value::string("moon-mustache-0-1-0"),
}),
"features": @src.Value::array([
@src.Value::object({
"title": @src.Value::string("Spec parity"),
"summary": @src.Value::string("136 official fixture cases passing"),
}),
@src.Value::object({
"title": @src.Value::string("Bundle planning"),
"summary": @src.Value::string(
"multi-file validation and plan reporting",
),
}),
@src.Value::object({
"title": @src.Value::string("Playground"),
"summary": @src.Value::string("browser-facing MoonBit-powered demo"),
}),
]),
})
}
///|
fn print_file(path : String, output : String) -> Unit {
println("== " + path + " ==")
println(output)
println("")
}
///|
fn main {
let manifest = @src.parse_bundle_manifest_json(content_manifest_json()).unwrap()
let validation = @src.validate_bundle_manifest(manifest)
let prepared = @src.prepare_bundle_manifest_profile(
manifest,
content_context(),
profile_name="partners",
).unwrap()
let result = @src.render_prepared_bundle_manifest_checked(
prepared,
@src.RenderOptions::strict(),
)
let plan = @src.build_bundle_plan("content-pipeline-kit", result, validation)
println(
@src.format_validation_report_markdown("content-pipeline-kit", validation),
)
println("")
println(@src.format_bundle_plan_markdown(plan))
println("")
for file in result.files {
print_file(file.path, file.output)
}
}