1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
|
// Copyright 2024 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "components/attribution_reporting/aggregatable_named_budget_candidate.h"
#include <optional>
#include <string>
#include <utility>
#include "base/types/expected.h"
#include "base/types/expected_macros.h"
#include "base/values.h"
#include "components/attribution_reporting/constants.h"
#include "components/attribution_reporting/filters.h"
#include "components/attribution_reporting/trigger_registration_error.mojom.h"
namespace attribution_reporting {
namespace {
using ::attribution_reporting::mojom::TriggerRegistrationError;
} // namespace
// static
base::expected<AggregatableNamedBudgetCandidate, TriggerRegistrationError>
AggregatableNamedBudgetCandidate::FromJSON(base::Value& v) {
base::Value::Dict* dict = v.GetIfDict();
if (!dict) {
return base::unexpected(
TriggerRegistrationError::kAggregatableNamedBudgetWrongType);
}
std::optional<std::string> name;
if (base::Value* name_value = dict->Find(kName)) {
std::string* name_str = name_value->GetIfString();
if (!name_str) {
return base::unexpected(
TriggerRegistrationError::kAggregatableNamedBudgetNameInvalid);
}
name = std::move(*name_str);
}
ASSIGN_OR_RETURN(FilterPair filters, FilterPair::FromJSON(*dict));
return AggregatableNamedBudgetCandidate(std::move(name), std::move(filters));
}
AggregatableNamedBudgetCandidate::AggregatableNamedBudgetCandidate(
std::optional<std::string> name,
FilterPair filters)
: name_(std::move(name)), filters_(std::move(filters)) {}
AggregatableNamedBudgetCandidate::AggregatableNamedBudgetCandidate() = default;
AggregatableNamedBudgetCandidate::~AggregatableNamedBudgetCandidate() = default;
AggregatableNamedBudgetCandidate::AggregatableNamedBudgetCandidate(
const AggregatableNamedBudgetCandidate&) = default;
AggregatableNamedBudgetCandidate::AggregatableNamedBudgetCandidate(
AggregatableNamedBudgetCandidate&&) = default;
AggregatableNamedBudgetCandidate& AggregatableNamedBudgetCandidate::operator=(
const AggregatableNamedBudgetCandidate&) = default;
AggregatableNamedBudgetCandidate& AggregatableNamedBudgetCandidate::operator=(
AggregatableNamedBudgetCandidate&&) = default;
base::Value::Dict AggregatableNamedBudgetCandidate::ToJson() const {
base::Value::Dict dict;
if (name_.has_value()) {
dict.Set(kName, *name_);
}
filters_.SerializeIfNotEmpty(dict);
return dict;
}
} // namespace attribution_reporting
|