55//! type safety for resource kind references.
66
77use std:: fmt;
8+ use std:: str:: FromStr ;
89
910/// Enumeration of all Flux CRD resource kinds
1011#[ derive( Debug , Clone , Copy , PartialEq , Eq , Hash ) ]
@@ -61,29 +62,10 @@ impl FluxResourceKind {
6162 }
6263 }
6364
64- /// Try to parse a string into a FluxResourceKind
65- pub fn from_str ( s : & str ) -> Option < Self > {
66- match s {
67- "GitRepository" => Some ( FluxResourceKind :: GitRepository ) ,
68- "OCIRepository" => Some ( FluxResourceKind :: OCIRepository ) ,
69- "HelmRepository" => Some ( FluxResourceKind :: HelmRepository ) ,
70- "Bucket" => Some ( FluxResourceKind :: Bucket ) ,
71- "HelmChart" => Some ( FluxResourceKind :: HelmChart ) ,
72- "ExternalArtifact" => Some ( FluxResourceKind :: ExternalArtifact ) ,
73- "Kustomization" => Some ( FluxResourceKind :: Kustomization ) ,
74- "HelmRelease" => Some ( FluxResourceKind :: HelmRelease ) ,
75- "ImageRepository" => Some ( FluxResourceKind :: ImageRepository ) ,
76- "ImagePolicy" => Some ( FluxResourceKind :: ImagePolicy ) ,
77- "ImageUpdateAutomation" => Some ( FluxResourceKind :: ImageUpdateAutomation ) ,
78- "Alert" => Some ( FluxResourceKind :: Alert ) ,
79- "Provider" => Some ( FluxResourceKind :: Provider ) ,
80- "Receiver" => Some ( FluxResourceKind :: Receiver ) ,
81- "ResourceSet" => Some ( FluxResourceKind :: ResourceSet ) ,
82- "ResourceSetInputProvider" => Some ( FluxResourceKind :: ResourceSetInputProvider ) ,
83- "FluxReport" => Some ( FluxResourceKind :: FluxReport ) ,
84- "FluxInstance" => Some ( FluxResourceKind :: FluxInstance ) ,
85- _ => None ,
86- }
65+ /// Try to parse a string into a FluxResourceKind, returning None if invalid
66+ /// Use this when you want Option<Self> instead of Result<Self, String>
67+ pub fn parse_optional ( s : & str ) -> Option < Self > {
68+ s. parse ( ) . ok ( )
8769 }
8870
8971 /// Try to parse a string (case-insensitive) into a FluxResourceKind
@@ -134,6 +116,34 @@ impl From<FluxResourceKind> for String {
134116 }
135117}
136118
119+ impl FromStr for FluxResourceKind {
120+ type Err = String ;
121+
122+ fn from_str ( s : & str ) -> Result < Self , Self :: Err > {
123+ match s {
124+ "GitRepository" => Ok ( FluxResourceKind :: GitRepository ) ,
125+ "OCIRepository" => Ok ( FluxResourceKind :: OCIRepository ) ,
126+ "HelmRepository" => Ok ( FluxResourceKind :: HelmRepository ) ,
127+ "Bucket" => Ok ( FluxResourceKind :: Bucket ) ,
128+ "HelmChart" => Ok ( FluxResourceKind :: HelmChart ) ,
129+ "ExternalArtifact" => Ok ( FluxResourceKind :: ExternalArtifact ) ,
130+ "Kustomization" => Ok ( FluxResourceKind :: Kustomization ) ,
131+ "HelmRelease" => Ok ( FluxResourceKind :: HelmRelease ) ,
132+ "ImageRepository" => Ok ( FluxResourceKind :: ImageRepository ) ,
133+ "ImagePolicy" => Ok ( FluxResourceKind :: ImagePolicy ) ,
134+ "ImageUpdateAutomation" => Ok ( FluxResourceKind :: ImageUpdateAutomation ) ,
135+ "Alert" => Ok ( FluxResourceKind :: Alert ) ,
136+ "Provider" => Ok ( FluxResourceKind :: Provider ) ,
137+ "Receiver" => Ok ( FluxResourceKind :: Receiver ) ,
138+ "ResourceSet" => Ok ( FluxResourceKind :: ResourceSet ) ,
139+ "ResourceSetInputProvider" => Ok ( FluxResourceKind :: ResourceSetInputProvider ) ,
140+ "FluxReport" => Ok ( FluxResourceKind :: FluxReport ) ,
141+ "FluxInstance" => Ok ( FluxResourceKind :: FluxInstance ) ,
142+ _ => Err ( format ! ( "Unknown Flux resource kind: {}" , s) ) ,
143+ }
144+ }
145+ }
146+
137147#[ cfg( test) ]
138148mod tests {
139149 use super :: * ;
@@ -148,14 +158,14 @@ mod tests {
148158 #[ test]
149159 fn test_from_str ( ) {
150160 assert_eq ! (
151- FluxResourceKind :: from_str ( "GitRepository" ) ,
161+ FluxResourceKind :: parse_optional ( "GitRepository" ) ,
152162 Some ( FluxResourceKind :: GitRepository )
153163 ) ;
154164 assert_eq ! (
155- FluxResourceKind :: from_str ( "OCIRepository" ) ,
165+ FluxResourceKind :: parse_optional ( "OCIRepository" ) ,
156166 Some ( FluxResourceKind :: OCIRepository )
157167 ) ;
158- assert_eq ! ( FluxResourceKind :: from_str ( "Unknown" ) , None ) ;
168+ assert_eq ! ( FluxResourceKind :: parse_optional ( "Unknown" ) , None ) ;
159169 }
160170
161171 #[ test]
0 commit comments