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: hse.rs
    path of file: ./repos/tock/chips/stm32f4xx/src/clocks
    
    the code of the file until where you have to start completion: // Licensed under the Apache License, Version 2.0 or the MIT License.
// SPDX-License-Identifier: Apache-2.0 OR MIT
// Copyright Tock Contributors 2022.

//! HSE (high-speed external) clock driver for the STM32F4xx family. [^doc_ref]
//!
//! # Usage
//!
//! For the purposes of brevity, any error checking has been removed. In real applications, always
//! check the return values of the [Hse] methods.
//!
//! First, get a reference to the [Hse] struct:
//! ```rust,ignore
//! let hse = &base_peripherals.clocks.hse;
//! ```
//!
//! ## Start the clock
//!
//! ```rust,ignore
//! 
    
    pub fn run(hse: &Hse) {
        debug!("");
        debug!("===============================================");
        debug!("Testing HSE...");

        // By default, the HSE clock is disabled
        assert!(!hse.is_enabled());

        // HSE frequency is None
        assert_eq!(None, hse.get_frequency());

        // HSE should be enabled
        assert_eq!(Ok(()), hse.enable(HseMode::BYPASS));

        // HSE frequency is 8MHz
        assert_eq!(Some(8), hse.get_frequency());

        // Nothing should happen if the HSE clock is being enabled when already running
        assert_eq!(Ok(()), hse.enable(HseMode::BYPASS));

        // It is possible to disable the HSE clock since it is not the system clock source
        assert_eq!(Ok(()), hse.disable());

        debug!("Finished testing HSE. Everything is alright!");
        debug!("===============================================");
        debug!("");
    }