blob: 00fb10df65ae1f19647b14c6bfbcb79c4623ace9 [file] [log] [blame]
// Copyright 2018 The Chromium OS 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 RUNTIME_PROBE_FUNCTIONS_GENERIC_STORAGE_H_
#define RUNTIME_PROBE_FUNCTIONS_GENERIC_STORAGE_H_
#include <memory>
#include <base/values.h>
#include "runtime_probe/functions/ata_storage.h"
#include "runtime_probe/functions/mmc_storage.h"
#include "runtime_probe/functions/nvme_storage.h"
#include "runtime_probe/probe_function.h"
namespace runtime_probe {
class GenericStorageFunction : public ProbeFunction {
using ProbeFunction::ProbeFunction;
public:
NAME_PROBE_FUNCTION("generic_storage");
template <typename T>
static std::unique_ptr<T> FromKwargsValue(const base::Value& dict_value) {
PARSE_BEGIN();
instance->ata_prober_ = CreateProbeFunction<AtaStorageFunction>(dict_value);
if (!instance->ata_prober_)
return nullptr;
instance->mmc_prober_ = CreateProbeFunction<MmcStorageFunction>(dict_value);
if (!instance->mmc_prober_)
return nullptr;
instance->nvme_prober_ =
CreateProbeFunction<NvmeStorageFunction>(dict_value);
if (!instance->nvme_prober_)
return nullptr;
PARSE_END();
}
private:
DataType EvalImpl() const override;
std::unique_ptr<AtaStorageFunction> ata_prober_;
std::unique_ptr<MmcStorageFunction> mmc_prober_;
std::unique_ptr<NvmeStorageFunction> nvme_prober_;
};
} // namespace runtime_probe
#endif // RUNTIME_PROBE_FUNCTIONS_GENERIC_STORAGE_H_