a7725d354c
Users of the web_service library shouldn't need to care about an external library like json.h. However, given it's exposed in our interface, this requires that other libraries publicly link in the JSON library. We can do better. By using the PImpl idiom, we can hide this dependency in the cpp file and remove the need to link that library in altogether.
44 lines
1.5 KiB
C++
44 lines
1.5 KiB
C++
// Copyright 2017 Citra Emulator Project
|
|
// Licensed under GPLv2 or any later version
|
|
// Refer to the license.txt file included.
|
|
|
|
#pragma once
|
|
|
|
#include <chrono>
|
|
#include <string>
|
|
#include "common/telemetry.h"
|
|
|
|
namespace WebService {
|
|
|
|
/**
|
|
* Implementation of VisitorInterface that serialized telemetry into JSON, and submits it to the
|
|
* yuzu web service
|
|
*/
|
|
class TelemetryJson : public Telemetry::VisitorInterface {
|
|
public:
|
|
TelemetryJson(std::string host, std::string username, std::string token);
|
|
~TelemetryJson() override;
|
|
|
|
void Visit(const Telemetry::Field<bool>& field) override;
|
|
void Visit(const Telemetry::Field<double>& field) override;
|
|
void Visit(const Telemetry::Field<float>& field) override;
|
|
void Visit(const Telemetry::Field<u8>& field) override;
|
|
void Visit(const Telemetry::Field<u16>& field) override;
|
|
void Visit(const Telemetry::Field<u32>& field) override;
|
|
void Visit(const Telemetry::Field<u64>& field) override;
|
|
void Visit(const Telemetry::Field<s8>& field) override;
|
|
void Visit(const Telemetry::Field<s16>& field) override;
|
|
void Visit(const Telemetry::Field<s32>& field) override;
|
|
void Visit(const Telemetry::Field<s64>& field) override;
|
|
void Visit(const Telemetry::Field<std::string>& field) override;
|
|
void Visit(const Telemetry::Field<const char*>& field) override;
|
|
void Visit(const Telemetry::Field<std::chrono::microseconds>& field) override;
|
|
|
|
void Complete() override;
|
|
|
|
private:
|
|
struct Impl;
|
|
std::unique_ptr<Impl> impl;
|
|
};
|
|
|
|
} // namespace WebService
|