///|
fn main {
  println("=== moon_graphql Demo ===\n")
  let query_str =
    #|query HeroQuery($episode: Episode!) {
    #|  hero(episode: $episode) {
    #|    name
    #|    friends {
    #|      name
    #|    }
    #|  }
    #|}
  let schema_str =
    #|type Query {
    #|  hero(episode: Episode!): Hero
    #|}
    #|type Hero {
    #|  name: String
    #|  friends: [Hero]
    #|}
    #|enum Episode {
    #|  NEWHOPE
    #|  EMPIRE
    #|  JEDI
    #|}
  println("--- Parsing query ---")
  let query_doc = @parser.parse(query_str) catch {
    err => {
      println("Parse error: \{err}")
      return
    }
  }
  println("Query parsed successfully.\n")
  println("--- Parsing schema ---")
  let schema_doc = @parser.parse(schema_str) catch {
    err => {
      println("Parse error: \{err}")
      return
    }
  }
  println("Schema parsed successfully.\n")
  println("--- Validating query against schema ---")
  let errors = @validation.validate_against_schema(query_doc, schema_doc)
  if errors.is_empty() {
    println("Validation passed: no errors.\n")
  } else {
    println("Validation errors:")
    for err in errors {
      println("  - \{err.message()}")
    }
    println("")
  }
  println("--- Printing formatted query ---")
  println(@printer.print(query_doc))
  println("")
  println("--- Printing formatted schema ---")
  println(@printer.print(schema_doc))
}