aboutsummaryrefslogtreecommitdiff
path: root/mingling/src/lib.rs
diff options
context:
space:
mode:
Diffstat (limited to 'mingling/src/lib.rs')
-rw-r--r--mingling/src/lib.rs97
1 files changed, 69 insertions, 28 deletions
diff --git a/mingling/src/lib.rs b/mingling/src/lib.rs
index b4372dc..ba87f85 100644
--- a/mingling/src/lib.rs
+++ b/mingling/src/lib.rs
@@ -33,15 +33,19 @@
//! }
//!
//! #[renderer]
-//! fn render_name(name: ResultName) {
-//! r_println!("Hello, {}!", *name);
+//! fn render_name(name: ResultName) -> RenderResult {
+//! let mut result = RenderResult::default();
+//! result.println(&format!("Hello, {}!", *name));
+//! result
//! }
//!
//! #[renderer]
-//! fn render_dispatcher_not_found(err: ErrorDispatcherNotFound) {
+//! fn render_dispatcher_not_found(err: ErrorDispatcherNotFound) -> RenderResult {
+//! let mut result = RenderResult::default();
//! if err.len() > 0 {
-//! r_println!("Command not found: [{}]", err.join(" "));
+//! result.println(&format!("Command not found: [{}]", err.join(" ")));
//! }
+//! result
//! }
//!
//! gen_program!();
@@ -65,21 +69,35 @@
//! # About Features
//! All features of `Mingling` are opt-in. To learn what each feature provides, see [Features](feature/index.html) or [Helpdoc](https://mingling-rs.github.io/mingling/docs/doc.html#/pages/other/features)
+#[cfg(feature = "core")]
mod example_docs;
// Re-export Core lib
+#[cfg(feature = "core")]
pub use mingling::*;
+
+#[cfg(feature = "core")]
pub use mingling_core as mingling;
-/// `Mingling` argument parser
+/// `Mingling` argument parser (Built-in)
#[cfg(feature = "parser")]
pub mod parser;
+/// `Mingling` argument parser (Picker2)
+#[cfg(feature = "picker")]
+pub mod picker {
+ pub use mingling_picker::*;
+
+ pub mod parselib {
+ pub use mingling_picker::parselib::*;
+ }
+}
+
/// Re-export of all macros from `mingling_macros`.
///
/// This module re-exports all macros provided by the `mingling_macros` crate,
-/// including `dispatcher!`, `chain!`, `renderer!`, `gen_program!`, `pack!`,
-/// `r_print!`, `r_println!`, and many others. These macros form the core
+/// including `dispatcher!`, `chain!`, `renderer!`,
+/// `gen_program!`, `pack!`, and many others. These macros form the core
/// building blocks of the Mingling framework.
///
/// For detailed documentation, usage examples, and the full list of available
@@ -87,6 +105,7 @@ pub mod parser;
///
/// <https://docs.rs/mingling_macros/latest/mingling_macros/>
#[allow(unused_imports)]
+#[cfg(feature = "macros")]
pub mod macros {
/// `#[chain]` - Used to generate a struct implementing the `Chain` trait via a method
pub use mingling_macros::chain;
@@ -118,15 +137,15 @@ pub mod macros {
pub use mingling_macros::node;
/// `pack!(StateGreet = String)` - Used to create a wrapper type for use with `Chain` and `Renderer`
pub use mingling_macros::pack;
- /// `pack_structural!(StateGreet = String)` - Like `pack!` but also marks the type for structured output
- #[cfg(feature = "structural_renderer")]
- pub use mingling_macros::pack_structural;
/// `pack_err!(ErrorUnknown)` - Used to create an error struct with automatic `name` field
#[cfg(feature = "extra_macros")]
pub use mingling_macros::pack_err;
/// `pack_err_structural!(ErrorUnknown)` - Like `pack_err!` but also marks the type for structured output
#[cfg(all(feature = "structural_renderer", feature = "extra_macros"))]
pub use mingling_macros::pack_err_structural;
+ /// `pack_structural!(StateGreet = String)` - Like `pack!` but also marks the type for structured output
+ #[cfg(feature = "structural_renderer")]
+ pub use mingling_macros::pack_structural;
#[cfg(feature = "comp")]
#[doc(hidden)]
pub use mingling_macros::program_comp_gen;
@@ -137,10 +156,6 @@ pub mod macros {
/// `#[program_setup]` - Used to generate program setup
#[cfg(feature = "extra_macros")]
pub use mingling_macros::program_setup;
- /// `r_print!("{someting}")` - Used to print content within a `Renderer` context
- pub use mingling_macros::r_print;
- /// `r_println!("{someting}")` - Used to print content with a newline within a `Renderer` context
- pub use mingling_macros::r_println;
#[doc(hidden)]
pub use mingling_macros::register_chain;
#[doc(hidden)]
@@ -162,12 +177,17 @@ pub mod macros {
/// `suggest_enum!(EnumNames)` - Used to generate enum suggestions
#[cfg(feature = "comp")]
pub use mingling_macros::suggest_enum;
+ /// New Parser provided by the `picker` feature
+ #[cfg(feature = "picker")]
+ pub use mingling_picker::macros::*;
}
/// derive macro `EnumTag`
+#[cfg(feature = "macros")]
pub use mingling_macros::EnumTag;
/// derive macro Groupped
+#[cfg(feature = "macros")]
pub use mingling_macros::Groupped;
/// derive macro `StructuralData` — marks a type as supporting structured output
@@ -175,10 +195,12 @@ pub use mingling_macros::Groupped;
pub use mingling_macros::StructuralData;
/// Example projects for `Mingling`, for learning how to use `Mingling`
+#[cfg(feature = "core")]
pub mod _mingling_examples {
pub use crate::example_docs::*;
}
+#[cfg(feature = "core")]
mod features;
/// Module for checking which features are enabled at compile time.
@@ -186,19 +208,23 @@ mod features;
/// Each constant re-exported from this module corresponds to a Cargo feature flag.
/// They can be used for conditional compilation or runtime branching based on
/// feature availability.
+#[cfg(feature = "core")]
pub mod feature {
include!("./features.rs");
}
+#[cfg(feature = "core")]
mod setups;
/// Setups provided by Mingling, which can extend command-line programs.
+#[cfg(feature = "core")]
pub mod setup {
pub use crate::setups::*;
pub use mingling_core::setup::*;
}
/// Mutable global resources provided within Mingling
+#[cfg(feature = "core")]
pub mod res;
/// The prelude module provides convenient re-exports of commonly used macros and traits.
@@ -214,40 +240,55 @@ pub mod res;
/// ```
pub mod prelude {
/// Re-export of the `Groupped` derive macro for grouping types.
+ #[cfg(feature = "core")]
pub use crate::Groupped;
+ /// Re-export of the `RenderResult` struct for outputting rendering result
+ #[cfg(feature = "core")]
+ pub use crate::RenderResult;
/// Re-export of the `chain` macro for defining a chain of commands.
+ #[cfg(feature = "macros")]
pub use crate::macros::chain;
/// Re-export of the `dispatcher` macro for routing commands.
+ #[cfg(feature = "macros")]
pub use crate::macros::dispatcher;
/// Re-export of the `empty_result` macro for creating an empty result value for early return.
- #[cfg(feature = "extra_macros")]
+ #[cfg(all(feature = "extra_macros", feature = "macros"))]
pub use crate::macros::empty_result;
/// Re-export of the `gen_program` macro for generating the program entry point.
+ #[cfg(feature = "macros")]
pub use crate::macros::gen_program;
/// Re-export of the `pack` macro for creating wrapper types.
+ #[cfg(feature = "macros")]
pub use crate::macros::pack;
- /// Like `pack!` but also marks the type for structured output
- #[cfg(feature = "structural_renderer")]
- pub use mingling_macros::pack_structural;
/// Re-export of the `pack_err` macro for creating error types.
- #[cfg(feature = "extra_macros")]
+ #[cfg(all(feature = "extra_macros", feature = "macros"))]
pub use crate::macros::pack_err;
- /// Like `pack_err!` but also marks the type for structured output
- #[cfg(all(feature = "structural_renderer", feature = "extra_macros"))]
- pub use mingling_macros::pack_err_structural;
- /// Re-export of the `r_print` macro for printing within a renderer context.
- pub use crate::macros::r_print;
- /// Re-export of the `r_println` macro for printing with a newline within a renderer
- /// context.
- pub use crate::macros::r_println;
/// Re-export of the `renderer` macro for defining renderer functions.
+ #[cfg(feature = "macros")]
pub use crate::macros::renderer;
+ /// Like `pack_err!` but also marks the type for structured output
+ #[cfg(all(
+ feature = "macros",
+ feature = "structural_renderer",
+ feature = "extra_macros"
+ ))]
+ pub use mingling_macros::pack_err_structural;
+ /// Like `pack!` but also marks the type for structured output
+ #[cfg(all(feature = "macros", feature = "structural_renderer"))]
+ pub use mingling_macros::pack_structural;
/// Re-export of the `completion` macro for generating completion entries.
- #[cfg(feature = "comp")]
+ #[cfg(all(feature = "macros", feature = "comp"))]
pub use crate::macros::completion;
/// Re-export of the `AsPicker` trait for picker functionality.
#[cfg(feature = "parser")]
pub use crate::parser::AsPicker;
+
+ #[cfg(feature = "picker")]
+ pub use mingling_picker::prelude::*;
+
+ /// Used to enable the `writeln!` macro for `RenderResult`
+ #[cfg(feature = "core")]
+ pub use std::io::Write;
}