aboutsummaryrefslogtreecommitdiff
path: root/src/zencore/include
diff options
context:
space:
mode:
authorStefan Boberg <[email protected]>2024-03-26 13:31:10 +0100
committerGitHub Enterprise <[email protected]>2024-03-26 13:31:10 +0100
commit59e51bf811a5907983b84f3e2ed14e47a7210e75 (patch)
treea8418dec9b8184ad76d6922da23cebe9db290897 /src/zencore/include
parentadd filter to projectstore entries request (#25) (diff)
downloadzen-59e51bf811a5907983b84f3e2ed14e47a7210e75.tar.xz
zen-59e51bf811a5907983b84f3e2ed14e47a7210e75.zip
add yaml serialization support (#3)
this change adds serialization of payloads as YAML, but not parsing. The implementation is somewhat based on the JSON path, and may be collapsed eventually as it is possible to serialize JSON format using the same code it also separates out the JSON serialization into a separate file for ease of maintenance any HTTP request response may be formatted as yaml by using a `.yaml` suffix or an `Accept: text/yaml` header
Diffstat (limited to 'src/zencore/include')
-rw-r--r--src/zencore/include/zencore/compactbinary.h32
1 files changed, 30 insertions, 2 deletions
diff --git a/src/zencore/include/zencore/compactbinary.h b/src/zencore/include/zencore/compactbinary.h
index 675e2a8d4..a8707ba2b 100644
--- a/src/zencore/include/zencore/compactbinary.h
+++ b/src/zencore/include/zencore/compactbinary.h
@@ -895,6 +895,11 @@ private:
ZENCORE_API void CompactBinaryToJson(const CbArrayView& Object, StringBuilderBase& Builder);
/**
+ * Serialize a compact binary array to YAML.
+ */
+ZENCORE_API void CompactBinaryToYaml(const CbArrayView& Object, StringBuilderBase& Builder);
+
+/**
* Array of CbField that have no names.
*
* Accessing a field of the array requires iteration. Access by index is not provided because the
@@ -974,6 +979,12 @@ public:
return Builder;
}
+ StringBuilderBase& ToYaml(StringBuilderBase& Builder) const
+ {
+ CompactBinaryToYaml(*this, Builder);
+ return Builder;
+ }
+
private:
friend inline CbFieldViewIterator begin(const CbArrayView& Array) { return Array.CreateViewIterator(); }
friend inline CbFieldViewIterator end(const CbArrayView&) { return CbFieldViewIterator(); }
@@ -986,6 +997,10 @@ private:
* Serialize a compact binary object to JSON.
*/
ZENCORE_API void CompactBinaryToJson(const CbObjectView& Object, StringBuilderBase& Builder);
+/**
+ * Serialize a compact binary object to YAML.
+ */
+ZENCORE_API void CompactBinaryToYaml(const CbObjectView& Object, StringBuilderBase& Builder);
class CbObjectView : protected CbFieldView
{
@@ -1075,6 +1090,12 @@ public:
return Builder;
}
+ StringBuilderBase& ToYaml(StringBuilderBase& Builder) const
+ {
+ CompactBinaryToYaml(*this, Builder);
+ return Builder;
+ }
+
private:
friend inline CbFieldViewIterator begin(const CbObjectView& Object) { return Object.CreateViewIterator(); }
friend inline CbFieldViewIterator end(const CbObjectView&) { return CbFieldViewIterator(); }
@@ -1497,12 +1518,19 @@ end(CbFieldView&)
}
/**
- * Serialize serialized compact binary blob to jaons. It must be 0 to n fields with including type for each field
+ * Serialize serialized compact binary blob to JSON. It must be 0 to n fields with including type for each field
*/
ZENCORE_API void CompactBinaryToJson(MemoryView Data, StringBuilderBase& InBuilder);
+/**
+ * Serialize serialized compact binary blob to YAML. It must be 0 to n fields with including type for each field
+ */
+ZENCORE_API void CompactBinaryToYaml(MemoryView Data, StringBuilderBase& InBuilder);
+
ZENCORE_API std::vector<CbFieldView> ReadCompactBinaryStream(MemoryView Data);
-void uson_forcelink(); // internal
+void uson_forcelink(); // internal
+void cbjson_forcelink(); // internal
+void cbyaml_forcelink(); // internal
} // namespace zen