use crate::{
Affirm, ElicitCommunicator, ElicitIntrospect, ElicitResult, Elicitation, ElicitationPattern,
PatternDetails, Prompt, TypeMetadata,
};
crate::default_style!(bool => BoolStyle);
impl Prompt for bool {
fn prompt() -> Option<&'static str> {
Some("Please answer yes or no:")
}
}
impl Affirm for bool {}
impl Elicitation for bool {
type Style = BoolStyle;
#[tracing::instrument(skip(communicator))]
async fn elicit<C: ElicitCommunicator>(communicator: &C) -> ElicitResult<Self> {
use crate::verification::types::BoolDefault;
tracing::debug!("Eliciting bool via BoolDefault wrapper");
let wrapper = BoolDefault::elicit(communicator).await?;
Ok(wrapper.into_inner())
}
fn kani_proof() -> proc_macro2::TokenStream {
use crate::verification::types::BoolDefault;
<BoolDefault as crate::Elicitation>::kani_proof()
}
fn verus_proof() -> proc_macro2::TokenStream {
<crate::verification::types::BoolDefault as crate::Elicitation>::verus_proof()
}
fn creusot_proof() -> proc_macro2::TokenStream {
<crate::verification::types::BoolDefault as crate::Elicitation>::creusot_proof()
}
}
impl ElicitIntrospect for bool {
fn pattern() -> ElicitationPattern {
ElicitationPattern::Affirm
}
fn metadata() -> TypeMetadata {
TypeMetadata {
type_name: "bool",
description: Self::prompt(),
details: PatternDetails::Affirm,
}
}
}