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: pipeline.rs
    path of file: ./repos/iced/examples/custom_shader/src/scene
    
    the code of the file until where you have to start completion: pub mod cube;

mod buffer;
mod uniforms;
mod vertex;

pub use uniforms::Uniforms;

use buffer::Buffer;
use vertex::Vertex;

use crate::wgpu;
use crate::wgpu::util::DeviceExt;

use iced::{Rectangle, Size};

const SKY_TEXTURE_SIZE: u32 = 128;

pub struct Pipeline {
    pipeline: wgpu::RenderPipeline,
    vertices: wgpu::Buffer,
    cubes: Buffer,
    uniforms: wgpu::Buffer,
    uniform_bind_group: wgpu::BindGroup,
    depth_texture_size: Size<u32>,
    depth_view: wgpu::TextureView,
    depth_pipeline: DepthPipeline,
}

impl Pipeline {
    pub fn n
    
fn load_skybox_data() -> Vec<u8> {
    let pos_x: &[u8] = include_bytes!("../../textures/skybox/pos_x.jpg");
    let neg_x: &[u8] = include_bytes!("../../textures/skybox/neg_x.jpg");
    let pos_y: &[u8] = include_bytes!("../../textures/skybox/pos_y.jpg");
    let neg_y: &[u8] = include_bytes!("../../textures/skybox/neg_y.jpg");
    let pos_z: &[u8] = include_bytes!("../../textures/skybox/pos_z.jpg");
    let neg_z: &[u8] = include_bytes!("../../textures/skybox/neg_z.jpg");

    let data: [&[u8]; 6] = [pos_x, neg_x, pos_y, neg_y, pos_z, neg_z];

    data.iter().fold(vec![], |mut acc, bytes| {
        let i = image::load_from_memory_with_format(
            bytes,
            image::ImageFormat::Jpeg,
        )
        .unwrap()
        .to_rgba8()
        .into_raw();

        acc.extend(i);
        acc
    })
}