1
+ use std:: str:: FromStr ;
2
+
1
3
use serde:: { Deserialize , Serialize } ;
2
4
3
5
#[ derive( Clone , Debug , PartialEq , Eq ) ]
@@ -13,18 +15,6 @@ pub enum LuaVersion {
13
15
}
14
16
15
17
impl LuaVersion {
16
- pub fn from_str ( value : & str ) -> Self {
17
- match value {
18
- "lua51" => Self :: Lua51 ,
19
- "lua52" => Self :: Lua52 ,
20
- "lua53" => Self :: Lua53 ,
21
- "lua54" => Self :: Lua54 ,
22
- "luau" => Self :: Luau ,
23
- "luajit" => Self :: LuaJIT ,
24
- _ => Self :: Unknown ( value. to_string ( ) ) ,
25
- }
26
- }
27
-
28
18
pub fn to_str ( & self ) -> & str {
29
19
match self {
30
20
Self :: Lua51 => "lua51" ,
@@ -64,6 +54,22 @@ impl LuaVersion {
64
54
}
65
55
}
66
56
57
+ impl FromStr for LuaVersion {
58
+ type Err = ( ) ;
59
+
60
+ fn from_str ( value : & str ) -> Result < Self , Self :: Err > {
61
+ match value {
62
+ "lua51" => Ok ( Self :: Lua51 ) ,
63
+ "lua52" => Ok ( Self :: Lua52 ) ,
64
+ "lua53" => Ok ( Self :: Lua53 ) ,
65
+ "lua54" => Ok ( Self :: Lua54 ) ,
66
+ "luau" => Ok ( Self :: Luau ) ,
67
+ "luajit" => Ok ( Self :: LuaJIT ) ,
68
+ _ => Err ( ( ) ) ,
69
+ }
70
+ }
71
+ }
72
+
67
73
pub enum LuaVersionError < ' a > {
68
74
FeatureNotEnabled ( & ' a str ) ,
69
75
Unknown ( & ' a str ) ,
@@ -84,6 +90,10 @@ impl<'de> Deserialize<'de> for LuaVersion {
84
90
D : serde:: Deserializer < ' de > ,
85
91
{
86
92
let value = String :: deserialize ( deserializer) ?;
87
- Ok ( Self :: from_str ( & value) )
93
+ if let Ok ( version) = Self :: from_str ( & value) {
94
+ Ok ( version)
95
+ } else {
96
+ Ok ( Self :: Unknown ( value) )
97
+ }
88
98
}
89
99
}
0 commit comments