11use mlua:: prelude:: * ;
2+ use ordered_float:: NotNan ;
23
34use super :: util:: { table_is_timestamp, table_to_timestamp, timestamp_to_table} ;
45use crate :: event:: Value ;
@@ -9,7 +10,7 @@ impl<'a> ToLua<'a> for Value {
910 match self {
1011 Value :: Bytes ( b) => lua. create_string ( b. as_ref ( ) ) . map ( LuaValue :: String ) ,
1112 Value :: Integer ( i) => Ok ( LuaValue :: Integer ( i) ) ,
12- Value :: Float ( f) => Ok ( LuaValue :: Number ( f) ) ,
13+ Value :: Float ( f) => Ok ( LuaValue :: Number ( f. into_inner ( ) ) ) ,
1314 Value :: Boolean ( b) => Ok ( LuaValue :: Boolean ( b) ) ,
1415 Value :: Timestamp ( t) => timestamp_to_table ( lua, t) . map ( LuaValue :: Table ) ,
1516 Value :: Map ( m) => lua. create_table_from ( m. into_iter ( ) ) . map ( LuaValue :: Table ) ,
@@ -24,7 +25,14 @@ impl<'a> FromLua<'a> for Value {
2425 match value {
2526 LuaValue :: String ( s) => Ok ( Value :: Bytes ( Vec :: from ( s. as_bytes ( ) ) . into ( ) ) ) ,
2627 LuaValue :: Integer ( i) => Ok ( Value :: Integer ( i) ) ,
27- LuaValue :: Number ( f) => Ok ( Value :: Float ( f) ) ,
28+ LuaValue :: Number ( f) => {
29+ let f = NotNan :: new ( f) . map_err ( |_| mlua:: Error :: FromLuaConversionError {
30+ from : value. type_name ( ) ,
31+ to : "Value" ,
32+ message : Some ( "NaN not supported" . to_string ( ) ) ,
33+ } ) ?;
34+ Ok ( Value :: Float ( f) )
35+ }
2836 LuaValue :: Boolean ( b) => Ok ( Value :: Boolean ( b) ) ,
2937 LuaValue :: Table ( t) => {
3038 if t. len ( ) ? > 0 {
@@ -58,13 +66,13 @@ mod test {
5866 Value :: Bytes ( "\u{237a} \u{3b2} \u{3b3} " . into( ) ) ,
5967 ) ,
6068 ( "123" , Value :: Integer ( 123 ) ) ,
61- ( "4.333" , Value :: Float ( 4.333 ) ) ,
69+ ( "4.333" , Value :: from ( 4.333 ) ) ,
6270 ( "true" , Value :: Boolean ( true ) ) ,
6371 (
6472 "{ x = 1, y = '2', nested = { other = 5.678 } }" ,
6573 Value :: Map (
6674 vec![
67- ( "x" . into( ) , 1 . into( ) ) ,
75+ ( "x" . into( ) , 1_i64 . into( ) ) ,
6876 ( "y" . into( ) , "2" . into( ) ) ,
6977 (
7078 "nested" . into( ) ,
@@ -77,7 +85,7 @@ mod test {
7785 ) ,
7886 (
7987 "{1, '2', 0.57721566}" ,
80- Value :: Array ( vec![ 1 . into( ) , "2" . into( ) , 0.577_215_66 . into( ) ] ) ,
88+ Value :: Array ( vec![ 1_i64 . into( ) , "2" . into( ) , 0.577_215_66 . into( ) ] ) ,
8189 ) ,
8290 (
8391 "os.date('!*t', 1584297428)" ,
@@ -122,7 +130,7 @@ mod test {
122130 "# ,
123131 ) ,
124132 (
125- Value :: Float ( 4.333 ) ,
133+ Value :: from ( 4.333 ) ,
126134 r#"
127135 function (value)
128136 return value == 4.333
@@ -140,7 +148,7 @@ mod test {
140148 (
141149 Value :: Map (
142150 vec![
143- ( "x" . into( ) , 1 . into( ) ) ,
151+ ( "x" . into( ) , 1_i64 . into( ) ) ,
144152 ( "y" . into( ) , "2" . into( ) ) ,
145153 (
146154 "nested" . into( ) ,
@@ -159,7 +167,7 @@ mod test {
159167 "# ,
160168 ) ,
161169 (
162- Value :: Array ( vec![ 1 . into( ) , "2" . into( ) , 0.577_215_66 . into( ) ] ) ,
170+ Value :: Array ( vec![ 1_i64 . into( ) , "2" . into( ) , 0.577_215_66 . into( ) ] ) ,
163171 r#"
164172 function (value)
165173 return value[1] == 1 and
0 commit comments