1 /**
2 *   Copyright: © 2012-2014 Anton Gushcha
3 *   License: Subject to the terms of the MIT license, as written in the included LICENSE file.
4 *   Authors:  NCrashed <ncrashed@gmail.com>,
5 *             LeMarwin <lemarwin42@gmail.com>,
6 *             Nazgull09 <nazgull90@gmail.com>
7 */
8 module devol.std.typevoid;
9 
10 import devol.type;
11 import devol.std.argscope;
12 import devol.std.line;
13 import std.stream;
14 
15 import dyaml.all;
16 
17 public
18 {
19 	import devol.std.argvoid;	
20 }
21 
22 class TypeVoid : Type
23 {
24 	this()
25 	{
26 		super("TypeVoid");
27 	}
28 	
29 	override Argument getNewArg()
30 	{
31 		return new ArgVoid;
32 	}
33 	
34 	override Argument getNewArg(string min, string max, string[] exVal)
35 	{
36 		return new ArgVoid;
37 	}
38 	
39 	override Argument loadArgument(InputStream stream)
40 	{
41 	    char[] cont;
42 	    stream.read(cont);
43 	    
44 	    if(cont == "line")
45 	    {
46 	        return Line.loadBinary(stream);
47 	    } 
48 	    else if(cont == "scope")
49 	    {
50 	        return ArgScope.loadBinary(stream);
51 	    } 
52 	    else if(cont == "plain")
53 	    {
54 	        return new ArgVoid;
55 	    }
56 	    
57 	    throw new Exception("Unknown void container!");
58 	}	
59 	
60     override Argument loadArgument(Node node)
61     {
62         switch(node["class"].as!string)
63         {
64             case("line"):
65             {
66                 return Line.loadYaml(node);
67             }
68             case("scope"):
69             {
70                 return ArgScope.loadYaml(node);
71             }
72             case("plain"):
73             {
74                 return new ArgVoid;
75             }
76             default:
77             {
78                 throw new Exception("Unknown void container!");
79             }
80         }
81     }  
82 }