#ifndef JSONSERIALIZER_H #define JSONSERIALIZER_H #ifdef WITH_GLTF #include "../ifcgeom/Serializer.h" #include "../ifcparse/file.h" #include "../plugin/plugin.h" #include "../serializers/serializers_api.h" #include "../serializers/document_serializer_plugin.h" #include class JsonSerializer : public Serializer { public: enum Dialect { JSON_DIALECT_CREOOX }; private: boost::shared_ptr implementation_; protected: std::string json_filename; Dialect dialect_; public: JsonSerializer(ifcopenshell::file* file, const std::string& json_filename, Dialect dialect = Dialect::JSON_DIALECT_CREOOX, ::logger& logger = ::logger::root()) : json_filename(json_filename) , dialect_(dialect) { if (!file) { return; } ifcopenshell::serializers::document_serializer_context context; context.file = file; context.output_filename = json_filename; context.schema_name = file->schema()->name(); context.dialect = static_cast(dialect); implementation_ = ifcopenshell::serializers::document_serializer_registry_instance().create("json", context); } virtual ~JsonSerializer() {} bool ready() { return true; } void writeHeader() {} void finalize() { if (!implementation_) { throw ifcopenshell::exception("No JSON serializer implementation constructed"); } implementation_->finalize(); } void setFile(ifcopenshell::file&) { throw ifcopenshell::exception("Should be supplied on construction"); } }; #endif #endif