summaryrefslogtreecommitdiffstats
path: root/vendor/config-0.11.0
diff options
context:
space:
mode:
authorEllie Huxtable <e@elm.sh>2021-05-17 19:51:09 +0100
committerEllie Huxtable <e@elm.sh>2021-05-17 19:51:09 +0100
commitd0215a937a7889a97e11778ee4b0f9a12de01278 (patch)
tree5a8fd5ad62e6b5a4c218746ff2d4bd97373a48de /vendor/config-0.11.0
parent802a2258cbd839c5b82d24f74d7aebe4a27d8dc5 (diff)
Vendor dependenciesvendor
Just testing how CI works with this. I tend to prefer vendoring, as it means that if you have a copy of the code *you can always build it*. Even if you're 20 years in the future This is the output of ``` cargo vendor --versioned-dirs ```
Diffstat (limited to 'vendor/config-0.11.0')
-rw-r--r--vendor/config-0.11.0/.cargo-checksum.json1
-rw-r--r--vendor/config-0.11.0/CHANGELOG.md182
-rw-r--r--vendor/config-0.11.0/Cargo.toml70
-rw-r--r--vendor/config-0.11.0/LICENSE-APACHE201
-rw-r--r--vendor/config-0.11.0/LICENSE-MIT25
-rw-r--r--vendor/config-0.11.0/README.md44
-rw-r--r--vendor/config-0.11.0/src/config.rs255
-rw-r--r--vendor/config-0.11.0/src/de.rs465
-rw-r--r--vendor/config-0.11.0/src/env.rs117
-rw-r--r--vendor/config-0.11.0/src/error.rs223
-rw-r--r--vendor/config-0.11.0/src/file/format/hjson.rs55
-rw-r--r--vendor/config-0.11.0/src/file/format/ini.rs30
-rw-r--r--vendor/config-0.11.0/src/file/format/json.rs59
-rw-r--r--vendor/config-0.11.0/src/file/format/mod.rs107
-rw-r--r--vendor/config-0.11.0/src/file/format/toml.rs50
-rw-r--r--vendor/config-0.11.0/src/file/format/yaml.rs83
-rw-r--r--vendor/config-0.11.0/src/file/mod.rs124
-rw-r--r--vendor/config-0.11.0/src/file/source/file.rs158
-rw-r--r--vendor/config-0.11.0/src/file/source/mod.rs16
-rw-r--r--vendor/config-0.11.0/src/file/source/string.rs29
-rw-r--r--vendor/config-0.11.0/src/lib.rs69
-rw-r--r--vendor/config-0.11.0/src/path/mod.rs254
-rw-r--r--vendor/config-0.11.0/src/path/parser.rs129
-rw-r--r--vendor/config-0.11.0/src/ser.rs718
-rw-r--r--vendor/config-0.11.0/src/source.rs87
-rw-r--r--vendor/config-0.11.0/src/value.rs544
-rw-r--r--vendor/config-0.11.0/tests/Settings-invalid.hjson4
-rw-r--r--vendor/config-0.11.0/tests/Settings-invalid.ini2
-rw-r--r--vendor/config-0.11.0/tests/Settings-invalid.json4
-rw-r--r--vendor/config-0.11.0/tests/Settings-invalid.toml2
-rw-r--r--vendor/config-0.11.0/tests/Settings-invalid.yaml2
-rw-r--r--vendor/config-0.11.0/tests/Settings-production.toml8
-rw-r--r--vendor/config-0.11.0/tests/Settings.hjson16
-rw-r--r--vendor/config-0.11.0/tests/Settings.ini9
-rw-r--r--vendor/config-0.11.0/tests/Settings.json16
-rw-r--r--vendor/config-0.11.0/tests/Settings.toml53
-rw-r--r--vendor/config-0.11.0/tests/Settings.yaml12
-rw-r--r--vendor/config-0.11.0/tests/datetime.rs117
-rw-r--r--vendor/config-0.11.0/tests/defaults.rs35
-rw-r--r--vendor/config-0.11.0/tests/empty.rs21
-rw-r--r--vendor/config-0.11.0/tests/env.rs73
-rw-r--r--vendor/config-0.11.0/tests/errors.rs134
-rw-r--r--vendor/config-0.11.0/tests/file.rs56
-rw-r--r--vendor/config-0.11.0/tests/file_hjson.rs80
-rw-r--r--vendor/config-0.11.0/tests/file_ini.rs71
-rw-r--r--vendor/config-0.11.0/tests/file_json.rs83
-rw-r--r--vendor/config-0.11.0/tests/file_toml.rs93
-rw-r--r--vendor/config-0.11.0/tests/file_yaml.rs84
-rw-r--r--vendor/config-0.11.0/tests/get.rs274
-rw-r--r--vendor/config-0.11.0/tests/merge.rs49
-rw-r--r--vendor/config-0.11.0/tests/set.rs93
51 files changed, 5486 insertions, 0 deletions
diff --git a/vendor/config-0.11.0/.cargo-checksum.json b/vendor/config-0.11.0/.cargo-checksum.json
new file mode 100644
index 00000000..843cce37
--- /dev/null
+++ b/vendor/config-0.11.0/.cargo-checksum.json
@@ -0,0 +1 @@
+{"files":{"CHANGELOG.md":"a6dd50a11061397cb747e64aaca4b7367cae27b85d5fc9a3f8801b78d780c106","Cargo.toml":"af50ebee9e20ceab7acd08d82208db3fa5239e1d9a9fa4e6d60147aac66cc1d4","LICENSE-APACHE":"3b916529901164216c3cdb21291af498bfe3bb2c898c20b103d8026047021949","LICENSE-MIT":"5f3524294ec56147adcfdd3f3a529367b93f851bfc7c8c6433dfbafee389880c","README.md":"24f1ba3ff71dc33123e11a6e2d55842139f24a071c2d149a82ac53d42717f2b4","src/config.rs":"8eb2e8366278d84f284047c72c7a03e7eea54f47f60ae51d8b78dae743c618f7","src/de.rs":"d814efa72b3bb6cdb6bda2141deef418f604c140bd65e043054cdec91a6ace07","src/env.rs":"a325eaaa0fdc16a4d46ec1f696a9c402ee9016de9d17b0c92f40b5bda821a8eb","src/error.rs":"82347dfad18c5959e4f4b14bbc06f2ab6c1229eb74598a3536d029e34c9b355b","src/file/format/hjson.rs":"906d9118b826ded928de0c19df0fc1685df59379289e3fca4b1a92ecc5443af6","src/file/format/ini.rs":"85ed064011c4f538f2f9d9f9957c80b98d20c3eb797318842f6975c4df2dedab","src/file/format/json.rs":"4cfa68dbfdbfd1dc0f8d75a856185d93c5839bef1e922307c1a56cec73e17a2c","src/file/format/mod.rs":"09619070e968439978252c7dac8a68e98789e7c3cb01fd276fd6e9e13a016f68","src/file/format/toml.rs":"d471e66f98ffc9fa743b65741b3847b666b2b536f38c40a3ab6da37775db7fd8","src/file/format/yaml.rs":"efd86d2641fc8569a11bb56bc2a969ba23f57827f3bb29729458208a96313056","src/file/mod.rs":"5c08c9b2ba07902f39b31aac5e3cdb17b116afb5710dd5e5d1a9ce7bd3be2b60","src/file/source/file.rs":"bda88cf9103fa167177ac05781bd5ca66104c37ee7d6bd9e0ebe20336268d37f","src/file/source/mod.rs":"b509de63078e6dddb3db51d5851a4f87d1ddaa91bf47dc874dec27266c74229f","src/file/source/string.rs":"ce3258998816b02576360365d77df74364c70fb5aa2a03f8fab991b20e6b9cc7","src/lib.rs":"c7a9732d33fb8e5ed6f5499d9cb8e2221e9955850a2507bd0fddc6e893517ea7","src/path/mod.rs":"00266711fb0c1f0c3be95bf797d9a8f1d86340b619cb47149605cefed1073304","src/path/parser.rs":"99a6cd004ce7511e8e2d44ff66251ebfeab8024d2b41502c9183b586614ddc4d","src/ser.rs":"9487982577f1978b33a904f49076107c9418145417dc93d52a33d33a6750aac0","src/source.rs":"655aa83772e0363a8709fbc5f2adde9465e315f22dc8d98b9b364443272c4bc4","src/value.rs":"a4026f5777a443548d6931feda03ee946cd750a1e34cb624da080b94db94ab1d","tests/Settings-invalid.hjson":"1af384ca3eea648acd00eaf3673a081eec8eccfc9fb99b0b5b7ef6c44d2ed13d","tests/Settings-invalid.ini":"a923638f65861fe2f0d0e34201490019e3d1e088b65eb0a4fa1dc0412ccc5078","tests/Settings-invalid.json":"92d976db848f48de1e650a28ce31fbf373d90adf06a7a524fb0b52336deedbeb","tests/Settings-invalid.toml":"af58100d8ddd8beec3b0f3cb6b14a8b0c1a2a3a8ba7200b1e25cd84a46538ddc","tests/Settings-invalid.yaml":"4f81f10b2f219e82914f1db27429f1954e6e2050040037e8c5c3af11d79fbef6","tests/Settings-production.toml":"cdaf31b38b946df7f05aa9b8d71b660d6c957a595ec0785019e768a018e3a14c","tests/Settings.hjson":"f2613ea90c376cf4e800968956031b5af82cdc28e687555c8b8fbc7efc5f915b","tests/Settings.ini":"9134cb160f2bb911af5e2222bcc5b72583821bf54d33ac7a43f9874ccb847ec9","tests/Settings.json":"32c5764c27c1936c470f9365a9d989908d5d122a62f932edd388e259eef4f407","tests/Settings.toml":"8c5c96caff0acdd2ebffae468e21ab03cc728659c557ffa5d962c95ec4e61346","tests/Settings.yaml":"09a126312502610ac7e2059a395d06336b090dfd8d12c2514b0348e8e8520334","tests/datetime.rs":"a2df90e6d230aef74f27d71bd33cac7fbbb6c0ac020449b14922d279cc349bd8","tests/defaults.rs":"ec525f9b0a0046d853af1ba001c8857c1d72adf580f56163ce114b3e22751707","tests/empty.rs":"d50942a0d14275c4d889ea763585a1a0ad37c9ebec20ab75daf98c297fb904e4","tests/env.rs":"de68ae9d995fd243639586e1fa27b0d6081f743d32a720f2305915d44913a1f6","tests/errors.rs":"620a269f6864bf8415347defd2bf882383ed038a4a2ecd3d43f0c26f6b1a0e10","tests/file.rs":"c80a68c9d5939f34b49ab2c24a5d0cd42dfcb61a4b8f7a7c579d8ce9282df01d","tests/file_hjson.rs":"ca425b5d9977552f5a0bdc2734be3003f0843b76055c66fe5e596cc14deb626c","tests/file_ini.rs":"ad4034f2f4154c746feb88fcee29ef10219be6bb150b014d916d2cb467a119df","tests/file_json.rs":"99adb1b3852c34045727e1d4a62d4d94a590ba66b468bcb7d1c0e1eb2f0ed208","tests/file_toml.rs":"05d586bd9aab8cf35587e071c67fbbcb7fbf598e29f069ea13dd3c2d859cfbdf","tests/file_yaml.rs":"262148167cd6e15746eca7a99427e1b98186a5d50e07bedc514ef6f406424c2e","tests/get.rs":"4a5dd7b876ad160fb7fdda3ddfec18492b6709913c0a91bc096f1a4df39ffc06","tests/merge.rs":"c72c4b2ad7b174c7a050647d17fbc3466c77015171aaa54752e178f4efe61276","tests/set.rs":"79d0decf7ebf8755505c9e2adab492453415e5bf627bc715342076d2e1830fab"},"package":"1b1b9d958c2b1368a663f05538fc1b5975adce1e19f435acceae987aceeeb369"} \ No newline at end of file
diff --git a/vendor/config-0.11.0/CHANGELOG.md b/vendor/config-0.11.0/CHANGELOG.md
new file mode 100644
index 00000000..05bfecad
--- /dev/null
+++ b/vendor/config-0.11.0/CHANGELOG.md
@@ -0,0 +1,182 @@
+# Change Log
+All notable changes to this project will be documented in this file.
+
+The format is based on [Keep a Changelog](http://keepachangelog.com/)
+and this project adheres to [Semantic Versioning](http://semver.org/).
+
+## 0.11.0 - 2021-03-17
+ - The `Config` type got a builder-pattern `with_merged()` method [#166].
+ - A `Config::set_once()` function was added, to set an value that can be
+ overwritten by `Config::merge`ing another configuration [#172]
+ - serde_hjson is, if enabled, pulled in without default features.
+ This is due to a bug in serde_hjson, see [#169] for more information.
+ - Testing is done on github actions [#175]
+
+[#166]: https://github.com/mehcode/config-rs/pull/166
+[#172]: https://github.com/mehcode/config-rs/pull/172
+[#169]: https://github.com/mehcode/config-rs/pull/169
+[#175]: https://github.com/mehcode/config-rs/pull/169
+
+## 0.10.1 - 2019-12-07
+ - Allow enums as configuration keys [#119]
+
+[#119]: https://github.com/mehcode/config-rs/pull/119
+
+## 0.10.0 - 2019-12-07
+ - Remove lowercasing of keys (unless the key is coming from an environment variable).
+ - Update nom to 5.x
+
+## 0.9.3 - 2019-05-09
+ - Support deserializing to a struct with `#[serde(default)]` [#106]
+
+[#106]: https://github.com/mehcode/config-rs/pull/106
+
+## 0.9.2 - 2019-01-03
+ - Support reading `enum`s from configuration. [#85]
+ - Improvements to error path (attempting to propagate path). [#89]
+ - Fix UB in monomorphic expansion. We weren't re-exporting dependent types. [#91]
+
+[#85]: https://github.com/mehcode/config-rs/pull/85
+[#89]: https://github.com/mehcode/config-rs/pull/89
+[#91]: https://github.com/mehcode/config-rs/issues/91
+
+## 0.9.1 - 2018-09-25
+ - Allow Environment variable collection to ignore empty values. [#78]
+ ```rust
+ // Empty env variables will not be collected
+ Environment::with_prefix("APP").ignore_empty(true)
+ ```
+
+[#78]: https://github.com/mehcode/config-rs/pull/78
+
+## 0.9.0 - 2018-07-02
+ - **Breaking Change:** Environment does not declare a separator by default.
+ ```rust
+ // 0.8.0
+ Environment::with_prefix("APP")
+
+ // 0.9.0
+ Environment::with_prefix("APP").separator("_")
+ ```
+
+ - Add support for INI. [#72]
+ - Add support for newtype structs. [#71]
+ - Fix bug with array set by path. [#69]
+ - Update to nom 4. [#63]
+
+[#72]: https://github.com/mehcode/config-rs/pull/72
+[#71]: https://github.com/mehcode/config-rs/pull/71
+[#69]: https://github.com/mehcode/config-rs/pull/69
+[#63]: https://github.com/mehcode/config-rs/pull/63
+
+## 0.8.0 - 2018-01-26
+ - Update lazy_static and yaml_rust
+
+## 0.7.1 - 2018-01-26
+ - Be compatible with nom's verbose_errors feature (#50)[https://github.com/mehcode/config-rs/pull/50]
+ - Add `derive(PartialEq)` for Value (#54)[https://github.com/mehcode/config-rs/pull/54]
+
+## 0.7.0 - 2017-08-05
+ - Fix conflict with `serde_yaml`. [#39]
+
+[#39]: https://github.com/mehcode/config-rs/issues/39
+
+ - Implement `Source` for `Config`.
+ - Implement `serde::de::Deserializer` for `Config`. `my_config.deserialize` may now be called as either `Deserialize::deserialize(my_config)` or `my_config.try_into()`.
+ - Remove `ConfigResult`. The builder pattern requires either `.try_into` as the final step _or_ the initial `Config::new()` to be bound to a slot. Errors must also be handled on each call instead of at the end of the chain.
+
+
+ ```rust
+ let mut c = Config::new();
+ c
+ .merge(File::with_name("Settings")).unwrap()
+ .merge(Environment::with_prefix("APP")).unwrap();
+ ```
+
+ ```rust
+ let c = Config::new()
+ .merge(File::with_name("Settings")).unwrap()
+ .merge(Environment::with_prefix("APP")).unwrap()
+ // LLVM should be smart enough to remove the actual clone operation
+ // as you are cloning a temporary that is dropped at the same time
+ .clone();
+ ```
+
+ ```rust
+ let mut s: Settings = Config::new()
+ .merge(File::with_name("Settings")).unwrap()
+ .merge(Environment::with_prefix("APP")).unwrap()
+ .try_into();
+ ```
+
+## 0.6.0 – 2017-06-22
+ - Implement `Source` for `Vec<T: Source>` and `Vec<Box<Source>>`
+
+ ```rust
+ Config::new()
+ .merge(vec![
+ File::with_name("config/default"),
+ File::with_name(&format!("config/{}", run_mode)),
+ ])
+ ```
+
+ - Implement `From<&Path>` and `From<PathBuf>` for `File`
+
+ - Remove `namespace` option for File
+ - Add builder pattern to condense configuration
+
+ ```rust
+ Config::new()
+ .merge(File::with_name("Settings"))
+ .merge(Environment::with_prefix("APP"))
+ .unwrap()
+ ```
+
+ - Parsing errors even for non required files – [@Anthony25] ( [#33] )
+
+[@Anthony25]: https://github.com/Anthony25
+[#33]: https://github.com/mehcode/config-rs/pull/33
+
+## 0.5.1 – 2017-06-16
+ - Added config category to Cargo.toml
+
+## 0.5.0 – 2017-06-16
+ - `config.get` has been changed to take a type parameter and to deserialize into that type using serde. Old behavior (get a value variant) can be used by passing `config::Value` as the type parameter: `my_config.get::<config::Value>("..")`. Some great help here from [@impowski] in [#25].
+ - Propagate parse and type errors through the deep merge (remembering filename, line, etc.)
+ - Remove directory traversal on `File`. This is likely temporary. I do _want_ this behavior but I can see how it should be optional. See [#35]
+ - Add `File::with_name` to get automatic file format detection instead of manual `FileFormat::*` – [@JordiPolo]
+ - Case normalization [#26]
+ - Remove many possible panics [#8]
+ - `my_config.refresh()` will do a full re-read from the source so live configuration is possible with some work to watch the file
+
+[#8]: https://github.com/mehcode/config-rs/issues/8
+[#35]: https://github.com/mehcode/config-rs/pull/35
+[#26]: https://github.com/mehcode/config-rs/pull/26
+[#25]: https://github.com/mehcode/config-rs/pull/25
+
+[@impowski]: https://github.com/impowski
+[@JordiPolo]: https://github.com/JordiPolo
+
+## 0.4.0 - 2017-02-12
+ - Remove global ( `config::get` ) API — It's now required to create a local configuration instance with `config::Config::new()` first.
+
+ If you'd like to have a global configuration instance, use `lazy_static!` as follows:
+
+ ```rust
+ use std::sync::RwLock;
+ use config::Config;
+
+ lazy_static! {
+ static ref CONFIG: RwLock<Config> = Default::default();
+ }
+ ```
+
+## 0.3.0 - 2017-02-08
+ - YAML from [@tmccombs](https://github.com/tmccombs)
+ - Nested field retrieval
+ - Deep merging of sources (was shallow)
+ - `config::File::from_str` to parse and merge a file from a string
+ - Support for retrieval of maps and slices — `config::get_table` and `config::get_array`
+
+## 0.2.0 - 2017-01-29
+Initial release.
diff --git a/vendor/config-0.11.0/Cargo.toml b/vendor/config-0.11.0/Cargo.toml
new file mode 100644
index 00000000..751911f3
--- /dev/null
+++ b/vendor/config-0.11.0/Cargo.toml
@@ -0,0 +1,70 @@
+# THIS FILE IS AUTOMATICALLY GENERATED BY CARGO
+#
+# When uploading crates to the registry Cargo will automatically
+# "normalize" Cargo.toml files for maximal compatibility
+# with all versions of Cargo and also rewrite `path` dependencies
+# to registry (e.g., crates.io) dependencies
+#
+# If you believe there's an error in this file please file an
+# issue against the rust-lang/cargo repository. If you're
+# editing this file be aware that the upstream Cargo.toml
+# will likely look very different (and much more reasonable)
+
+[package]
+name = "config"
+version = "0.11.0"
+authors = ["Ryan Leckey <leckey.ryan@gmail.com>"]
+description = "Layered configuration system for Rust applications."
+homepage = "https://github.com/mehcode/config-rs"
+readme = "README.md"
+keywords = ["config", "configuration", "settings", "env", "environment"]
+categories = ["config"]
+license = "MIT/Apache-2.0"
+repository = "https://github.com/mehcode/config-rs"
+[dependencies.lazy_static]
+version = "1.0"
+
+[dependencies.nom]
+version = "5.0.0"
+
+[dependencies.rust-ini]
+version = "0.13"
+optional = true
+
+[dependencies.serde]
+version = "1.0.8"
+
+[dependencies.serde-hjson]
+version = "0.9"
+optional = true
+default-features = false
+
+[dependencies.serde_json]
+version = "1.0.2"
+optional = true
+
+[dependencies.toml]
+version = "0.5"
+optional = true
+
+[dependencies.yaml-rust]
+version = "0.4"
+optional = true
+[dev-dependencies.chrono]
+version = "0.4"
+features = ["serde"]
+
+[dev-dependencies.float-cmp]
+version = "0.6"
+
+[dev-dependencies.serde_derive]
+version = "1.0.8"
+
+[features]
+default = ["toml", "json", "yaml", "hjson", "ini"]
+hjson = ["serde-hjson"]
+ini = ["rust-ini"]
+json = ["serde_json"]
+yaml = ["yaml-rust"]
+[badges.maintenance]
+status = "actively-developed"
diff --git a/vendor/config-0.11.0/LICENSE-APACHE b/vendor/config-0.11.0/LICENSE-APACHE
new file mode 100644
index 00000000..88c55e3c
--- /dev/null
+++ b/vendor/config-0.11.0/LICENSE-APACHE
@@ -0,0 +1,201 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+END OF TERMS AND CONDITIONS
+
+APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+Copyright 2017 Ryan Leckey
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.