@@ -26,7 +26,7 @@ use wasmcloud_tracing::context::TraceContextInjector;
26
26
use wrpc_transport:: InvokeExt as _;
27
27
28
28
use super :: config:: ConfigBundle ;
29
- use super :: injector_to_headers;
29
+ use super :: { injector_to_headers, Features } ;
30
30
31
31
#[ derive( Clone , Debug ) ]
32
32
pub struct Handler {
@@ -62,6 +62,8 @@ pub struct Handler {
62
62
pub messaging_links : Arc < RwLock < HashMap < Box < str > , async_nats:: Client > > > ,
63
63
64
64
pub invocation_timeout : Duration ,
65
+ /// Experimental features enabled in the host for gating handler functionality
66
+ pub experimental_features : Features ,
65
67
}
66
68
67
69
impl Handler {
@@ -78,6 +80,7 @@ impl Handler {
78
80
instance_links : self . instance_links . clone ( ) ,
79
81
messaging_links : self . messaging_links . clone ( ) ,
80
82
invocation_timeout : self . invocation_timeout ,
83
+ experimental_features : self . experimental_features ,
81
84
}
82
85
}
83
86
}
@@ -585,23 +588,27 @@ impl MessagingHostMessage0_3 for Message {
585
588
}
586
589
587
590
impl Messaging0_3 for Handler {
591
+ #[ instrument( level = "debug" , skip_all) ]
588
592
async fn connect (
589
593
& self ,
590
594
name : String ,
591
595
) -> anyhow:: Result <
592
596
Result < Box < dyn MessagingClient0_3 + Send + Sync > , messaging0_3_0:: types:: Error > ,
593
597
> {
598
+ self . ensure_messaging_v3 ( ) ?;
594
599
Ok ( Ok ( Box :: new ( MessagingClient {
595
600
name : name. into_boxed_str ( ) ,
596
601
} ) ) )
597
602
}
598
603
604
+ #[ instrument( level = "debug" , skip_all) ]
599
605
async fn send (
600
606
& self ,
601
607
client : & ( dyn MessagingClient0_3 + Send + Sync ) ,
602
608
topic : messaging0_3_0:: types:: Topic ,
603
609
message : messaging0_3_0:: types:: Message ,
604
610
) -> anyhow:: Result < Result < ( ) , messaging0_3_0:: types:: Error > > {
611
+ self . ensure_messaging_v3 ( ) ?;
605
612
use wasmcloud_runtime:: capability:: wrpc:: wasmcloud:: messaging0_2_0 as messaging;
606
613
607
614
let MessagingClient { name } = client
@@ -741,6 +748,7 @@ impl Messaging0_3 for Handler {
741
748
}
742
749
}
743
750
751
+ #[ instrument( level = "debug" , skip_all) ]
744
752
async fn request (
745
753
& self ,
746
754
client : & ( dyn MessagingClient0_3 + Send + Sync ) ,
@@ -750,6 +758,7 @@ impl Messaging0_3 for Handler {
750
758
) -> anyhow:: Result <
751
759
Result < Vec < Box < dyn MessagingHostMessage0_3 + Send + Sync > > , messaging0_3_0:: types:: Error > ,
752
760
> {
761
+ self . ensure_messaging_v3 ( ) ?;
753
762
if options. is_some ( ) {
754
763
return Ok ( Err ( messaging0_3_0:: types:: Error :: Other (
755
764
"`options` not currently supported" . into ( ) ,
@@ -906,11 +915,13 @@ impl Messaging0_3 for Handler {
906
915
}
907
916
}
908
917
918
+ #[ instrument( level = "debug" , skip_all) ]
909
919
async fn reply (
910
920
& self ,
911
921
reply_to : & messaging0_3_0:: types:: Message ,
912
922
message : messaging0_3_0:: types:: Message ,
913
923
) -> anyhow:: Result < Result < ( ) , messaging0_3_0:: types:: Error > > {
924
+ self . ensure_messaging_v3 ( ) ?;
914
925
use wasmcloud_runtime:: capability:: wrpc:: wasmcloud:: messaging0_2_0 as messaging;
915
926
916
927
{
@@ -1117,3 +1128,16 @@ impl InvocationErrorIntrospect for Handler {
1117
1128
InvocationErrorKind :: Trap
1118
1129
}
1119
1130
}
1131
+
1132
+ impl Handler {
1133
+ /// Helper function for our wasmcloud:messaging@v3 invocations to ensure the feature is enabled
1134
+ /// before continuing with an invocation.
1135
+ fn ensure_messaging_v3 ( & self ) -> anyhow:: Result < ( ) > {
1136
+ self . experimental_features
1137
+ . wasmcloud_messaging_v3
1138
+ . then ( || ( ) )
1139
+ . ok_or ( anyhow ! (
1140
+ "wasmcloud-messaging-v3 feature flag is disabled, rejecting invocation"
1141
+ ) )
1142
+ }
1143
+ }
0 commit comments