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: file_structure.rs
    path of file: ./repos/mun/crates/mun_language_server/src
    
    the code of the file until where you have to start completion: use mun_syntax::{
    ast::{self, NameOwner},
    match_ast, AstNode, SourceFile, SyntaxNode, TextRange, WalkEvent,
};

use crate::SymbolKind;

/// A description of a symbol in a source file.
#[derive(Debug, Clone)]
pub struct StructureNode {
    /// An optional parent of this symbol. Refers to the index of the symbol in
    /// the collection that this instance resides in.
    pub parent: Option<usize>,

    /// The text label
    pub label: String,

    /// The range to navigate to if selected
    pub navigation_range: TextRange,

    /// The entire range of the node in the file
    pub node_range: Tex
    
pub(crate) fn file_structure(file: &SourceFile) -> Vec<StructureNode> {
    let mut result = Vec::new();
    let mut stack = Vec::new();

    for event in file.syntax().preorder() {
        match event {
            WalkEvent::Enter(node) => {
                if let Some(mut symbol) = try_convert_to_structure_node(&node) {
                    symbol.parent = stack.last().copied();
                    stack.push(result.len());
                    result.push(symbol);
                }
            }
            WalkEvent::Leave(node) => {
                if try_convert_to_structure_node(&node).is_some() {
                    stack.pop().unwrap();
                }
            }
        }
    }

    result
}