Documentation ¶
Overview ¶
Package properties is a library for handling maps of hierarchical properties. This library is mainly used in the Arduino platform software to handle configurations made of key/value pairs stored in files with an INI like syntax, for example:
... uno.name=Arduino/Genuino Uno uno.upload.tool=avrdude uno.upload.protocol=arduino uno.upload.maximum_size=32256 uno.upload.maximum_data_size=2048 uno.upload.speed=115200 uno.build.mcu=atmega328p uno.build.f_cpu=16000000L uno.build.board=AVR_UNO uno.build.core=arduino uno.build.variant=standard diecimila.name=Arduino Duemilanove or Diecimila diecimila.upload.tool=avrdude diecimila.upload.protocol=arduino diecimila.build.f_cpu=16000000L diecimila.build.board=AVR_DUEMILANOVE diecimila.build.core=arduino diecimila.build.variant=standard ...
This library has methods to parse this kind of files into a Map object.
The Map object has many helper methods to accomplish some common operation on this kind of data like cloning, merging, comparing and also extracting a submap or generating a map-of-submaps from the first "level" of the hierarchy.
On the Arduino platform the properties are used to populate command line recipes so there are some methods to help this task like SplitQuotedString or ExpandPropsInString.
Index ¶
- func DeleteUnexpandedPropsFromString(str string) string
- func MergeMapsOfProperties(target map[string]Map, sources ...map[string]Map) map[string]Map
- func SplitQuotedString(src string, quoteChars string, acceptEmptyArguments bool) ([]string, error)
- type Map
- func (m Map) Clone() Map
- func (m Map) Dump() string
- func (m Map) Equals(other Map) bool
- func (m Map) ExpandPropsInString(str string) string
- func (m Map) FirstLevelOf() map[string]Map
- func (m Map) GetBoolean(key string) bool
- func (m Map) GetPath(key string) *paths.Path
- func (m Map) Keys() []string
- func (m Map) Merge(sources ...Map) Map
- func (m Map) SetBoolean(key string, value bool)
- func (m Map) SetPath(key string, value *paths.Path)
- func (m Map) SubTree(rootKey string) Map
- func (m Map) Values() []string
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func DeleteUnexpandedPropsFromString ¶
DeleteUnexpandedPropsFromString removes all the brace markers "{xxx}" that are not expanded into a value using the Map.ExpandPropsInString() method.
func MergeMapsOfProperties ¶
MergeMapsOfProperties merge the map-of-Maps (obtained from the method FirstLevelOf()) into the target map-of-Maps.
func SplitQuotedString ¶
SplitQuotedString splits a string by spaces and at the same time allows to use spaces in a single element of the split using quote characters.
For example the call:
SplitQuotedString(`This 'is an' "Hello World!" example`, `'"`, false)
returns the following array:
[]string{"This", "is an", "Hello World!", "example"}
Types ¶
type Map ¶
Map is a container of properties
func LoadFromPath ¶
LoadFromPath reads a properties file and makes a Map out of it.
func LoadFromSlice ¶
LoadFromSlice reads a properties file from an array of string and makes a Map out of it
func SafeLoad ¶
SafeLoad is like Load, except that it returns an empty Map if the specified file doesn't exists
func SafeLoadFromPath ¶
SafeLoadFromPath is like LoadFromPath, except that it returns an empty Map if the specified file doesn't exists
func (Map) Equals ¶
Equals returns true if the current Map contains the same key/value pairs of the Map passed as argument.
func (Map) ExpandPropsInString ¶
ExpandPropsInString use the Map to replace values into a format string. The format string should contains markers between braces, for example:
"The selected upload protocol is {upload.protocol}."
Each marker is replaced by the corresponding value of the Map. The values in the Map may contains other markers, they are evaluated recursively up to 10 times.
func (Map) FirstLevelOf ¶
FirstLevelOf generates a map-of-Maps using the first level of the hierarchy of the current Map. For example the following Map:
properties.Map{ "uno.name": "Arduino/Genuino Uno", "uno.upload.tool": "avrdude", "uno.upload.protocol": "arduino", "uno.upload.maximum_size": "32256", "diecimila.name": "Arduino Duemilanove or Diecimila", "diecimila.upload.tool": "avrdude", "diecimila.upload.protocol": "arduino", "diecimila.bootloader.tool": "avrdude", "diecimila.bootloader.low_fuses": "0xFF", }
is transformed into the following map-of-Maps:
map[string]Map{ "uno" : properties.Map{ "name": "Arduino/Genuino Uno", "upload.tool": "avrdude", "upload.protocol": "arduino", "upload.maximum_size": "32256", }, "diecimila" : properties.Map{ "name=Arduino Duemilanove or Diecimila "upload.tool": "avrdude", "upload.protocol": "arduino", "bootloader.tool": "avrdude", "bootloader.low_fuses": "0xFF", } }
func (Map) GetBoolean ¶
GetBoolean returns true if the map contains the specified key and the value equals to the string "true", in any other case returns false.
func (Map) GetPath ¶
GetPath returns a paths.Path object using the map value as path. The function returns nil if the key is not present.
func (Map) Merge ¶
Merge merges a Map into this one. Each key/value of the merged Maps replaces the key/value present in the original Map.
func (Map) SetBoolean ¶
SetBoolean sets the specified key to the string "true" or "false" if the value is respectively true or false.
func (Map) SetPath ¶
SetPath saves the paths.Path object in the map using the path as value of the map
func (Map) SubTree ¶
SubTree extracts a sub Map from an existing map using the first level of the keys hierarchy as selector. For example the following Map:
properties.Map{ "uno.name": "Arduino/Genuino Uno", "uno.upload.tool": "avrdude", "uno.upload.protocol": "arduino", "uno.upload.maximum_size": "32256", "diecimila.name": "Arduino Duemilanove or Diecimila", "diecimila.upload.tool": "avrdude", "diecimila.upload.protocol": "arduino", "diecimila.bootloader.tool": "avrdude", "diecimila.bootloader.low_fuses": "0xFF", }
after calling SubTree("uno") will be transformed in:
properties.Map{ "name": "Arduino/Genuino Uno", "upload.tool": "avrdude", "upload.protocol": "arduino", "upload.maximum_size": "32256", },