Skip to content

Commit

Permalink
Added basic metadata struct to Spec
Browse files Browse the repository at this point in the history
Signed-off-by: Aleksei Rusev <hou.alexx@gmail.com>
  • Loading branch information
Aleksei Rusev authored and alexxbb committed Oct 9, 2021
1 parent 96bb7de commit 1972a94
Show file tree
Hide file tree
Showing 5 changed files with 71 additions and 2 deletions.
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -35,4 +35,4 @@ dist/
# GENERATED FOR spdev:Rust
target/
# END spdev:Rust
.devcontainer/
.devcontainer/
24 changes: 24 additions & 0 deletions src/api/meta.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
// Copyright (c) 2021 Sony Pictures Imageworks, et al.
// SPDX-License-Identifier: Apache-2.0
// https://github.com/imageworks/spk

use pyo3::prelude::*;
use serde::{Deserialize, Serialize};
use std::collections::BTreeMap;

#[cfg(test)]
#[path = "./meta_test.rs"]
mod meta_test;

#[pyclass]
#[derive(Debug, Hash, Default, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct Meta {
#[serde(skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub homepage: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub license: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub labels: Option<BTreeMap<String, String>>,
}
37 changes: 37 additions & 0 deletions src/api/meta_test.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
// Copyright (c) 2021 Sony Pictures Imageworks, et al.
// SPDX-License-Identifier: Apache-2.0
// https://github.com/imageworks/spk

use rstest::rstest;

#[rstest]
fn test_package_meta_absent() {
let spec: serde_yaml::Result<crate::api::Spec> = serde_yaml::from_str(
r#"{
pkg: meta/1.0.0
}"#,
);
assert!(spec.is_ok());
assert!(spec.unwrap().meta.is_none())
}

#[rstest]
fn test_package_meta_basic() {
let spec: serde_yaml::Result<crate::api::Spec> = serde_yaml::from_str(
r#"
pkg: meta/1.0.0
meta:
description: package description
license: MIT
labels:
department: fx
"#,
);
assert!(spec.is_ok());
let spec = spec.unwrap();
assert!(spec.meta.is_some());
let meta = spec.meta.unwrap();
assert!(meta.description.is_some());
assert!(meta.homepage.is_none());
assert!(meta.labels.unwrap().contains_key("department"));
}
2 changes: 2 additions & 0 deletions src/api/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ mod build_spec;
mod compat;
mod ident;
mod install_spec;
mod meta;
mod name;
mod option;
mod option_map;
Expand All @@ -23,6 +24,7 @@ pub use build_spec::BuildSpec;
pub use compat::{parse_compat, Compat, CompatRule, CompatRuleSet, Compatibility};
pub use ident::{parse_ident, Ident};
pub use install_spec::InstallSpec;
pub use meta::Meta;
pub use name::{validate_name, validate_tag_name, InvalidNameError};
pub use option::{Inheritance, Opt, PkgOpt, VarOpt};
pub use option_map::{host_options, OptionMap};
Expand Down
8 changes: 7 additions & 1 deletion src/api/spec.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ use serde::{Deserialize, Serialize};

use super::{
request::is_false, Build, BuildSpec, Compat, Compatibility, Ident, Inheritance, InstallSpec,
Opt, OptionMap, PkgRequest, Request, SourceSpec, TestSpec, VarRequest,
Meta, Opt, OptionMap, PkgRequest, Request, SourceSpec, TestSpec, VarRequest,
};
use crate::{Error, Result};

Expand All @@ -34,6 +34,9 @@ pub struct Spec {
#[serde(default)]
pub pkg: Ident,
#[pyo3(get, set)]
#[serde(default, skip_serializing_if = "Option::is_none")]
pub meta: Option<Meta>,
#[pyo3(get, set)]
#[serde(default, skip_serializing_if = "Compat::is_default")]
pub compat: Compat,
#[pyo3(get, set)]
Expand Down Expand Up @@ -237,6 +240,8 @@ impl<'de> Deserialize<'de> for Spec {
#[serde(default)]
pkg: Ident,
#[serde(default)]
meta: Option<Meta>,
#[serde(default)]
compat: Compat,
#[serde(default)]
deprecated: bool,
Expand All @@ -262,6 +267,7 @@ impl<'de> Deserialize<'de> for Spec {

Ok(Spec {
pkg: unchecked.pkg,
meta: unchecked.meta,
compat: unchecked.compat,
deprecated: unchecked.deprecated,
sources: unchecked
Expand Down

0 comments on commit 1972a94

Please sign in to comment.