Howto:Persistent Nasal configuration: Difference between revisions
No edit summary |
m (→Background) |
||
(4 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
{{Stub}} | {{Stub}} | ||
== Objective == | |||
Demonstrate how to save/load a Nasal hash with variables for serialization/persistence purposes | |||
== Background == | |||
It is pretty common for more sophisticated Nasal scripts (or even [[Addons]]) to have some configuration values, i.e. default values and custom settings/configuration | |||
== Problem == | |||
Conceiving a custom file format and implementing a custom parser can quickly become tedious and redundant. | |||
== Approach == | |||
{{See also|Howto:Serializing Nasal data structures}} | |||
Thus, we will be using a Nasal hash that is treated like JSON and then use this to serialize/unserialize the data as needed | |||
== Implementation == | |||
Consider the following setup | Consider the following setup | ||
Create a file for your settings, save it as [[$FG_HOME]]/Nasal/rgatc.config | Create a file for your settings, save it as [[$FG_HOME]]/Nasal/rgatc.config | ||
We will be using a Nasal hash, that is treated as JSON | |||
We will be using a Nasal hash, that is treated as JSON - this has a number of advantages, i.e. you don't need to write a parser for a custom configuration format, and your configuration can even include comments and arbitrary Nasal values, including even functions or objects | |||
<syntaxhighlight lang="nasal"> | <syntaxhighlight lang="nasal"> | ||
{ | { | ||
# you can also add comments | |||
width: 100, | width: 100, | ||
length : 200, | length : 200, | ||
scale: 10, | scale: 10, | ||
range: 25 | range: 25, | ||
less_than: func(a,b) {return a<b;}, | |||
}; | }; | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Line 21: | Line 40: | ||
debug.dump(mySettings); | debug.dump(mySettings); | ||
print( | |||
mySettings.less_than(100,200); | |||
); | |||
</syntaxhighlight> | </syntaxhighlight> |
Revision as of 18:40, 12 January 2020
This article is a stub. You can help the wiki by expanding it. |
Objective
Demonstrate how to save/load a Nasal hash with variables for serialization/persistence purposes
Background
It is pretty common for more sophisticated Nasal scripts (or even Addons) to have some configuration values, i.e. default values and custom settings/configuration
Problem
Conceiving a custom file format and implementing a custom parser can quickly become tedious and redundant.
Approach
Thus, we will be using a Nasal hash that is treated like JSON and then use this to serialize/unserialize the data as needed
Implementation
Consider the following setup
Create a file for your settings, save it as $FG_HOME/Nasal/rgatc.config
We will be using a Nasal hash, that is treated as JSON - this has a number of advantages, i.e. you don't need to write a parser for a custom configuration format, and your configuration can even include comments and arbitrary Nasal values, including even functions or objects
{
# you can also add comments
width: 100,
length : 200,
scale: 10,
range: 25,
less_than: func(a,b) {return a<b;},
};
Next, open the Nasal Console, and paste the follwing code:
var filename = "rgatc.config";
var path = getprop("/sim/fg-home") ~ '/Nasal/' ~ filename;
var mySettings = io.load_nasal( path );
debug.dump(mySettings);
print(
mySettings.less_than(100,200);
);