#pragma once
#include <glib.h>
#include <gio/gio.h>
#include <vector>
#include <string>
#include <endian.h>
#include "DBusObjectPath.h"
namespace ggk {
struct Utils
{
static void trimBeginInPlace(std::string &str);
static void trimEndInPlace(std::string &str);
static void trimInPlace(std::string &str);
static std::string trimBegin(const std::string &str);
static std::string trimEnd(const std::string &str);
static std::string trim(const std::string &str);
static std::string hex(uint8_t value);
static std::string hex(uint16_t value);
static std::string hex(uint32_t value);
static std::string hex(const uint8_t *pData, int count);
static std::string bluetoothAddressString(uint8_t *pAddress);
static GVariant *gvariantFromString(const char *pStr);
static GVariant *gvariantFromString(const std::string &str);
static GVariant *gvariantFromStringArray(const char *pStr, va_list args);
static GVariant *gvariantFromStringArray(const char *pStr, ...);
static GVariant *gvariantFromStringArray(const std::vector<std::string> &arr);
static GVariant *gvariantFromStringArray(const std::vector<const char *> &arr);
static GVariant *gvariantFromObject(const DBusObjectPath &path);
static GVariant *gvariantFromBoolean(bool b);
static GVariant *gvariantFromInt(gint16 value);
static GVariant *gvariantFromInt(gint32 value);
static GVariant *gvariantFromByteArray(const char *pStr);
static GVariant *gvariantFromByteArray(const std::string &str);
static GVariant *gvariantFromByteArray(const guint8 *pBytes, int count);
static GVariant *gvariantFromByteArray(const std::vector<guint8> bytes);
static GVariant *gvariantFromByteArray(const guint8 data);
static GVariant *gvariantFromByteArray(const gint8 data);
static GVariant *gvariantFromByteArray(const guint16 data);
static GVariant *gvariantFromByteArray(const gint16 data);
static GVariant *gvariantFromByteArray(const guint32 data);
static GVariant *gvariantFromByteArray(const gint32 data);
static GVariant *gvariantFromByteArray(const guint64 data);
static GVariant *gvariantFromByteArray(const gint64 data);
static std::string stringFromGVariantByteArray(const GVariant *pVariant);
static uint8_t endianToHost(uint8_t value) {return value;}
static uint8_t endianToHci(uint8_t value) {return value;}
static uint16_t endianToHost(uint16_t value) {return le16toh(value);}
static uint16_t endianToHci(uint16_t value) {return htole16(value);}
static uint32_t endianToHost(uint32_t value) {return le32toh(value);}
static uint32_t endianToHci(uint32_t value) {return htole32(value);}
};
};