// Copyright 2014 The Chromium OS 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 METRICS_SERIALIZATION_SERIALIZATION_UTILS_H_
#define METRICS_SERIALIZATION_SERIALIZATION_UTILS_H_

#include <memory>
#include <string>
#include <vector>

namespace metrics {

class MetricSample;

// Metrics helpers to serialize and deserialize metrics collected by
// ChromeOS.
namespace SerializationUtils {

// Deserializes a sample passed as a string and return a sample.
// The return value will either be a std::unique_ptr to a Metric sample (if the
// deserialization was successful) or a NULL std::unique_ptr.
std::unique_ptr<MetricSample> ParseSample(const std::string& sample);

// Reads samples from a file, and modifies the file to reflect the samples
// processed.  If all samples are read, truncates the file to zero size and
// returns true.  If sample_batch_max_length is exceeded when reading a batch of
// samples, changes the file to logically contain only the remaining samples.
// Returns false if samples are left for further processing, true in all other
// cases (including errors).
bool ReadAndTruncateMetricsFromFile(
    const std::string& filename,
    std::vector<std::unique_ptr<MetricSample>>* metrics,
    size_t sample_batch_max_length);

// Serializes a sample and write it to filename.
// The format for the message is:
//  message_size, serialized_message
// where
//  * message_size is the total length of the message (message_size +
//    serialized_message) on 4 bytes
//  * serialized_message is the serialized version of sample (using ToString)
//
//  NB: the file will never leave the device so message_size will be written
//  with the architecture's endianness.
bool WriteMetricToFile(const MetricSample& sample, const std::string& filename);

// Maximum length of a serialized message.
static const size_t kMessageMaxLength = 1024;

// Maximum size of serialized messages that we will read and upload in one
// pass.  If a device does not have connectivity for a long time, a large
// number of messages can accumulate.  Without this limit, the large number of
// messages can put strain on resources (such as RAM for the metrics daemon's
// heap) when connectivity is restored and the upload is attempted.
static const size_t kSampleBatchMaxLength = 10 * 1024 * 1024;

}  // namespace SerializationUtils
}  // namespace metrics

#endif  // METRICS_SERIALIZATION_SERIALIZATION_UTILS_H_
