google / cel-go

Fast, portable, non-Turing complete expression evaluation with gradual typing (Go)
https://cel.dev
Apache License 2.0
2.3k stars 224 forks source link

Update tag-based parsing to use lambda for additional customization #1039

Closed matthchr closed 1 month ago

matthchr commented 1 month ago

This allows callers to override a bit more about struct field parsing. In particular, it's useful when parsing tags to perform escaping of tags that aren't supported CEL field names. This allows implementation of something similar to what Kuberentes does with CEL field names: https://kubernetes.io/docs/reference/using-api/cel/#escaping.

Pull Requests Guidelines

See CONTRIBUTING.md for more details about when to create a GitHub [Pull Request][1] and when other kinds of contributions or consultation might be more desirable.

When creating a new pull request, please fork the repo and work within a development branch.

Commit Messages

Background on why the change is being made with additional detail on consequences of the changes elsewhere in the code or to the general functionality of the library. Multiple paragraphs may be used, but please keep lines to 72 characters or less.



## Reviews

* Perform a self-review.
* Make sure the Travis CI build passes.
* Assign a reviewer once both the above have been completed.

## Merging

* If a CEL maintaner approves the change, it may be merged by the author if
  they have write access. Otherwise, the change will be merged by a maintainer.
* Multiple commits should be squashed before merging.
* Please append the line `closes #<issue-num>: description` in the merge message,
  if applicable.

[1]:  https://help.github.com/articles/about-pull-requests
matthchr commented 1 month ago

Realized this might be somewhat related to https://github.com/google/cel-go/pull/1002

matthchr commented 1 month ago

My main use-case for this is to control escaping of tags that aren't valid CEL names, but there are probably other viable use-cases as well like conditionally adding field name suffixes/prefixes or similar. Felt like rather than try to encode everything in the native types handler just exposing a function that enabled the caller to configure it how they want made sense.

TristonianJones commented 1 month ago

/gcbrun