#ifndef REFLOW_RT_H
#define REFLOW_RT_H
#include <stdarg.h>
#include <stdbool.h>
#include <stdint.h>
#include <stdlib.h>
typedef enum rfl_message_kind {
rfl_message_kind_Flow = 0,
rfl_message_kind_Boolean = 1,
rfl_message_kind_Integer = 2,
rfl_message_kind_Float = 3,
rfl_message_kind_String = 4,
rfl_message_kind_Object = 5,
rfl_message_kind_Array = 6,
rfl_message_kind_Bytes = 7,
rfl_message_kind_Error = 8,
rfl_message_kind_StreamHandle = 9,
rfl_message_kind_Optional = 10,
rfl_message_kind_Other = 99,
} rfl_message_kind;
typedef enum rfl_status {
rfl_status_Ok = 0,
rfl_status_NullArg = -1,
rfl_status_InvalidUtf8 = -2,
rfl_status_InvalidJson = -3,
rfl_status_Runtime = -4,
rfl_status_InvalidState = -5,
} rfl_status;
typedef enum rfl_stream_frame_kind {
rfl_stream_frame_kind_Begin = 0,
rfl_stream_frame_kind_Data = 1,
rfl_stream_frame_kind_End = 2,
rfl_stream_frame_kind_Error = 3,
rfl_stream_frame_kind_Timeout = 4,
rfl_stream_frame_kind_Closed = 5,
} rfl_stream_frame_kind;
typedef struct rfl_actor rfl_actor;
typedef struct rfl_actor_ctx rfl_actor_ctx;
typedef struct rfl_events rfl_events;
typedef struct rfl_graph rfl_graph;
typedef struct rfl_message rfl_message;
typedef struct rfl_network rfl_network;
typedef struct rfl_stream rfl_stream;
typedef struct rfl_stream_recv rfl_stream_recv;
typedef struct rfl_subgraph_builder rfl_subgraph_builder;
typedef enum rfl_status (*rfl_actor_fn)(void *user_data, struct rfl_actor_ctx *ctx);
typedef void (*rfl_actor_drop_fn)(void *user_data);
#ifdef __cplusplus
extern "C" {
#endif
char *rfl_last_error_message(void);
void rfl_string_free(char *s);
void rfl_runtime_shutdown(void);
struct rfl_graph *rfl_graph_new(const char *name, int case_sensitive);
struct rfl_graph *rfl_graph_load_json(const char *json);
void rfl_graph_free(struct rfl_graph *g);
struct rfl_network *rfl_network_new(void);
struct rfl_network *rfl_network_new_with_config(const char *config_json);
struct rfl_network *rfl_network_from_graph(struct rfl_graph *g);
enum rfl_status rfl_network_start(struct rfl_network *n);
enum rfl_status rfl_network_shutdown(struct rfl_network *n);
void rfl_network_free(struct rfl_network *n);
struct rfl_events *rfl_network_events(struct rfl_network *n);
enum rfl_status rfl_events_recv(struct rfl_events *e, uint32_t timeout_ms, char **out_json);
void rfl_events_free(struct rfl_events *e);
char *rfl_version(void);
enum rfl_status rfl_graph_add_node(struct rfl_graph *g,
const char *id,
const char *component,
const char *metadata_json);
enum rfl_status rfl_graph_remove_node(struct rfl_graph *g, const char *id);
enum rfl_status rfl_graph_set_node_metadata(struct rfl_graph *g,
const char *id,
const char *metadata_json);
enum rfl_status rfl_graph_add_connection(struct rfl_graph *g,
const char *out_node,
const char *out_port,
const char *in_node,
const char *in_port,
const char *metadata_json);
enum rfl_status rfl_graph_remove_connection(struct rfl_graph *g,
const char *out_node,
const char *out_port,
const char *in_node,
const char *in_port);
enum rfl_status rfl_graph_add_initial(struct rfl_graph *g,
const char *node,
const char *port,
const char *data_json,
const char *metadata_json);
enum rfl_status rfl_graph_remove_initial(struct rfl_graph *g, const char *node, const char *port);
enum rfl_status rfl_graph_add_inport(struct rfl_graph *g,
const char *port_id,
const char *node_id,
const char *port_key,
const char *port_type_json,
const char *metadata_json);
enum rfl_status rfl_graph_add_outport(struct rfl_graph *g,
const char *port_id,
const char *node_id,
const char *port_key,
const char *port_type_json,
const char *metadata_json);
enum rfl_status rfl_graph_remove_inport(struct rfl_graph *g, const char *port_id);
enum rfl_status rfl_graph_remove_outport(struct rfl_graph *g, const char *port_id);
char *rfl_graph_to_json(struct rfl_graph *g);
enum rfl_status rfl_graph_rename_node(struct rfl_graph *g, const char *old_id, const char *new_id);
enum rfl_status rfl_graph_rename_inport(struct rfl_graph *g,
const char *old_port,
const char *new_port);
enum rfl_status rfl_graph_rename_outport(struct rfl_graph *g,
const char *old_port,
const char *new_port);
enum rfl_status rfl_graph_add_initial_index(struct rfl_graph *g,
const char *node,
const char *port,
const char *data_json,
uintptr_t index,
const char *metadata_json);
enum rfl_status rfl_graph_add_graph_initial(struct rfl_graph *g,
const char *inport,
const char *data_json,
const char *metadata_json);
enum rfl_status rfl_graph_add_graph_initial_index(struct rfl_graph *g,
const char *inport,
const char *data_json,
uintptr_t index,
const char *metadata_json);
enum rfl_status rfl_graph_remove_graph_initial(struct rfl_graph *g, const char *inport);
enum rfl_status rfl_graph_add_group(struct rfl_graph *g,
const char *group_id,
const char *nodes_json,
const char *metadata_json);
enum rfl_status rfl_graph_remove_group(struct rfl_graph *g, const char *group_id);
enum rfl_status rfl_graph_add_to_group(struct rfl_graph *g,
const char *group_id,
const char *node_id);
enum rfl_status rfl_graph_remove_from_group(struct rfl_graph *g,
const char *group_id,
const char *node_id);
enum rfl_status rfl_graph_set_connection_metadata(struct rfl_graph *g,
const char *out_node,
const char *out_port,
const char *in_node,
const char *in_port,
const char *metadata_json);
enum rfl_status rfl_graph_set_inport_metadata(struct rfl_graph *g,
const char *port_id,
const char *metadata_json);
enum rfl_status rfl_graph_set_outport_metadata(struct rfl_graph *g,
const char *port_id,
const char *metadata_json);
enum rfl_status rfl_graph_set_group_metadata(struct rfl_graph *g,
const char *group_id,
const char *metadata_json);
enum rfl_status rfl_graph_set_properties(struct rfl_graph *g, const char *properties_json);
enum rfl_status rfl_graph_import(struct rfl_graph *g, const char *export_json);
char *rfl_graph_get_node_json(struct rfl_graph *g, const char *id);
char *rfl_graph_list_nodes_json(struct rfl_graph *g);
char *rfl_graph_get_connection_json(struct rfl_graph *g,
const char *out_node,
const char *out_port,
const char *in_node,
const char *in_port);
char *rfl_graph_list_connections_json(struct rfl_graph *g);
char *rfl_graph_list_groups_json(struct rfl_graph *g);
char *rfl_graph_list_inports_json(struct rfl_graph *g);
char *rfl_graph_list_outports_json(struct rfl_graph *g);
char *rfl_graph_list_initializers_json(struct rfl_graph *g);
char *rfl_graph_get_properties_json(struct rfl_graph *g);
enum rfl_status rfl_network_add_node(struct rfl_network *n,
const char *id,
const char *template_id,
const char *config_json);
enum rfl_status rfl_network_add_connection(struct rfl_network *n,
const char *from_actor,
const char *from_port,
const char *to_actor,
const char *to_port);
enum rfl_status rfl_network_add_initial(struct rfl_network *n,
const char *actor,
const char *port,
const char *message_json);
struct rfl_actor *rfl_actor_new(const char *component_name,
const char *const *inports,
uintptr_t n_inports,
const char *const *outports,
uintptr_t n_outports,
int await_all_inports,
rfl_actor_fn callback,
void *user_data,
rfl_actor_drop_fn user_data_drop);
void rfl_actor_free(struct rfl_actor *a);
enum rfl_status rfl_network_register_actor(struct rfl_network *n,
const char *template_id,
struct rfl_actor *a);
int rfl_ctx_has_input(struct rfl_actor_ctx *ctx, const char *port);
struct rfl_message *rfl_ctx_take_input_message(struct rfl_actor_ctx *ctx, const char *port);
char *rfl_ctx_input_json(struct rfl_actor_ctx *ctx, const char *port);
char *rfl_ctx_config_json(struct rfl_actor_ctx *ctx);
char *rfl_ctx_state_get(struct rfl_actor_ctx *ctx, const char *key);
enum rfl_status rfl_ctx_state_set(struct rfl_actor_ctx *ctx,
const char *key,
const char *value_json);
enum rfl_status rfl_ctx_emit_message(struct rfl_actor_ctx *ctx,
const char *port,
struct rfl_message *msg);
enum rfl_status rfl_ctx_emit(struct rfl_actor_ctx *ctx, const char *port, const char *message_json);
struct rfl_message *rfl_message_flow(void);
struct rfl_message *rfl_message_boolean(int v);
struct rfl_message *rfl_message_integer(int64_t v);
struct rfl_message *rfl_message_float(double v);
struct rfl_message *rfl_message_string(const char *s);
struct rfl_message *rfl_message_bytes(const uint8_t *data, uintptr_t len);
struct rfl_message *rfl_message_object_from_json(const char *json);
struct rfl_message *rfl_message_array_from_json(const char *json);
struct rfl_message *rfl_message_error(const char *msg);
struct rfl_message *rfl_message_from_json(const char *json);
enum rfl_message_kind rfl_message_get_kind(const struct rfl_message *m);
int rfl_message_as_boolean(const struct rfl_message *m, int *out);
int rfl_message_as_integer(const struct rfl_message *m, int64_t *out);
int rfl_message_as_float(const struct rfl_message *m, double *out);
char *rfl_message_as_string(const struct rfl_message *m);
char *rfl_message_as_json(const struct rfl_message *m);
int rfl_message_bytes_borrow(const struct rfl_message *m,
const uint8_t **out_data,
uintptr_t *out_len);
void rfl_message_free(struct rfl_message *m);
struct rfl_stream *rfl_stream_new(uintptr_t buffer_size,
const char *origin_actor,
const char *origin_port,
const char *content_type);
enum rfl_status rfl_stream_send_bytes(struct rfl_stream *s, const uint8_t *data, uintptr_t len);
enum rfl_status rfl_stream_send_begin(struct rfl_stream *s,
const char *content_type,
uint64_t size_hint,
int has_size_hint,
const char *metadata_json);
enum rfl_status rfl_stream_end(struct rfl_stream *s);
enum rfl_status rfl_stream_error(struct rfl_stream *s, const char *message);
struct rfl_message *rfl_stream_into_message(struct rfl_stream *s);
void rfl_stream_free(struct rfl_stream *s);
struct rfl_stream_recv *rfl_message_stream_take(struct rfl_message *m);
enum rfl_status rfl_stream_recv_next(struct rfl_stream_recv *r,
uint32_t timeout_ms,
enum rfl_stream_frame_kind *out_kind,
const uint8_t **out_data,
uintptr_t *out_len,
char **out_err);
void rfl_stream_recv_free(struct rfl_stream_recv *r);
struct rfl_subgraph_builder *rfl_subgraph_builder_new(const char *graph_export_json);
enum rfl_status rfl_subgraph_builder_register_actor(struct rfl_subgraph_builder *b,
const char *component_name,
struct rfl_actor *actor);
enum rfl_status rfl_subgraph_builder_fill_from_catalog(struct rfl_subgraph_builder *b);
struct rfl_actor *rfl_subgraph_builder_build(struct rfl_subgraph_builder *b);
void rfl_subgraph_builder_free(struct rfl_subgraph_builder *b);
char *rfl_compose_graphs(const char *composition_json);
enum rfl_status rfl_pack_load(const char *path, char **out_templates_json);
char *rfl_pack_list_json(void);
char *rfl_pack_inspect_json(const char *path);
uint32_t rfl_pack_abi_version(void);
struct rfl_actor *rfl_template_actor_new(const char *template_id);
char *rfl_template_list_json(void);
struct rfl_actor *rfl_subgraph_actor_new_from_json(const char *graph_export_json);
#ifdef __cplusplus
} #endif
#endif