labfy-investigation/include/core/controlled_vocab.h

67 lines
2.5 KiB
C

/******************************************************************************
* @file controlled_vocab.h
* @brief Gestion du vocabulaire contrôlé pour les domaines fermés.
******************************************************************************/
#ifndef LABFY_INVESTIGATION_CONTROLLED_VOCAB_H
#define LABFY_INVESTIGATION_CONTROLLED_VOCAB_H
#include <glib.h>
#include <stddef.h>
G_BEGIN_DECLS
/** @brief Élément d'un vocabulaire contrôlé. */
typedef struct ControlledVocabItem
{
const char *code; /**< Code technique stable en anglais */
const char *label; /**< Libellé affichable en français */
} ControlledVocabItem;
/** @brief Catégories de vocabulaire contrôlé. */
typedef enum ControlledVocabCategory
{
CONTROLLED_VOCAB_VERIFICATION_STATUS = 0,
CONTROLLED_VOCAB_PROVENANCE_KIND,
CONTROLLED_VOCAB_EMAIL_ROLE,
CONTROLLED_VOCAB_SMTP_ROLE,
CONTROLLED_VOCAB_VALUE_TYPE,
CONTROLLED_VOCAB_COUNT
} ControlledVocabCategory;
/**
* @brief Retourne la liste ordonnée d'un vocabulaire contrôlé.
* @param category Catégorie demandée.
* @param out_count Pointeur recevant le nombre d'éléments.
* @return Tableau d'éléments statiques, ou NULL si catégorie invalide.
*/
const ControlledVocabItem *controlled_vocab_get_items(ControlledVocabCategory category,
size_t *out_count);
/**
* @brief Vérifie si un code appartient à une catégorie de vocabulaire.
*/
gboolean controlled_vocab_is_valid_code(ControlledVocabCategory category,
const char *code);
/**
* @brief Obtient le libellé utilisateur (français) à partir d'un code technique.
*/
const char *controlled_vocab_get_label(ControlledVocabCategory category,
const char *code);
/**
* @brief Obtient le code technique à partir d'un libellé utilisateur.
*/
const char *controlled_vocab_get_code_from_label(ControlledVocabCategory category,
const char *label);
/* Helpers spécifiques pour les catégories principales */
gboolean controlled_vocab_is_valid_verification_status(const char *code);
gboolean controlled_vocab_is_valid_provenance_kind(const char *code);
gboolean controlled_vocab_is_valid_email_role(const char *code);
gboolean controlled_vocab_is_valid_smtp_role(const char *code);
gboolean controlled_vocab_is_valid_value_type(const char *code);
G_END_DECLS
#endif /* LABFY_INVESTIGATION_CONTROLLED_VOCAB_H */