Skip to main content

Elicitation

Trait Elicitation 

Source
pub trait Elicitation:
    Sized
    + Prompt
    + 'static {
    type Style: Elicitation + Default + Clone + Send + Sync + 'static;

    // Required method
    fn elicit(
        client: &ElicitClient<'_>,
    ) -> impl Future<Output = ElicitResult<Self>> + Send;

    // Provided methods
    fn with_style(style: Self::Style) -> ElicitBuilder<Self> { ... }
    fn elicit_proven(
        client: &ElicitClient<'_>,
    ) -> impl Future<Output = ElicitResult<(Self, Established<Is<Self>>)>> + Send { ... }
}
Expand description

Main elicitation trait - entry point for value elicitation.

This trait defines how to elicit a value of a given type from the user via MCP (Model Context Protocol). All types that can be elicited implement this trait.

§Associated Types

  • Style - The style enum for this type. Each type has its own style enum that controls how prompts are presented. The style enum itself implements Elicitation, allowing automatic style selection.

§Example

use elicitation::{Elicitation, ElicitClient, ElicitResult};
// Elicit an i32 from the user
let value: i32 = i32::elicit(client).await?;

Required Associated Types§

Source

type Style: Elicitation + Default + Clone + Send + Sync + 'static

The style enum for this type.

Controls how prompts are presented. For types with multiple styles, this enum has variants for each style. For types with no custom styles, this enum has only a Default variant.

The style enum itself implements Elicitation (using the Select pattern), enabling automatic style selection when no style is pre-set.

Required Methods§

Source

