1- use libipt_sys:: { pt_event__bindgen_ty_1__bindgen_ty_2, pt_event__bindgen_ty_1__bindgen_ty_3} ;
1+ use crate :: error:: { PtError , PtErrorCode } ;
2+ use crate :: event:: Event ;
3+ use derive_more:: Deref ;
4+ use libipt_sys:: { pt_event_type_ptev_async_disabled, pt_event_type_ptev_disabled} ;
25
36/// Tracing has been disabled
4- #[ derive( Clone , Copy , Debug ) ]
5- pub struct Disabled ( pub ( super ) pt_event__bindgen_ty_1__bindgen_ty_2 ) ;
7+ #[ derive( Clone , Copy , Debug , Deref ) ]
8+ #[ repr( transparent) ]
9+ pub struct Disabled {
10+ pub ( super ) event : Event ,
11+ }
612impl Disabled {
713 /// The destination of the first branch inside a
814 /// filtered area.
915 ///
1016 /// This field is not valid if \@ip_suppressed is set.
1117 #[ must_use]
12- pub fn ip ( & self ) -> u64 {
13- self . 0 . ip
18+ pub const fn ip ( & self ) -> u64 {
19+ unsafe { self . event . 0 . variant . disabled . ip }
20+ }
21+ }
22+
23+ impl TryFrom < Event > for Disabled {
24+ type Error = PtError ;
25+
26+ fn try_from ( event : Event ) -> Result < Self , Self :: Error > {
27+ if event. 0 . type_ == pt_event_type_ptev_disabled {
28+ Ok ( Self { event } )
29+ } else {
30+ Err ( PtErrorCode :: Invalid . into ( ) )
31+ }
1432 }
1533}
1634
1735/// Tracing has been disabled asynchronously
1836#[ derive( Clone , Copy , Debug ) ]
19- pub struct AsyncDisabled ( pub ( super ) pt_event__bindgen_ty_1__bindgen_ty_3 ) ;
37+ pub struct AsyncDisabled {
38+ pub ( super ) event : Event ,
39+ }
2040impl AsyncDisabled {
2141 /// The source address of the asynchronous branch that disabled tracing
2242 #[ must_use]
23- pub fn at ( & self ) -> u64 {
24- self . 0 . at
43+ pub const fn at ( & self ) -> u64 {
44+ unsafe { self . event . 0 . variant . async_disabled . at }
2545 }
2646
2747 /// The destination of the first branch inside a filtered area.
2848 /// This field is not valid if @ip_suppressed is set.
2949 #[ must_use]
30- pub fn ip ( & self ) -> u64 {
31- self . 0 . ip
50+ pub const fn ip ( & self ) -> u64 {
51+ unsafe { self . event . 0 . variant . async_disabled . ip }
52+ }
53+ }
54+
55+ impl TryFrom < Event > for AsyncDisabled {
56+ type Error = PtError ;
57+
58+ fn try_from ( event : Event ) -> Result < Self , Self :: Error > {
59+ if event. 0 . type_ == pt_event_type_ptev_async_disabled {
60+ Ok ( Self { event } )
61+ } else {
62+ Err ( PtErrorCode :: Invalid . into ( ) )
63+ }
3264 }
3365}
3466
3567#[ cfg( test) ]
3668mod test {
37- use super :: super :: Payload ;
38- use super :: * ;
69+ use super :: super :: EventType ;
3970 use crate :: event:: Event ;
4071 use libipt_sys:: { pt_event, pt_event_type_ptev_async_disabled, pt_event_type_ptev_disabled} ;
4172 use std:: mem;
@@ -44,11 +75,11 @@ mod test {
4475 fn test_disabled_payload ( ) {
4576 let mut evt: pt_event = unsafe { mem:: zeroed ( ) } ;
4677 evt. type_ = pt_event_type_ptev_disabled;
47- evt. variant . disabled = pt_event__bindgen_ty_1__bindgen_ty_2 { ip : 11 } ;
78+ evt. variant . disabled . ip = 11 ;
4879
49- let payload: Payload = Event ( evt) . into ( ) ;
80+ let payload: EventType = Event ( evt) . into ( ) ;
5081 match payload {
51- Payload :: Disabled ( e) => {
82+ EventType :: Disabled ( e) => {
5283 assert_eq ! ( e. ip( ) , 11 ) ;
5384 }
5485 _ => unreachable ! ( "oof" ) ,
@@ -59,11 +90,12 @@ mod test {
5990 fn test_async_disabled_payload ( ) {
6091 let mut evt: pt_event = unsafe { mem:: zeroed ( ) } ;
6192 evt. type_ = pt_event_type_ptev_async_disabled;
62- evt. variant . async_disabled = pt_event__bindgen_ty_1__bindgen_ty_3 { at : 1 , ip : 11 } ;
93+ evt. variant . async_disabled . at = 1 ;
94+ evt. variant . async_disabled . ip = 11 ;
6395
64- let payload: Payload = Event ( evt) . into ( ) ;
96+ let payload: EventType = Event ( evt) . into ( ) ;
6597 match payload {
66- Payload :: AsnycDisabled ( e) => {
98+ EventType :: AsnycDisabled ( e) => {
6799 assert_eq ! ( e. ip( ) , 11 ) ;
68100 assert_eq ! ( e. at( ) , 1 ) ;
69101 }
0 commit comments