1use std::fs::File;
2use std::io;
3use std::path::Path;
4
5use polars_error::*;
6
7pub fn _limit_path_len_io_err(path: &Path, err: io::Error) -> PolarsError {
8 let path = path.to_string_lossy();
9 let msg = if path.len() > 88 && !polars_config::config().verbose() {
10 let truncated_path: String = path.chars().skip(path.len() - 88).collect();
11 format!("{err}: ...{truncated_path} (set POLARS_VERBOSE=1 to see full path)")
12 } else {
13 format!("{err}: {path}")
14 };
15 io::Error::new(err.kind(), msg).into()
16}
17
18pub fn open_file(path: &Path) -> PolarsResult<File> {
19 File::open(path).map_err(|err| _limit_path_len_io_err(path, err))
20}
21
22pub fn open_file_write(path: &Path) -> PolarsResult<File> {
23 std::fs::OpenOptions::new()
24 .write(true)
25 .create(true)
26 .truncate(true)
27 .open(path)
28 .map_err(|err| _limit_path_len_io_err(path, err))
29}
30
31pub fn create_file(path: &Path) -> PolarsResult<File> {
32 File::create(path).map_err(|err| _limit_path_len_io_err(path, err))
33}