fn elicit( client: &ElicitClient<'_>, ) -> impl Future<Output = ElicitResult<Self>> + Send

Elicit a value of this type from the user via style-aware client.

§Arguments
  • client - The style-aware client wrapper to use for interaction
§Returns

Returns Ok(Self) if elicitation succeeds, or Err(ElicitError) if:

  • The user provides invalid input
  • The MCP tool call fails
  • The user cancels the operation
§Errors

See ElicitError for details on error conditions.

Provided Methods§

Source

fn with_style(style: Self::Style) -> ElicitBuilder<Self>

Create a builder for one-off style override.

This enables ergonomic syntax for eliciting a value with a specific style without manually creating a styled client.

§Arguments
  • style - The style to use for this elicitation
§Returns

Returns an ElicitBuilder that can be used to elicit the value.

§Example
use elicitation::Elicitation;
// One-off style override - concise syntax
let config = Config::with_style(ConfigStyle::Curt)
    .elicit(&peer)
    .await?;
Source

fn elicit_proven( client: &ElicitClient<'_>, ) -> impl Future<Output = ElicitResult<(Self, Established<Is<Self>>)>> + Send

Elicit a value with proof it inhabits type Self.

After successful elicitation, returns both the value and a proof that the value inhabits type Self. This proof can be carried forward to downstream functions requiring guarantees.

§Returns

Returns Ok((value, proof)) where proof is Established<Is<Self>>.

§Example
use elicitation::{Elicitation, contracts::{Established, Is}};
// Elicit with proof
let (email, proof): (String, Established<Is<String>>) = 
    String::elicit_proven(client).await?;

// Use proof in downstream function
send_email(email, proof).await?;

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementations on Foreign Types§

Source§

impl Elicitation for IpAddr

Source§

type Style = IpAddrStyle

Source§

async fn elicit(client: &ElicitClient<'_>) -> ElicitResult<Self>

Source§

impl Elicitation for SocketAddr

Source§

type Style = SocketAddrStyle

Source§

async fn elicit(client: &ElicitClient<'_>) -> ElicitResult<Self>

Source§

impl Elicitation for bool

Source§

type Style = BoolStyle

Source§

async fn elicit(client: &ElicitClient<'_>) -> ElicitResult<Self>

Source§

impl Elicitation for char

Source§

type Style = CharStyle

Source§

async fn elicit(client: &ElicitClient<'_>) -> ElicitResult<Self>

Source§

impl Elicitation for f32

Source§

type Style = F32Style

Source§

async fn elicit(client: &ElicitClient<'_>) -> ElicitResult<Self>

Source§

impl Elicitation for f64

Source§

type Style = F64Style

Source§

async fn elicit(client: &ElicitClient<'_>) -> ElicitResult<Self>

Source§

impl Elicitation for i8

Source§

type Style = I8Style

Source§

async fn elicit(client: &ElicitClient<'_>) -> ElicitResult<Self>

Source§

impl Elicitation for i16

Source§

type Style = I16Style

Source§

async fn elicit(client: &ElicitClient<'_>) -> ElicitResult<Self>

Source§

impl Elicitation for i32

Source§

type Style = I32Style

Source§

async fn elicit(client: &ElicitClient<'_>) -> ElicitResult<Self>

Source§

impl Elicitation for i64

Source§

type Style = I64Style

Source§

async fn elicit(client: &ElicitClient<'_>) -> ElicitResult<Self>

Source§

impl Elicitation for i128

Source§

type Style = I128Style

Source§

async fn elicit(client: &ElicitClient<'_>) -> ElicitResult<Self>

Source§

impl Elicitation for isize

Source§

type Style = IsizeStyle

Source§

async fn elicit(client: &ElicitClient<'_>) -> ElicitResult<Self>

Source§

impl Elicitation for u8

Source§

type Style = U8Style

Source§

async fn elicit(client: &ElicitClient<'_>) -> ElicitResult<Self>

Source§

impl Elicitation for u16

Source§

type Style = U16Style

Source§

async fn elicit(client: &ElicitClient<'_>) -> ElicitResult<Self>

Source§

impl Elicitation for u32

Source§

type Style = U32Style

Source§

async fn elicit(client: &ElicitClient<'_>) -> ElicitResult<Self>

Source§

impl Elicitation for u64

Source§

type Style = U64Style

Source§

async fn elicit(client: &ElicitClient<'_>) -> ElicitResult<Self>

Source§

impl Elicitation for u128

Source§

type Style = U128Style

Source§

async fn elicit(client: &ElicitClient<'_>) -> ElicitResult<Self>

Source§

impl Elicitation for usize

Source§

type Style = UsizeStyle

Source§

async fn elicit(client: &ElicitClient<'_>) -> ElicitResult<Self>

Source§

impl Elicitation for String

Source§

type Style = StringStyle

Source§

async fn elicit(client: &ElicitClient<'_>) -> ElicitResult<Self>

Source§

impl Elicitation for Ipv4Addr

Source§

type Style = Ipv4AddrStyle

Source§

async fn elicit(client: &ElicitClient<'_>) -> ElicitResult<Self>

Source§

impl Elicitation for Ipv6Addr

Source§

type Style = Ipv6AddrStyle

Source§

async fn elicit(client: &ElicitClient<'_>) -> ElicitResult<Self>

Source§

impl Elicitation for SocketAddrV4

Source§

type Style = SocketAddrV4Style

Source§

async fn elicit(client: &ElicitClient<'_>) -> ElicitResult<Self>

Source§

impl Elicitation for SocketAddrV6

Source§

type Style = SocketAddrV6Style

Source§

async fn elicit(client: &ElicitClient<'_>) -> ElicitResult<Self>

Source§

impl Elicitation for Duration

Source§

type Style = DurationStyle

Source§

async fn elicit(client: &ElicitClient<'_>) -> ElicitResult<Self>

Source§

impl Elicitation for Error

Source§

type Style = IoErrorStyle

Source§

async fn elicit(client: &ElicitClient<'_>) -> ElicitResult<Self>

Source§

impl Elicitation for PathBuf

Source§

type Style = PathBufStyle

Source§

async fn elicit(client: &ElicitClient<'_>) -> ElicitResult<Self>

Source§

impl Elicitation for SystemTime

Source§

type Style = SystemTimeStyle

Source§

async fn elicit(client: &ElicitClient<'_>) -> ElicitResult<Self>

Source§

impl<K, V> Elicitation for BTreeMap<K, V>
where K: Elicitation + Ord + Send, V: Elicitation + Send,

Source§

type Style = BTreeMapStyle

Source§

async fn elicit(client: &ElicitClient<'_>) -> ElicitResult<Self>

Source§

impl<K, V> Elicitation for HashMap<K, V>
where K: Elicitation + Hash + Eq + Send, V: Elicitation + Send,

Source§

type Style = HashMapStyle

Source§

async fn elicit(client: &ElicitClient<'_>) -> ElicitResult<Self>

Source§

impl<T0> Elicitation for (T0,)
where T0: Elicitation + Send,

Source§

type Style = Tuple0Style

Source§

async fn elicit(client: &ElicitClient<'_>) -> ElicitResult<Self>

Source§

impl<T0, T1> Elicitation for (T0, T1)
where T0: Elicitation + Send, T1: Elicitation + Send,

Source§

type Style = Tuple01Style

Source§

async fn elicit(client: &ElicitClient<'_>) -> ElicitResult<Self>

Source§

impl<T0, T1, T2> Elicitation for (T0, T1, T2)
where T0: Elicitation + Send, T1: Elicitation + Send, T2: Elicitation + Send,

Source§

type Style = Tuple012Style

Source§

async fn elicit(client: &ElicitClient<'_>) -> ElicitResult<Self>

Source§

impl<T0, T1, T2, T3> Elicitation for (T0, T1, T2, T3)
where T0: Elicitation + Send, T1: Elicitation + Send, T2: Elicitation + Send, T3: Elicitation + Send,

Source§

type Style = Tuple0123Style

Source§

async fn elicit(client: &ElicitClient<'_>) -> ElicitResult<Self>

Source§

impl<T0, T1, T2, T3, T4> Elicitation for (T0, T1, T2, T3, T4)
where T0: Elicitation + Send, T1: Elicitation + Send, T2: Elicitation + Send, T3: Elicitation + Send, T4: Elicitation + Send,

Source§

type Style = Tuple01234Style

Source§

async fn elicit(client: &ElicitClient<'_>) -> ElicitResult<Self>

Source§

impl<T0, T1, T2, T3, T4, T5> Elicitation for (T0, T1, T2, T3, T4, T5)

Source§

type Style = Tuple012345Style

Source§

async fn elicit(client: &ElicitClient<'_>) -> ElicitResult<Self>

Source§

impl<T0, T1, T2, T3, T4, T5, T6> Elicitation for (T0, T1, T2, T3, T4, T5, T6)

Source§

type Style = Tuple0123456Style

Source§

async fn elicit(client: &ElicitClient<'_>) -> ElicitResult<Self>

Source§

impl<T0, T1, T2, T3, T4, T5, T6, T7> Elicitation for (T0, T1, T2, T3, T4, T5, T6, T7)

Source§

type Style = Tuple01234567Style

Source§

async fn elicit(client: &ElicitClient<'_>) -> ElicitResult<Self>

Source§

impl<T0, T1, T2, T3, T4, T5, T6, T7, T8> Elicitation for (T0, T1, T2, T3, T4, T5, T6, T7, T8)

Source§

type Style = Tuple012345678Style

Source§

async fn elicit(client: &ElicitClient<'_>) -> ElicitResult<Self>

Source§

impl<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9> Elicitation for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9)

Source§

type Style = Tuple0123456789Style

Source§

async fn elicit(client: &ElicitClient<'_>) -> ElicitResult<Self>

Source§

impl<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> Elicitation for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10)

Source§

type Style = Tuple012345678910Style

Source§

async fn elicit(client: &ElicitClient<'_>) -> ElicitResult<Self>

Source§

impl<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> Elicitation for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11)

Source§

type Style = Tuple01234567891011Style

Source§

async fn elicit(client: &ElicitClient<'_>) -> ElicitResult<Self>

Source§

impl<T> Elicitation for Box<T>
where T: Elicitation + Send,

Source§

type Style = BoxStyle

Source§

async fn elicit(client: &ElicitClient<'_>) -> ElicitResult<Self>

Source§

impl<T> Elicitation for BTreeSet<T>
where T: Elicitation + Ord + Send,

Source§

type Style = BTreeSetStyle

Source§

async fn elicit(client: &ElicitClient<'_>) -> ElicitResult<Self>

Source§

impl<T> Elicitation for LinkedList<T>
where T: Elicitation + Send,

Source§

type Style = LinkedListStyle

Source§

async fn elicit(client: &ElicitClient<'_>) -> ElicitResult<Self>

Source§

impl<T> Elicitation for VecDeque<T>
where T: Elicitation + Send,

Source§

type Style = VecDequeStyle

Source§

async fn elicit(client: &ElicitClient<'_>) -> ElicitResult<Self>

Source§

impl<T> Elicitation for Rc<T>
where T: Elicitation + Send,

Source§

type Style = RcStyle

Source§

async fn elicit(client: &ElicitClient<'_>) -> ElicitResult<Self>

Source§

impl<T> Elicitation for Arc<T>
where T: Elicitation + Send,

Source§

type Style = ArcStyle

Source§

async fn elicit(client: &ElicitClient<'_>) -> ElicitResult<Self>

Source§

impl<T> Elicitation for HashSet<T>
where T: Elicitation + Hash + Eq + Send,

Source§

type Style = HashSetStyle

Source§

async fn elicit(client: &ElicitClient<'_>) -> ElicitResult<Self>

Source§

impl<T, E> Elicitation for Result<T, E>
where T: Elicitation + Send, E: Elicitation + Send,

Source§

type Style = ResultStyle

Source§

async fn elicit(client: &ElicitClient<'_>) -> ElicitResult<Self>

Source§

impl<T, const N: usize> Elicitation for [T; N]
where T: Elicitation + Send,

Source§

type Style = ArrayStyle

Source§

async fn elicit(client: &ElicitClient<'_>) -> ElicitResult<Self>

Source§

impl<T: Elicitation + Send> Elicitation for Option<T>

Source§

type Style = OptionStyle

Source§

async fn elicit(client: &ElicitClient<'_>) -> ElicitResult<Self>

Source§

impl<T: Elicitation + Send> Elicitation for Vec<T>

Source§

type Style = VecStyle

Source§

async fn elicit(client: &ElicitClient<'_>) -> ElicitResult<Self>

Implementors§

Source§

impl Elicitation for DurationGenerationMode

Source§

type Style = DurationGenerationModeStyle

Source§

impl Elicitation for IoErrorGenerationMode

Source§

type Style = IoErrorGenerationModeStyle

Source§

impl Elicitation for SystemTimeGenerationMode

Source§

type Style = SystemTimeGenerationModeStyle

Source§

impl Elicitation for I8NonZeroStyle

Source§

impl Elicitation for I8RangeStyle

Source§

impl Elicitation for I16NonZeroStyle

Source§

impl Elicitation for I16RangeStyle

Source§

impl Elicitation for I32RangeStyle

Source§

impl Elicitation for I64RangeStyle

Source§

impl Elicitation for I128RangeStyle

Source§

impl Elicitation for IsizeRangeStyle

Source§

impl Elicitation for U8RangeStyle

Source§

impl Elicitation for U16RangeStyle

Source§

impl Elicitation for U32RangeStyle

Source§

impl Elicitation for U64RangeStyle

Source§

impl Elicitation for U128RangeStyle

Source§

impl Elicitation for UsizeRangeStyle

Source§

impl Elicitation for Formatter

Source§

type Style = FormatterStyle

Source§

impl Elicitation for Parser

Source§

type Style = ParserStyle

Source§

impl Elicitation for Validator

Source§

type Style = ValidatorStyle

Source§

impl Elicitation for BoolDefault

Source§

type Style = BoolDefaultStyle

Source§

impl Elicitation for BoolFalse

Source§

type Style = BoolFalseStyle

Source§

impl Elicitation for BoolTrue

Source§

type Style = BoolTrueStyle

Source§

impl Elicitation for CharAlphabetic

Source§

type Style = CharAlphabeticStyle

Source§

impl Elicitation for CharAlphanumeric

Source§

type Style = CharAlphanumericStyle

Source§

impl Elicitation for CharNumeric

Source§

type Style = CharNumericStyle

Source§

impl Elicitation for DurationPositive

Source§

impl Elicitation for F32Default

Source§

type Style = F32DefaultStyle

Source§

impl Elicitation for F32Finite

Source§

type Style = F32FiniteStyle

Source§

impl Elicitation for F32NonNegative

Source§

type Style = F32NonNegativeStyle

Source§

impl Elicitation for F32Positive

Source§

type Style = F32PositiveStyle

Source§

impl Elicitation for F64Default

Source§

type Style = F64DefaultStyle

Source§

impl Elicitation for F64Finite

Source§

type Style = F64FiniteStyle

Source§

impl Elicitation for F64NonNegative

Source§

type Style = F64NonNegativeStyle

Source§

impl Elicitation for F64Positive

Source§

type Style = F64PositiveStyle

Source§

impl Elicitation for I8Default

Source§

type Style = I8DefaultStyle

Source§

impl Elicitation for I8NonNegative

Source§

type Style = I8NonNegativeStyle

Source§

impl Elicitation for I8NonZero

Source§

impl Elicitation for I8Positive

Source§

type Style = I8PositiveStyle

Source§

impl Elicitation for I16Default

Source§

type Style = I16DefaultStyle

Source§

impl Elicitation for I16NonNegative

Source§

type Style = I16NonNegativeStyle

Source§

impl Elicitation for I16NonZero

Source§

impl Elicitation for I16Positive

Source§

type Style = I16PositiveStyle

Source§

impl Elicitation for I32Default

Source§

type Style = I32DefaultStyle

Source§

impl Elicitation for I32NonNegative

Source§

type Style = I32NonNegativeStyle

Source§

impl Elicitation for I32NonZero

Source§

type Style = I32NonZeroStyle

Source§

impl Elicitation for I32Positive

Source§

type Style = I32PositiveStyle

Source§

impl Elicitation for I64Default

Source§

type Style = I64DefaultStyle

Source§

impl Elicitation for I64NonNegative

Source§

type Style = I64NonNegativeStyle

Source§

impl Elicitation for I64NonZero

Source§

type Style = I64NonZeroStyle

Source§

impl Elicitation for I64Positive

Source§

type Style = I64PositiveStyle

Source§

impl Elicitation for I128Default

Source§

type Style = I128DefaultStyle

Source§

impl Elicitation for I128NonNegative

Source§

type Style = I128NonNegativeStyle

Source§

impl Elicitation for I128NonZero

Source§

type Style = I128NonZeroStyle

Source§

impl Elicitation for I128Positive

Source§

type Style = I128PositiveStyle

Source§

impl Elicitation for IpPrivate

Source§

impl Elicitation for IpPublic

Source§

impl Elicitation for IpV4

Source§

impl Elicitation for IpV6

Source§

impl Elicitation for Ipv4Loopback

Source§

impl Elicitation for Ipv6Loopback

Source§

impl Elicitation for IsizeDefault

Source§

type Style = IsizeDefaultStyle

Source§

impl Elicitation for IsizeNonNegative

Source§

type Style = IsizeNonNegativeStyle

Source§

impl Elicitation for IsizeNonZero

Source§

type Style = IsizeNonZeroStyle

Source§

impl Elicitation for IsizePositive

Source§

type Style = IsizePositiveStyle

Source§

impl Elicitation for PathBufExists

Source§

impl Elicitation for PathBufIsDir

Source§

impl Elicitation for PathBufIsFile

Source§

impl Elicitation for PathBufReadable

Source§

impl Elicitation for StringDefault

Source§

type Style = StringDefaultStyle

Source§

impl Elicitation for U8Default

Source§

type Style = U8DefaultStyle

Source§

impl Elicitation for U8NonZero

Source§

type Style = U8NonZeroStyle

Source§

impl Elicitation for U8Positive

Source§

type Style = U8PositiveStyle

Source§

impl Elicitation for U16Default

Source§

type Style = U16DefaultStyle

Source§

impl Elicitation for U16NonZero

Source§

type Style = U16NonZeroStyle

Source§

impl Elicitation for U16Positive

Source§

type Style = U16PositiveStyle

Source§

impl Elicitation for U32Default

Source§

type Style = U32DefaultStyle

Source§

impl Elicitation for U32NonZero

Source§

type Style = U32NonZeroStyle

Source§

impl Elicitation for U32Positive

Source§

type Style = U32PositiveStyle

Source§

impl Elicitation for U64Default

Source§

type Style = U64DefaultStyle

Source§

impl Elicitation for U64NonZero

Source§

type Style = U64NonZeroStyle

Source§

impl Elicitation for U64Positive

Source§

type Style = U64PositiveStyle

Source§

impl Elicitation for U128Default

Source§

type Style = U128DefaultStyle

Source§

impl Elicitation for U128NonZero

Source§

type Style = U128NonZeroStyle

Source§

impl Elicitation for U128Positive

Source§

type Style = U128PositiveStyle

Source§

impl Elicitation for UsizeDefault

Source§

type Style = UsizeDefaultStyle

Source§

impl Elicitation for UsizeNonZero

Source§

type Style = UsizeNonZeroStyle

Source§

impl Elicitation for UsizePositive

Source§

type Style = UsizePositiveStyle

Source§

impl<C1, C2> Elicitation for Tuple2<C1, C2>
where C1: Elicitation + Send, C2: Elicitation + Send,

Source§

impl<C1, C2, C3> Elicitation for Tuple3<C1, C2, C3>
where C1: Elicitation + Send, C2: Elicitation + Send, C3: Elicitation + Send,

Source§

impl<C1, C2, C3, C4> Elicitation for Tuple4<C1, C2, C3, C4>
where C1: Elicitation + Send, C2: Elicitation + Send, C3: Elicitation + Send, C4: Elicitation + Send,

Source§

impl<C, const N: usize> Elicitation for ArrayAllSatisfy<C, N>
where C: Elicitation + Send,

Source§

impl<C: Elicitation + Send> Elicitation for ArcSatisfies<C>

Source§

impl<C: Elicitation + Send> Elicitation for BoxSatisfies<C>

Source§

impl<C: Elicitation + Send> Elicitation for RcSatisfies<C>

Source§

impl<C: Elicitation + Send> Elicitation for VecAllSatisfy<C>

Source§

impl<K, V> Elicitation for BTreeMapNonEmpty<K, V>
where K: Elicitation + Ord + Send, V: Elicitation + Send,

Source§

impl<K, V> Elicitation for HashMapNonEmpty<K, V>
where K: Elicitation + Eq + Hash + Send, V: Elicitation + Send,

Source§

impl<T> Elicitation for BTreeSetNonEmpty<T>
where T: Elicitation + Ord + Send,

Source§

impl<T> Elicitation for HashSetNonEmpty<T>
where T: Elicitation + Eq + Hash + Send,

Source§

impl<T> Elicitation for LinkedListNonEmpty<T>
where T: Elicitation + Send,

Source§

impl<T> Elicitation for VecDequeNonEmpty<T>
where T: Elicitation + Send,

Source§

impl<T: Elicitation + Send> Elicitation for OptionSome<T>

Source§

impl<T: Elicitation + Send> Elicitation for ResultOk<T>

Source§

impl<T: Elicitation + Send> Elicitation for VecNonEmpty<T>

Source§

impl<const MAX_LEN: usize> Elicitation for StringNonEmpty<MAX_LEN>

Source§

type Style = StringNonEmptyStyle

Source§

impl<const MIN: i8, const MAX: i8> Elicitation for I8Range<MIN, MAX>

Source§

impl<const MIN: i16, const MAX: i16> Elicitation for I16Range<MIN, MAX>

Source§

impl<const MIN: i32, const MAX: i32> Elicitation for I32Range<MIN, MAX>

Source§

impl<const MIN: i64, const MAX: i64> Elicitation for I64Range<MIN, MAX>

Source§

impl<const MIN: i128, const MAX: i128> Elicitation for I128Range<MIN, MAX>

Source§

impl<const MIN: isize, const MAX: isize> Elicitation for IsizeRange<MIN, MAX>

Source§

impl<const MIN: u8, const MAX: u8> Elicitation for U8Range<MIN, MAX>

Source§

impl<const MIN: u16, const MAX: u16> Elicitation for U16Range<MIN, MAX>

Source§

impl<const MIN: u32, const MAX: u32> Elicitation for U32Range<MIN, MAX>

Source§

impl<const MIN: u64, const MAX: u64> Elicitation for U64Range<MIN, MAX>

Source§

impl<const MIN: u128, const MAX: u128> Elicitation for U128Range<MIN, MAX>

Source§

impl<const MIN: usize, const MAX: usize> Elicitation for UsizeRange<MIN, MAX>