use foldhash::HashMap;
use serde::Deserialize;
use serde::Serialize;
use serde_json::Value;
#[derive(Deserialize, Serialize, Clone, Debug)]
pub struct ComposerPackage {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub abandoned: Option<ComposerPackageAbandoned>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub archive: Option<ComposerPackageArchive>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub authors: Option<Authors>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub autoload: Option<Autoload>,
#[serde(rename = "autoload-dev", default, skip_serializing_if = "Option::is_none")]
pub autoload_dev: Option<ComposerPackageAutoloadDev>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub bin: Option<ComposerPackageBin>,
#[serde(rename = "_comment", default, skip_serializing_if = "Option::is_none")]
pub comment: Option<ComposerPackageComment>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub config: Option<ComposerPackageConfig>,
#[serde(default, skip_serializing_if = "HashMap::is_empty")]
pub conflict: HashMap<String, String>,
#[serde(rename = "default-branch", default, skip_serializing_if = "Option::is_none")]
pub default_branch: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub dist: Option<Dist>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub extra: Option<ComposerPackageExtra>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub funding: Vec<ComposerPackageFundingItem>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub homepage: Option<String>,
#[serde(rename = "include-path", default, skip_serializing_if = "Vec::is_empty")]
#[deprecated(
note = "This is only present to support legacy projects, and all new code should preferably use autoloading"
)]
pub include_path: Vec<String>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub keywords: Vec<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub license: Option<ComposerPackageLicense>,
#[serde(rename = "minimum-stability", default, skip_serializing_if = "Option::is_none")]
pub minimum_stability: Option<ComposerPackageMinimumStability>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub name: Option<ComposerPackageName>,
#[serde(rename = "non-feature-branches", default, skip_serializing_if = "Vec::is_empty")]
pub non_feature_branches: Vec<String>,
#[serde(rename = "php-ext", default, skip_serializing_if = "Option::is_none")]
pub php_ext: Option<ComposerPackagePhpExt>,
#[serde(rename = "prefer-stable", default, skip_serializing_if = "Option::is_none")]
pub prefer_stable: Option<bool>,
#[serde(default, skip_serializing_if = "HashMap::is_empty")]
pub provide: HashMap<String, String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub readme: Option<String>,
#[serde(default, skip_serializing_if = "HashMap::is_empty")]
pub replace: HashMap<String, String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub repositories: Option<ComposerPackageRepositories>,
#[serde(default, skip_serializing_if = "HashMap::is_empty")]
pub require: HashMap<String, String>,
#[serde(rename = "require-dev", default, skip_serializing_if = "HashMap::is_empty")]
pub require_dev: HashMap<String, String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub scripts: Option<ComposerPackageScripts>,
#[serde(rename = "scripts-aliases", default, skip_serializing_if = "HashMap::is_empty")]
pub scripts_aliases: HashMap<String, Vec<String>>,
#[serde(rename = "scripts-descriptions", default, skip_serializing_if = "HashMap::is_empty")]
pub scripts_descriptions: HashMap<String, String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub source: Option<Source>,
#[serde(default, skip_serializing_if = "HashMap::is_empty")]
pub suggest: HashMap<String, String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub support: Option<ComposerPackageSupport>,
#[serde(rename = "target-dir", default, skip_serializing_if = "Option::is_none")]
#[deprecated]
pub target_dir: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub time: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub r#type: Option<ComposerPackageType>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub version: Option<ComposerPackageVersion>,
}
#[derive(Deserialize, Serialize, Clone, Debug)]
#[serde(untagged)]
pub enum ComposerPackageAbandoned {
Boolean(bool),
String(String),
}
#[derive(Deserialize, Serialize, Clone, Debug)]
pub struct ComposerPackageArchive {
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub exclude: Vec<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
}
#[derive(Deserialize, Serialize, Clone, Debug)]
pub struct ComposerPackageAutoloadDev {
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub classmap: Vec<String>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub files: Vec<String>,
#[serde(rename = "psr-0", default, skip_serializing_if = "HashMap::is_empty")]
pub psr_0: HashMap<String, ComposerPackageAutoloadDevPsr0value>,
#[serde(rename = "psr-4", default, skip_serializing_if = "HashMap::is_empty")]
pub psr_4: HashMap<String, ComposerPackageAutoloadDevPsr4value>,
}
#[derive(Deserialize, Serialize, Clone, Debug)]
#[serde(untagged)]
pub enum ComposerPackageAutoloadDevPsr0value {
Array(Vec<String>),
String(String),
}
#[derive(Deserialize, Serialize, Clone, Debug)]
#[serde(untagged)]
pub enum ComposerPackageAutoloadDevPsr4value {
Array(Vec<String>),
String(String),
}
#[derive(Deserialize, Serialize, Clone, Debug)]
#[serde(untagged)]
pub enum ComposerPackageBin {
Array(Vec<String>),
String(String),
}
#[derive(Deserialize, Serialize, Clone, Debug)]
#[serde(untagged)]
pub enum ComposerPackageComment {
Array(Vec<String>),
String(String),
}
#[derive(Deserialize, Serialize, Clone, Debug)]
pub struct ComposerPackageConfig {
#[serde(rename = "allow-missing-requirements", default, skip_serializing_if = "Option::is_none")]
pub allow_missing_requirements: Option<bool>,
#[serde(rename = "allow-plugins", default, skip_serializing_if = "Option::is_none")]
pub allow_plugins: Option<ComposerPackageConfigAllowPlugins>,
#[serde(rename = "apcu-autoloader", default, skip_serializing_if = "Option::is_none")]
pub apcu_autoloader: Option<bool>,
#[serde(rename = "archive-dir", default, skip_serializing_if = "Option::is_none")]
pub archive_dir: Option<String>,
#[serde(rename = "archive-format", default, skip_serializing_if = "Option::is_none")]
pub archive_format: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub audit: Option<ComposerPackageConfigAudit>,
#[serde(rename = "autoloader-suffix", default, skip_serializing_if = "Option::is_none")]
pub autoloader_suffix: Option<String>,
#[serde(default, skip_serializing_if = "HashMap::is_empty")]
pub bearer: HashMap<String, String>,
#[serde(rename = "bin-compat", default, skip_serializing_if = "Option::is_none")]
pub bin_compat: Option<ComposerPackageConfigBinCompat>,
#[serde(rename = "bin-dir", default, skip_serializing_if = "Option::is_none")]
pub bin_dir: Option<String>,
#[serde(rename = "bitbucket-oauth", default, skip_serializing_if = "HashMap::is_empty")]
pub bitbucket_oauth: HashMap<String, ComposerPackageConfigBitbucketOauthValue>,
#[serde(rename = "bump-after-update", default, skip_serializing_if = "Option::is_none")]
pub bump_after_update: Option<ComposerPackageConfigBumpAfterUpdate>,
#[serde(rename = "cache-dir", default, skip_serializing_if = "Option::is_none")]
pub cache_dir: Option<String>,
#[serde(rename = "cache-files-dir", default, skip_serializing_if = "Option::is_none")]
pub cache_files_dir: Option<String>,
#[serde(rename = "cache-files-maxsize", default, skip_serializing_if = "Option::is_none")]
pub cache_files_maxsize: Option<ComposerPackageConfigCacheFilesMaxsize>,
#[serde(rename = "cache-files-ttl", default, skip_serializing_if = "Option::is_none")]
pub cache_files_ttl: Option<usize>,
#[serde(rename = "cache-read-only", default, skip_serializing_if = "Option::is_none")]
pub cache_read_only: Option<bool>,
#[serde(rename = "cache-repo-dir", default, skip_serializing_if = "Option::is_none")]
pub cache_repo_dir: Option<String>,
#[serde(rename = "cache-ttl", default, skip_serializing_if = "Option::is_none")]
pub cache_ttl: Option<usize>,
#[serde(rename = "cache-vcs-dir", default, skip_serializing_if = "Option::is_none")]
pub cache_vcs_dir: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub cafile: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub capath: Option<String>,
#[serde(rename = "classmap-authoritative", default, skip_serializing_if = "Option::is_none")]
pub classmap_authoritative: Option<bool>,
#[serde(rename = "data-dir", default, skip_serializing_if = "Option::is_none")]
pub data_dir: Option<String>,
#[serde(rename = "disable-tls", default, skip_serializing_if = "Option::is_none")]
pub disable_tls: Option<bool>,
#[serde(rename = "discard-changes", default, skip_serializing_if = "Option::is_none")]
pub discard_changes: Option<ComposerPackageConfigDiscardChanges>,
#[serde(rename = "github-domains", default, skip_serializing_if = "Vec::is_empty")]
pub github_domains: Vec<String>,
#[serde(rename = "github-expose-hostname", default, skip_serializing_if = "Option::is_none")]
pub github_expose_hostname: Option<bool>,
#[serde(rename = "github-oauth", default, skip_serializing_if = "HashMap::is_empty")]
pub github_oauth: HashMap<String, String>,
#[serde(rename = "github-protocols", default, skip_serializing_if = "Vec::is_empty")]
pub github_protocols: Vec<String>,
#[serde(rename = "gitlab-domains", default, skip_serializing_if = "Vec::is_empty")]
pub gitlab_domains: Vec<String>,
#[serde(rename = "gitlab-oauth", default, skip_serializing_if = "HashMap::is_empty")]
pub gitlab_oauth: HashMap<String, ComposerPackageConfigGitlabOauthValue>,
#[serde(rename = "gitlab-protocol", default, skip_serializing_if = "Option::is_none")]
pub gitlab_protocol: Option<ComposerPackageConfigGitlabProtocol>,
#[serde(rename = "gitlab-token", default, skip_serializing_if = "HashMap::is_empty")]
pub gitlab_token: HashMap<String, ComposerPackageConfigGitlabTokenValue>,
#[serde(rename = "htaccess-protect", default, skip_serializing_if = "Option::is_none")]
pub htaccess_protect: Option<bool>,
#[serde(rename = "http-basic", default, skip_serializing_if = "HashMap::is_empty")]
pub http_basic: HashMap<String, ComposerPackageConfigHttpBasicValue>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub lock: Option<bool>,
#[serde(rename = "notify-on-install", default, skip_serializing_if = "Option::is_none")]
pub notify_on_install: Option<bool>,
#[serde(rename = "optimize-autoloader", default, skip_serializing_if = "Option::is_none")]
pub optimize_autoloader: Option<bool>,
#[serde(default, skip_serializing_if = "HashMap::is_empty")]
pub platform: HashMap<String, ComposerPackageConfigPlatformValue>,
#[serde(rename = "platform-check", default, skip_serializing_if = "Option::is_none")]
pub platform_check: Option<ComposerPackageConfigPlatformCheck>,
#[serde(rename = "preferred-install", default, skip_serializing_if = "Option::is_none")]
pub preferred_install: Option<ComposerPackageConfigPreferredInstall>,
#[serde(rename = "prepend-autoloader", default, skip_serializing_if = "Option::is_none")]
pub prepend_autoloader: Option<bool>,
#[serde(rename = "process-timeout", default, skip_serializing_if = "Option::is_none")]
pub process_timeout: Option<usize>,
#[serde(rename = "secure-http", default, skip_serializing_if = "Option::is_none")]
pub secure_http: Option<bool>,
#[serde(rename = "secure-svn-domains", default, skip_serializing_if = "Vec::is_empty")]
pub secure_svn_domains: Vec<String>,
#[serde(rename = "sort-packages", default, skip_serializing_if = "Option::is_none")]
pub sort_packages: Option<bool>,
#[serde(rename = "store-auths", default, skip_serializing_if = "Option::is_none")]
pub store_auths: Option<ComposerPackageConfigStoreAuths>,
#[serde(rename = "use-github-api", default, skip_serializing_if = "Option::is_none")]
pub use_github_api: Option<bool>,
#[serde(rename = "use-include-path", default, skip_serializing_if = "Option::is_none")]
pub use_include_path: Option<bool>,
#[serde(rename = "use-parent-dir", default, skip_serializing_if = "Option::is_none")]
pub use_parent_dir: Option<ComposerPackageConfigUseParentDir>,
#[serde(rename = "vendor-dir", default, skip_serializing_if = "Option::is_none")]
pub vendor_dir: Option<String>,
}
#[derive(Deserialize, Serialize, Clone, Debug)]
#[serde(untagged)]
pub enum ComposerPackageConfigAllowPlugins {
Boolean(bool),
Object(HashMap<String, bool>),
}
#[derive(Deserialize, Serialize, Clone, Debug)]
pub struct ComposerPackageConfigAudit {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub abandoned: Option<ComposerPackageConfigAuditAbandoned>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub ignore: Option<ComposerPackageConfigAuditIgnore>,
}
#[derive(Deserialize, Serialize, Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
pub enum ComposerPackageConfigAuditAbandoned {
#[serde(rename = "ignore")]
Ignore,
#[serde(rename = "report")]
Report,
#[serde(rename = "fail")]
Fail,
}
#[derive(Deserialize, Serialize, Clone, Debug)]
#[serde(untagged)]
pub enum ComposerPackageConfigAuditIgnore {
DescribedIdentifiers(HashMap<String, String>),
Identifiers(Vec<String>),
}
#[derive(Deserialize, Serialize, Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
pub enum ComposerPackageConfigBinCompat {
#[serde(rename = "auto")]
Auto,
#[serde(rename = "full")]
Full,
#[serde(rename = "proxy")]
Proxy,
#[serde(rename = "symlink")]
Symlink,
}
#[derive(Deserialize, Serialize, Clone, Debug)]
pub struct ComposerPackageConfigBitbucketOauthValue {
#[serde(rename = "access-token", default, skip_serializing_if = "Option::is_none")]
pub access_token: Option<String>,
#[serde(rename = "access-token-expiration", default, skip_serializing_if = "Option::is_none")]
pub access_token_expiration: Option<isize>,
#[serde(rename = "consumer-key")]
pub consumer_key: String,
#[serde(rename = "consumer-secret")]
pub consumer_secret: String,
}
#[derive(Deserialize, Serialize, Clone, Debug)]
#[serde(untagged)]
pub enum ComposerPackageConfigBumpAfterUpdate {
Boolean(bool),
String(String),
}
#[derive(Deserialize, Serialize, Clone, Debug)]
#[serde(untagged)]
pub enum ComposerPackageConfigCacheFilesMaxsize {
String(String),
Integer(usize),
}
#[derive(Deserialize, Serialize, Clone, Debug)]
#[serde(untagged)]
pub enum ComposerPackageConfigDiscardChanges {
Boolean(bool),
String(String),
}
#[derive(Deserialize, Serialize, Clone, Debug)]
#[serde(untagged)]
pub enum ComposerPackageConfigGitlabOauthValue {
Object {
#[serde(rename = "expires-at", default, skip_serializing_if = "Option::is_none")]
expires_at: Option<usize>,
#[serde(rename = "refresh-token", default, skip_serializing_if = "Option::is_none")]
refresh_token: Option<String>,
token: String,
},
String(String),
}
#[derive(Deserialize, Serialize, Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
pub enum ComposerPackageConfigGitlabProtocol {
#[serde(rename = "git")]
Git,
#[serde(rename = "http")]
Http,
#[serde(rename = "https")]
Https,
}
#[derive(Deserialize, Serialize, Clone, Debug)]
#[serde(untagged)]
pub enum ComposerPackageConfigGitlabTokenValue {
Object {
token: String,
username: String,
},
String(String),
}
#[derive(Deserialize, Serialize, Clone, Debug)]
pub struct ComposerPackageConfigHttpBasicValue {
pub password: String,
pub username: String,
}
#[derive(Deserialize, Serialize, Clone, Debug)]
#[serde(untagged)]
pub enum ComposerPackageConfigPlatformCheck {
Boolean(bool),
String(String),
}
#[derive(Deserialize, Serialize, Clone, Debug)]
#[serde(untagged)]
pub enum ComposerPackageConfigPlatformValue {
Boolean(bool),
String(String),
}
#[derive(Deserialize, Serialize, Clone, Debug)]
#[serde(untagged)]
pub enum ComposerPackageConfigPreferredInstall {
Object(HashMap<String, String>),
String(String),
}
#[derive(Deserialize, Serialize, Clone, Debug)]
#[serde(untagged)]
pub enum ComposerPackageConfigStoreAuths {
Boolean(bool),
String(String),
}
#[derive(Deserialize, Serialize, Clone, Debug)]
#[serde(untagged)]
pub enum ComposerPackageConfigUseParentDir {
Boolean(bool),
String(String),
}
#[derive(Deserialize, Serialize, Clone, Debug)]
#[serde(untagged)]
pub enum ComposerPackageExtra {
Object(HashMap<String, Value>),
Array(Vec<String>),
}
#[derive(Deserialize, Serialize, Clone, Debug)]
pub struct ComposerPackageFundingItem {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub r#type: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub url: Option<String>,
}
#[derive(Deserialize, Serialize, Clone, Debug)]
#[serde(untagged)]
pub enum ComposerPackageLicense {
Array(Vec<String>),
String(String),
}
#[derive(Deserialize, Serialize, Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
pub enum ComposerPackageMinimumStability {
#[serde(rename = "dev")]
Dev,
#[serde(rename = "alpha")]
Alpha,
#[serde(rename = "beta")]
Beta,
#[serde(rename = "rc", alias = "RC")]
Rc,
#[serde(rename = "stable")]
Stable,
}
#[derive(Serialize, Deserialize, Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
pub struct ComposerPackageName(pub String);
#[derive(Deserialize, Serialize, Clone, Debug)]
pub struct ComposerPackagePhpExt {
#[serde(rename = "configure-options", default, skip_serializing_if = "Vec::is_empty")]
pub configure_options: Vec<ComposerPackagePhpExtConfigureOptionsItem>,
#[serde(rename = "extension-name", default, skip_serializing_if = "Option::is_none")]
pub extension_name: Option<String>,
#[serde(default = "default_composer_package_php_ext_priority")]
pub priority: usize,
#[serde(rename = "support-nts", default = "default_composer_package_php_ext_support_nts")]
pub support_nts: bool,
#[serde(rename = "support-zts", default = "default_composer_package_php_ext_support_zts")]
pub support_zts: bool,
}
#[derive(Deserialize, Serialize, Clone, Debug)]
pub struct ComposerPackagePhpExtConfigureOptionsItem {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
pub name: ComposerPackagePhpExtConfigureOptionsItemName,
#[serde(rename = "needs-value", default)]
pub needs_value: bool,
}
#[derive(Serialize, Deserialize, Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
pub struct ComposerPackagePhpExtConfigureOptionsItemName(pub String);
#[derive(Deserialize, Serialize, Clone, Debug)]
#[serde(untagged)]
pub enum ComposerPackageRepositories {
Object(HashMap<String, ComposerPackageRepositoriesObjectValue>),
Array(Vec<ComposerPackageRepositoriesArrayItem>),
}
#[derive(Deserialize, Serialize, Clone, Debug)]
#[serde(untagged)]
pub enum ComposerPackageRepositoriesArrayItem {
Repository(Box<Repository>),
Map(HashMap<String, bool>),
}
#[derive(Deserialize, Serialize, Clone, Debug)]
#[serde(untagged)]
pub enum ComposerPackageRepositoriesObjectValue {
Repository(Box<Repository>),
Enabled(bool),
}
#[derive(Deserialize, Serialize, Clone, Debug)]
pub struct ComposerPackageScripts {
#[serde(rename = "post-autoload-dump", default, skip_serializing_if = "Option::is_none")]
pub post_autoload_dump: Option<ComposerPackageScriptsCallback>,
#[serde(rename = "post-create-project-cmd", default, skip_serializing_if = "Option::is_none")]
pub post_create_project_cmd: Option<ComposerPackageScriptsCallback>,
#[serde(rename = "post-install-cmd", default, skip_serializing_if = "Option::is_none")]
pub post_install_cmd: Option<ComposerPackageScriptsCallback>,
#[serde(rename = "post-package-install", default, skip_serializing_if = "Option::is_none")]
pub post_package_install: Option<ComposerPackageScriptsCallback>,
#[serde(rename = "post-package-uninstall", default, skip_serializing_if = "Option::is_none")]
pub post_package_uninstall: Option<ComposerPackageScriptsCallback>,
#[serde(rename = "post-package-update", default, skip_serializing_if = "Option::is_none")]
pub post_package_update: Option<ComposerPackageScriptsCallback>,
#[serde(rename = "post-root-package-install", default, skip_serializing_if = "Option::is_none")]
pub post_root_package_install: Option<ComposerPackageScriptsCallback>,
#[serde(rename = "post-status-cmd", default, skip_serializing_if = "Option::is_none")]
pub post_status_cmd: Option<ComposerPackageScriptsCallback>,
#[serde(rename = "post-update-cmd", default, skip_serializing_if = "Option::is_none")]
pub post_update_cmd: Option<ComposerPackageScriptsCallback>,
#[serde(rename = "pre-autoload-dump", default, skip_serializing_if = "Option::is_none")]
pub pre_autoload_dump: Option<ComposerPackageScriptsCallback>,
#[serde(rename = "pre-install-cmd", default, skip_serializing_if = "Option::is_none")]
pub pre_install_cmd: Option<ComposerPackageScriptsCallback>,
#[serde(rename = "pre-package-install", default, skip_serializing_if = "Option::is_none")]
pub pre_package_install: Option<ComposerPackageScriptsCallback>,
#[serde(rename = "pre-package-uninstall", default, skip_serializing_if = "Option::is_none")]
pub pre_package_uninstall: Option<ComposerPackageScriptsCallback>,
#[serde(rename = "pre-package-update", default, skip_serializing_if = "Option::is_none")]
pub pre_package_update: Option<ComposerPackageScriptsCallback>,
#[serde(rename = "pre-status-cmd", default, skip_serializing_if = "Option::is_none")]
pub pre_status_cmd: Option<ComposerPackageScriptsCallback>,
#[serde(rename = "pre-update-cmd", default, skip_serializing_if = "Option::is_none")]
pub pre_update_cmd: Option<ComposerPackageScriptsCallback>,
}
#[derive(Deserialize, Serialize, Clone, Debug)]
#[serde(untagged)]
pub enum ComposerPackageScriptsCallback {
One(String),
Many(Vec<String>),
}
#[derive(Deserialize, Serialize, Clone, Debug)]
pub struct ComposerPackageSupport {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub chat: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub docs: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub email: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub forum: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub irc: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub issues: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub rss: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub security: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub source: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub wiki: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
pub struct ComposerPackageType(pub String);
#[derive(Serialize, Deserialize, Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
pub struct ComposerPackageVersion(pub String);
#[derive(Deserialize, Serialize, Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
pub enum ArtifactRepositoryType {
#[serde(rename = "artifact")]
Artifact,
}
#[derive(Deserialize, Serialize, Clone, Debug)]
pub struct ArtifactRepository {
pub r#type: ArtifactRepositoryType,
pub url: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub canonical: Option<bool>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub exclude: Vec<String>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub only: Vec<String>,
}
#[derive(Deserialize, Serialize, Clone, Debug)]
pub struct Authors(pub Vec<AuthorsItem>);
#[derive(Deserialize, Serialize, Clone, Debug)]
#[serde(deny_unknown_fields)]
pub struct AuthorsItem {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub email: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub homepage: Option<String>,
pub name: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub role: Option<String>,
}
#[derive(Deserialize, Serialize, Clone, Debug)]
pub struct Autoload {
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub classmap: Vec<String>,
#[serde(rename = "exclude-from-classmap", default, skip_serializing_if = "Vec::is_empty")]
pub exclude_from_classmap: Vec<String>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub files: Vec<String>,
#[serde(rename = "psr-0", default, skip_serializing_if = "HashMap::is_empty")]
pub psr_0: HashMap<String, AutoloadPsr0value>,
#[serde(rename = "psr-4", default, skip_serializing_if = "HashMap::is_empty")]
pub psr_4: HashMap<String, AutoloadPsr4value>,
}
#[derive(Deserialize, Serialize, Clone, Debug)]
#[serde(untagged)]
pub enum AutoloadPsr0value {
Array(Vec<String>),
String(String),
}
#[derive(Deserialize, Serialize, Clone, Debug)]
#[serde(untagged)]
pub enum AutoloadPsr4value {
Array(Vec<String>),
String(String),
}
#[derive(Deserialize, Serialize, Clone, Debug)]
pub struct ComposerRepository {
pub r#type: ComposerRepositoryType,
pub url: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub allow_ssl_downgrade: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub canonical: Option<bool>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub exclude: Vec<String>,
#[serde(rename = "force-lazy-providers", default, skip_serializing_if = "Option::is_none")]
pub force_lazy_providers: Option<bool>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub only: Vec<String>,
#[serde(default, skip_serializing_if = "HashMap::is_empty")]
pub options: HashMap<String, Value>,
}
#[derive(Deserialize, Serialize, Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
pub enum ComposerRepositoryType {
#[serde(rename = "composer")]
Composer,
}
#[derive(Deserialize, Serialize, Clone, Debug)]
pub struct Dist {
pub r#type: String,
pub url: String,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub mirrors: Vec<Value>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub reference: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub shasum: Option<String>,
}
#[derive(Deserialize, Serialize, Clone, Debug)]
pub struct InlinePackage {
pub name: String,
pub version: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub archive: Option<InlinePackageArchive>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub authors: Option<Authors>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub autoload: Option<Autoload>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub bin: Option<InlinePackageBin>,
#[serde(default, skip_serializing_if = "HashMap::is_empty")]
pub conflict: HashMap<String, String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub dist: Option<Dist>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub extra: Option<InlinePackageExtra>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub homepage: Option<String>,
#[serde(rename = "include-path", default, skip_serializing_if = "Vec::is_empty")]
#[deprecated(
note = "this is only present to support legacy projects, and all new code should preferably use autoloading"
)]
pub include_path: Vec<String>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub keywords: Vec<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub license: Option<InlinePackageLicense>,
#[serde(default, skip_serializing_if = "HashMap::is_empty")]
pub provide: HashMap<String, String>,
#[serde(default, skip_serializing_if = "HashMap::is_empty")]
pub replace: HashMap<String, String>,
#[serde(default, skip_serializing_if = "HashMap::is_empty")]
pub require: HashMap<String, String>,
#[serde(rename = "require-dev", default, skip_serializing_if = "HashMap::is_empty")]
pub require_dev: HashMap<String, String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub source: Option<Source>,
#[serde(default, skip_serializing_if = "HashMap::is_empty")]
pub suggest: HashMap<String, String>,
#[serde(rename = "target-dir", default, skip_serializing_if = "Option::is_none")]
#[deprecated]
pub target_dir: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub time: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub r#type: Option<String>,
}
#[derive(Deserialize, Serialize, Clone, Debug)]
pub struct InlinePackageArchive {
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub exclude: Vec<Value>,
}
#[derive(Deserialize, Serialize, Clone, Debug)]
#[serde(untagged)]
pub enum InlinePackageBin {
One(String),
Many(Vec<String>),
}
#[derive(Deserialize, Serialize, Clone, Debug)]
#[serde(untagged)]
pub enum InlinePackageExtra {
Object(HashMap<String, Value>),
Array(Vec<Value>),
}
#[derive(Deserialize, Serialize, Clone, Debug)]
#[serde(untagged)]
pub enum InlinePackageLicense {
One(String),
Many(Vec<String>),
}
#[derive(Deserialize, Serialize, Clone, Debug)]
pub struct PackageRepository {
pub r#type: PackageRepositoryType,
pub package: PackageRepositoryPackage,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub canonical: Option<bool>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub exclude: Vec<String>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub only: Vec<String>,
}
#[derive(Deserialize, Serialize, Clone, Debug)]
#[serde(untagged)]
pub enum PackageRepositoryPackage {
One(InlinePackage),
Many(Vec<InlinePackage>),
}
#[derive(Deserialize, Serialize, Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
pub enum PackageRepositoryType {
#[serde(rename = "package")]
Package,
}
#[derive(Deserialize, Serialize, Clone, Debug)]
pub struct PathRepository {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub canonical: Option<bool>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub exclude: Vec<String>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub only: Vec<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub options: Option<PathRepositoryOptions>,
#[serde(rename = "type")]
pub type_: PathRepositoryType,
pub url: String,
}
#[derive(Deserialize, Serialize, Clone, Debug)]
pub struct PathRepositoryOptions {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub symlink: Option<bool>,
}
#[derive(Deserialize, Serialize, Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
pub enum PathRepositoryType {
#[serde(rename = "path")]
Path,
}
#[derive(Deserialize, Serialize, Clone, Debug)]
pub struct PearRepository {
pub r#type: PearRepositoryType,
pub url: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub canonical: Option<bool>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub exclude: Vec<String>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub only: Vec<String>,
#[serde(rename = "vendor-alias", default, skip_serializing_if = "Option::is_none")]
pub vendor_alias: Option<String>,
}
#[derive(Deserialize, Serialize, Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
pub enum PearRepositoryType {
#[serde(rename = "pear")]
Pear,
}
#[derive(Deserialize, Serialize, Clone, Debug)]
#[serde(untagged)]
pub enum Repository {
Composer(ComposerRepository),
Vcs(VcsRepository),
Path(PathRepository),
Artifact(ArtifactRepository),
Pear(PearRepository),
Package(PackageRepository),
}
#[derive(Deserialize, Serialize, Clone, Debug)]
pub struct Source {
pub r#type: String,
pub url: String,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub mirrors: Vec<Value>,
pub reference: String,
}
#[derive(Deserialize, Serialize, Clone, Debug)]
pub struct VcsRepository {
pub r#type: VcsRepositoryType,
pub url: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub branch: Option<String>,
#[serde(rename = "branches-path", default, skip_serializing_if = "Option::is_none")]
pub branches_path: Option<VcsRepositoryBranchesPath>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub canonical: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub depot: Option<String>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub exclude: Vec<String>,
#[serde(rename = "no-api", default, skip_serializing_if = "Option::is_none")]
pub no_api: Option<bool>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub only: Vec<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub p4password: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub p4user: Option<String>,
#[serde(rename = "package-path", default, skip_serializing_if = "Option::is_none")]
pub package_path: Option<String>,
#[serde(rename = "secure-http", default, skip_serializing_if = "Option::is_none")]
pub secure_http: Option<bool>,
#[serde(rename = "svn-cache-credentials", default, skip_serializing_if = "Option::is_none")]
pub svn_cache_credentials: Option<bool>,
#[serde(rename = "tags-path", default, skip_serializing_if = "Option::is_none")]
pub tags_path: Option<VcsRepositoryTagsPath>,
#[serde(rename = "trunk-path", default, skip_serializing_if = "Option::is_none")]
pub trunk_path: Option<VcsRepositoryTrunkPath>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub unique_perforce_client_name: Option<String>,
}
#[derive(Deserialize, Serialize, Clone, Debug)]
#[serde(untagged)]
pub enum VcsRepositoryBranchesPath {
Boolean(bool),
String(String),
}
#[derive(Deserialize, Serialize, Clone, Debug)]
#[serde(untagged)]
pub enum VcsRepositoryTagsPath {
Boolean(bool),
String(String),
}
#[derive(Deserialize, Serialize, Clone, Debug)]
#[serde(untagged)]
pub enum VcsRepositoryTrunkPath {
Boolean(bool),
String(String),
}
#[derive(Deserialize, Serialize, Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
pub enum VcsRepositoryType {
#[serde(rename = "vcs")]
Vcs,
#[serde(rename = "github")]
Github,
#[serde(rename = "git")]
Git,
#[serde(rename = "gitlab")]
Gitlab,
#[serde(rename = "bitbucket")]
Bitbucket,
#[serde(rename = "git-bitbucket")]
GitBitbucket,
#[serde(rename = "hg")]
Hg,
#[serde(rename = "fossil")]
Fossil,
#[serde(rename = "perforce")]
Perforce,
#[serde(rename = "svn")]
Svn,
}
const fn default_composer_package_php_ext_priority() -> usize {
80
}
const fn default_composer_package_php_ext_support_nts() -> bool {
true
}
const fn default_composer_package_php_ext_support_zts() -> bool {
true
}