summaryrefslogtreecommitdiff
path: root/racer-tracer/src/config.rs
diff options
context:
space:
mode:
Diffstat (limited to 'racer-tracer/src/config.rs')
-rw-r--r--racer-tracer/src/config.rs54
1 files changed, 54 insertions, 0 deletions
diff --git a/racer-tracer/src/config.rs b/racer-tracer/src/config.rs
new file mode 100644
index 0000000..109528a
--- /dev/null
+++ b/racer-tracer/src/config.rs
@@ -0,0 +1,54 @@
+use config::File;
+use serde::Deserialize;
+use structopt::StructOpt;
+
+use crate::error::TracerError;
+
+#[derive(Default, Debug, Deserialize)]
+pub struct Screen {
+ pub height: usize,
+ pub width: usize,
+}
+
+#[derive(Default, Debug, Deserialize)]
+pub struct RenderData {
+ pub samples: usize,
+ pub max_depth: usize,
+ pub recurse_depth: usize,
+ pub scale: usize,
+}
+
+#[derive(StructOpt, Debug)]
+#[structopt(name = "racer-tracer")]
+pub struct Args {
+ #[structopt(
+ short = "c",
+ long = "config",
+ default_value = "./config.yml",
+ env = "CONFIG"
+ )]
+ pub config: String,
+}
+
+#[derive(Default, Debug, Deserialize)]
+pub struct Config {
+ #[serde(default)]
+ pub preview: RenderData,
+
+ #[serde(default)]
+ pub render: RenderData,
+
+ #[serde(default)]
+ pub screen: Screen,
+}
+
+impl Config {
+ pub fn from_file(file: String) -> Result<Self, TracerError> {
+ config::Config::builder()
+ .add_source(File::from(file.as_ref()))
+ .build()
+ .map_err(|e| TracerError::Configuration(file.clone(), e.to_string()))?
+ .try_deserialize()
+ .map_err(|e| TracerError::Configuration(file, e.to_string()))
+ }
+}