/************************************************
*
* Data Source
* Copyright (C) 2020
* John Ryland
* All rights reserved
*
************************************************/
#pragma once
#ifndef DATA_SOURCE_HPP
#define DATA_SOURCE_HPP
#include <string>
#include <cstdint>
#include <functional>
#include "VectorSlice.hpp"
/*
// Instead of std::function callbacks, could be done this way
class DataConsumer
{
public:
enum class ReadResult
{
eSuccess,
eEndOfData,
eReadAgain,
eReadError
};
enum class OpenResult
{
eSuccess,
eOpenError
};
virtual void Opened(OpenResult aResult, OpenedDataSource& fd) = 0;
virtual void ReadCompletion(ReadResult aResult, VectorSlice<uint8_t> aBytesRead) = 0;
};
*/
class OpenedDataSource
{
public:
enum class ReadResult
{
eSuccess,
eEndOfData,
eReadAgain,
eReadError
};
using ReadCompletionCallback = std::function<void(ReadResult aResult, VectorSlice<uint8_t> aBytesRead)>;
virtual ~OpenedDataSource() = default;
virtual bool ReadBytes(size_t aNumberOfBytes, ReadCompletionCallback aCallback) = 0;
virtual bool ReadLine(ReadCompletionCallback aCallback) = 0;
virtual bool ReadAll(ReadCompletionCallback aCallback) = 0;
};
// Interface - could be a local file or might be a URL etc
class DataSource
{
public:
using OpenedCallback = std::function<void(OpenedDataSource* aOpenedDataSource)>;
virtual ~DataSource() = default;
virtual void Open(const char* aResourceLocator, OpenedCallback aCallback) = 0;
};
#endif // DATA_SOURCE_HPP