aura_composition/adapters/
console.rs1use crate::adapters::collect_ops;
4use crate::adapters::utils::deserialize_operation_params;
5use crate::registry::{HandlerContext, HandlerError, RegistrableHandler};
6use async_trait::async_trait;
7use aura_core::effects::ConsoleEffects;
8use aura_core::{EffectType, ExecutionMode};
9use aura_effects::console::RealConsoleHandler;
10
11pub struct ConsoleHandlerAdapter {
13 handler: RealConsoleHandler,
14}
15
16impl ConsoleHandlerAdapter {
17 pub fn new(handler: RealConsoleHandler) -> Self {
18 Self { handler }
19 }
20}
21
22#[cfg_attr(target_arch = "wasm32", async_trait(?Send))]
23#[cfg_attr(not(target_arch = "wasm32"), async_trait)]
24impl RegistrableHandler for ConsoleHandlerAdapter {
25 async fn execute_operation_bytes(
26 &self,
27 effect_type: EffectType,
28 operation: &str,
29 parameters: &[u8],
30 _ctx: &HandlerContext,
31 ) -> Result<Vec<u8>, HandlerError> {
32 if effect_type != EffectType::Console {
33 return Err(HandlerError::UnsupportedEffect { effect_type });
34 }
35
36 match operation {
37 "log_info" => {
38 let message = decode_console_message(effect_type, operation, parameters)?;
39 self.handler.log_info(&message).await.map_err(|e| {
40 HandlerError::ExecutionFailed {
41 source: Box::new(e),
42 }
43 })?;
44 Ok(Vec::new()) }
46 "log_warn" => {
47 let message = decode_console_message(effect_type, operation, parameters)?;
48 self.handler.log_warn(&message).await.map_err(|e| {
49 HandlerError::ExecutionFailed {
50 source: Box::new(e),
51 }
52 })?;
53 Ok(Vec::new())
54 }
55 "log_error" => {
56 let message = decode_console_message(effect_type, operation, parameters)?;
57 self.handler.log_error(&message).await.map_err(|e| {
58 HandlerError::ExecutionFailed {
59 source: Box::new(e),
60 }
61 })?;
62 Ok(Vec::new())
63 }
64 "log_debug" => {
65 let message = decode_console_message(effect_type, operation, parameters)?;
66 self.handler.log_debug(&message).await.map_err(|e| {
67 HandlerError::ExecutionFailed {
68 source: Box::new(e),
69 }
70 })?;
71 Ok(Vec::new())
72 }
73 _ => Err(HandlerError::UnknownOperation {
74 effect_type,
75 operation: operation.to_string(),
76 }),
77 }
78 }
79
80 fn supported_operations(&self, effect_type: EffectType) -> Vec<String> {
81 collect_ops(effect_type, false) }
83
84 fn supports_effect(&self, effect_type: EffectType) -> bool {
85 effect_type == EffectType::Console
86 }
87
88 fn execution_mode(&self) -> ExecutionMode {
89 ExecutionMode::Production
90 }
91}
92
93fn decode_console_message(
94 effect_type: EffectType,
95 operation: &str,
96 parameters: &[u8],
97) -> Result<String, HandlerError> {
98 match deserialize_operation_params(effect_type, operation, parameters) {
99 Ok(message) => Ok(message),
100 Err(_) => String::from_utf8(parameters.to_vec()).map_err(|e| {
101 HandlerError::EffectDeserialization {
102 effect_type,
103 operation: operation.to_string(),
104 source: Box::new(e),
105 }
106 }),
107 }
108}