Add HabitTemplate::linked_instances() function
This commit is contained in:
parent
3b319fd4f0
commit
999bdf8d0d
4 changed files with 19 additions and 0 deletions
|
@ -25,3 +25,4 @@ kairos = "0.1.0-beta-2"
|
||||||
libimagstore = { version = "0.5.0", path = "../../../lib/core/libimagstore" }
|
libimagstore = { version = "0.5.0", path = "../../../lib/core/libimagstore" }
|
||||||
libimagerror = { version = "0.5.0", path = "../../../lib/core/libimagerror" }
|
libimagerror = { version = "0.5.0", path = "../../../lib/core/libimagerror" }
|
||||||
libimagentryedit = { version = "0.5.0", path = "../../../lib/entry/libimagentryedit" }
|
libimagentryedit = { version = "0.5.0", path = "../../../lib/entry/libimagentryedit" }
|
||||||
|
libimagentrylink = { version = "0.5.0", path = "../../../lib/entry/libimagentrylink" }
|
||||||
|
|
|
@ -24,6 +24,7 @@ error_chain! {
|
||||||
|
|
||||||
links {
|
links {
|
||||||
StoreError(::libimagstore::error::StoreError, ::libimagstore::error::StoreErrorKind);
|
StoreError(::libimagstore::error::StoreError, ::libimagstore::error::StoreErrorKind);
|
||||||
|
LinkError(::libimagentrylink::error::LinkError, ::libimagentrylink::error::LinkErrorKind);
|
||||||
KairosError(::kairos::error::KairosError, ::kairos::error::KairosErrorKind);
|
KairosError(::kairos::error::KairosError, ::kairos::error::KairosErrorKind);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -30,13 +30,16 @@ use error::*;
|
||||||
use iter::HabitInstanceStoreIdIterator;
|
use iter::HabitInstanceStoreIdIterator;
|
||||||
use util::date_to_string;
|
use util::date_to_string;
|
||||||
use util::date_from_string;
|
use util::date_from_string;
|
||||||
|
use util::IsHabitCheck;
|
||||||
|
|
||||||
|
use libimagentrylink::internal::InternalLinker;
|
||||||
use libimagstore::store::Store;
|
use libimagstore::store::Store;
|
||||||
use libimagstore::store::FileLockEntry;
|
use libimagstore::store::FileLockEntry;
|
||||||
use libimagstore::store::Entry;
|
use libimagstore::store::Entry;
|
||||||
use libimagstore::iter::get::StoreIdGetIteratorExtension;
|
use libimagstore::iter::get::StoreIdGetIteratorExtension;
|
||||||
use libimagstore::storeid::StoreId;
|
use libimagstore::storeid::StoreId;
|
||||||
use libimagstore::storeid::IntoStoreId;
|
use libimagstore::storeid::IntoStoreId;
|
||||||
|
use libimagstore::storeid::StoreIdIterator;
|
||||||
|
|
||||||
/// A HabitTemplate is a "template" of a habit. A user may define a habit "Eat vegetable".
|
/// A HabitTemplate is a "template" of a habit. A user may define a habit "Eat vegetable".
|
||||||
/// If the user ate a vegetable, she should create a HabitInstance from the Habit with the
|
/// If the user ate a vegetable, she should create a HabitInstance from the Habit with the
|
||||||
|
@ -51,6 +54,9 @@ pub trait HabitTemplate : Sized {
|
||||||
/// It uses `Store::retrieve()` underneath
|
/// It uses `Store::retrieve()` underneath
|
||||||
fn create_instance<'a>(&self, store: &'a Store) -> Result<FileLockEntry<'a>>;
|
fn create_instance<'a>(&self, store: &'a Store) -> Result<FileLockEntry<'a>>;
|
||||||
|
|
||||||
|
/// Get instances for this template
|
||||||
|
fn linked_instances(&self) -> Result<HabitInstanceStoreIdIterator>;
|
||||||
|
|
||||||
/// Check whether the instance is a habit by checking its headers for the habit data
|
/// Check whether the instance is a habit by checking its headers for the habit data
|
||||||
fn is_habit_template(&self) -> Result<bool>;
|
fn is_habit_template(&self) -> Result<bool>;
|
||||||
|
|
||||||
|
@ -84,6 +90,16 @@ impl HabitTemplate for Entry {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn linked_instances(&self) -> Result<HabitInstanceStoreIdIterator> {
|
||||||
|
let iter = self
|
||||||
|
.get_internal_links()?
|
||||||
|
.map(|link| link.get_store_id().clone())
|
||||||
|
.filter(IsHabitCheck::is_habit_instance);
|
||||||
|
|
||||||
|
let sidi = StoreIdIterator::new(Box::new(iter));
|
||||||
|
Ok(HabitInstanceStoreIdIterator::new(sidi))
|
||||||
|
}
|
||||||
|
|
||||||
/// Check whether the instance is a habit by checking its headers for the habit data
|
/// Check whether the instance is a habit by checking its headers for the habit data
|
||||||
fn is_habit_template(&self) -> Result<bool> {
|
fn is_habit_template(&self) -> Result<bool> {
|
||||||
[
|
[
|
||||||
|
|
|
@ -28,6 +28,7 @@ extern crate kairos;
|
||||||
#[macro_use] extern crate libimagerror;
|
#[macro_use] extern crate libimagerror;
|
||||||
#[macro_use] extern crate libimagstore;
|
#[macro_use] extern crate libimagstore;
|
||||||
extern crate libimagentryedit;
|
extern crate libimagentryedit;
|
||||||
|
extern crate libimagentrylink;
|
||||||
|
|
||||||
module_entry_path_mod!("habit");
|
module_entry_path_mod!("habit");
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue