blob: 45a6daf12026aa39dc4b60733ff0cccccf6917f2 [file] [log] [blame]
// Copyright 2023 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef SRC_DEVELOPER_FFX_LIB_FUCHSIA_CONTROLLER_CPP_FIDL_CODEC_OBJECT_CONVERTER_H_
#define SRC_DEVELOPER_FFX_LIB_FUCHSIA_CONTROLLER_CPP_FIDL_CODEC_OBJECT_CONVERTER_H_
#include "src/developer/ffx/lib/fuchsia-controller/cpp/python/py_header.h"
#include "src/lib/fidl_codec/type_visitor.h"
namespace converter {
class ObjectConverter : public fidl_codec::TypeVisitor {
public:
static std::unique_ptr<fidl_codec::Value> Convert(PyObject* obj, const fidl_codec::Type* type) {
ObjectConverter converter(obj);
type->Visit(&converter);
return std::move(converter.result_);
}
private:
explicit ObjectConverter(PyObject* obj) : obj_(obj) {}
bool HandleNone(const fidl_codec::Type* type);
void VisitList(const fidl_codec::ElementSequenceType* type, std::optional<size_t> count);
void VisitInteger(bool is_signed);
// TypeVisitor implementation
void VisitType(const fidl_codec::Type* type) override;
void VisitEmptyPayloadType(const fidl_codec::EmptyPayloadType* type) override;
void VisitStringType(const fidl_codec::StringType* type) override;
void VisitBoolType(const fidl_codec::BoolType* type) override;
void VisitStructType(const fidl_codec::StructType* type) override;
void VisitTableType(const fidl_codec::TableType* type) override;
void VisitUnionType(const fidl_codec::UnionType* type) override;
void VisitArrayType(const fidl_codec::ArrayType* type) override;
void VisitVectorType(const fidl_codec::VectorType* type) override;
void VisitUint8Type(const fidl_codec::Uint8Type* type) override;
void VisitUint16Type(const fidl_codec::Uint16Type* type) override;
void VisitUint32Type(const fidl_codec::Uint32Type* type) override;
void VisitUint64Type(const fidl_codec::Uint64Type* type) override;
void VisitInt8Type(const fidl_codec::Int8Type* type) override;
void VisitInt16Type(const fidl_codec::Int16Type* type) override;
void VisitInt32Type(const fidl_codec::Int32Type* type) override;
void VisitInt64Type(const fidl_codec::Int64Type* type) override;
void VisitEnumType(const fidl_codec::EnumType* type) override;
void VisitBitsType(const fidl_codec::BitsType* type) override;
void VisitHandleType(const fidl_codec::HandleType* type) override;
void VisitFloat32Type(const fidl_codec::Float32Type* type) override;
void VisitFloat64Type(const fidl_codec::Float64Type* type) override;
PyObject* obj_;
std::unique_ptr<fidl_codec::Value> result_;
};
} // namespace converter
#endif // SRC_DEVELOPER_FFX_LIB_FUCHSIA_CONTROLLER_CPP_FIDL_CODEC_OBJECT_CONVERTER_H_