trustfall 0.8.1

The trustfall query engine, empowering you to query everything.
Documentation
schema {
    query: RootSchemaQuery
}
directive @filter(
    """Name of the filter operation to perform."""
    op: String!
    """List of string operands for the operator."""
    value: [String!]
) repeatable on FIELD | INLINE_FRAGMENT
directive @tag(
    """Name to apply to the given property field."""
    name: String
) on FIELD
directive @output(
    """What to designate the output field generated from this property field."""
    name: String
) on FIELD
directive @optional on FIELD
directive @recurse(
    """
    Recurse up to this many times on this edge. A depth of 1 produces the current
    vertex and its immediate neighbors along the given edge.
    """
    depth: Int!
) on FIELD
directive @fold on FIELD
directive @transform(
    """
    Name of the transformation operation to perform.
    """
    op: String!
) on FIELD

type RootSchemaQuery {
    FrontPage: [Item!]!
    Top(max: Int): [Item!]!
    Latest(max: Int): [Story!]!
    User(name: String!): User
}

interface Item {
    id: Int!
    unixTime: Int!
    url: String!
}

type Job implements Item {
    # properties from Item
    id: Int!
    unixTime: Int!
    url: String!

    # own properties
    title: String!
    score: Int!
}

type Story implements Item {
    # properties from Item
    id: Int!
    unixTime: Int!
    url: String!  # the URL of the HackerNews page for this story

    # own properties
    byUsername: String!
    score: Int!
    submittedUrl: String  # the URL this story is about, if any
    text: String
    title: String!
    commentsCount: Int!

    # edges
    byUser: User!
    comment: [Comment!]
}

type Comment implements Item {
    # properties from Item
    id: Int!
    unixTime: Int!
    url: String!

    # own properties
    text: String!
    byUsername: String!
    childCount: Int!

    # edges
    byUser: User!
    reply: [Comment!]
    parent: Item!  # either a parent comment or the story being commented on
}

type Poll implements Item {
    # properties from Item
    id: Int!
    unixTime: Int!
    url: String!
}

type PollOption implements Item {
    # properties from Item
    id: Int!
    unixTime: Int!
    url: String!
}

type User {
    id: String!
    karma: Int!
    about: String
    unixCreatedAt: Int!
    delay: Int

    # The HackerNews API treats submissions of comments and stories the same way.
    # The way to get only a user's submitted stories is to use this edge then
    # apply a type coercion on the `Item` vertex on edge endpoint: `... on Story`
    submitted: [Item!]
}