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: all_symbols.rs
    path of file: ./repos/artichoke/spinoso-symbol/src
    
    the code of the file until where you have to start completion: use core::iter::FusedIterator;
use core::ops::Range;

use artichoke_core::intern::Intern;

use crate::Symbol;

/// Extension trait to return an iterator that returns all symbol identifiers
/// stored in an [interner] as [`Symbol`]s.
///
/// The returned iterator yields [`Symbol`] as its item type.
///
/// Implementors of this trait must issue symbol identifiers as an [arithmetic
/// progression] with a common difference of 1. The sequence of symbol
/// identifiers must be representable by a [`Range<u32>`].
///
/// This trait is automatically implemented for all types that implement
//
    
    fn one_offset_yielded() {
        let interner = OffByOneInterner::default();
        let mut all_symbols = interner.all_symbols();
        assert_eq!(all_symbols.next(), None);

        let interner = OffByOneInterner(5);
        let mut all_symbols = interner.all_symbols();
        assert_eq!(all_symbols.next(), Some(Symbol::new(1)));
        assert_eq!(all_symbols.next(), Some(Symbol::new(2)));
        assert_eq!(all_symbols.next(), Some(Symbol::new(3)));
        assert_eq!(all_symbols.next(), Some(Symbol::new(4)));
        assert_eq!(all_symbols.next(), Some(Symbol::new(5)));
        assert_eq!(all_symbols.next(), None);

        let interner = OffByOneInterner(u32::MAX);
        let mut all_symbols = interner.all_symbols();
        assert_eq!(all_symbols.next(), Some(Symbol::new(1)));
        assert_eq!(all_symbols.next_back(), Some(Symbol::new(u32::MAX - 1)));
    }