voile.cbor
CBOR data module
This module provides functionality for working with CBOR (Concise Binary Object Representation) data.
It includes definitions for various CBOR data types, a builder for constructing CBOR values,
and methods for converting between CBOR and native D types.
See Also:
RFC 7049
- enum auto
isBinary(T); - Determines if the type is binary
- auto
kind(string name, string value);
autokind(string value);
autokind(string value)(); - Kind attributeAttribute used for serialization of SumType. By adding this attribute to all aggregate types used in SumType, they become serializable.
- auto
converter(T1, T2)(void function(in T2, ref T1) from, void function(in T1, ref T2) to);
autoconverter(T1, T2)(T1 function(T2) from, T2 function(in T1) to);
autoconverterString(T)(T function(string) from, string function(in T) to);
aliasconvStr= converterString(T)(T function(string) from, string function(in T) to);
autoconverterBinary(T)(T function(immutable(ubyte)[]) from, immutable(ubyte)[] function(in T) to);
aliasconvBin= converterBinary(T)(T function(immutable(ubyte)[]) from, immutable(ubyte)[] function(in T) to); - Attribute converting method
- auto
converterSysTime();
autoconverterDateTime();
autoconverterDate();
autoconverterTimeOfDay();
autoconverterUUID();
autoconverterDuration(); - Special conveter attributes
- enum auto
isSerializableTuple(T); - Determines if the Tuple can be serialized to CBOR formatThis template returns
trueif the type T meets the following conditions:- T is a Tuple
- All members of the Tuple are serializable
Parameters:T The type to check Returns:trueif T is a serializable sum type,falseotherwise - enum auto
isSerializableSumType(T); - Determines if the SumType can be serialized to CBOR formatThis template returns
trueif the type T meets the following conditions:- T is a SumType
- All members of the SumType are serializable
- All members of the SumType have the @kind attribute if they are aggregate types
- There is at most one member of each of the following types: integral, floating point, boolean, string, binary, array, associative array
Parameters:T The type to check Returns:trueif T is a serializable sum type,falseotherwiseExamples: ditto@kind("test1") struct Test1 { int value; } @kind("test2") struct Test2 { int value; } alias ST1 = SumType!(Test1, Test2); static assert(allSatisfy!(hasKind, ST1.Types)); static assert(allSatisfy!(isSerializable, ST1.Types)); struct Test3 { int value; } alias ST2 = SumType!(Test1, Test2, Test3); static assert(!allSatisfy!(hasKind, ST2.Types)); static assert(!isSerializableSumType!ST2); static assert(!isSerializableData!ST2); static assert(!isSerializable!ST2); alias ST3 = SumType!(int, ulong, string, immutable(ubyte)[]); static assert(!isSerializableSumType!ST3); static assert(!isSerializable!ST3);
- template
isSerializable(T) - Checks if a given type is serializable to CBOR format.This function determines whether a type can be serialized into the CBOR (Concise Binary Object Representation) format. CBOR is a binary data serialization format which aims to provide a more compact representation compared to JSON.Parameters:
T The type to check for serializability. Returns: bool -trueif the type is serializable to CBOR,falseotherwise. - struct
Builder; - The
Builderstruct is used to generate and manipulate CBOR (Concise Binary Object Representation) data.- Use the
makemethod to create aCborValue. - Use the
parsemethod to convert binary data to aCborValue. - Use the
buildmethod to convert aCborValueto binary format. - The
serializeanddeserializemethods support ORM (Object-Relational Mapping).
- struct
CborValue; CborValue- enum
Type: ubyte; - @trusted this(T)(T value, ref Builder builder);
- Constructor
- pure nothrow @safe Type
type() const; - Type getter
- pure ref @trusted CborValue
opAssign(T)(T value) return; - Assign operator
- pure nothrow @safe bool
isNull() const; - Null check
- pure nothrow @safe bool
isUndefined() const; - Undefined check
- pure nothrow @trusted bool
isOverflowedInteger() const; - Overflow number checkCBOR supports signed integers, but the range it can handle differs from D's long type. This function determines whether a CBOR signed integer exceeds the range of D's long type. Specifically, the range of CBOR integers is -ulong.max(-1-2^64) to ulong.max(2^64). In contrast, the range of D's long type is long.min(-1-2^63) to long.max(2^63), and the range of the ulong type is 0 to ulong.max(2^64).
- nothrow @safe T
get(T)(lazy T defaultValue = T.init) const; - Retrieve the value as a D language typeSince the types handled by CBOR may not match the types in the D language, conversion is performed. Specify the type with T or a default value, and return the converted type. For example, if the long type is specified, CBOR's positive and negative integers, as well as floating-point numbers, are cast and converted to the long type. Strings are also parsed and converted to integers.
- nothrow ref T
require(T, K)(K key); - nothrow T
getValue(T, K)(K key, lazy T defaultValue = T.init) const; - pure nothrow ref @safe Builder
builder(); - Get the
builderinstance. - nothrow T
getValueAt(T)(size_t idx, lazy T defaultValue = T.init) const;
- @safe CborValue
make(T)(T value); - Create a CborValue from a given value.
- pure nothrow @nogc @safe void
dispose(ref CborValue v); - Dispose the given CborValue.
- pure nothrow @safe CborValue
emptyArray(); - Create a CborValue of empty array.
- pure nothrow @safe CborValue
emptyMap(); - Create a CborValue of empty map.
- pure nothrow @safe CborValue
nullValue(); - Create a CborValue of
null. - pure nothrow @safe CborValue
undefinedValue(); - Create a CborValue of undefined.
- pure @safe CborValue
deepCopy(CborValue src); - Deep copy a CborValue.Examples:
Builder b1; Builder b2; immutable str = "123"; auto v1 = b1.make(str); assert(v1.get!string is str); auto v2 = b1.deepCopy(v1); assert(v2.get!string is str); // Check if the copied value is a new instance auto v3 = b2.deepCopy(v1); assert(v3.get!string !is v1.get!string);
- @safe size_t
parse(ref CborValue dst, immutable(ubyte)[] src);
@safe boolparse(OutputRange)(ref OutputRange dst, immutable(ubyte)[] src);
@safe CborValueparse(ref immutable(ubyte)[] src);
@trusted CborValueparse(ref ubyte[] src); - Parse a binary CBOR data to a CborValue.Examples:
Builder b; immutable(ubyte)[] data = [0x63, 'f', 'o', 'o', 0x43, 0x01, 0x02, 0x03]; auto v1 = b.parse(data); assert(v1.get!string == "foo"); assert(data == [0x43, 0x01, 0x02, 0x03]); auto v2 = b.parse(data); assert(v2.get!(immutable(ubyte)[]) == [1, 2, 3]); assert(data.length == 0);
- @safe void
build(OutputRange)(ref OutputRange dst, CborValue src)
if(isOutputRange!(OutputRange, ubyte));
@safe immutable(ubyte)[]build(CborValue src); - Build a CborValue to a binary CBOR data.Examples:
Builder b; auto v1 = b.make("foo"); auto data = b.build(v1); assert(data == [0x63, 'f', 'o', 'o']);
- @safe CborValue
serialize(T)(T value); - Serialize a various data to CborValue.The
serializefunction generates a CborValue instance from the given data. The data type must be one of the following.- CborValue
- Integral type (int, uint, long, ulong, short, ushort, byte, ubyte)
- Floating point type (float, double)
- bool
- string
- binary (immutable(ubyte)[])
null- Array
- Recursively serialized
- AssociativeArray
- Recursively serialized
- SumType
- Converted to a map type CborValue
- All types have the @kind attribute
- Recursively serialized
- Converted to a map type CborValue
- Aggregate type (struct, class, union): meets one of the following conditions
- Composed of simple public member variables
- Converted to a map type CborValue
- Recursively serialized
- If the @ignore attribute is present, do not
serialize - If the @ignoreIf attribute is present, do not
serializeif the condition is met - If the @name attribute is present, use that name
- If the @value attribute is present, use that value
- If the @converter attribute is present, use that conversion proxy
- toCbor/fromCbor methods, where fromCtor is a static method
- toBinary/fromBinary methods, where fromBinary is a static method
- toRepresentation/fromRepresentation methods, where fromRepresentation is a static method
- Composed of simple public member variables
Examples:Builder b; struct Foo { int x; string y; } static assert(isSerializable!Foo); auto foo = Foo(42, "foo"); auto v = b.serialize(foo); assert(v.getValue!int("x") == 42); assert(v.getValue!string("y") == "foo");
- @safe bool
deserialize(T)(in CborValue src, ref T dst);
@safe Tdeserialize(T)(in CborValue src); - Deserialize a CborValue to a various data.The
deserializefunction generates value from CborValue instance. The data type must be one of the following.- CborValue
- Integral type (int, uint, long, ulong, short, ushort, byte, ubyte)
- Floating point type (float, double)
- bool
- string
- binary (immutable(ubyte)[])
null- Array
- Recursively deserialized
- AssociativeArray
- Recursively deserialized
- SumType
- Converted from a map type CborValue
- All types have the @kind attribute
- Recursively deserialized
- Converted from a map type CborValue
- Aggregate type (struct, class, union): meets one of the following conditions
- Composed of simple public member variables
- Converted to a map type CborValue
- Recursively deserialized
- If the @ignore attribute is present, do not
deserialize - If the @ignoreIf attribute is present, do not
deserializeif the condition is met - If the @name attribute is present, use that name
- If the @converter attribute is present, use that conversion proxy
- If the @essential attribute is present, throw an exception if deserialization fails
- toCbor/fromCbor methods, where fromCtor is a static method
- toBinary/fromBinary methods, where fromBinary is a static method
- toRepresentation/fromRepresentation methods, where fromRepresentation is a static method
- Composed of simple public member variables
Examples:Builder b; struct Foo { int x; string y; } static assert(isSerializable!Foo); auto v = b.deserialize!Foo(b.make(["x": b.make(42), "y": b.make("foo")])); assert(v.x == 42); assert(v.y == "foo");
- Use the
- alias
CborValue= Builder.CborValue;
aliasCborType= Builder.CborValue.Type; - CBOR data type
- alias
CBOR= Builder;
aliasCborBuilder= Builder; CBORbuilder- @trusted CborValue
parseCBOR(immutable(ubyte)[] binary); - Perse CBOR data
- @trusted immutable(ubyte)[]
toCBOR(CborValue cv); - Perse CBOR data