// Copyright 2019 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#pragma once

#include <trace-reader/reader.h>

#include <stdint.h>
#include <string>
#include <utility>
#include <vector>

#include <zxtest/zxtest.h>

namespace trace {
namespace test {

template <typename T>
uint64_t ToWord(const T& value) {
    return *reinterpret_cast<const uint64_t*>(&value);
}

static inline trace::TraceReader::RecordConsumer MakeRecordConsumer(
    fbl::Vector<trace::Record>* out_records) {
    return [out_records](trace::Record record) {
        out_records->push_back(std::move(record));
    };
}

static inline trace::TraceReader::ErrorHandler MakeErrorHandler(fbl::String* out_error) {
    return [out_error](fbl::String error) {
        *out_error = std::move(error);
    };
}

} // namespace test
} // namespace trace
