66// option. This file may not be copied, modified, or distributed
77// except according to those terms.
88
9- //! Implementation for WASM via stdweb
10- extern crate std;
9+ #![ recursion_limit = "128" ]
10+ #[ cfg( not( all( target_arch = "wasm32" , target_os = "unknown" ) ) ) ]
11+ compile_error ! ( "This crate is only for the `wasm32-unknown-unknown` target" ) ;
1112
1213use core:: mem;
1314use std:: sync:: Once ;
@@ -16,15 +17,17 @@ use stdweb::js;
1617use stdweb:: unstable:: TryInto ;
1718use stdweb:: web:: error:: Error as WebError ;
1819
19- use crate :: Error ;
20+ use getrandom :: { register_custom_getrandom , Error } ;
2021
2122#[ derive( Clone , Copy , Debug ) ]
2223enum RngSource {
2324 Browser ,
2425 Node ,
2526}
2627
27- pub fn getrandom_inner ( dest : & mut [ u8 ] ) -> Result < ( ) , Error > {
28+ register_custom_getrandom ! ( getrandom_inner) ;
29+
30+ fn getrandom_inner ( dest : & mut [ u8 ] ) -> Result < ( ) , Error > {
2831 assert_eq ! ( mem:: size_of:: <usize >( ) , 4 ) ;
2932 static ONCE : Once = Once :: new ( ) ;
3033 static mut RNG_SOURCE : Result < RngSource , Error > = Ok ( RngSource :: Node ) ;
@@ -68,8 +71,6 @@ fn getrandom_init() -> Result<RngSource, Error> {
6871 unreachable ! ( )
6972 }
7073 } else {
71- let _err: WebError = js ! { return @{ result } . error } . try_into ( ) . unwrap ( ) ;
72- error ! ( "getrandom unavailable: {}" , _err) ;
7374 Err ( Error :: STDWEB_NO_RNG )
7475 }
7576}
@@ -104,8 +105,6 @@ fn getrandom_fill(source: RngSource, dest: &mut [u8]) -> Result<(), Error> {
104105 } ;
105106
106107 if js ! { return @{ result. as_ref( ) } . success } != true {
107- let _err: WebError = js ! { return @{ result } . error } . try_into ( ) . unwrap ( ) ;
108- error ! ( "getrandom failed: {}" , _err) ;
109108 return Err ( Error :: STDWEB_RNG_FAILED ) ;
110109 }
111110 }
0 commit comments