amduat/include/amduat/fed/registry.h
2026-01-18 12:03:18 +01:00

85 lines
2.5 KiB
C

#ifndef AMDUAT_FED_REGISTRY_H
#define AMDUAT_FED_REGISTRY_H
#include "amduat/asl/core.h"
#include "amduat/asl/store.h"
#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
typedef struct {
uint32_t domain_id;
uint64_t snapshot_id;
uint64_t log_prefix;
uint64_t last_logseq;
uint8_t admitted;
uint8_t policy_ok;
uint8_t reserved[6];
amduat_hash_id_t policy_hash_id;
amduat_octets_t policy_hash; /* Empty when unknown; caller-owned bytes. */
} amduat_fed_domain_state_t;
typedef struct {
amduat_fed_domain_state_t *states;
size_t len;
size_t cap;
bool owns_states;
} amduat_fed_registry_value_t;
void amduat_fed_registry_value_init(amduat_fed_registry_value_t *value,
amduat_fed_domain_state_t *states,
size_t cap);
bool amduat_fed_registry_value_insert(amduat_fed_registry_value_t *value,
amduat_fed_domain_state_t state);
const amduat_fed_domain_state_t *amduat_fed_registry_value_lookup(
const amduat_fed_registry_value_t *value,
uint32_t domain_id);
void amduat_fed_registry_value_free(amduat_fed_registry_value_t *value);
/* Encode/Decode allocate buffers; caller frees via amduat_octets_free. */
bool amduat_fed_registry_encode(const amduat_fed_registry_value_t *value,
amduat_octets_t *out_bytes);
/* Decode allocates policy_hash bytes; free via amduat_fed_registry_value_free. */
bool amduat_fed_registry_decode(amduat_octets_t bytes,
amduat_fed_registry_value_t *out_value);
typedef enum {
AMDUAT_FED_REGISTRY_OK = 0,
AMDUAT_FED_REGISTRY_ERR_CODEC = 1,
AMDUAT_FED_REGISTRY_ERR_STORE = 2
} amduat_fed_registry_error_t;
typedef struct {
amduat_asl_store_t *store;
} amduat_fed_registry_store_t;
void amduat_fed_registry_store_init(amduat_fed_registry_store_t *reg,
amduat_asl_store_t *store);
amduat_fed_registry_error_t amduat_fed_registry_store_put(
amduat_fed_registry_store_t *reg,
const amduat_fed_registry_value_t *value,
amduat_reference_t *out_ref,
amduat_asl_store_error_t *out_store_err);
amduat_fed_registry_error_t amduat_fed_registry_store_get(
amduat_fed_registry_store_t *reg,
amduat_reference_t ref,
amduat_fed_registry_value_t *out_value,
amduat_asl_store_error_t *out_store_err);
#ifdef __cplusplus
} /* extern "C" */
#endif
#endif /* AMDUAT_FED_REGISTRY_H */