The OpenD Programming Language

1 /++
2 $(H1 Mutable CSV scalar value)
3 
4 This module contains a single alias definition and doesn't provide CSV serialization API.
5 
6 License: $(HTTP www.apache.org/licenses/LICENSE-2.0, Apache-2.0)
7 Authors: Ilia Ki 
8 Macros:
9 +/
10 module mir.algebraic_alias.csv;
11 /++
12 Definition union for $(LREF JsonAlgebraic).
13 +/
14 import mir.algebraic: Variant;
15 
16 import mir.algebraic: Algebraic;
17 
18 public import mir.timestamp: Timestamp;
19 
20 /++
21 CSV tagged algebraic alias.
22 +/
23 alias CsvAlgebraic = Algebraic!Csv_;
24 
25 ///
26 union Csv_
27 {
28     /// Used for empty CSV scalar like one between two separators: `,,`
29     typeof(null) null_;
30     /// Used for false, true, False, True, and friends. Follows YAML conversion
31     bool boolean;
32     ///
33     long integer;
34     ///
35     double float_;
36     ///
37     Timestamp timestamp;
38     ///
39     immutable(char)[] string;
40 }
41 
42 ///
43 version(mir_ion_test)
44 unittest
45 {
46     CsvAlgebraic value;
47 
48     // Default
49     assert(value.isNull);
50     assert(value.kind == CsvAlgebraic.Kind.null_);
51 
52     // Boolean
53     value = true;
54 
55     assert(!value.isNull);
56     assert(value == true);
57     assert(value.kind == CsvAlgebraic.Kind.boolean);
58     assert(value.boolean == true);
59     assert(value.get!bool == true);
60     assert(value.get!(CsvAlgebraic.Kind.boolean) == true);
61 
62     // Null
63     value = null;
64     assert(value.isNull);
65     assert(value == null);
66     assert(value.kind == CsvAlgebraic.Kind.null_);
67     assert(value.null_ == null);
68     assert(value.get!(typeof(null)) == null);
69     assert(value.get!(CsvAlgebraic.Kind.null_) == null);
70 
71     // String
72     value = "s";
73     assert(value.kind == CsvAlgebraic.Kind..string);
74     assert(value == "s");
75     assert(value..string == "s");
76     assert(value.get!string == "s");
77     assert(value.get!(CsvAlgebraic.Kind..string) == "s");
78 
79     // Integer
80     value = 4;
81     assert(value.kind == CsvAlgebraic.Kind.integer);
82     assert(value == 4);
83     assert(value != 4.0);
84     assert(value.integer == 4);
85 
86     // Float
87     value = 3.0;
88     assert(value.kind == CsvAlgebraic.Kind.float_);
89     assert(value != 3);
90     assert(value == 3.0);
91     assert(value.float_ == 3.0);
92     assert(value.get!double == 3.0);
93     assert(value.get!(CsvAlgebraic.Kind.float_) == 3.0);
94 }