aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/ext_depends/D-YAML/examples/representer/main.d
blob: 18ec4c5f7abfa1bf87387087768c1989b1a9c959 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
import std.stdio;
import dyaml;

struct Color
{
   ubyte red;
   ubyte green;
   ubyte blue;

   Node opCast(T: Node)() const
   {
       static immutable hex = "0123456789ABCDEF";

       //Using the color format from the Constructor example.
       string scalar;
       foreach(channel; [red, green, blue])
       {
           scalar ~= hex[channel / 16];
           scalar ~= hex[channel % 16];
       }

       //Representing as a scalar, with custom tag to specify this data type.
       return Node(scalar, "!color");
   }
}

void main()
{
   try
   {
       auto dumper = dumper();

       auto document = Node([Color(255, 0, 0),
                             Color(0, 255, 0),
                             Color(0, 0, 255)]);

       dumper.dump(File("output.yaml", "w").lockingTextWriter, document);
   }
   catch(YAMLException e)
   {
       writeln(e.msg);
   }
}