www.digitalmars.com         C & C++   DMDScript  

digitalmars.D - compile time configurations

reply "Freddy" <Hexagonalstar64 gmail.com> writes:
I recently thought of the idea of using string imports for
compile time configuration.
Something like this
---
import std.stdio;
import std.conv;
import std.range;
import std.algorithm;

string getVar(string fname,string var)(){
	foreach(property;import(fname).splitter('\n')){
		auto varname=property[0..property.countUntil("=")];
		if(var==varname){
			return property[property.countUntil("=")+1..$];
		}
	}
	assert(0, "unable to find property");
}

enum dimisions=getVar!("shapes","dimisions").to!uint;

void main()
{
	writeln("There are ",dimisions," dimisions");
}
---
Where you add your config dir(that contains "shapes") file to
dub's  stringImportPaths".
How do you guys feel about this? Should we use something like
json for config files?
Oct 08 2014
parent reply Marco Leise <Marco.Leise gmx.de> writes:
Am Wed, 08 Oct 2014 22:34:36 +0000
schrieb "Freddy" <Hexagonalstar64 gmail.com>:

 I recently thought of the idea of using string imports for
 compile time configuration.
 Something like this
 ---
 import std.stdio;
 import std.conv;
 import std.range;
 import std.algorithm;
 
 string getVar(string fname,string var)(){
 	foreach(property;import(fname).splitter('\n')){
 		auto varname=property[0..property.countUntil("=")];
 		if(var==varname){
 			return property[property.countUntil("=")+1..$];
 		}
 	}
 	assert(0, "unable to find property");
 }
 
 enum dimisions=getVar!("shapes","dimisions").to!uint;
 
 void main()
 {
 	writeln("There are ",dimisions," dimisions");
 }
 ---
 Where you add your config dir(that contains "shapes") file to
 dub's  stringImportPaths".
 How do you guys feel about this? Should we use something like
 json for config files?
I did something similar a while back. It parsed a .ini that contained default values and created a statically typed runtime parser for the actual .ini file from it. It was fun, to see that you can do that with D. -- Marco
Oct 10 2014
parent "Uranuz" <neuranuz gmail.com> writes:
 I did something similar a while back. It parsed a .ini that
 contained default values and created a statically typed runtime
 parser for the actual .ini file from it. It was fun, to see
 that you can do that with D.
Yes. I use import('filename') to configure my application too. I have config.json, where I store standard application's file paths, options and so on. It's very handy compiler's feature
Oct 11 2014