Echo Module
O módulo Echo é um módulo simples e fundamental que retorna exatamente o que recebe como entrada. É útil para debug, testes, passagem de dados e como exemplo básico de implementação de módulos Phlow.
🚀 Funcionalidades
Características Principais
- ✅ Simplicidade: Retorna exatamente o que recebe
- ✅ Qualquer tipo: Aceita qualquer tipo de entrada
- ✅ Preservação de dados: Mantém estrutura e tipo original
- ✅ Performance: Operação de passagem direta, sem processamento
- ✅ Debug: Útil para verificar dados em pipelines
- ✅ Observabilidade: Totalmente integrado com OpenTelemetry
📋 Configuração
Configuração Básica
steps:
- name: "echo_step"
use: "echo_module"
input: "Hello, World!"
Configuração com Dados Estruturados
steps:
- name: "echo_object"
use: "echo_module"
input:
message: "Hello"
timestamp: "2024-01-01T00:00:00Z"
data:
items: [1, 2, 3]
active: true
🔧 Parâmetros
Entrada (Input)
- Tipo:
any
(qualquer tipo) - Obrigatório:
true
- Descrição: A mensagem ou dados a serem ecoados
- Padrão:
null
Saída (Output)
- Tipo:
any
(mesmo tipo da entrada) - Obrigatório:
true
- Descrição: Os dados ecoados (idênticos à entrada)
- Padrão:
null
💻 Exemplos de Uso
Echo de String Simples
steps:
- name: "simple_echo"
use: "echo_module"
input: "Esta mensagem será ecoada"
# Saída: "Esta mensagem será ecoada"
Echo de Número
steps:
- name: "number_echo"
use: "echo_module"
input: 42
# Saída: 42
Echo de Boolean
steps:
- name: "boolean_echo"
use: "echo_module"
input: true
# Saída: true
Echo de Array
steps:
- name: "array_echo"
use: "echo_module"
input: [1, 2, 3, "teste", true]
# Saída: [1, 2, 3, "teste", true]
Echo de Objeto Complexo
steps:
- name: "object_echo"
use: "echo_module"
input:
user:
id: 123
name: "João Silva"
email: "joao@example.com"
active: true
preferences:
theme: "dark"
notifications: true
tags: ["admin", "premium"]
metadata:
created_at: "2024-01-01T00:00:00Z"
updated_at: "2024-01-15T14:30:00Z"
version: "1.2.3"
# Saída: (objeto idêntico ao input)
Echo com Dados Dinâmicos
steps:
- name: "process_user"
# Algum processamento que retorna dados do usuário
- name: "echo_user_data"
use: "echo_module"
input: "{{ $process_user }}"
# Saída: (dados do usuário do step anterior)
🔍 Casos de Uso
1. Debug de Pipeline
steps:
- name: "fetch_data"
use: "http_request"
input:
url: "https://api.example.com/users"
- name: "debug_response"
use: "echo_module"
input: "{{ $fetch_data }}"
# Útil para ver exatamente o que a API retornou
- name: "process_data"
# Continua processamento...
2. Passagem de Dados
steps:
- name: "calculate_result"
script: |
let result = input.a + input.b;
result * 2;
- name: "pass_result"
use: "echo_module"
input: "{{ $calculate_result }}"
- name: "format_output"
input: "Resultado: {{ $pass_result }}"
3. Validação de Estruturas
steps:
- name: "create_user_object"
script: |
{
id: 123,
name: "Usuário Teste",
email: "test@example.com",
created_at: new Date().toISOString()
}
- name: "validate_structure"
use: "echo_module"
input: "{{ $create_user_object }}"
# Verifica se o objeto foi criado corretamente
- name: "save_user"
use: "database_save"
input: "{{ $validate_structure }}"
4. Testes e Desenvolvimento
steps:
- name: "mock_api_response"
use: "echo_module"
input:
status: "success"
data:
users: [
{ id: 1, name: "Alice" },
{ id: 2, name: "Bob" }
]
timestamp: "2024-01-01T00:00:00Z"
- name: "process_users"
# Processa como se viesse de uma API real
input: "{{ $mock_api_response.data.users }}"
🌐 Exemplo Completo
name: "echo-demo"
version: "1.0.0"
description: "Demonstração do módulo Echo"
modules:
- name: "echo_module"
module: "echo"
version: "0.0.1"
steps:
- name: "echo_string"
use: "echo_module"
input: "Hello from Echo!"
- name: "echo_number"
use: "echo_module"
input: 3.14159
- name: "echo_complex_object"
use: "echo_module"
input:
application:
name: "MyApp"
version: "2.1.0"
config:
debug: true
max_connections: 100
features: ["auth", "cache", "logging"]
environment:
stage: "production"
region: "us-east-1"
- name: "echo_with_interpolation"
use: "echo_module"
input: "App: {{ $echo_complex_object.application.name }} v{{ $echo_complex_object.application.version }}"
- name: "final_output"
script: |
{
string_echo: $echo_string,
number_echo: $echo_number,
object_echo: $echo_complex_object,
interpolated_echo: $echo_with_interpolation
}
📊 Observabilidade
O módulo Echo herda a observabilidade padrão do Phlow SDK:
- Tracing: Cada execução gera spans OpenTelemetry
- Logging: Logs estruturados para debug
- Metrics: Métricas de performance e uso
- Context: Propagação de contexto entre steps
🔒 Segurança
- Preservação de dados: Não modifica nem expõe dados sensíveis
- Sem efeitos colaterais: Operação puramente funcional
- Memória: Passa referências quando possível para eficiência
📈 Performance
- Latência mínima: Operação de passagem direta
- Memória eficiente: Sem cópias desnecessárias
- Threading: Suporte completo a execução assíncrona
- Escalabilidade: Sem limitações de throughput
🛠️ Implementação
O módulo Echo é implementado de forma minimalista:
pub async fn echo(rx: ModuleReceiver) -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
listen!(rx, move |package: ModulePackage| async {
let input = package.input().unwrap_or(Value::Null);
sender_safe!(package.sender, input.into());
});
Ok(())
}
🏷️ Tags
- echo
- debug
- passthrough
- testing
- utility
Versão: 0.0.1
Autor: Philippe Assis <codephilippe@gmail.com>
Licença: MIT
Repositório: https://github.com/phlowdotdev/phlow