12
12
// See the License for the specific language governing permissions and
13
13
// limitations under the License.
14
14
15
- #include " buf/validate/internal/cel_constraint_rules .h"
15
+ #include " buf/validate/internal/cel_validation_rules .h"
16
16
17
17
#include " common/values/struct_value.h"
18
18
#include " eval/public/containers/field_access.h"
@@ -26,21 +26,21 @@ namespace cel = google::api::expr;
26
26
27
27
namespace {
28
28
29
- absl::Status ProcessConstraint (
30
- ConstraintContext & ctx,
29
+ absl::Status ProcessRule (
30
+ RuleContext & ctx,
31
31
const google::api::expr::runtime::BaseActivation& activation,
32
- const CompiledConstraint & expr) {
33
- auto result_or= expr.expr ->Evaluate (activation, ctx.arena );
32
+ const CompiledRule & expr) {
33
+ auto result_or = expr.expr ->Evaluate (activation, ctx.arena );
34
34
if (!result_or.ok ()) {
35
35
return result_or.status ();
36
36
}
37
37
cel::runtime::CelValue result = std::move (result_or).value ();
38
38
if (result.IsBool ()) {
39
39
if (!result.BoolOrDie ()) {
40
- // Add violation with the constraint message.
40
+ // Add violation with the rule message.
41
41
Violation violation;
42
- violation.set_message (expr.constraint .message ());
43
- violation.set_rule_id (expr.constraint .id ());
42
+ violation.set_message (expr.rule .message ());
43
+ violation.set_rule_id (expr.rule .id ());
44
44
if (expr.rulePath .has_value ()) {
45
45
*violation.mutable_rule () = *expr.rulePath ;
46
46
}
@@ -51,7 +51,7 @@ absl::Status ProcessConstraint(
51
51
// Add violation with custom message.
52
52
Violation violation;
53
53
violation.set_message (std::string (result.StringOrDie ().value ()));
54
- violation.set_rule_id (expr.constraint .id ());
54
+ violation.set_rule_id (expr.rule .id ());
55
55
if (expr.rulePath .has_value ()) {
56
56
*violation.mutable_rule () = *expr.rulePath ;
57
57
}
@@ -87,12 +87,12 @@ cel::runtime::CelValue ProtoFieldToCelValue(
87
87
88
88
} // namespace
89
89
90
- absl::Status CelConstraintRules ::Add (
90
+ absl::Status CelValidationRules ::Add (
91
91
google::api::expr::runtime::CelExpressionBuilder& builder,
92
- Rule constraint ,
92
+ Rule rule ,
93
93
absl::optional<FieldPath> rulePath,
94
- const google::protobuf::FieldDescriptor* rule ) {
95
- auto pexpr_or = cel::parser::Parse (constraint .expression ());
94
+ const google::protobuf::FieldDescriptor* ruleField ) {
95
+ auto pexpr_or = cel::parser::Parse (rule .expression ());
96
96
if (!pexpr_or.ok ()) {
97
97
return pexpr_or.status ();
98
98
}
@@ -102,40 +102,40 @@ absl::Status CelConstraintRules::Add(
102
102
return expr_or.status ();
103
103
}
104
104
std::unique_ptr<cel::runtime::CelExpression> expr = std::move (expr_or).value ();
105
- exprs_.emplace_back (CompiledConstraint{std::move (constraint), std::move (expr), std::move (rulePath), rule});
105
+ exprs_.emplace_back (
106
+ CompiledRule{std::move (rule), std::move (expr), std::move (rulePath), ruleField});
106
107
return absl::OkStatus ();
107
108
}
108
109
109
- absl::Status CelConstraintRules ::Add (
110
+ absl::Status CelValidationRules ::Add (
110
111
google::api::expr::runtime::CelExpressionBuilder& builder,
111
112
std::string_view id,
112
113
std::string_view message,
113
114
std::string_view expression,
114
115
absl::optional<FieldPath> rulePath,
115
- const google::protobuf::FieldDescriptor* rule ) {
116
- Rule constraint ;
117
- *constraint .mutable_id () = id;
118
- *constraint .mutable_message () = message;
119
- *constraint .mutable_expression () = expression;
120
- return Add (builder, constraint , std::move (rulePath), rule );
116
+ const google::protobuf::FieldDescriptor* ruleField ) {
117
+ Rule rule ;
118
+ *rule .mutable_id () = id;
119
+ *rule .mutable_message () = message;
120
+ *rule .mutable_expression () = expression;
121
+ return Add (builder, rule , std::move (rulePath), ruleField );
121
122
}
122
123
123
- absl::Status CelConstraintRules::ValidateCel (
124
- ConstraintContext& ctx,
125
- google::api::expr::runtime::Activation& activation) const {
124
+ absl::Status CelValidationRules::ValidateCel (
125
+ RuleContext& ctx, google::api::expr::runtime::Activation& activation) const {
126
126
activation.InsertValue (" rules" , rules_);
127
127
activation.InsertValue (" now" , cel::runtime::CelValue::CreateTimestamp (absl::Now ()));
128
128
absl::Status status = absl::OkStatus ();
129
129
130
130
for (const auto & expr : exprs_) {
131
- if (rules_.IsMessage () && expr.rule != nullptr ) {
131
+ if (rules_.IsMessage () && expr.ruleField != nullptr ) {
132
132
activation.InsertValue (
133
- " rule" , ProtoFieldToCelValue (rules_.MessageOrDie (), expr.rule , ctx.arena ));
133
+ " rule" , ProtoFieldToCelValue (rules_.MessageOrDie (), expr.ruleField , ctx.arena ));
134
134
}
135
135
int pos = ctx.violations .size ();
136
- status = ProcessConstraint (ctx, activation, expr);
137
- if (rules_.IsMessage () && expr.rule != nullptr && ctx.violations .size () > pos) {
138
- ctx.setRuleValue (ProtoField{rules_.MessageOrDie (), expr.rule }, pos);
136
+ status = ProcessRule (ctx, activation, expr);
137
+ if (rules_.IsMessage () && expr.ruleField != nullptr && ctx.violations .size () > pos) {
138
+ ctx.setRuleValue (ProtoField{rules_.MessageOrDie (), expr.ruleField }, pos);
139
139
}
140
140
if (ctx.shouldReturn (status)) {
141
141
break ;
@@ -146,7 +146,7 @@ absl::Status CelConstraintRules::ValidateCel(
146
146
return status;
147
147
}
148
148
149
- void CelConstraintRules ::setRules (
149
+ void CelValidationRules ::setRules (
150
150
const google::protobuf::Message* rules, google::protobuf::Arena* arena) {
151
151
rules_ = cel::runtime::CelProtoWrapper::CreateMessage (rules, arena);
152
152
}
0 commit comments