@@ -2,8 +2,9 @@ use crate::context::signal::Signal;
22use crate :: runtime:: error:: RuntimeError ;
33use std:: convert:: Infallible ;
44use tucana:: shared:: value:: Kind ;
5- use tucana:: shared:: { ListValue , Struct , Value } ;
5+ use tucana:: shared:: { ListValue , NumberValue , Struct , Value } ;
66
7+ use crate :: value:: number_to_f64;
78#[ derive( Clone , Debug ) ]
89pub enum Argument {
910 // Eval => Evaluated Value
@@ -40,12 +41,23 @@ impl TryFromArgument for Value {
4041 }
4142}
4243
44+ impl TryFromArgument for NumberValue {
45+ fn try_from_argument ( a : & Argument ) -> Result < Self , Signal > {
46+ match a {
47+ Argument :: Eval ( Value {
48+ kind : Some ( Kind :: NumberValue ( n) ) ,
49+ } ) => Ok ( n. clone ( ) ) ,
50+ _ => Err ( type_err ( "Expected number" , a) ) ,
51+ }
52+ }
53+ }
54+
4355impl TryFromArgument for f64 {
4456 fn try_from_argument ( a : & Argument ) -> Result < Self , Signal > {
4557 match a {
4658 Argument :: Eval ( Value {
4759 kind : Some ( Kind :: NumberValue ( n) ) ,
48- } ) => Ok ( * n ) ,
60+ } ) => number_to_f64 ( n ) . ok_or_else ( || type_err ( "Expected number" , a ) ) ,
4961 _ => Err ( type_err ( "Expected number" , a) ) ,
5062 }
5163 }
0 commit comments