The release has minimal capabilities at this time so the following is an example of how to use the API.
Use three percent signs %%% instead of two for dependency resolution.
// sconfig uses "provided" so you have a choice of the java.time API you use
// Refer to your preferred java.time project for version to use
libraryDependencies ++= Seq(
"org.ekrich" %%% "sconfig" % "x.y.z",
"org.ekrich" %%% "sjavatime" % "a.b.c"
)Please refer to the sjavatime home page
for the current version.
This assumes that you read a file into a configStr first. Other methods
that don't use File or URL should also work.
import org.ekrich.config.ConfigFactory
val configStr =
"""
|maxColumn = 100
|project.git=true
|align = none
|danglingParentheses = true
|newlines.neverBeforeJsNative = true
|newlines.sometimesBeforeColonInMethodReturnType = false
|assumeStandardLibraryStripMargin = true
""".stripMargin
val conf = ConfigFactory.parseString(configStr)
val maxCol = conf.getInt("maxColumn")
val isGit = conf.getBoolean("project.git")Both JS and Native now support java.io.Reader which allows using sconfig
to parse all supported formats by passing a filename with extension. See the
following examples from the shared ConfigFactoryTest file.
val filename = "/test01.properties"
val fileStr =
"""
|# test01.properties file
|fromProps.abc=abc
|fromProps.one=1
|fromProps.bool=true
|fromProps.specialChars=hello^^
""".stripMargin
// create Reader
var test01Reader = new StringReader(fileStr)
val config = ConfigFactory.parseReader(
test01Reader,
ConfigParseOptions.defaults
.setSyntaxFromFilename(filename)
)
val specialChars = config.getString("fromProps.specialChars")In Scala Native java.io.FileReader is available so you can create a
FileReader from a File.
In order to read a configuration file you need to know the relative
path from where the executable was started or use an absolute path. If the
Scala Native executable is run from sbt it will have the current working directory
equal to the directory at the base of your project where sbt was started. If curious
or the situation is unclear you can run the following code inside your Scala Native
application to find the path.
val dir = System.getProperty("user.dir")
println(s"Working Dir: $dir")Continuing the same thought process you can use the following code to read the file
from a simple sbt project where the src directory is at the top
level of your project and you are using the run command. If you package your
application or run the application executable directly, then making the path relative
to the binary with the code above could be your best option. Another option is to use
the "user.home" or the "user.dir" property to configure the file path. Note: When the
executable is added to the path, the current working directory is where you start the
executable from so keep that in mind
import java.io.File
val file = new File("src/main/resources/myapp.conf")
// ConfigDocument
val configDocument = ConfigDocumentFactory.parseFile(file)
// or Config
val config = ConfigFactory.parseFile(file)Using this code with the code above gives you a working solution to use sconfig
with Scala Native.