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: texturegranite.rs
    path of file: ./repos/noise-rs/examples
    
    the code of the file until where you have to start completion: extern crate noise;

use noise::{core::worley::ReturnType, utils::*, *};

mod utils;

fn main() {
    // Primary granite text
    
fn main() {
    // Primary granite texture. This generates the "roughness" of the texture
    // when lit by a light source.
    let primary_granite = Billow::<Perlin>::new(0)
        .set_frequency(8.0)
        .set_persistence(0.625)
        .set_lacunarity(2.18359375)
        .set_octaves(6);

    // Use Worley polygons to produce the small grains for the granite texture.
    let base_grains = Worley::new(1)
        .set_frequency(16.0)
        .set_return_type(ReturnType::Distance);

    // Scale the small grain values so that they can be added to the base
    // granite texture. Worley polygons normally generate pits, so apply a
    // negative scaling factor to produce bumps instead.
    let scaled_grains = ScaleBias::new(base_grains).set_scale(-0.5).set_bias(0.0);

    // Combine the primary granite texture with the small grain texture.
    let combined_granite = Add::new(primary_granite, scaled_grains);

    // Finally, perturb the granite texture to add realism.
    let final_granite = Turbulence::<_, Perlin>::new(combined_granite)
        .set_seed(2)
        .set_frequency(4.0)
        .set_power(1.0 / 8.0)
        .set_roughness(6);

    let planar_texture = PlaneMapBuilder::new(&final_granite)
        .set_size(1024, 1024)
        .build();

    let seamless_texture = PlaneMapBuilder::new(&final_granite)
        .set_size(1024, 1024)
        .set_is_seamless(true)
        .build();

    let sphere_texture = SphereMapBuilder::new(final_granite)
        .set_size(1024, 512)
        .set_bounds(-90.0, 90.0, -180.0, 180.0)
        .build();

    // Create a gray granite palette. Black and pink appear at either ends of the palette; these
    // colors provide the characteristic flecks in granite.
    let granite_gradient = ColorGradient::new()
        .clear_gradient()
        .add_gradient_point(-1.0000, [0, 0, 0, 255])
        .add_gradient_point(-0.9375, [0, 0, 0, 255])
        .add_gradient_point(-0.8750, [216, 216, 242, 255])
        .add_gradient_point(0.0000, [191, 191, 191, 255])
        .add_gradient_point(0.5000, [210, 116, 125, 255])
        .add_gradient_point(0.7500, [210, 113, 98, 255])
        .add_gradient_point(1.0000, [255, 176, 192, 255]);

    let mut renderer = ImageRenderer::new().set_gradient(granite_gradient);

    utils::write_image_to_file(
        &renderer.render(&planar_texture),
        "texture_granite_planar.png",
    );

    utils::write_image_to_file(
        &renderer.render(&seamless_texture),
        "texture_granite_seamless.png",
    );

    utils::write_image_to_file(
        &renderer.render(&sphere_texture),
        "texture_granite_sphere.png",
    );
}