#![forbid(unsafe_code)]
#![warn(missing_docs)]
mod client;
mod communicator;
mod mcp_wrapper; mod server;
mod collections;
mod containers;
mod default_style;
mod error;
pub mod verification;
#[cfg(kani)]
mod kani_tests;
#[cfg(feature = "cli")]
pub mod cli;
pub mod contracts;
pub mod mcp;
mod paradigm;
mod primitives;
pub mod style;
pub mod tool;
mod tool_registry;
#[macro_use]
mod router_macro;
mod traits;
#[cfg(feature = "serde_json")]
mod value_impl;
#[cfg(any(feature = "chrono", feature = "time", feature = "jiff"))]
mod datetime_common;
#[cfg(feature = "chrono")]
pub mod datetime_chrono;
#[cfg(feature = "time")]
pub mod datetime_time;
#[cfg(feature = "jiff")]
pub mod datetime_jiff;
#[cfg(feature = "rand")]
pub mod rand_rng;
mod elicitation_style;
pub use error::{ElicitError, ElicitErrorKind, ElicitResult, JsonError, RmcpError, ServiceError};
pub use client::ElicitClient;
pub use communicator::{ElicitCommunicator, ElicitationContext, StyleContext};
pub use mcp_wrapper::ElicitToolOutput;
pub use server::ElicitServer;
pub use elicitation_style::ElicitationStyle;
pub use traits::{
ElicitBuilder, ElicitIntrospect, Elicitation, ElicitationPattern, Generator, PatternDetails,
Prompt, TypeMetadata,
};
pub use contracts::{
And, Established, Implies, InVariant, Is, Prop, Refines, both, downcast, fst, snd,
};
pub use tool::{Tool, True, both_tools, then};
pub use tool_registry::{ElicitToolDescriptor, collect_all_elicit_tools};
pub use paradigm::{Affirm, Authorize, FieldInfo, Filter, Select, Survey};
pub use collections::ChoiceSet;
pub use rmcp;
#[doc(hidden)]
pub use serde_json;
#[doc(hidden)]
pub use paste;
#[doc(hidden)]
pub use inventory;
#[doc(hidden)]
pub use async_trait;
pub use elicitation_derive::Elicit;
#[cfg(any(feature = "verification", kani))]
pub use verification::types::{
ArcNonNull,
ArcSatisfies,
ArrayAllSatisfy,
BTreeMapNonEmpty,
BTreeSetNonEmpty,
BoolFalse,
BoolTrue,
BoxNonNull,
BoxSatisfies,
CharAlphabetic,
CharAlphanumeric,
CharNumeric,
DurationNonZero,
DurationPositive,
F32Finite,
F32NonNegative,
F32Positive,
F64Finite,
F64NonNegative,
F64Positive,
HashMapNonEmpty,
HashSetNonEmpty,
I8NonNegative,
I8NonZero,
I8NonZeroStyle,
I8Positive,
I8Range,
I8RangeStyle,
I16NonNegative,
I16NonZero,
I16NonZeroStyle,
I16Positive,
I16Range,
I16RangeStyle,
I32NonNegative,
I32NonZero,
I32Positive,
I32Range,
I32RangeStyle,
I64NonNegative,
I64NonZero,
I64Positive,
I64Range,
I64RangeStyle,
I128NonNegative,
I128NonZero,
I128Positive,
I128Range,
I128RangeStyle,
IpPrivate,
IpPublic,
IpV4,
IpV6,
Ipv4Loopback,
Ipv6Loopback,
IsizeNonNegative,
IsizeNonZero,
IsizePositive,
IsizeRange,
IsizeRangeStyle,
LinkedListNonEmpty,
OptionSome,
PathBufExists,
PathBufIsDir,
PathBufIsFile,
PathBufReadable,
RcNonNull,
RcSatisfies,
ResultOk,
StringNonEmpty,
Tuple2,
Tuple3,
Tuple4,
U8NonZero,
U8Positive,
U8Range,
U8RangeStyle,
U16NonZero,
U16Positive,
U16Range,
U16RangeStyle,
U32NonZero,
U32Positive,
U32Range,
U32RangeStyle,
U64NonZero,
U64Positive,
U64Range,
U64RangeStyle,
U128NonZero,
U128Positive,
U128Range,
U128RangeStyle,
UsizeNonZero,
UsizePositive,
UsizeRange,
UsizeRangeStyle,
ValidationError,
VecAllSatisfy,
VecDequeNonEmpty,
VecNonEmpty,
};
#[cfg(all(any(feature = "verification", kani), feature = "uuid"))]
pub use verification::types::{UuidNonNil, UuidV4};
#[cfg(feature = "uuid")]
pub use primitives::uuid::{UuidGenerationMode, UuidGenerator};
pub use primitives::systemtime::{SystemTimeGenerationMode, SystemTimeGenerator};
pub use primitives::duration::{DurationGenerationMode, DurationGenerator};
pub use primitives::StringStyle;
pub use primitives::unit_structs::{Formatter, Parser, Validator};
pub use primitives::errors::{IoErrorGenerationMode, IoErrorGenerator};
#[cfg(feature = "serde_json")]
pub use primitives::errors::{JsonErrorGenerationMode, JsonErrorGenerator};
#[cfg(feature = "chrono")]
pub use datetime_chrono::{
DateTimeUtcGenerationMode, DateTimeUtcGenerator, NaiveDateTimeGenerationMode,
NaiveDateTimeGenerator,
};
#[cfg(feature = "time")]
pub use datetime_time::{
InstantGenerationMode, InstantGenerator, OffsetDateTimeGenerationMode, OffsetDateTimeGenerator,
};
#[cfg(feature = "jiff")]
pub use datetime_jiff::{TimestampGenerationMode, TimestampGenerator};
#[cfg(all(any(feature = "verification", kani), feature = "chrono"))]
pub use verification::types::{DateTimeUtcAfter, DateTimeUtcBefore, NaiveDateTimeAfter};
#[cfg(all(any(feature = "verification", kani), feature = "time"))]
pub use verification::types::{OffsetDateTimeAfter, OffsetDateTimeBefore};
#[cfg(all(any(feature = "verification", kani), feature = "jiff"))]
pub use verification::types::{TimestampAfter, TimestampBefore};
#[cfg(all(any(feature = "verification", kani), feature = "serde_json"))]
pub use verification::types::{ValueArray, ValueNonNull, ValueObject};
#[cfg(all(any(feature = "verification", kani), feature = "url"))]
pub use verification::types::{UrlCanBeBase, UrlHttp, UrlHttps, UrlValid, UrlWithHost};
#[cfg(all(any(feature = "verification", kani), feature = "regex"))]
pub use verification::types::{
RegexCaseInsensitive, RegexMultiline, RegexSetNonEmpty, RegexSetValid, RegexValid,
};
#[cfg(any(feature = "verification", kani))]
pub use verification::mechanisms::{
AffirmReturnsBoolean, InputNonEmpty, MechanismWithType, NumericReturnsValid,
SurveyReturnsValidVariant, TextReturnsNonEmpty, TextReturnsString,
};