| //+------------------------------------------------------------------+
|
| //| JsonStrBuilder.mqh |
|
| //| Copyright 2026, Niquel Mendoza. |
|
| //| https://www.mql5.com/ |
|
| //+------------------------------------------------------------------+
|
| #property copyright "Copyright 2026, Niquel Mendoza."
|
| #property link "https://www.mql5.com/"
|
| #property strict
|
|
|
| #ifndef JSONPARSERBYLEO_SRC_JSONSTRBUILDER_MQH
|
| #define JSONPARSERBYLEO_SRC_JSONSTRBUILDER_MQH
|
|
|
| //+------------------------------------------------------------------+
|
| //| |
|
| //+------------------------------------------------------------------+
|
| #include "BuilderDefs.mqh"
|
|
|
| //+------------------------------------------------------------------+
|
| //| |
|
| //+------------------------------------------------------------------+
|
| namespace TSN
|
| {
|
| //+------------------------------------------------------------------+
|
| //| |
|
| //+------------------------------------------------------------------+
|
| #define JSONBUILDERSTR_CHECK_PUT_ENCODE_STR(str, needed) \
|
| const int l = StringLen(str); \
|
| const int ex = JSONESCAPE_CR_ENCODESTR(l) + (needed); \
|
| JSONBUILDER_EXPAND_E(ex)
|
|
|
| //+------------------------------------------------------------------+
|
| #define JSONBUILDERSTR_CHECK_PUT_ENCODE_STRU(arr, needed) \
|
| const int l = ArraySize(arr); \
|
| const int ex = JSONESCAPE_CR_ENCODESTR(l) + (needed); \
|
| JSONBUILDER_EXPAND_E(ex)
|
|
|
| //+------------------------------------------------------------------+
|
| #define JSONBUILDERSTR_GENERIC_VALS \
|
| JSON_BUILDER_COMMA_F \
|
| m_buf[m_pos++] = '\\'; \
|
| m_buf[m_pos++] = '"'; \
|
| CJsonEscape::EncodeStr(v, l, m_buf, m_pos); \
|
| m_buf[m_pos++] = '\\'; \
|
| m_buf[m_pos++] = '"';
|
|
|
| //+------------------------------------------------------------------+
|
| #define JSONBUILDERSTR_GENERIC_VALS_WVER \
|
| JSONBUILDER_EXPAND(3) \
|
| JSON_BUILDER_COMMA_F \
|
| m_buf[m_pos++] = '\\'; \
|
| m_buf[m_pos++] = '"'; \
|
| PutRaw(v); \
|
| JSONBUILDER_EXPAND(2) \
|
| m_buf[m_pos++] = '\\'; \
|
| m_buf[m_pos++] = '"';
|
|
|
|
|
| //+------------------------------------------------------------------+
|
| //| |
|
| //+------------------------------------------------------------------+
|
| class CJsonBuilderStr : public CJsonBuilderBase
|
| {
|
| public:
|
| CJsonBuilderStr(int initial_cap = 1024): CJsonBuilderBase(initial_cap) {}
|
| ~CJsonBuilderStr() {}
|
|
|
| //--- Key / Values
|
| CJsonBuilderStr* Key(const string& k);
|
| CJsonBuilderStr* KeyWV(const string& k);
|
|
|
| // String- Con validacion
|
| CJsonBuilderStr* ValS(const string& v);
|
| CJsonBuilderStr* ValU(const uchar& v[]);
|
| CJsonBuilderStr* ValSNoRef(const string v);
|
|
|
| // String- Sin validacion (witohut validation WV)
|
| CJsonBuilderStr* ValSWV(const string& v);
|
| CJsonBuilderStr* ValUWV(const uchar& v[]);
|
| CJsonBuilderStr* ValSNoRefWV(const string v);
|
|
|
| // Valid json
|
| // CJsonBuilderStr* ValidJson(const uchar& v[], int count = WHOLE_ARRAY);
|
| // CJsonBuilderStr* ValidJson(const string& fragment);
|
| // CJsonBuilderStr* ValidJsonNoRef(const string fragment);
|
| };
|
|
|
| //+------------------------------------------------------------------+
|
| //| |
|
| //+------------------------------------------------------------------+
|
| CJsonBuilderStr* CJsonBuilderStr::Key(const string& k)
|
| {
|
| //---
|
| JSONBUILDERSTR_CHECK_PUT_ENCODE_STR(k, 6)
|
|
|
| //---
|
| JSON_BUILDER_COMMA_F
|
| m_buf[m_pos++] = '\\';
|
| m_buf[m_pos++] = '"';
|
| CJsonEscape::EncodeStr(k, l, m_buf, m_pos);
|
| m_buf[m_pos++] = '\\';
|
| m_buf[m_pos++] = '"';
|
| m_buf[m_pos++] = ':';
|
|
|
| //---
|
| m_stack_first[m_sp] = true;
|
| return &this;
|
| }
|
|
|
|
|
|
|
| //+------------------------------------------------------------------+
|
| //| |
|
| //+------------------------------------------------------------------+
|
| CJsonBuilderStr* CJsonBuilderStr::ValU(const uchar &v[])
|
| {
|
| JSONBUILDERSTR_CHECK_PUT_ENCODE_STRU(v, 5)
|
| JSONBUILDERSTR_GENERIC_VALS
|
| return &this;
|
| }
|
|
|
| //+------------------------------------------------------------------+
|
| CJsonBuilderStr* CJsonBuilderStr::ValS(const string& v)
|
| {
|
| JSONBUILDERSTR_CHECK_PUT_ENCODE_STR(v, 5)
|
| JSONBUILDERSTR_GENERIC_VALS
|
| return &this;
|
| }
|
|
|
| //+------------------------------------------------------------------+
|
| CJsonBuilderStr* CJsonBuilderStr::ValSNoRef(const string v)
|
| {
|
| JSONBUILDERSTR_CHECK_PUT_ENCODE_STR(v, 5)
|
| JSONBUILDERSTR_GENERIC_VALS
|
| return &this;
|
| }
|
|
|
|
|
| //+------------------------------------------------------------------+
|
| //| |
|
| //+------------------------------------------------------------------+
|
| // WV en key solo acepta ASCCI puro no caracteres de control (no espca) menos emojis (tipico en keys harcodeadas)
|
| // Si reuiqer full use la version completa
|
| CJsonBuilderStr* CJsonBuilderStr::KeyWV(const string &k)
|
| {
|
| //---
|
| const int l = StringLen(k);
|
| const int req = l + 6;
|
| JSONBUILDER_EXPAND(req)
|
|
|
| //---
|
| JSON_BUILDER_COMMA_F
|
| m_buf[m_pos++] = '\\';
|
| m_buf[m_pos++] = '"';
|
|
|
| //---
|
| for(int i = 0; i < l; i++)
|
| m_buf[m_pos++] = (uchar)k[i];
|
|
|
| //---
|
| m_buf[m_pos++] = '\\';
|
| m_buf[m_pos++] = '"';
|
| m_buf[m_pos++] = ':';
|
|
|
| //---
|
| m_stack_first[m_sp] = true;
|
| return &this;
|
| }
|
|
|
| //+------------------------------------------------------------------+
|
| //| |
|
| //+------------------------------------------------------------------+
|
| CJsonBuilderStr* CJsonBuilderStr::ValSWV(const string& v)
|
| {
|
| JSONBUILDERSTR_GENERIC_VALS_WVER
|
| return &this;
|
| }
|
|
|
| //+------------------------------------------------------------------+
|
| CJsonBuilderStr* CJsonBuilderStr::ValSNoRefWV(const string v)
|
| {
|
| JSONBUILDERSTR_GENERIC_VALS_WVER
|
| return &this;
|
| }
|
|
|
| //+------------------------------------------------------------------+
|
| CJsonBuilderStr* CJsonBuilderStr::ValUWV(const uchar &v[])
|
| {
|
| JSONBUILDERSTR_GENERIC_VALS_WVER
|
| return &this;
|
| }
|
|
|
|
|
| //+------------------------------------------------------------------+
|
| //| |
|
| //+------------------------------------------------------------------+
|
| /*CJsonBuilderStr* CJsonBuilderStr::ValidJson(const uchar& v[], int count = WHOLE_ARRAY)
|
| {
|
| JSON_BUILDER_COMMA
|
| PutRaw(v, count);
|
| return &this;
|
| }
|
|
|
| //+------------------------------------------------------------------+
|
| CJsonBuilderStr* CJsonBuilderStr::ValidJson(const string& fragment)
|
| {
|
| JSON_BUILDER_COMMA
|
| PutRaw(fragment);
|
| return &this;
|
| }
|
|
|
| //+------------------------------------------------------------------+
|
| CJsonBuilderStr* CJsonBuilderStr::ValidJsonNoRef(const string fragment)
|
| {
|
| JSON_BUILDER_COMMA
|
| PutRaw(fragment);
|
| return &this;
|
| }
|
| */
|
|
|
| //--- end namespace
|
| }
|
| #endif // JSONPARSERBYLEO_SRC_JSONSTRBUILDER_MQH
|
| //+------------------------------------------------------------------+
|