Skip to main content

alizarin_core/
lib.rs

1/// The version of alizarin-core (from Cargo.toml at compile time).
2pub const VERSION: &str = env!("CARGO_PKG_VERSION");
3
4pub mod card_traversal;
5pub mod csv_business_data_loader;
6pub mod csv_model_loader;
7pub mod exporter;
8/// Alizarin Core Library
9///
10/// Platform-agnostic core functionality that can be used from:
11/// - JavaScript/TypeScript via WASM bindings (alizarin-wasm)
12/// - Python via PyO3 bindings (alizarin-python)
13/// - Native Rust applications (alizarin-explorer)
14/// - Other languages via C FFI
15pub mod extension_type_registry;
16pub mod graph;
17pub mod graph_model_access;
18pub mod graph_mutator;
19pub mod instance_wrapper_core;
20pub mod interner;
21pub mod json_conversion;
22pub mod label_resolution;
23pub mod loader;
24pub mod node_config;
25pub mod ontology;
26pub mod path_resolution;
27pub mod permissions;
28pub mod pseudo_value_core;
29pub mod rdm_cache;
30pub mod rdm_namespace;
31pub mod registry;
32pub mod skos;
33pub mod string_utils;
34pub mod tile_source;
35pub mod type_coercion;
36pub mod type_serialization;
37
38// Graph types
39pub use graph::{
40    batch_merge_resources,
41    build_backedges,
42    find_root_node,
43    is_iterable_datatype,
44    merge_resources,
45    parse_resources_from_json_str,
46    // Graph pruning
47    prune_graph,
48    BatchMergeResult,
49    GraphWrapper,
50    IndexedGraph,
51    // Resource merging
52    MergeAccumulator,
53    MergeResult,
54    // Resource registry for relationship resolution
55    PopulateCachesResult,
56    PruneError,
57    RelatedResourceEntry,
58    ResourceCache,
59    ResourceEntry,
60    StaticCard,
61    StaticCardsXNodesXWidgets,
62    // Additional Static* types
63    StaticConstraint,
64    StaticEdge,
65    StaticFunctionsXGraphs,
66    StaticGraph,
67    StaticGraphMeta,
68    StaticNode,
69    StaticNodegroup,
70    StaticPublication,
71    StaticResource,
72    StaticResourceDescriptors,
73    StaticResourceMetadata,
74    StaticResourceReference,
75    StaticResourceRegistry,
76    StaticResourceSummary,
77    StaticTile,
78    StaticTranslatableString,
79    UnknownReference,
80    ITERABLE_DATATYPES,
81};
82
83// Loader
84pub use loader::{
85    import_prebuild, load_collections_from_dir, load_ontology_xml_from_dir,
86    parse_business_data_bytes, ImportPrebuildResult, LoaderError, PrebuildInfo, PrebuildLoader,
87};
88
89// Exporter
90pub use exporter::{
91    build_prebuild_export, export_all_graphs, export_collections, export_graphs,
92    export_single_collection, ExportError, ExportFile, PrebuildExportData,
93};
94
95#[cfg(not(target_arch = "wasm32"))]
96pub use exporter::fs_writer::{export_prebuild_to_directory, write_to_directory};
97
98// Interner types
99#[cfg(feature = "multi-threaded")]
100pub use interner::ThreadSafeInterner;
101pub use interner::{InternedId, Interner, InternerExt};
102
103// Node config types
104pub use node_config::{
105    NodeConfig, NodeConfigBoolean, NodeConfigConcept, NodeConfigDomain, NodeConfigManager,
106    NodeConfigReference, StaticDomainValue,
107};
108
109// Type coercion
110pub use type_coercion::{
111    // Phase 3: Config-dependent types
112    coerce_boolean,
113    coerce_concept_list,
114    // Phase 4: RDM-dependent types
115    coerce_concept_value,
116    // Phase 1: Simple scalars
117    coerce_date,
118    coerce_domain_value,
119    coerce_domain_value_list,
120    coerce_edtf,
121    // Phase 2: Dict types
122    coerce_geojson,
123    coerce_non_localized_string,
124    coerce_number,
125    // Phase 5: Format normalization
126    coerce_resource_instance,
127    coerce_resource_instance_list,
128    coerce_string,
129    coerce_url,
130    // Dispatcher and result
131    coerce_value,
132    coerce_value_with_registry,
133    // Language configuration
134    get_current_language,
135    set_current_language,
136    CoercionResult,
137    DEFAULT_LANGUAGE,
138};
139
140// Type serialization (output formatting)
141pub use type_serialization::{
142    // Individual serializers
143    serialize_boolean,
144    serialize_concept,
145    serialize_concept_list,
146    serialize_date,
147    serialize_display,
148    serialize_domain_value,
149    serialize_domain_value_list,
150    serialize_edtf,
151    serialize_geojson,
152    serialize_non_localized_string,
153    serialize_number,
154    serialize_resource_instance,
155    serialize_resource_instance_list,
156    serialize_string,
157    serialize_tile_data,
158    serialize_url,
159    // Dispatcher functions
160    serialize_value,
161    // Context and resolvers
162    ExternalResolver,
163    ResourceDisplayResolver,
164    SerializationContext,
165    // Options and result
166    SerializationMode,
167    SerializationOptions,
168    SerializationResult,
169};
170
171// Label resolution
172pub use label_resolution::{
173    build_alias_to_collection_map, find_needed_collections, is_valid_uuid, resolve_labels,
174    resolve_labels_full, ConceptLookup, LabelResolutionConfig, LabelResolutionError,
175    DEFAULT_CONFIG_KEYS, DEFAULT_RESOLVABLE_DATATYPES,
176};
177
178// Card-based traversal (card hierarchy instead of node hierarchy)
179pub use card_traversal::{
180    cards_to_tree, serialize_card, serialize_root_cards, CardSerializationParams,
181};
182
183// JSON conversion (tiles <-> tree)
184pub use json_conversion::{
185    build_tree_from_tiles, create_static_resource, resource_tiles_to_tree, tiles_to_tree,
186    tree_to_tiles, tree_to_tiles_with_options, BusinessData, BusinessDataWrapper,
187};
188
189// Pseudo value core types (for JSON conversion)
190pub use pseudo_value_core::{
191    matches_tile_filter, PseudoListCore, PseudoValueCore, TileBuilder, TileBuilderContext,
192    VisitorContext,
193};
194
195// Instance wrapper core types (for populate, semantic traversal)
196pub use instance_wrapper_core::{
197    create_pseudo_list_from_tiles, ensure_nodegroup, is_node_single_cardinality,
198    is_node_single_cardinality_with, matches_semantic_child, resolve_and_filter_tiles,
199    values_from_resource_nodegroup, EnsureNodegroupResult, LoadState, ModelAccess, PopulateResult,
200    ResourceInstanceWrapperCore, SemanticChildError, SemanticChildResult,
201    ValuesFromNodegroupResult,
202};
203
204// Platform-agnostic ModelAccess from StaticGraph (used by Python, NAPI, etc.)
205pub use graph_model_access::GraphModelAccess;
206
207// Path resolution (dot-separated path → nodegroup tiles)
208pub use path_resolution::{resolve_path_segments, PathError, PathResolutionInfo};
209
210// Tile source trait (pluggable tile backends)
211pub use tile_source::{TileSource, TileSourceError};
212
213// RDM cache types
214pub use rdm_cache::{
215    rdm_to_skos_collection, rdm_to_skos_collection_excluding, skos_to_rdm_collection, RdmCache,
216    RdmCollection, RdmConcept,
217};
218
219// RDM namespace utilities (deterministic UUID generation)
220pub use rdm_namespace::{
221    clear_rdm_namespace, generate_collection_uuid, generate_concept_uuid,
222    generate_concept_uuid_from_str, generate_value_uuid, get_rdm_namespace, has_rdm_namespace,
223    labels_to_deterministic_string, parse_rdm_namespace, set_rdm_namespace,
224};
225
226// Graph mutator types (builder pattern for graph construction)
227pub use graph_mutator::{
228    apply_instructions,
229    apply_mutations,
230    apply_mutations_create_from_json,
231    apply_mutations_from_json,
232    apply_mutations_from_json_with_extensions,
233    // Extension-aware mutation API
234    apply_mutations_with_extensions,
235    build_graph_from_instructions,
236    build_graph_from_instructions_csv,
237    build_graph_from_instructions_json,
238    build_graph_from_instructions_with_extensions,
239    default_card_component,
240    generate_uuid_v5,
241    get_default_widget_for_datatype,
242    get_mutation_schema,
243    mutations_to_json,
244    parse_instructions_from_csv,
245    slugify,
246    AddCardParams,
247    AddEdgeParams,
248    AddNodeParams,
249    AddNodegroupParams,
250    AddWidgetParams,
251    CardComponent,
252    CardOptions,
253    // Utilities
254    Cardinality,
255    CreateGraphParams,
256    ExtensionMutationHandler,
257    // Extension mutations
258    ExtensionMutationParams,
259    ExtensionMutationRegistry,
260    // Instruction-based API
261    GraphInstruction,
262    // Mutation types (Command pattern)
263    GraphMutation,
264    // Builder and options
265    GraphMutator,
266    MutationConformance,
267    MutationError,
268    // JSON-based mutation API
269    MutationRequest,
270    MutationRequestOptions,
271    MutatorOptions,
272    NodeOptions,
273    RenameGraphParams,
274    RenameNodeParams,
275    // Widget types
276    Widget,
277    DEFAULT_CARD_COMPONENT_ID,
278    WIDGETS,
279};
280
281// Ontology validation
282pub use ontology::{OntologyConfig, OntologyError, OntologyValidationDetail, OntologyValidator};
283
284// Graph registry (for looking up graphs by graph_id)
285pub use registry::{
286    clear_registry, get_graph, get_registered_graph_ids, is_graph_registered, register_graph,
287    register_graph_owned, registry_size, unregister_graph,
288};
289
290// List datatype registry (for datatypes where array IS the value)
291pub use registry::{
292    is_list_datatype, list_datatypes, register_list_datatype, unregister_list_datatype,
293};
294
295// Widget mapping registry (for extension datatype -> widget mappings)
296pub use registry::{
297    get_widget_for_datatype, register_widget_for_datatype, unregister_widget_for_datatype,
298    widget_mappings,
299};
300
301// Widget registry (for extension widget definitions)
302pub use registry::{
303    get_registered_widget, register_widget, registered_widgets, unregister_widget, RegisteredWidget,
304};
305
306// Global RDM cache (for concept lookups across FFI targets)
307pub use registry::{
308    add_to_global_rdm_cache_from_skos, add_to_global_rdm_cache_from_skos_xml,
309    clear_global_rdm_cache, ensure_global_rdm_cache, get_global_rdm_cache, has_global_rdm_cache,
310    set_global_rdm_cache, with_global_rdm_cache, with_global_rdm_cache_mut,
311};
312
313// Permission rules (for conditional tile filtering)
314pub use permissions::{evaluate_tile_path, PermissionRule};
315
316// String utilities
317pub use string_utils::{camel_to_snake, snake_to_camel, sort_json_keys, transform_keys_to_snake};
318
319// Extension type registry (unified handler infrastructure for WASM/Python)
320pub use extension_type_registry::{
321    ExtensionError, ExtensionTypeHandler, ExtensionTypeRegistry, HandlerCapabilities,
322};
323
324// CSV model loader (3-CSV format: graph.csv, nodes.csv, collections.csv)
325pub use csv_model_loader::{
326    build_graph_from_model_csvs, model_csvs_to_collections, model_csvs_to_instructions,
327    parse_model_csvs, validate_model_csvs, validate_model_csvs_from_strings, CollectionRow,
328    CsvModelDiagnostic, CsvModelError, DiagnosticLevel, GraphRow, ModelCsvBundle, NodeRow,
329};
330
331// CSV business data loader
332pub use csv_business_data_loader::{
333    build_resources_from_business_csv, wrap_business_data, BusinessDataCsvOptions,
334};