1 //===- ExtractAPI/Serialization/SerializerBase.h ----------------*- C++ -*-===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 /// 9 /// \file 10 /// This file defines the ExtractAPI APISerializer interface. 11 /// 12 //===----------------------------------------------------------------------===// 13 14 #ifndef LLVM_CLANG_EXTRACTAPI_SERIALIZATION_SERIALIZERBASE_H 15 #define LLVM_CLANG_EXTRACTAPI_SERIALIZATION_SERIALIZERBASE_H 16 17 #include "clang/ExtractAPI/API.h" 18 #include "clang/ExtractAPI/APIIgnoresList.h" 19 #include "llvm/Support/raw_ostream.h" 20 21 namespace clang { 22 namespace extractapi { 23 24 /// Common options to customize the serializer output. 25 struct APISerializerOption { 26 /// Do not include unnecessary whitespaces to save space. 27 bool Compact; 28 }; 29 30 /// The base interface of serializers for API information. 31 class APISerializer { 32 public: 33 /// Serialize the API information to \p os. 34 virtual void serialize(raw_ostream &os) = 0; 35 36 protected: 37 const APISet &API; 38 39 /// The list of symbols to ignore. 40 /// 41 /// Note: This should be consulted before emitting a symbol. 42 const APIIgnoresList &IgnoresList; 43 44 APISerializerOption Options; 45 46 public: 47 APISerializer() = delete; 48 APISerializer(const APISerializer &) = delete; 49 APISerializer(APISerializer &&) = delete; 50 APISerializer &operator=(const APISerializer &) = delete; 51 APISerializer &operator=(APISerializer &&) = delete; 52 53 protected: 54 APISerializer(const APISet &API, const APIIgnoresList &IgnoresList, 55 APISerializerOption Options = {}) API(API)56 : API(API), IgnoresList(IgnoresList), Options(Options) {} 57 58 virtual ~APISerializer() = default; 59 }; 60 61 } // namespace extractapi 62 } // namespace clang 63 64 #endif // LLVM_CLANG_EXTRACTAPI_SERIALIZATION_SERIALIZERBASE_H 65