bakare 0.1.0

modern and simple, yet efficient backup solution
Documentation
use serde::{Deserialize, Serialize};

use crate::repository::{item::RepositoryItem, ItemId};
use crate::version::Version;

#[derive(Clone, Debug, PartialOrd, PartialEq, Ord, Eq, Serialize, Deserialize)]
pub struct IndexItem {
    relative_path: String,
    original_source_path: String,
    id: ItemId,
    version: Version,
}

impl IndexItem {
    pub fn from(original_source_path: String, relative_path: String, id: ItemId, version: Version) -> IndexItem {
        IndexItem {
            relative_path,
            original_source_path,
            id,
            version,
        }
    }

    pub fn next_version(&self, id: ItemId, relative_path: String) -> IndexItem {
        IndexItem {
            original_source_path: self.original_source_path.clone(),
            version: self.version.next(),
            relative_path,
            id,
        }
    }

    pub fn version(&self) -> Version {
        self.version
    }

    pub fn id(&self) -> ItemId {
        self.id.clone()
    }

    pub fn relative_path(&self) -> &str {
        &self.relative_path
    }

    pub fn original_source_path(&self) -> &str {
        &self.original_source_path
    }
}

impl From<RepositoryItem> for IndexItem {
    fn from(i: RepositoryItem) -> Self {
        IndexItem {
            relative_path: i.relative_path().to_string(),
            original_source_path: i.original_source_path().to_string(),
            id: i.id().clone(),
            version: *i.version(),
        }
    }
}