amduat-api/federation/coord.h

96 lines
2.6 KiB
C
Raw Normal View History

2026-01-21 19:51:26 +01:00
#ifndef AMDUAT_FED_COORD_H
#define AMDUAT_FED_COORD_H
#include "amduat/asl/core.h"
#include "amduat/asl/store.h"
#include "amduat/fed/registry.h"
#include "amduat/fed/view.h"
#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
typedef struct amduat_fed_coord amduat_fed_coord_t;
typedef enum {
AMDUAT_FED_COORD_OK = 0,
AMDUAT_FED_COORD_ERR_INVALID = 1,
AMDUAT_FED_COORD_ERR_OOM = 2,
AMDUAT_FED_COORD_ERR_STORE = 3,
AMDUAT_FED_COORD_ERR_CODEC = 4,
AMDUAT_FED_COORD_ERR_NOT_IMPLEMENTED = 5
} amduat_fed_coord_error_t;
typedef struct {
void *ctx;
int (*get_records)(void *ctx,
uint32_t domain_id,
uint64_t snapshot_id,
uint64_t log_prefix,
uint64_t from_logseq,
amduat_fed_record_t **out_records,
size_t *out_len);
void (*free_records)(void *ctx, amduat_fed_record_t *records, size_t len);
int (*get_artifact)(void *ctx,
amduat_reference_t ref,
amduat_octets_t *out_bytes);
} amduat_fed_transport_t;
typedef struct {
void *ctx;
bool (*record_allowed)(void *ctx,
const amduat_fed_record_t *record,
amduat_fed_policy_deny_t *out_deny);
} amduat_fed_policy_hooks_t;
typedef struct {
uint32_t local_domain_id;
amduat_asl_store_t *authoritative_store;
amduat_asl_store_t *cache_store;
amduat_reference_t registry_ref;
amduat_fed_transport_t transport;
amduat_fed_policy_hooks_t policy_hooks;
} amduat_fed_coord_cfg_t;
typedef struct {
uint32_t domain_id;
amduat_reference_t registry_ref;
uint64_t last_tick_ms;
} amduat_fed_coord_status_t;
amduat_fed_coord_error_t amduat_fed_coord_open(
const amduat_fed_coord_cfg_t *cfg,
amduat_fed_coord_t **out_coord);
amduat_fed_coord_error_t amduat_fed_coord_close(amduat_fed_coord_t *coord);
amduat_fed_coord_error_t amduat_fed_coord_load_registry(
amduat_fed_coord_t *coord);
amduat_fed_coord_error_t amduat_fed_coord_set_admitted(
amduat_fed_coord_t *coord,
uint32_t domain_id,
bool admitted);
amduat_fed_coord_error_t amduat_fed_coord_tick(
amduat_fed_coord_t *coord,
uint64_t now_ms);
amduat_fed_coord_error_t amduat_fed_coord_resolve(
amduat_fed_coord_t *coord,
amduat_reference_t ref,
amduat_artifact_t *out_artifact);
void amduat_fed_coord_get_status(const amduat_fed_coord_t *coord,
amduat_fed_coord_status_t *out_status);
#ifdef __cplusplus
} /* extern "C" */
#endif
#endif /* AMDUAT_FED_COORD_H */