Load a
package.json
file as a PackageJsonstruct
.
You want to load a package.json
file and interact with it as a struct.
Add this line to the [dependencies]
section of your Cargo.toml
:
toml
package_json_schema = "0.2.1"
If you would like to include validation then add the validate
feature.
toml
package_json_schema = { version = "0.2.1", features = ["validate"] }
This adds the validator
crate as a dependency and adds the .validate()
method to the PackageJson
struct. The fields are validated according to the JSON schema specification.
The following example shows how to load a package.json
file and use it as a struct.
```rust use packagejsonschema::PackageJson;
let contents = r###" { "name": "my-package", "version": "0.0.1", "dependencies": { "@sveltejs/kit": "1.0.0-next.396" }, "peerDependencies": { "aws-sdk": "2.1185.0" } } "###;
let packagejson = PackageJson::tryfrom(contents).unwrap(); asserteq!(packagejson.name.unwrap(), "my-package"); asserteq!(packagejson.version.unwrap(), "0.0.1"); ```
This crate leaves it to the user to load the package.json
content from the filesystem. Here is an example of loading the file contents and parsing the contents into a struct.
```rust use std::fs::readtostring; use packagejsonschema::PackageJson;
let contents = readtostring("./tests/fixtures/1/package.json").unwrap(); let packagejson = PackageJson::tryfrom(contents).unwrap();
asserteq!(packagejson.name.unwrap(), "test"); ```
A package.json
file can also be created from a builder.
```rust use packagejsonschema::PackageJson; use packagejsonschema::AdditionalFields; use packagejsonschema::Person; use indexmap::IndexMap;
let mut additionalfields: AdditionalFields = IndexMap::new(); additionalfields.insert("custom".into(), "value".into());
let packagejson = PackageJson::builder() .name("awesome") .author(Person::String("Tester".into())) .other(additionalfields) .build(); let stringvalue = packagejson.trytostring().unwrap();
asserteq!( stringvalue, r#"{"name":"awesome","author":"Tester","custom":"value"}"# ); ```
To validate the package.json
fields, enable the validate
feature.
toml
package_json_schema = { version = "0.2.1", features = ["validate"] }
And then use the validate
method.
```rust use std::fs::readtostring; use packagejsonschema::PackageJson;
use validator::Validate;
let contents = readtostring("./tests/fixtures/1/package.json").unwrap(); let packagejson = PackageJson::tryfrom(contents).unwrap();
package_json.validate().unwrap(); ```
devenv
is used to provide a reproducible development environment for this project. Follow the getting started instructions.
To automatically load the environment you should install direnv and then load the direnv
.
```bash
.envrc
.direnv allow . ```
At this point you should see the nix
commands available in your terminal.
devenv
If you have an outdated version of devenv
you can update it by running the following commands. If you have an easier way, please create a PR and I'll update these docs.
bash
nix profile list # find the index of the nxi package
nix profile remove <index>
nix profile install --accept-flake-config github:cachix/devenv/<version>
This project is licensed under the Unlicense license.