fn with_driver<F, R>(f: F) -> Result<R>where
    F: FnOnce(&mut DriverState) -> Result<R>,