Skip to content

Improve type checking #7057

Open
Open
@nikpivkin

Description

@nikpivkin

What is the underlying problem you're trying to solve?

Type checking can be improved with schemas, it's very cool. Right now Rego only does type checking when accessing an object and its child properties that are associated with a schema. But type checking stops working in other very common cases:

  • assigning an object property to a variable
  • passing an object to a Rego function
  • passing an object to a custom function

Describe the ideal solution

The type is stored in the value and are used for type checking anywhere

Additional Context

In the example below, only the first case works.

Example Rego file:

package test

import rego.v1

deny if {

    # case 1
    input.foo.baz

    # case 2
    # foo := input.foo
    # foo.baz

    # case 3
    # test(input.foo)

    # case 4
    # object.get(input.foo, "baz", input.foo)
}

test(foo) if foo.baz

schema.json

{
    "type": "object",
    "properties": {
        "foo": {
            "type": "object"
        }
    }
}

input.json

{
    "foo": {}
}

Run opa eval data -d test.rego -i input.json -s schema.json

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions