Substring to strip off the end of struct/class names when writing them to the output range. Defaults to "Settings". May be empty.
Output range to write to, usually an Appender.
Object to serialise.
true if something was written to the output range, false if not.
struct Foo { // ... } Foo foo; Appender!(char[]) sink; sink.serialise(foo); assert(!sink[].empty);
1 import lu.uda : Separator, Quoted; 2 import std.array : Appender; 3 4 { 5 struct FooSettings 6 { 7 string fooasdf = "foo 1"; 8 string bar = "foo 1"; 9 string bazzzzzzz = "foo 1"; 10 @Quoted flerrp = "hirr steff "; 11 double pi = 3.14159; 12 @Separator(",") int[] arr = [ 1, 2, 3 ]; 13 @Separator(";") string[] harbl = [ "harbl;;", ";snarbl;", "dirp" ]; 14 @("|") string[] matey = [ "a", "b", "c" ]; 15 } 16 17 struct BarSettings 18 { 19 string foofdsa = "foo 2"; 20 string bar = "bar 2"; 21 string bazyyyyyyy = "baz 2"; 22 @Quoted flarrp = " hirrsteff"; 23 double pipyon = 3.0; 24 } 25 26 enum fooSerialised = 27 `[Foo] 28 fooasdf foo 1 29 bar foo 1 30 bazzzzzzz foo 1 31 flerrp "hirr steff " 32 pi 3.14159 33 arr 1,2,3 34 harbl harbl\;\;;\;snarbl\;;dirp 35 matey a|b|c`; 36 37 Appender!(char[]) fooSink; 38 fooSink.reserve(64); 39 40 fooSink.serialise(FooSettings.init); 41 assert((fooSink[] == fooSerialised), '\n' ~ fooSink[]); 42 43 enum barSerialised = 44 `[Bar] 45 foofdsa foo 2 46 bar bar 2 47 bazyyyyyyy baz 2 48 flarrp " hirrsteff" 49 pipyon 3`; 50 51 Appender!(char[]) barSink; 52 barSink.reserve(64); 53 54 barSink.serialise(BarSettings.init); 55 assert((barSink[] == barSerialised), '\n' ~ barSink[]); 56 57 // try two at once 58 Appender!(char[]) bothSink; 59 bothSink.reserve(128); 60 bothSink.serialise(FooSettings.init, BarSettings.init); 61 assert(bothSink[] == fooSink[] ~ "\n\n" ~ barSink[]); 62 } 63 { 64 class C 65 { 66 int i; 67 bool b; 68 } 69 70 C c = new C; 71 c.i = 42; 72 c.b = true; 73 74 enum cSerialised = 75 `[C] 76 i 42 77 b true`; 78 79 Appender!(char[]) cSink; 80 cSink.reserve(128); 81 cSink.serialise(c); 82 assert((cSink[] == cSerialised), '\n' ~ cSink[]); 83 } 84 { 85 enum Letters { abc, def, ghi, } 86 87 struct Struct 88 { 89 Letters let = Letters.def; 90 } 91 92 enum enumTestSerialised = 93 `[Struct] 94 let def`; 95 96 Struct st; 97 Appender!(char[]) enumTestSink; 98 enumTestSink.serialise(st); 99 assert((enumTestSink[] == enumTestSerialised), '\n' ~ enumTestSink[]); 100 }
Serialises the fields of an object into a configuration file-y format.
It only serialises fields not annotated with Unserialisable, and it doesn't recurse into other structs or classes.