#ifndef AMDUATD_FED_PULL_APPLY_H #define AMDUATD_FED_PULL_APPLY_H #include "amduat/asl/core.h" #include "amduat/fed/replay.h" #include "amduatd_fed.h" #include "amduatd_fed_cursor.h" #include "amduatd_fed_pull_plan.h" #include "amduatd_space.h" #include #include #include #ifdef __cplusplus extern "C" { #endif typedef struct { void *ctx; bool (*get_records)(void *ctx, uint32_t domain_id, uint64_t from_logseq, uint64_t limit, int *out_status, amduat_fed_record_t **out_records, size_t *out_len, char **out_body); void (*free_records)(void *ctx, amduat_fed_record_t *records, size_t len); bool (*get_artifact)(void *ctx, amduat_reference_t ref, int *out_status, amduat_octets_t *out_bytes, char **out_body); } amduatd_fed_pull_transport_t; typedef enum { AMDUATD_FED_PULL_APPLY_OK = 0, AMDUATD_FED_PULL_APPLY_ERR_INVALID = 1, AMDUATD_FED_PULL_APPLY_ERR_DISABLED = 2, AMDUATD_FED_PULL_APPLY_ERR_UNSUPPORTED = 3, AMDUATD_FED_PULL_APPLY_ERR_REMOTE = 4, AMDUATD_FED_PULL_APPLY_ERR_STORE = 5, AMDUATD_FED_PULL_APPLY_ERR_CONFLICT = 6, AMDUATD_FED_PULL_APPLY_ERR_OOM = 7 } amduatd_fed_pull_apply_status_t; typedef struct { const char *peer_key; const amduatd_space_t *effective_space; uint64_t limit; bool cursor_present; bool cursor_has_logseq; uint64_t cursor_logseq; bool cursor_ref_set; amduat_reference_t cursor_ref; size_t plan_record_count; amduatd_fed_cursor_candidate_t plan_candidate; size_t applied_record_count; size_t applied_artifact_count; bool cursor_advanced; bool cursor_after_has_logseq; uint64_t cursor_after_logseq; bool cursor_after_ref_set; amduat_reference_t cursor_after_ref; int remote_status; char error[256]; } amduatd_fed_pull_apply_report_t; void amduatd_fed_pull_apply_report_init( amduatd_fed_pull_apply_report_t *report); void amduatd_fed_pull_apply_report_free( amduatd_fed_pull_apply_report_t *report); amduatd_fed_pull_apply_status_t amduatd_fed_pull_apply( amduat_asl_store_t *store, amduat_asl_pointer_store_t *pointer_store, const amduatd_space_t *effective_space, const char *peer_key, uint64_t limit, const amduatd_fed_cfg_t *fed_cfg, const amduatd_fed_pull_transport_t *transport, amduatd_fed_pull_apply_report_t *out_report); #ifdef __cplusplus } /* extern "C" */ #endif #endif /* AMDUATD_FED_PULL_APPLY_H */