1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
//!
//! Use the `package-json` crate to manage your `package.json` file.
//!
//! ## How to locate the closest `package.json` file
//!
//! ```no_run
//! use package_json::PackageJsonManager;
//! use std::path::Path;
//!
//! # use anyhow::Result;
//! # fn main() -> Result<()> {
//! let mut manager = PackageJsonManager::new();
//! // based on the current working directory
//! manager.locate_closest()?;
//! // based on the given path
//! manager.locate_closest_from(&Path::new("/path/to/working_dir"))?;
//! # Ok(())
//! # }
//! ```
//!
//! Use [`with_file_path`][PackageJsonManager::with_file_path] to create a [`PackageJsonManager`][PackageJsonManager] instance with the give file path.
//!
//! ```
//! use std::path::Path;
//! use package_json::PackageJsonManager;
//! let mut manager = PackageJsonManager::with_file_path(&Path::new("/path/to/package.json"));
//! ```
//!
//! Use [`set_file_path`][PackageJsonManager::set_file_path] to change file path.
//!
//! ## How to read or write the current `package.json` file
//!
//! We can use [`read_mut`][PackageJsonManager::read_mut] or [`read_ref`][PackageJsonManager::read_ref] to read the current `package.json` file after file located.
//!
//! ```
//! use package_json::PackageJsonManager;
//! let mut manager = PackageJsonManager::new();
//! if manager.locate_closest().is_ok() {
//! assert!(manager.read_mut().is_ok());
//! assert!(manager.read_ref().is_ok());
//! }
//! ```
//!
//! On the other hand, we should use [`as_mut`][PackageJsonManager::as_mut] and [`as_ref`][PackageJsonManager::as_ref] to get a mutable reference or a immutable reference if we have read it before.
//! ```
//! # use package_json::PackageJsonManager;
//! # let mut manager = PackageJsonManager::new();
//! # if manager.locate_closest().is_ok() {
//! manager.as_mut(); // or manager.as_ref();
//! # }
//! ```
//! Use [`write`][PackageJsonManager::write] to write the current `package.json` file to the disk. If we want to change the output path, eg. create a new `package.json`, we should use [`write_to`][PackageJsonManager::write_to] instead.
//! ```no_run
//! use package_json::PackageJsonManager;
//! use std::path::Path;
//!
//! # fn main() {
//! let mut manager = PackageJsonManager::new();
//! assert!(manager.write().is_ok());
//! assert!(manager.write_to(&Path::new("/path/to/package.json")).is_ok());
//! # }
//! ```
//!
mod fs;
mod manager;
mod schema;
pub use crate::manager::{PackageJsonManager, PACKAGE_JSON_FILENAME};
pub use crate::schema::*;