amduat/include/amduat/fed/replay.h
2026-01-18 12:10:12 +01:00

73 lines
1.9 KiB
C

#ifndef AMDUAT_FED_REPLAY_H
#define AMDUAT_FED_REPLAY_H
#include "amduat/asl/core.h"
#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
typedef enum {
AMDUAT_FED_REC_ARTIFACT = 0,
AMDUAT_FED_REC_PER = 1,
AMDUAT_FED_REC_TGK_EDGE = 2,
AMDUAT_FED_REC_TOMBSTONE = 3
} amduat_fed_record_type_t;
typedef struct {
uint32_t domain_id;
uint8_t visibility;
uint8_t has_source;
uint16_t reserved0;
uint32_t source_domain;
} amduat_fed_record_meta_t;
typedef struct {
amduat_fed_record_type_t type;
amduat_reference_t ref; /* PER/TGK identities are ASL references. */
} amduat_fed_record_id_t;
typedef struct {
amduat_fed_record_meta_t meta;
amduat_fed_record_id_t id;
uint64_t logseq;
uint64_t snapshot_id;
uint64_t log_prefix;
} amduat_fed_record_t;
typedef struct {
amduat_fed_record_t *records;
size_t len;
} amduat_fed_replay_view_t;
/* Caller frees record ids with amduat_fed_replay_view_free. */
bool amduat_fed_record_validate(const amduat_fed_record_t *record);
bool amduat_fed_replay_build(const amduat_fed_record_t *records,
size_t count,
uint32_t domain_id,
uint64_t snapshot_id,
uint64_t log_prefix,
amduat_fed_replay_view_t *out_view);
/* Backwards-compatible alias for amduat_fed_replay_build. */
/* Deprecated: use amduat_fed_replay_build. */
bool amduat_fed_replay_domain(const amduat_fed_record_t *records,
size_t count,
uint32_t domain_id,
uint64_t snapshot_id,
uint64_t log_prefix,
amduat_fed_replay_view_t *out_view);
void amduat_fed_replay_view_free(amduat_fed_replay_view_t *view);
#ifdef __cplusplus
} /* extern "C" */
#endif
#endif /* AMDUAT_FED_REPLAY_H */