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: details.rs
    path of file: ./repos/gitui/src/components/commit_details
    
    the code of the file until where you have to start completion: use crate::{
	app::Environment,
	components::{
		commit_details::style::style_detail,
		dialog_paragraph,
		utils::{scroll_vertical::VerticalScroll, time_to_string},
		CommandBlocking, CommandInfo, Component, DrawableComponent,
		EventState, ScrollType,
	},
	keys::{key_match, SharedKeyConfig},
	strings::{self, order},
	ui::style::SharedTheme,
};
use anyhow::Result;
use asyncgit::sync::{
	self, CommitDetails, CommitId, CommitMessage, RepoPathRef, Tag,
};
use crossterm::event::Event;
use 
    
	fn test_textwrap() {
		let message = CommitMessage::from("Commit message");

		assert_eq!(
			get_wrapped_lines(&message, 7),
			vec!["Commit", "message"]
		);
		assert_eq!(
			get_wrapped_lines(&message, 14),
			vec!["Commit message"]
		);
		assert_eq!(
			get_wrapped_lines(&message, 0),
			vec!["Commit", "message"]
		);

		let message_with_newline =
			CommitMessage::from("Commit message\n");

		assert_eq!(
			get_wrapped_lines(&message_with_newline, 7),
			vec!["Commit", "message"]
		);
		assert_eq!(
			get_wrapped_lines(&message_with_newline, 14),
			vec!["Commit message"]
		);
		assert_eq!(
			get_wrapped_lines(&message, 0),
			vec!["Commit", "message"]
		);

		let message_with_body = CommitMessage::from(
			"Commit message\nFirst line\nSecond line",
		);

		assert_eq!(
			get_wrapped_lines(&message_with_body, 7),
			vec![
				"Commit", "message", "First", "line", "Second",
				"line"
			]
		);
		assert_eq!(
			get_wrapped_lines(&message_with_body, 14),
			vec!["Commit message", "First line", "Second line"]
		);
		assert_eq!(
			get_wrapped_lines(&message_with_body, 7),
			vec![
				"Commit", "message", "First", "line", "Second",
				"line"
			]
		);
	}