1use std::env::temp_dir;
2
3use crate::{editor_call_builder::EditorCallBuilder, errors::OpenEditorError};
4
5mod editor;
6pub mod editor_call_builder;
7mod editor_kind;
8pub mod errors;
9
10pub fn edit_in_editor(string: &str) -> Result<String, OpenEditorError> {
15 let mut filename = temp_dir();
16 filename.push(String::from("open_editor_tmp_file"));
17
18 std::fs::write(&filename, string).map_err(OpenEditorError::FileManipulationFail)?;
20
21 EditorCallBuilder::new(filename.clone())?.call_editor()?;
22 let result =
23 std::fs::read_to_string(&filename).map_err(OpenEditorError::FileManipulationFail)?;
24
25 std::fs::remove_file(&filename).map_err(|_| {
27 OpenEditorError::TempFileCleanupFail(filename.to_string_lossy().into_owned())
28 })?;
29
30 Ok(result)
31}
32pub fn edit_mut_in_editor(string: &mut String) -> Result<(), OpenEditorError> {
38 *string = edit_in_editor(string)?;
39 Ok(())
40}
41pub fn open_editor() -> Result<String, OpenEditorError> {
45 edit_in_editor("")
46}