backup_lib 0.2.0

backup macro to inject function into mod and actor
Documentation
use candid::CandidType;
use ic_cdk::api::time;
use candid::Deserialize;
use serde::Serialize;

use crate::backup_info::Status::{NOT_RUNNING, RUNNING};

#[derive(CandidType, Deserialize, Serialize, Clone, Debug)]
pub struct ByteReadResponse {
  pub name: String,
  pub data: Vec<u8>,
  pub hash: String,
}

#[derive(CandidType, Deserialize, Serialize, Clone, Debug)]
pub struct ByteWriteRequest {
  pub name: String,
  pub start: usize,
  pub end: usize,
  pub data: Vec<u8>,
  pub hash: String,
}

#[derive(CandidType, Serialize, Deserialize, Clone, Debug)]
pub struct BackupJob {
  pub name: String,
  pub amount: usize,
}

#[derive(CandidType, Serialize, Deserialize, Clone, Debug, Eq, PartialEq)]
pub enum Status {
  RUNNING,
  NOT_RUNNING,
}

// records struct {key1 => {hash1 => record1, hash2 => record2}, ...}
#[derive(CandidType, Serialize, Deserialize, Clone, Debug)]
pub struct BackupInfo {
  pub state: Status,
  pub last_backup: u64,
}

impl Default for BackupInfo {
  fn default() -> Self {
    BackupInfo {
      state: NOT_RUNNING,
      last_backup: 0,
    }
  }
}

impl BackupInfo {
  pub fn backup_start(&mut self) {
    self.state = RUNNING;
  }

  pub fn backup_finish(&mut self) {
    self.state = NOT_RUNNING;
    self.last_backup = time();
  }
}