| /* |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| */ |
| |
| #pragma once |
| |
| #include <nlohmann/json_fwd.hpp> |
| |
| #include "iceberg/expression/expression.h" |
| #include "iceberg/iceberg_export.h" |
| #include "iceberg/result.h" |
| #include "iceberg/type_fwd.h" |
| |
| /// \file iceberg/expression/json_serde_internal.h |
| /// JSON serialization and deserialization for expressions. |
| |
| namespace iceberg { |
| |
| /// \brief Converts an operation type string to an Expression::Operation. |
| /// |
| /// \param typeStr The operation type string |
| /// \return The corresponding Operation or an error if unknown |
| ICEBERG_EXPORT Result<Expression::Operation> OperationTypeFromJson( |
| const nlohmann::json& json); |
| |
| /// \brief Converts an Expression::Operation to its json representation. |
| /// |
| /// \param op The operation to convert |
| /// \return The operation type string (e.g., "eq", "lt-eq", "is-null") |
| ICEBERG_EXPORT nlohmann::json ToJson(Expression::Operation op); |
| |
| /// \brief Deserializes a JSON object into an Expression. |
| /// |
| /// \param json A JSON object representing an expression |
| /// \param schema Optional schema used to bind field references and coerce literal |
| /// types. |
| /// \return A shared pointer to the deserialized Expression or an error |
| ICEBERG_EXPORT Result<std::shared_ptr<Expression>> ExpressionFromJson( |
| const nlohmann::json& json, const Schema* schema = nullptr); |
| |
| /// \brief Serializes an Expression into its JSON representation. |
| /// |
| /// \param expr The expression to serialize |
| /// \return A JSON object representing the expression, or an error |
| ICEBERG_EXPORT Result<nlohmann::json> ToJson(const Expression& expr); |
| |
| /// \brief Deserializes a JSON object into a NamedReference. |
| /// |
| /// \param json A JSON object representing a named reference |
| /// \return A shared pointer to the deserialized NamedReference or an error |
| ICEBERG_EXPORT Result<std::unique_ptr<NamedReference>> NamedReferenceFromJson( |
| const nlohmann::json& json); |
| |
| /// \brief Serializes a NamedReference into its JSON representation. |
| /// |
| /// \param ref The named reference to serialize |
| /// \return A JSON object representing the named reference, or an error |
| ICEBERG_EXPORT nlohmann::json ToJson(const NamedReference& ref); |
| |
| /// \brief Serializes an UnboundTransform into its JSON representation. |
| /// |
| /// \param transform The unbound transform to serialize |
| /// \return A JSON object representing the unbound transform, or an error |
| ICEBERG_EXPORT nlohmann::json ToJson(const UnboundTransform& transform); |
| |
| /// \brief Deserializes a JSON object into an UnboundTransform. |
| /// |
| /// \param json A JSON object representing an unbound transform |
| /// \return A shared pointer to the deserialized UnboundTransform or an error |
| ICEBERG_EXPORT Result<std::unique_ptr<UnboundTransform>> UnboundTransformFromJson( |
| const nlohmann::json& json); |
| |
| /// \brief Serializes a Literal into its JSON representation. |
| /// |
| /// \param literal The literal to serialize |
| /// \return A JSON value representing the literal, or an error |
| ICEBERG_EXPORT Result<nlohmann::json> ToJson(const Literal& literal); |
| |
| /// \brief Deserializes a JSON value into a Literal. |
| /// |
| /// \param json A JSON value representing a literal. |
| /// \return The deserialized Literal or an error. |
| ICEBERG_EXPORT Result<Literal> LiteralFromJson(const nlohmann::json& json); |
| |
| /// \brief Deserializes a JSON value into a Literal with optional type context. |
| /// |
| /// \param json A JSON value representing a literal. |
| /// \param type Optional target type used to guide parsing. |
| /// \return The deserialized Literal or an error. |
| ICEBERG_EXPORT Result<Literal> LiteralFromJson(const nlohmann::json& json, |
| const Type* type); |
| |
| /// \brief Serializes an UnboundPredicate into its JSON representation. |
| /// |
| /// \param pred The unbound predicate to serialize |
| /// \return A JSON object representing the predicate, or an error |
| ICEBERG_EXPORT Result<nlohmann::json> ToJson(const UnboundPredicate& pred); |
| |
| /// \brief Serializes a BoundReference into its JSON representation (field name string). |
| ICEBERG_EXPORT nlohmann::json ToJson(const BoundReference& ref); |
| |
| /// \brief Serializes a BoundTransform into its JSON representation. |
| ICEBERG_EXPORT nlohmann::json ToJson(const BoundTransform& transform); |
| |
| /// \brief Serializes a BoundPredicate into its JSON representation. |
| ICEBERG_EXPORT Result<nlohmann::json> ToJson(const BoundPredicate& pred); |
| |
| /// \brief Deserializes a JSON object into an UnboundPredicate. |
| /// |
| /// \param json A JSON object representing an unbound predicate |
| /// \param schema Optional schema used to resolve literal types. |
| /// \return A pointer to the deserialized UnboundPredicate or an error |
| ICEBERG_EXPORT Result<std::unique_ptr<UnboundPredicate>> UnboundPredicateFromJson( |
| const nlohmann::json& json, const Schema* schema = nullptr); |
| |
| /// \brief Serializes a Term into its JSON representation. |
| /// |
| /// \param term The term to serialize (NamedReference or UnboundTransform) |
| /// \return A JSON value representing the term, or an error |
| ICEBERG_EXPORT Result<nlohmann::json> ToJson(const Term& term); |
| |
| /// Check if an operation is a unary predicate |
| ICEBERG_EXPORT bool IsUnaryOperation(Expression::Operation op); |
| |
| /// Check if an operation is a set predicate |
| ICEBERG_EXPORT bool IsSetOperation(Expression::Operation op); |
| |
| } // namespace iceberg |