/*
 * Copyright (C) 2021 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.car.telemetry.databroker;

import android.os.Bundle;

import com.android.car.telemetry.TelemetryProto;

/**
 * Subscriber class that receive published data and schedules tasks for execution on the data.
 */
public class DataSubscriber {
    private final TelemetryProto.Subscriber mSubscriber;

    public DataSubscriber(TelemetryProto.MetricsConfig metricsConfig,
            TelemetryProto.Subscriber subscriber) {
        mSubscriber = subscriber;
    }

    /**
     * Returns the publisher param {@link com.android.car.telemetry.TelemetryProto.Publisher} that
     * contains the data source and the config.
     */
    public TelemetryProto.Publisher getPublisherParam() {
        return mSubscriber.getPublisher();
    }

    /** Pushes data to the subscriber. */
    public void push(Bundle data) {
        // TODO(b/187743369): implement
    }
}
