Skip to main content

miniextendr_api/
prelude.rs

1//! Convenience re-exports for common miniextendr items.
2//!
3//! A single `use miniextendr_api::prelude::*;` brings into scope the most
4//! commonly used macros, traits, types, and helpers so user crates can avoid
5//! a long list of individual imports.
6//!
7//! ## Optional feature types
8//!
9//! When a Cargo feature is enabled (e.g., `uuid`, `regex`, `ndarray`), the
10//! prelude includes both the miniextendr adapter types **and** a re-export of
11//! the upstream dependency crate itself. This means you do **not** need to add
12//! optional crates as direct dependencies in your `Cargo.toml` — enabling the
13//! feature on `miniextendr-api` is enough.
14//!
15//! ```toml
16//! [dependencies]
17//! miniextendr-api = { version = "0.1", features = ["uuid", "ndarray"] }
18//! # No need for: uuid = "1", ndarray = "0.16"
19//! ```
20//!
21//! Access the upstream crate via the prelude:
22//!
23//! ```ignore
24//! use miniextendr_api::prelude::*;
25//!
26//! // Uuid is re-exported from the uuid crate
27//! let id = Uuid::new_v4();
28//!
29//! // The full crate is also available for advanced usage
30//! let parsed = uuid::Uuid::parse_str("...").unwrap();
31//! ```
32//!
33//! # Example
34//!
35//! ```ignore
36//! use miniextendr_api::prelude::*;
37//!
38//! #[miniextendr]
39//! fn add(a: i32, b: i32) -> i32 {
40//!     a + b
41//! }
42//! ```
43
44// region: Proc-macro re-exports
45pub use crate::{
46    // Derive macros
47    Altrep,
48    ExternalPtr,
49    MatchArg,
50    RFactor,
51    list,
52    miniextendr,
53    typed_list,
54};
55// endregion
56
57// region: Core traits
58pub use crate::{Coerce, IntoR, IntoRAltrep, TryCoerce, TryFromSexp};
59// endregion
60
61// region: Types
62pub use crate::{
63    IntoList, Lazy, List, ListBuilder, ListMut, Missing, NamedVector, OwnedProtect, ProtectScope,
64    ProtectedStrVec, StrVec, StrVecBuilder,
65};
66// endregion
67
68// region: Worker thread
69pub use crate::{Sendable, with_r_thread};
70// endregion
71
72// region: Error handling and console output
73pub use crate::{r_print, r_println, r_warning};
74// endregion
75
76// region: FFI (SEXP is needed in almost every crate)
77pub use crate::ffi::SEXP;
78// endregion
79
80// region: Optional feature re-exports
81
82// --- either ---
83#[cfg(feature = "either")]
84pub use crate::{Either, Left, Right};
85
86#[cfg(feature = "either")]
87pub use either;
88
89// --- uuid ---
90#[cfg(feature = "uuid")]
91pub use crate::{RUuidOps, Uuid};
92#[cfg(feature = "uuid")]
93pub use uuid;
94
95// --- regex ---
96#[cfg(feature = "regex")]
97pub use crate::{CaptureGroups, RRegexOps, Regex};
98#[cfg(feature = "regex")]
99pub use regex;
100
101// --- url ---
102#[cfg(feature = "url")]
103pub use crate::{RUrlOps, Url};
104#[cfg(feature = "url")]
105pub use url;
106
107// --- time ---
108#[cfg(feature = "time")]
109pub use crate::{Date, Duration, OffsetDateTime, RDuration};
110#[cfg(feature = "time")]
111pub use time;
112
113// --- ordered-float ---
114#[cfg(feature = "ordered-float")]
115pub use crate::{OrderedFloat, ROrderedFloatOps};
116#[cfg(feature = "ordered-float")]
117pub use ordered_float;
118
119// --- num-bigint ---
120#[cfg(feature = "num-bigint")]
121pub use crate::{BigInt, BigUint, RBigIntOps, RBigUintOps};
122#[cfg(feature = "num-bigint")]
123pub use num_bigint;
124
125// --- rust_decimal ---
126#[cfg(feature = "rust_decimal")]
127pub use crate::{Decimal, RDecimalOps};
128#[cfg(feature = "rust_decimal")]
129pub use rust_decimal;
130
131// --- num-complex ---
132#[cfg(feature = "num-complex")]
133pub use crate::{Complex, RComplexOps};
134#[cfg(feature = "num-complex")]
135pub use num_complex;
136
137// --- num-traits ---
138#[cfg(feature = "num-traits")]
139pub use crate::{RFloat, RNum, RSigned};
140#[cfg(feature = "num-traits")]
141pub use num_traits;
142
143// --- ndarray ---
144#[cfg(feature = "ndarray")]
145pub use crate::{
146    Array1, Array2, Array3, Array4, Array5, Array6, ArrayD, ArrayView1, ArrayView2, ArrayViewD,
147    ArrayViewMut1, ArrayViewMut2, ArrayViewMutD, RNdArrayOps,
148};
149#[cfg(feature = "ndarray")]
150pub use ndarray;
151
152// --- nalgebra ---
153#[cfg(feature = "nalgebra")]
154pub use crate::{DMatrix, DVector, RMatrixOps, RVectorOps, SMatrix, SVector};
155#[cfg(feature = "nalgebra")]
156pub use nalgebra;
157
158// --- indexmap ---
159#[cfg(feature = "indexmap")]
160pub use crate::{IndexMap, RIndexMapOps};
161#[cfg(feature = "indexmap")]
162pub use indexmap;
163
164// --- rayon ---
165#[cfg(feature = "rayon")]
166pub use crate::{RParallelExtend, RParallelIterator};
167#[cfg(feature = "rayon")]
168pub use rayon;
169
170// --- rand ---
171#[cfg(feature = "rand")]
172pub use crate::{RDistributionOps, RDistributions, RRng, RRngOps};
173#[cfg(feature = "rand")]
174pub use rand;
175#[cfg(feature = "rand_distr")]
176pub use rand_distr;
177
178// --- serde (direct R serialization) ---
179#[cfg(feature = "serde")]
180pub use crate::serde::{AsSerialize, RDeserializeNative, RSerializeNative};
181#[cfg(feature = "serde")]
182pub use serde;
183
184// --- serde_json ---
185#[cfg(feature = "serde_json")]
186pub use crate::{JsonOptions, JsonValue, RDeserialize, RSerialize};
187#[cfg(feature = "serde_json")]
188pub use serde_json;
189
190// --- toml ---
191#[cfg(feature = "toml")]
192pub use crate::{TomlValue, toml_from_str, toml_to_string};
193#[cfg(feature = "toml")]
194pub use toml;
195
196// --- bytes ---
197#[cfg(feature = "bytes")]
198pub use crate::{Bytes, BytesMut, RBuf, RBufMut};
199#[cfg(feature = "bytes")]
200pub use bytes;
201
202// --- aho-corasick ---
203#[cfg(feature = "aho-corasick")]
204pub use crate::{AhoCorasick, aho_compile};
205#[cfg(feature = "aho-corasick")]
206pub use aho_corasick;
207
208// --- bitflags ---
209#[cfg(feature = "bitflags")]
210pub use crate::RFlags;
211#[cfg(feature = "bitflags")]
212pub use bitflags;
213
214// --- bitvec ---
215#[cfg(feature = "bitvec")]
216pub use crate::RBitVec;
217#[cfg(feature = "bitvec")]
218pub use bitvec;
219
220// --- borsh ---
221#[cfg(feature = "borsh")]
222pub use crate::{Borsh, RBorshOps};
223#[cfg(feature = "borsh")]
224pub use borsh;
225
226// --- raw_conversions ---
227#[cfg(feature = "raw_conversions")]
228pub use crate::{Pod, Raw, RawSlice, Zeroable};
229#[cfg(feature = "raw_conversions")]
230pub use bytemuck;
231
232// --- sha2 ---
233#[cfg(feature = "sha2")]
234pub use crate::{sha256_bytes, sha256_str, sha512_bytes, sha512_str};
235#[cfg(feature = "sha2")]
236pub use sha2;
237
238// --- tabled ---
239#[cfg(feature = "tabled")]
240pub use crate::{Table, Tabled, table_to_string};
241#[cfg(feature = "tabled")]
242pub use tabled;
243
244// --- tinyvec ---
245#[cfg(feature = "tinyvec")]
246pub use crate::{ArrayVec, TinyVec};
247#[cfg(feature = "tinyvec")]
248pub use tinyvec;
249
250// --- indicatif ---
251#[cfg(feature = "indicatif")]
252pub use crate::progress;
253#[cfg(feature = "indicatif")]
254pub use indicatif;
255
256// --- vctrs ---
257#[cfg(feature = "vctrs")]
258pub use crate::{IntoVctrs, VctrsClass};
259// endregion