blob: 9203334750124c17be4980561ad179335e77781b [file] [log] [blame]
// Copyright 2018 The Chromium 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 MEDIA_LEARNING_MOJO_PUBLIC_CPP_LEARNING_MOJOM_TRAITS_H_
#define MEDIA_LEARNING_MOJO_PUBLIC_CPP_LEARNING_MOJOM_TRAITS_H_
#include <vector>
#include "base/component_export.h"
#include "media/learning/common/learning_task_controller.h"
#include "media/learning/common/value.h"
#include "media/learning/mojo/public/mojom/learning_types.mojom-shared.h"
#include "mojo/public/cpp/bindings/struct_traits.h"
namespace mojo {
template <>
struct COMPONENT_EXPORT(MEDIA_LEARNING_SHARED_TYPEMAP_TRAITS)
StructTraits<media::learning::mojom::LabelledExampleDataView,
media::learning::LabelledExample> {
static const std::vector<media::learning::FeatureValue>& features(
const media::learning::LabelledExample& e) {
return e.features;
}
static media::learning::TargetValue target_value(
const media::learning::LabelledExample& e) {
return e.target_value;
}
static bool Read(media::learning::mojom::LabelledExampleDataView data,
media::learning::LabelledExample* out_example);
};
template <>
struct COMPONENT_EXPORT(MEDIA_LEARNING_SHARED_TYPEMAP_TRAITS)
StructTraits<media::learning::mojom::FeatureValueDataView,
media::learning::FeatureValue> {
static double value(const media::learning::FeatureValue& e) {
return e.value();
}
static bool Read(media::learning::mojom::FeatureValueDataView data,
media::learning::FeatureValue* out_feature_value);
};
template <>
struct COMPONENT_EXPORT(MEDIA_LEARNING_SHARED_TYPEMAP_TRAITS)
StructTraits<media::learning::mojom::TargetValueDataView,
media::learning::TargetValue> {
static double value(const media::learning::TargetValue& e) {
return e.value();
}
static bool Read(media::learning::mojom::TargetValueDataView data,
media::learning::TargetValue* out_target_value);
};
template <>
struct COMPONENT_EXPORT(MEDIA_LEARNING_SHARED_TYPEMAP_TRAITS)
StructTraits<media::learning::mojom::ObservationCompletionDataView,
media::learning::ObservationCompletion> {
static media::learning::TargetValue target_value(
const media::learning::ObservationCompletion& e) {
return e.target_value;
}
static media::learning::WeightType weight(
const media::learning::ObservationCompletion& e) {
return e.weight;
}
static bool Read(
media::learning::mojom::ObservationCompletionDataView data,
media::learning::ObservationCompletion* out_observation_completion);
};
template <>
struct COMPONENT_EXPORT(MEDIA_LEARNING_SHARED_TYPEMAP_TRAITS)
StructTraits<media::learning::mojom::TargetHistogramPairDataView,
media::learning::TargetHistogramPair> {
static media::learning::TargetValue target_value(
const media::learning::TargetHistogramPair& e) {
return e.target_value;
}
static double count(const media::learning::TargetHistogramPair& e) {
return e.count;
}
static bool Read(media::learning::mojom::TargetHistogramPairDataView data,
media::learning::TargetHistogramPair* out_pair);
};
template <>
struct COMPONENT_EXPORT(MEDIA_LEARNING_SHARED_TYPEMAP_TRAITS)
StructTraits<media::learning::mojom::TargetHistogramDataView,
media::learning::TargetHistogram> {
static std::vector<media::learning::TargetHistogramPair> pairs(
const media::learning::TargetHistogram& e) {
std::vector<media::learning::TargetHistogramPair> pairs;
for (auto const& entry : e.counts_) {
pairs.push_back({entry.first, entry.second});
}
return pairs;
}
static bool Read(media::learning::mojom::TargetHistogramDataView data,
media::learning::TargetHistogram* out_target_histogram);
};
} // namespace mojo
#endif // MEDIA_LEARNING_MOJO_PUBLIC_CPP_LEARNING_MOJOM_TRAITS_H_