| 491 | } |
| 492 | |
| 493 | absl::StatusOr<std::unique_ptr<Ast>> CreateAstFromCheckedExpr( |
| 494 | const CheckedExprPb& checked_expr) { |
| 495 | CEL_ASSIGN_OR_RETURN(Expr expr, ExprValueFromProto(checked_expr.expr())); |
| 496 | CEL_ASSIGN_OR_RETURN(SourceInfo source_info, ConvertProtoSourceInfoToNative( |
| 497 | checked_expr.source_info())); |
| 498 | |
| 499 | Ast::ReferenceMap reference_map; |
| 500 | for (const auto& pair : checked_expr.reference_map()) { |
| 501 | auto native_reference = ConvertProtoReferenceToNative(pair.second); |
| 502 | if (!native_reference.ok()) { |
| 503 | return native_reference.status(); |
| 504 | } |
| 505 | reference_map.emplace(pair.first, *(std::move(native_reference))); |
| 506 | } |
| 507 | Ast::TypeMap type_map; |
| 508 | for (const auto& pair : checked_expr.type_map()) { |
| 509 | auto native_type = ConvertProtoTypeToNative(pair.second); |
| 510 | if (!native_type.ok()) { |
| 511 | return native_type.status(); |
| 512 | } |
| 513 | type_map.emplace(pair.first, *(std::move(native_type))); |
| 514 | } |
| 515 | |
| 516 | return std::make_unique<Ast>(std::move(expr), std::move(source_info), |
| 517 | std::move(reference_map), std::move(type_map), |
| 518 | checked_expr.expr_version()); |
| 519 | } |
| 520 | |
| 521 | absl::Status AstToCheckedExpr( |
| 522 | const Ast& ast, cel::expr::CheckedExpr* absl_nonnull out) { |