Updating installation instructions
[ouch.git] / src / file.rs
blobc14d2d8c284a7e9ae1c266ede5e2297e847e0d92
1 use std::path::Path;
3 use crate::extension::Extension;
5 #[derive(Debug, Clone, PartialEq, Eq)]
6 pub struct File<'a> {
7     /// File's (relative) path
8     pub path: &'a Path,
9     /// The bytes that compose the file.
10     /// Only used when the whole file is kept in-memory
11     pub contents_in_memory: Option<Vec<u8>>,
12     /// Note: extension here might be a misleading name since
13     /// we don't really care about any extension other than supported compression ones.
14     ///
15     /// So, for example, if a file has pathname "image.jpeg", it does have a JPEG extension but will
16     /// be represented as a None over here since that's not an extension we're particularly interested in
17     pub extension: Option<Extension>,
20 impl<'a> File<'a> {
21     pub fn from(path: &'a Path) -> crate::Result<Self> {
22         let extension = Extension::from(path.as_ref()).ok();
24         Ok(File { path, contents_in_memory: None, extension })
25     }