| // Copyright 2023 The ChromiumOS Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef DLCSERVICE_METADATA_METADATA_INTERFACE_H_ |
| #define DLCSERVICE_METADATA_METADATA_INTERFACE_H_ |
| |
| #include <optional> |
| #include <set> |
| #include <string> |
| #include <vector> |
| |
| #include <base/values.h> |
| |
| namespace dlcservice::metadata { |
| |
| using DlcId = std::string; |
| using DlcIdList = std::vector<DlcId>; |
| |
| class MetadataInterface { |
| public: |
| MetadataInterface() = default; |
| virtual ~MetadataInterface() = default; |
| |
| MetadataInterface(const MetadataInterface&) = delete; |
| MetadataInterface& operator=(const MetadataInterface&) = delete; |
| |
| struct Entry { |
| base::Value::Dict manifest; |
| std::string table; |
| }; |
| |
| enum class FilterKey { |
| kNone, |
| kFactoryInstall, |
| kPowerwashSafe, |
| kPreloadAllowed |
| }; |
| |
| // Initialize the metadata. |
| virtual bool Initialize() = 0; |
| |
| // Get DLC metadata `Entry` by ID. Returns nullopt on error. |
| virtual std::optional<Entry> Get(const DlcId& id) = 0; |
| |
| // Set a DLC metadata `Entry`, returns true if success. |
| // Requires writable rootfs. |
| virtual bool Set(const DlcId& id, const Entry& entry) = 0; |
| |
| // Load, parse and cache metadata file that contains given `DlcId`. |
| virtual bool LoadMetadata(const DlcId& id) = 0; |
| |
| // Update the `file_id`s inside current metadata directory. This needs to be |
| // called after constructed the object. |
| virtual void UpdateFileIds() = 0; |
| |
| // Get a list of DLC IDs, optionally filter and return only the ones that |
| // match given manifest key and value. Set the key to `FilterKey::kNone` to |
| // skip filtering. |
| // NOTE: May be slow for unindexed filter keys. |
| virtual DlcIdList ListDlcIds(const FilterKey& filter_key, |
| const base::Value& filter_val) = 0; |
| |
| // Convert `FilterKey` enum to std::string. Returns nullopt on error. |
| virtual std::optional<std::string> FilterKeyToString( |
| const FilterKey& key_enum) = 0; |
| |
| // Getter for cached raw data. |
| virtual const base::Value::Dict& GetCache() const = 0; |
| |
| // Getter for file_ids. |
| virtual const std::set<DlcId>& GetFileIds() const = 0; |
| }; |
| |
| } // namespace dlcservice::metadata |
| |
| #endif // DLCSERVICE_METADATA_METADATA_INTERFACE_H_ |