use indexmap::map::IndexMap; use node_semver::{Range, Version}; use serde::Deserialize; #[derive(Debug, Deserialize)] pub struct Human { pub name: String, pub url: Option, pub email: Option, } #[derive(Debug, Deserialize)] #[serde(untagged)] pub enum Person { Simple(String), Expanded(Human), } #[derive(Debug, Deserialize)] pub struct ExpandedFunding { pub r#type: String, pub url: String, } #[derive(Debug, Deserialize)] #[serde(untagged)] pub enum Funding { Simple(String), Expanded(ExpandedFunding), Multiple(Vec), } #[derive(Debug, Deserialize)] pub struct Bugs { pub url: Option, pub email: Option, } #[derive(Debug, Deserialize)] pub struct Repository { pub r#type: String, pub url: String, } #[derive(Debug, Deserialize)] #[serde(untagged)] pub enum Bin { Single(String), Multiple(IndexMap), } #[derive(Debug, Deserialize)] #[serde(untagged)] pub enum Man { Single(String), Multiple(Vec), } #[derive(Debug, Deserialize)] pub struct PeerDependencyMeta { pub optional: Option, } #[derive(Debug, Deserialize)] #[serde(untagged)] pub enum Override { Version(String), Nested(IndexMap), } /// #[derive(Debug, Deserialize)] #[serde(rename_all = "camelCase")] pub struct PackageJson { pub name: String, pub version: Version, pub description: Option, pub keywords: Option>, pub homepage: Option, pub bugs: Option, pub license: Option, pub author: Option, pub contributors: Option>, pub funding: Option, pub files: Option>, pub main: Option, pub browser: Option, pub bin: Option, pub man: Option, pub directories: Option>, pub repository: Option, pub scripts: Option>, pub config: Option>, pub dependencies: Option>, pub dev_dependencies: Option>, pub peer_dependencies: Option>, pub peer_dependencies_meta: Option>, pub bundled_dependencies: Option>, pub optional_dependencies: Option>, pub overrides: Option>, pub engines: Option>, pub os: Option>, pub cpu: Option>, pub private: Option, pub publish_config: Option>, pub workspaces: Option>, }