use crate::{
ElicitCommunicator, ElicitIntrospect, ElicitResult, Elicitation, ElicitationPattern,
PatternDetails, Prompt, TypeMetadata,
};
crate::default_style!(url::Url => UrlStyle);
impl Prompt for url::Url {
fn prompt() -> Option<&'static str> {
Some("Please enter a URL:")
}
}
impl Elicitation for url::Url {
type Style = UrlStyle;
#[tracing::instrument(skip(communicator))]
async fn elicit<C: ElicitCommunicator>(communicator: &C) -> ElicitResult<Self> {
use crate::verification::types::UrlValid;
tracing::debug!("Eliciting Url via UrlValid wrapper");
let wrapper = UrlValid::elicit(communicator).await?;
Ok(wrapper.into_inner())
}
#[cfg(kani)]
fn kani_proof() {
use crate::verification::types::UrlValid;
UrlValid::kani_proof();
assert!(
true,
"url::Url verified via UrlValid wrapper (compositional delegation)"
);
}
}
impl ElicitIntrospect for url::Url {
fn pattern() -> ElicitationPattern {
ElicitationPattern::Primitive
}
fn metadata() -> TypeMetadata {
TypeMetadata {
type_name: "url::Url",
description: Self::prompt(),
details: PatternDetails::Primitive,
}
}
}