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: tokenizer.rs
    path of file: ./repos/modelfox/crates/text
    
    the code of the file until where you have to start completion: use std::borrow::Cow;

#[derive(Clone, Debug, serde::Serialize, serde::Deserialize)]
pub struct Tokenizer {
	pub lowercase: bool,
	pub alphanumeric: bool,
}

impl Default for Tokenizer {
	fn default() -> Self {
		Tokenizer {
			lowercase
    
	fn next(&mut self) -> Option<Self::Item> {
		// Pass over any leading whitespace.
		while self.cursor.peek()?.is_whitespace() {
			self.cursor.next();
		}
		// Mark the start of the token.
		let token_start_index = self.cursor.index();
		let first_char = self.cursor.next().unwrap();
		let mut token_contains_uppercase = first_char.is_uppercase();
		// If the first char is alphanumeric, include any subsequent alphanumeric chars.
		if first_char.is_alphanumeric() {
			while self
				.cursor
				.peek()
				.map(|c| c.is_alphanumeric())
				.unwrap_or(false)
			{
				let c = self.cursor.next().unwrap();
				token_contains_uppercase |= c.is_uppercase();
			}
		}
		let token = &self.cursor.string[token_start_index..self.cursor.index()];
		let token = if self.tokenizer.lowercase && token_contains_uppercase {
			Cow::Owned(token.to_lowercase())
		} else {
			Cow::Borrowed(token)
		};
		Some(token)
	}