blob: 019a1c76d0988fa187f2aaf40298f35bb9a01c26 [file] [log] [blame] [edit]
/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
file LICENSE.rst or https://cmake.org/licensing for details. */
#pragma once
#include <string>
#include <vector>
#include <cm/optional>
class cmSbomObject;
class cmSbomSerializer
{
public:
cmSbomSerializer() = default;
cmSbomSerializer(cmSbomSerializer const&) = default;
cmSbomSerializer(cmSbomSerializer&&) = default;
cmSbomSerializer& operator=(cmSbomSerializer const&) = default;
cmSbomSerializer& operator=(cmSbomSerializer&&) = default;
virtual void BeginObject() {}
virtual void EndObject() {}
virtual void BeginArray() {}
virtual void EndArray() {}
virtual void AddReference(std::string const& id) = 0;
virtual void AddString(std::string const& key, std::string const& value) = 0;
virtual void AddVisitable(std::string const& key,
cmSbomObject const& visitable) = 0;
virtual void AddVectorIfPresent(std::string const& key,
std::vector<cmSbomObject> const& vec) = 0;
virtual void AddVectorIfPresent(std::string const& key,
std::vector<std::string> const& vec) = 0;
virtual bool WriteSbom(std::ostream& os, cmSbomObject const& document) = 0;
virtual ~cmSbomSerializer() = default;
};