dbus_message_parser/match_rule/
arg.rs1use super::{escape::escape, MatchRuleError};
2use std::{
3 convert::TryFrom,
4 fmt::{Display, Formatter, Result as FmtResult},
5};
6
7pub const MAXIMUM_ARG_INDEX: usize = 64;
8
9#[derive(Debug, PartialEq, Eq)]
10pub struct Arg(usize, String);
11
12impl Arg {
13 pub fn get_key(&self) -> String {
14 format!("arg{}", self.get_index())
15 }
16
17 pub fn get_index(&self) -> usize {
18 self.0
19 }
20
21 pub fn get_value(&self) -> &str {
22 self.1.as_str()
23 }
24}
25
26impl TryFrom<(usize, String)> for Arg {
27 type Error = MatchRuleError;
28
29 fn try_from(arg: (usize, String)) -> Result<Self, Self::Error> {
30 if MAXIMUM_ARG_INDEX <= arg.0 {
31 return Err(MatchRuleError::ArgIndexTooBig(arg.0));
32 }
33 Ok(Arg(arg.0, arg.1))
34 }
35}
36
37impl Display for Arg {
38 fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult {
39 write!(f, "{}", escape(self.1.as_str()))
40 }
41}