#![forbid(unsafe_code)]
use crate::error::ErrorCode;
use std::ffi::{CStr, CString};
use std::result::Result;
#[rustversion::attr(since(1.48), doc(alias = "pam_conv"))]
pub trait ConversationHandler {
fn init(&mut self, _default_user: Option<impl AsRef<str>>) {}
fn prompt_echo_on(&mut self, prompt: &CStr) -> Result<CString, ErrorCode>;
fn prompt_echo_off(&mut self, prompt: &CStr) -> Result<CString, ErrorCode>;
fn text_info(&mut self, msg: &CStr);
fn error_msg(&mut self, msg: &CStr);
fn radio_prompt(&mut self, prompt: &CStr) -> Result<bool, ErrorCode> {
let prompt = [prompt.to_bytes(), b" [y/N]\0"].concat();
self.prompt_echo_on(CStr::from_bytes_with_nul(&prompt).unwrap())
.map(|s| matches!(s.as_bytes_with_nul()[0], b'Y' | b'y' | b'j' | b'J'))
}
fn binary_prompt(&mut self, _type: u8, _data: &[u8]) -> Result<(u8, Vec<u8>), ErrorCode> {
Err(ErrorCode::CONV_ERR)
}
}