@@ -106,9 +106,7 @@ pub struct ProcessingM2StatStatC {
106106}
107107
108108#[ repr( C ) ]
109- pub struct ProcessingM2PskC {
110- pub id_cred_r : IdCred ,
111- }
109+ pub struct ProcessingM2PskC { }
112110
113111#[ repr( C ) ]
114112pub union ProcessingM2MethodSpecificsDataC {
@@ -170,12 +168,7 @@ impl ProcessingM2C {
170168 id_cred_r : stat. id_cred_r . clone ( ) ,
171169 }
172170 }
173- ProcessingM2MethodSpecificsKindC :: Pm2Psk => {
174- let psk = unsafe { & self . method_specifics . data . psk } ;
175- ProcessingM2MethodSpecifics :: Psk {
176- id_cred_r : psk. id_cred_r . clone ( ) ,
177- }
178- }
171+ ProcessingM2MethodSpecificsKindC :: Pm2Psk => ProcessingM2MethodSpecifics :: Psk { } ,
179172 } ;
180173
181174 ProcessingM2 {
@@ -218,15 +211,14 @@ impl ProcessingM2C {
218211 } ,
219212 } ;
220213 }
221- ProcessingM2MethodSpecifics :: Psk { } => todo ! ( ) , // (*processing_m2_c).method_specifics = ProcessingM2MethodSpecificsC {
222- // kind: ProcessingM2MethodSpecificsKindC::Pm2Psk,
223- // data: ProcessingM2MethodSpecificsDataC {
224- // psk: core::mem::ManuallyDrop::new(ProcessingM2PskC) {
225- // id_cred_r: id_cred_r,
226- // }),
227- // },
228- // };
229- // }
214+ ProcessingM2MethodSpecifics :: Psk { } => {
215+ ( * processing_m2_c) . method_specifics = ProcessingM2MethodSpecificsC {
216+ kind : ProcessingM2MethodSpecificsKindC :: Pm2Psk ,
217+ data : ProcessingM2MethodSpecificsDataC {
218+ psk : core:: mem:: ManuallyDrop :: new ( ProcessingM2PskC { } ) ,
219+ } ,
220+ } ;
221+ }
230222 }
231223 }
232224}
@@ -264,14 +256,20 @@ impl CredentialC {
264256#[ repr( C ) ]
265257pub enum ProcessedM2MethodSpecificsKindC {
266258 Prm2StatStat ,
267- // Pm2Psk,
259+ Pm2Psk ,
268260}
269261#[ repr( C ) ]
270262pub struct ProcessedM2StatStatC { }
271263
264+ #[ repr( C ) ]
265+ pub struct ProcessedM2PskC {
266+ cred_r : CredentialC ,
267+ }
268+
272269#[ repr( C ) ]
273270pub union ProcessedM2MethodSpecificsDataC {
274271 pub statstat : core:: mem:: ManuallyDrop < ProcessedM2StatStatC > ,
272+ pub psk : core:: mem:: ManuallyDrop < ProcessedM2PskC > ,
275273}
276274
277275#[ repr( C ) ]
@@ -309,10 +307,16 @@ impl ProcessedM2C {
309307 let method_specifics = match self . method_specifics . kind {
310308 ProcessedM2MethodSpecificsKindC :: Prm2StatStat => {
311309 ProcessedM2MethodSpecifics :: StatStat { }
312- } // ProcessedM2MethodSpecificsKindC::Prm2Psk => {
313- // let psk = unsafe { &self.method_specifics.data.psk };
314- // ProcessedM2MethodSpecifics::Psk { ...from psk... }
315- // }
310+ }
311+ ProcessedM2MethodSpecificsKindC :: Pm2Psk => {
312+ // SAFETY: Accessing a union field is unsafe. We just matched on
313+ // `self.method_specifics.kind == ProcessedM2MethodSpecificsKindC::Pm2Psk`,
314+ // so `data.psk` is the active variant.
315+ let psk = unsafe { & self . method_specifics . data . psk } ;
316+ ProcessedM2MethodSpecifics :: Psk {
317+ cred_r : psk. cred_r . to_rust ( ) ,
318+ }
319+ }
316320 } ;
317321
318322 ProcessedM2 {
@@ -341,6 +345,17 @@ impl ProcessedM2C {
341345 } ,
342346 } ;
343347 }
348+ ProcessedM2MethodSpecifics :: Psk { cred_r } => {
349+ let mut cred_r_c = core:: mem:: MaybeUninit :: < CredentialC > :: uninit ( ) ;
350+ CredentialC :: copy_into_c ( cred_r, cred_r_c. as_mut_ptr ( ) ) ;
351+ let cred_r_c = cred_r_c. assume_init ( ) ;
352+ ( * processed_m2_c) . method_specifics = ProcessedM2MethodSpecificsC {
353+ kind : ProcessedM2MethodSpecificsKindC :: Pm2Psk ,
354+ data : ProcessedM2MethodSpecificsDataC {
355+ psk : core:: mem:: ManuallyDrop :: new ( ProcessedM2PskC { cred_r : cred_r_c } ) ,
356+ } ,
357+ } ;
358+ }
344359 }
345360 }
346361}
0 commit comments