| 61 | |
| 62 | private: |
| 63 | absl::Status ExprToProtoImpl(const Expr& expr, |
| 64 | cel::expr::Expr* absl_nonnull proto) { |
| 65 | return absl::visit( |
| 66 | absl::Overload( |
| 67 | [&expr, proto](const UnspecifiedExpr&) -> absl::Status { |
| 68 | proto->Clear(); |
| 69 | proto->set_id(expr.id()); |
| 70 | return absl::OkStatus(); |
| 71 | }, |
| 72 | [this, &expr, proto](const Constant& const_expr) -> absl::Status { |
| 73 | return ConstExprToProto(expr, const_expr, proto); |
| 74 | }, |
| 75 | [this, &expr, proto](const IdentExpr& ident_expr) -> absl::Status { |
| 76 | return IdentExprToProto(expr, ident_expr, proto); |
| 77 | }, |
| 78 | [this, &expr, |
| 79 | proto](const SelectExpr& select_expr) -> absl::Status { |
| 80 | return SelectExprToProto(expr, select_expr, proto); |
| 81 | }, |
| 82 | [this, &expr, proto](const CallExpr& call_expr) -> absl::Status { |
| 83 | return CallExprToProto(expr, call_expr, proto); |
| 84 | }, |
| 85 | [this, &expr, proto](const ListExpr& list_expr) -> absl::Status { |
| 86 | return ListExprToProto(expr, list_expr, proto); |
| 87 | }, |
| 88 | [this, &expr, |
| 89 | proto](const StructExpr& struct_expr) -> absl::Status { |
| 90 | return StructExprToProto(expr, struct_expr, proto); |
| 91 | }, |
| 92 | [this, &expr, proto](const MapExpr& map_expr) -> absl::Status { |
| 93 | return MapExprToProto(expr, map_expr, proto); |
| 94 | }, |
| 95 | [this, &expr, proto]( |
| 96 | const ComprehensionExpr& comprehension_expr) -> absl::Status { |
| 97 | return ComprehensionExprToProto(expr, comprehension_expr, proto); |
| 98 | }), |
| 99 | expr.kind()); |
| 100 | } |
| 101 | |
| 102 | absl::Status ConstExprToProto(const Expr& expr, const Constant& const_expr, |
| 103 | ExprProto* absl_nonnull proto) { |