///|
fn main {
  try {
    let program = @sieve.compile(
      "require [\"fileinto\", \"copy\"]; if header :contains \"List-Id\" \"moonbit\" { fileinto :copy \"Lists/MoonBit\"; }",
    )
    let message = @sieve.Message::new(
      [{ name: "List-Id", value: "dev.moonbit.example.org" }],
      2048,
      envelope_from="sender@example.org",
      envelope_to=["reader@example.org"],
    )
    let plan = program.run(message)
    println(
      plan
      .as_json(include_trace=false, redact_destinations=true)
      .stringify(indent=2),
    )
  } catch {
    @sieve.SieveError(d) => println(d.render("", filename="example"))
  }
}