ad_plugins_rs/lib.rs
1//! # C reference pins
2//!
3//! Every `file.c:NNN` citation in this crate resolves at the tree and revision
4//! below, not at whatever that tree's working copy holds today. These trees are
5//! checked out on local branches here and run ahead of their pins.
6//!
7//! | tree | pinned revision |
8//! | --- | --- |
9//! | `ADCore` | `R3-14-111-g6c53844e` |
10//! | `ADSupport` | *no settled pin* |
11//! | `epics-base` | `R7.0.10` |
12//! | `pvxs` | *no settled pin* |
13//! | `asyn` | `R4-45-19-ge2a281e2` |
14//!
15//! **Resolve by symbol at the pin; the line is a hint.** Find the named
16//! function, struct, macro or field first, and treat the line number as a hint
17//! that has to land inside that construct. Three cases follow:
18//!
19//! 1. Construct at the pin, line lands in it — the citation is exact. A
20//! reference checkout ahead of the pin will disagree; that disagreement is
21//! the checkout's, not the citation's.
22//! 2. Construct at the pin, line lands outside it — line drift. Keep the
23//! symbol and move the line to the pin's.
24//! 3. Construct absent at the pin — the citation means code added after it,
25//! and is NOT moved onto the pin, where it would point at lines that do not
26//! exist. It names the revision it means inline, beside the line span: the
27//! upstream PR and commit, and that both are later than the pin this table
28//! gives. `epics-libcom-rs` already carries that form.
29//!
30//! Every pin above passes `git merge-base --is-ancestor <pin> origin/<default>`
31//! in its own tree, which is the test a pin has to meet. A `git describe`
32//! string names an exact commit and is worth as much as a tag; what
33//! disqualifies a revision is being reachable only from a fork branch or an
34//! unmerged PR, because then it names nothing a reader outside this workspace
35//! can fetch.
36//!
37//! Resolve each citation on its own. One sentence can cite two lines that are
38//! right at different revisions, and a check run at either revision then
39//! reports a single tidy error while vouching for the very citation the other
40//! condemns.
41//!
42//! A row reading *no settled pin* means no revision has been agreed for that
43//! tree: say which revision you read, and do not take its `HEAD` for the pin.
44//! Citations into non-EPICS sources (libc, RTEMS, `rtems-libbsd`, VxWorks,
45//! vendored third-party) are outside this table and carry no pin.
46
47#![allow(
48 clippy::approx_constant,
49 clippy::collapsible_if,
50 clippy::erasing_op,
51 clippy::identity_op,
52 clippy::manual_is_multiple_of,
53 clippy::manual_range_contains,
54 clippy::needless_range_loop,
55 clippy::new_without_default,
56 clippy::op_ref,
57 clippy::type_complexity,
58 clippy::too_many_arguments
59)]
60
61pub mod attr_plot;
62pub mod attribute;
63pub mod bad_pixel;
64pub mod circular_buff;
65pub mod codec;
66pub mod color_convert;
67pub mod fft;
68pub mod file_hdf5;
69pub mod file_jpeg;
70pub mod file_magick;
71pub mod file_netcdf;
72pub mod file_nexus;
73pub mod file_tiff;
74pub mod gather;
75pub mod hdf5_layout;
76pub mod overlay;
77pub mod overlay_font;
78pub mod par_util;
79pub mod passthrough;
80pub mod pos_plugin;
81pub mod process;
82pub mod roi;
83pub mod roi_stat;
84pub mod scatter;
85pub mod stats;
86pub mod std_arrays;
87pub mod time_series;
88pub mod time_series_plugin;
89pub mod transform;
90
91#[cfg(feature = "pva")]
92pub mod pva;
93
94// The moved code's own requirement, and nothing else: `ArgValue` comes from
95// `epics-base-rs`, an unconditional dependency, and its own gate is the target
96// — the iocsh registry is absent on RTEMS and VxWorks, not reactor-dependent.
97// So neither `ioc` nor `tokio_backend` belongs here. Carrying `ioc` over from
98// the module this came from left the three boundary cases unselected in the
99// default configuration, which was the same mistake one layer smaller.
100#[cfg(not(epics_embedded_target))]
101pub mod attr_plot_args;
102
103// `tokio_backend` as well as the feature: the module stands its IOC up on
104// `epics_ca_rs::server::run_ca_ioc_app` and the QSRV runner, and neither
105// exists on the reactor-free backend.
106#[cfg(all(feature = "ioc", tokio_backend))]
107pub mod ioc;