56 lines
1.3 KiB
D
56 lines
1.3 KiB
D
|
import std.stdio;
|
||
|
import yaml;
|
||
|
|
||
|
struct Color
|
||
|
{
|
||
|
ubyte red;
|
||
|
ubyte green;
|
||
|
ubyte blue;
|
||
|
}
|
||
|
|
||
|
Node representColor(ref Node node, Representer representer)
|
||
|
{
|
||
|
//The node is guaranteed to be Color as we add representer for Color.
|
||
|
Color color = node.get!Color;
|
||
|
|
||
|
static immutable hex = "0123456789ABCDEF";
|
||
|
|
||
|
//Using the color format from the Constructor example.
|
||
|
string scalar;
|
||
|
foreach(channel; [color.red, color.green, color.blue])
|
||
|
{
|
||
|
scalar ~= hex[channel / 16];
|
||
|
scalar ~= hex[channel % 16];
|
||
|
}
|
||
|
|
||
|
//Representing as a scalar, with custom tag to specify this data type.
|
||
|
return representer.representScalar("!color", scalar);
|
||
|
}
|
||
|
|
||
|
void main()
|
||
|
{
|
||
|
try
|
||
|
{
|
||
|
auto representer = new Representer;
|
||
|
representer.addRepresenter!Color(&representColor);
|
||
|
|
||
|
auto resolver = new Resolver;
|
||
|
resolver.addImplicitResolver("!color", std.regex.regex("[0-9a-fA-F]{6}"),
|
||
|
"0123456789abcdefABCDEF");
|
||
|
|
||
|
auto dumper = Dumper("output.yaml");
|
||
|
dumper.representer = representer;
|
||
|
dumper.resolver = resolver;
|
||
|
|
||
|
auto document = Node([Color(255, 0, 0),
|
||
|
Color(0, 255, 0),
|
||
|
Color(0, 0, 255)]);
|
||
|
|
||
|
dumper.dump(document);
|
||
|
}
|
||
|
catch(YAMLException e)
|
||
|
{
|
||
|
writeln(e.msg);
|
||
|
}
|
||
|
}
|