#include "pch.h"

#include "json/jsonVCWrapper.h"

bool  toWstring(const jsonobj& j, std::wstring& dst)
{
	if (j.is_string()) { // 判断是否为string类型的数据，避免get函数抛出异常
		dst = utf8_16(j.get<std::string>());
		return true;
	}
	else {
		return false;
	}
}


#ifdef _UNICODE


void to_json(jsonobj& j, const CString& p) {
	j = CStringToUtf8(p);
}

void from_json(const jsonobj& j, CString& p) {
	if (j.is_string()) { // 判断是否为string类型的数据，避免get函数抛出异常
		p = CStringFromUtf8(j.get<std::string>());
	}
	else {
		// 没法返回错误
	}
}

#else // 未测试

void to_json(jsonobj& j, const CString& p) {
	j = Utf8ToGbk((LPCSTR)p);
}

void from_json(const jsonobj& j, CString& p) {
	if (j.is_string()) { // 判断是否为string类型的数据，避免get函数抛出异常
		p = Utf8ToGbk(j.get<std::string>()).c_str();
	}
	else {
		// 没法返回错误
	}
}


#endif

void to_json(jsonobj& j, const CPoint& p)
{
	j["x"] = p.x;
	j["y"] = p.y;
}

void from_json(const jsonobj& j, CPoint& p)
{
	readWithDefault(j, "x", p.x, 0);
	readWithDefault(j, "y", p.y, 0);
}

void to_json(jsonobj& j, const CSize& p)
{
	j["cx"] = p.cx;
	j["cy"] = p.cy;
}
void from_json(const jsonobj& j, CSize& p)
{
	readWithDefault(j, "cx", p.cx, 0);
	readWithDefault(j, "cy", p.cy, 0);
}

void to_json(jsonobj& j, const CRect& p)
{
	j["x"] = p.left;
	j["y"] = p.top;
	j["w"] = p.right-p.left;
	j["h"] = p.bottom-p.top;
}
void from_json(const jsonobj& j, CRect& p)
{
	int w, h;
	readWithDefault(j, "x", p.left, 0);
	readWithDefault(j, "y", p.top, 0);
	readWithDefault(j, "w", w, 0);
	readWithDefault(j, "h", h, 0);
	p.right = p.left + w;
	p.bottom = p.top + h;
}