1 // Copyright 2018 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "media/learning/mojo/public/cpp/learning_mojom_traits.h"
6 
7 namespace mojo {
8 
9 // static
10 bool StructTraits<media::learning::mojom::LabelledExampleDataView,
11                   media::learning::LabelledExample>::
Read(media::learning::mojom::LabelledExampleDataView data,media::learning::LabelledExample * out_example)12     Read(media::learning::mojom::LabelledExampleDataView data,
13          media::learning::LabelledExample* out_example) {
14   out_example->features.clear();
15   if (!data.ReadFeatures(&out_example->features))
16     return false;
17 
18   if (!data.ReadTargetValue(&out_example->target_value))
19     return false;
20 
21   return true;
22 }
23 
24 // static
25 bool StructTraits<media::learning::mojom::FeatureValueDataView,
26                   media::learning::FeatureValue>::
Read(media::learning::mojom::FeatureValueDataView data,media::learning::FeatureValue * out_feature_value)27     Read(media::learning::mojom::FeatureValueDataView data,
28          media::learning::FeatureValue* out_feature_value) {
29   *out_feature_value = media::learning::FeatureValue(data.value());
30   return true;
31 }
32 
33 // static
34 bool StructTraits<media::learning::mojom::TargetValueDataView,
35                   media::learning::TargetValue>::
Read(media::learning::mojom::TargetValueDataView data,media::learning::TargetValue * out_target_value)36     Read(media::learning::mojom::TargetValueDataView data,
37          media::learning::TargetValue* out_target_value) {
38   *out_target_value = media::learning::TargetValue(data.value());
39   return true;
40 }
41 
42 // static
43 bool StructTraits<media::learning::mojom::ObservationCompletionDataView,
44                   media::learning::ObservationCompletion>::
Read(media::learning::mojom::ObservationCompletionDataView data,media::learning::ObservationCompletion * out_observation_completion)45     Read(media::learning::mojom::ObservationCompletionDataView data,
46          media::learning::ObservationCompletion* out_observation_completion) {
47   if (!data.ReadTargetValue(&out_observation_completion->target_value))
48     return false;
49   out_observation_completion->weight = data.weight();
50   return true;
51 }
52 
53 // static
54 bool StructTraits<media::learning::mojom::TargetHistogramPairDataView,
55                   media::learning::TargetHistogramPair>::
Read(media::learning::mojom::TargetHistogramPairDataView data,media::learning::TargetHistogramPair * out_pair)56     Read(media::learning::mojom::TargetHistogramPairDataView data,
57          media::learning::TargetHistogramPair* out_pair) {
58   if (!data.ReadTargetValue(&out_pair->target_value))
59     return false;
60   out_pair->count = data.count();
61   return true;
62 }
63 
64 // static
65 bool StructTraits<media::learning::mojom::TargetHistogramDataView,
66                   media::learning::TargetHistogram>::
Read(media::learning::mojom::TargetHistogramDataView data,media::learning::TargetHistogram * out_target_histogram)67     Read(media::learning::mojom::TargetHistogramDataView data,
68          media::learning::TargetHistogram* out_target_histogram) {
69   ArrayDataView<media::learning::mojom::TargetHistogramPairDataView> pairs;
70   data.GetPairsDataView(&pairs);
71   if (pairs.is_null())
72     return false;
73 
74   for (size_t i = 0; i < pairs.size(); ++i) {
75     media::learning::mojom::TargetHistogramPairDataView pair_data;
76     pairs.GetDataView(i, &pair_data);
77     media::learning::TargetValue value;
78     if (!pair_data.ReadTargetValue(&value))
79       return false;
80 
81     out_target_histogram->counts_.emplace(std::move(value), pair_data.count());
82   }
83 
84   return true;
85 }
86 
87 }  // namespace mojo
88