package_json_schema

Crates.iopackage_json_schema
lib.rspackage_json_schema
version0.2.1
sourcesrc
created_at2022-08-01 16:59:10.3274
updated_at2023-06-07 19:44:37.397944
descriptionParse content from `package.json` content and consume the result as a `PackageJson` struct.
homepagehttps://github.com/ifiokjr/package_json_schema
repositoryhttps://github.com/ifiokjr/package_json_schema
max_upload_size
id636949
size37,932
Ifiok Jr. (ifiokjr)

documentation

https://docs.rs/package_json_schema

README

📦️ package_json_schema


Load a package.json file as a PackageJson struct.

Crate Docs Continuous integration badge for github actions License


Why?

You want to load a package.json file and interact with it as a struct.


Installation

Add this line to the [dependencies] section of your Cargo.toml:

package_json_schema = "0.2.1"

If you would like to include validation then add the validate feature.

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.


Usage

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();

Contributing

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.

Upgrading 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 nxi package
nix profile remove <index>
nix profile install --accept-flake-config github:cachix/devenv/<version>

License

This project is licensed under the Unlicense license.

Commit count: 18

cargo fmt