Skip to main content

zerodds_ami4ccm/
lib.rs

1// SPDX-License-Identifier: Apache-2.0
2// Copyright 2026 ZeroDDS Contributors
3
4//! OMG AMI4CCM 1.1 — Asynchronous Method Invocation for CORBA Component Model.
5//!
6//! Crate `zerodds-ami4ccm`. Safety classification: **STANDARD**.
7//! Spec `formal/2015-08-03` (`docs/standards/cache/omg/ami4ccm-1.1.pdf`).
8//!
9//! # Scope
10//!
11//! AMI4CCM ist eine Transformations-Spec: aus einer normalen IDL-
12//! `interface`-Definition werden zwei zusaetzliche Local-Interfaces
13//! abgeleitet (Spec §7.3 + §7.5):
14//!
15//! 1. `AMI4CCM_<Iface>` — Async-Operations mit `sendc_`-Praefix.
16//! 2. `AMI4CCM_<Iface>ReplyHandler` — Type-spezifische Callbacks +
17//!    `_excep`-Operations.
18//!
19//! Plus `CCM_AMI::ExceptionHolder` als Datenmodell fuer Exception-
20//! Lieferung (Spec §7.4.1) und Pragma-Parsing fuer
21//! `#pragma ami4ccm interface "<name>"` und
22//! `#pragma ami4ccm receptacle "<comp>::<recep>"` (Spec §7.7).
23//!
24//! Die Transformation arbeitet auf dem AST-Layer von [`zerodds_idl::ast`]:
25//! Eingabe ist `InterfaceDef`, Ausgabe sind zwei neu konstruierte
26//! `InterfaceDef`-Instanzen (`InterfaceKind::Local`), die jedes
27//! Codegen-Backend (cpp/cs/java/ts) wie normale Interfaces behandeln
28//! kann.
29//!
30//! # Was nicht abgedeckt ist
31//!
32//! * **AMI4CCM Connector + Deployment** (Spec §7.6 + §7.8) — der
33//!   Connector-Fragment-Code wird via D&C in einen CCM-Container
34//!   deployed (`Components::EnterpriseComponent`,
35//!   `CCM_AMI::Connector_T`-Templated-Module). ZeroDDS hat keinen CCM-
36//!   Container/Executor; siehe Audit-File
37//!   `docs/spec-coverage/omg-ami4ccm-1.1.md`. Die **Implied-IDL-
38//!   Transformation** (Conformance-Punkt 1) ist voll abgedeckt; der
39//!   **Connector-Fragment** (Conformance-Punkt 2) ist `n/a` ohne
40//!   CCM-Runtime.
41//! * **CCM-Pragma-Pre-Processor-Integration** — Pragma-Parsing ist als
42//!   eigenstaendige Funktion realisiert; Integration in den IDL-
43//!   Preprocessor laesst sich darauf aufbauen, sobald CCM ein
44//!   Top-Level-Vorhaben ist.
45//!
46//! # Beispiel
47//!
48//! ```
49//! use zerodds_ami4ccm::{Ami4CcmPragma, parse_pragma};
50//!
51//! let p = parse_pragma("#pragma ami4ccm interface \"Stock::StockManager\"").unwrap();
52//! assert_eq!(
53//!     p,
54//!     Ami4CcmPragma::Interface {
55//!         name: "Stock::StockManager".into(),
56//!     }
57//! );
58//! ```
59
60#![forbid(unsafe_code)]
61#![warn(missing_docs)]
62
63extern crate alloc;
64
65pub mod connector;
66pub mod deployment;
67pub mod exception_holder;
68pub mod multiplex;
69pub mod pragma;
70pub mod scope_resolver;
71pub mod transform;
72
73pub use connector::{Connector, ConnectorPort, Facet, PortType};
74pub use deployment::{
75    ConnectorImplementation, ConnectorPlanFragment, ImplementationDescriptor, PlanInstance,
76};
77pub use exception_holder::{ExceptionHolder, UserExceptionBase};
78pub use multiplex::{
79    ReceptacleArity, context_method_for_receptacle, sequence_typedef_for_interface,
80};
81pub use pragma::{Ami4CcmPragma, ParsePragmaError, parse_pragma};
82pub use scope_resolver::{context_from_specification, populate_from_specification};
83pub use transform::{
84    Ami4CcmInterfaces, TransformContext, transform_interface, transform_interface_in_context,
85};