Macros
Documentação detalhada ainda não fornecida pela HULKs
TODO: Elaborar
- Macros
- O que é um Macro em Rust? Recebe um TokenStream como input e consegue transformar ele e sair como um novo TokenStream
- Objetivo: reduzir duplicação de código, reduzir código escrito manualmente
- Nós
- Declaração de nó
#[node(...)]- Ligar ao
impl Node {} - Adicionar
struct CycleContext- Contém inputs, outputs adicionais, etc.
- Adicionar
impl CycleContext { fn new(...) -> CycleContext {} } - Adicionar
struct MainOutputs- Contém outputs principais
- Adicionar
impl MainOutputs { fn update(...) {} fn none() {} } - Modificar
impl Node {}: Adicionarfn run_cycle() {}- Criar
CycleContexteMainOutputs - Chamar o método
cycle()de um nó
- Criar
- Ligar ao
- Inputs
- Input
#[input(path, data_type, cycler, name)]recebe dados do ciclo atual dentro do cycler atual - Dentro do cycler de controle:
- Historic Input
#[historic_input(path, data_type, name)]Recebe dados históricos do cycler de controle - Perception Input
#[perception_input(path, data_type, cycler, name)]Recebe dados de percepção de um cycler de percepção - Persistent State
#[persistent_state(path, data_type, name)]Estado compartilhado entre nós sobre múltiplos ciclos
- Historic Input
- Parameter
#[parameter(data_type, name, path, on_changed)]Recebe parâmetros de configuração do arquivo de configuração/via Communication
- Input
- Outputs
- Main Output
#[main_output(data_type, name)]Saída para nós dependentes, gerado a cada ciclo - Additional Output
#[additional_output(path, data_type, name)]Saída opcional que pode ser habilitada / requisitada pela Comunicação
- Main Output
- Declaração de nó
require_some!TODO:requiredflag?- Extrai dados do contexto do ciclo e retorna
nonepara todas as saídas principais se a entrada for nenhuma require_some!(...) => match ... { Some(...) => ..., None => return MainOutputs::none() }
- Extrai dados do contexto do ciclo e retorna
- SerializeHierarchy
- Trait
- Principalemnte usado pela Comunicação para (de-)serialização
- Adiciona suporte para caminhos de campos
- Permite (de-)serialização para / de caminhos de campos
fn serialize_hierarchy(field_path),fn deserialize_hierarchy(field_path, data) - Permite verificar se um caminho de campo existe
- Permite gerar um objeto de hierarquia
- Implementado para todas as databases e configurações
- Macro
#[derive(SerializeHierarchy)]- Ligado a structs
- Gera
impl SerializeHierarchy for ... { ... }- Itera sobre todos os campos e delega chamadas de função para os campos
- Trait
- 3rd-party macros:
nalgebra::pointounalgebra::matrix- Link para macros de terceiros