//! `mxaccess-galaxy` — Galaxy Repository tag resolver. //! //! M3 stream A landed: the trait + metadata + parser + canonical SQL //! constants. The actual `tiberius`-backed implementation behind the //! `galaxy-resolver` Cargo feature is a follow-up (see //! `design/followups.md`). //! //! Modules: //! //! - [`metadata`] — [`metadata::GalaxyTagMetadata`] record (port of //! `GalaxyTagMetadata` at `GalaxyRepositoryTagResolver.cs:6-73`). //! - [`parser`] — [`parser::ParsedTagReference`] (port of `cs:167-206`). //! Pure-Rust, no I/O. Handles `Object.Attribute` / //! `Object.Primitive.Attribute` / `.property(buffer)` shapes. //! - [`resolver`] — [`resolver::Resolver`] async trait + [`resolver::ResolverError`]. //! - [`sql`] — `RESOLVE_SQL` + `BROWSE_SQL` constants (the recursive //! `deployed_package_chain` CTE from `cs:208-432`). Exposed publicly //! so any backend (the future `tiberius` impl, a snapshot replay //! harness, etc.) can grab the canonical query. //! //! **Resolver input contract**: `tag_name`-form only (e.g. //! `DelmiaReceiver_001`), not `contained_name`-form (e.g. //! `TestMachine_001.DelmiaReceiver`). See `wwtools/grdb/README.md` for //! the asymmetry. The parser does not enforce this — the SQL queries do //! by joining `g.tag_name = @objectTagName` (not `contained_name`). #![forbid(unsafe_code)] pub mod metadata; pub mod parser; pub mod resolver; pub mod role_blob; pub mod sql; #[cfg(feature = "galaxy-resolver")] pub mod sql_resolver; pub mod user; pub use metadata::{GalaxyTagMetadata, UnsupportedDataType}; pub use parser::{ParseError, ParsedTagReference}; pub use resolver::{Resolver, ResolverError}; pub use role_blob::parse_role_blob; #[cfg(feature = "galaxy-resolver")] pub use sql_resolver::{SqlTagResolver, SqlUserResolver}; pub use user::{GalaxyUserProfile, UserResolver, UserResolverError};