Skip to content

Commit 3a10e4d

Browse files
committed
refactor(k8s-version): Move darling code into module
1 parent 95d2c83 commit 3a10e4d

File tree

3 files changed

+45
-35
lines changed

3 files changed

+45
-35
lines changed
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
use std::str::FromStr;
2+
3+
use darling::FromMeta;
4+
5+
use crate::ApiVersion;
6+
7+
impl FromMeta for ApiVersion {
8+
fn from_string(value: &str) -> darling::Result<Self> {
9+
Self::from_str(value).map_err(darling::Error::custom)
10+
}
11+
}
12+
13+
#[cfg(test)]
14+
mod test {
15+
use quote::quote;
16+
use rstest::rstest;
17+
18+
use super::*;
19+
use crate::{Level, Version};
20+
21+
fn parse_meta(tokens: proc_macro2::TokenStream) -> ::std::result::Result<syn::Meta, String> {
22+
let attribute: syn::Attribute = syn::parse_quote!(#[#tokens]);
23+
Ok(attribute.meta)
24+
}
25+
26+
#[rstest]
27+
#[case(quote!(ignore = "extensions/v1beta1"), ApiVersion { group: Some("extensions".parse().unwrap()), version: Version { major: 1, level: Some(Level::Beta(1)) } })]
28+
#[case(quote!(ignore = "v1beta1"), ApiVersion { group: None, version: Version { major: 1, level: Some(Level::Beta(1)) } })]
29+
#[case(quote!(ignore = "v1"), ApiVersion { group: None, version: Version { major: 1, level: None } })]
30+
fn from_meta(#[case] input: proc_macro2::TokenStream, #[case] expected: ApiVersion) {
31+
let meta = parse_meta(input).expect("valid attribute tokens");
32+
let api_version = ApiVersion::from_meta(&meta).expect("version must parse from attribute");
33+
assert_eq!(api_version, expected);
34+
}
35+
}

crates/k8s-version/src/api_version/mod.rs

Lines changed: 8 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,15 @@
11
use std::{cmp::Ordering, fmt::Display, str::FromStr};
22

3-
#[cfg(feature = "darling")]
4-
use darling::FromMeta;
53
use snafu::{ResultExt, Snafu};
64

75
use crate::{Group, ParseGroupError, ParseVersionError, Version};
86

97
#[cfg(feature = "serde")]
108
mod serde;
119

10+
#[cfg(feature = "darling")]
11+
mod darling;
12+
1213
/// Error variants which can be encountered when creating a new [`ApiVersion`]
1314
/// from unparsed input.
1415
#[derive(Debug, PartialEq, Snafu)]
@@ -45,13 +46,13 @@ impl FromStr for ApiVersion {
4546
fn from_str(input: &str) -> Result<Self, Self::Err> {
4647
let (group, version) = if let Some((group, version)) = input.split_once('/') {
4748
let group = Group::from_str(group).context(ParseGroupSnafu)?;
49+
let version = Version::from_str(version).context(ParseVersionSnafu)?;
4850

49-
(
50-
Some(group),
51-
Version::from_str(version).context(ParseVersionSnafu)?,
52-
)
51+
(Some(group), version)
5352
} else {
54-
(None, Version::from_str(input).context(ParseVersionSnafu)?)
53+
let version = Version::from_str(input).context(ParseVersionSnafu)?;
54+
55+
(None, version)
5556
};
5657

5758
Ok(Self { group, version })
@@ -77,13 +78,6 @@ impl Display for ApiVersion {
7778
}
7879
}
7980

80-
#[cfg(feature = "darling")]
81-
impl FromMeta for ApiVersion {
82-
fn from_string(value: &str) -> darling::Result<Self> {
83-
Self::from_str(value).map_err(darling::Error::custom)
84-
}
85-
}
86-
8781
impl ApiVersion {
8882
/// Create a new Kubernetes API version.
8983
pub fn new(group: Option<Group>, version: Version) -> Self {
@@ -104,19 +98,11 @@ impl ApiVersion {
10498

10599
#[cfg(test)]
106100
mod test {
107-
#[cfg(feature = "darling")]
108-
use quote::quote;
109101
use rstest::rstest;
110102

111103
use super::*;
112104
use crate::Level;
113105

114-
#[cfg(feature = "darling")]
115-
fn parse_meta(tokens: proc_macro2::TokenStream) -> ::std::result::Result<syn::Meta, String> {
116-
let attribute: syn::Attribute = syn::parse_quote!(#[#tokens]);
117-
Ok(attribute.meta)
118-
}
119-
120106
#[rstest]
121107
#[case("extensions/v1beta1", ApiVersion { group: Some("extensions".parse().unwrap()), version: Version { major: 1, level: Some(Level::Beta(1)) } })]
122108
#[case("v1beta1", ApiVersion { group: None, version: Version { major: 1, level: Some(Level::Beta(1)) } })]
@@ -145,15 +131,4 @@ mod test {
145131
fn partial_ord(#[case] input: Version, #[case] other: Version, #[case] expected: Ordering) {
146132
assert_eq!(input.partial_cmp(&other), Some(expected));
147133
}
148-
149-
#[cfg(feature = "darling")]
150-
#[rstest]
151-
#[case(quote!(ignore = "extensions/v1beta1"), ApiVersion { group: Some("extensions".parse().unwrap()), version: Version { major: 1, level: Some(Level::Beta(1)) } })]
152-
#[case(quote!(ignore = "v1beta1"), ApiVersion { group: None, version: Version { major: 1, level: Some(Level::Beta(1)) } })]
153-
#[case(quote!(ignore = "v1"), ApiVersion { group: None, version: Version { major: 1, level: None } })]
154-
fn from_meta(#[case] input: proc_macro2::TokenStream, #[case] expected: ApiVersion) {
155-
let meta = parse_meta(input).expect("valid attribute tokens");
156-
let api_version = ApiVersion::from_meta(&meta).expect("version must parse from attribute");
157-
assert_eq!(api_version, expected);
158-
}
159134
}

crates/k8s-version/src/group.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,13 +47,13 @@ impl FromStr for Group {
4747
ensure!(group.len() <= MAX_GROUP_LENGTH, TooLongSnafu);
4848
ensure!(API_GROUP_REGEX.is_match(group), InvalidFormatSnafu);
4949

50-
Ok(Self(group.to_string()))
50+
Ok(Self(group.to_owned()))
5151
}
5252
}
5353

5454
impl fmt::Display for Group {
5555
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
56-
write!(f, "{}", self.0)
56+
f.write_str(&*self)
5757
}
5858
}
5959

0 commit comments

Comments
 (0)