comparison src/conv.rs @ 63:a7aa5ca0d00d

Move MessageStyle to conv, the only place it is used.
author Paul Fisher <paul@pfish.zone>
date Wed, 21 May 2025 23:19:43 -0400
parents d83623951070
children bbe84835d6db
comparison
equal deleted inserted replaced
62:d83623951070 63:a7aa5ca0d00d
4 //! to improve the interface for both PAM modules and clients. 4 //! to improve the interface for both PAM modules and clients.
5 5
6 use libc::{c_char, c_int}; 6 use libc::{c_char, c_int};
7 use std::ffi::{CStr, CString}; 7 use std::ffi::{CStr, CString};
8 use std::ptr; 8 use std::ptr;
9 9 use num_derive::FromPrimitive;
10 use crate::constants::ErrorCode; 10 use crate::constants::{ErrorCode, InvalidEnum};
11 use crate::constants::MessageStyle; 11 use crate::constants::MessageStyle;
12 use crate::constants::Result; 12 use crate::constants::Result;
13 use crate::items::Item; 13 use crate::items::Item;
14
15 /// Styles of message that are shown to the user.
16 #[derive(Debug, PartialEq, FromPrimitive)]
17 #[non_exhaustive] // non-exhaustive because C might give us back anything!
18 pub enum MessageStyle {
19 /// Requests information from the user; will be masked when typing.
20 PromptEchoOff = 1,
21 /// Requests information from the user; will not be masked.
22 PromptEchoOn = 2,
23 /// An error message.
24 ErrorMsg = 3,
25 /// An informational message.
26 TextInfo = 4,
27 /// Yes/No/Maybe conditionals. Linux-PAM specific.
28 RadioType = 5,
29 /// For server–client non-human interaction.
30 /// NOT part of the X/Open PAM specification.
31 BinaryPrompt = 7,
32 }
33
34 impl TryFrom<c_int> for MessageStyle {
35 type Error = InvalidEnum<Self>;
36 fn try_from(value: c_int) -> std::result::Result<Self, Self::Error> {
37 Self::from_i32(value).ok_or(value.into())
38 }
39 }
40
41 impl From<MessageStyle> for c_int {
42 fn from(val: MessageStyle) -> Self {
43 val as Self
44 }
45 }
46
14 47
15 #[repr(C)] 48 #[repr(C)]
16 struct Message { 49 struct Message {
17 msg_style: MessageStyle, 50 msg_style: MessageStyle,
18 msg: *const c_char, 51 msg: *const c_char,