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: plane.rs
    path of file: ./repos/gdnative/gdnative-core/src/core_types/geom
    
    the code of the file until where you have to start completion: use crate::core_types::{IsEqualApprox, Vector3};


    
    pub fn new(normal: Vector3, d: f32) -> Self {
        // Design: we could call normalize() here, however that suggests to the user that vectors with non-unit
        // length are valid normals, and tempts users to assign those directly to the field. It's also confusing
        // if Plane { normal, d } and Plane::new(normal, d) have fundamentally different behaviors.
        // If invariants were enforced at the field level using setters, the story might be different.

        let result = Self { normal, d };
        result.ensure_normalized();
        result
    }