// Minimal library embedding example: build a model, write a tuple, check it.

///|
fn main {
  let model = @dsl.parse_model(
    "model\n  schema 1.1\n\ntype user\n\ntype group\n  relations\n    define member: [user]\n\ntype document\n  relations\n    define viewer: [user, group#member]\n",
  ) catch {
    @fga.FgaError(..) as err => {
      println("model error: " + @fga.error_message(err))
      return
    }
  }
  let store = @store.MemoryStore::new()
  let _ = store.write(@fga.Tuple::{
    object: "group:eng",
    relation: "member",
    user: "user:anne",
    condition: None,
  })
  let _ = store.write(@fga.Tuple::{
    object: "document:roadmap",
    relation: "viewer",
    user: "group:eng#member",
    condition: None,
  })
  let engine = @engine.Engine::new(model, store as &@fga.TupleReader)
  let allowed = engine.check("document:roadmap", "viewer", "user:anne") catch {
    @fga.FgaError(..) as err => {
      println("check error: " + @fga.error_message(err))
      return
    }
  }
  println("anne can view roadmap: " + allowed.to_string())
}