@@ -358,6 +358,13 @@ impl wasi_keyvalue::atomics::HostCas for KeyValueDispatch {
358358
359359#[ async_trait]
360360impl wasi_keyvalue:: atomics:: Host for KeyValueDispatch {
361+ fn convert_cas_error (
362+ & mut self ,
363+ error : spin_world:: wasi:: keyvalue:: atomics:: CasError ,
364+ ) -> std:: result:: Result < spin_world:: wasi:: keyvalue:: atomics:: CasError , anyhow:: Error > {
365+ Ok ( error)
366+ }
367+
361368 #[ instrument( name = "spin_key_value.increment" , skip( self , bucket, key, delta) , err( level = Level :: INFO ) , fields( otel. kind = "client" ) ) ]
362369 async fn increment (
363370 & mut self ,
@@ -374,27 +381,29 @@ impl wasi_keyvalue::atomics::Host for KeyValueDispatch {
374381 & mut self ,
375382 cas_res : Resource < atomics:: Cas > ,
376383 value : Vec < u8 > ,
377- ) -> Result < std :: result :: Result < ( ) , CasError > > {
384+ ) -> Result < ( ) , CasError > {
378385 let cas_rep = cas_res. rep ( ) ;
379386 let cas = self
380387 . get_cas ( Resource :: < Bucket > :: new_own ( cas_rep) )
381388 . map_err ( |e| CasError :: StoreError ( atomics:: Error :: Other ( e. to_string ( ) ) ) ) ?;
382389
383390 match cas. swap ( value) . await {
384- Ok ( _) => Ok ( Ok ( ( ) ) ) ,
391+ Ok ( _) => Ok ( ( ) ) ,
385392 Err ( err) => match err {
386393 SwapError :: CasFailed ( _) => {
387394 let bucket = Resource :: new_own ( cas. bucket_rep ( ) . await ) ;
388- let new_cas = self . new ( bucket, cas. key ( ) . await ) . await ?;
395+ let new_cas = self
396+ . new ( bucket, cas. key ( ) . await )
397+ . await
398+ . map_err ( CasError :: StoreError ) ?;
389399 let new_cas_rep = new_cas. rep ( ) ;
390- self . current ( Resource :: new_own ( new_cas_rep) ) . await ?;
391- Err ( anyhow:: Error :: new ( CasError :: CasFailed ( Resource :: new_own (
392- new_cas_rep,
393- ) ) ) )
400+ self . current ( Resource :: new_own ( new_cas_rep) )
401+ . await
402+ . map_err ( CasError :: StoreError ) ?;
403+ let res = Resource :: new_own ( new_cas_rep) ;
404+ Err ( CasError :: CasFailed ( res) )
394405 }
395- SwapError :: Other ( msg) => Err ( anyhow:: Error :: new ( CasError :: StoreError (
396- atomics:: Error :: Other ( msg) ,
397- ) ) ) ,
406+ SwapError :: Other ( msg) => Err ( CasError :: StoreError ( atomics:: Error :: Other ( msg) ) ) ,
398407 } ,
399408 }
400409 }
0 commit comments