// Copyright 2018 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include <cstring>
#include <string>
#include <utility>

#include "config/validation/valid_cobalt_config.h"
#include "third_party/tensorflow_statusor/statusor.h"

namespace cobalt {
namespace config {
namespace validation {

StatusOr<ValidCobaltConfig> ValidCobaltConfig::GetValidCobaltConfig(
    std::unique_ptr<CobaltConfig> cfg) {
  ValidCobaltConfig config(std::move(cfg));

  if (config.config_->encoding_configs_size() == 0 &&
      config.config_->metric_configs_size() == 0 &&
      config.config_->report_configs_size() == 0) {
    return util::Status(util::StatusCode::INVALID_ARGUMENT,
                        "The config is empty. This is probably not desired.");
  }

  return config;
}

ValidCobaltConfig::ValidCobaltConfig(std::unique_ptr<CobaltConfig> cfg)
    : config_(std::move(cfg)) {}

}  // namespace validation
}  // namespace config
}  // namespace cobalt
