///|
/// An application can use the model library without the legacy generator,
/// filesystem, CLI, Python, FFI or a network service.
fn main {
  let model : @model.Model = {
    variables: [
      { name: "x", values: [0L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L], },
      { name: "y", values: [0L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L], },
    ],
    rules: [
      { id: "sum", rule: Eq(Add(Var("x"), Var("y")), Int(9L)), },
      { id: "difference", rule: Eq(Sub(Var("x"), Var("y")), Int(3L)), },
    ],
  }
  match @model.classify(model) {
    Ok(Unique(assignment)) => {
      println("unique: " + @model.assignment_to_json(assignment).stringify())
      match @model.check_assignment(model, assignment) {
        Ok(report) => println("verified: " + report.valid.to_string())
        Err(e) => abort(e)
      }
    }
    Ok(_) => abort("expected a unique solution")
    Err(e) => abort(e)
  }
}