fn next()

in pkcs11/pkcs11/src/session.rs [286:315]


    fn next(&mut self) -> Option<Self::Item> {
        unsafe {
            let mut object_handle = pkcs11_sys::CK_INVALID_OBJECT_HANDLE;
            let mut num_objects = 0;
            let result = (self.session.context.C_FindObjects)(
                self.session.handle,
                &mut object_handle,
                1,
                &mut num_objects,
            );
            if result != pkcs11_sys::CKR_OK {
                return Some(Err(FindObjectsError::FindObjectsFailed(
                    format!("C_FindObjects failed with {result}").into(),
                )));
            }
            match num_objects {
                0 => None,
                1 if object_handle != pkcs11_sys::CK_INVALID_OBJECT_HANDLE => {
                    Some(Ok(object_handle))
                }
                1 => Some(Err(FindObjectsError::FindObjectsFailed(
                    "C_FindObjects found 1 object but object handle is still CK_INVALID_HANDLE"
                        .into(),
                ))),
                num_objects => Some(Err(FindObjectsError::FindObjectsFailed(
                    format!("C_FindObjects found {num_objects} objects").into(),
                ))),
            }
        }
    }