use license-file field for license field of package.json when no license field in Cargo.toml

In 'license' field of package.json, it's ok to say 'license is written in
some file' as follows:

```
{ "license" : "SEE LICENSE IN <filename>" }
```

This notation is useful when 'license' field is missing in `Cargo.toml`
but `license-file` field is provided.

Ref:
https://docs.npmjs.com/files/package.json#license
master
rhysd 6 years ago
parent bedbf3de9d
commit fee93bc965
  1. 16
      src/manifest/mod.rs

@ -40,6 +40,7 @@ struct CargoPackage {
name: String, name: String,
description: Option<String>, description: Option<String>,
license: Option<String>, license: Option<String>,
license_file: Option<String>,
repository: Option<String>, repository: Option<String>,
#[serde(default)] #[serde(default)]
@ -425,6 +426,15 @@ impl CrateData {
} }
} }
fn license(&self) -> Option<String> {
self.manifest.package.license.clone().or_else(|| {
self.manifest.package.license_file.clone().map(|file| {
// When license is written in file: https://docs.npmjs.com/files/package.json#license
format!("SEE LICENSE IN {}", file)
})
})
}
fn to_commonjs(&self, scope: &Option<String>, disable_dts: bool) -> NpmPackage { fn to_commonjs(&self, scope: &Option<String>, disable_dts: bool) -> NpmPackage {
let data = self.npm_data(scope, true, disable_dts); let data = self.npm_data(scope, true, disable_dts);
let pkg = &self.data.packages[self.current_idx]; let pkg = &self.data.packages[self.current_idx];
@ -436,7 +446,7 @@ impl CrateData {
collaborators: pkg.authors.clone(), collaborators: pkg.authors.clone(),
description: self.manifest.package.description.clone(), description: self.manifest.package.description.clone(),
version: pkg.version.clone(), version: pkg.version.clone(),
license: self.manifest.package.license.clone(), license: self.license(),
repository: self repository: self
.manifest .manifest
.package .package
@ -463,7 +473,7 @@ impl CrateData {
collaborators: pkg.authors.clone(), collaborators: pkg.authors.clone(),
description: self.manifest.package.description.clone(), description: self.manifest.package.description.clone(),
version: pkg.version.clone(), version: pkg.version.clone(),
license: self.manifest.package.license.clone(), license: self.license(),
repository: self repository: self
.manifest .manifest
.package .package
@ -491,7 +501,7 @@ impl CrateData {
collaborators: pkg.authors.clone(), collaborators: pkg.authors.clone(),
description: self.manifest.package.description.clone(), description: self.manifest.package.description.clone(),
version: pkg.version.clone(), version: pkg.version.clone(),
license: self.manifest.package.license.clone(), license: self.license(),
repository: self repository: self
.manifest .manifest
.package .package

Loading…
Cancel
Save