Crates.io | package_json_schema |
lib.rs | package_json_schema |
version | 0.2.2 |
source | src |
created_at | 2022-08-01 16:59:10.3274 |
updated_at | 2024-09-25 13:43:27.501937 |
description | Parse content from `package.json` content and consume the result as a `PackageJson` struct. |
homepage | https://github.com/ifiokjr/package_json_schema |
repository | https://github.com/ifiokjr/package_json_schema |
max_upload_size | |
id | 636949 |
size | 40,929 |
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
:
package_json_schema = "0.2"
If you would like to include validation then add the validate
feature.
package_json_schema = { version = "0.2", 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.
use package_json_schema::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 package_json = PackageJson::try_from(contents).unwrap();
assert_eq!(package_json.name.unwrap(), "my-package");
assert_eq!(package_json.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.
use std::fs::read_to_string;
use package_json_schema::PackageJson;
let contents = read_to_string("./tests/fixtures/1/package.json").unwrap();
let package_json = PackageJson::try_from(contents).unwrap();
assert_eq!(package_json.name.unwrap(), "test");
A package.json
file can also be created from a builder.
use package_json_schema::PackageJson;
use package_json_schema::AdditionalFields;
use package_json_schema::Person;
use indexmap::IndexMap;
let mut additional_fields: AdditionalFields = IndexMap::new();
additional_fields.insert("custom".into(), "value".into());
let package_json = PackageJson::builder()
.name("awesome")
.author(Person::String("Tester".into()))
.other(additional_fields)
.build();
let string_value = package_json.try_to_string().unwrap();
assert_eq!(
string_value,
r#"{"name":"awesome","author":"Tester","custom":"value"}"#
);
To validate the package.json
fields, enable the validate
feature.
package_json_schema = { version = "0.2.1", features = ["validate"] }
And then use the validate
method.
use std::fs::read_to_string;
use package_json_schema::PackageJson;
#[cfg(feature = "validate")]
use validator::Validate;
let contents = read_to_string("./tests/fixtures/1/package.json").unwrap();
let package_json = PackageJson::try_from(contents).unwrap();
#[cfg(feature = "validate")]
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
.
# The security mechanism didn't allow to load the `.envrc`.
# Since we trust it, let's allow it execution.
direnv allow .
At this point you should see the nix
commands available in your terminal.
Run the following commands to install all the required dependencies.
install:all
This installs all cargo binaries locally so you don't need to worry about polluting your global namespace with required versions. The following scripts are added to your PATH
.
scripts
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.
nix profile list # find the <index> of the devenv package
nix profile upgrade <index>
To setup recommended configuration for your favorite editor run the following commands.
setup:vscode # Setup vscode
Unlicense, see the LICENSE file.