// Copyright 2019 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_LIB_FIDL_CODEC_TYPE_VISITOR_H_
#define SRC_LIB_FIDL_CODEC_TYPE_VISITOR_H_

#include "src/lib/fidl_codec/wire_types.h"

namespace fidl_codec {

// Superclass for implementing visitors for Type. Note that the whole class is protected. To use a
// visitor, use the Visit method on the Type object you want to visit.
class TypeVisitor {
 protected:
  virtual void VisitType(const Type* type) {}
  virtual void VisitInvalidType(const InvalidType* type) { VisitType(type); }
  virtual void VisitBoolType(const BoolType* type) { VisitType(type); }
  virtual void VisitIntegralType(const Type* type) { VisitNumericType(type); }
  virtual void VisitUint8Type(const Uint8Type* type) { VisitIntegralType(type); }
  virtual void VisitUint16Type(const Uint16Type* type) { VisitIntegralType(type); }
  virtual void VisitUint32Type(const Uint32Type* type) { VisitIntegralType(type); }
  virtual void VisitUint64Type(const Uint64Type* type) { VisitIntegralType(type); }
  virtual void VisitInt8Type(const Int8Type* type) { VisitIntegralType(type); }
  virtual void VisitInt16Type(const Int16Type* type) { VisitIntegralType(type); }
  virtual void VisitInt32Type(const Int32Type* type) { VisitIntegralType(type); }
  virtual void VisitInt64Type(const Int64Type* type) { VisitIntegralType(type); }
  virtual void VisitNumericType(const Type* type) { VisitType(type); }
  virtual void VisitFloat32Type(const Float32Type* type) { VisitNumericType(type); }
  virtual void VisitFloat64Type(const Float64Type* type) { VisitNumericType(type); }
  virtual void VisitStringType(const StringType* type) { VisitType(type); }
  virtual void VisitHandleType(const HandleType* type) { VisitType(type); }
  virtual void VisitEnumType(const EnumType* type) { VisitType(type); }
  virtual void VisitBitsType(const BitsType* type) { VisitType(type); }
  virtual void VisitUnionType(const UnionType* type) { VisitType(type); }
  virtual void VisitStructType(const StructType* type) { VisitType(type); }
  virtual void VisitElementSequenceType(const ElementSequenceType* type) { VisitType(type); }
  virtual void VisitArrayType(const ArrayType* type) { VisitElementSequenceType(type); }
  virtual void VisitVectorType(const VectorType* type) { VisitElementSequenceType(type); }
  virtual void VisitTableType(const TableType* type) { VisitType(type); }
  virtual void VisitFidlMessageType(const FidlMessageType* type) { VisitType(type); }

  friend class Type;
  friend class InvalidType;
  friend class BoolType;
  template <typename T>
  friend class IntegralType;
  friend class Uint8Type;
  friend class Uint16Type;
  friend class Uint32Type;
  friend class Uint64Type;
  friend class Int8Type;
  friend class Int16Type;
  friend class Int32Type;
  friend class Int64Type;
  template <typename T>
  friend class NumericType;
  friend class Float32Type;
  friend class Float64Type;
  friend class StringType;
  friend class HandleType;
  friend class EnumType;
  friend class BitsType;
  friend class UnionType;
  friend class StructType;
  friend class ElementSequenceType;
  friend class ArrayType;
  friend class VectorType;
  friend class TableType;
  friend class FidlMessageType;
};

}  // namespace fidl_codec

#endif  // SRC_LIB_FIDL_CODEC_TYPE_VISITOR_H_
