You are an expert in writing code in many different languages. Your goal is to perform code completion for the following code, keeping in mind the rest of the code and the file meta data.
    Metadata details:
    filename: drain.rs
    path of file: ./repos/specs/src/storage
    
    the code of the file until where you have to start completion: use hibitset::BitSet;

#[nougat::gat(Type)]
use crate::join::LendJoin;
use crate::{
    join::{Join, RepeatableLendGet},
    storage::MaskedStorage,
    world::{Component, Index},
};

/// A draining storage
    
    unsafe fn open(self) -> (Self::Mask, Self::Value) {
        // TODO: Cloning the whole bitset here seems expensive, and it is
        // hidden from the user, but there is no obvious way to restructure
        // things to avoid this with the way that bitsets are composed together
        // for iteration.
        let mask = self.data.mask.clone();

        (mask, self.data)
    }