[NoCheck] Pass logger::Encoder by reference

This should never be null, and as such can be passed by reference

- Removes 2 CHECK calls
- Makes logger::Encoder move-only

Change-Id: Iba7ee24190ba3e46a64942e429c63082f0ceec32
Reviewed-on: https://fuchsia-review.googlesource.com/c/cobalt/+/658847
Reviewed-by: Andrew Hwang <anhwang@google.com>
Commit-Queue: Zach Bush <zmbush@google.com>
Fuchsia-Auto-Submit: Zach Bush <zmbush@google.com>
diff --git a/src/local_aggregation/aggregate_store.cc b/src/local_aggregation/aggregate_store.cc
index b4b97a7..606878f 100644
--- a/src/local_aggregation/aggregate_store.cc
+++ b/src/local_aggregation/aggregate_store.cc
@@ -167,7 +167,7 @@
 }  // namespace
 
 AggregateStore::AggregateStore(
-    const Encoder* encoder, const ObservationWriter* observation_writer,
+    const Encoder& encoder, const ObservationWriter* observation_writer,
     // TODO(fxbug.dev/85571): NOLINTNEXTLINE(bugprone-easily-swappable-parameters)
     ConsistentProtoStore* local_aggregate_proto_store,
     ConsistentProtoStore* obs_history_proto_store, const size_t backfill_days)
