rvlib/
meta_data.rs

1use std::path::{Path, PathBuf};
2
3use serde::{Deserialize, Serialize};
4
5use crate::{
6    cfg::{AzureBlobCfg, PyHttpReaderCfg, SshCfg},
7    file_util::PathPair,
8};
9
10#[derive(Clone, Default, PartialEq, Eq)]
11pub struct MetaDataFlags {
12    pub is_loading_screen_active: Option<bool>,
13    pub is_file_list_empty: Option<bool>,
14}
15
16#[derive(Serialize, Deserialize, Clone, Default, Debug, PartialEq, Eq)]
17pub enum ConnectionData {
18    Ssh(SshCfg),
19    PyHttp(PyHttpReaderCfg),
20    #[cfg(feature = "azure_blob")]
21    AzureBlobCfg(AzureBlobCfg),
22    #[default]
23    None,
24}
25#[derive(Clone, Default, PartialEq, Eq)]
26pub struct MetaData {
27    file_path_pair: Option<PathPair>,
28    pub file_selected_idx: Option<usize>,
29    pub connection_data: ConnectionData,
30    pub ssh_cfg: Option<SshCfg>,
31    pub opened_folder: Option<PathPair>,
32    pub export_folder: Option<String>,
33    pub flags: MetaDataFlags,
34    prj_path: Option<PathBuf>,
35}
36impl MetaData {
37    #[allow(clippy::too_many_arguments)]
38    pub fn new(
39        file_path_pair: Option<PathPair>,
40        file_selected_idx: Option<usize>,
41        connection_data: ConnectionData,
42        ssh_cfg: Option<SshCfg>,
43        opened_folder: Option<PathPair>,
44        export_folder: Option<String>,
45        flags: MetaDataFlags,
46        prj_path: Option<PathBuf>,
47    ) -> Self {
48        MetaData {
49            file_path_pair,
50            file_selected_idx,
51            connection_data,
52            ssh_cfg,
53            opened_folder,
54            export_folder,
55            flags,
56            prj_path,
57        }
58    }
59    pub fn from_filepath(
60        file_path_absolute: String,
61        file_selected_idx: usize,
62        prj_path: &Path,
63    ) -> Self {
64        MetaData {
65            file_path_pair: Some(PathPair::new(file_path_absolute, prj_path)),
66            file_selected_idx: Some(file_selected_idx),
67            connection_data: ConnectionData::None,
68            ssh_cfg: None,
69            opened_folder: None,
70            export_folder: None,
71            flags: MetaDataFlags::default(),
72            prj_path: Some(prj_path.to_path_buf()),
73        }
74    }
75    pub fn file_path_absolute(&self) -> Option<&str> {
76        self.file_path_pair.as_ref().map(|fpp| fpp.path_absolute())
77    }
78    pub fn file_path_relative(&self) -> Option<&str> {
79        self.file_path_pair.as_ref().map(|fpp| fpp.path_relative())
80    }
81    pub fn prj_path(&self) -> Option<&Path> {
82        self.prj_path.as_deref()
83    }
84}