| 286 | |
| 287 | private: |
| 288 | absl::Status ExprFromProtoImpl(const ExprProto& proto, Expr& expr) { |
| 289 | switch (proto.expr_kind_case()) { |
| 290 | case ExprProto::EXPR_KIND_NOT_SET: |
| 291 | expr.Clear(); |
| 292 | expr.set_id(proto.id()); |
| 293 | return absl::OkStatus(); |
| 294 | case ExprProto::kConstExpr: |
| 295 | return ConstExprFromProto(proto, proto.const_expr(), expr); |
| 296 | case ExprProto::kIdentExpr: |
| 297 | return IdentExprFromProto(proto, proto.ident_expr(), expr); |
| 298 | case ExprProto::kSelectExpr: |
| 299 | return SelectExprFromProto(proto, proto.select_expr(), expr); |
| 300 | case ExprProto::kCallExpr: |
| 301 | return CallExprFromProto(proto, proto.call_expr(), expr); |
| 302 | case ExprProto::kListExpr: |
| 303 | return ListExprFromProto(proto, proto.list_expr(), expr); |
| 304 | case ExprProto::kStructExpr: |
| 305 | if (proto.struct_expr().message_name().empty()) { |
| 306 | return MapExprFromProto(proto, proto.struct_expr(), expr); |
| 307 | } |
| 308 | return StructExprFromProto(proto, proto.struct_expr(), expr); |
| 309 | case ExprProto::kComprehensionExpr: |
| 310 | return ComprehensionExprFromProto(proto, proto.comprehension_expr(), |
| 311 | expr); |
| 312 | default: |
| 313 | return absl::InvalidArgumentError( |
| 314 | absl::StrCat("unexpected ExprKindCase: ", |
| 315 | static_cast<int>(proto.expr_kind_case()))); |
| 316 | } |
| 317 | } |
| 318 | |
| 319 | absl::Status ConstExprFromProto(const ExprProto& proto, |
| 320 | const ConstantProto& const_proto, |