@@ -687,8 +687,8 @@
 Status AggregateStore::GenerateSingleUniqueActivesObservation(
     const MetricRef metric_ref, const ReportDefinition* report, uint32_t obs_day_index,
     uint32_t event_code, const OnDeviceAggregationWindow& window, bool was_active) const {
-  auto encoder_result = encoder_->EncodeUniqueActivesObservation(metric_ref, report, obs_day_index,
-                                                                 event_code, was_active, window);
+  auto encoder_result = encoder_.EncodeUniqueActivesObservation(metric_ref, report, obs_day_index,
+                                                                event_code, was_active, window);
   if (!encoder_result.status.ok()) {
     return encoder_result.status;
   }
@@ -859,8 +859,8 @@
     const std::string& component, uint32_t event_code, const OnDeviceAggregationWindow& window,
     int64_t value) const {
   Encoder::Result encoder_result =
-      encoder_->EncodePerDeviceNumericObservation(metric_ref, report, obs_day_index, component,
-                                                  UnpackEventCodesProto(event_code), value, window);
+      encoder_.EncodePerDeviceNumericObservation(metric_ref, report, obs_day_index, component,
+                                                 UnpackEventCodesProto(event_code), value, window);
   if (!encoder_result.status.ok()) {
     return encoder_result.status;
   }
@@ -879,7 +879,7 @@
     const MetricRef metric_ref, const ReportDefinition* report, uint32_t obs_day_index,
     const std::string& component, uint32_t event_code, const OnDeviceAggregationWindow& window,
     int64_t value) const {
-  Encoder::Result encoder_result = encoder_->EncodePerDeviceHistogramObservation(
+  Encoder::Result encoder_result = encoder_.EncodePerDeviceHistogramObservation(
       metric_ref, report, obs_day_index, component, UnpackEventCodesProto(event_code), value,
       window);
 
@@ -902,7 +902,7 @@
                                                                     const ReportDefinition* report,
                                                                     uint32_t obs_day_index) const {
   auto encoder_result =
-      encoder_->EncodeReportParticipationObservation(metric_ref, report, obs_day_index);
+      encoder_.EncodeReportParticipationObservation(metric_ref, report, obs_day_index);
   if (!encoder_result.status.ok()) {
     return encoder_result.status;
   }
diff --git a/src/local_aggregation/aggregate_store.h b/src/local_aggregation/aggregate_store.h
index f9eff09..9f9a709 100644
--- a/src/local_aggregation/aggregate_store.h
+++ b/src/local_aggregation/aggregate_store.h
@@ -68,7 +68,7 @@
   // generates and sends Observations, in addition to a requested day index.
   // See the comment above GenerateObservations for more detail. The constructor CHECK-fails if a
   // value larger than |kMaxAllowedBackfillDays| is passed.
-  AggregateStore(const logger::Encoder* encoder,
+  AggregateStore(const logger::Encoder& encoder,
                  const logger::ObservationWriter* observation_writer,
                  util::ConsistentProtoStore* local_aggregate_proto_store,
                  util::ConsistentProtoStore* obs_history_proto_store, size_t backfill_days = 0);
@@ -339,7 +339,7 @@
   size_t backfill_days_ = 0;
 
   // Objects used to generate observations.
-  const logger::Encoder* encoder_;                       // not owned
+  const logger::Encoder& encoder_;                       // not owned
   const logger::ObservationWriter* observation_writer_;  // not owned
 
   // Used for loading and backing up the proto stores to disk.
diff --git a/src/local_aggregation/aggregate_store_test.cc b/src/local_aggregation/aggregate_store_test.cc
index 7d83bfe..897c731 100644
--- a/src/local_aggregation/aggregate_store_test.cc
+++ b/src/local_aggregation/aggregate_store_test.cc
@@ -220,7 +220,7 @@
     cfg.obs_history_proto_store_path = obs_history_path();
 
     event_aggregator_mgr_ = std::make_unique<TestEventAggregatorManager>(
-        cfg, fs(), encoder_.get(), observation_writer_.get(), *metadata_builder_);
+        cfg, fs(), *encoder_, observation_writer_.get(), *metadata_builder_);
     day_store_created_ = CurrentDayIndex();
     test_steady_clock_ = new IncrementingSteadyClock(std::chrono::system_clock::duration(0));
     event_aggregator_mgr_->SetSteadyClock(test_steady_clock_);
diff --git a/src/local_aggregation/event_aggregator_mgr.cc b/src/local_aggregation/event_aggregator_mgr.cc
index 4505a24..b02c0a4 100644
--- a/src/local_aggregation/event_aggregator_mgr.cc
+++ b/src/local_aggregation/event_aggregator_mgr.cc
@@ -26,7 +26,7 @@
 const std::chrono::seconds EventAggregatorManager::kDefaultGCInterval = std::chrono::hours(24);
 
 EventAggregatorManager::EventAggregatorManager(const CobaltConfig& cfg, util::FileSystem& fs,
-                                               const logger::Encoder* encoder,
+                                               const logger::Encoder& encoder,
                                                const logger::ObservationWriter* observation_writer,
                                                MetadataBuilder& metadata_builder)
     : encoder_(encoder),
diff --git a/src/local_aggregation/event_aggregator_mgr.h b/src/local_aggregation/event_aggregator_mgr.h
index 884c38d..d2e1bc1 100644
--- a/src/local_aggregation/event_aggregator_mgr.h
+++ b/src/local_aggregation/event_aggregator_mgr.h
@@ -62,7 +62,7 @@
   //
   // observation_writer: The interface EventAggregator can use to write aggregated observations.
   EventAggregatorManager(const CobaltConfig& cfg, util::FileSystem& fs,
-                         const logger::Encoder* encoder,
+                         const logger::Encoder& encoder,
                          const logger::ObservationWriter* observation_writer,
                          MetadataBuilder& metadata_builder);
 
@@ -161,7 +161,7 @@
     std::condition_variable_any wakeup_notifier;
   };
 
-  const logger::Encoder* encoder_;
+  const logger::Encoder& encoder_;
   const logger::ObservationWriter* observation_writer_;
   MetadataBuilder& metadata_builder_;
   logger::InternalMetrics* internal_metrics_ = nullptr;
diff --git a/src/local_aggregation/event_aggregator_mgr_test.cc b/src/local_aggregation/event_aggregator_mgr_test.cc
index 074e9bb..c2e6d61 100644
--- a/src/local_aggregation/event_aggregator_mgr_test.cc
+++ b/src/local_aggregation/event_aggregator_mgr_test.cc
@@ -92,7 +92,7 @@
     cfg.obs_history_proto_store_path = obs_history_path();
 
     auto event_aggregator_mgr = std::make_unique<TestEventAggregatorManager>(
-        cfg, fs_, encoder_.get(), observation_writer_.get(), *metadata_builder_);
+        cfg, fs_, *encoder_, observation_writer_.get(), *metadata_builder_);
     event_aggregator_mgr->SetSteadyClock(steady_clock);
     return event_aggregator_mgr;
   }
