@@ -68,68 +68,54 @@ pub struct ACE {
6868 pub value : AceValue ,
6969}
7070
71+ macro_rules! make_ace_value {
72+ (
73+ $( $type: ident( $val: ident) , ) +
74+ ) => {
75+ paste:: paste! {
76+
7177#[ binrw:: binrw]
7278#[ derive( Debug , PartialEq , Eq ) ]
7379#[ br( import( ace_type: AceType ) ) ]
7480pub enum AceValue {
75- #[ br( pre_assert( matches!( ace_type, AceType :: AccessAllowed ) ) ) ]
81+ $(
82+ #[ br( pre_assert( matches!( ace_type, AceType :: $type) ) ) ]
83+ $type( $val) ,
84+ ) +
85+ }
86+
87+ impl AceValue {
88+ pub fn get_type( & self ) -> AceType {
89+ match self {
90+ $(
91+ AceValue :: $type( _) => AceType :: $type,
92+ ) +
93+ }
94+ }
95+ }
96+
97+ }
98+ } ;
99+ }
100+
101+ make_ace_value ! {
76102 AccessAllowed ( AccessAce ) ,
77- #[ br( pre_assert( matches!( ace_type, AceType :: AccessDenied ) ) ) ]
78103 AccessDenied ( AccessAce ) ,
79- #[ br( pre_assert( matches!( ace_type, AceType :: SystemAudit ) ) ) ]
80104 SystemAudit ( AccessAce ) ,
81-
82- #[ br( pre_assert( matches!( ace_type, AceType :: AccessAllowedObject ) ) ) ]
83105 AccessAllowedObject ( AccessObjectAce ) ,
84- #[ br( pre_assert( matches!( ace_type, AceType :: AccessDeniedObject ) ) ) ]
85106 AccessDeniedObject ( AccessObjectAce ) ,
86- #[ br( pre_assert( matches!( ace_type, AceType :: SystemAuditObject ) ) ) ]
87107 SystemAuditObject ( AccessObjectAce ) ,
88-
89- #[ br( pre_assert( matches!( ace_type, AceType :: AccessAllowedCallback ) ) ) ]
90108 AccessAllowedCallback ( AccessCallbackAce ) ,
91- #[ br( pre_assert( matches!( ace_type, AceType :: AccessDeniedCallback ) ) ) ]
92109 AccessDeniedCallback ( AccessCallbackAce ) ,
93-
94- #[ br( pre_assert( matches!( ace_type, AceType :: AccessAllowedCallbackObject ) ) ) ]
95110 AccessAllowedCallbackObject ( AccessObjectCallbackAce ) ,
96- #[ br( pre_assert( matches!( ace_type, AceType :: AccessDeniedCallbackObject ) ) ) ]
97111 AccessDeniedCallbackObject ( AccessObjectCallbackAce ) ,
98- #[ br( pre_assert( matches!( ace_type, AceType :: SystemAuditCallback ) ) ) ]
99112 SystemAuditCallback ( AccessCallbackAce ) ,
100- #[ br( pre_assert( matches!( ace_type, AceType :: SystemAuditCallbackObject ) ) ) ]
101113 SystemAuditCallbackObject ( AccessObjectCallbackAce ) ,
102-
103- #[ br( pre_assert( matches!( ace_type, AceType :: SystemMandatoryLabel ) ) ) ]
104114 SystemMandatoryLabel ( SystemMandatoryLabelAce ) ,
105- #[ br( pre_assert( matches!( ace_type, AceType :: SystemResourceAttribute ) ) ) ]
106115 SystemResourceAttribute ( SystemResourceAttributeAce ) ,
107- #[ br( pre_assert( matches!( ace_type, AceType :: SystemScopedPolicyId ) ) ) ]
108116 SystemScopedPolicyId ( AccessAce ) ,
109117}
110118
111- impl AceValue {
112- pub fn get_type ( & self ) -> AceType {
113- match self {
114- AceValue :: AccessAllowed ( _) => AceType :: AccessAllowed ,
115- AceValue :: AccessDenied ( _) => AceType :: AccessDenied ,
116- AceValue :: SystemAudit ( _) => AceType :: SystemAudit ,
117- AceValue :: AccessAllowedObject ( _) => AceType :: AccessAllowedObject ,
118- AceValue :: AccessDeniedObject ( _) => AceType :: AccessDeniedObject ,
119- AceValue :: SystemAuditObject ( _) => AceType :: SystemAuditObject ,
120- AceValue :: AccessAllowedCallback ( _) => AceType :: AccessAllowedCallback ,
121- AceValue :: AccessDeniedCallback ( _) => AceType :: AccessDeniedCallback ,
122- AceValue :: AccessAllowedCallbackObject ( _) => AceType :: AccessAllowedCallbackObject ,
123- AceValue :: AccessDeniedCallbackObject ( _) => AceType :: AccessDeniedCallbackObject ,
124- AceValue :: SystemAuditCallback ( _) => AceType :: SystemAuditCallback ,
125- AceValue :: SystemAuditCallbackObject ( _) => AceType :: SystemAuditCallbackObject ,
126- AceValue :: SystemMandatoryLabel ( _) => AceType :: SystemMandatoryLabel ,
127- AceValue :: SystemResourceAttribute ( _) => AceType :: SystemResourceAttribute ,
128- AceValue :: SystemScopedPolicyId ( _) => AceType :: SystemScopedPolicyId ,
129- }
130- }
131- }
132-
133119#[ binrw:: binrw]
134120#[ derive( Debug , PartialEq , Eq ) ]
135121pub struct AccessAce {
0 commit comments