diff --git a/src/local_aggregation/event_aggregator_test.cc b/src/local_aggregation/event_aggregator_test.cc
index dd0177f..52b012f 100644
--- a/src/local_aggregation/event_aggregator_test.cc
+++ b/src/local_aggregation/event_aggregator_test.cc
@@ -112,7 +112,7 @@
     cfg.obs_history_proto_store_path = obs_history_path();
 
     event_aggregator_mgr_ = std::make_unique<TestEventAggregatorManager>(
-        cfg, fs(), encoder_.get(), observation_writer_.get(), *metadata_builder_);
+        cfg, fs(), *encoder_, observation_writer_.get(), *metadata_builder_);
     // Pass this clock to the EventAggregator::Start method, if it is called.
     test_clock_ = std::make_unique<IncrementingSystemClock>(std::chrono::system_clock::duration(0));
     // Initilize it to 10 years after the beginning of time.
diff --git a/src/local_aggregation/test_utils/test_event_aggregator_mgr.h b/src/local_aggregation/test_utils/test_event_aggregator_mgr.h
index 1a9666d..0021a10 100644
--- a/src/local_aggregation/test_utils/test_event_aggregator_mgr.h
+++ b/src/local_aggregation/test_utils/test_event_aggregator_mgr.h
@@ -13,7 +13,7 @@
 class TestEventAggregatorManager : public EventAggregatorManager {
  public:
   TestEventAggregatorManager(const CobaltConfig& cfg, util::FileSystem& fs,
-                             const logger::Encoder* encoder,
+                             const logger::Encoder& encoder,
                              const logger::ObservationWriter* observation_writer,
                              MetadataBuilder& metadata_builder)
       : EventAggregatorManager(cfg, fs, encoder, observation_writer, metadata_builder) {}
diff --git a/src/logger/encoder.h b/src/logger/encoder.h
index 88ff463..1e30a2e 100644
--- a/src/logger/encoder.h
+++ b/src/logger/encoder.h
@@ -75,6 +75,10 @@
   //     metadata_builder.
   Encoder(system_data::ClientSecret client_secret, MetadataBuilder& metadata_builder);
 
+  // Encoder should be move-only.
+  Encoder(Encoder const&) = delete;
+  Encoder& operator=(Encoder const&) = delete;
+
   //////////////////////////////////////////////////////////////////////////////////////////////////
   //
   // Cobalt 1.0 Encoding methods.
diff --git a/src/logger/event_loggers.cc b/src/logger/event_loggers.cc
index 339ddb2..4e95319 100644
--- a/src/logger/event_loggers.cc
+++ b/src/logger/event_loggers.cc
@@ -32,7 +32,7 @@
 constexpr char TRACE_PREFIX[] = "[COBALT_EVENT_TRACE] ";
 
 std::unique_ptr<EventLogger> EventLogger::Create(
-    MetricDefinition::MetricType metric_type, const Encoder* encoder,
+    MetricDefinition::MetricType metric_type, const Encoder& encoder,
     EventAggregator* event_aggregator, local_aggregation::LocalAggregation* local_aggregation,
     const ObservationWriter* observation_writer,
     const system_data::SystemDataInterface* system_data,
@@ -543,7 +543,7 @@
     // Each report type has its own logic for generating immediate
     // observations.
     case ReportDefinition::SIMPLE_OCCURRENCE_COUNT: {
-      return encoder()->EncodeBasicRapporObservation(
+      return encoder().EncodeBasicRapporObservation(
           event_record->project_context()->RefMetric(&metric), &report, event.day_index(),
           event_occurred_event.event_code(), RapporConfigHelper::BasicRapporNumCategories(metric));
     }
@@ -594,7 +594,7 @@
     case ReportDefinition::EVENT_COMPONENT_OCCURRENCE_COUNT:
     case ReportDefinition::INT_RANGE_HISTOGRAM:
     case ReportDefinition::NUMERIC_AGGREGATION: {
-      return encoder()->EncodeIntegerEventObservation(
+      return encoder().EncodeIntegerEventObservation(
           event_record->project_context()->RefMetric(&metric), &report, event.day_index(),
           event_count_event->event_code(), event_count_event->component(),
           event_count_event->count());
@@ -639,7 +639,7 @@
     // observations.
     case ReportDefinition::NUMERIC_AGGREGATION:
     case ReportDefinition::INT_RANGE_HISTOGRAM: {
-      return encoder()->EncodeIntegerEventObservation(
+      return encoder().EncodeIntegerEventObservation(
           event_record->project_context()->RefMetric(&metric), &report, event.day_index(),
           EventCodes(event), Component(event), IntValue(event));
       break;
@@ -848,7 +848,7 @@
       } else {
         histogram->CopyFrom(int_histogram_event->buckets());
       }
-      return encoder()->EncodeHistogramObservation(
+      return encoder().EncodeHistogramObservation(
           event_record->project_context()->RefMetric(&metric), &report, event.day_index(),
           int_histogram_event->event_code(), int_histogram_event->component(),
           std::move(histogram));
@@ -1028,7 +1028,7 @@
         } else {
           *serialized_proto = custom_event->serialized_proto();
         }
-        return encoder()->EncodeSerializedCustomObservation(
+        return encoder().EncodeSerializedCustomObservation(
             event_record->project_context()->RefMetric(&metric), &report, event.day_index(),
             std::move(serialized_proto));
       }
@@ -1042,9 +1042,8 @@
         event_values = std::make_unique<google::protobuf::Map<std::string, CustomDimensionValue>>(
             custom_event->values());
       }
-      return encoder()->EncodeCustomObservation(event_record->project_context()->RefMetric(&metric),
-                                                &report, event.day_index(),
-                                                std::move(event_values));
+      return encoder().EncodeCustomObservation(event_record->project_context()->RefMetric(&metric),
+                                               &report, event.day_index(), std::move(event_values));
     }
 
     default:
diff --git a/src/logger/event_loggers.h b/src/logger/event_loggers.h
index 9e031a0..a87a175 100644
--- a/src/logger/event_loggers.h
+++ b/src/logger/event_loggers.h
@@ -33,7 +33,7 @@
 // of EventLogger for each of several Metric types.
 class EventLogger {
  public:
-  EventLogger(const Encoder* encoder, local_aggregation::EventAggregator* event_aggregator,
+  EventLogger(const Encoder& encoder, local_aggregation::EventAggregator* event_aggregator,
               local_aggregation::LocalAggregation* local_aggregation,
               const ObservationWriter* observation_writer,
               const system_data::SystemDataInterface* system_data,
@@ -53,7 +53,7 @@
   //
   // The remaining parameters are passed to the EventLogger constructor.
   static std::unique_ptr<EventLogger> Create(
-      MetricDefinition::MetricType metric_type, const Encoder* encoder,
+      MetricDefinition::MetricType metric_type, const Encoder& encoder,
       local_aggregation::EventAggregator* event_aggregator,
       local_aggregation::LocalAggregation* local_aggregation,
       const ObservationWriter* observation_writer,
@@ -72,7 +72,7 @@
                                  EventRecord* event_record);
 
  protected:
-  const Encoder* encoder() { return encoder_; }
+  const Encoder& encoder() { return encoder_; }
   local_aggregation::EventAggregator* event_aggregator() { return event_aggregator_; }
   local_aggregation::LocalAggregation* local_aggregation() { return local_aggregation_; }
 
@@ -151,7 +151,7 @@
   // |trace| The string output from TraceEvent().
   static void TraceLogSuccess(const EventRecord& event_record, const std::string& trace);
 
-  const Encoder* encoder_;
+  const Encoder& encoder_;
   local_aggregation::EventAggregator* event_aggregator_;
   local_aggregation::LocalAggregation* local_aggregation_;
   const ObservationWriter* observation_writer_;
diff --git a/src/logger/event_loggers_test.cc b/src/logger/event_loggers_test.cc
index 753a353..ac5b46d 100644
--- a/src/logger/event_loggers_test.cc
+++ b/src/logger/event_loggers_test.cc
@@ -118,14 +118,14 @@
     project_context_factory_ = GetTestProjectContextFactory(registry_base64);
 
     event_aggregator_mgr_ = std::make_unique<TestEventAggregatorManager>(
-        cfg, fs(), encoder_.get(), observation_writer_.get(), *metadata_builder_);
+        cfg, fs(), *encoder_, observation_writer_.get(), *metadata_builder_);
     local_aggregation_ = std::make_unique<LocalAggregation>(
         cfg, project_context_factory_.get(), &system_data_, *metadata_builder_, fs(),
         observation_writer_.get(), civil_time_converter_.get());
     project_context_ = GetTestProject(registry_base64);
     event_aggregator_mgr_->GetEventAggregator()->UpdateAggregationConfigs(*project_context_);
     logger_ = std::make_unique<EventLoggerClass>(
-        encoder_.get(), event_aggregator_mgr_->GetEventAggregator(), local_aggregation_.get(),
+        *encoder_, event_aggregator_mgr_->GetEventAggregator(), local_aggregation_.get(),
         observation_writer_.get(), &system_data_, civil_time_converter_.get());
   }
 
@@ -1507,7 +1507,7 @@
     cfg.obs_history_proto_store_path = obs_history_path();
 
     event_aggregator_mgr_ = std::make_unique<TestEventAggregatorManager>(
-        cfg, fs(), encoder_.get(), observation_writer_.get(), *metadata_builder_);
+        cfg, fs(), *encoder_, observation_writer_.get(), *metadata_builder_);
     event_aggregator_mgr_->GetEventAggregator()->UpdateAggregationConfigs(*project_context_);
     local_aggregation_ = std::make_unique<LocalAggregation>(
         cfg, project_context_factory_.get(), &system_data_, *metadata_builder_, fs(),
@@ -1517,8 +1517,8 @@
   std::unique_ptr<EventLogger> GetEventLoggerForMetricType(
       MetricDefinition::MetricType metric_type) {
     auto logger = EventLogger::Create(
-        metric_type, nullptr, event_aggregator_mgr_->GetEventAggregator(), local_aggregation_.get(),
-        nullptr, nullptr, civil_time_converter_.get());
+        metric_type, *encoder_, event_aggregator_mgr_->GetEventAggregator(),
+        local_aggregation_.get(), nullptr, nullptr, civil_time_converter_.get());
     return logger;
   }
 
@@ -1751,7 +1751,7 @@
     cfg.local_aggregate_store_dir = local_aggregation_store_path();
 
     event_aggregator_mgr_ = std::make_unique<TestEventAggregatorManager>(
-        cfg, fs(), encoder_.get(), observation_writer_.get(), *metadata_builder_);
+        cfg, fs(), *encoder_, observation_writer_.get(), *metadata_builder_);
     event_aggregator_mgr_->GetEventAggregator()->UpdateAggregationConfigs(*project_context_);
     local_aggregation_ = std::make_unique<LocalAggregation>(
         cfg, project_context_factory_.get(), &system_data_, *metadata_builder_, fs(),
@@ -1777,8 +1777,8 @@
   std::unique_ptr<EventLogger> GetEventLoggerForMetricType(
       MetricDefinition::MetricType metric_type) {
     auto logger = EventLogger::Create(
-        metric_type, nullptr, event_aggregator_mgr_->GetEventAggregator(), local_aggregation_.get(),
-        nullptr, nullptr, civil_time_converter_.get());
+        metric_type, *encoder_, event_aggregator_mgr_->GetEventAggregator(),
+        local_aggregation_.get(), nullptr, nullptr, civil_time_converter_.get());
     return logger;
   }
 
diff --git a/src/logger/logger.cc b/src/logger/logger.cc
index 5f00e92..b33ff6f 100644
--- a/src/logger/logger.cc
+++ b/src/logger/logger.cc
@@ -40,7 +40,7 @@
 
 }  // namespace
 
-Logger::Logger(std::unique_ptr<ProjectContext> project_context, const Encoder* encoder,
+Logger::Logger(std::unique_ptr<ProjectContext> project_context, const Encoder& encoder,
                EventAggregator* event_aggregator,
                local_aggregation::LocalAggregation* local_aggregation,
                ObservationWriter* observation_writer, system_data::SystemDataInterface* system_data,
@@ -52,7 +52,7 @@
              std::weak_ptr<UndatedEventManager>(), std::move(experiment_ids),
              enable_replacement_metrics, internal_metrics) {}
 
-Logger::Logger(std::unique_ptr<ProjectContext> project_context, const Encoder* encoder,
+Logger::Logger(std::unique_ptr<ProjectContext> project_context, const Encoder& encoder,
                EventAggregator* event_aggregator,
                local_aggregation::LocalAggregation* local_aggregation,
                ObservationWriter* observation_writer, system_data::SystemDataInterface* system_data,
@@ -74,7 +74,6 @@
       enable_replacement_metrics_(enable_replacement_metrics),
       internal_metrics_(internal_metrics) {
   CHECK(project_context_);
-  CHECK(encoder_);
   CHECK(event_aggregator_);
   CHECK(local_aggregation_);
   CHECK(observation_writer_);
diff --git a/src/logger/logger.h b/src/logger/logger.h
index 058fc21..fc10bcc 100644
--- a/src/logger/logger.h
+++ b/src/logger/logger.h
@@ -75,7 +75,7 @@
   // |internal_metrics| An instance of InternalMetrics, used internally by the
   // Logger to send metrics about Cobalt to Cobalt. If nullptr, no such internal
   // logging will be performed by this Logger.
-  Logger(std::unique_ptr<ProjectContext> project_context, const Encoder* encoder,
+  Logger(std::unique_ptr<ProjectContext> project_context, const Encoder& encoder,
          local_aggregation::EventAggregator* event_aggregator,
          local_aggregation::LocalAggregation* local_aggregation,
          ObservationWriter* observation_writer, system_data::SystemDataInterface* system_data,
@@ -124,7 +124,7 @@
   // |internal_metrics| An instance of InternalMetrics, used internally by the
   // Logger to send metrics about Cobalt to Cobalt. If nullptr, no such internal
   // logging will be performed by this Logger.
-  Logger(std::unique_ptr<ProjectContext> project_context, const Encoder* encoder,
+  Logger(std::unique_ptr<ProjectContext> project_context, const Encoder& encoder,
          local_aggregation::EventAggregator* event_aggregator,
          local_aggregation::LocalAggregation* local_aggregation,
          ObservationWriter* observation_writer, system_data::SystemDataInterface* system_data,
@@ -201,7 +201,7 @@
   // Logger class.
   const std::shared_ptr<const ProjectContext> project_context_;
 
-  const Encoder* encoder_;
+  const Encoder& encoder_;
   local_aggregation::EventAggregator* event_aggregator_;
   local_aggregation::LocalAggregation* local_aggregation_;
   const ObservationWriter* observation_writer_;
diff --git a/src/logger/logger_test.cc b/src/logger/logger_test.cc
index edbf3e1..714f86c 100644
--- a/src/logger/logger_test.cc
+++ b/src/logger/logger_test.cc
@@ -115,7 +115,7 @@
     project_context_factory_ = GetTestProjectContextFactory(registry_base64);
 
     event_aggregator_mgr_ = std::make_unique<TestEventAggregatorManager>(
-        cfg, fs(), encoder_.get(), observation_writer_.get(), *metadata_builder_);
+        cfg, fs(), *encoder_, observation_writer_.get(), *metadata_builder_);
     local_aggregation_ = std::make_unique<LocalAggregation>(
         cfg, project_context_factory_.get(), &system_data_, *metadata_builder_, fs(),
         observation_writer_.get(), civil_time_converter_.get());
@@ -123,16 +123,15 @@
     internal_metrics_ = InternalMetrics::NewWithLogger(internal_logger_.get(), nullptr);
 
     undated_event_manager_ = std::make_shared<UndatedEventManager>(
-        encoder_.get(), event_aggregator_mgr_->GetEventAggregator(), local_aggregation_.get(),
+        *encoder_, event_aggregator_mgr_->GetEventAggregator(), local_aggregation_.get(),
         observation_writer_.get(), &system_data_, civil_time_converter_.get());
 
     std::vector<uint32_t> fake_experiment_ids = {123456789, 987654321};
-    logger_ = std::make_unique<Logger>(GetTestProject(registry_base64), encoder_.get(),
-                                       event_aggregator_mgr_->GetEventAggregator(),
-                                       local_aggregation_.get(), observation_writer_.get(),
-                                       &system_data_, validated_clock_.get(),
-                                       civil_time_converter_.get(), undated_event_manager_,
-                                       fake_experiment_ids, true, internal_metrics_.get());
+    logger_ = std::make_unique<Logger>(
+        GetTestProject(registry_base64), *encoder_, event_aggregator_mgr_->GetEventAggregator(),
+        local_aggregation_.get(), observation_writer_.get(), &system_data_, validated_clock_.get(),
+        civil_time_converter_.get(), undated_event_manager_, fake_experiment_ids, true,
+        internal_metrics_.get());
   }
 
   void TearDown() override {
@@ -1165,7 +1164,7 @@
         GetTestProjectContextFactory(testing::all_report_types::kCobaltRegistryBase64);
 
     event_aggregator_mgr_ = std::make_unique<TestEventAggregatorManager>(
-        cfg, fs(), encoder_.get(), observation_writer_.get(), *metadata_builder_);
+        cfg, fs(), *encoder_, observation_writer_.get(), *metadata_builder_);
     local_aggregation_ = std::make_unique<LocalAggregation>(
         cfg, project_context_factory_.get(), &system_data_, *metadata_builder_, fs(),
         observation_writer_.get(), civil_time_converter_.get());
@@ -1174,7 +1173,7 @@
 
     std::vector<uint32_t> empty_experiment_ids = {};
     logger_ = std::make_unique<Logger>(
-        GetTestProject(testing::all_report_types::kCobaltRegistryBase64), encoder_.get(),
+        GetTestProject(testing::all_report_types::kCobaltRegistryBase64), *encoder_,
         event_aggregator_mgr_->GetEventAggregator(), local_aggregation_.get(),
         observation_writer_.get(), &system_data_, civil_time_converter_.get(), empty_experiment_ids,
         internal_logger_.get());
diff --git a/src/logger/undated_event_manager.cc b/src/logger/undated_event_manager.cc
index e52c33d..3085deb 100644
--- a/src/logger/undated_event_manager.cc
+++ b/src/logger/undated_event_manager.cc
@@ -19,7 +19,7 @@
 
 using local_aggregation::EventAggregator;
 
-UndatedEventManager::UndatedEventManager(const Encoder* encoder, EventAggregator* event_aggregator,
+UndatedEventManager::UndatedEventManager(const Encoder& encoder, EventAggregator* event_aggregator,
                                          local_aggregation::LocalAggregation* local_aggregation,
                                          ObservationWriter* observation_writer,
                                          system_data::SystemDataInterface* system_data,
@@ -32,7 +32,6 @@
       system_data_(system_data),
       civil_time_converter_(civil_time_converter),
       max_saved_events_(max_saved_events) {
-  CHECK(encoder_);
   CHECK(event_aggregator_);
   CHECK(local_aggregation_);
   CHECK(observation_writer_);
diff --git a/src/logger/undated_event_manager.h b/src/logger/undated_event_manager.h
index 0555c9e..1cd0d91 100644
--- a/src/logger/undated_event_manager.h
+++ b/src/logger/undated_event_manager.h
@@ -51,7 +51,7 @@
   //
   // |max_saved_events| The maximum number of saved events. When this limit is reached, old events
   // are dropped to make room for new events.
-  UndatedEventManager(const Encoder* encoder, local_aggregation::EventAggregator* event_aggregator,
+  UndatedEventManager(const Encoder& encoder, local_aggregation::EventAggregator* event_aggregator,
                       local_aggregation::LocalAggregation* local_aggregation,
                       ObservationWriter* observation_writer,
                       system_data::SystemDataInterface* system_data,
@@ -84,7 +84,7 @@
                           const std::chrono::steady_clock::time_point& reference_monotonic_time);
 
   // Used only to construct EventLogger instances.
-  const Encoder* encoder_;
+  const Encoder& encoder_;
   local_aggregation::EventAggregator* event_aggregator_;
   local_aggregation::LocalAggregation* local_aggregation_;
   const ObservationWriter* observation_writer_;
diff --git a/src/logger/undated_event_manager_test.cc b/src/logger/undated_event_manager_test.cc
index fe2afc8..d7a2d8c 100644
--- a/src/logger/undated_event_manager_test.cc
+++ b/src/logger/undated_event_manager_test.cc
@@ -94,7 +94,7 @@
         GetTestProjectContextFactory(testing::all_report_types::kCobaltRegistryBase64);
 
     event_aggregator_mgr_ = std::make_unique<EventAggregatorManager>(
-        cfg, fs(), encoder_.get(), observation_writer_.get(), *metadata_builder_);
+        cfg, fs(), *encoder_, observation_writer_.get(), *metadata_builder_);
     local_aggregation_ = std::make_unique<LocalAggregation>(
         cfg, project_context_factory_.get(), &system_data_, *metadata_builder_, fs(),
         observation_writer_.get(), civil_time_converter_.get());
@@ -103,7 +103,7 @@
     internal_metrics_ = logger::InternalMetrics::NewWithLogger(internal_logger_.get(), nullptr);
 
     undated_event_manager_ = std::make_unique<UndatedEventManager>(
-        encoder_.get(), event_aggregator_mgr_->GetEventAggregator(), local_aggregation_.get(),
+        *encoder_, event_aggregator_mgr_->GetEventAggregator(), local_aggregation_.get(),
         observation_writer_.get(), &system_data_, civil_time_converter_.get(), kMaxSavedEvents);
     undated_event_manager_->SetSteadyClock(mock_steady_clock_);
   }
diff --git a/src/public/cobalt_service.cc b/src/public/cobalt_service.cc
index e32ec04..146a672 100644
--- a/src/public/cobalt_service.cc
+++ b/src/public/cobalt_service.cc
@@ -113,12 +113,12 @@
                           encrypt_to_analyzer_.get()),
       civil_time_converter_(cfg.civil_time_converter ? std::move(cfg.civil_time_converter)
                                                      : std::make_unique<util::UtcTimeConverter>()),
-      event_aggregator_manager_(cfg, *fs_, &logger_encoder_, &observation_writer_,
+      event_aggregator_manager_(cfg, *fs_, logger_encoder_, &observation_writer_,
                                 metadata_builder_),
       local_aggregation_(cfg, global_project_context_factory_.get(), &system_data_,
                          metadata_builder_, *fs_, &observation_writer_, civil_time_converter()),
       undated_event_manager_(new logger::UndatedEventManager(
-          &logger_encoder_, event_aggregator_manager_.GetEventAggregator(), &local_aggregation_,
+          logger_encoder_, event_aggregator_manager_.GetEventAggregator(), &local_aggregation_,
           &observation_writer_, &system_data_, civil_time_converter())),
       validated_clock_(cfg.validated_clock),
       internal_logger_(
@@ -180,13 +180,13 @@
       include_internal_logger ? internal_metrics_.get() : nullptr;
   if (undated_event_manager_) {
     return std::make_unique<logger::Logger>(
-        std::move(project_context), &logger_encoder_,
-        event_aggregator_manager_.GetEventAggregator(), &local_aggregation_, &observation_writer_,
-        &system_data_, validated_clock_, civil_time_converter(), undated_event_manager_,
-        std::move(experiment_ids), enable_replacement_metrics_, metrics);
+        std::move(project_context), logger_encoder_, event_aggregator_manager_.GetEventAggregator(),
+        &local_aggregation_, &observation_writer_, &system_data_, validated_clock_,
+        civil_time_converter(), undated_event_manager_, std::move(experiment_ids),
+        enable_replacement_metrics_, metrics);
   }
   return std::make_unique<logger::Logger>(
-      std::move(project_context), &logger_encoder_, event_aggregator_manager_.GetEventAggregator(),
+      std::move(project_context), logger_encoder_, event_aggregator_manager_.GetEventAggregator(),
       &local_aggregation_, &observation_writer_, &system_data_, civil_time_converter(),
       std::move(experiment_ids), enable_replacement_metrics_, metrics);
 }